diff --git a/README.md b/README.md index eab32ba..c515fde 100644 --- a/README.md +++ b/README.md @@ -1,109 +1,109 @@ -# D-Lab [WorkshopName] Workshop - -[![DataHub](https://img.shields.io/badge/launch-datahub-blue)](DATAHUB_LINK_HERE) -[![Binder](https://mybinder.org/badge_logo.svg)](BINDER_LINK_HERE) -[![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) - -This repository contains the materials for D-Lab [WorkshopName] workshop. We -recommend attending [D-LabWorkshop1](D-LabWorkshop1Link), -[D-LabWorkshop2](D-LabWorkshop2Link), and -[AdditionalWorkshopsAsNeeded](LinksToWorkshops) prior to this workshop. - -## Workshop Goals - -In this workshop, we provide [WorkshopGoal]. First, we’ll cover [Aim1]. Then, -we’ll explore [Aim2]. - -_Only if necessary:_ If you are not familiar with material in -[D-LabWorkshop1](D-LabWorkshop1Link), [D-LabWorkshop2](D-LabWorkshop2Link), and -[AdditionalWorkshopsAsNeeded](LinksToWorkshops), we recommend attending those -workshops first. - -## Learning Objectives - -After this workshop, you will be able to: - -- [LearningObjective1]. -- [LearningObjective2]. -- [LearningObjective3]. - -This workshop does not cover the following: - -- [NotCovered1]. These are covered in [D-LabWorkshopName](URL). -- [NotCovered2]. These are covered in [D-LabWorkshopName](URL). - - -## Installation Instructions - -We will use [RStudio/Python] to go through the workshop materials, which requires installation of [Software]. Complete the following steps: - -1. This step(s) details software to download, with a link. -2. Download these workshop materials: - * Click the green "Code" button in the top right of the repository information. - * Click "Download Zip". - * Extract this file to a folder on your computer where you can easily access it (we recommend Desktop). -3. Optional: if you’re familiar with git, you can instead clone this repository by opening a terminal and entering [GitCloneCommand]. - -## Is [Language] not Working on Your Computer? - -If you do not have [Language] installed and the materials loaded on your -workshop by the time it starts, we *strongly* recommend using the UC Berkeley -Datahub to run the materials for these lessons. You can access the DataHub by -clicking the following button: - -[![DataHub](https://img.shields.io/badge/launch-datahub-blue)](DATAHUB_LINK_HERE) - -The DataHub downloads this repository, along with any necessary packages, and -allows you to run the materials in an RStudio instance on UC Berkeley's servers. -No installation is necessary from your end - you only need an internet browser -and a CalNet ID to log in. By using the DataHub, you can save your work and come -back to it at any time. When you want to return to your saved work, just go -straight to the [D-Lab DataHub](https://dlab.datahub.berkeley.edu), sign in, and -you click on the `[Workshop-Name]` folder. - -If you don't have a Berkeley CalNet ID, you can still run these lessons in the cloud, by clicking this button: - -[![Binder](https://mybinder.org/badge_logo.svg)](BINDER_LINK_HERE) - -By using this button, however, you cannot save your work. - - -## Run the Code - -Now that you have all the required software and materials, you need to run the code: - -Provide instructions on running the code, including how to load relevant software (RStudio, Jupyter Notebooks, etc.) and which file to open up. See other repositories for examples. - -Additionally, provide instructions on how to run code once it’s open (running Jupyter cells, RMarkdown cells, etc.). - -# Additional Resources - -Check out the following resources to learn more about [Workshop topics]: - -* [Resource1](LinkToResource1): _Explain Resource 1_ -* [Resource2](LinkToResource2): _Explain Resource 2_ -* [...] - - -# About the UC Berkeley D-Lab - -D-Lab works with Berkeley faculty, research staff, and students to advance data-intensive social science and humanities research. Our goal at D-Lab is to provide practical training, staff support, resources, and space to enable you to use R for your own research applications. Our services cater to all skill levels and no programming, statistical, or computer science backgrounds are necessary. We offer these services in the form of workshops, one-to-one consulting, and working groups that cover a variety of research topics, digital tools, and programming languages. - -Visit the [D-Lab homepage](https://dlab.berkeley.edu/) to learn more about us. You can view our [calendar](https://dlab.berkeley.edu/events/calendar) for upcoming events, learn about how to utilize our [consulting](https://dlab.berkeley.edu/consulting) and [data](https://dlab.berkeley.edu/data) services, and check out upcoming [workshops](https://dlab.berkeley.edu/events/workshops). - -# Other D-Lab [Language] Workshops - -Here are other [Language] workshops offered by the D-Lab: - -## Basic Competency - -**Provide a list of workshops here.** - -## Intermediate/Advanced Competency - -**Provide a list of workshops here.** - -# Contributors - -**Provide a list of contributors here, with links to their webpages (D-Lab or -private).** +# D-Lab Python Geospatial Workshop + +[![DataHub](https://img.shields.io/badge/launch-datahub-blue)](https://datahub.berkeley.edu/hub/user-redirect/git-pull?repo=https%3A%2F%2Fgithub.com%2Fmeiqingli%2FPython-Geospatial-Fundamentals-Pilot&branch=main&urlpath=tree%2FPython-Geospatial-Fundamentals-Pilot%2F) +[![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) + +This repository contains the materials for D-Lab [WorkshopName] workshop. We +recommend attending [D-LabWorkshop1](D-LabWorkshop1Link), +[D-LabWorkshop2](D-LabWorkshop2Link), and +[AdditionalWorkshopsAsNeeded](LinksToWorkshops) prior to this workshop. + +## Workshop Goals + +In this workshop, we provide [WorkshopGoal]. First, we’ll cover [Aim1]. Then, +we’ll explore [Aim2]. + +_Only if necessary:_ If you are not familiar with material in +[D-LabWorkshop1](D-LabWorkshop1Link), [D-LabWorkshop2](D-LabWorkshop2Link), and +[AdditionalWorkshopsAsNeeded](LinksToWorkshops), we recommend attending those +workshops first. + +## Learning Objectives + +After this workshop, you will be able to: + +- Recognize different forms of geospatial data and coordinate reference system (CRS). +- Use `GeoPandas` and `matplotlib` libraries to map and analyze spatial data. +- Apply more advanced Python libraries for interactive visualization. +- Choose domain-specific spatial datasets to create your own maps. + +This workshop does not cover the following: + +- [NotCovered1]. These are covered in [D-LabWorkshopName](URL). +- [NotCovered2]. These are covered in [D-LabWorkshopName](URL). + + +## Installation Instructions + +We will use Python to go through the workshop materials, which requires installation of [Software]. Complete the following steps: + +1. This step(s) details software to download, with a link. +2. Download these workshop materials: + * Click the green "Code" button in the top right of the repository information. + * Click "Download Zip". + * Extract this file to a folder on your computer where you can easily access it (we recommend Desktop). +3. Optional: if you’re familiar with git, you can instead clone this repository by opening a terminal and entering [GitCloneCommand]. + +## Is [Language] not Working on Your Computer? + +If you do not have [Language] installed and the materials loaded on your +workshop by the time it starts, we *strongly* recommend using the UC Berkeley +Datahub to run the materials for these lessons. You can access the DataHub by +clicking the following button: + +[![DataHub](https://img.shields.io/badge/launch-datahub-blue)](https://datahub.berkeley.edu/hub/user-redirect/git-pull?repo=https%3A%2F%2Fgithub.com%2Fmeiqingli%2FPython-Geospatial-Fundamentals-Pilot&branch=main&urlpath=tree%2FPython-Geospatial-Fundamentals-Pilot%2F) + +The DataHub downloads this repository, along with any necessary packages, and +allows you to run the materials in an RStudio instance on UC Berkeley's servers. +No installation is necessary from your end - you only need an internet browser +and a CalNet ID to log in. By using the DataHub, you can save your work and come +back to it at any time. When you want to return to your saved work, just go +straight to the [D-Lab DataHub](https://dlab.datahub.berkeley.edu), sign in, and +you click on the `[Workshop-Name]` folder. + +If you don't have a Berkeley CalNet ID, you can still run these lessons in the cloud, by clicking this button: + +[![Binder](https://mybinder.org/badge_logo.svg)](BINDER_LINK_HERE) + +By using this button, however, you cannot save your work. + + +## Run the Code + +Now that you have all the required software and materials, you need to run the code: + +Provide instructions on running the code, including how to load relevant software (RStudio, Jupyter Notebooks, etc.) and which file to open up. See other repositories for examples. + +Additionally, provide instructions on how to run code once it’s open (running Jupyter cells, RMarkdown cells, etc.). + +# Additional Resources + +Check out the following resources to learn more about [Workshop topics]: + +* [Resource1](LinkToResource1): _Explain Resource 1_ +* [Resource2](LinkToResource2): _Explain Resource 2_ +* [...] + + +# About the UC Berkeley D-Lab + +D-Lab works with Berkeley faculty, research staff, and students to advance data-intensive social science and humanities research. Our goal at D-Lab is to provide practical training, staff support, resources, and space to enable you to use R for your own research applications. Our services cater to all skill levels and no programming, statistical, or computer science backgrounds are necessary. We offer these services in the form of workshops, one-to-one consulting, and working groups that cover a variety of research topics, digital tools, and programming languages. + +Visit the [D-Lab homepage](https://dlab.berkeley.edu/) to learn more about us. You can view our [calendar](https://dlab.berkeley.edu/events/calendar) for upcoming events, learn about how to utilize our [consulting](https://dlab.berkeley.edu/consulting) and [data](https://dlab.berkeley.edu/data) services, and check out upcoming [workshops](https://dlab.berkeley.edu/events/workshops). + +# Other D-Lab [Language] Workshops + +Here are other [Language] workshops offered by the D-Lab: + +## Basic Competency + +**Provide a list of workshops here.** + +## Intermediate/Advanced Competency + +**Provide a list of workshops here.** + +# Contributors + +**Provide a list of contributors here, with links to their webpages (D-Lab or +private).** diff --git a/data/California_County_Boundaries/California_County_Boundaries.xml b/data/California_County_Boundaries/California_County_Boundaries.xml new file mode 100644 index 0000000..30dea91 --- /dev/null +++ b/data/California_County_Boundaries/California_County_Boundaries.xml @@ -0,0 +1,57 @@ + + + + In late 1996, the Dept of Conservation (DOC) surveyed state +and federal agencies about the county boundary coverage they used. As a +result, DOC adopted the 1:24,000 (24K) scale U.S. Bureau of Reclamation +(USBR) dataset (USGS source) for their Farmland Mapping and Monitoring +Program (FMMP) but with several modifications. Detailed documentation of + these changes is provided by FMMP and included in the lineage section +of the metadata.A +dataset was made available (approximately 2004) through CALFIRE - FRAP +and the California Spatial Information Library (CaSIL), with additional +updates throughout subsequent years. More recently, an + effort was made to improve the coastal linework by using the previous +interior linework from the 24k data, but replacing the coastal linework +based on NOAA's ERMA coastal dataset (which used NAIP 2010). In + this dataset, all bays (plus bay islands and constructed features) are +merged into the mainland, and coastal features (such as islands and +constructed features) are not included, with the exception of the +Channel Islands which ARE included.This service represents the latest released version, and is updated when new versions are released. As of June, 2019 it +represents cnty19_1. + California County Boundaries. This layer provides an initial offering as "best available" at 1:24,000 scale. Hosted on CAL FIRE AGOL. + + + + None + California + Counties + County + CAL FIRE + FRAP + Boundaries + Boundaries and Ownership + CAOpenData + California Department of Forestry and Fire Protection + + + None + The State of California and the Department of Forestry and +Fire Protection make no representations or warranties regarding the accuracy of data or maps. +Neither the State nor the Department shall be liable under any circumstances for any direct, special, +incidental, or consequential damages with respect to any claim by any user or third party on account of, + or arising from, the use of data or maps. +For more information about this product, date or terms of use, +contact calfire.egis@fire.ca.gov. + + + + + U.S. Bureau of Reclamation, California Department of Conservation, California Department of Fish and Game, California Department of Forestry and Fire Protection, National Oceanic and Atmospheric Administration + + + FGDC Content Standard for Digital Geospatial Metadata + FGDC-STD-001-1998 + local time + + diff --git a/data/California_County_Boundaries/cnty19_1.cpg b/data/California_County_Boundaries/cnty19_1.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/data/California_County_Boundaries/cnty19_1.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/data/California_County_Boundaries/cnty19_1.dbf b/data/California_County_Boundaries/cnty19_1.dbf new file mode 100644 index 0000000..32d3ce5 Binary files /dev/null and b/data/California_County_Boundaries/cnty19_1.dbf differ diff --git a/data/California_County_Boundaries/cnty19_1.prj b/data/California_County_Boundaries/cnty19_1.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/data/California_County_Boundaries/cnty19_1.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/data/California_County_Boundaries/cnty19_1.shp b/data/California_County_Boundaries/cnty19_1.shp new file mode 100644 index 0000000..878534d Binary files /dev/null and b/data/California_County_Boundaries/cnty19_1.shp differ diff --git a/data/California_County_Boundaries/cnty19_1.shx b/data/California_County_Boundaries/cnty19_1.shx new file mode 100644 index 0000000..7a25605 Binary files /dev/null and b/data/California_County_Boundaries/cnty19_1.shx differ diff --git a/data/alameda_county.cpg b/data/alameda_county.cpg new file mode 100644 index 0000000..cd89cb9 --- /dev/null +++ b/data/alameda_county.cpg @@ -0,0 +1 @@ +ISO-8859-1 \ No newline at end of file diff --git a/data/alameda_county.dbf b/data/alameda_county.dbf new file mode 100644 index 0000000..9383127 Binary files /dev/null and b/data/alameda_county.dbf differ diff --git a/data/alameda_county.json b/data/alameda_county.json new file mode 100644 index 0000000..5a3ecf9 --- /dev/null +++ b/data/alameda_county.json @@ -0,0 +1,7 @@ +{ +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::3857" } }, +"features": [ +{ "type": "Feature", "properties": { "OBJECTID": 1, "COUNTY_NAM": "Alameda", "COUNTY_ABB": "ALA", "COUNTY_NUM": 1, "COUNTY_COD": "01", "COUNTY_FIP": "001", "ISLAND": null, "GlobalID": "{E6F92268-D2DD-4CFB-8B79-5B4B2F07C559}", "SHAPE_Leng": 308998.65097530856, "SHAPE_Area": -3402787058.9854326 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -13611173.2331, 4566017.932300001382828 ], [ -13611061.159400001168251, 4565938.21679999679327 ], [ -13610997.4082, 4565942.787299998104572 ], [ -13610970.3195, 4565936.862300001084805 ], [ -13610927.782499998807907, 4565921.265900000929832 ], [ -13610910.4095, 4565906.511799998581409 ], [ -13610894.9475, 4565898.755900003015995 ], [ -13610879.4915, 4565892.9054000005126 ], [ -13610860.188000001013279, 4565890.218900002539158 ], [ -13610831.1697, 4565898.885399997234344 ], [ -13610798.3453, 4565904.988799996674061 ], [ -13610782.842500001192093, 4565913.766699999570847 ], [ -13610767.3961, 4565925.726700000464916 ], [ -13610757.7264, 4565928.190999999642372 ], [ -13610746.1592, 4565940.805600002408028 ], [ -13610734.5078, 4565943.2566 ], [ -13610724.879099998623133, 4565948.27250000089407 ], [ -13610699.7529, 4565953.164800003170967 ], [ -13610641.7742, 4565948.890900000929832 ], [ -13610591.4938, 4565962.481600001454353 ], [ -13610550.958, 4565955.162799999117851 ], [ -13610529.6732, 4565944.183600001037121 ], [ -13610510.370900001376867, 4565944.036700002849102 ], [ -13610494.913800001144409, 4565935.644199997186661 ], [ -13610479.4437, 4565920.895900003612041 ], [ -13610462.0618, 4565896.607900001108646 ], [ -13610431.1132, 4565879.1963 ], [ -13610407.91270000115037, 4565880.91780000180006 ], [ -13610388.557300001382828, 4565874.395999997854233 ], [ -13610373.120900001376867, 4565876.821800000965595 ], [ -13610357.664, 4565868.432899996638298 ], [ -13610336.4462, 4565851.104500003159046 ], [ -13610324.7941, 4565831.934500001370907 ], [ -13610313.1749, 4565819.124700002372265 ], [ -13610303.561900001019239, 4565794.892800003290176 ], [ -13610284.2359, 4565765.497900001704693 ], [ -13610270.7293, 4565753.302199997007847 ], [ -13610259.054499998688698, 4565737.318999998271465 ], [ -13610232.027800001204014, 4565693.241800002753735 ], [ -13610222.41, 4565648.027300000190735 ], [ -13610220.4338, 4565628.296599999070168 ], [ -13610205.0016999989748, 4565597.654799997806549 ], [ -13610183.6901, 4565590.492899999022484 ], [ -13610148.899500001221895, 4565586.400100000202656 ], [ -13610135.3936, 4565574.218099996447563 ], [ -13610094.8316, 4565559.901900000870228 ], [ -13610079.385, 4565561.05799999833107 ], [ -13610067.743, 4565551.423600003123283 ], [ -13610056.1292, 4565548.791400000452995 ], [ -13610048.4506, 4565539.188900001347065 ], [ -13610042.6094, 4565527.700300000607967 ], [ -13610019.4603, 4565433.426299996674061 ], [ -13610029.145100001245737, 4565399.177799999713898 ], [ -13610027.184799998998642, 4565336.857900001108646 ], [ -13610021.4101, 4565297.391699999570847 ], [ -13610007.8488, 4565282.026600003242493 ], [ -13609913.1568, 4565317.503200002014637 ], [ -13609888.0507, 4565319.85530000180006 ], [ -13609860.9731, 4565312.642099998891354 ], [ -13609847.4852, 4565306.173299998044968 ], [ -13609831.9894, 4565284.4425999969244 ], [ -13609818.441, 4565275.435099996626377 ], [ -13609803.0055, 4565256.229599997401237 ], [ -13609785.5998, 4565216.6853 ], [ -13609760.472, 4565192.314800001680851 ], [ -13609743.0537, 4565192.183600001037121 ], [ -13609729.561099998652935, 4565197.165100000798702 ], [ -13609687.002700001001358, 4565225.433399997651577 ], [ -13609650.3363, 4565258.192100003361702 ], [ -13609634.8534, 4565266.965999998152256 ], [ -13609621.3496, 4565281.479299999773502 ], [ -13609605.8471, 4565290.264799997210503 ], [ -13609598.1778, 4565290.192199997603893 ], [ -13609584.6152, 4565293.904700003564358 ], [ -13609559.480999998748302, 4565289.24889999628067 ], [ -13609545.9338, 4565282.779799997806549 ], [ -13609538.2333, 4565265.560199998319149 ], [ -13609526.6109, 4565253.384999997913837 ], [ -13609516.9395, 4565226.601300001144409 ], [ -13609497.609000001102686, 4565190.214000001549721 ], [ -13609478.3027, 4565139.834600001573563 ], [ -13609472.514600001275539, 4565110.550200000405312 ], [ -13609474.4897, 4565081.953599996864796 ], [ -13609499.5544, 4564964.553300000727177 ], [ -13609507.2884, 4564856.538199998438358 ], [ -13609501.463, 4564832.345299996435642 ], [ -13609493.7918, 4564813.841300003230572 ], [ -13609484.1004, 4564797.864799998700619 ], [ -13609468.684500001370907, 4564786.931999996304512 ], [ -13609443.481800001114607, 4564781.008599996566772 ], [ -13609401.032, 4564805.465199999511242 ], [ -13609389.4088, 4564814.9037000015378 ], [ -13609342.978500001132488, 4564820.26240000128746 ], [ -13609319.795699998736382, 4564811.800300002098083 ], [ -13609283.0689, 4564801.9746999964118 ], [ -13609259.8849, 4564801.791500002145767 ], [ -13609192.296799998730421, 4564782.17620000243187 ], [ -13609174.8675, 4564764.86879999935627 ], [ -13609159.452100001275539, 4564753.940600000321865 ], [ -13609111.0762, 4564689.022600002586842 ], [ -13609089.8232, 4564644.988300003111362 ], [ -13609080.2158, 4564619.168799996376038 ], [ -13609078.210900001227856, 4564602.308899998664856 ], [ -13609085.9619, 4564543.244699999690056 ], [ -13609099.519299998879433, 4564520.150499999523163 ], [ -13609111.0942, 4564507.854000002145767 ], [ -13609122.694699998944998, 4564490.7871999964118 ], [ -13609120.7658, 4564466.285199999809265 ], [ -13609089.829300001263618, 4564444.108400002121925 ], [ -13609033.791299998760223, 4564418.547200001776218 ], [ -13609002.868700001388788, 4564434.511399999260902 ], [ -13608962.2727, 4564476.133599996566772 ], [ -13608929.4311, 4564466.337499998509884 ], [ -13608929.389600001275539, 4564461.24889999628067 ], [ -13608838.5588, 4564411.253300003707409 ], [ -13608811.5065, 4564389.098700001835823 ], [ -13608801.8759, 4564357.242399998009205 ], [ -13608796.080699998885393, 4564329.228100001811981 ], [ -13608738.059799998998642, 4564153.938000001013279 ], [ -13608720.682500001043081, 4564092.7787000015378 ], [ -13608712.9828, 4564057.118100002408028 ], [ -13608838.601, 4563872.524099998176098 ], [ -13608765.1777, 4563824.578699998557568 ], [ -13608716.8412, 4563497.783299997448921 ], [ -13607976.5962, 4562799.90089999884367 ], [ -13607914.760499998927116, 4562835.310599997639656 ], [ -13607820.102400001138449, 4562907.629000000655651 ], [ -13607775.6149, 4562929.507799997925758 ], [ -13607613.238699998706579, 4563029.87389999628067 ], [ -13606523.250799998641014, 4562651.589900001883507 ], [ -13605914.454300001263618, 4562297.90259999781847 ], [ -13605582.0422, 4561772.706000000238419 ], [ -13605576.1985, 4561772.665899999439716 ], [ -13605539.4594, 4561717.695299997925758 ], [ -13605504.6722, 4561658.934199996292591 ], [ -13605456.3701, 4561587.989200003445148 ], [ -13605408.0464, 4561538.961199998855591 ], [ -13605295.9597, 4561444.602799996733665 ], [ -13605238.0302, 4561400.582900002598763 ], [ -13605207.0887, 4561372.365800000727177 ], [ -13605100.811700001358986, 4561084.850900001823902 ], [ -13605056.299800001084805, 4560940.227399997413158 ], [ -13605373.2643, 4560757.97860000282526 ], [ -13605400.3859, 4560734.694899998605251 ], [ -13605446.7308, 4560705.21509999781847 ], [ -13605601.3356, 4560482.520199999213219 ], [ -13605622.594700001180172, 4560437.258299998939037 ], [ -13605466.060899998992682, 4560351.44200000166893 ], [ -13605263.1239, 4560090.797200001776218 ], [ -13605052.5048, 4559806.888700000941753 ], [ -13604855.3245, 4559551.06360000371933 ], [ -13604650.433400001376867, 4559273.257600001990795 ], [ -13604462.9712, 4559030.864100001752377 ], [ -13604410.8178, 4558969.739200003445148 ], [ -13604455.2159, 4558853.526799999177456 ], [ -13604310.2556, 4558655.33330000191927 ], [ -13604227.1779, 4558530.429700002074242 ], [ -13603715.0623, 4558432.651900000870228 ], [ -13603581.6741, 4558410.54900000244379 ], [ -13603355.5481, 4557951.495899997651577 ], [ -13603326.559, 4557900.110299997031689 ], [ -13603160.323800001293421, 4557799.881899997591972 ], [ -13602945.8217, 4557585.8496999964118 ], [ -13602688.7615, 4557323.805200003087521 ], [ -13602681.0522, 4557228.450800001621246 ], [ -13602764.127, 4557129.431800000369549 ], [ -13602561.2424, 4556934.885300002992153 ], [ -13602373.7256, 4556866.231499999761581 ], [ -13601981.441599998623133, 4556518.84179999679327 ], [ -13601830.694400001317263, 4556541.978799998760223 ], [ -13601689.6206, 4556508.986199997365475 ], [ -13601581.308600001037121, 4556469.92230000346899 ], [ -13601442.2225, 4556035.5033999979496 ], [ -13601660.5703, 4555601.057599999010563 ], [ -13601768.8299, 4555396.856899999082088 ], [ -13601788.1734, 4555083.588100001215935 ], [ -13601641.2996, 4554773.012599997222424 ], [ -13601772.6439, 4554311.820900000631809 ], [ -13601649.0117, 4554085.278999999165535 ], [ -13601134.8916, 4553936.292099997401237 ], [ -13600715.4773, 4553520.44200000166893 ], [ -13600674.9439, 4553473.725199997425079 ], [ -13600487.464, 4553443.173299998044968 ], [ -13600228.4775, 4553394.190700002014637 ], [ -13600185.9176, 4553389.372500002384186 ], [ -13599928.9198, 4553258.480999998748302 ], [ -13599592.6191, 4553083.702299997210503 ], [ -13599515.3201, 4553048.0962999984622 ], [ -13599055.3314, 4553307.4846 ], [ -13598446.5503, 4553665.836900003254414 ], [ -13598212.6647, 4553516.702299997210503 ], [ -13597949.791000001132488, 4553355.235100001096725 ], [ -13597433.7916, 4553092.066399998962879 ], [ -13597259.8058, 4552824.413999997079372 ], [ -13596631.7051, 4551889.998599998652935 ], [ -13595763.984299998730421, 4551805.423500001430511 ], [ -13595375.4456, 4551772.590899996459484 ], [ -13595029.518199998885393, 4551735.685099996626377 ], [ -13595014.0293, 4551735.869499996304512 ], [ -13591803.8289, 4551438.511 ], [ -13587828.308400001376867, 4551063.265000000596046 ], [ -13586019.2918, 4550900.413000002503395 ], [ -13585511.000599998980761, 4550413.649899996817112 ], [ -13585449.1367, 4550350.159400001168251 ], [ -13585112.7906, 4550105.765100002288818 ], [ -13584805.558899998664856, 4549839.139499999582767 ], [ -13584577.4555, 4549644.747400000691414 ], [ -13584391.935899998992682, 4549474.595600001513958 ], [ -13584233.4661, 4549418.3462999984622 ], [ -13584138.7462, 4549379.272399999201298 ], [ -13583987.9883, 4549287.559000000357628 ], [ -13583935.8037, 4549260.667700000107288 ], [ -13583835.2791, 4549215.505300000309944 ], [ -13583694.2581, 4549131.1875 ], [ -13583520.3336, 4549041.764499999582767 ], [ -13583466.1507, 4549010.094800002872944 ], [ -13583419.7764, 4548978.186499997973442 ], [ -13583356.0264, 4548924.520300000905991 ], [ -13583199.4478, 4548786.400100000202656 ], [ -13583091.265, 4548697.030900001525879 ], [ -13582988.782499998807907, 4548622.631099998950958 ], [ -13582934.6525, 4548570.01410000026226 ], [ -13582845.7566, 4548534.481100000441074 ], [ -13582731.721900001168251, 4548499.002400003373623 ], [ -13582635.1037, 4548461.164499998092651 ], [ -13582523.0202, 4548420.625200003385544 ], [ -13582298.8085, 4548134.848899997770786 ], [ -13581931.644299998879433, 4547651.768799997866154 ], [ -13581098.622299998998642, 4546577.307599999010563 ], [ -13581098.626600001007318, 4546570.00959999859333 ], [ -13580696.6625, 4546049.128300003707409 ], [ -13581098.617800001055002, 4545738.709799997508526 ], [ -13581608.8575, 4545353.627999998629093 ], [ -13582207.9573, 4544880.63459999859333 ], [ -13582273.6946, 4543827.179999999701977 ], [ -13580843.5244, 4542411.18469999730587 ], [ -13580325.5603, 4542401.467200003564358 ], [ -13579508.019299998879433, 4541631.428099997341633 ], [ -13578721.3994, 4541317.4419 ], [ -13577828.48759999871254, 4541162.365099996328354 ], [ -13576535.510499998927116, 4539733.07320000231266 ], [ -13575132.4018, 4540172.971400000154972 ], [ -13574187.3517, 4540460.009900003671646 ], [ -13571744.442699998617172, 4541212.647200003266335 ], [ -13570791.5934, 4541502.158600002527237 ], [ -13567183.282200001180172, 4542614.013700000941753 ], [ -13567183.2753, 4542607.666500002145767 ], [ -13565345.3, 4543178.44990000128746 ], [ -13563402.945500001311302, 4543774.911200001835823 ], [ -13558752.8553, 4545196.234899997711182 ], [ -13553267.953, 4546852.290299996733665 ], [ -13553267.9457, 4546858.320900000631809 ], [ -13551103.307500001043081, 4547523.334399998188019 ], [ -13544526.432300001382828, 4549548.031300000846386 ], [ -13541094.052299998700619, 4550614.447499997913837 ], [ -13539352.6976, 4551152.617799997329712 ], [ -13534959.7577, 4552495.306699998676777 ], [ -13533908.359000001102686, 4552814.52929999679327 ], [ -13532570.9494, 4553230.519599996507168 ], [ -13531643.2901, 4553511.740599997341633 ], [ -13531645.2246, 4553493.36089999973774 ], [ -13531654.8419, 4552801.082699999213219 ], [ -13531668.391800001263618, 4551241.652500003576279 ], [ -13531678.0298, 4550465.409699998795986 ], [ -13531693.507399998605251, 4547444.088699996471405 ], [ -13531710.834800001233816, 4545012.763300001621246 ], [ -13531674.0643, 4542285.232900001108646 ], [ -13531672.0845, 4540279.358800001442432 ], [ -13531672.0747, 4536221.589699998497963 ], [ -13531673.9943, 4534176.366400003433228 ], [ -13531668.1011, 4526576.51690000295639 ], [ -13531669.9693, 4525934.9529 ], [ -13531662.2584, 4524080.571900002658367 ], [ -13531658.382199998944998, 4522057.235799998044968 ], [ -13531646.7578, 4519614.820900000631809 ], [ -13531644.7839, 4518393.244599997997284 ], [ -13531638.9522, 4517276.807800002396107 ], [ -13531635.055599998682737, 4515928.598999999463558 ], [ -13531635.047899998724461, 4515032.694899998605251 ], [ -13531588.705, 4514973.128100000321865 ], [ -13531555.853799998760223, 4514952.382600001990795 ], [ -13531538.4239999987185, 4514943.89130000025034 ], [ -13531517.185899998992682, 4514926.783699996769428 ], [ -13531490.150600001215935, 4514897.594300001859665 ], [ -13531472.7553, 4514876.76240000128746 ], [ -13531459.2077, 4514846.493000000715256 ], [ -13531426.3481, 4514790.301899999380112 ], [ -13531393.4584, 4514763.547499999403954 ], [ -13531325.805300001055002, 4514728.013599999248981 ], [ -13531302.6378, 4514713.429200001060963 ], [ -13531285.2313, 4514708.736400000751019 ], [ -13531252.4199, 4514680.702500000596046 ], [ -13531231.0882, 4514674.677699998021126 ], [ -13531198.2985, 4514661.203299999237061 ], [ -13531171.2228, 4514635.472999997437 ], [ -13531149.9698, 4514629.4419 ], [ -13531128.676, 4514620.900200001895428 ], [ -13531109.3915, 4514609.848600000143051 ], [ -13531086.2051, 4514602.521899998188019 ], [ -13531039.7948, 4514583.13740000128746 ], [ -13530954.7403, 4514558.736299999058247 ], [ -13530898.7447, 4514517.365299999713898 ], [ -13530867.8253, 4514485.574699997901917 ], [ -13530852.329300001263618, 4514463.828599996864796 ], [ -13530821.3832, 4514376.045199997723103 ], [ -13530765.317499998956919, 4514257.813299998641014 ], [ -13530744.1312, 4514186.942299999296665 ], [ -13530744.105700001120567, 4514132.228699997067451 ], [ -13530740.2394, 4514097.056000001728535 ], [ -13530732.4687, 4514075.105099998414516 ], [ -13530722.8451, 4514060.407499998807907 ], [ -13530639.6863, 4514012.934399999678135 ], [ -13530622.3146, 4514006.651699997484684 ], [ -13530599.1118, 4513994.588500000536442 ], [ -13530573.993900001049042, 4513978.708200000226498 ], [ -13530541.127500001341105, 4513950.674999997019768 ], [ -13530523.7347, 4513908.017700001597404 ], [ -13530517.9326, 4513845.935500003397465 ], [ -13530521.8297, 4513802.023000001907349 ], [ -13530521.824099998921156, 4513746.03830000013113 ], [ -13530519.9087, 4513721.653999999165535 ], [ -13530514.0506, 4513698.473800003528595 ], [ -13530506.342799998819828, 4513687.593099996447563 ], [ -13530458.0384, 4513638.761799998581409 ], [ -13530442.6004, 4513619.235799998044968 ], [ -13530411.6876, 4513591.235399998724461 ], [ -13530400.0155, 4513592.32379999756813 ], [ -13530388.4468, 4513586.449500001966953 ], [ -13530326.623, 4513546.259800001978874 ], [ -13530307.26, 4513545.954099997878075 ], [ -13530255.121399998664856, 4513531.545699998736382 ], [ -13530235.782499998807907, 4513530.2971 ], [ -13530204.8903, 4513516.844400003552437 ], [ -13530173.918499998748302, 4513487.581600002944469 ], [ -13530129.4831, 4513463.175399996340275 ], [ -13530094.73, 4513440.170400001108646 ], [ -13530081.1642, 4513425.409000001847744 ], [ -13530065.6885, 4513392.58839999884367 ], [ -13530057.9971, 4513360.839800000190735 ], [ -13530046.3861, 4513342.637699998915195 ], [ -13530030.8925, 4513326.891599997878075 ], [ -13530013.5009, 4513310.80629999935627 ], [ -13529965.2243, 4513275.57490000128746 ], [ -13529940.108, 4513265.703000001609325 ], [ -13529883.9878, 4513228.132299996912479 ], [ -13529864.7275, 4513225.614100001752377 ], [ -13529849.2314, 4513220.6272 ], [ -13529829.9145, 4513221.913199998438358 ], [ -13529814.463, 4513217.236299999058247 ], [ -13529793.211, 4513221.967500001192093 ], [ -13529773.835, 4513223.254600003361702 ], [ -13529752.5841, 4513221.972099997103214 ], [ -13529737.1113, 4513214.769599996507168 ], [ -13529721.714499998837709, 4513202.519199997186661 ], [ -13529702.358199998736382, 4513196.519400000572205 ], [ -13529681.1072, 4513195.231899999082088 ], [ -13529665.6714, 4513191.516500003635883 ], [ -13529646.3335, 4513198.801299996674061 ], [ -13529625.0235, 4513197.51969999819994 ], [ -13529603.7948, 4513200.035199999809265 ], [ -13529569.004, 4513200.121799997985363 ], [ -13529545.7805, 4513197.539099998772144 ], [ -13529514.8948, 4513198.968099996447563 ], [ -13529483.9049, 4513207.339599996805191 ], [ -13529462.6546, 4513207.3147 ], [ -13529439.5139, 4513211.059600003063679 ], [ -13529408.5461, 4513207.418300002813339 ], [ -13529381.5206, 4513194.029100000858307 ], [ -13529335.1386, 4513149.026399999856949 ], [ -13529321.5931, 4513132.991400003433228 ], [ -13529302.2783, 4513129.530699998140335 ], [ -13529290.6846, 4513120.814400002360344 ], [ -13529280.9688, 4513112.432700000703335 ], [ -13529269.4341, 4513095.181100003421307 ], [ -13529238.4479, 4513076.977099999785423 ], [ -13529213.3566, 4513066.14130000025034 ], [ -13529190.1754, 4513067.36540000140667 ], [ -13529170.8343, 4513061.048699997365475 ], [ -13529128.2983, 4513057.544799998402596 ], [ -13529089.660500001162291, 4513061.051600001752377 ], [ -13529066.498100001364946, 4513061.007500000298023 ], [ -13529043.2794, 4513066.015600003302097 ], [ -13529023.9816, 4513066.022200003266335 ], [ -13529006.5379, 4513058.791500002145767 ], [ -13528979.4921, 4513051.415299996733665 ], [ -13528960.1747, 4513042.887800000607967 ], [ -13528940.8163, 4513031.820500001311302 ], [ -13528927.2966, 4513016.115199998021126 ], [ -13528896.3895, 4512988.111900001764297 ], [ -13528880.9156, 4512985.659000001847744 ], [ -13528865.5175, 4512978.143299996852875 ], [ -13528857.7746, 4512979.605400003492832 ], [ -13528820.9916, 4512914.8175999969244 ], [ -13528805.5618, 4512894.328599996864796 ], [ -13528751.4531, 4512855.2212999984622 ], [ -13528718.5955, 4512836.987199999392033 ], [ -13528681.8525, 4512824.715700000524521 ], [ -13528666.4191, 4512814.985699996352196 ], [ -13528639.3341, 4512824.677500002086163 ], [ -13528623.9013, 4512834.54619999974966 ], [ -13528612.2716, 4512849.232100002467632 ], [ -13528598.7676, 4512861.358499996364117 ], [ -13528581.39979999884963, 4512884.483800001442432 ], [ -13528540.8284, 4512922.116899996995926 ], [ -13528498.2529, 4512935.684299997985363 ], [ -13528473.1578, 4512934.333200000226498 ], [ -13528455.716699998825788, 4512921.103100001811981 ], [ -13528444.1279, 4512901.626999996602535 ], [ -13528432.556400001049042, 4512886.886399999260902 ], [ -13528415.17, 4512874.602399997413158 ], [ -13528376.4985, 4512860.067100003361702 ], [ -13528355.248399998992682, 4512848.980099998414516 ], [ -13528318.5495, 4512845.556400001049042 ], [ -13528250.8427, 4512824.878499999642372 ], [ -13528206.4128, 4512806.474299997091293 ], [ -13528185.1864, 4512793.171599999070168 ], [ -13528146.5156, 4512759.026900000870228 ], [ -13528119.4331, 4512744.373199999332428 ], [ -13528067.2608, 4512727.420199997723103 ], [ -13528022.809500001370907, 4512724.825800001621246 ], [ -13527986.127500001341105, 4512704.012100003659725 ], [ -13527953.2141, 4512689.560400001704693 ], [ -13527914.6042, 4512666.503499999642372 ], [ -13527891.4026, 4512644.308600001037121 ], [ -13527873.963, 4512621.266199998557568 ], [ -13527839.182500001043081, 4512554.304200001060963 ], [ -13527819.8485, 4512527.42509999871254 ], [ -13527802.5048, 4512509.121899999678135 ], [ -13527783.1676, 4512506.606200002133846 ], [ -13527761.8854, 4512498.360200002789497 ], [ -13527732.889, 4512499.482299998402596 ], [ -13527696.1865, 4512495.740900002419949 ], [ -13527620.8366, 4512481.279399998486042 ], [ -13527551.2129, 4512487.12780000269413 ], [ -13527524.21, 4512482.268200002610683 ], [ -13527452.6398, 4512477.344300001859665 ], [ -13527414.047, 4512478.634199999272823 ], [ -13527386.9831, 4512492.125399999320507 ], [ -13527365.7305, 4512506.648100003600121 ], [ -13527348.3446, 4512526.298000000417233 ], [ -13527334.7787, 4512546.952299997210503 ], [ -13527309.601300001144409, 4512569.963200002908707 ], [ -13527274.8331, 4512583.64190000295639 ], [ -13527255.4933, 4512587.133500002324581 ], [ -13527236.175900001078844, 4512598.20160000026226 ], [ -13527211.061999998986721, 4512607.936999998986721 ], [ -13527174.3804, 4512607.981899999082088 ], [ -13527143.412999998778105, 4512599.26799999922514 ], [ -13527118.2861, 4512589.696099996566772 ], [ -13527098.933600001037121, 4512573.885200001299381 ], [ -13527056.4377, 4512552.974299997091293 ], [ -13527017.7874, 4512546.987700000405312 ], [ -13527000.3653, 4512538.490900002419949 ], [ -13526975.3129, 4512529.859700001776218 ], [ -13526950.1613, 4512532.309000000357628 ], [ -13526925.0286, 4512532.232500001788139 ], [ -13526886.3578, 4512523.705399997532368 ], [ -13526859.3387, 4512514.108800001442432 ], [ -13526828.414099998772144, 4512512.985100001096725 ], [ -13526772.369, 4512532.329599998891354 ], [ -13526749.1832, 4512545.569799996912479 ], [ -13526724.0137, 4512553.070200003683567 ], [ -13526700.851599998772144, 4512564.095100000500679 ], [ -13526671.8552, 4512566.476999998092651 ], [ -13526627.4092, 4512562.914800003170967 ], [ -13526586.809, 4512547.096900001168251 ], [ -13526551.99720000103116, 4512537.056699998676777 ], [ -13526476.6756, 4512500.753899998962879 ], [ -13526343.3309, 4512494.513700000941753 ], [ -13526308.5389, 4512499.325099997222424 ], [ -13526277.5743, 4512495.674800001084805 ], [ -13526221.5315, 4512509.017899997532368 ], [ -13526113.2621, 4512573.70440000295639 ], [ -13526082.3881, 4512594.39580000191927 ], [ -13526049.5461, 4512610.313799999654293 ], [ -13526018.5756, 4512621.214900001883507 ], [ -13525960.5867, 4512623.764799997210503 ], [ -13525935.496399998664856, 4512617.6721 ], [ -13525921.9528, 4512622.514499999582767 ], [ -13525912.252700001001358, 4512623.615800000727177 ], [ -13525860.1043, 4512660.109399996697903 ], [ -13525835.0118, 4512663.8279 ], [ -13525796.3422, 4512659.090000003576279 ], [ -13525719.0013, 4512640.778999999165535 ], [ -13525676.5298, 4512628.711599998176098 ], [ -13525601.1434, 4512600.616599999368191 ], [ -13525566.3376, 4512590.893500000238419 ], [ -13525502.542399998754263, 4512552.8716000020504 ], [ -13525465.851599998772144, 4512533.623400002717972 ], [ -13525436.8828, 4512507.8496999964118 ], [ -13525436.886599998921156, 4512503.104299999773502 ], [ -13525423.3182, 4512465.257700003683567 ], [ -13525396.2305, 4512430.027800001204014 ], [ -13525376.9419, 4512400.628300003707409 ], [ -13525359.564, 4512384.857199996709824 ], [ -13525342.1457, 4512365.278899997472763 ], [ -13525313.1893, 4512325.279100000858307 ], [ -13525288.0031, 4512304.319300003349781 ], [ -13525272.5359, 4512302.176700003445148 ], [ -13525251.2941, 4512286.338600002229214 ], [ -13525224.2566, 4512272.94030000269413 ], [ -13525208.766800001263618, 4512256.88289999961853 ], [ -13525193.2974, 4512244.613399997353554 ], [ -13525183.6276, 4512223.906099997460842 ], [ -13525148.9118, 4512189.818199999630451 ], [ -13525146.9468, 4512173.976000003516674 ], [ -13525146.9342, 4512160.692400000989437 ], [ -13525152.7724, 4512149.713799998164177 ], [ -13525166.3028, 4512130.331399999558926 ], [ -13525177.83839999884367, 4512118.177199997007847 ], [ -13525201.069, 4512077.756499998271465 ], [ -13525214.6252, 4512042.549999997019768 ], [ -13525224.267099998891354, 4512025.3158999979496 ], [ -13525241.6639, 4511951.268700003623962 ], [ -13525268.738400001078844, 4511912.173699997365475 ], [ -13525284.1725, 4511901.033399999141693 ], [ -13525303.4618, 4511871.936599999666214 ], [ -13525330.551, 4511856.241499997675419 ], [ -13525347.9399, 4511837.85869999974966 ], [ -13525371.1613, 4511828.109099999070168 ], [ -13525382.7168, 4511818.495200000703335 ], [ -13525402.0744, 4511809.951099999248981 ], [ -13525423.3231, 4511795.107900001108646 ], [ -13525436.873100001364946, 4511779.513700000941753 ], [ -13525436.8319, 4511771.923199996352196 ], [ -13525465.7952, 4511742.663400001823902 ], [ -13525483.230999998748302, 4511716.062399998307228 ], [ -13525494.8643, 4511702.654100000858307 ], [ -13525523.8039, 4511679.392499998211861 ], [ -13525543.161, 4511669.590400002896786 ], [ -13525560.515, 4511652.786700002849102 ], [ -13525583.708, 4511610.152800001204014 ], [ -13525583.7091, 4511595.281599998474121 ], [ -13525574.083, 4511572.360500000417233 ], [ -13525560.5065, 4511558.863899998366833 ], [ -13525516.066, 4511496.804300002753735 ], [ -13525504.503600001335144, 4511476.064599998295307 ], [ -13525436.808400001376867, 4511401.609099999070168 ], [ -13525436.851, 4511394.338200002908707 ], [ -13525378.8218, 4511365.254699997603893 ], [ -13525363.374, 4511355.526399999856949 ], [ -13525346.0161, 4511333.423600003123283 ], [ -13525330.5582, 4511300.612400002777576 ], [ -13525322.8203, 4511277.400399997830391 ], [ -13525315.1043, 4511198.217299997806549 ], [ -13525297.658599998801947, 4511156.826300002634525 ], [ -13525257.081, 4511099.570100001990795 ], [ -13525193.293499998748302, 4511026.454499997198582 ], [ -13525168.214, 4511004.553300000727177 ], [ -13525156.5742, 4510983.815499998629093 ], [ -13525141.149500001221895, 4510964.271899998188019 ], [ -13525085.0811, 4510915.625900000333786 ], [ -13525065.793, 4510896.015299998223782 ], [ -13525025.1467, 4510828.013700000941753 ], [ -13525019.3647, 4510796.29839999973774 ], [ -13525013.5767, 4510734.231799997389317 ], [ -13525005.8828, 4510703.750500001013279 ], [ -13524972.985100001096725, 4510613.413999997079372 ], [ -13524955.6075, 4510503.731700003147125 ], [ -13524940.0995, 4510453.834299996495247 ], [ -13524932.4234, 4510436.9507 ], [ -13524930.4625, 4510412.57379999756813 ], [ -13524951.7424, 4510366.119999997317791 ], [ -13524947.8898, 4510345.511699996888638 ], [ -13524936.3065, 4510332.033600002527237 ], [ -13524886.0107, 4510296.771899998188019 ], [ -13524837.689399998635054, 4510251.728900000452995 ], [ -13524822.2077, 4510234.712200000882149 ], [ -13524812.543499998748302, 4510204.199100002646446 ], [ -13524812.5937, 4510181.117899999022484 ], [ -13524826.0853, 4510148.143200002610683 ], [ -13524829.9004, 4510126.383400000631809 ], [ -13524806.7247, 4510070.0449 ], [ -13524789.3892, 4510016.647200003266335 ], [ -13524791.295699998736382, 4509985.05460000038147 ], [ -13524802.9013, 4509933.7007 ], [ -13524808.6444, 4509919.244199998676777 ], [ -13524812.556200001388788, 4509886.11599999666214 ], [ -13524814.4462, 4509845.992399998009205 ], [ -13524812.53660000115633, 4509803.591300003230572 ], [ -13524814.4351, 4509782.755000002682209 ], [ -13524822.1636, 4509766.748499996960163 ], [ -13524831.8839, 4509754.581799998879433 ], [ -13524845.4282, 4509744.998000003397465 ], [ -13524853.1578, 4509734.056100003421307 ], [ -13524866.623, 4509723.201200000941753 ], [ -13524868.6125, 4509716.906800001859665 ], [ -13524864.733, 4509708.308300003409386 ], [ -13524839.558899998664856, 4509687.673000000417233 ], [ -13524808.6523, 4509657.14190000295639 ], [ -13524777.7773, 4509608.586000002920628 ], [ -13524727.504700001329184, 4509572.038599997758865 ], [ -13524712.0603, 4509563.573299996554852 ], [ -13524652.1522, 4509480.718800000846386 ], [ -13524628.9364, 4509435.450000002980232 ], [ -13524625.0976, 4509434.435400001704693 ], [ -13524596.0844, 4509402.676399998366833 ], [ -13524541.9504, 4509367.32880000025034 ], [ -13524480.1237, 4509355.274800002574921 ], [ -13524429.8773, 4509347.826099999248981 ], [ -13524350.6243, 4509351.609300002455711 ], [ -13524292.61259999871254, 4509346.565499998629093 ], [ -13524269.483, 4509346.816200003027916 ], [ -13524248.1613, 4509340.4746999964118 ], [ -13524190.240899998694658, 4509316.1426 ], [ -13524140.019299998879433, 4509307.740599997341633 ], [ -13524093.6128, 4509310.151900000870228 ], [ -13524060.7265, 4509305.190200001001358 ], [ -13524000.7928, 4509291.905299998819828 ], [ -13523966.0734, 4509288.170500002801418 ], [ -13523929.3135, 4509273.667999997735023 ], [ -13523900.3299, 4509270.035199999809265 ], [ -13523867.4478, 4509254.011900000274181 ], [ -13523805.622499998658895, 4509241.954000003635883 ], [ -13523786.2768, 4509235.945600003004074 ], [ -13523724.466699998825788, 4509227.358599998056889 ], [ -13523699.2873, 4509221.26410000026226 ], [ -13523676.1336, 4509222.475400000810623 ], [ -13523656.866700001060963, 4509212.678300000727177 ], [ -13523641.320500001311302, 4509208.947400003671646 ], [ -13523618.1855, 4509199.393299996852875 ], [ -13523548.5566, 4509201.747100003063679 ], [ -13523515.754099998623133, 4509186.984200000762939 ], [ -13523480.928399998694658, 4509207.920500002801418 ], [ -13523453.8773, 4509216.332999996840954 ], [ -13523424.8798, 4509218.720100000500679 ], [ -13523397.8038, 4509223.651199996471405 ], [ -13523380.4498, 4509230.954899996519089 ], [ -13523347.5548, 4509240.548299998044968 ], [ -13523332.1468, 4509239.349500000476837 ], [ -13523285.7677, 4509177.251000002026558 ], [ -13523262.5285, 4509119.973200000822544 ], [ -13523227.7147, 4509047.008299998939037 ], [ -13523212.2914, 4509022.721799999475479 ], [ -13523206.4673, 4509022.625399999320507 ], [ -13523191.0541, 4508997.086300000548363 ], [ -13523181.351, 4508944.760600000619888 ], [ -13523177.4977, 4508931.42790000140667 ], [ -13523169.800900001078844, 4508915.492399998009205 ], [ -13523163.9321, 4508892.3191 ], [ -13523163.9712, 4508876.514300003647804 ], [ -13523171.7163, 4508854.504100002348423 ], [ -13523171.716, 4508839.962200000882149 ], [ -13523167.842799998819828, 4508821.565700002014637 ], [ -13523162.067699998617172, 4508808.184299997985363 ], [ -13523144.625, 4508782.618100002408028 ], [ -13523119.5695, 4508754.695600003004074 ], [ -13523078.9146, 4508698.7128000035882 ], [ -13523069.316100001335144, 4508669.473800003528595 ], [ -13523065.418499998748302, 4508647.596699997782707 ], [ -13523057.6677, 4508620.592299997806549 ], [ -13523053.8145, 4508595.243199996650219 ], [ -13523034.4751, 4508545.288900002837181 ], [ -13523026.715, 4508537.9003000035882 ], [ -13522993.870900001376867, 4508534.197400003671646 ], [ -13522922.4034, 4508506.161499999463558 ], [ -13522891.4615, 4508491.748199999332428 ], [ -13522788.9993, 4508417.381300002336502 ], [ -13522771.6365, 4508411.404700003564358 ], [ -13522736.8222, 4508408.944799996912479 ], [ -13522717.4982, 4508411.149400003254414 ], [ -13522682.7284, 4508405.217200003564358 ], [ -13522671.145, 4508400.284400001168251 ], [ -13522661.4635, 4508400.450300000607967 ], [ -13522647.988400001078844, 4508392.958200000226498 ], [ -13522636.375300001353025, 4508390.550399996340275 ], [ -13522620.9048, 4508378.281999997794628 ], [ -13522611.2088, 4508369.912500001490116 ], [ -13522603.4935, 4508355.240000002086163 ], [ -13522599.631299998611212, 4508336.843999996781349 ], [ -13522597.6719, 4508291.924900002777576 ], [ -13522591.888, 4508274.74719999730587 ], [ -13522510.6995, 4508204.194600000977516 ], [ -13522497.195500001311302, 4508187.226000003516674 ], [ -13522489.4456, 4508181.084600001573563 ], [ -13522452.7765, 4508140.971699997782707 ], [ -13522425.6912, 4508083.634400002658367 ], [ -13522398.6544, 4508042.084899999201298 ], [ -13522385.0819, 4508025.112499997019768 ], [ -13522367.6959, 4508010.605700001120567 ], [ -13522323.2771, 4507982.693899996578693 ], [ -13522290.386599998921156, 4507963.186800003051758 ], [ -13522269.1133, 4507954.627599999308586 ], [ -13522234.3412, 4507935.090599998831749 ], [ -13522209.2212, 4507907.178999997675419 ], [ -13522197.6303, 4507883.91889999806881 ], [ -13522180.2501, 4507859.599899999797344 ], [ -13522137.6934, 4507847.520499996840954 ], [ -13522122.2586, 4507838.737199999392033 ], [ -13522101.0117, 4507809.616800002753735 ], [ -13522089.3814, 4507788.881800003349781 ], [ -13522044.975499998778105, 4507746.433700002729893 ], [ -13522027.6007, 4507726.8728 ], [ -13522006.3151, 4507693.951499998569489 ], [ -13521990.8814, 4507675.686700001358986 ], [ -13521971.4968, 4507657.359999999403954 ], [ -13521959.9145, 4507653.689099997282028 ], [ -13521917.3526, 4507603.673600003123283 ], [ -13521898.0662, 4507590.404100000858307 ], [ -13521888.381900001317263, 4507575.708700001239777 ], [ -13521878.7496, 4507533.18469999730587 ], [ -13521878.7271, 4507511.372699998319149 ], [ -13521894.1643, 4507490.444899998605251 ], [ -13521923.155000001192093, 4507463.730599999427795 ], [ -13521934.7839, 4507441.802000001072884 ], [ -13521946.4282, 4507412.590999998152256 ], [ -13521956.034400001168251, 4507363.744099996984005 ], [ -13521963.7978, 4507267.777099996805191 ], [ -13521983.0999, 4507212.775399997830391 ], [ -13521998.5761, 4507186.152900002896786 ], [ -13522014.0277, 4507164.288699999451637 ], [ -13522041.089, 4507102.146300002932549 ], [ -13522041.060899998992682, 4507083.806000001728535 ], [ -13522033.3486, 4507054.595799997448921 ], [ -13522033.3657, 4507028.997599996626377 ], [ -13522039.1367, 4507003.487700000405312 ], [ -13522050.7747, 4506980.287699997425079 ], [ -13522095.208700001239777, 4506941.496899999678135 ], [ -13522102.9137, 4506937.827500000596046 ], [ -13522112.5858, 4506918.079800002276897 ], [ -13522114.474, 4506898.827600002288818 ], [ -13522110.647, 4506887.690600000321865 ], [ -13522102.923700001090765, 4506874.292099997401237 ], [ -13522099.0922, 4506858.427100002765656 ], [ -13522114.5535, 4506763.538000002503395 ], [ -13522114.5417, 4506724.649499997496605 ], [ -13522108.7159, 4506700.222599998116493 ], [ -13522106.7971, 4506668.581600002944469 ], [ -13522108.749400001019239, 4506650.2804000005126 ], [ -13522116.4555, 4506630.810199998319149 ], [ -13522137.7047, 4506596.694399997591972 ], [ -13522147.390999998897314, 4506577.257600001990795 ], [ -13522159.0131, 4506563.864500001072884 ], [ -13522172.5121, 4506541.947800002992153 ], [ -13522180.2532, 4506515.210500001907349 ], [ -13522184.0577, 4506493.1537000015378 ], [ -13522201.502500001341105, 4506476.06139999628067 ], [ -13524557.4077, 4506504.112499997019768 ], [ -13525436.7566, 4506517.582699999213219 ], [ -13525436.7773, 4506521.378499999642372 ], [ -13528444.0568, 4506545.715400002896786 ], [ -13530573.8897, 4506568.884999997913837 ], [ -13537566.5056, 4506633.351899996399879 ], [ -13539352.3369, 4506654.034599997103214 ], [ -13539613.2483000010252, 4506650.581799998879433 ], [ -13545600.765, 4506712.595600001513958 ], [ -13547620.4651, 4506725.981200002133846 ], [ -13549630.4769, 4506745.486199997365475 ], [ -13551665.605999998748302, 4506757.674099996685982 ], [ -13553267.8466, 4506772.547399997711182 ], [ -13553267.871100001037121, 4506776.017899997532368 ], [ -13555710.7427, 4506797.913199998438358 ], [ -13557651.2133, 4506811.491999998688698 ], [ -13559742.372000001370907, 4506832.317900002002716 ], [ -13562705.2243, 4506855.386500000953674 ], [ -13565990.8333, 4506876.160899996757507 ], [ -13566458.5229, 4506498.707400001585484 ], [ -13566483.6503, 4506484.149999998509884 ], [ -13566499.0538, 4506472.012999996542931 ], [ -13566506.795400001108646, 4506443.978900000452995 ], [ -13566510.689, 4506408.625600002706051 ], [ -13566506.7859, 4506385.505500003695488 ], [ -13566508.729600001126528, 4506361.180399999022484 ], [ -13566520.3572, 4506329.396999999880791 ], [ -13566531.9464, 4506308.672899998724461 ], [ -13566555.176199998706579, 4506280.821599997580051 ], [ -13566570.6367, 4506251.615099996328354 ], [ -13566574.4517, 4506234.273999996483326 ], [ -13566580.2311, 4506185.66610000282526 ], [ -13566587.9734, 4506162.681400001049042 ], [ -13566628.5894, 4506122.407700002193451 ], [ -13566742.6367, 4506034.644799999892712 ], [ -13566765.7922, 4506020.062200002372265 ], [ -13566831.499, 4505972.498499996960163 ], [ -13566885.643199998885393, 4505951.978200003504753 ], [ -13566914.6103, 4505938.419299997389317 ], [ -13566943.6496, 4505905.577200002968311 ], [ -13567022.8088, 4505746.273400001227856 ], [ -13567055.6688, 4505669.557899996638298 ], [ -13567074.9894, 4505646.393899999558926 ], [ -13567102.0576, 4505619.536799997091293 ], [ -13567163.9173, 4505565.911200001835823 ], [ -13567183.2596, 4505553.829199999570847 ], [ -13567183.2312, 4505562.35869999974966 ], [ -13567227.6846, 4505554.990000002086163 ], [ -13567254.723000001162291, 4505557.530500002205372 ], [ -13567304.972, 4505567.296599999070168 ], [ -13567335.9441, 4505563.556999996304512 ], [ -13567353.3442, 4505548.910300001502037 ], [ -13567368.7732, 4505528.233999997377396 ], [ -13567382.317, 4505487.944399997591972 ], [ -13567384.2444, 4505464.888400003314018 ], [ -13567397.8033, 4505422.39019999653101 ], [ -13567419.0229, 4505390.723999999463558 ], [ -13567469.3404, 4505343.286700002849102 ], [ -13567492.5, 4505315.1118 ], [ -13567500.210900001227856, 4505301.618699997663498 ], [ -13567509.8715, 4505282.131700001657009 ], [ -13567540.8113, 4505182.3108000010252 ], [ -13567564.0221, 4505134.869699999690056 ], [ -13567606.5013, 4505088.604000002145767 ], [ -13567623.8914, 4505076.486699998378754 ], [ -13567643.2401, 4505055.861100003123283 ], [ -13567718.6163, 4505009.66669999808073 ], [ -13567763.0431, 4504979.230899997055531 ], [ -13567830.7511, 4504942.737099997699261 ], [ -13567896.440200001001358, 4504915.718500003218651 ], [ -13567917.6931, 4504915.645900003612041 ], [ -13567962.1579, 4504927.874799996614456 ], [ -13567989.1669, 4504938.937100000679493 ], [ -13567998.8412, 4504939.060199998319149 ], [ -13568010.4364, 4504942.679499998688698 ], [ -13568025.9065, 4504939.064099997282028 ], [ -13568058.754700001329184, 4504942.615699999034405 ], [ -13568074.2271, 4504951.018500000238419 ], [ -13568103.1932, 4504991.190800003707409 ], [ -13568138.0286, 4505019.410099998116493 ], [ -13568172.8202, 4505031.529899999499321 ], [ -13568195.9809, 4505035.269000001251698 ], [ -13568217.2628, 4505032.686099998652935 ], [ -13568240.4525, 4505033.915200002491474 ], [ -13568259.750599998980761, 4505031.613399997353554 ], [ -13568284.873399998992682, 4505023.067800000309944 ], [ -13568315.7933, 4505016.797600001096725 ], [ -13568391.1904, 4504987.669600002467632 ], [ -13568429.8126, 4504975.477799996733665 ], [ -13568474.3118, 4504964.628100000321865 ], [ -13568503.2392, 4504946.334200002253056 ], [ -13568532.302000001072884, 4504937.8279 ], [ -13568567.075199998915195, 4504918.332699999213219 ], [ -13568594.0976, 4504907.269100002944469 ], [ -13568640.5419, 4504879.377499997615814 ], [ -13568657.9249, 4504865.991899996995926 ], [ -13568713.9113, 4504762.36370000243187 ], [ -13568717.8074, 4504745.343000002205372 ], [ -13568773.82, 4504617.388099998235703 ], [ -13568806.7316, 4504568.79169999808073 ], [ -13568855.0312, 4504542.169399999082088 ], [ -13568922.6514, 4504532.23650000244379 ], [ -13568959.416299998760223, 4504523.821999996900558 ], [ -13569005.7918, 4504520.258000001311302 ], [ -13569056.0195, 4504504.426299996674061 ], [ -13569146.8994, 4504504.231200002133846 ], [ -13569173.9479, 4504499.500200003385544 ], [ -13569228.0456, 4504496.978699997067451 ], [ -13569295.7162, 4504488.610100001096725 ], [ -13569320.8021, 4504482.266699999570847 ], [ -13569357.5505, 4504469.104000002145767 ], [ -13569405.8737, 4504460.51070000231266 ], [ -13569438.6975, 4504452.045199997723103 ], [ -13569473.5032, 4504437.289399996399879 ], [ -13569488.9648, 4504426.410999998450279 ], [ -13569506.333700001239777, 4504420.295699998736382 ], [ -13569531.475499998778105, 4504417.746299996972084 ], [ -13569568.188900001347065, 4504406.802000001072884 ], [ -13569591.353799998760223, 4504396.015600003302097 ], [ -13569606.8933, 4504386.086900003254414 ], [ -13569632.0001, 4504377.849500000476837 ], [ -13569649.4007, 4504364.467200003564358 ], [ -13569666.7733, 4504344.766199998557568 ], [ -13569674.5151, 4504329.04900000244379 ], [ -13569697.6676, 4504299.94030000269413 ], [ -13569718.9566, 4504268.266099996864796 ], [ -13569747.978, 4504249.953400000929832 ], [ -13569784.6851, 4504237.746500000357628 ], [ -13569842.639600001275539, 4504213.460400000214577 ], [ -13569875.5165, 4504193.93129999935627 ], [ -13569958.6442, 4504150.043200001120567 ], [ -13569987.5665, 4504131.73200000077486 ], [ -13570047.5408, 4504110.002099998295307 ], [ -13570070.7202, 4504104.907999999821186 ], [ -13570103.5262, 4504091.704099997878075 ], [ -13570128.695799998939037, 4504085.672600001096725 ], [ -13570173.140999998897314, 4504078.292700000107288 ], [ -13570221.4274, 4504080.758000001311302 ], [ -13570260.1254, 4504074.567800000309944 ], [ -13570316.15, 4504046.473300002515316 ], [ -13570347.0244, 4504043.037900000810623 ], [ -13570372.2078, 4504035.743699997663498 ], [ -13570393.4591, 4504035.685999996960163 ], [ -13570414.688099998980761, 4504029.605099998414516 ], [ -13570466.873599998652935, 4504006.526299998164177 ], [ -13570505.554499998688698, 4503995.588699996471405 ], [ -13570528.773, 4503980.698399998247623 ], [ -13570559.6362, 4503964.949500001966953 ], [ -13570584.7797, 4503947.851400002837181 ], [ -13570608.0073, 4503938.32379999756813 ], [ -13570629.2732, 4503916.453699998557568 ], [ -13570650.5073, 4503902.8059 ], [ -13570669.8002, 4503894.491099998354912 ], [ -13570714.2276, 4503882.36259999871254 ], [ -13570731.6452, 4503879.729500003159046 ], [ -13570741.290199998766184, 4503882.364500001072884 ], [ -13570760.65, 4503882.280000001192093 ], [ -13571757.9501, 4503171.472099997103214 ], [ -13572132.8646, 4502909.726400002837181 ], [ -13572434.3686, 4502689.169699996709824 ], [ -13572558.0403, 4502605.280799999833107 ], [ -13572600.5659, 4502572.582800000905991 ], [ -13572619.8611, 4502591.762000001966953 ], [ -13572654.6972, 4502613.966899998486042 ], [ -13572728.117800001055002, 4502647.994599997997284 ], [ -13572755.2359, 4502662.51969999819994 ], [ -13572784.1628, 4502671.068999998271465 ], [ -13572815.148, 4502686.905199997127056 ], [ -13572842.146499998867512, 4502691.644299998879433 ], [ -13572869.2338, 4502702.700099997222424 ], [ -13572931.0927, 4502735.636 ], [ -13572954.264, 4502752.656199999153614 ], [ -13572979.4089, 4502775.683700002729893 ], [ -13573008.372000001370907, 4502849.956000000238419 ], [ -13573014.1975, 4502891.425999999046326 ], [ -13573023.8735, 4502926.607500001788139 ], [ -13573031.5760000012815, 4502941.237000003457069 ], [ -13573033.4949, 4502952.312299996614456 ], [ -13573050.897, 4502979.051299996674061 ], [ -13573106.9406, 4502981.596400000154972 ], [ -13573139.8178, 4502969.334100000560284 ], [ -13573168.8244, 4502963.340999998152256 ], [ -13573207.4573, 4502942.616800002753735 ], [ -13573242.2091, 4502921.833499997854233 ], [ -13573306.0057, 4502866.952399998903275 ], [ -13573333.0477, 4502847.676600001752377 ], [ -13573350.472, 4502823.219700001180172 ], [ -13573389.126600001007318, 4502779.418499998748302 ], [ -13573404.609000001102686, 4502766.007100000977516 ], [ -13573427.8135, 4502752.689499996602535 ], [ -13573445.1489, 4502735.5044 ], [ -13573464.5161, 4502728.144900001585484 ], [ -13573485.792399998754263, 4502724.595799997448921 ], [ -13573522.482099998742342, 4502714.901399999856949 ], [ -13573541.8313, 4502735.665200002491474 ], [ -13573553.430599998682737, 4502759.805699996650219 ], [ -13573557.2618, 4502818.314900003373623 ], [ -13573555.3587, 4502847.674800001084805 ], [ -13573543.7269, 4502887.682199999690056 ], [ -13573497.3311, 4502977.8301 ], [ -13573474.136300001293421, 4503031.288099996745586 ], [ -13573466.4081, 4503061.851599998772144 ], [ -13573462.5759, 4503087.4070999994874 ], [ -13573462.568, 4503122.80120000243187 ], [ -13573472.257, 4503226.23309999704361 ], [ -13573470.2929, 4503260.34179999679327 ], [ -13573462.5581, 4503290.590800002217293 ], [ -13573435.4804, 4503362.337200000882149 ], [ -13573421.999499998986721, 4503392.83669999986887 ], [ -13573420.0305, 4503406.401900000870228 ], [ -13573421.9778, 4503429.489100001752377 ], [ -13573429.7261, 4503446.326099999248981 ], [ -13573445.1791, 4503458.505900003015995 ], [ -13573472.2181, 4503466.091899998486042 ], [ -13573686.7826, 4503476.744400002062321 ], [ -13573711.9087, 4503489.036700002849102 ], [ -13573738.9621, 4503510.837099999189377 ], [ -13573752.4638, 4503526.787600003182888 ], [ -13573764.0577, 4503552.521799996495247 ], [ -13573781.4815, 4503598.538400001823902 ], [ -13573789.1978, 4503666.885399997234344 ], [ -13573793.101300001144409, 4503677.6841000020504 ], [ -13573808.526, 4503697.129699997603893 ], [ -13573820.1326, 4503707.061200000345707 ], [ -13573843.2829, 4503719.014399997889996 ], [ -13573938.0282, 4503725.15089999884367 ], [ -13573982.4801, 4503724.074100002646446 ], [ -13574036.557300001382828, 4503727.527300000190735 ], [ -13574117.726300001144409, 4503722.765699997544289 ], [ -13574237.567499998956919, 4503776.262699998915195 ], [ -13574297.4769, 4503857.836099997162819 ], [ -13574318.7684, 4503894.428199999034405 ], [ -13574340.007399998605251, 4503950.605200000107288 ], [ -13574353.5732, 4503996.58839999884367 ], [ -13574359.3162, 4504026.031599998474121 ], [ -13574372.8805, 4504057.483400002121925 ], [ -13574398.0151, 4504090.305299997329712 ], [ -13574419.213, 4504113.620200000703335 ], [ -13574456.0188, 4504144.058499999344349 ], [ -13574510.1096, 4504153.833400003612041 ], [ -13574577.7305, 4504158.706900000572205 ], [ -13574608.6689, 4504157.475699998438358 ], [ -13574662.8005, 4504163.45830000191927 ], [ -13574709.148, 4504176.950099997222424 ], [ -13574747.835099998861551, 4504200.132399998605251 ], [ -13574763.3225, 4504215.790600001811981 ], [ -13574780.7313, 4504242.539800003170967 ], [ -13574798.0897, 4504307.197400003671646 ], [ -13574798.1083, 4504334.062299996614456 ], [ -13574794.211199998855591, 4504366.888700000941753 ], [ -13574780.7315, 4504425.19990000128746 ], [ -13574765.1981, 4504476.54389999806881 ], [ -13574763.306400001049042, 4504568.804300002753735 ], [ -13574769.082899998873472, 4504601.738300003111362 ], [ -13574778.737, 4504624.920999996364117 ], [ -13574794.203499998897314, 4504648.166799999773502 ], [ -13574813.5313, 4504672.402999997138977 ], [ -13574834.8049, 4504690.659100003540516 ], [ -13574867.7089, 4504711.254600003361702 ], [ -13574890.885, 4504713.721500001847744 ], [ -13574923.719, 4504703.9912 ], [ -13574956.561099998652935, 4504686.974799998104572 ], [ -13574995.246, 4504654.226199999451637 ], [ -13575033.894299998879433, 4504609.149499997496605 ], [ -13575064.8287, 4504551.976599998772144 ], [ -13575074.4695, 4504527.436300002038479 ], [ -13575086.0294, 4504471.628300003707409 ], [ -13575087.996, 4504434.991300001740456 ], [ -13575087.9933, 4504343.66330000013113 ], [ -13575059.006099998950958, 4504213.442500002682209 ], [ -13575039.685899998992682, 4504159.803999997675419 ], [ -13575018.3671, 4504117.223800003528595 ], [ -13574987.512, 4504028.391000002622604 ], [ -13574983.6397, 4503994.20719999819994 ], [ -13574991.3814, 4503949.112899996340275 ], [ -13575006.812199998646975, 4503905.349299997091293 ], [ -13575029.9731, 4503859.154700003564358 ], [ -13575053.235399998724461, 4503827.509099997580051 ], [ -13575072.5374, 4503795.811899997293949 ], [ -13575142.1061, 4503723.904200002551079 ], [ -13575165.324, 4503708.358300000429153 ], [ -13575252.2622, 4503658.461400002241135 ], [ -13575285.105999998748302, 4503647.463899999856949 ], [ -13575317.989799998700619, 4503632.665200002491474 ], [ -13575346.9512, 4503625.395000003278255 ], [ -13575412.6744, 4503615.701800003647804 ], [ -13575437.7798, 4503614.406000003218651 ], [ -13575476.4715, 4503615.792700000107288 ], [ -13575540.2083, 4503620.61150000244379 ], [ -13575590.5174, 4503618.012199997901917 ], [ -13575636.8903, 4503628.960199996829033 ], [ -13575712.252700001001358, 4503656.986100003123283 ], [ -13575739.3266, 4503663.289200000464916 ], [ -13575776.0135000012815, 4503675.3926 ], [ -13575862.9424, 4503731.358900003135204 ], [ -13575955.7805, 4503760.521300002932549 ], [ -13576019.5305, 4503771.66610000282526 ], [ -13576092.9592, 4503789.861299999058247 ], [ -13576168.3435, 4503817.879000000655651 ], [ -13576270.7901, 4503850.620899997651577 ], [ -13576322.9636, 4503859.095200002193451 ], [ -13576409.9671, 4503881.2516999989748 ], [ -13576580.0428, 4503911.581200003623962 ], [ -13576624.4817, 4503912.701700001955032 ], [ -13576659.254999998956919, 4503905.509499996900558 ], [ -13576690.225, 4503906.800399996340275 ], [ -13576726.9159, 4503898.040100000798702 ], [ -13576755.9038, 4503887.30009999871254 ], [ -13576829.009, 4503868.534199997782707 ], [ -13577286.9434, 4503706.751199997961521 ], [ -13577618.0603, 4503579.218400001525879 ], [ -13577903.4126, 4503480.471799999475479 ], [ -13578198.7989, 4503418.631399996578693 ], [ -13578440.126400001347065, 4503432.156599998474121 ], [ -13578746.5172, 4503453.596900001168251 ], [ -13579222.430599998682737, 4503601.407899998128414 ], [ -13579755.1276, 4503803.693000003695488 ], [ -13580054.2116, 4503918.060199998319149 ], [ -13580223.3625, 4504025.874899998307228 ], [ -13580497.1915, 4504261.421099998056889 ], [ -13580647.4265, 4504351.068400003015995 ], [ -13580768.297899998724461, 4504367.081600002944469 ], [ -13581063.887699998915195, 4504314.4331 ], [ -13581330.692499998956919, 4504215.978500001132488 ], [ -13581542.47520000115037, 4504146.526900000870228 ], [ -13582188.0571, 4503984.3378000035882 ], [ -13582677.2581, 4503881.1266999989748 ], [ -13582926.6858000010252, 4503838.691299997270107 ], [ -13583185.773699998855591, 4503814.605999998748302 ], [ -13583519.9867, 4503835.31530000269413 ], [ -13583845.132, 4503865.489200003445148 ], [ -13584298.2348, 4503809.381099998950958 ], [ -13584676.9971, 4503745.569200001657009 ], [ -13584925.4186, 4503656.703400000929832 ], [ -13585281.252999998629093, 4503389.185400001704693 ], [ -13585672.9379, 4503065.205899998545647 ], [ -13585892.137, 4502911.990299999713898 ], [ -13586067.398400001227856, 4502871.084399998188019 ], [ -13586197.5273, 4502886.832999996840954 ], [ -13586356.2565, 4502939.082699999213219 ], [ -13587040.8728, 4503503.067800000309944 ], [ -13587588.6077, 4503943.238399997353554 ], [ -13588286.3225, 4504497.262000001966953 ], [ -13588883.5056, 4504981.709700003266335 ], [ -13589413.077, 4505404.139499999582767 ], [ -13589711.2083, 4505644.748000003397465 ], [ -13590074.0268, 4505937.543600000441074 ], [ -13590506.8992, 4506316.023199997842312 ], [ -13591459.7673, 4507162.340800002217293 ], [ -13592992.3258, 4508516.855800002813339 ], [ -13593181.7522, 4508685.909400001168251 ], [ -13593201.0957, 4508713.909400001168251 ], [ -13593222.33839999884367, 4508755.542700000107288 ], [ -13593291.9409, 4508862.745399996638298 ], [ -13593392.4316, 4509023.371799997985363 ], [ -13593402.1094, 4509023.456799998879433 ], [ -13593545.13740000128746, 4509240.123599998652935 ], [ -13594472.8129, 4510672.734300002455711 ], [ -13595013.9201, 4511498.427100002765656 ], [ -13595013.8871, 4511502.231299996376038 ], [ -13596405.458700001239777, 4513663.620099999010563 ], [ -13597988.3027, 4516130.098700001835823 ], [ -13599955.798700001090765, 4519171.566799998283386 ], [ -13601871.079599998891354, 4522145.349500000476837 ], [ -13603461.7644, 4524605.476199999451637 ], [ -13604729.576299998909235, 4526576.739600002765656 ], [ -13605974.239, 4528516.687799997627735 ], [ -13608929.3523, 4533077.820799998939037 ], [ -13608929.3374, 4533070.529899999499321 ], [ -13610191.453, 4535014.179399996995926 ], [ -13611463.1604, 4536977.762699998915195 ], [ -13612072.3883, 4537922.921099998056889 ], [ -13612313.46339999884367, 4538296.893100000917912 ], [ -13615641.2139, 4544329.053400002419949 ], [ -13618473.4393, 4549459.475400000810623 ], [ -13622595.330400001257658, 4563001.784500002861023 ], [ -13622357.7716, 4563068.377400003373623 ], [ -13620724.4813, 4563526.068300001323223 ], [ -13618426.558600001037121, 4564178.582299999892712 ], [ -13616592.4644, 4564701.491800002753735 ], [ -13615770.7449, 4564931.447899997234344 ], [ -13615639.667100001126528, 4564968.1233000010252 ], [ -13615483.072700001299381, 4565008.920100003480911 ], [ -13615438.6412, 4565014.940099999308586 ], [ -13615413.4924, 4565012.215199999511242 ], [ -13615392.246, 4565018.42059999704361 ], [ -13615367.1326, 4565022.040500000119209 ], [ -13615314.9396, 4565050.261200003325939 ], [ -13615282.138799998909235, 4565065.276900000870228 ], [ -13615227.9591, 4565062.331799998879433 ], [ -13615195.1613, 4565065.262100003659725 ], [ -13615166.1307, 4565065.043499998748302 ], [ -13615131.3704, 4565056.520000003278255 ], [ -13615102.4015, 4565058.839699998497963 ], [ -13615065.625, 4565055.394400000572205 ], [ -13614992.2007, 4565075.816500000655651 ], [ -13614914.9092, 4565082.227799996733665 ], [ -13614883.993900001049042, 4565079.461000002920628 ], [ -13614851.1342, 4565079.843000002205372 ], [ -13614820.2471, 4565075.793399997055531 ], [ -13614785.3867, 4565081.898900002241135 ], [ -13614750.6445, 4565082.271899998188019 ], [ -13614717.8007, 4565094.738200001418591 ], [ -13614648.2042, 4565108.829499997198582 ], [ -13614617.258000001311302, 4565110.508000001311302 ], [ -13614588.3196, 4565096.944600000977516 ], [ -13614559.3174, 4565089.727200001478195 ], [ -13614536.0772, 4565077.473200000822544 ], [ -13614485.8806, 4565057.39130000025034 ], [ -13614468.433600001037121, 4565052.812200002372265 ], [ -13614375.725, 4565059.10080000013113 ], [ -13614340.9191, 4565077.272399999201298 ], [ -13614309.9596, 4565080.854299999773502 ], [ -13614240.4201, 4565098.129900000989437 ], [ -13614207.5538, 4565113.779799997806549 ], [ -13614141.8357, 4565139.97410000115633 ], [ -13614093.5389, 4565151.6941 ], [ -13614060.6635, 4565157.163900002837181 ], [ -13614029.774500001221895, 4565150.57209999859333 ], [ -13614014.2629, 4565149.820299997925758 ], [ -13613985.267, 4565155.956900000572205 ], [ -13613948.54, 4565176.662000000476837 ], [ -13613873.1787, 4565170.363399997353554 ], [ -13613795.929200001060963, 4565150.705899998545647 ], [ -13613755.293499998748302, 4565135.136699996888638 ], [ -13613710.884399998933077, 4565115.090599998831749 ], [ -13613621.9066, 4565097.886699996888638 ], [ -13613509.8305, 4565070.957299999892712 ], [ -13613420.985100001096725, 4565057.57039999961853 ], [ -13613386.1827, 4565043.952399998903275 ], [ -13613362.966400001198053, 4565028.521700002253056 ], [ -13613333.9503, 4565014.943300001323223 ], [ -13613310.8016, 4565009.689599998295307 ], [ -13613283.7294, 4564998.663500003516674 ], [ -13613260.540199998766184, 4564999.123999997973442 ], [ -13613237.373599998652935, 4564996.411700002849102 ], [ -13613206.431699998676777, 4564997.436300002038479 ], [ -13613148.4695, 4565002.720200002193451 ], [ -13613082.7077, 4565012.384499996900558 ], [ -13613049.8533, 4565026.123700000345707 ], [ -13613005.4066, 4565053.751599997282028 ], [ -13612974.4955, 4565070.034400001168251 ], [ -13612943.5965, 4565095.863399997353554 ], [ -13612914.610100001096725, 4565108.989600002765656 ], [ -13612879.7927, 4565128.438400000333786 ], [ -13612856.6419, 4565134.610500000417233 ], [ -13612798.589499998837709, 4565160.862999998033047 ], [ -13612760.008299998939037, 4565168.840300001204014 ], [ -13612713.5985, 4565182.46339999884367 ], [ -13612669.1342, 4565201.19370000064373 ], [ -13612636.301, 4565211.746799997985363 ], [ -13612595.6888, 4565234.949400000274181 ], [ -13612562.8931, 4565270.941399998962879 ], [ -13612543.556400001049042, 4565284.140000000596046 ], [ -13612526.1654, 4565302.445100001990795 ], [ -13612468.1227, 4565338.230099998414516 ], [ -13612437.203200001269579, 4565344.346799999475479 ], [ -13612365.7446, 4565366.04619999974966 ], [ -13612317.3988, 4565375.844200000166893 ], [ -13612286.494800001382828, 4565390.856100000441074 ], [ -13612213.061, 4565400.467100001871586 ], [ -13612176.3361, 4565400.817199997603893 ], [ -13612106.7769, 4565411.721400000154972 ], [ -13611998.465599998831749, 4565437.570900000631809 ], [ -13611967.5673, 4565454.496899999678135 ], [ -13611936.699099998921156, 4565464.429300002753735 ], [ -13611907.6743, 4565482.647699996829033 ], [ -13611876.774, 4565497.022399999201298 ], [ -13611830.336, 4565525.265799999237061 ], [ -13611907.6571, 4565761.741899996995926 ], [ -13611762.7163, 4565807.015600003302097 ], [ -13611668.016800001263618, 4565843.795400001108646 ], [ -13611610.0658, 4565877.038800001144409 ], [ -13611563.6819, 4565908.465400002896786 ], [ -13611434.167399998754263, 4566015.530599996447563 ], [ -13611411.0152, 4566032.5154 ], [ -13611308.5528, 4566059.67790000140667 ], [ -13611101.772300001233816, 4566129.263599999248981 ], [ -13611173.2331, 4566017.932300001382828 ] ] ] } } +] +} diff --git a/data/alameda_county.prj b/data/alameda_county.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/data/alameda_county.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/data/alameda_county.shp b/data/alameda_county.shp new file mode 100644 index 0000000..bb29650 Binary files /dev/null and b/data/alameda_county.shp differ diff --git a/data/alameda_county.shx b/data/alameda_county.shx new file mode 100644 index 0000000..2c3f5bc Binary files /dev/null and b/data/alameda_county.shx differ diff --git a/data/dataset.csv b/data/dataset.csv deleted file mode 100644 index e69de29..0000000 diff --git a/images/Berkeley Map.jpg b/images/Berkeley Map.jpg new file mode 100644 index 0000000..bde452f Binary files /dev/null and b/images/Berkeley Map.jpg differ diff --git a/images/CRS.jpg b/images/CRS.jpg new file mode 100644 index 0000000..17c18e7 Binary files /dev/null and b/images/CRS.jpg differ diff --git a/images/UC Berkeley.jpg b/images/UC Berkeley.jpg new file mode 100644 index 0000000..4a2f89f Binary files /dev/null and b/images/UC Berkeley.jpg differ diff --git a/images/projected-coordinate-systems.jpg b/images/projected-coordinate-systems.jpg new file mode 100644 index 0000000..90c595c Binary files /dev/null and b/images/projected-coordinate-systems.jpg differ diff --git a/images/raster_vector.png b/images/raster_vector.png new file mode 100644 index 0000000..3dee81b Binary files /dev/null and b/images/raster_vector.png differ diff --git a/lessons/1_Spatial_Dataframes.ipynb b/lessons/1_Spatial_Dataframes.ipynb new file mode 100644 index 0000000..05da1cb --- /dev/null +++ b/lessons/1_Spatial_Dataframes.ipynb @@ -0,0 +1,1240 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python Geospatial Fundamental: Getting Started with Spatial Dataframes\n", + "\n", + "* * * \n", + "\n", + "
\n", + " \n", + "### Learning Objectives \n", + " \n", + "* Recognize different forms of geospatial data and coordinate reference system (CRS).\n", + "* Use `GeoPandas` and `matplotlib` libraries to map and analyze spatial data.\n", + "
\n", + "\n", + "### Icons Used in This Notebook\n", + "🔔 **Question**: A quick question to help you understand what's going on.
\n", + "🥊 **Challenge**: Interactive excersise. We'll work through these in the workshop!
\n", + "💡 **Tip**: How to do something a bit more efficiently or effectively.
\n", + "⚠️ **Warning:** Heads-up about tricky stuff or common mistakes.
\n", + "📝 **Poll:** A Zoom poll to help you learn!
\n", + "🎬 **Demo**: Showing off something more advanced – so you know what Python can be used for!
\n", + "\n", + "### Sections\n", + "1. [Introduction to Geospatial Data](#section1)\n", + "2. [Introduction to GeoPandas](#section2)\n", + "3. [CRS and Map Projection](#section3)\n", + "4. [Mapping and Spatial Analysis](#section4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Be sure to have text between code cells explaining the material, step-by-step.\n", + "\n", + "Keep the following in mind:\n", + "- Keep narrative text limited! \n", + "- Avoid discussion of edge cases or caveats.\n", + "- Use colloquial languague and minimal jargon; if you need it, explain it.\n", + "- Use **boldface** to highlight key concepts and important terms, but use it sparingly.\n", + "- Don't use italics.\n", + "- Use en-dash for lists.\n", + "- Use `code font` for anything in code like variables, functions, and packages.\n", + "- Use `code font` for menu items (like `Restart Kernel`), and data frame rows/columns. \n", + "- When discussing functions, include the trailing parentheses (e.g. `print()`).\n", + "- When discussing methods, include the dot (e.g. `.sum()`).\n", + "- Consistently use emoji for relevant sections. See below for some examples." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "\n", + "# 1. Introduction to Geospatial Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will begin today's workshop with an overview of the geospatial data. We will introduce the following concepts that you will frequently encounter when working with geospatial data:\n", + "\n", + "- Geospatial data\n", + "- Coordinate Reference Systems (CRS)\n", + "- Geographic Coordinate Systems (GCS) and Projected Coordinate Systems (PCS)\n", + "- Types of spatial data (vector vs. raster)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Geographic Data vs. Geospatial Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "A single unit of **geographic data** includes:\n", + "- **Location (where)**: UC Berkeley\n", + "- **Attributes**: data that describe the location\n", + "\n", + "Also great to have metadata:\n", + "- **Source**\n", + "- **Datum, Projection**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "
\n", + "\n", + "**Geospatial data** encodes location geometrically with coordinates [latitude, longitude]: [37.87131, -122.26019]." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Coordinate Reference Systems (CRS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Coordinate Reference System, or CRS, is a system for associating coordinates with a **specific, unambiguous** location on the surface of the Earth. There are two types of coordinate reference systems: **Geographic CRS** and **Projected CRS**.\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "Geographic CRS use angular units (degrees) while projected CRS use Cartesian units (feet or meters) more commonly used for local or regional mapping and analysis. \n", + "\n", + "### GCS is widely used and expressed as latitude and longitude.\n", + "- CRSs are referenced in software by numeric codes, often callsed **EPSG codes**.\n", + "- WGS84 (EPSG: 4325): Based on satellites, used by cell phones, GPS; best overall fit for most places on earth.\n", + "- NAD83 (EPSG: 4269): Based on satellite and survey data; best fit for USA; used by many federal data products, like Census data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### PCS transforms geographic coordinates (lat/lon) to 2D coordinates (X/Y)\n", + "\n", + "- All maps projections introduce **distortion** in area, shape, distance or direction. \n", + "- Specific map projections minimize distortion in one or more properties. \n", + "- You need to know the coordinate reference system of your input data.\n", + "- You need to select the CRS that is most suitable for your data and application.\n", + "- The Mercator projection, for example, is used where angular relationships are important (shape, direction), but areas are distorted, especially as you move away from the equator." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Types of Spatial Data\n", + "\n", + "There are two fundemental spatial data models:\n", + "- Vector\n", + "- Raster\n", + "\n", + "
\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 2. Introduction to GeoPandas\n", + "\n", + "In this lesson, we'll learn about a package that is core to using geospatial data in Python: GeoPandas. We'll explore the structure of geospatial data (which, turns out, is not too different from DataFrames!), including geometries, shapefiles, and how to save your hard work." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What is GeoPandas?\n", + "\n", + "[`GeoPandas`](http://geopandas.org/) is a relatively new package that makes it easier to work with geospatial data in Python. In the last few years it has grown more powerful and stable, allow Python to practioners to more easily and flexibly work with geospatial data in Python, which had been difficult in the past. `GeoPandas` is now the go-to package for working with vector geospatial data in Python. \n", + "\n", + "If you work with raster data, check out the [`rasterio`](https://rasterio.readthedocs.io/en/latest/) package. We will introduce it briefly in the second half of the workshop.\n", + "\n", + "`GeoPandas` gives you access to all of the functionality of [`pandas`](https://pandas.pydata.org/), which is the primary data analysis tool for working with tabular data in Python. GeoPandas extends pandas with attributes and methods for working with geospatial data. So, if you're familiar with pandas, working with geospatial data is a natural next step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import Libraries\n", + "\n", + "Let's start by importing the libraries that we will use. If you haven't already, you can install `GeoPandas` within this notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting geopandas\n", + " Obtaining dependency information for geopandas from https://files.pythonhosted.org/packages/3e/cf/ede993ed7070c5487e6db550aad490178c06eaa48ad26ff5e5263f995fba/geopandas-0.14.1-py3-none-any.whl.metadata\n", + " Downloading geopandas-0.14.1-py3-none-any.whl.metadata (1.5 kB)\n", + "Collecting fiona>=1.8.21 (from geopandas)\n", + " Obtaining dependency information for fiona>=1.8.21 from https://files.pythonhosted.org/packages/7f/27/b24c1610c7ae5716709321f04d38d7b8b71ed531f80df4f697b9ad99cfc3/fiona-1.9.5-cp311-cp311-win_amd64.whl.metadata\n", + " Downloading fiona-1.9.5-cp311-cp311-win_amd64.whl.metadata (51 kB)\n", + " ---------------------------------------- 0.0/51.1 kB ? eta -:--:--\n", + " -------- ------------------------------- 10.2/51.1 kB ? eta -:--:--\n", + " ---------------------- --------------- 30.7/51.1 kB 330.3 kB/s eta 0:00:01\n", + " -------------------------------------- 51.1/51.1 kB 434.8 kB/s eta 0:00:00\n", + "Requirement already satisfied: packaging in c:\\programdata\\anaconda3\\lib\\site-packages (from geopandas) (23.1)\n", + "Requirement already satisfied: pandas>=1.4.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from geopandas) (2.0.3)\n", + "Collecting pyproj>=3.3.0 (from geopandas)\n", + " Obtaining dependency information for pyproj>=3.3.0 from https://files.pythonhosted.org/packages/79/95/eb68113c5b5737c342bde1bab92705dabe69c16299c5a122616e50f1fbd6/pyproj-3.6.1-cp311-cp311-win_amd64.whl.metadata\n", + " Downloading pyproj-3.6.1-cp311-cp311-win_amd64.whl.metadata (31 kB)\n", + "Collecting shapely>=1.8.0 (from geopandas)\n", + " Obtaining dependency information for shapely>=1.8.0 from https://files.pythonhosted.org/packages/9e/39/029c441d8af32ab423b229c4525ce5ce6707318155b59634811a4c56f5c4/shapely-2.0.2-cp311-cp311-win_amd64.whl.metadata\n", + " Downloading shapely-2.0.2-cp311-cp311-win_amd64.whl.metadata (7.2 kB)\n", + "Requirement already satisfied: attrs>=19.2.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from fiona>=1.8.21->geopandas) (22.1.0)\n", + "Requirement already satisfied: certifi in c:\\programdata\\anaconda3\\lib\\site-packages (from fiona>=1.8.21->geopandas) (2023.11.17)\n", + "Requirement already satisfied: click~=8.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from fiona>=1.8.21->geopandas) (8.0.4)\n", + "Collecting click-plugins>=1.0 (from fiona>=1.8.21->geopandas)\n", + " Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB)\n", + "Collecting cligj>=0.5 (from fiona>=1.8.21->geopandas)\n", + " Downloading cligj-0.7.2-py3-none-any.whl (7.1 kB)\n", + "Requirement already satisfied: six in c:\\programdata\\anaconda3\\lib\\site-packages (from fiona>=1.8.21->geopandas) (1.16.0)\n", + "Requirement already satisfied: setuptools in c:\\programdata\\anaconda3\\lib\\site-packages (from fiona>=1.8.21->geopandas) (68.0.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas>=1.4.0->geopandas) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas>=1.4.0->geopandas) (2023.3.post1)\n", + "Requirement already satisfied: tzdata>=2022.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas>=1.4.0->geopandas) (2023.3)\n", + "Requirement already satisfied: numpy>=1.21.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas>=1.4.0->geopandas) (1.24.3)\n", + "Requirement already satisfied: colorama in c:\\programdata\\anaconda3\\lib\\site-packages (from click~=8.0->fiona>=1.8.21->geopandas) (0.4.6)\n", + "Downloading geopandas-0.14.1-py3-none-any.whl (1.1 MB)\n", + " ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n", + " ------- -------------------------------- 0.2/1.1 MB 5.9 MB/s eta 0:00:01\n", + " ----------------- ---------------------- 0.5/1.1 MB 6.0 MB/s eta 0:00:01\n", + " ------------------------------ --------- 0.8/1.1 MB 6.6 MB/s eta 0:00:01\n", + " --------------------------------------- 1.1/1.1 MB 7.8 MB/s eta 0:00:01\n", + " ---------------------------------------- 1.1/1.1 MB 6.4 MB/s eta 0:00:00\n", + "Downloading fiona-1.9.5-cp311-cp311-win_amd64.whl (22.9 MB)\n", + " ---------------------------------------- 0.0/22.9 MB ? eta -:--:--\n", + " --------------------------------------- 0.5/22.9 MB 16.5 MB/s eta 0:00:02\n", + " - -------------------------------------- 1.1/22.9 MB 14.4 MB/s eta 0:00:02\n", + " --- ------------------------------------ 1.9/22.9 MB 14.8 MB/s eta 0:00:02\n", + " ---- ----------------------------------- 2.7/22.9 MB 15.7 MB/s eta 0:00:02\n", + " ------ --------------------------------- 3.7/22.9 MB 16.9 MB/s eta 0:00:02\n", + " -------- ------------------------------- 4.8/22.9 MB 18.0 MB/s eta 0:00:02\n", + " ---------- ----------------------------- 5.9/22.9 MB 19.0 MB/s eta 0:00:01\n", + " ------------- -------------------------- 7.9/22.9 MB 22.0 MB/s eta 0:00:01\n", + " ----------------- ---------------------- 10.2/22.9 MB 25.2 MB/s eta 0:00:01\n", + " --------------------- ------------------ 12.6/22.9 MB 34.4 MB/s eta 0:00:01\n", + " --------------------------- ------------ 15.5/22.9 MB 46.7 MB/s eta 0:00:01\n", + " ------------------------------- -------- 17.9/22.9 MB 54.4 MB/s eta 0:00:01\n", + " ------------------------------------- -- 21.4/22.9 MB 59.8 MB/s eta 0:00:01\n", + " --------------------------------------- 22.9/22.9 MB 72.6 MB/s eta 0:00:01\n", + " --------------------------------------- 22.9/22.9 MB 72.6 MB/s eta 0:00:01\n", + " ---------------------------------------- 22.9/22.9 MB 46.7 MB/s eta 0:00:00\n", + "Downloading pyproj-3.6.1-cp311-cp311-win_amd64.whl (6.1 MB)\n", + " ---------------------------------------- 0.0/6.1 MB ? eta -:--:--\n", + " -------------------- ------------------- 3.1/6.1 MB 66.5 MB/s eta 0:00:01\n", + " --------------------------------------- 6.1/6.1 MB 76.9 MB/s eta 0:00:01\n", + " ---------------------------------------- 6.1/6.1 MB 64.7 MB/s eta 0:00:00\n", + "Downloading shapely-2.0.2-cp311-cp311-win_amd64.whl (1.4 MB)\n", + " ---------------------------------------- 0.0/1.4 MB ? eta -:--:--\n", + " ---------------------------------------- 1.4/1.4 MB 44.6 MB/s eta 0:00:00\n", + "Installing collected packages: shapely, pyproj, cligj, click-plugins, fiona, geopandas\n", + "Successfully installed click-plugins-1.1.1 cligj-0.7.2 fiona-1.9.5 geopandas-0.14.1 pyproj-3.6.1 shapely-2.0.2\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# Install GeoPandas if you don't have it yet\n", + "%pip install geopandas" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import geopandas as gpd\n", + "\n", + "import matplotlib # Base python plotting library\n", + "import matplotlib.pyplot as plt # Submodule of matplotlib\n", + "\n", + "# To display plots, maps, charts etc in the notebook\n", + "%matplotlib inline " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read in a Shapefile\n", + "\n", + "As we discussed in the initial geospatial overview, a *shapefile* is one type of geospatial data that holds vector data. \n", + "\n", + "> To learn more about ESRI Shapefiles, this is a good place to start: [ESRI Shapefile Wiki Page](https://en.wikipedia.org/wiki/Shapefile) \n", + "\n", + "The tricky thing to remember about shapefiles is that they're actually a collection of 3 to 9+ files together. Here's a list of all the files that can make up a shapefile:\n", + " \n", + "* `shp`: The main file that stores the feature geometry\n", + "* `shx`: The index file that stores the index of the feature geometry \n", + "* `dbf`: The dBASE table that stores the attribute information of features \n", + "* `prj`: The file that stores the coordinate system information. (should be required!)\n", + "* `xml`: Metadata: Stores information about the shapefile.\n", + "* `cpg`: Specifies the code page for identifying the character set to be used.\n", + "\n", + "But it remains the most commonly used file format for vector spatial data, and it's really easy to visualize in one go!\n", + "\n", + "Let's try it out with [California counties](https://gis.data.ca.gov/datasets/8713ced9b78a4abb97dc130a691a8695_0/about), and use GeoPandas for the first time. We can use a flexible function called `gpd.read_file` to read in many different types of geospatial data. When using it, we'll specify the `shp` file:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Read in the counties shapefile\n", + "counties = gpd.read_file('../data/California_County_Boundaries/cnty19_1.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAG+CAYAAACODo/GAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3U0lEQVR4nO3dd3wc5bU38N/M9l7Uu+Te5G4ZGxyaqQaSAKEmBlMuJCRguCTgXJLAGxInuZBwCQnFtDgQzDUtkBBKLh2MreIi96bepdX2vjvvHyut1VbbZpv2fD+fBXs1O/OMLJ2dfeY85zAcx3EghBCSsdhUD4AQQkh8KJATQkiGo0BOCCEZjgI5IYRkOArkhBCS4SiQE0JIhqNATgghGY4COSGEZDgK5IQQkuEokBNCSIbLqED+2Wef4dJLL0VxcTEYhsFbb70V9T44jsMjjzyCWbNmQSKRoKysDL/+9a/5HywhhCSJMNUDiIbNZsOiRYuwYcMGXHHFFTHt46677sIHH3yARx55BNXV1TCZTOjv7+d5pIQQkjxMphbNYhgGb775Jr71rW8Fn3O73XjggQfw8ssvw2g0YsGCBfjtb3+Ls846CwBw6NAhLFy4EPv378fs2bNTM3BCCOFZRk2thLNhwwZ8+eWX2LZtG/bt24fvfOc7uPDCC3Hs2DEAwDvvvINp06bhH//4B6qqqlBZWYlbbrkFBoMhxSMnhJDYTZlAfuLECbzyyivYvn071qxZg+nTp+Pee+/FGWecgRdeeAEAcPLkSbS0tGD79u3YunUrXnzxRdTX1+PKK69M8egJISR2GTVHPpmGhgZwHIdZs2aNet7lciEnJwcA4Pf74XK5sHXr1uB2zz33HJYtW4YjR47QdAshJCNNmUDu9/shEAhQX18PgUAw6mtKpRIAUFRUBKFQOCrYz507FwDQ2tpKgZwQkpGmTCBfsmQJfD4fent7sWbNmgm3Of300+H1enHixAlMnz4dAHD06FEAQEVFRdLGSgghfMqorBWr1Yrjx48DCATu3//+9zj77LOh1+tRXl6O7373u/jyyy/x6KOPYsmSJejv78dHH32E6upqXHzxxfD7/VixYgWUSiUee+wx+P1+3HHHHVCr1fjggw9SfHaEEBIjLoN8/PHHHIBxjxtuuIHjOI5zu93cz3/+c66yspITiURcYWEh9+1vf5vbt29fcB8dHR3c5ZdfzimVSq6goIC78cYbuYGBgRSdESGExC+jrsgJIYSMN2XSDwkhJFtRICeEkAyXEVkrfr8fnZ2dUKlUYBgm1cMhhJCE4zgOFosFxcXFYNnJr7kzIpB3dnairKws1cMghJCka2trQ2lp6aTbZEQgV6lUAAInpFarUzwaQghJPLPZjLKysmD8m0xGBPLh6RS1Wk2BnBCSVSKZTo7qZueDDz4IhmFGPQoLC0Nu/8Ybb+C8885DXl4e1Go1Vq1ahffffz+aQxJCCAkj6qyV+fPno6urK/hobGwMue1nn32G8847D++++y7q6+tx9tln49JLL8Xu3bvjGjQhhJBTop5aEQqFk16Fj/TYY4+N+vuvf/1r/P3vf8c777yDJUuWRHtoQgghE4j6ivzYsWMoLi5GVVUVrrnmGpw8eTLi1/r9flgsFuj1+km3c7lcMJvNox6EEEImFlUgX7lyJbZu3Yr3338fW7ZsQXd3N1avXo2BgYGIXv/oo4/CZrPhqquumnS7zZs3Q6PRBB+UekgIIaHFVWvFZrNh+vTp+MlPfoJ77rln0m1feeUV3HLLLfj73/+OtWvXTrqty+WCy+UK/n04DcdkMlHWCiEkK5jNZmg0mojiXlzphwqFAtXV1cGemKG8+uqruPnmm7F9+/awQRwAJBIJJBJJPEMjhJCsEVetFZfLhUOHDqGoqCjkNq+88gpuvPFG/O1vf8O6deviORwhhJAJRBXI7733Xnz66adoamrCzp07ceWVV8JsNuOGG24AAGzatAnr168Pbv/KK69g/fr1ePTRR3Haaaehu7sb3d3dMJlM/J4FIYRksagCeXt7O6699lrMnj0bl19+OcRiMb7++utgm7Suri60trYGt3/66afh9Xpxxx13oKioKPi46667+D0LQgjJYhnRWCKaSX9CCJkKool7VI+cEEIyHAVyQgjJcBlR/ZBvbq8ftc0GCFgGIkGg+BfLMBCygf8DAMMAHAewLCBkWbi8Pnh8HESCwDYtA3Y4PT74OQ5iAQsfx53aB8uA4wCrywur0wOb2wezw4N+qxt+jkOOQgyNTASpSAA/x8HPAX6OA8dx4LhAR2kGQ52lOcDr98Pr5+Bw++D0+OD2+sEBwde6vT6wDAORgIVIwAbHL2AYSEWB54QCFhIhC7Ew8HWWYcAygFDAQiRgAt8LloVIyEDIBp4TsiwEgsA5CVgGYgELhgn8WcAwcHp98Ps5sGxgXwADiZCFVCSAVMRCLhaCHfo+Do91JA6BkxWwgWOBAfx+LvC9GLEdExwvAzCA1xf4fnj9HPxDOw183zhoZWJo5KLE/fAQkoayMpALWQa3bq2D3e2Le1/5Kgl6La7wG04Bi0o12Nue3hlH9104B98/a3qqh0FIUmXl1IqfC1zN8UGQRd/B4av5dMZSJ0CShdL/NzMBhAIWUp6CUplOzst+CCEkVlk5teLzc7C6vDG/nmUAsYDFghINjvZaeRxZeqOLXULSU1ZekXcMOsbdeIvGgmINxEIWdS2DMNo9/A2MxI2nGTNCMkpWBvK97caYX6uSCmH3+GB2xn5FTxJndL4LIdkhKwP5J0f6Yn7tjHwljmfRdEqmSf91yoTwL+sCebfJiff2d8X8+gGrCxE0tSYpkgEVJwjhXdYFcomQxWnTcmJ+vUIizNqrvkyYf87WfxuS3bIukOsUYvz5u0vx2u2rsLhMG/XrO40OqCRZmexD88+EpKmsC+QAIBEKsLxSj/88f1bUrzU5vJiWp0jAqAghJDZZGciHTctTRv0apUSADqMjAaNJf5kwbUH3L0g2yupAnq+SIEchjuo1swtV6Le6EzSi9MbQkiBC0lJWB3KRgMX6VZVRvUbAZvG3LAPiOEOX5CQLZXFUCli3MHTj6LHyVRLsaTMmbjBpjlL7CElPWR/Iq3IVEAkiu4rrs7gwp0CV4BGlr0yYWqELcpKNsj6QC1gGZ87Kj2hbDoHpGGGW1kql9ENC0lPWB3IAWFGpi3jb+tbBrE0/zIQwngmfGgjhGwVyRJ+G2GawZ+dVeSZEckKyUHYuURxjeYUWRRrJUL9OBiwbeIezunwItIlkYHS44fEFIpnD48f8YjUOdJpTOu5ky4Q4TnPkJBtRIAegkorQZZq87+bCEg32dZzqVynOph5vQyhGEpKesi8aTcDp9YffaEQUU8uEaB6wJW5Aacrrj+D7lGL0ZkOyEQVyAP2Wya/GgVMBQsAA0/OUcHp8kIkFgYdIkNgBpolMqH5ISDaiQA6g0xS+dsre9sC0io8Ddrca4fD44XD7Ag+PDzWV+kQPE3qFGAuK1Qk/DiEks1AgB3jp+JPom2wKsQAVejmO9FhQU6WHkP7lCCFDKBwAONRliXsfJ/qsCUtJlIlY2D0+HOgyw+PjsKvJgLlFdGU+EcpaIdmIAjmAI93xpxH2W93IV0t4GM1oeoUY84o14DjAPXRTtlQnw+Hu+N98piJaEESyUdYHcp+f4+WKHADKdHJe9jOsXC+DweZGfcvgqOe1clEwpz2ZMqFmFl2Rk2yU9YH8ZJ8VDo+Pl335eYx0NZV6OD0Tp/tl5apSQkhIWb8gaGeTgbd9tQ7YIRcLYHdH/8agkgoxM18JhmEgYBnsbh0MedXNgAHLUDogISQg6wP5/x3q4W1fPRYXzpiRiy+O90f1uppKHTpMTjS0GiPafnebEWfNzoPF4Qk8MTSfMHydHqgbHig1wIAJW7WQQ+iFNMNf4ziAZYHlFbrgIYNvJEPHGz5OYJ6am2Cn4T9JDL1y0q0nOxtpluT0EzJSVgfyQZsbXx4f4G1/OQoxapsNWF6hg4Bl0DDJVfVIFpcXHYPR9QH95EgfVlbpef1EEQ2ZSMDblBSfLpxfmOohEJJ0WR3If/zaXrh9/C075zjA5fWjbujmpFYugpBlJu3xKWCA5gE7b2NImjSdpqebnSQbZfXNTrmY3/exsXXKjXYPyvSTZ7KU6eVwxDCnXqCWwGj3RP063tD8PCFpI6uvyEt0Ml731ztBzZbdrcbA8n0mkOrIMMC+NiPcQ1MubQY7aqr0ONZjwWCEgXlOoRKHu63oMYevEZMofGboEELik9VX5LecUYVvzMrjbX+tBjv0CvG453c1G7CryYD6lkHUNQ9CLhFicakWQKB2y64mA2ZG0QtUxvMniamE3l9INsrqQJ6jlOCbi4p53eeM/PDdhox2D9w+HyRCBjMLlBCxDCzOyKdJXCHyy5OJrsgJSR9RBfIHH3wQDMOMehQWTp4l8Omnn2LZsmWQSqWYNm0annrqqbgGzLdus5O3fSklAtQ2R5ZFcqjbAoZhcKzHijlF6ojmyZUSIZaWa3GwK/WdidI1jlODaJKNor4inz9/Prq6uoKPxsbGkNs2NTXh4osvxpo1a7B792789Kc/xZ133onXX389rkHzic+gOH+oJkokOA7BlZuNHaaIMleKNNKIc80JIdkj6slWoVAY9ip82FNPPYXy8nI89thjAIC5c+eirq4OjzzyCK644oqQr3O5XHC5Tt3IM5sTcwXKcRwaxtQxiZRKIkC+WgqdXIyjvRbIRYIJb3byqc+aupubmSJdPykQkkhRX5EfO3YMxcXFqKqqwjXXXIOTJ0+G3HbHjh04//zzRz13wQUXoK6uDh5P6DnhzZs3Q6PRBB9lZWXRDjMiJ/ps6DLFNrVSpJXhRJ8NdS2DUIqFkIuFaOpPXPu3dKuvwjCBN7N0Q3GcZKOoAvnKlSuxdetWvP/++9iyZQu6u7uxevVqDAxMvDqyu7sbBQUFo54rKCiA1+tFf3/oZeybNm2CyWQKPtra2qIZZsT+1dgV82ub+mzQK0QAgE6TEycTGMQBIF8tgSeS3qJJ4vFxqMhRhN8wyeiKnGSjqKZWLrroouCfq6ursWrVKkyfPh1/+ctfcM8990z4GmbMUjtu6Ddt7PMjSSQSSCT81/Yeyevz49W62N8gPH4OlTkKGGxG/gY1iVyFBJ1G/m7M8sGXhlGTsmlINoor/VChUKC6uhrHjh2b8OuFhYXo7u4e9Vxvby+EQiFycnLiOXTc/rW/G+1R1jcZa0+bEbnK8XnjfFteqcO+DlPCjxMtH5VfJCQtxBXIXS4XDh06hKKiogm/vmrVKnz44Yejnvvggw+wfPlyiESieA4dF7+fw58+Ph7/fjggV5nYTw7pLB0vfv305kKyUFSB/N5778Wnn36KpqYm7Ny5E1deeSXMZjNuuOEGAIG57fXr1we3v/3229HS0oJ77rkHhw4dwvPPP4/nnnsO9957L79nEaW393by1ipNLk78Db90vfKlAlWEpIeo5sjb29tx7bXXor+/H3l5eTjttNPw9ddfo6KiAgDQ1dWF1tbW4PZVVVV49913cffdd+NPf/oTiouL8fjjj0+aephoXp8fj3xwhLf9CQWJWxwrEjCYU6jCbsodj1iavucRklBRBfJt27ZN+vUXX3xx3HNnnnkmGhoaohpUIr2xuyPuufGRXAmsye3xcZOWwE21NMuIBEA3O0l2yqpaKzaXF797j7+rcQAJrcu9olIXc557MnBc+kVyjgI5yUJZFchf+LIJ/TyvjmQSGMnTsQPPSP40XH6TjimRhCRa1gRyp8eH579s5n/HCYwbUqEgXRvxAEjTrJU0HBMhiZY1gfztvZ0w2BIw35zASFvXMojyMB2GUioNIzmlH5JslDWB/OWdreE3SkMFammqhxBaGn5coJudJBtlRauZ471W7G0zpnoYUclXSVCqk6FtMH0bM6djzPTSFTnJQlkRyLfXJ6boVqKIBAy8Pi7ta4/TgiBC0sOUD+Q+P4e/7mhJ9TAitrBUAwHLZMQiIH/6FGMkJKtN+UA+aHenfRrfsMVlWrQP2tN6EdBIRnvkfUaTJR2newhJtCkfyP++pzPtf7kZBphdoML+DiNSUXJcImTg9k7c7TJfJYFEyMLr5yAWsmAZBhwX+LOf4yAXC8AwgGDMMk+L04uBRGQJEULGmfKB3GRP72BSlatAnkqCXU2RNW2OlV4hRrFWCiHLos/iglYuhIBlcbLPBofHhxylGAqJEAabG2U6OZQSIcBwqGsehJ8DllXoUB9FW7wVlToK5IQkyZQP5BtOr8Lbezsjam6cbFIRi/ZBe9Qt4pQSAayuyaeLBAwwp0gFpUSEE31W9Fvdo/LoO4yjt++3uoNTOhM1pHZH+VEhzT8EETKlTPlArlOIcU1NOX7zr8MJ2X+smRssAywo0aCueeKrXJGAgVQkgMXpDT6nkggwt0iD/Z0mlOlkKNRIh8bABCInA3h8fuzvMKFII8OxXlvUATgUZ5T3GSihhZDkmfKBHADKdOm3OnJ5pX7cdMqych2EAgZGhwdN/TYUqKWYkS/E3jYj5hWp0W9zY1dz4DV2twNtk1RxbDXw+wmkecCGFZU6MAzQZXKizTB5BclE1qCZTLo1qSYkGbIikJ87Nx8sk151ODqNDjAAKnMV8Pj80CvEqG8dfXV+vNcKANDJRdjfOX66I5k8Pg61Q58eRAIG84pUONgVujnHxLdOT5GJWMwtUqOp3wYfx8Hs8E66faRYCuQkC2VFID/SbUlYEI81I6ZcL4fT4wvOj09WI30wzdL8hAIWRkd8Y9IrJKMWPC2v0MHq8qJlwAaHJ/bpIKq1QrJRVtRaSWhN7xjjhtXpRbFWxu9YksTh9qEwTA0Yn5+DYIKLY6VYgMocOTqMo9+46loGcbjbgupSDXTy1PVzJSQTZUUgP39eAW4/c3pC9s0xsUXyfR0m7Gs3oaZSz/OIkuPQBJktIzW0GrGsQg+V5FRPU6VYgHyNdNIMol1Ng3B6/ZhbpIppXFQ2gGSjrAjkLMvgvgtnY8PplfzvPM5P8t4MXOe+tFwLZwTTH7uaDZCJhZhbpIJeIYZSKsTJvvCplg63DyaHB1W5iqjHxlAkJ1koKwI5EPgF/8Wl8/GHqxdBI0ufj+6+DJrTLVRLka8KzG1HOupeiwuHuiyQiQRRzX13Gp1weHwQTzQ/MwmK4yQbZU0gH/btJaXYfvsqyMWC8BsngUiYOf8EEiGLXKU4ptd2GB0wRXmDtNvkhF4hgSjKYE5ItsmcKMKjWQUq/PHaJTF9dB8nzhhjSrOMlFAUYgHy1RJ0m/nteRpOt9mJIo0M84vVEW3P0iU5yUJZkX44kXPnFuCcOfl4e28nNr66J2WFtZr6bRCxDDxpOMWSr5KgIkcOBkCnyRnMI19eoUNdFHVX4jW8uEkmEkDAMpiZr8TuEI1CKI2cZKOsvCIfxjAMvrm4BN9dWRH7PuK8JNemcapdZa4Ctc2D2NU8OCrPvTuR6ZyTcHh8sLq8ON5rxcqqibN90r3SJSGJkNWBfNiCksg+tk8ozsDRb3VjQYkmvp0kgF4hgsE28TSKSpbaD3IWlxe+EBGbZlZINqJADmBZhR43n1EV24v5CBxpGHxm5KtwvHd8quD8YjUOTbI0P1l6za5ROerDUlXjhZBUyto58pFm5Cvxs0vmQSJk8e9DPcGP50MFBYN/HsZxXPB5xQTBJFrpVOhJLRVCLGRDXo0rxOnxI9NqsGNllR47xxQeo1orJBulx29lmrjz3JmobxkcFxwm0zZoR75KEvz7qTcBbtQbwugpmNElpZr6rZCJBXC4U9uSLl8lAccBfVZXyHZzTm/6tM072GVGmU42qgqkgOZWSBaiQD6CVCTAr769AGt//1nEr3F5OfRa4k/Jm12owpHu1E5ZlGhlIbNBhklF6ZF/DwTayUlFAkzLVeDkUPExiuMkG9Ec+Rgz8lX41bcXJPWYcwqV6OPhzSAeApZBryWCbJQ0ywrps7iQO+ITEc2skGxEV+QTuK6mHM9+3hR1C7ZYqaQiHO62JvQYYiGLxWVajJ75P2XQ5sax3vBjsLn5qRvOqxFvLlRrhWQjCuQTYBgG9104B3e+shtuX+KLWtmTMDe+uEzLS4PnA51mLK/Q4WCXOSnjjoR/RCQX0CU5yUI0tRLChQsK8eE934Bamvj3umTUfeGz4UJdyyAWFKdR7vuIU6ObnSQb0RX5JCpyFFhUpsXnx/oTehyOA5aUa8EyzOibdWOyXjhw46YOuDELY7ih/XEcF/wzwwBKqRDFWik6jfysyqxtNmBpuXZUl59UGfktoStyko0okIdRlatIeCC3urw4nISMleUVOt4COYdA84hFpRrsbTdF9JoZ+QoY7Z6QqY2xco0oj0txnGQjmloJQyePrWxrNIwOD2YWKBN+nL3tRiws0UAu4u+f/WS/DQsjKDGwskqPlgE7dHIxpvFRdXJIvkqCQ92nuhXRgiCSjSiQh/GNWblQJHgOu9vkTMobhsfH4WCXGQtKtLzt0+L04kSfFXMKJ2/N1m50wOPjcKzXCpZlMKdQiTmF4d+8xAIGYgEDkYCBiGUgZAEBcyrvplAtAcsAEiEDqZBNmzrzhCQTBfIwllXo8YOzZyT8OLuaDBM2K+ab18/Bz3OJQJvbB5fXD71i4kqOQhYw2k5NpxzvteJwd+CxuEyLfJUEUhELqYiFTCQI/lnAMnD7OLh9HDw+Dh4/B68f8HGn7m/u6zDD5eXg8nJwev1RdSEiZKqgQB6BVdNzknIcWRJWTS4q1aCxw8j7fpv6bSjWyKCSjL/tsrRcD1uIVMU9bUYM2NxwevxwevxweHzBP8fUBo/q2JIsFFcg37x5MxiGwcaNGyfd7uWXX8aiRYsgl8tRVFSEDRs2YGBgIJ5DJ1WhWpqU47BJuCSXigRweRMT7PZ3mjF3RCefYo0ES8o02NU8ef46r31LKf2QZKGYA3ltbS2eeeYZLFy4cNLtvvjiC6xfvx4333wzDhw4gO3bt6O2tha33HJLrIdOumSltOUoJOE3SnO7mgJpidUlGoiFAuxuiyyjhS8Uxkk2iimQW61WXH/99diyZQt0Ot2k23799deorKzEnXfeiaqqKpxxxhm47bbbUFdXF9OAU0EtFSWlk0+pToolZRosLddiSbkWpToZ78dIRk0XlmFwvNeaVgW2CJnKYgrkd9xxB9atW4e1a9eG3Xb16tVob2/Hu+++C47j0NPTg9deew3r1q0L+RqXywWz2TzqkUoysQBnzspL+HGaB+zY3WZCQ6sRu1uNKNLwP6Xj8yf2ZuCKSh32d5rg9vmhnGC+nBDCv6h/07Zt24aGhgbU1tZGtP3q1avx8ssv4+qrr4bT6YTX68Vll12GP/7xjyFfs3nzZjz00EPRDi2hElFiViMTwefnoJGLUKqVYV+7kfdjjKWWibG4TAyHxw8Ry6Cp3xbyRmQ4YgEDqVgAvVyMPJUEA1Y39nea4fT4MSNfGXGD5mKtFDq5GC6vH/1WF4x2T0zjAWhlJ8lOUV2Rt7W14a677sJLL70EqTSyq8WDBw/izjvvxM9//nPU19fjvffeQ1NTE26//faQr9m0aRNMJlPw0dbWFs0webenzcj7ysuaKj3c3kAz4Y5BB3Y2GcalziWikl9jhwl72kw40m2BUMDGHMQBYH6JBn5/oO9obfMgTvbbgs0xjvdasbRcG3YfswtVsLm8ONBpxvFeK0QsC7Ew9nvwVGuFZKOorsjr6+vR29uLZcuWBZ/z+Xz47LPP8MQTT8DlckEgGD0vunnzZpx++un48Y9/DABYuHAhFAoF1qxZg4cffhhFRUXjjiORSCCRpM+Nvy2fneR9n4M2d8pznp2e2IO4VMjCNdTVPhQhO3lALtHKYLS5YXKc2kef1YXlFbqIr+bHojhOslFUgfzcc89FY2PjqOc2bNiAOXPm4L777hsXxAHAbrdDKBx9mOHtxhZ8Skc+PxdV67dICFgGPRE1cUjs90cSx5XvvGJ12IJZEwVVjUwEhViAUr0cx3osGJxgGuVQlxkrq/TBvw9XUB/7/+GvDf8cMUhOJUlC0k1UgVylUmHBgtHdcxQKBXJycoLPb9q0CR0dHdi6dSsA4NJLL8Wtt96KJ598EhdccAG6urqwceNG1NTUoLi4mKfTSByO4+DmuU+lRiaC0R6+cJTTG/8V+4x8JWQiAThw8Pk5HOo6NUUUT1ZJJHPRfo7DtFwFcpRiMAwDo92NE71WmBwedJpCv5HZ3L6Y3zy/u6oyptcRksl4Tyvo6upCa2tr8O833ngjLBYLnnjiCfznf/4ntFotzjnnHPz2t7/l+9AJYXR4YHby2xXHYHOHnT4o1kqhkghRrpdDImTBMgxYNvAJwc8FgiTHcWDABAtFMTh1FcwwzNBVK4fGjkAut4hlMC1XEVyiH0+z56M9obsJTctVIFclgZBl0DxgC/bTTAaaIyfZiOEyYH7DbDZDo9HAZDJBrVaHfwGPWgZsOPO/P+F9v7MKlJMGQ51cBKlIgK5JrlzjNbJpcTSWletQ3zrxm1BNlQ67mmKb3+bDU99dhgsXFKbs+ITwJZq4R4m+YSglQmjlorhS4ibSMmCfdL+VOYqwHe3jIRMJ0GawR7y9SirEjDwFRALBhEvuFWIBFpRoUBtmOX6iUfohyUYUyMPIUUpw4fxCbKvlNwXS5fVjYakGtc0TX73Gk4IXiWl5CozskTY8ETM8hePx+SEXC8EAMDu9sLi8ky63n1+siWleWykRYG6RGj4/B6+fC3ZCApjA/7lRndyGxnrqD2M/T4qSUUKSkDRDgTwC+UkqmjXS0R4LyvQytBkcCdm/UMBgb1voFbNLy7Uh32RGkokEqC7VoDmGKZr5xWp0mZwRHSdSfJfoJSQTUBnbCHzvtIqE5Ccf7DRDF6KGy6Ddg16zCwtL+W9yPK9Ijb1hilmJBJH9aOSpJNjVZEBvlDVclpRpcbzXCoON37ZvDJXNIlmIAnkE8lQSzC3k/ybr7EIVrJNkxLi8fhzsNGN6ngJzClW8hShHBAuBDBGkRwJAYZT1YEQsg5pKPXa3GeHiIb2SEEKBPGLT8/ntqSkSMOg0OuAJU4vb6+dwos+Gw90WyMUCVJeosaxCh3im0FsHbGEXzngiDbJRTmXMLlKFrU8eD5paIdmIAnmE7r9oDm/V/HKVYlSXaNBtjm46wub2obHDjPqWQSyt0Id/QQiFGinsYXLI2wftca38HCtfJcHiMg32dyS2kqXHR4GcZB8K5BEq0cpw6SJ+VqIWqKVhl7eHE880i8nuweyCyZsle/2BFEg+lOlkcPv82JOEJhO8dhsiJENQII/CrWuqeNmPQhz/lX3HYOzZLFa3DypZ+DEopeG3CRc2c5ViODw+3vPwQ/EmuN46IemIAnkUpuUpUZyAZg+xiPYm41gNLYPIU01eYZKPoFiZq0C/ld/MlMnQFTnJRhTIo3TGzNy499FvcyFHIY5rH/EuYPRzgdWYI6sMjhXuhqcsgkqDgzynF45VU6XHolJN8EErO0k2ogVBUarMjX/e+GSfDSsqdRiII8jtah7Esgod6mOs2w0EWstZXV4oxIIJG0wIQtQT18hEmFOowoFOE6QiFkUaCbpMLshFLOYVa4LFwGqq9NgVZwngGflKuDw+2N0+eP0cBCwDrVwErUwElmFQ22QYNb0T7iYuIVMRBfIoRVOfZDIn+2wo08swYHHBHmODifqWQdRU6uNK5+u3hq7E6OdGj0uvEEEmEkIkYILL8T8/NgCWAeYWqdBucKCuZRBzClVQS0U42DlxhkqBWoISrQwsw2BvuzFkpkm5Xo7jveMLi022iMg2SaMLQqYqmlqJgtnpwT/2dfGyrwGbG20GB6pLtXHtJ94VpxIhA7Nz4huRHh8HlgEWl2lQoZfBYPOgSCNF88DoNzM/BxzqssAyFEQPd1uwq9kwYfegqlwFbC4vGlqNqGsZxKwCJSpz5BMeP5b7AI9+cBQfH+6N+nWEZDIK5FH47/eOwMJzbfJ4pwJO9Fkxp3DyVMLJlOsVIcvptg7YsbxSjz1tJrQM1XyJ5VYiwwDzi1VYXKqFz++H1XXqnA90WsAwDOYXq0fNuS8u08Q0LePw+HDL1jq8sqs1/MaETBE0tRKFRWVa/PXrFl73ebjbjDmFqpibO2tkImhkIpw+Iyc4RTHcDi2AAzhmXOL58DZiAQub24tO4/i65xw4HO85Na6VVXpYXZGnEZbr5SjSSHGsx4IDnaHPr2mo4Fa+SoJSrQxKqRAHOmLPOff5OWx6oxFmhwf/8Y1pCWliTUg6oUAehSuWluBYjwVP89iM2ePj4PH5Y74xmKMUx91TdFmFbsJA7vJycHlPBe7D3eZRjZInk6sUo33QjtYo7in0WlxRF9+azOsN7TjaY8VvrqiOuAgYIZmIfrqjwDAM7rtwDtavquB1vyf6bNjVZMCMfCXmF6sQTUntpj4bZHH03gQC+eLzi9WYXzx5YbBoplVKdXKkOqVbIhTg9YZ23PRi7YTz9YRMFRTIo8SyDH549oywS9xDWVquRU2VHjkKMfJUEhRppCjTyVCul8Pj88Pm8mFZhS7i/fVb3VhcFtjnyio9VDHUg9nbZsKBTnPYHp6R1qOSiQXwpziKK8QCHO4OZM18fqwfVz21A73mxLXNIySVqGdnjJweH775xJc40jN+7lcvFyFfLQXLAEIBO3SFHZiVbjc60RfB9MGyCh12tw6GvaoVMMDySn1wemVFpS7mRg1qqRAenx+OEOmQKqkwopu98ea382FZhRb1LcZRz5VoZfjLTSswIz/2m8OEJEs0cY8CeRw8Pj82btuDDw52ozJXAbfHBw5AkUYW97w1AMwpVOJwd+gGzQCwqEwzqklEvkoS1zxziVaGDqMDM/KVMDs8o/YVaSCfX6zGgRA55MlQkSNH5+DEJYI1MhGevWE5VlTGXj2SkGSIJu7R1EocRAIWj129CDVVehzrsaLF4ECrwcFLEAcCjSUkwsknzF1jrp57LS6U6yfOy46Ewe5GTZUePWbnqOqHOrkooumS6XmKlAbxJWXaSeu8mxweXP/sTvyrkZ/1AISkAwrkcRIJBfjjtUt5K3E7UlO/HbMn6Uy0rEI7YdqiNkT7uEg43D7sajLA4vRCLGRQXaJGdYkaVbkKzCtWY2WVHisqdVhUqsHsAhWKtVLIRad+jPisYR6tmqpA56FwNcndXj9+8LcGvPhlU5JGRkhiUfohD/QKMf547RKopUK8vJPfhSgdgw4sLdficJc5uJS/QCVBec7Ey9cBoN1gh14hgsEWe+nYeUVq7DxpCNvBaJhEyEKnEMPj44LTM8myolIHuViAT4/2R/wajgMefOcgTE4PfnT2TLBUbItkMLoi59GPL5iNaXn8NGMYNmBzo6HViGUVOtRU6VGul6PH4kJt8yAGQ9T4Ntg9mJYbX2s6sZCNOIgDgWmgbpMTx3qtKNXJ4jp2NMRCFgc7zTGtkJ1frMIfPjyGja/ugctLxbZI5qJAziOtXIxfXDo/Ift2+TjsajJEvMCmrmVw0hK14expM2J5pQ7TY3hjauGpsFgkFpdqJ6zcGAl2aMXn23s7seGF2pA1ZwhJdxTIefaNmbm4fGkJ7/t1xhCsjHYPdHHMl9c1DyJHOXnziYl0m5yYwfMnk7GWVeggFbJxVX4cmYHz1YkBXPXUDnSbKNecZB4K5DxjGAYPrJuHGp7T2/qs0acUHumxYFaMC5eGHe4yI18libpHqD6GN4BIzS9WY0/rIJxhGl+Ek6Mc3dzjcLcFVzz5FY73xlb3hpBUoUCeAHqFGHefNwsFav6CWYFaioIwrdkmEm99brPTC61cFHXVw/bBiadXVBIhqks0KNJIIRVF/+O3pFyLA51mhElMiUh9ixHqMX1JO4wOXPnUDtTFcaVPSLJRIE+QVdNzsO0/VsVVYnakPW1G2Ny+qIP5RPPVZToZqks0qKnSo6ZSh8ocOWYVKLGySo8FE9RbiaVZdKfRiaqhbkpiIQshy2BpuRYKiQCNHSZ0mZwQMAxWVulDtozTyUWYX6zG0nItijQSFKgk2N1qjHosk5no38doD+Sav7e/m9djEZIotLIzwbpNTvzuvcN4a08HL0WkSnQydAxGl9q3aroeTrcfB7rMmF+snjQYjl2VOb9YjS6Tc9KuPKF8Y2YuOo0OtA3aoRCLYLBPvI9AvRk53D4/xEIW4ACD3YXjvbaQ+85XSWBxeiBgGFTlKSAXC2NaiKWWCeH3Y8KiWiwDPPTNBfjeafwWSSMkErREPw0d6jLj+y/Vj+uuEy0hy6BEK4s4M0TAAHJJYGm9Ti4KmbI4bGxt9EKNFHq5CIe6LFFPr6ys0se9yjVXKUa/NfAGkK+SoEwng9Prx9Eey6iFP/HUmJmZr8SxEDn5AHDH2dNx7/mzqa45SSpaop+G5hap8dr3V2NxmTau/Xj9HPqtLiwq1US0/ZwidTA7I1wQB8ZXOOw2OXGwy4JibfS54fFcIczIV2BFpQ5GuwcqqRAClkGf1YX6ViMOdJrHrd70+jjMzI8+d75AJZk0iAPAnz4+gR+/tg8eX3w3VwlJFArkSZSrlOC/1s2FMM5VhDa3L+KViPEeCwgsfU/WSs0ClQQrKnVoGbCjtnkQXj8Hi9MLn5+btIxuh9EBvUKMlVX6kBk2JVppcN4+eLwI+4K+Vt+OW7fWwe6muuYk/VAgT7IVlXpctjj+uixN/TYoJeEbSuxtN6G6JLKr94Dx0XIghtRHYFx3ubBqqnTgANQ2D4atlzJsSZkWS8q0GLS7sbPJgJ1NBswqUKFwRMaQXi7GvCI1Ok3OUW9INVV6uKNIYfzkSB+ufebrmO4XEJJIFMhT4J7zZkEQ55Wy0e7BvOLIAnS/1RnxlflE08B6hXj8kzxjAJzotUVVgne4SNbYQllHeiywOL1YXqnDikodzE4PDnaZwXGA389BIxOCZQCzwxN1r9S97SZc+dRXaEvi6lVCwqFAngIlWhnkIVLuorGryYAFJeFv/naZXJgR4fzxyOkLkYDBikpd2DnkkPuKcDuVVIgVVXoMRHGlW6yVTtq8wub2oa55MDg9M8zr5yBgA2mPsTa8PtlnwxVPfoWDKSzXS8hIVP0wBVxeP1ZU6mG0u+HjOEiFAnAccLzPGvXHdmuIRg+LyjQQC1gwYMCBQ3uEKYsGmwcrq/TgAMhEbFQVBccJkxBVrJWiVCfHwU5zVI2nFUNvgr4Y8zkNNk/cqaC9FheufnoHnl6/DKun58a3M0LiRIE8BaQiAZ67YTlcXj8u/p/PsLc/0OEnXyVBRY4cLVGkKPq54SZyo4kFbEzpeH1WV7AcQKSZMSNpZELMzFeh3+oadSU80pIyDQQsixaDPaoAPmxWoYr3hUGxsLi8uPH5Wjx2zWJcXF2U6uGQLEZTKynCMAykIgF+d+Wi4HO9Fhf6La6w3exHajXYsaRcO+55V5x1SACMmsfXyUWoqdIjb0wNlcocOfQKcXBlKMMwqGsZRPOAHY0dpuDV87CaSj12t5lQ1zIYUe/SsZZX6HgJ4vUtgyjjodyu2+fHHdSkgqRYXIF88+bNYBgGGzdunHQ7l8uF//qv/0JFRQUkEgmmT5+O559/Pp5DTxljg5LN7cOhLjOWV+gi3kdjhwlj72Xy0anHP+K9oCpXgV1NBugVIqys0qOmSo/FZRq0DzpgsLlxtMeKnU0GGEfkqnt8HBaVajEzX4ml5VqsrNLHVa1QrxBHXMY3HK+fg0QU/30K4FSTit+9dxgZsL6OTEExT63U1tbimWeewcKFC8Nue9VVV6GnpwfPPfccZsyYgd7eXni9lI8LAGfNzsOv3j006jk/F6gnvqBYDYZhcKjLHHKaAggEzEK1BN3mU1e48caTEp0MJwcCNznnF6uxtz0w/XOkJ7obn1a3N+abpWNV5sjRwNOUikIsQGeIwl6x+vMnJ9BtduK3VyyESEAfdknyxBTIrVYrrr/+emzZsgUPP/zwpNu+9957+PTTT3Hy5Eno9YHSrpWVlbEcdkqanqcMubx8/1BWhFomRKlWhi6TE6U6ORo7TKO2q8pVoHVgdF2SWG8EAoGl9buaDMF5d4VYEPP+DndbIBexwTZ1sZpbpOItiAOBTz5ysQAz8pUhW+bF4o2GDhhsbvz5+qWQx1BsjJBYxHTZcMcdd2DdunVYu3Zt2G3ffvttLF++HL/73e9QUlKCWbNm4d5774XDETqLwuVywWw2j3pMVSzLoEw3edd7s8OLg10WDNo9ONlnHbXAp1AjhZ/jUKyVoVwvR0WOHJU5crTFeLWpV4iwc0QQn1OowqEY0/SAQKPj2UXx1cdRiAXoMfPf8MHu9mHQ5kbNUENpvnxypA/XbdmJQVo4RJIk6kuGbdu2oaGhAbW1tRFtf/LkSXzxxReQSqV488030d/fjx/84AcwGAwh58k3b96Mhx56KNqhZSSO41DfGnl2ic3tQ7/VGayC2G1yYnmFDnWT5FRHY3qeEgZbYF8qiQAdgw5Y4qxpHu80z4ISTdzFt0IZsLkxMLTv5RU6dJud6DE7I15ZGsqeNiOueOorbL2pBqVh3qgJiVdUV+RtbW2466678NJLL0EqjaxGhd/vB8MwePnll1FTU4OLL74Yv//97/Hiiy+GvCrftGkTTCZT8NHW1hbNMDPK0R5rVOmGQGCBT8egAzPzlVheqYPREX+vSZYJXH3bXD7UVOmxrEILAcvw0hzjcLcZOlls0wwVelnCgvhYrQY7Bm1u5CgkWFIWferlWMMLh47E8YmGkEhE9dtVX1+P3t5eLFu2LPicz+fDZ599hieeeAIulwsCwehMgKKiIpSUlECjOfWLMXfuXHAch/b2dsycOXPccSQSCSSSxLUKSyfv7O2M+bXDNxHzlGIsLtNALBAEC5x4fH7sazfB5+eglAgxr1gNBoHpBKvLg6Z+O/QKMWYXKuHzA30WFw53WyATCyAXCTBgc0MuYtFhjH9Kw+nxB+fdHVHMlbMMIEziTcPh8gA2tw/dZieWlGmwu80U5lWT6zG78J2nvsKzN6xATRzNsAmZTFSB/Nxzz0VjY+Oo5zZs2IA5c+bgvvvuGxfEAeD000/H9u3bYbVaoVQGlokfPXoULMuitLQ0jqFnPr+fw7uNXfjm4mIYbG4c6bZEVWtkWJFWhj0TBJyl5VoIWRZ72gbHLbzRy0WwOD3oMjrRY3GB4zjMK1LD7fMFGzqwDIOyHDkOdcV/RWl1+TA9T4mDXeaIV1UurdChLsYa43wYmQUUD7PTi+89txN/vHYJzp9fyMs+CRkp7sYSZ511FhYvXozHHnsMQGBapKOjA1u3bgUQyHCZO3cuTjvtNDz00EPo7+/HLbfcgjPPPBNbtmyJ6BhTobHERD4/1odPjvThZ5fMAwB4fX488/lJPPL+kYiDXU1lfLnZw0QCZsJ54apcBZr6Q3fqidSyCh3qWwYjms/Xy0WYka+KqWQBn4o1UnSa+LvJyjLA5surcfWKct72SaaulDaW6OrqQmtra/DvSqUSH374IYxGI5YvX47rr78el156KR5//HG+D51x1szMw/0XzQkuIhEKWPzgrBl46JsLInp9iU6GhlZ+5o8nCuIsE3sJ21DqWgaxMswUw8wCFXY1G1JeLrZIE//Kz5H8HHDf643408fHaeEQ4RW1ektDfj+HK5/6KmzeNN850BNZWq7lJX97+Io81N9HWliqwb72+Oam+VCkkcLl8cEQQWelaN24uhI/v2RexA1CSPahVm8ZjmUZbL99Na5eXjbpdid6rZg7QRd4PiVqheKeNiOqJyjBW6iWRFXONpG6TE5wAC81WcZ68atm3PXqnqgaWxASCi09S1MClsH9F83BefMKMD1fiR/+rWFUd3sgUPHQ6+ewtEwLhmHAMIFu8Ea7B908LaAZtCcmqPr8HI732TAtV4GTQ3PwZToZFBJhzHXCY7GiUgcGDOpaDBPelxi0ezBo9/Caqz/snb2dMNrdePK7y6CU0K8iiR399KQxnUKMtfMKAACvf381nvr0BP740fFRy+WVUiEG7Z5RNyTFAgZKiRDWOBfyAIHMFYaJf1HPRBMIDrcPJocH+SoJFBIh3F5/UoP49DwFdrcOwusHlpVrIRSwsLu9aOwYv5J4os5JfPj8WD+u3/I1nr9xBXKU2ZFyS/hHUysZQioSYOPaWfjjtUsgEjAoUktQU6XH0W4LmvptyFedCgJuH4dSnqYDOgbt0Mnjb/UWKhAO2NyQigRQSoRxNXgeWy43nCXlWpzos2F4ZqO+1YidTQY0dphRU6UftxDKxsObYih72034zlM70M5zES+SPSiQZ5iLq4tw9uw89Fnd2NVkgM3tAxCoDDjSkW4LFpZqsLBUg6pcOXRyUVTH0chEWFahw7IKPS/ZI5Nd0LYa7DA73FH3Bh1+c5hTqAKDQLGvSM6zMkeOzkk6Ju1qMkAlFUItPfWBNdEZASf7bbjyyR20CpTEhAJ5BjpvXuG4sraDYzIrOAD72k3Y125CU78dg3YPaionT/sr1kqxskqP2QVKmBwe1LcM8jI9AyDs3ESLwQGpiI2qJMDiUi1WVOrQbrDD6vZhZ5MBXp9/VC13uVgAlgkcfmm5FvOL1WgesKMnzMKr4702lGhlYBlAKmIh46l2+WS6zU5c9fQO1LckpyQBmTpojjwDTZ+gkfKxXisWl2qxp90Y8nWHus2QiQVwDF3FMwwwM18JrVyMLqMDbYMOdPKwJJ9lgAK1BHKxEDlKCY73Wie9Ih/WaXQiXyUJFgSbiEjAYEmZDh1GO3a3Gcd93eLyoa5lEJU5ckhFApgcbpToZBi0uaNKo8xXSWB0uLG8Qg+GQdLqvZgcHlz/7E48ef0ynD0nPynHJJmPAnkGKg6xUKXP6oKAAUIV7rM4vZhVoIRSIgTLMDjRZ8XRKBtFTEYiZDC/WDNUQdAFn9+FE32Bm7CRZnz0WlzQy0WozJGjeUQxMb1ChDK9HAMWNxpaDQiXtTfytTBFt6gpTyWBgGXQZXKiy+TC0jJNsBuSSipCjkLMewbLSE6PH7durcN/f2chvr0ku8tYkMhQIM9ABWoJ5hapRrVVAwA/x2F5pX7Sq0c+A/dIM/IV0MjEIRf5RNOYwmD3wOPnMD1PEXwjGLR7oJF50R7HDdFI5KkkEA4F8WENI+rY9Fvd6Bi0o7pEPWF2C1+8fg53v7oXBpsHN59RlbDjkKmBAnkGYhgGQpYdFWyGDdjcKNFKealaGKmZBUqc7LPB54+/Jsswi9MLv5/DnEIVNDIROC5Q0TGR8lQSiARM2Oklt49L2qKlX/7jIPqtLvzkgtlgEpUDSTIe3ezMUFLRxP90bq8fKml0GSrxWFSqQVOfLa7WcqHY3D409VshE7HY1WyIum57NHKV4oiC+LBOoxPzi5NTLuLJT05g0xuNCfkek6mBAnmGmuhqfNjhbguW89i6LJRFZRoc6Jy8MXQ8ZuYrMatAhSM9FjAADAlaZZqrFEMiZKO+0ZvMBsvbatvwg5fr4fT4knZMkjkokGegv+1sRfskedAAcKjTjFxl/At5QoXoxaVa7O9ITBCfXaDCgmI1jvVa0dhhRpfJhSXlWt6PAwA5CjEkQkFMU1FOtxclWv7rsITy/oEebHihFhYn/0W8SGajQJ6BFJLwOc02tw/FCQoyS8o0aOw08f5Rf06hCvOK1DjSY8H+MXVl+q2JuRrPUYpjWlFappOh1+JCv9WJxaXaUbnribTj5ACu3fI1+nkuL0wyGwXyDGR2RrZIZ1+7CUvKtHEd62iPBSsqddDIAvPuS8o02Ndh5jWIzytSYU6hCoe7LTjYNXEmSKvBjkU89NEcyxHDVEWpTgabK1De1uXlsKfdiLqWwaS1ctvfYaYl/WQUCuQZ6FuLi/HjC2ZHtKS9ecCGvDiKMVmcXtQ2D2JGngJLyrS8BvH5xWrMKVTiYJclqcWyhk3LU8AbZSZMiU4Gu9s34Xx9bZMByyt0YBhALEzsr1bT0JL+oz20pJ9Q+mFGUklFuOPsGfD5Ofz+w6OTbuv1+TG3SA21TAinxw8GgRWdZqcHswsC0xgME1iNyYAByzJgEKh6GFjaHvg/B2BfBz/TKfOL1fD4/OPK8oazt82EBcXqcdMusVBJhRALWJyMYrFQ8XCjiRCphxwCnxx0MjEKNZKh8gaB7+fwd43jOHBDf2dGvI4Zs5/gv8cEGYcClgE7lIq46Y19+Nm6eVhcnpypHZKeKJBnsIoxhbJGErLAvCIN2gbt+OrEAAQsMyoIy0SCqHp9tg06MC1PgZN9seeKLyhRw+WJPoCPJOWp5km5XoYDnZFfzRZppPD6ubBz9cPNsw12NxaVabB3gqbYfLt2y048/b1l+MasvIQfi6QnCuQZbM3MPEhFLJye8dMD0/KU2NdxKoiMvZKOZW44VtUlajg8fuznYSWk1x/boiCNTITZQ92UGCCqhtIFagn8fi4YpCMxs0CZtEqGDo8PN/+lFo9dvQTrFhYl5ZgkvdAceQbTK8S4dGHxhF9LRI4zxyHqG3oLSzVo7DDz1lt0T5sJ84qiW4ijlgqhV4ixq8mAXU0G7GwyRByUC9QSMEDYaoljKUTCCd9gE8Xj4/DDVxrw8s6WpB2TpA8K5BnumpryCZ9XJKB1WDRXsSNfw3d/YaPDjUjvJaqkQuQqJTGNPUchBgOg2xx9ql+v1ZmU0rcjcRzwX2/ux58+Po4M6KlOeESBPMOFWqp/ss8KkYD/2hwOd3T1yUu0Moh5/nTQaXRiSQQ391QSIfJVkmBP0GhNy1PEFMQBwOvjMLNAiarc0PcxEuW/3z+Czf86TME8i1Agz3Chbr4Z7W4sKeM3kyFfJYnqZuOcQhWa+q1wJqBT/LFeKwpUodMqlRIhCtSSYPXEWNjdsd9H6LW4sK/dhHaDY1z3pmR45rOT+PFr+6JOrySZiQJ5hgvVgMHrBzqN9qjbp02mKleB2ubI6nDPLlShud8GlzcxV4VGuwe5IQK5XCxAkUaK43EEcQC8fJLw+DkoEzDNFYnX6tvx/ZcbqD5LFqBAnuEOdoVObwtci3FQy/gJJJHmkM8qUKJ1wJaQK/GR+q0uzMhTjHpOJhagTCfHMR5urgp5mpoS8H2TIAofHuzBzX+p5a9lH0lLFMgz3NIJ5ornFqmwrEKHUp0cBpsHerkYMwvGt4eLVl3LIJaFqSkyM1+JdoMdjiRkbPSYXTjeZ8PcIhXyVRLIRAJU6GU4wtNqx7GNO2KV6FWe4Xx5fADXP7sTg0mqoU6SjwJ5hjttWg5KdYHiWAtLNKip0sHq8qK+ZRC7hjoFNQ/Y0dRnQ4U+/rlav98PkYAJVv1TiE/Nmc/MV6LT6IA9iWl3AHCoy4ICtRQVOXIc7uYnzXF6ngKtBn4aZbQmsI56pPa2GXHV0zvQPUn5Y5K5GC4Dbm2bzWZoNBqYTCao1ckp5p9JBm1uLHv4Q1SXaLC3PfRUy5xCFbrNzriuNMt0MhRppNjbbkRVrhJWlxcKsRA+jkO30QFrHDcII1GulyNXKYaQZQGGg8/Hweb24Ui3JWTJ3UgIWQZeP4fFZVpYXV64vD60GfhpK6cQC+Dy+hNWtz0apToZXrp5JSpzFeE3JikVTdyjQD5FvPhlE97Z24n6MJ3ic5ViVOgV2NdhhCdUl+Yo5ask8Pr9MNgSUydbIxNBJhKgRCtDfSu/TY/nFKqglAjh9PogFwuxu3WQt+/LSDPzlZCKWNjcvrjKHPAhVynBX2+uwdwoF1aR5KJAnoVsLi+a+m24+S+16Ikg9zlfJUFlrgLdJgda47zyzFdJ0G91gc8LTpYB5hSqoZAIsKfVCE+CrmYVYgGqchU40mNBjkIcc954pKRCFlV5CgxY3VEt+eebWirECxtqwt7zIKkTTdyjOfIpQiERYkGJBg9/qzqi7XstLuxqMqB90BF3UwSRkEWOIvZSuWOxDLCoTIuDXWbUNg8mLIgXaQLz6vs7zfD4uIQHcQBwev041GWByeHG4jLNqHsMyWR2evHdZ3fis6N9KTk+4RcF8inmvHkFuLamLOLt/VwgG2V+sRpaeWxNm3vNTvDV4J1lgBVVeuwOM0UUr+l5ChRppDjYlZp63i4vhz1tJswvSd0nzOFiW+82dqVsDIQfFMinoPsvnItV03Kies2BTjOqcmK7AbakXMfLNAHLAIvLtOA48F6fZaQSnQwujz9p1Qkn05uETwGT8fg4/PBvDXi1tjWl4yDxoUA+BWnkIvzlphpcvrQkqtcd77NicYjWcGqpENPyJg70fMXccr0cDa1G7GoyoLqU/7ZuQKB6Y8egA+1GB2wJzrCJRPugPdhGL1X8HHDf64149vOTKR0HiR3VI5+ixEIWj1y5COfNLcCfPjmOw10WnD0nH2Ihi6uXlyFHKcYP/7Z7VFVAi9OL5gEblpVrR2W/SEUsWJbByT4bVlbpx6XRCQUMCtWSmOeYGQYoUEtHVWw08bQYZ6SZ+cpgbn268PqB2QWqqJp8JMrD/zwEs9OLu9fOBMPXXBlJCspayRJ+Pwd2zHxFm8GOCx77bFxxKJGAwdJyHVoNdnSZnKip1E8aaCpz5Gg12GPKWmEYYGmZbsK0wvnF6ri6CY0V7jxSRS0TwuxInyX0N66uxM8vmTfu54UkF2WtkHEm+qUs08tx4+pKAIHgvaJSh8WlWiwaml4p0coiCn7NA3bML9ZAE2VNl0AQ14bMDeez2NTScm1aBnEAMDu8WJSgqaRYvPhVM+59bS9VTswgNLWS5W47czreO9ANlmFGVTacW6TCoSgyOho7TFhRqYu4OiLDBOrE1LeE3t7P44dFd4ILeMVLIkxNGmIobzR0wOby4vFrl6Td2Mh4dEWe5TQyEa5eUTauFRsDJuqbcLXNgyjXyyLadlmYIA4AR3osmFukimoMMpEADAPMK1JjabkWC0s0WFquxX4ep2gSIR2npN8/0IObX6yDjSonpr24AvnmzZvBMAw2btwY0fZffvklhEIhFi9eHM9hCc8uW1Q8rtTqwS4zJEIW+ZM0b5iIzeXDikodRJPMry6v0KEuTBAHAlMOh7osqKnShwx0SolwqFiYHssrdChQSyBiGRzsMqOh1Yh9HSY0JDgnPV4VennaTvt8cbwf331uZ0JuPhP+xBzIa2tr8cwzz2DhwoURbW8ymbB+/Xqce+65sR6SJIhaKoJggkjZa3FBLGChi2Kh0IDNjdrmQWjkIqyo1I3rrbmiMrIgPlJDiwFLyrTBJhksA8wrUqGmSg+hgMG+DhN2NRlQ1zKI5gE73AmolZJILQY7irWRfZJJhd2tRlz9zA70WqhyYrqKKZBbrVZcf/312LJlC3S6yJZ333bbbbjuuuuwatWqWA5JEmhfuwnuEDe22o0OaOXiqGty9FsDAV2vkGB5hQ4CBlHNoY/k9QMNrUZYnB4sKFFjZr4SB7ss2NVk4K1meKrIRSxyFGIoU7RUP1KHuy24+umv0WHkpyIk4VdMNzvvuOMOrFu3DmvXrsXDDz8cdvsXXngBJ06cwEsvvRTR9i6XCy7XqZxkszm95zczXZth8nrZTf02NPXbsLRcG/U0Ra/FhV6LC4tKNdgdZ+VCj4/D/o70+1lYWq6Fn+PAgAHDAAzDjFokxTCBDvfDeixOeIc+NVhdXgzY3JCIWKikQlic6Tsf3dRvw3ee/Aov3bIS0/Lib1RC+BN1IN+2bRsaGhpQW1sb0fbHjh3D/fffj88//xxCYWSH27x5Mx566KFoh0ZiZHSE7xxTqpXhaE/sTRv2tptQXaLG4S5LwopgpcqRbkvcq0QHrG6U6mRpHcgBoNPkxFVP78DWm1ZiXjGt6UgXUU2ttLW14a677sJLL70EqVQadnufz4frrrsODz30EGbNmhXxcTZt2gSTyRR8tLW1RTNMEqXGCK5y240OzCtSRZ1FMvY4c4pUk94IzUQ+HtIkS7QyWNM8iA/rt7pxzTM70MBzbXgSu6hWdr711lv49re/DYHg1Hyez+cDwzBgWRYul2vU14xGI3Q63ajn/H4/OI6DQCDABx98gHPOOSfscWllJ7/8Q1fELMvAZPdg1W/+b9zqzlDUMiGm5yrh8fljTumrLtHgcJc5I67MS3UyeP0cxAIWQkFgykQoCFz/MABYJpAhw4eaKn3alRCYjFwswLPrl2P1jNxUD2VKSlhjCYvFgpaWllHPbdiwAXPmzMF9992HBQsWjPqa3+/HwYMHRz335z//GR999BFee+01VFVVQaEIX3GPAjm/djUZ8PwXTfjjdUvwi7cP4G87o698V6SRwO72w+SI7WbjghI1jmTANAvLgNeGGZPRK8QQC5ik1EXni1jI4s/XLcXaeQWpHsqUE03ci2qOXKVSjQvWCoUCOTk5wec3bdqEjo4ObN26FSzLjts+Pz8fUql03PMkOVxeH/7rzUYc67Vi7e8/RUuMjYG7TC6U6+UxB/L9HWYsKFbjSI8lIa3V+JLMkRlsbswrUmdUIHd7/bjtpXr8/qpF+Obi6KptEv7wvrKzq6sLra1U2zhdcRxwycJiiAVszEEcAIQsMGCNL+Ds7zRjdoEKIkHq58xVUiHmFqlQrJWiVCdDuV6OqlwFkl1STp7maYgT8fk5bHx1T0yf7Ag/qPphFvL5Oaz9/aejStjGYka+ctzS/ljML1bjaAqvzFVSIfKUEpyM8/vBl0hXvqajB9bNxS1rpqV6GFMCVT8kk9rVZIg7iAOAgAnkUMeTyQIEuhPNStGVeboFcQCobx3M2Myeh/95CI/9+ygy4PpwSqFAnoWKNFJeijQd6bGiodUIg9UNvSK+LjcHOs0huxMlik4uQrlOhhylOKnHDUcnF0M8trZBBnns38ew+V+HKZgnUeb+tJCYVeYqeA2aPRYX8lWScYW3opXMBJYClQRysRAHuixweFLf8m0kg82NmQXxfcpJtWc+O4n/emt/MNWVJBYF8iy1ZmYer/s73G1FdbEGwjSeEijTy7CySo9l5Tr4gWDdkHQc8dEeCxaWBqo6Zqq/7WzFPf+7hxpUJAE1lshSZ87Kw+P/d4zXfe5pN2JRqQYHOs3j+nom08JSDZweH/wcRn28H7S7sXOCBTfN/TbMKVTC7vajNUzdmWSxu33Y125CTWV0xcrSzVt7OuHw+KhBRYLRFXmWirYtW6T2tpswr1gd25U5T7FfImRxtMeK471WnOizBR8G28Q57xaXD4e7rZCk4bz08T5r1DXh0837B3pw69Z6OOKsR0NCS7+fXJIU0/OUCQsQ+2IM5iz9NI5jsHmg4LF3aap8drQPN7ywCxZnZpcdTlf0q5Ol/ByQq0zcld6+dhMKNacKqy2r0I1rHTe7QAWGCXytWCsN2/otUrFe2KdjuzUAyE2zrJpY7Woy4LvP7oTRHr7aJokOBfIsJWAZbL25BisSOAerk4tQU6lHTaUee1oHYXZ4Rh3P5fVhdoESDDh0Gp28Za1EG49lIhYlWil8aZphMZWmJPa2m3DNM1+jz5I5ZQgyAQXyLJarlOCX31oAZYI+uh/rsWJXswG7mg3wcYEr5drmwWAmRvOAHRKhACyT2h/DmfkqdBidONGXPouCRpJPgamVkQLdhnagy0TdhvhCgTzLzSlUY8emc/CLS+dBJuI3q8DpnTjtbFeTIZiNIRGyqGsxYFGphtdjRyNdp1SGZUqd8mic7LfhO0/tQGsc9X7IKRTICVRSETacXoV//+eZqC5JTkDd1TyIGfnK4JSKlOc3kankYJcZNZWZm08eSvugA1c9vYOXej3ZjgI5CSrRyvDcDcuTdnV8vNeKdqMDswtU2Ndu5GWfJVpZ1FUdM2El+e62QUjTMD0yXt1mJ65+egcOxtikhARMvZ8MEpd8tRRb1i9HjiJ5mRJWtxdOT/yr/yr0cjg8XvRGeSNNIkr/X4PKHEXIqapMN2Bz49otX2NvmzHVQ8lY6f8TTJIuXy3Fzy+dl7TjdQw6sKJSjzKdLOZ9zMhXYNDuDrnoZzJMuk+SA7C5p948+UgmhwfXP7sTtc2Z0+ounVAgJxM6f14hZuYrk3a8Xc0GSGKcJ59doESX0QnzFLwpOKzL5MScwswupBWO1eXF+ud24Ytj/akeSsahQE4mJBML8NBl85N6zOO9Viwu00AljTzdbn6xGi0GO2xTKNd6IhyHqL4vmcrh8eGmv9Ti/w71pHooGYUCOQlp1fQc3L12FqbnhW+QzZc9bSbo5GIsqwi/UGlRqQZHeyy8zK9ngmw5T7fXj9v+Wo93G7tSPZSMQYGchMQwDO5aOxMf3n0mzpiRm7TjthrsqG8ZnLSE6/IKHRo7TGnduJlvjR2ZXw0xUl4/hx+9shtv7e5I9VAyAgVyEhbLMrhiWfI7pO9qMqBEJ8PCUg2qck99KlhRGehpmaol/ankSdMyAong83O4+3/3YNsuauocDgVyEpEzZuRBLEj+j0vHoAP72k1wD6Xe1VTqUNvMb2PiTAqNx3qsCStBnI44Drj/jUa8+GVTqoeS1iiQk4jkKsWjroqTrcPoCMybMwDfTYgy6Yrc6vJmRLok3x585yCe/OREqoeRtiiQk4gwDIObzqjkPYhGo75lELuaBrGC5+XqmXRFrhALIEnBJ6N08Nv3DuP3Hx6lps4TyM6fCBKTq1eU42+3npbyIlNTfXHMZOYVq9GTxSVgH/+/Y/jNvw5TMB+DAjmJymnTcvDAunkpvTK3u3wo1ca+CnSs7JuoyFwqqRBv7+3Aox8chT+LbvyGw3AZ8NZmNpuh0WhgMpmgVqtTPRwC4N3GLjz7+cmhq3PmVDBkTgVGhmGG5i24oVqxHIa/OlHwHP5BZCZ4bvh5DhzAMZCJWDi8foALPHdqBNypurQjdjhZsJaIBHB6fBEF9JFjPHU24V8zvP3I14YaHzfiD9zQ37iheu4qqQAWhxcsy8AyYiUrw5z6V2CYwEMkYOHzccGdM2O2Gzd4buK/jtpsxLd55BdCfT+G5/NH/nxMspuwBmxunByqG3/NijL86tvVEKTyqiKBool72XP7m/Dq4uoiPP3ZSextNabk+EKWgZeuyCalEAum9IrXbbVtcHn9+O8rF0KYpfcNhmX32ZO4zCtKXe0Pf/p/kEy5bHife3N3B+56dQ88vuxY9RoKBXISswvmF0KYoo+1WRCj4rKoVAOXd+pejY/0z31d+MHLDVlzvhOhQE5idtbsfFy4oDAlx56as6L86be6sKQ8O5bzA8CHB3tw21/r4fRkZzCnQE7i8sR1S/HmD1bj+pXlmFWQvLK3ZHIdRieMdneqh5FUnxzpw81/qYU9C9NTKWuF8MZod2Pt7z9DvzXxec4MAywt1wWvzOta+F22PxWIhWywtEE2WVGpw/M3roBKKkr1UOISTdyjK3LCG61cjGdvWJ6UBUMcF1jpWTf0mKIZaHHJgGu0hKhtHsT3ntsFkyP6blGZigI54dXiMi3OnVOQ9ONmacyalFaevL6r6WZPmxHffXZn1kwvUSAnvPt/35yPQrU0qccs18uTerxMIBFm9693Y4cJ127ZiYEkTPWlWnb/S5OEKNbK8NItK6GTJ2+O0mBzp7Q6I0lPh7rMuPqZr9FrdqZ6KAlFgZwkxIx8Jf5262nIV0mSMmducXnRb3VhGgVzMsbxXiuueeZrdJumbjCnrBWScIe6zDjYacaWz0/icLclocdaVKYBO1T5w+3jcKDTnNDjpTOtXASjPXtu+IVTrpfjb7euRKkuM6bhKGuFpJW5RWpcsawUv7liYcKPtbfNhN1tRuxuM2VlPvFIglTXG04zrQY7rn76a7QZ7KkeCu8okJOkWVSqgTaJ8+bZjuL4eB1GB656egea+m2pHgqv4grkmzdvBsMw2LhxY8ht3njjDZx33nnIy8uDWq3GqlWr8P7778dzWJKhOA5QJ3GRhsPjx4ISddauOJ2q5V3j1WVy4uqnd+B4rzXVQ+FNzIG8trYWzzzzDBYunPzj8meffYbzzjsP7777Lurr63H22Wfj0ksvxe7du2M9NMlQfo5LyqrPYd0mJ/Z3mLO+Mh4Zr9fiwjXP7MDRnsTes0mWmAK51WrF9ddfjy1btkCnm7wwz2OPPYaf/OQnWLFiBWbOnIlf//rXmDlzJt55552YBkwy164mA+wpqY9NV6ZkvH6rG9c88zUOdWX+DfGYAvkdd9yBdevWYe3atVG/1u/3w2KxQK8P3UDX5XLBbDaPepDM98JXzSk5rsvjw9wiFeYUBh7ZkqLI0BtYWAabG9du+Rr7O0ypHkpcog7k27ZtQ0NDAzZv3hzTAR999FHYbDZcddVVIbfZvHkzNBpN8FFWVhbTsUh6SfZqz2GdJicOdVlwuDvwyJrOQhTHI2K0e3Ddlq+xt82Y6qHELKpA3tbWhrvuugsvvfQSpNLofylfeeUVPPjgg3j11VeRn58fcrtNmzbBZDIFH21tbVEfi6SfBy6ZiwvmJ78Oy1hZk82RJe9XfDA7vfjuszvR0JqZVTSjWhD01ltv4dvf/jYEAkHwOZ/PB4ZhwLIsXC7XqK+N9Oqrr2LDhg3Yvn071q1bF9UgaUHQ1MFxHD492ocH3z6AArUUvRZX0lPBirVSqKUiSIQshAIW9VO0BG6BWoIe89SvM8InhViAF2+qwYrK0FO/yRJN3IsqkFssFrS0tIx6bsOGDZgzZw7uu+8+LFiwYMLXvfLKK7jpppvwyiuv4Fvf+lakhwuiQD71GGxuiAUMpCIBnvn8JJ785MSorvDJIhMJ4JiiXWUokMdGLhbghRtXYOW0nJSOI5q4J4xmxyqValywVigUyMnJCT6/adMmdHR0YOvWrQACQXz9+vX4n//5H5x22mno7u4GAMhkMmg0mmgOT6YQveJUidUfnDUDTo8fj//fsZj2JRIw8Ps5+GKYSlBKhVM2kNPNztjY3T7c+EItnrthOVbPyE31cCLC+8rOrq4utLa2Bv/+9NNPw+v14o477kBRUVHwcdddd/F9aJLB5hXF9kmrukSNHIUES8p1KNFGf99GyDKYV6TGnEJVTMdPZ5Q/HzuHx4cNL9bi82N9qR5KRKhoFkkLHx3uwU0v1kX1muUVOtS3Do5qKrGiUodukxMWlzeqglFiIYtpuYqEF/VKJo1MlFVdchJBLGSxZf1ynDkrL+nHpqJZJOP0WyPv5CIVslBJBDDY3eM6A9U2D6Jt0AGXx4+VVXrMyI9seb7b64dIQFMRZDS3149b/1KHjw/3pnook6JATtLCib7wdS9qKvWYVaAEB8Dp9eNkX+hsF4fHh51NBvSYnFhUGtm9mPT/bBodKrXCD7fPj//4ax0+PpK+wTyqm52EJMqBThMK1RIUa2VgGAYn+6xQSoUo1siwu3UQbh8HhgGO9kRX6Mji8mJvuwnlejkK1BK4vX44PX4cmajGxhQLfFPsfSmlPD4OHx/uxdmzQ69/SSUK5CTlbC4v9rWZYHZ60T0iXW7Q7kGbwYFCtRRKqQANrYMxz/u2GuxoHVGHemGpBj7/mMYTUyzy0RU5v0SC9J3ASN+Rkayxq9kA8yQ55N1mJ1oG7JiZr+KtofC+dhMOdpmxovJU0besWfFJYuJP47k3CuQk5apLNGGX7nt8HE70WdFr4W+BC8cFbo7OzFeiukQDu9uH+cVqLC3X8naM1KJ3Jj7lKiWpHkJINLVCUi5XKcHvrliEw91foGUgdBsulzcxedHHRjQY0MhEsLu9KNPJIBSwUEmEcHh9OBbl3Hw6oKkVfu1qMmDD6V7IxekXNtNvRCQraeQiaGSpbwPHMIGr/7ZBR/C5WBcrxYJlTl1HM0ygy4+AYcCygYeQYcAwzLhpoOH+nBwCUwA+P4dsKfKYLJ8e7cNVT+/A23ecATbN3iUpkJO04PL60mIxzkS/nk39NlTlysEOBVGWwdCfA1+3OLxoNzpQmSNHnkqCQ12nzoPjOHAYcR91RHD1c9y4oDsq+HIYKrkbfUTOVYqjys0nkdnfYcahbjPmF6dXeREK5CQtfHm8H+4ETZ1EY6Ibng6PD039oad8BCwDmUiAfqsbbp8fVlfyi3+NxdCd24T5y1fN+N2Vi1I9jFHoZidJC0KWTYuskVgKTfn8HBweH6wuL0p18gSMiqST/61rx3+/fxjpVN2EAjlJC9+YlYeLq4tSPYy430yO91pAK/2nvj99fAK3bq1Li09fAAVykkbU0nS42RlfFDbYPFgYYUkAktn+fagXX6RJdUQK5CQtcByXFiVD+biYdsdSGJ1n9KEgOf7vUHrUX6FATtJCXcsg2kek/GWyA53mmGqj8ykd7jdkg382dqVF3XcK5CQt/GNvZ6qHAIC/AFiS4pueaXQfbkqzu3346sRAqodBgZykh4kWuaRkHDxNShzptkCUZotGSGL8z7+PwuVNbbtACuQkLTywbi4O//JC/O3WlVhWoQv/gkThKfaaHB5Up/CmZ6EmtVM72aSh1YjX6ztSOgYK5CQtCAUsJEIBVk/PxfbbVo2qSphMfP5C2N2pu0qjzwLJleob9RTISdphWQY/v2T+hEWfhGxgCkYlFUIlEaJML+N3SobHfR3utqBcL+NvhyRt5alSWxmRluiTtFRdqsG3lpRAKRGiIkcBvUKEJWU6lOpk4DC6yH/LgA0dRgdYhsG+diOe+vQkDLbY6oywPE/UF6ilaDUkPxsnHe43ZJMBmxt/39OBi6uLUtKAguHSaZ1pCNF0kybE5PCgud+GX797CLuaDVhcpoXd5Qu2dyvVyVCkkUInF+NApxkdxkCg1ctFsLl9vJbLVUqE8Ph8cHmT+2u2vEKHupbBpB6TAEvLtXjplpW8lLqNJu5RICdTltfnh83tg0YmAsdx2NNmRG2zATesroREKAAQWIj0t12teOrTE9DIRDjQaeY9dS8VQbWmSoddTRTIU2FBiRqPXb0YM/JVce2HAjkhUeI4Dp8d68Pdr+6NeVomlBn5ShzvTW5jipoqPXY1GZJ6THJKsUaKBy6Zh7VzCyCOsT1hNHGPbnYSgkAe+5mz8vHPO8/AjHwlr/s+3mvFtFwFr/sMJwOuz6a0TpMTP3i5AT97a39SjkeBnJARijQyvHXH6dh8eTWv+9UrxLzuLxxvGtR7IcDrDe3YkYSVnxTICRlDKRHi2ppy/Pn6pVhZpedln22DoRtTJEK6tSLLVl4/h69O9Cf8OBTICQnh4uoibL25BlJRfL8mDAPkJPmKnOJ4erhxdSWuW1me8ONQICdkEhKhAEvL41tlKhcJcLAruf1I+b5hS6J31fJS/PySeSjSJH5RGAVyQsLYcHpVXK9Pdv9MEcugZSC5UzlktHlFavz2ioVJm+KilZ2EhHHunHwsKFFjf4c5ou11chGqchVweHzgOMDPcTjak7z0w2l5ChxJ4vHIKSVaGZ67cTmm5ymT+gZOgZyQMFiWwRvfPx1//boFv373EHz+0Bkh84pU6Da70NBqTN4Ax9DKkzsfTwJuP3M6rllRhsokp5oCFMgJiYhYyOLmM6qwuEyDl75uxfFeKxo7TMGvswywolKPnWmwCCfZGTLZ7rYzp2HD6qqUlg6mQE7SnsPtQ4fREdVCnYbWQby7rwsz8pW4ZFExlBIhOI6L++Pusgo9llXo4fNzON5rxaMfHMEnR/uwoFidFkF8Rp4Cx/tsqR5G2lhZpYfTEygnzHGBdED/mMVSDHOqoxIDgMNw8TQuWHws8HUGHDhw3KntGAA/OmcGlJLUNg6nQE7SlsPtwy//eRA7TgwgTyXB9SvL8c3FJRNu22txQiYSQCUN/EItKtXiy2P9uP+NRjzywRG4vH4Ua2S4akUZbjq9EgzD4PNjffjte4dxxdLSqG9oClgGswtVeGb9crQZ7Pj4SC9mF6pwtMeK+qG6KkqJEEqJEDlKMUp1gcwFrUyMFoMNX59MTNDPUUrGBfJirRQiAQsGQ52YAPRZXLC4vBHvV8gyqMiRg+NOBTAg8GeO44b+D/j8geA3vM3I7fwcByHLQiQIjME/dP8AQ+NimVPjC3eTkMH4dnYcOIyc9eI4Dka7O+H3C9JhES0FcpK2ZGIBHrpsPnotLtS3DKJ46KNry4ANJ/tt8Pk4/OHfR6GVB4pd/euuNcFALmAZnDEzF49+eBT91kAq3hGnBb/8x0F8dLgHM/KU+Px4P0722XDv+afmNI/1WJCnEkMiFEImFkQ0zjK9HOtXVQb//redrRiwurDhjCooJRP/ij3/RRP+3z8OxvJtmZBMxGJBiQYn+sYHLRHLjstimZ6nQJVYATAACwZiEYNeswsAgkF5uBorwzBQiIWjppJIwBVLS3mpdBiv1I+AkEmIBCxKtDKUaE/l4mpkIjz58Qnsah59Vfvj7ftwwYJCXFdTDgHLoEwvx7Q8BU6OuUKVCAWYV6zG0godlpbrUKY/1Sh5ZkF8FesARLQA5KYzqnCiz4qXd7bGfTwAqC7VjiuSJRWxWFCswZHu8dk2J2j6JW7T8hT48QWzIUiD1VdU/ZBkpOZ+G9Y9/jlsY9qpKcQC/OPONagayhzw+zk0DdjQaXRAwDLQK8SYU5geP0NmpwfnPvop+iyuqF5XoJJAJRMGLp0BCFgWBRoJPjs6ein4wlIN9rXTVXQinDU7Dw9/awFKdfLwG8comrhHV+QkI1XmKnD3ebOw+V+H4fNzUEqE+MHZ0/Efa6ZBOKJDC8symJ6nxPQ8fisa8kEtFeGGVRV45IOjUb2uLEeOuubRtcaP9FiwtFyLxg4TPD4O84rUKelUky0C3aoSF8SjFde/9ObNm8EwDDZu3Djpdp9++imWLVsGqVSKadOm4amnnornsIQAAG5ZMw3v/PAMbL2pBrt/fh5+cNaMUUE8E1y3sgLiKMacoxCj0zhx67iGViNKdXKUaGWQiNjgTVfCv3/t74J/kvUEyRbzT31tbS2eeeYZLFy4cNLtmpqacPHFF2PNmjXYvXs3fvrTn+LOO+/E66+/HuuhCQmaV6zGN2blZezVp14hxgULCiPadk6hCizLoNPoDLlNU78NdrcHLf00B55Ibp8fBnv61LOJ6affarXi+uuvx5YtW6DTTV5Q6KmnnkJ5eTkee+wxzJ07F7fccgtuuukmPPLIIzENmJCp5qIIAjkDoMvkjGg+fdDuhU4hhjANbsJNVWtm5CJXKUn1MIJiCuR33HEH1q1bh7Vr14bddseOHTj//PNHPXfBBRegrq4OHo9nwte4XC6YzeZRD0Kmqh5z6CvsYSuq9DA5Jv59mciJPlvcVRtJaNHk4CdD1IF827ZtaGhowObNmyPavru7GwUFBaOeKygogNfrRX//xAXXN2/eDI1GE3yUlZVFO0xCMkJTvw2b3z086jmxkA3mzA873ht9GdxdzQYsLdfGMzwSwidH+uD2+lM9jKCoAnlbWxvuuusuvPTSS5BKI68rMHZZNDdiNddENm3aBJPJFHy0tbVFM0xCMkaFXo6V0/QoVAd+n8QCFh9s/AYeu2YJfnzBbHx49zdwfU0ZrC5fmD1NrKHViPnF6ZFuOZUM2t1RfUJKtKjSD+vr69Hb24tly5YFn/P5fPjss8/wxBNPwOVyQSAYvRqusLAQ3d3do57r7e2FUChETk7OhMeRSCSQSNJn/omQRGFZBn+9eSWsLi9e/roF7x3oRqFGispcBZZX6MCyDH51+UIsqdDjx6/tjWk5eL/FhXyVBL1R5quT0DgO2NNmxHnzCsJvnARRBfJzzz0XjY2No57bsGED5syZg/vuu29cEAeAVatW4Z133hn13AcffIDly5dDJEptoRlC0oVSIsRtZ07HbWdODz43st7IlctKMWB1YfO/Dk/08kn1DAXwQrUEUpEAzdR0Im6nz8jBvDT6pBNVIFepVFiwYMGo5xQKBXJycoLPb9q0CR0dHdi6dSsA4Pbbb8cTTzyBe+65B7feeit27NiB5557Dq+88gpPp0BIdrjtzOnw+jn89/tHYnp9t9kFmYiFTi7CoD19pgUy0YpK/aiyEanGe/JtV1cXWltP1Y+oqqrCu+++i08++QSLFy/GL3/5Szz++OO44oor+D40IVPeHWfPwEs3rwxWU4zWvGINBXEepNFaIABUa4WQjNRtcuJvO1uwvb4dXabw6YsAoJeL4fH7YXGmV+pcJnr82iW4bFFxQo8RTdzLzOVwhGS5Qo0U95w/G+/f/Q1cGmFAKc+RUxDniU6eXvf3KJATksHUUhF+f9Ui/O6KhRAJQq/krC5RY0+bMXkDm8LK9DLkKNIrq46qHxKS4UQCFletKAPLMrh3+94Jt5GKBFhQog527DE6PGgzTFx8i4SmkYnwwLp5aZWxAtAVOSExq2uOrl2bye7BVyf6sT9BnXauXFaKq5dPvAqaYYD9HWY0Dj0AYHmFDjIRhYBo/OySebhgfmRFzpKJ/hUJidGiUm1U22vkIrzZ0IFL/vgF/vh/x3C0J/pl9+H81yVz8dYdp+Os2XkAgNkFStRU6tDYPrpeUZvBgbqWQYBhsLxCB/Ek0zIkYEa+ElcsnbhnbKpR1gohSeT1+dFisGPHiQE8/M+DWDMzD+uqi3BxdRHEQv6uq3x+Dne+shvdZmdEdcnL9XKwTCCtTiRggmWB5WLBcCMiTBTqg93nGUy4HRf8D4Kt5/1Dneg5LtDUWcAyUEiEsLq8gQ24QLf6ULhxfzi1b99wXuCINveThbjh/qTciEbQADBoO1WiNkclxvRcFdbMzMVVK5JX94k6BBGSpoQCNtixaHtdGz482IMPD/ag3+rCLWum8XYcAcvgt1cuxPrndka0fashtas9l5XrUN+afo0wBCyDFzbUpN2c+Fg0tUJICnAchx7zqdonv//wKOpboptzD0cpEWLbf6zCHWdPD79xik12BZ5KPj+Hv37dnOphhEWBnJAUYBgG19SUQcgyUEqEcHp8+P5LDTA7+V11KRay+PEFc/Cby6t53W82UUrSf+Ii/UdIyBS1ce0s/OicmWCZQPefLZ+fTFgfyGtqynG814pnv2hKyP7jlW5L3ocVqqW494LZqR5GWHRFTrLa58f6cO0zX+PvezpS0ihAwDJgGAbFWhl+cel8aOXihB3rJxfOSdva5OnUyHikbrMT12/ZiSPd/GcY8YkCOclqOrkYx3otuGvbHpz9yCfoMk3dRTJiIYvfX7UY4jRsVO1L4+S5+tbBSVfNpoP0+xclJIkWlGiw66dr8ZebarDh9EowEybZTR2zC1W45/xZqR7GOGkcx8FxSEjOP59ojpxkPZZlcOasPJw5Ky/VQ0mK274xDbuaDPjocG+qhxLkT+dIDkAiGt80J53QFTkhWYZhGPz2ioXQyNKrgl86q8xRpHoIk6JATkgWylNJ8KNzZqR6GBlh7dx8VOVSICeEpKGrVpSl5Y3PdDM9T5nqIYRF/4qEZCm1VITTpuekehgAAmmY6WrL5ydxvNea6mFMigI5IUnSPmjHVyf6Uz2MUb6Z4HZlkTKMKFKVbvwc8N/vH8b/e+cgDneb8dSnJ/DBge5Ji3ElG2WtEJIkKokIj314DEUaWdrMuV62uBg///t+2Ny+VA8lrb1/oAcA8PyXp1bGvv791VhWoUvVkEahK3JCkkQjF+H8+QX41T8PnSq3mmIiAYuFUdZVTwQmfWdWQnqtvg1Ge3p8kqBATkgS3bC6Eif7rXjhy/SpeTK3KD2X7ae7f+zrSvUQgiiQE5JEIgGLby4qwW/+dRh/+ao51cMBgLSotZ1G080R8/o4DNr5rVYZKwrkhCTZ7WdNw4x8JX7x9gE88dGxlN80q8qVp/T4wORdfNKVw+NDt8mZ6mEAoEBOSNJJhALcfd4sMAzwyAdH8bO/70/ZnDnHcdhxYiAlxx5JwGZmKNIrEletMhqZ+d0jJMNdML8Qr92+CgVqCRo7zHi1ti0l4/D6Ofz5kxMpOfaocfiSX0I4HgwD3H7mdMwqSI/FQpR+SEiKLKvQ4x8/WgONTMRr4+VoiAQs7r9oDn7+9wMpOX6muvn0Ktx/0ZxUDyOIAjkhKZSnkqR6CJhTmPqbnZk2szIjPz2uxIdRICcky1l47hM61Ww4vRJOjw9N/TZU5ihw1YoyVJdoUj2sUSiQE5Ll0mFtktXpTerxWAbQysXQK8TIUYiRoxRDN/R3nXz032cXqiBK8+JiFMgJyXJLyrXYfHk19Aox7n99X0pyo/l4L9HKRUNBWYI8pQR6RSAQ56okyFGMDNoSaGSitC7UFS0K5IRkuVylBNfWlAMAHG4fNr66J/mDmCCSswygV0iQp5IgVylGnlKC3KE/5yolyFGeel6nEKf9VXMiUSAnhAStW1iEn77ZCHsCi2hpZCLkqQJXzXmqwKNAFQjMgaAd+L9eIZ5SV82JRIGcEBIkErAoVEtxst8W1esELINcpRj5KinyVRLkqyXIG/7zULDOV0uRqxRDIkzv/peZiAI5IWSUHKU4GMiHA3SBWjr0kCBPGfh/vloSCNxqCXIUErp6TiEK5ISQUR7+VjXcXj8K1IHpDgrQ6Y8COSFklNmFqlQPgUQpe2/zEkLIFEGBnBBCMhwFckIIyXBRBfInn3wSCxcuhFqthlqtxqpVq/Cvf/1r0te8/PLLWLRoEeRyOYqKirBhwwYMDKS+/jEhhEwVUQXy0tJS/OY3v0FdXR3q6upwzjnn4Jvf/CYOHJi4BOYXX3yB9evX4+abb8aBAwewfft21NbW4pZbbuFl8IQQQqLMWrn00ktH/f1Xv/oVnnzySXz99deYP3/+uO2//vprVFZW4s477wQAVFVV4bbbbsPvfve7OIZMCCFkpJjnyH0+H7Zt2wabzYZVq1ZNuM3q1avR3t6Od999FxzHoaenB6+99hrWrVs36b5dLhfMZvOoByGEkIlFHcgbGxuhVCohkUhw++23480338S8efMm3Hb16tV4+eWXcfXVV0MsFqOwsBBarRZ//OMfJz3G5s2bodFogo+ysrJoh0kIIVmD4aJsX+12u9Ha2gqj0YjXX38dzz77LD799NMJg/nBgwexdu1a3H333bjgggvQ1dWFH//4x1ixYgWee+65kMdwuVxwuVzBv5vNZpSVlcFkMkGtTn03E0IISTSz2QyNRhNR3Is6kI+1du1aTJ8+HU8//fS4r33ve9+D0+nE9u3bg8998cUXWLNmDTo7O1FUVBTRMaI5IUIImQqiiXtx55FzHDfq6nkku90OdkwzPoFAEHwdIYSQ+EWVtfLTn/4UF110EcrKymCxWLBt2zZ88skneO+99wAAmzZtQkdHB7Zu3QogkOVy66234sknnwxOrWzcuBE1NTUoLi7m/2wIISQLRRXIe3p68L3vfQ9dXV3QaDRYuHAh3nvvPZx33nkAgK6uLrS2tga3v/HGG2GxWPDEE0/gP//zP6HVanHOOefgt7/9Lb9nQQghWSzuOfJkoDlyQki2iSbuZUQZ2+H3GsonJ4Rki+F4F8m1dkYEcovFAgCUT04IyToWiwUajWbSbTJiasXv96OzsxMqlQoMk9huJcM5621tbRk9jTNVzgOYOucyVc4DoHNJBo7jYLFYUFxcPC77b6yMuCJnWRalpaVJPeZwhcdMN1XOA5g65zJVzgOgc0m0cFfiw6geOSGEZDgK5IQQkuEokI8hkUjwi1/8AhKJJNVDictUOQ9g6pzLVDkPgM4l3WTEzU5CCCGh0RU5IYRkOArkhBCS4SiQE0JIhqNATgghGS7rAvmvfvUrrF69GnK5HFqtNqLXPPjgg5gzZw4UCgV0Oh3Wrl2LnTt3jtqmu7sb3/ve91BYWAiFQoGlS5fitddeS8AZnJKocwGAHTt24JxzzoFCoYBWq8VZZ50Fh8PB8xkEJPI8gMAKuYsuuggMw+Ctt97ib+ATSMS5GAwG/OhHP8Ls2bMhl8tRXl6OO++8EyaTKUFnkbh/E5fLhR/96EfIzc2FQqHAZZddhvb29gScwSnRnovH48F9992H6upqKBQKFBcXY/369ejs7By1XSp+50PJukDudrvxne98B9///vcjfs2sWbPwxBNPoLGxEV988QUqKytx/vnno6+vL7jN9773PRw5cgRvv/02Ghsbcfnll+Pqq6/G7t27E3EaABJ3Ljt27MCFF16I888/H7t27UJtbS1++MMfhl0mHKtEncewxx57LOGlHYYl4lw6OzvR2dmJRx55BI2NjXjxxRfx3nvv4eabb07UaSTs32Tjxo148803sW3bNnzxxRewWq245JJL4PP5EnEaAKI/F7vdjoaGBvzsZz9DQ0MD3njjDRw9ehSXXXbZqO1S8TsfEpelXnjhBU6j0cT0WpPJxAHg/v3vfwefUygU3NatW0dtp9fruWeffTaeYUaE73NZuXIl98ADD/A0usjxfR4cx3F79uzhSktLua6uLg4A9+abb8Y/0Agk4lxG+t///V9OLBZzHo8nxhFGhs/zMBqNnEgk4rZt2xbcpqOjg2NZlnvvvff4GO6k4jmXXbt2cQC4lpaW4HOp/J0fK+uuyOPldrvxzDPPQKPRYNGiRcHnzzjjDLz66qswGAzw+/3Ytm0bXC4XzjrrrNQNNoyJzqW3txc7d+5Efn4+Vq9ejYKCApx55pn44osvUjza0EL9m9jtdlx77bV44oknUFhYmMIRRi7UuYw1XKNaKEzPckkTnUd9fT08Hg/OP//84HbFxcVYsGABvvrqq1QNNSImkwkMw4yamkmn33kK5BH6xz/+AaVSCalUij/84Q/48MMPkZubG/z6q6++Cq/Xi5ycHEgkEtx222148803MX369BSOemKTncvJkycBBOY7b731Vrz33ntYunQpzj33XBw7diyVwx4n3L/J3XffjdWrV+Ob3/xmCkcZmXDnMtLAwAB++ctf4rbbbkvyKMOb7Dy6u7shFouh0+lGvaagoADd3d2pGG5EnE4n7r//flx33XWjimql0+/8lAjkDz74IBiGmfRRV1cX1zHOPvts7NmzB1999RUuvPBCXHXVVejt7Q1+/YEHHsDg4CD+/e9/o66uDvfccw++853voLGxMaPOxe/3AwBuu+02bNiwAUuWLMEf/vAHzJ49G88//3zGnMfbb7+Njz76CI899lhcx0iHcxnJbDZj3bp1mDdvHn7xi19k7HmMxHFc1PcwknEuQODG5zXXXAO/348///nPo77G1+88H6bEEv3+/n709/dPuk1lZSWkUmnw7y+++CI2btwIo9EY0zFnzpyJm266CZs2bcKJEycwY8YM7N+/H/Pnzw9us3btWsyYMQNPPfVUxPtN9bk0NTVh2rRp+Otf/4rvfve7wW2uvvpqCIVCvPzyyxlxHhs3bsTjjz8+6gatz+cDy7JYs2YNPvnkk4j3m+pzGWaxWHDBBRdALpfjH//4x6jjRSLV5/HRRx/h3HPPhcFgGHVVvmjRInzrW9/CQw89FPF+k3EuHo8HV111FU6ePImPPvoIOTk5wa/x+TvPh/ScYItSbm5uyI+hicJxHFwuF4DAXCyAcVkdAoEgeIUbqVSfS2VlJYqLi3HkyJFR2xw9ehQXXXRRxPtM9Xncf//9uOWWW0Z9vbq6Gn/4wx9w6aWXRrXfVJ8LELgSv+CCCyCRSPD2229HHcSB1J/HsmXLIBKJ8OGHH+Kqq64CEGjYvn//fvzud7+Lar+JPpfhIH7s2DF8/PHHo4I4wO/vPC+Sfns1xVpaWrjdu3dzDz30EKdUKrndu3dzu3fv5iwWS3Cb2bNnc2+88QbHcRxntVq5TZs2cTt27OCam5u5+vp67uabb+YkEgm3f/9+juM4zu12czNmzODWrFnD7dy5kzt+/Dj3yCOPcAzDcP/85z8z6lw4juP+8Ic/cGq1mtu+fTt37Ngx7oEHHuCkUil3/PjxjDqPsZCErJVEnIvZbOZWrlzJVVdXc8ePH+e6urqCD6/XmzHnwXEcd/vtt3OlpaXcv//9b66hoYE755xzuEWLFiXsPGI5F4/Hw1122WVcaWkpt2fPnlHfb5fLxXFc6n7nQ8m6QH7DDTdwAMY9Pv744+A2ALgXXniB4ziOczgc3Le//W2uuLiYE4vFXFFREXfZZZdxu3btGrXfo0ePcpdffjmXn5/PyeVybuHCheNSkzLlXDiO4zZv3syVlpZycrmcW7VqFff5559n5HmMlIxAnohz+fjjjyfcJwCuqakpY85jeLsf/vCHnF6v52QyGXfJJZdwra2tCTmHWM+lqakp5Pd75GtS8TsfypSYIyeEkGw2JbJWCCEkm1EgJ4SQDEeBnBBCMhwFckIIyXAUyAkhJMNRICeEkAxHgZwQQjIcBXJCCMlwFMgJISQGn332GS699FIUFxfH1EYwVAVHhUIR9VgokBNCSAxsNhsWLVqEJ554IqbX33vvvejq6hr1mDdvHr7zne9EvS8K5IQQEoOLLroIDz/8MC6//PIJv+52u/GTn/wEJSUlUCgUWLly5ajyyUqlEoWFhcFHT08PDh48GFMv1ilRxpYQQtLNhg0b0NzcjG3btqG4uBhvvvkmLrzwQjQ2NmLmzJnjtn/22Wcxa9YsrFmzJupj0RU5IYTw7MSJE3jllVewfft2rFmzBtOnT8e9996LM844Ay+88MK47V0uF15++eWYrsYBuiInhBDeNTQ0gOM4zJo1a9TzLpdrXJMKAHjjjTdgsViwfv36mI5HgZwQQnjm9/shEAhQX18PgUAw6mtKpXLc9s8++ywuueQSFBYWxnQ8CuSEEMKzJUuWwOfzobe3N+ycd1NTEz7++GO8/fbbMR+PAjkhhMTAarXi+PHjwb83NTVhz5490Ov1mDVrFq6//nqsX78ejz76KJYsWYL+/n589NFHqK6uxsUXXxx83fPPP4+ioqKoeuKORR2CCCEkBp988gnOPvvscc/fcMMNePHFF+HxePDwww9j69at6OjoQE5ODlatWoWHHnoI1dXVAAJTMBUVFVi/fj1+9atfxTwWCuSEEJLhKP2QEEIyHAVyQgjJcBTICSEkw1EgJ4SQDEeBnBBCMhwFckIIyXAUyAkhJMNRICeEkAxHgZwQQjIcBXJCCMlwFMgJISTD/X90SBEvTl+KfgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot out California counties\n", + "counties.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exploring the GeoPandas GeoDataFrame\n", + "\n", + "Before we get in too deep, let's discuss what a *GeoDataFrame* is and how it's different from a pandas *DataFrame*.\n", + "\n", + "A [GeoPandas GeoDataFrame](https://geopandas.org/data_structures.html#geodataframe), or `gdf` for short, is just like a pandas DataFrame (`df`) but with an extra geometry column as well as accompanying methods and attributes that work on that column. Let's emphasize this point, because it's important:\n", + "\n", + "> A [GeoPandas GeoDataFrame](https://geopandas.org/data_structures.html#geodataframe), or `gdf` for short, is just like a pandas DataFrame (`df`) but with an extra geometry column as well as accompanying methods and attributes that work on that column.\n", + "\n", + "This means all the methods and attributes of a pandas DataFrame also work on a GeoPandas GeoDataFrame!\n", + "\n", + "With that in mind, let's start exploring our dataframe just like we would do in pandas." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(69, 11)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Find the number of rows and columns in counties\n", + "counties.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OBJECTIDCOUNTY_NAMCOUNTY_ABBCOUNTY_NUMCOUNTY_CODCOUNTY_FIPISLANDGlobalIDSHAPE_LengSHAPE_Areageometry
01AlamedaALA101001None{E6F92268-D2DD-4CFB-8B79-5B4B2F07C559}308998.650975-3.402787e+09POLYGON ((-13611173.233 4566017.932, -13611061...
12AlpineALP202003None{870479B2-480A-494B-8352-AD60578839C1}274888.492662-3.146939e+09POLYGON ((-13312326.921 4680816.110, -13312311...
23AmadorAMA303005None{4F45B3A6-BE10-461C-8945-6B2AAA7119F6}361708.438649-2.562635e+09POLYGON ((-13366405.546 4679183.529, -13366408...
34ButteBUT404007None{44FBA680-AECC-4E04-A499-29D69AFFBD4A}526547.113134-7.339348e+09POLYGON ((-13478186.664 4807593.081, -13478502...
45CalaverasCAL505009None{D11EF739-4A1E-414E-BFD1-E7DCD56CD61E}370637.579039-4.351069e+09POLYGON ((-13360333.217 4641182.754, -13360329...
\n", + "
" + ], + "text/plain": [ + " OBJECTID COUNTY_NAM COUNTY_ABB COUNTY_NUM COUNTY_COD COUNTY_FIP ISLAND \\\n", + "0 1 Alameda ALA 1 01 001 None \n", + "1 2 Alpine ALP 2 02 003 None \n", + "2 3 Amador AMA 3 03 005 None \n", + "3 4 Butte BUT 4 04 007 None \n", + "4 5 Calaveras CAL 5 05 009 None \n", + "\n", + " GlobalID SHAPE_Leng SHAPE_Area \\\n", + "0 {E6F92268-D2DD-4CFB-8B79-5B4B2F07C559} 308998.650975 -3.402787e+09 \n", + "1 {870479B2-480A-494B-8352-AD60578839C1} 274888.492662 -3.146939e+09 \n", + "2 {4F45B3A6-BE10-461C-8945-6B2AAA7119F6} 361708.438649 -2.562635e+09 \n", + "3 {44FBA680-AECC-4E04-A499-29D69AFFBD4A} 526547.113134 -7.339348e+09 \n", + "4 {D11EF739-4A1E-414E-BFD1-E7DCD56CD61E} 370637.579039 -4.351069e+09 \n", + "\n", + " geometry \n", + "0 POLYGON ((-13611173.233 4566017.932, -13611061... \n", + "1 POLYGON ((-13312326.921 4680816.110, -13312311... \n", + "2 POLYGON ((-13366405.546 4679183.529, -13366408... \n", + "3 POLYGON ((-13478186.664 4807593.081, -13478502... \n", + "4 POLYGON ((-13360333.217 4641182.754, -13360329... " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Look at the first couple of rows in our geodataframe\n", + "counties.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['OBJECTID', 'COUNTY_NAM', 'COUNTY_ABB', 'COUNTY_NUM', 'COUNTY_COD',\n", + " 'COUNTY_FIP', 'ISLAND', 'GlobalID', 'SHAPE_Leng', 'SHAPE_Area',\n", + " 'geometry'],\n", + " dtype='object')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Look at all the variables included in our data\n", + "counties.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can make a selection of features in the same way with `pandas`. For exmaple, we can select Alameda County from the 69 counties of California." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "alameda_county = counties.loc[counties['COUNTY_NAM'] == 'Alameda'].copy().reset_index(drop=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save Your Data\n", + "\n", + "Let's not forget to save out our Alameda County geodataframe `alameda_county`. This way we won't need to repeat the processing steps and attribute join we did above.\n", + "\n", + "We can save it as a shapefile:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "alameda_county.to_file(\"../data/alameda_county.shp\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, we can save the file into [GeoJSON](https://geojson.org/) format." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "alameda_county.to_file(\"../data/alameda_county.json\", driver=\"GeoJSON\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can read these in, just as you would for a shapefile with `gpd.read_file`:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "alameda_county_test2 = gpd.read_file(\"../data/alameda_county.json\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are also many other formats we could use for data output.\n", + "\n", + "**NOTE**: If you're working with point data (i.e. a single latitude and longitude value per feature),\n", + "then CSV might be a good option!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the GeoDataFrame\n", + "\n", + "We're able to plot our GeoDataFrame because of the extra `geometry` column. What exactly does this column provide?\n", + "\n", + "### GeoPandas Geometries\n", + "\n", + "There are three main types of geometries that can be associated with your GeoDataFrame: points, lines and polygons.\n", + "\n", + "\n", + "\n", + "In the GeoDataFrame, these geometries are encoded in a format known as [Well-Known Text (WKT)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry). Consider the following examples:\n", + "\n", + "- POINT (30 10)\n", + "- LINESTRING (30 10, 10 30, 40 40)\n", + "- POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))\n", + "\n", + "In each case, coordinates are separated by a spaces, and coordinate pairs are separated by commas.\n", + "\n", + "Your geodataframe may also include the variants **multipoints, multilines, and multipolgyons** if the row-level feature of interest is comprised of multiple parts. For example, a GeoDataFrame of states, where one row represents one state, would have a POLYGON geometry for Utah but MULTIPOLYGON for Hawaii, which includes many islands.\n", + "\n", + "Note that, it's OK to mix and match geometries of the same family, e.g., POLYGON and MULTIPOLYGON, in the same GeoDataFrame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's plot the Alameda County. We can specify the [color](https://matplotlib.org/stable/gallery/color/named_colors.html) of the shape. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGGCAYAAAB2XftuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKT0lEQVR4nO3deVhU9eIG8HfYBQEBRcYVRQUXUEQTNLcgTVErl9JIzWy5ZYUVZXRtoatRSkXmbQHNrmLSrzDBJUUTNM2FWBQ3XEpBxDQXBlxmWM7vj65zI1wGmDPfmTPv53nmkTlzzpl3TuS8fs+mkiRJAhEREZGC2IgOQERERGRsLDhERESkOCw4REREpDgsOERERKQ4LDhERESkOCw4REREpDgsOERERKQ4LDhERESkOCw4REREpDgsOERERKQ4iis427dvx9ixY9GmTRuoVCqsWbOmweuQJAkJCQno1q0bHB0d0b59e7z77rvGD0tERESysBMdwNiuXLmC3r17Y8aMGZgwYUKj1hEdHY3MzEwkJCQgMDAQ5eXl+OOPP4yclIiIiOSiUvLNNlUqFb7//ns88MAD+mk6nQ5z587FypUrcfnyZfTq1Qvvv/8+hg0bBgA4fPgwgoKCcODAAfj7+4sJTkRERE2iuF1UdzJjxgzs3LkTqamp2L9/PyZNmoT77rsPx44dAwCsXbsWnTt3xrp169CpUyf4+vriiSeewMWLFwUnJyIiIkNZVcE5ceIEVq1ahW+//RaDBw+Gn58fYmJicPfdd2PZsmUAgF9//RWnTp3Ct99+i+XLl+Orr75Cbm4uJk6cKDg9ERERGUpxx+DcTl5eHiRJQrdu3epM12q18PLyAgDU1tZCq9Vi+fLl+vmWLl2KkJAQFBUVcbcVERGRBbCqglNbWwtbW1vk5ubC1ta2zmvNmzcHAKjVatjZ2dUpQd27dwcAFBcXs+AQERFZAKsqOMHBwaipqcG5c+cwePDgm84zaNAgVFdX48SJE/Dz8wMAHD16FADQsWNHk2UlIiKixlPcWVSVlZU4fvw4gD8LzYcffojhw4fD09MTHTp0wKOPPoqdO3figw8+QHBwMP744w9s3boVgYGBGD16NGpra9G/f380b94ciYmJqK2txaxZs+Dm5obMzEzBn46IiIgMobiCk52djeHDh9ebPn36dHz11VeoqqrCvHnzsHz5cpSWlsLLywthYWGIi4tDYGAgAODMmTN4/vnnkZmZCRcXF4waNQoffPABPD09Tf1xiIiIqBEUV3CIiIiIrOo0cSIiIrIOLDhERESkOIo5i6q2thZnzpyBq6srVCqV6DhERERkAEmSUFFRgTZt2sDGxnjjLoopOGfOnEH79u1FxyAiIqJGKCkpQbt27Yy2PsUUHFdXVwB/biA3NzfBaYiIiMgQGo0G7du313+PG4tiCs6N3VJubm4sOERERBbG2IeX8CBjIiIiUhwWHCIiIlIcFhwiIiJSHBYcIiIiUhwWHCIiIlIcFhwiIiJSHBYcIiIiUhwWHCIiIlIcFhwiIiJSHBYcIiIiUhwWHCIiIlIcFhwrsq1oGzYe2Cg6BhERkewUc7NNurXj544jYVMCvtj+BZwdnDGk2xCcuXwGbVq0wWdRn8G3pa/oiEREREalkiRJEh3CGDQaDdzd3VFeXs67if/NfYn3YdPBTTd9bVSvUUh9KhVuzbjNiIjI9OT6/uYuKoX6o+IPpO5NRezqWPxy6pdbzvfDgR8Q/0M8amtrTZiOiIhIXtxFZWGu6a7Bwc4B16uuY9vRbaiuqUZ493C4OLoAAM5XnMfKPSvxztp3cOnqJYPW+eHmD7Hz+E442Dlg84uboVKp5PwIREREsmPBMVM1tTXIPZWLzIOZ2HliJw6dOYRLVy/hivYKvJp7QXNNA221FgBga2OL/r794d/aH2sK1qD8WnmD3ktXrcNPx36Cp4unHB+FiIjI5HgMjhk5W34Wmw5uwsYDG5F5KBMXr1w06fs72DlgaLehmB42HVGhUSZ9byIisk5yfX9zBEeg6ppq7P51N3448AN+OPAD8ovzhebRVeuw+dBmAMAw/2Fo69FWaB4iIqLG4giOiZVdLsPGgxvxQ+EP2Hx4My5fvSw60k3ZqGxQurAUPu4+oqMQEZGCcQTHQlVVV9UZpSkoKRAdySC1Ui1+PvEzxvcdLzoKERFRg7HgyKD0Uik2HtiIHw78gC2HtzT4oF9zYGdrh9DOoaJjEBERNQoLjhFUVVdh54md+KHwz1GawtJC0ZGarLqmGjknc3B/n/tFRyEiImowFpxG+u38b3+e8XRwI7Ye2YqK6xWiIxldwqYEDPcfzqscExGRxWHBMdBV7VVsO7oNGw9uxMYDG3H096OiI8lux/EdCP8gHBtnb4RXcy/RcYiIiAzGgmOAd9a+g3c3vKu/sJ41+eXULxi6cCg2v7gZB84cwOfbPsfoXqMxvu94eLh4iI5HRER0Uyw4Bmjv2d4qy80NB88cRGBcIC5UXgAArM5bjWdWPoNRvUZhyl1TMK73ODg7OgtOSURE9D+82aYBIgMjrf7+TDfKzQ1VNVXI2JeBKclT0G1uN3y952so5JJKRESkACw4BvB28+Yp07dRerkUUUuiMHjBYJRftbxT4omISHlYcAw0rvc40RHM3s7jOxH7fazoGERERCw4hmLBMcxn2Z9hx7EdomMQEZGVY8ExUHd1d/i18hMdwyI8/tXj0FzTiI5BRERWjAXHQCqViqM4Bjp27hgGvT+o3oHJREREpsKC0wDj+rDgGOpA6QGk7E4RHYOIiKxUkwpOfHw8VCoVZs+efct5srOzoVKp6j2OHDlSZ77Lly9j1qxZUKvVcHJyQvfu3bFhw4amxDO6QX6D4OHMi9sZ6ti5Y6IjEBGRlWr0hf5ycnKQlJSEoKAgg+YvKiqCm9v/7mnUqlUr/c86nQ733nsvvL298d1336Fdu3YoKSmBq6trY+PJwt7OHqMDR2PlnpWio5g1RztHpDyRggl9J4iOQkREVqpRBaeyshJRUVFITk7GvHnzDFrG29sbLVq0uOlrX375JS5evIiff/4Z9vb2AICOHTs2JprsxvUex4JzB/+M/CcmhkwUHYOIiKxYo3ZRzZo1C5GRkYiIiDB4meDgYKjVaoSHhyMrK6vOaxkZGQgLC8OsWbPQunVr9OrVC++++y5qamoaE09WI3uOhL2tvegYZu39je9j7297RccgIiIr1uCCk5qairy8PMTHxxs0v1qtRlJSEtLS0rB69Wr4+/sjPDwc27dv18/z66+/4rvvvkNNTQ02bNiAuXPn4oMPPsD8+fNvuV6tVguNRlPnYQruzu4Y5j/MJO9lqa5or2Di5xN5FhUREQnToF1UJSUliI6ORmZmJpycnAxaxt/fH/7+/vrnYWFhKCkpQUJCAoYMGQIAqK2thbe3N5KSkmBra4uQkBCcOXMGCxcuxJtvvnnT9cbHxyMuLq4h8Y1mbNBYbD60Wch7W4qSiyV4bNljSJ+VDhsbnqxHRESm1aBvntzcXJw7dw4hISGws7ODnZ0dtm3bhkWLFsHOzs7gXUqhoaE4dux/Z9io1Wp069YNtra2+mndu3fH2bNnodPpbrqO2NhYlJeX6x8lJSUN+ShNMrb3WJO9lyVbt38dFmxaIDoGERFZoQYVnPDwcBQWFqKgoED/6NevH6KiolBQUFCnoNxOfn4+1Gq1/vmgQYNw/Phx1NbW6qcdPXoUarUaDg4ON12Ho6Mj3Nzc6jxMxbelL4LaGXb2mLWbu2Yudh7fKToGERFZmQYVHFdXV/Tq1avOw8XFBV5eXujVqxeAP0dWpk2bpl8mMTERa9aswbFjx3Dw4EHExsYiLS0Nzz33nH6eZ555BhcuXEB0dDSOHj2K9evX491338WsWbOM9DGNj1c1NkxNbQ0mJ03G+YrzoqMQEZEVMfrBEWVlZSguLtY/1+l0iImJQVBQEAYPHowdO3Zg/fr1GD9+vH6e9u3bIzMzEzk5OQgKCsILL7yA6OhovPbaa8aOZzQsOIY7fek03vvhPdExiIjIiqgkSZJEhzAGjUYDd3d3lJeXm2R3VW1tLdq92g5l5WWyv5cS+LXyQ/6b+XB1Mq+LNxIRkVhyfX/z9JZGsrGx4cHGDXDi/AlELopEwqYE/Hj4R5RfLRcdiYiIFIwFpwm4m6phfjr2E1757hVEfBiB6cumi45DREQKxoLTBPcE3ANnB2fRMSxSekE6CooLRMcgIiKFYsFpgmYOzTCixwjRMSzW5OTJyDuVJzoGEREpEAtOE43rw91UjVV0tgjDPxjO+1YREZHRseA0UWRgJFQqlegYFktzTYMRH41A4elC0VGIiEhBWHCayNvNG6GdQ0XHsGjl18p5uj0RERkVC44R8Gyqpnt+1fPYULgBCrksExERCcaCYwQsOE139PejiFwUiejUaNTUGnbTViIiolthwTGC7uru8GvlJzqGInyy9RPc/f7deOjzh3iGFRERNRoLjhGoVCqO4hjR7l9349vcb/HRlo9ERyEiIgvFgmMkPF3c+HYc2yE6AhERWSgWHCMZ5DcIHs4eomMoyhODnxAdgYiILBQLjpHY29ljdOBo0TEUw9PFE8/f87zoGEREZKFYcIyIx+EYz8y7Z8KtmZvoGEREZKFYcIxoZM+RsLe1Fx1DEbxdvUVHICIiC8aCY0Tuzu4Y5j9MdAxFWLt/regIRERkwVhwjIy7qYwj52QOqqqrRMcgIiILxYJjZGN7jxUdQRHu8b8H9nbc3UdERI3DgmNkHb06IqhdkOgYFq+5U3PREYiIyIKx4MiAu6ma7v9++T888Z8n8H3e96i8Xik6DhERWRgWHBmw4DSdJElYumMpxn82Hne9exfOlp8VHYmIiCwIC44MQjqGQO2uFh1DMQ6XHcbwhOF3LDmSJCF1byrGfjIWB0oPmCgdEVHDSZLE0WmZseDIwMbGhgcbG9mRs0fQ8bWO6B3XG0/85wkUni6s8/q+kn0YljAMU5KnYN3+dQj+VzBe+fYVXKi8ICgxEVFd2iotMg9m4rmvn0PH1zoiaXuS6EiKppIkSRIdwhg0Gg3c3d1RXl4ONzfxV8Bdv389xnwyRnQMxVKpVJjcfzKeG/4cvtz5Jb7c+SVu9qvs6uSKFyNexJtj34Stja2ApERkzS5fvYwNhRuwJn8NNh7ciIrrFfrXPp78MV4If0FgOvMg1/e3ndHWRHXcE3APnB2ccVV3VXQURZIkCav2rsKqvatuO1/F9Qq8s+4deLp4Ijoi2kTpiMialVwsQXpBOtIL0pF9NBvVNdU3nY//6JIXC45Mmjk0w4geI7CmYI3oKATg9e9fR2RQJLp4dxEdhYgURpIk5BfnI2NfBjL2ZSC/ON+g5WxVLDhyYsGR0bg+41hwzMRV3VXMWDYD217ZBhsbHnpGRE2jrdJi65GtyNiXgbX71qL0cmmD18ERHHmx4MgoMjASKpXqpseGkOntOL4Di7YuwuyI2aKjEJEF+qPiD2wo3ICMfRnYdHATKrVNOwvKRsV/bMmJBUdG3m7eCOschp9P/Cw6Cv1X7OpYjO41Gt18uomOQkQW4Njvx/S7nnYc24FaqdZo6+ZosrxYcGQ2tvdYFhwzcr3qOvrN74dOLTtB7a6G2l0NH3cfeLt6w8fNB2092qK1W2v4uPnArZkbVCqV6MhEZEI1tTXY8+seZOzLQHpBOo6cPSLbe/EYHHmx4MhsXO9xiF0dKzoG/UXF9QrsP70f+0/vv+18jnaO8HH3gY+bz5+l5zY/uzi6mCg9ERnbFe0VbDm8BekF6Vi3fx3OV5w3yftyBEdeLDgy667uDr9Wfjhx/oToKNRA2motTl04hVMXTt1x3uaOzfWl5+9/qluo9c+9Xb1hZ8v/7YhEO1t+Fmv3rUXGvgxsObwF16uumzwDj8GRF/+mlZlKpcK43uPw0ZaPREchGVVqK3H83HEcP3f8tvOpVCq0bN5SX3jU7up6pejGqJCHswd3kREZiSRJOHTmENIL0pGxLwN7ftsjOhLPopJZkwpOfHw8Xn/9dURHRyMxMfGm82RnZ2P48OH1ph8+fBgBAQEAgK+++gozZsyoN8+1a9fg5OTUlIhmYVwfFhz6kyRJOF9xHucrzqOwtPC289rb2sPb1Rut3VrXeTw15Cl0btXZRImJLFdNbQ1+Pv4z0velY03+GrMbSWfBkVejC05OTg6SkpIQFBRk0PxFRUV1LsHcqlWrOq+7ubmhqKiozjQllBsAGOQ3CB7OHrh09ZLoKGRBqmqqUHq5tN71NVJ2p2DLS1sQoA4QlIzIfF3VXkXmoUz98TR/VP4hOtIt8SBjeTWq4FRWViIqKgrJycmYN2+eQct4e3ujRYsWt3xdpVLBx8enMXHMnr2dPUYHjsbKPStFRyEFKL1ciqELh2LLS1sQ2C5QdBwi4c5XnMe6/euwJn8NNh/ejGu6a6IjGYQjOPJq1BFOs2bNQmRkJCIiIgxeJjg4GGq1GuHh4cjKyqr3emVlJTp27Ih27dphzJgxyM837FLXlmJc73GiI5CCnKs4h7sX3I3UvamioxAJcfzccXyQ+QGGLBgCn5d98PhXjyNjX4bFlBuABxnLrcEjOKmpqcjLy0NOTo5B86vVaiQlJSEkJARarRYrVqxAeHg4srOzMWTIEABAQEAAvvrqKwQGBkKj0eDjjz/GoEGDsG/fPnTt2vWm69VqtdBqtfrnGo2moR/FpEb2HAl7W3tU1VSJjkIKobmmwZTkKdjz2x4kTErgvwZJ0SRJwi8nf0F6QTrWFKzBwTMHRUdqMp5EIK8GFZySkhJER0cjMzPT4ONj/P394e/vr38eFhaGkpISJCQk6AtOaGgoQkND9fMMGjQIffv2xSeffIJFixbddL3x8fGIi4trSHyh3J3dMcx/GDYf2iw6CilM4pZEnPzjJFKeSOH1eEhRdNU6ZBdlY03BGmQUZDTqfk/mjAVHXg0aH8vNzcW5c+cQEhICOzs72NnZYdu2bVi0aBHs7OxQU1Nj0HpCQ0Nx7NixW4eysUH//v1vO09sbCzKy8v1j5KSkoZ8FCG4m4rksqZgDYYnDMfvmt9FRyFqkvKr5Ujdm4opSVPQ6qVWGJk4Ep9lf6a4cgNwF5XcGjSCEx4ejsLCuqe2zpgxAwEBAZgzZw5sbQ0bIs/Pz4darb7l65IkoaCgAIGBtz6A0tHREY6OjoYFNxNRA6LwVsZbuHjlougopEA5J3PQcU5HPDLgEfzr/n+hrUdb0ZGIDFJysUR/a4Tsomyr2ZWvAkdw5NSgguPq6opevXrVmebi4gIvLy/99NjYWJSWlmL58uUAgMTERPj6+qJnz57Q6XRISUlBWloa0tLS9OuIi4tDaGgounbtCo1Gg0WLFqGgoAD//ve/m/r5zIqHiwfeGPMGXvzmRdFRSKG01Vos27kMK/esxOzw2Xht1GvwcPEQHYuoDkmSsK9kH9IL0pG+Lx35xco6qcRQ3EUlL6NfybisrAzFxcX65zqdDjExMSgtLUWzZs3Qs2dPrF+/HqNHj9bPc/nyZTz11FM4e/Ys3N3dERwcjO3bt+Ouu+4ydjzhnh32LD7Z+gl+Pf+r6CikYLpqHRZsWoAVu1dg3fPr0LdjX9GRyMpVVVdh+7Ht+isJG3ILFKXjLip5qSRJkkSHMAaNRgN3d3eUl5fXuaCgOfr2l2/x0BcPiY5BVsLF0QVfTv8SD/Xn7xyZluaaBj8c+AHpBenYULgB5dfKRUcyK1te2oLw7uGiYwgn1/c370UlwMSQiQjtHIrdv+4WHYWswBXtFTyc9DDe2/genhn6DJ4c8qToSKRgN46nySjIQFZRltUcT9MYPAZHXiw4AqhUKiRMSsDd798tOgpZkfzifDy14ik42TthathU0XFIISRJwv7T+/88nqYgHXnFeaIjWQwbG+6ikhMLjiCDugzC+L7jsTpvtegoZGWeTnkawR2C0attrzvPTHQTN46nuXHmE4+naRyO4MiLBUeg98a/h4x9GaiuqRYdhazINd01TPx8InL+mQNXJ1fRcchCaK5psPHAxj+PpzmwAZevXhYdyeLxLCp5seAI1LV1V/xjyD+wOGux6ChkZYrOFuGJ/zyB1KdS+Zcs3dLpi6f1ozQ8nsb4OIIjLxYcwd4c+yaW714OzTXzvpcWKc///fJ/GOg3ENER0aKjkJn46/E0GfsykHsqV3QkReMxOPJiwRGslWsrxI6KRezqWNFRyArFfBeDfr79MKjLINFRSBBen0YcXgdHXiw4ZiA6PBqfZn+Kkovmfz8tUpbqmmo89MVDyHsjD63dWouOQyZyRXsFGw9sRFpeGq9PIxALjrxYcMxAM4dmmP/AfEz7cproKGSFzlw+g8lJk7HlpS2wtTHsfnJkeU5fPI21+9di7b612HpkK7TVWtGRrB6Pf5MXC46ZiBoQhY+2fGS192QhsbKLsvHO2ncQd3+c6ChkJLW1tcgrzsPafWuxdv9a/t1ihjiCIy8WHDNhY2ODhRMXIuLDCNFRyEq9s+4dhHYOxajAUaKjUCNd013Dj4d/xNr9a7Fu/zqcuXxGdCS6DRYcebHgmJHw7uEYHTgaGwo3iI5CVurAmQMsOBbmbPlZrNu/Dmv3rcXmw5txTXdNdCQyEAuOvFhwzMyCCQuw8cBG1Eq1oqOQFfF08cSKmSswOnC06Ch0BzdO5b6x62nvb3tFR6JG4jE48mLBMTM92/bE43c/jiU/LREdhaxEaOdQfPPUN+jg1UF0FLoFbZUW2UXZ+oOEiy8Wi45ERsARHHmx4Jihd8a9g6/3fI2ruquio5DCRYdHY8HEBXCwcxAdhf7mfMV5bCjcgLX71mLTwU2o1FaKjkRGxoIjLxYcM6RuocYrI19B3Fqe0ULyaObQDEumLcEjAx4RHYX+ouhsETL2ZSCjIAM/n/iZu6oVjruo5MWCY6ZiRsTgi+1f4Gz5WdFRSIGyXs7CgM4DRMewejW1Ndh1Ypf+KsJHfz8qOhKZkCRJoiMoGguOmWru1Bxx4+Lw9IqnRUchBerboa/oCFar8nolMg9lIqMgA+sL1+OPyj9ERyJBaqQa0REUjQXHjD0+6HF8vOVjHCo7JDoKKYiLowvs7exFx7AqZy6fwdp9a5GxLwM/Hv6RVxEmAH/eKoXkw4Jjxuxs7bBg4gKM+WSM6CikIC2atRAdQfEkSUJhaSEyCjKQsS8DOSdzREciM1RTyxEcObHgmLnRgaMx3H84soqyREchhWjh3EJ0BEW6cVfuGwcJn7xwUnQkMnPVtRzBkRMLjplTqVRYOGkh+s3rJzoKKUTJpRIUFBegT4c+oqNYvMtXL2PjgY3I2JfBu3JTg3EER14sOBYgpGMIHg19FCm7U0RHIQXQXNMg/MNwbHlpC4I7BIuOY3FOXTil3/WUfTSbx1FQo3EER14sOBZi3gPz8O0v3/LgRDKKi1cuIvyDcGx+aTNCOoaIjmPWJElCfnG+/lTugpIC0ZFIITiCIy8WHAvR0avjn1ed3bRAdBRSiEtXLyHiwwhsfnEz+vlyF+hfVVVXYdvRbVhTsAbpBek4fem06EikQCw48mLBsSCxo2OxdOdSXKi8IDoKKcTlq5cR8WEEMl/MxF2d7hIdRyjNNQ02HtiI9IJ0rC9cz+NpSHbcRSUvFhwL0sK5Bd4c8yaiU6NFRyEFKb9Wjns/uheZszOt7urGJ/84+ef9nvavxdYjW6Gr1omORFaEIzjyYsGxMP8Y+g98svUTHD93XHQUUhDNNQ3u/ehevDLyFTSzb4bOrTpjfN/xomMZnSRJyCvOQ3pBOtIL0rH/9H7RkciK8QB1ebHgWBgHOwfEj4/HpM8niY5CClNxvQJvpr+pf/7W2Lfw1ti3LP6GgLpqHbKOZCF9XzoyCjJQerlUdCQiAODNVGXGgmOBJvSdgDC/MOw6sUt0FFKwuLVxKL9Wjg8f+tDiSs7lq5exoXAD0gvS8cOBH1BxvUJ0JCIyMRYcC6RSqZAwMQGD3h8kOgopXOKWRGiuaZA0LQm2Nrai49xW8YXiP3c97UvHtqPbOPxPZOVYcCzUwC4DMaHvBKTlpYmOQgr35c4v8dOxn/DkkCfx2MDH0Mq1lehIAP53fZqMfRlIL0jn9WmIqA6VJEmS6BDGoNFo4O7ujvLycri5uYmOYxLHfj+GHm/14L9UyWTsbe1xf5/7MdBvIALbBqJX215o7dbaZLuwrlddR9aRLGTsy8DafWt5PA1ZtG//8S0mhkwUHUM4ub6/OYJjwbq27opnhj6DT7Z+IjoKWYmqmip8l/sdvsv9Tj/N18sXP778Izq36izLe16ovID1+9cjfV86Nh3chCvaK7K8DxEpi01TFo6Pj4dKpcLs2bNvOU92djZUKlW9x5EjR246f2pqKlQqFR544IGmRLMab455E27NrGPEiszTyQsnMTJxJM5pzhltnb+e/xUfbf4IwxYOQ+uXW2P6sulYnbea5YaIDNboEZycnBwkJSUhKCjIoPmLiorqDD21alV/P/6pU6cQExODwYMHNzaW1Wnp2hKvj3odr61+TXQUsmLHzx3H6EWjkRWTBVcn1wYvX1tbi9xTufqDhA+UHpAhJRFZk0aN4FRWViIqKgrJycnw8PAwaBlvb2/4+PjoH7a2dc/IqKmpQVRUFOLi4tC5szxD3Ur1QvgLaO/ZXnQMsnK5p3Ix4bMJBl8N+HrVdWwo3IBnUp5B+zntcde7d2H+hvksN0RkFI0qOLNmzUJkZCQiIiIMXiY4OBhqtRrh4eHIysqq9/o777yDVq1aYebMmQatT6vVQqPR1HlYq2YOzTD/gfmiYxBh86HNeGzZY6itvfkFzP6o+ANf7fwK4z8dj5YvtkTkokh8vu1znLl8xsRJicRTyDk+ZqvBu6hSU1ORl5eHnJwcg+ZXq9VISkpCSEgItFotVqxYgfDwcGRnZ2PIkCEAgJ07d2Lp0qUoKCgwOEd8fDzi4uIaGl+xogZE4aMtHyG/OF90FLJyq/auQmu31voLBJ784yTSC9Lxff73+OnYT7x6KxGZRIMKTklJCaKjo5GZmQknJyeDlvH394e/v7/+eVhYGEpKSpCQkIAhQ4agoqICjz76KJKTk9GyZUuDs8TGxuKll17SP9doNGjf3np309jY2CBhYgLCPwwXHYUIiVsSUVZehqKzRbw+DREJ0aCCk5ubi3PnziEkJEQ/raamBtu3b8fixYuh1WrrHVtzM6GhoUhJSQEAnDhxAidPnsTYsWP1r98Y3razs0NRURH8/PzqrcPR0RGOjo4Nia9493S/B6MDR2ND4QbRUYjwTc43oiMQkRVrUMEJDw9HYWFhnWkzZsxAQEAA5syZY1C5AYD8/Hyo1WoAQEBAQL11zp07FxUVFfj444+telSmMRZMWICNBzZyNwAREVm1BhUcV1dX9OrVq840FxcXeHl56afHxsaitLQUy5cvBwAkJibC19cXPXv2hE6nQ0pKCtLS0pCW9uctBpycnOqts0WLFgBQbzrdWc+2PTHz7plI/ilZdBQiIiJhjH4l47KyMhQXF+uf63Q6xMTEoLS0FM2aNUPPnj2xfv16jB492thvTf8VNy4OX+/9mhdFIyIiq8V7USnU2xlvI24tzzIjIjJX//f0/2FSv0miYwgn1/d3k27VQOYrZkQMfNx9RMcgIiISggVHoZo7NcdHD30kOgYREZEQLDgK9nD/hxEZGCk6BhERkcmx4CiYSqXCZ49+1qibHxIREVkyFhyFa+/ZHu+Nf090DCIiIpNiwbEC/xj6D9zd5W7RMYiIiEyGBccK2NjYIHlaMhzteGsLIiKyDiw4ViJAHYA3x7wpOgYREZFJsOBYkVdGvoLe7XqLjkFERCQ7FhwrYm9njy8f+xK2NobdFJWIiMhSseBYmb4d++Lle18WHYOIiEhWLDhW6O1xb6OLdxfRMYiIrJpKpRIdQdFYcKxQM4dmWDJtiegYREREsmHBsVJD/YfiH0P/IToGERGRLFhwrNj7E95HO492omMQEREZHQuOFXNr5obPoj4THYOIyCqpwGNw5MSCY+XG9B6DR+56RHQMIiIio2LBISROTkTL5i1FxyAiIjIaFhxCK9dWWDR5kegYRERERsOCQwCAyXdNxpigMaJjEBERGQULDgH484JTn0V9BrdmbqKjEBERNRkLDum182yHhRMXio5BRETUZCw4VMcTdz+BYf7DRMcgIiJqEhYcqsPGxgbJ05LhZO8kOgoREVGjseBQPV28uyB+fLzoGEREiiZBEh1B0Vhw6Kaev+d5hHYOFR2DiIioUVhw6KZsbWyxdPpSONg5iI5CRETUYCw4dEs92vTA3Mi5omMQERE1GAsO3dac++YgsG2g6BhEREQNwoJDt+Vg54Cl05fCRsVfFSIiY5IkHmQsJ35r0R3179QfL937kugYREREBmPBIYPEjYuDXys/0TGIiIgMwoJDBnF2dEbytGTRMYiIiAzCgkMGGx4wHE8OflJ0DCIiReAxOPJqUsGJj4+HSqXC7NmzbzlPdnY2VCpVvceRI0f086xevRr9+vVDixYt4OLigj59+mDFihVNiUYyWTBxAdq0aCM6BhER0W3ZNXbBnJwcJCUlISgoyKD5i4qK4Obmpn/eqlUr/c+enp745z//iYCAADg4OGDdunWYMWMGvL29MXLkyMZGJBm0cG6Bz6I+w/3/vl90FCIioltq1AhOZWUloqKikJycDA8PD4OW8fb2ho+Pj/5ha2urf23YsGF48MEH0b17d/j5+SE6OhpBQUHYsWNHY+KRzMb1GYeH+z8sOgYREdEtNargzJo1C5GRkYiIiDB4meDgYKjVaoSHhyMrK+uW80mShB9//BFFRUUYMmTILefTarXQaDR1HmQ6iyYvgqeLp+gYREREN9XggpOamoq8vDzExxt2t2m1Wo2kpCSkpaVh9erV8Pf3R3h4OLZv315nvvLycjRv3hwODg6IjIzEJ598gnvvvfeW642Pj4e7u7v+0b59+4Z+FGoCbzdvfDz5Y9ExiIgsFu8mLq8GHYNTUlKC6OhoZGZmwsnJyaBl/P394e/vr38eFhaGkpISJCQk1BmhcXV1RUFBASorK/Hjjz/ipZdeQufOnTFs2LCbrjc2NhYvvfS/i89pNBqWHBOLGhCFr/d8jR8O/CA6ChERUR0NKji5ubk4d+4cQkJC9NNqamqwfft2LF68GFqtts6xNbcSGhqKlJSUOtNsbGzQpUsXAECfPn1w+PBhxMfH37LgODo6wtHRsSHxychUKhU+f/Rz9HyrJyq1laLjEBER6TVoF1V4eDgKCwtRUFCgf/Tr1w9RUVEoKCgwqNwAQH5+PtRq9W3nkSQJWq22IfFIgA5eHfD+hPdFxyAiIqqjQSM4rq6u6NWrV51pLi4u8PLy0k+PjY1FaWkpli9fDgBITEyEr68vevbsCZ1Oh5SUFKSlpSEtLU2/jvj4ePTr1w9+fn7Q6XTYsGEDli9fjs8++6ypn49M4B9D/4FVe1dhx3Ge9UZEROah0dfBuZWysjIUFxfrn+t0OsTExKC0tBTNmjVDz549sX79eowePVo/z5UrV/Dss8/i9OnTaNasGQICApCSkoKHH+apyJbAxsYGS6YvQe+43tBWc9SNiMgQvJKxvFSSQrawRqOBu7s7ysvL61xQkEwnfkM8Xv/+ddExiIgswqonV2HyXZNFxxBOru9v3ouKjCZmRAx6t+stOgYRERELDhmPvZ09lkxfAhsVf62IiEgsfhORUfXz7YcX731RdAwiIrJyLDhkdO+MewedW3UWHYOIyKwp5BBYs8WCQ0bn7OiMLx79QnQMIiKyYiw4JIuIHhF4bOBjomMQEZGVYsEh2Xzw0AfwdvUWHYOIiKwQCw7JxtPFE59M+UR0DCIiskIsOCSrSf0mYWzvsaJjEBGZHQk8yFhOLDgkK5VKhU8f+RSuTq6ioxARmRUVVKIjKBoLDsmunWc73nGciOhvVCoWHDmx4JBJPD3kadzd5W7RMYiIzAYLjrxYcMgkbGxskDwtGQ52DqKjEBGZBV7oT14sOGQyAeoAvDnmTdExiIjMAguOvFhwyKReHfkqAtsGio5BRCQcz6KSFwsOmZS9nT2WTl/KO44TkdWrlWpFR1A0fsuQyfXv1B+zI2aLjkFEJBR3UcmLBYeEeOf+d9CpZSfRMYiIhGHBkRcLDgnh4uiCpKlJomMQEQnDY3DkxYJDwkT0iMDjgx4XHYOISAiO4MiLBYeESpiUAB93H9ExiIhIYVhwSCgPFw/8+5F/i45BRGRy3EUlLxYcEm583/EY33e86BhERKQgLDhkFhZPWYwWzi1ExyAiMhkegyMvFhwyC+oWanww6QPRMYiISCFYcMhszBg0A+Hdw0XHICIyCY7gyIsFh8yGSqVC0tQkODs4i45CRCQ7HmQsLxYcMiudW3XGvAfmiY5BREQWjgWHzM4L4S/grk53iY5BRCQr7qKSFwsOmR1bG1ssmbYEdrZ2oqMQEcmGu6jkxYJDZimwXSBiR8WKjkFEJBuO4MiLBYfM1j9H/xPd1d1FxyAikgULjrxYcMhsOdo7Ysm0JVCpVKKjEBEZHXdRyatJBSc+Ph4qlQqzZ8++5TzZ2dlQqVT1HkeOHNHPk5ycjMGDB8PDwwMeHh6IiIjA3r17mxKNFGJgl4F4dtizomMQERldrVQrOoKiNbrg5OTkICkpCUFBQQbNX1RUhLKyMv2ja9eu+teys7MxZcoUZGVlYdeuXejQoQNGjBiB0tLSxsYjBYkfH4/2nu1FxyAiMiruopJXowpOZWUloqKikJycDA8PD4OW8fb2ho+Pj/5ha2urf23lypV49tln0adPHwQEBCA5ORm1tbX48ccfGxOPFMbVyRWfP/q56BhEREbFgiOvRhWcWbNmITIyEhEREQYvExwcDLVajfDwcGRlZd123qtXr6Kqqgqenp6NiUcKNDpwNB656xHRMYiIjIbH4MirwRcaSU1NRV5eHnJycgyaX61WIykpCSEhIdBqtVixYgXCw8ORnZ2NIUOG3HSZ1157DW3btr1tgdJqtdBqtfrnGo2mYR+ELE7i5ERsOrQJFyoviI5CRNRkHMGRV4MKTklJCaKjo5GZmQknJyeDlvH394e/v7/+eVhYGEpKSpCQkHDTgrNgwQKsWrUK2dnZt32P+Ph4xMXFNSQ+WbhWrq3w8cMf49Glj4qOQkTUZDzIWF4N2kWVm5uLc+fOISQkBHZ2drCzs8O2bduwaNEi2NnZoaamxqD1hIaG4tixY/WmJyQk4N1330VmZuYdD16OjY1FeXm5/lFSUtKQj0IW6pEBj2BUr1GiYxARNRlHcOTVoBGc8PBwFBYW1pk2Y8YMBAQEYM6cOXUOHL6d/Px8qNXqOtMWLlyIefPmYdOmTejXr98d1+Ho6AhHR0fDw5MiqFQqfP7o5+jxVg9c0V4RHYeIiMxUgwqOq6srevXqVWeai4sLvLy89NNjY2NRWlqK5cuXAwASExPh6+uLnj17QqfTISUlBWlpaUhLS9OvY8GCBXjjjTfw9ddfw9fXF2fPngUANG/eHM2bN2/SByTl6eDVAe+Nfw/Pr3pedBQiIjJTRr+ScVlZGYqLi/XPdTodYmJiEBQUhMGDB2PHjh1Yv349xo8fr5/n008/hU6nw8SJE6FWq/WPhIQEY8cjhXh22LMY6DdQdAwiokbjWVTyUkkK2Qmo0Wjg7u6O8vJyuLm5iY5DJnC47DD6vNMHumqd6ChERA2WMCkBL494WXQM4eT6/ua9qMhidVd3xxuRb4iOQUREZogFhyzaq/e9iqB2ht0uhIjInPA0cXmx4JBFc7BzwNLpS2Gj4q8yEVkWhRwhYrb4rUAWr59vP7x070uiYxARNQgLjrxYcEgR4sbFwa+Vn+gYREQG4y4qebHgkCI4OzojeVqy6BhERAbjCI68WHBIMYYHDMeTg58UHYOIyCC8Do68WHBIURZMXIA2LdqIjkFEdEccwZEXCw4pSgvnFvg06lPRMYiISDAWHFKc+/vcj4f6PSQ6BhHRbXEXlbxYcEiRFk1ZBA9nD9ExiIhuibuo5MWCQ4rU2q01Eh9OFB2DiIgEYcEhxZoaNhX39rhXdAwiopviCI68WHBIsVQqFb549As4OziLjkJERCbGgkOK1qlVJ8x7YJ7oGEREZGIsOKR4L4S/gP6+/UXHICIiE2LBIcWztbFF8rRk2NnaiY5CRKS3On81zmnOiY6hWCw4ZBV6t++NV0e+KjoGEZHe/tP7MW7xOOSeyhUdRZFYcMhqvDHmDXRr3U10DCIivT2/7UG/ef0Q/kE4dNU60XEUhQWHrIaTvRPvOE5EZmnrka34Pv970TEUhQWHrMqQbkPw9JCnRccgIqpnyU9LcL7ivOgYisGCQ1bn/Qnv847jRGR2thzegqTtSaJjKAYLDlkdd2d33nGciMxSyu4UbD+6nVc5NgIWHLJK9/e5HxNDJoqOQURUx5GzRzB04VC8+t2rLDlNpJIUsgU1Gg3c3d1RXl4ONzc30XHIApwtP4seb/bApauXREchIqonwCcA3Vp3g4ezB965/x14u3nDyd5JdCyjk+v7mwWHrNqyncvw+FePi45BRHRHbVq0weYXNyP3VC4igyLh6eIpOpJRyPX9zV1UZNUeG/gYIrpHiI5BRHRHZy6fQc+3emLal9PQ+uXWeCblGZRdLtO/Xl1TXW8ZzTUNdp3YBc01jSmjmgWO4JDV+/X8rwh8OxBXdVdFRyEiapB+HfthVOAonLl8Bqk5qRjabSguXrkIv1Z+cHVyxfJdy3FVdxXODs5In5WOiB7m9w867qK6AxYcaooPMz/Ey9++LDoGEZFsPF088f2z32NItyGio9TBXVREMnoh/AX069hPdAwiItlcvHLxpruxlIoFhwiAna0dlj62lHccJyLFenvs2xgeMFx0DJNhwSH6r6B2QZgzco7oGERERjfMfxjeGvcWVCqV6Cgmw4JD9Bdzx8yFv4+/6BhEREaVXZSNxVsXi45hUiw4RH/hZO+EpdOXWtW/cojIOry74V2rOl28SQUnPj4eKpUKs2fPvuU82dnZUKlU9R5HjhzRz3Pw4EFMmDABvr6+UKlUSExMbEosoiYZ1GUQnr/nedExiIiMqqy8DA/8+wGrOdC40QUnJycHSUlJCAoKMmj+oqIilJWV6R9du3bVv3b16lV07twZ7733Hnx8fBobicho3n3wXXRq2Ul0DCIio8oqykJ+cb7oGCbRqIJTWVmJqKgoJCcnw8PDw6BlvL294ePjo3/Y2trqX+vfvz8WLlyIyZMnw9HRsTGRiIzKxdEFSVOTRMcgIjK6n0/8LDqCSTSq4MyaNQuRkZGIiDD8iojBwcFQq9UIDw9HVlZWY96WyKQiekTg8UG8TxURKcvSHUtRU1sjOobsGnzRj9TUVOTl5SEnJ8eg+dVqNZKSkhASEgKtVosVK1YgPDwc2dnZGDKk8VdT1Gq10Gq1+ucajfUcOEWmkzApARsObMDZ8rOioxARGUVhaSEuXrmIVq6tREeRVYMKTklJCaKjo5GZmQknJ8Nu2e7v7w9///+ddhsWFoaSkhIkJCQ0qeDEx8cjLi6u0csTGcLDxQP/fuTfmPDZBNFRiIiMoplDM7g5Kf+WRg3aRZWbm4tz584hJCQEdnZ2sLOzw7Zt27Bo0SLY2dmhpsawIa/Q0FAcO3asUYFviI2NRXl5uf5RUlLSpPUR3cr4vuMxoS8LDhEpwzXdNXyT843oGLJr0AhOeHg4CgsL60ybMWMGAgICMGfOnDoHDt9Ofn4+1Gp1Q966HkdHRx6QTCaz+JHF+PHIj7h89bLoKERETfZ0ytM4+vtRtPdsj15te6Ffx35wtFfWd2qDCo6rqyt69epVZ5qLiwu8vLz002NjY1FaWorly5cDABITE+Hr64uePXtCp9MhJSUFaWlpSEtL069Dp9Ph0KFD+p9LS0tRUFCA5s2bo0uXLk36gETG4OPug8SHE/HYssdERyEiarLrVdcxf8N8/XNHO0d0V3fH9arryJ2bC2dHZ4HpjMPoVzIuKytDcXGx/rlOp0NMTAyCgoIwePBg7NixA+vXr8f48eP185w5cwbBwcEIDg5GWVkZEhISEBwcjCeeeMLY8YgabVrYNDwY/KDoGERERqet1qKgpABHzh7Bd7nfiY5jFCpJkiTRIYxBo9HA3d0d5eXlcHNT/sFTJMbpi6cRGh+K0suloqMQEcliUJdB2DFnh8neT67vb96LiqgB2nm2w67YXejZpqfoKEREsth5fCcmJ03G3t/2io7SJCw4RA3U3rM9dszZgaHdhoqOQkQki29yvsHA9wZi94ndoqM0GgsOUSO0cG6BTbM3YXL/yaKjEBHJoqa2Bg8lPYTC04V3ntkMseAQNZKjvSNWPrESMSNiREchIpJFycUSDHp/ELKOWN4tllhwiJrAxsYGCyctxMeTP4ZKpRIdh4jI6CquV+CBTx/AHxV/iI7SICw4REbwQvgL+Pbpb+Fop6wLZRERAUAb9zZo6dpSdIwGYcEhMpIJIRPw48s/wsPZQ3QUIiKjGh04WnSEBmvw3cSJ6NYGdRmEn1/7Gfd9fB9OXTglOg41Ur+O/dCrbS/USrWQJAm1Um2dn2827cbPNVJNnWm1tf99DZL+57+/VlNbo59WU1ujf36zPyVIdZat897/ff3G/Aq5zBmZAUu8Hx8LDpGRBagDsOu1XRi9aDQKSgpEx6EGev6e5/HBpA9gb2cvOkqT6YvWX8rQjfJTXVuNqpqqeiXrRsGSINUrdH8vaTdK1d/X/fc/b1sI/1LKbrZ8nZ+lGtTW/u1nqeaW899s2o1j5W5M1z+kmjrz1ime/32fv/55s2J6q+1gyHJ//dMcdfDsIDpCg7HgEMlA3UKNba9sw8TPJ2Lzoc2i45CB5kbOxb8e+JfoGEajUqlgq7KFrY1hN0Im83Cj+P29fP29sNUbEfxbqfr7a7pqHaprqlFd+99HTXW9cnez93V1ckU7z3aiN0uDseAQycStmRvWPb8OT694Gl/9/JXoOHQHNiobPDn4SdExiKBSqWBnawc7W35FNwUPMiaSkYOdA7587Eu8NfYt0VHoNvxa+WHLS1vQwcvyhuGJ6OZYcIhkplKp8Pa4t/HNU9/A2cFZdBy6iYznMjA8YLjoGERkRCw4RCbyUP+H8PNrP8PXy1d0FPqvod2GImVmCnq06SE6ChEZGQsOkQn1bt8bOf/MQXj3cNFRrJ6LowuWTF+CqNAo0VGISAYsOEQm1tK1JTZGb+Q9rARo5dpKf5rwKyNeQRfvLoITEZFceIg2kQB2tnZYOGkh+nboi5nLZ+Ka7proSIrm7+OPpdOXYqDfQOz9bS9qamswsMtA0bGISEYcwSESaMqAKdjx6g6092wvOopJvTLyFfRu19tk7xf/YDwGdRkElUqFAZ0HsNwQWQEWHCLB+nbsi1/++QuGdhsqNIdKpULbFm1lvyu6g50D3hv/Hrqru8v2Hnd1uguLH1mMrS9vxcn3TuLBvg/K9l5EZJ5YcIjMgLebNza/uBnR4dEmfV9nB2eM7T0WXz/xNTSLNDi98DT2vr5X1hElXbUOZzVn0ad9H/RQG/fsJWcHZ8y5bw62vbINs4bPwvCA4ejo1dGo70FElkElKeRubBqNBu7u7igvL4ebm5voOESNlrI7BU8ufxLXq64bfd0tm7fEgE4DEOYXhuH+w9HPtx8c7BzqzVd2uQxPLH8CGwo3NOp9HO0c4WTvhPJr5Td9/T8z/oNpA6dBkiQMXjAYO4/vbNT7AH+OCL0Y8SIe6PMAAtsFwsXRpdHrIiLTk+v7mwWHyAzlncrDg58+iOKLxQbN36ttL9zb/V70bNMTft5+6ODZAderruNcxTlormng1swNXVp1QVuPhu2COlx2GMt2LsOK3Stwtvzsbed1sHPA2KCxiBoQhVGBo+Bo54hfz/+K9YXrsSZ/DbKKsvRZt7+yHR4uHgCA3Sd241/r/4WSiyUoLC00OBsAzLx7Jj586EO4NeP/80SWigXnDlhwSGnOV5zHpM8nYdvRbbecp7ljcyRNTcKUAVNkzVJdU43Nhzbj+/zvsb5wPc5cPgMAsLe1x4BOA/Bw/4cx5a4p8Grudct1/Hb+N1y6eglB7YJueo+d0kuluPeje3Hywsk7nlXm4eyB5GnJmBAyoWkfjIiEY8G5AxYcUqKq6iq8kPoCPt/2eb3XurXuhoznMuDv42/yXDW1NdBc08DZwRmO9o5GXffYT8Zi3f51t3x9uP9wLH98uUXe3ZiI6pPr+5sHGROZMXs7e3z26Gf4NOpT2NrY6qff1+s+7I7dLaTcAICtjS08XDyMXm4AoKy87KbT7W3t8f6E97H5pc0sN0R0R7zQH5EFeGbYMxjQaQAy9mXAv7U/Hu7/MGxslPfvk9MXT+PS1UvY+/pevPh/L+oPPg7wCUDqU6no3d50184hIsvGXVREZDauV11H5fVKtHRtieILxfhk6yeo1FYiYVICz44iUigeg3MHLDhERESWh8fgEBERERmIBYeIiIgUhwWHiIiIFIcFh4iIiBSHBYeIiIgUhwWHiIiIFKdJBSc+Ph4qlQqzZ8++5TzZ2dlQqVT1HkeOHKkzX1paGnr06AFHR0f06NED33//fVOiERERkRVrdMHJyclBUlISgoKCDJq/qKgIZWVl+kfXrl31r+3atQsPP/wwpk6din379mHq1Kl46KGHsGfPnsbGIyIiIivWqIJTWVmJqKgoJCcnw8PDw6BlvL294ePjo3/Y2v7vvjqJiYm49957ERsbi4CAAMTGxiI8PByJiYmNiUdERERWrlEFZ9asWYiMjERERITBywQHB0OtViM8PBxZWVl1Xtu1axdGjBhRZ9rIkSPx888/33J9Wq0WGo2mzoOIiIgIaMTNNlNTU5GXl4ecnByD5ler1UhKSkJISAi0Wi1WrFiB8PBwZGdnY8iQIQCAs2fPonXr1nWWa926Nc6ePXvL9cbHxyMuLq6h8YmIiMgKNKjglJSUIDo6GpmZmXBycjJoGX9/f/j7++ufh4WFoaSkBAkJCfqCAwAqlarOcpIk1Zv2V7GxsXjppZf0zzUaDdq3b2/oRyEiIiIFa1DByc3Nxblz5xASEqKfVlNTg+3bt2Px4sXQarV1jq25ldDQUKSkpOif+/j41ButOXfuXL1Rnb9ydHSEo6Oj/vmNe4ZyVxUREZHluPG9bex7fzeo4ISHh6OwsLDOtBkzZiAgIABz5swxqNwAQH5+PtRqtf55WFgYNm/ejBdffFE/LTMzEwMHDjQ4W0VFBQBwFIeIiMgCVVRUwN3d3Wjra1DBcXV1Ra9evepMc3FxgZeXl356bGwsSktLsXz5cgB/niHl6+uLnj17QqfTISUlBWlpaUhLS9OvIzo6GkOGDMH777+P+++/H+np6diyZQt27NhhcLY2bdqgpKQErq6ut921Jbcbu8pKSkqMett3+h9uY9PgdjYNbmf5cRubRmO3syRJqKioQJs2bYyap8EHGd9JWVkZiouL9c91Oh1iYmJQWlqKZs2aoWfPnli/fj1Gjx6tn2fgwIFITU3F3Llz8cYbb8DPzw/ffPMNBgwYYPD72tjYoF27dkb9LE3h5ubG/5Fkxm1sGtzOpsHtLD9uY9NozHY25sjNDSrJ2Du9rJxGo4G7uzvKy8v5P5JMuI1Ng9vZNLid5cdtbBrmtp15LyoiIiJSHBYcI3N0dMRbb71V5wwvMi5uY9PgdjYNbmf5cRubhrltZ+6iIiIiIsXhCA4REREpDgsOERERKQ4LDhERESkOCw4REREpDgvOHcyfPx8DBw6Es7MzWrRoYdAyb7/9NgICAuDi4gIPDw9ERERgz5499ebbtWsX7rnnHri4uKBFixYYNmwYrl27BgA4efIkZs6ciU6dOqFZs2bw8/PDW2+9BZ1OZ8yPZxZEbWMAuHTpEqZOnQp3d3e4u7tj6tSpuHz5spE+mXmRazsPGzYMKpWqzmPy5Ml15jl69Cjuv/9+tGzZEm5ubhg0aBCysrKM9dHMhshtDADr16/HgAED0KxZM7Rs2RLjx483xscyO6K3MwBotVr06dMHKpUKBQUFTfxE5kfUNjbmdx8Lzh3odDpMmjQJzzzzjMHLdOvWDYsXL0ZhYSF27NgBX19fjBgxAufPn9fPs2vXLtx3330YMWIE9u7di5ycHDz33HOwsfnzP8mRI0dQW1uLL774AgcPHsRHH32Ezz//HK+//rrRP6NoorYxADzyyCMoKCjAxo0bsXHjRhQUFGDq1KlG/XzmQq7tDABPPvkkysrK9I8vvviizuuRkZGorq7G1q1bkZubiz59+mDMmDH1brJr6URu47S0NEydOhUzZszAvn37sHPnTjzyyCNG+VzmRuR2vuHVV181+q0FzImobWzU7z6JDLJs2TLJ3d29UcuWl5dLAKQtW7bopw0YMECaO3dug9azYMECqVOnTo3KYAlMvY0PHTokAZB2796tn7Zr1y4JgHTkyJFG5bAExt7OQ4cOlaKjo2+5zPnz5yUA0vbt2/XTNBpNvfUoiam3cVVVldS2bVtpyZIljXpPS2Xq7XzDhg0bpICAAOngwYMSACk/P79RGSyBqG38V4397uMIjsx0Oh2SkpLg7u6O3r17AwDOnTuHPXv2wNvbGwMHDkTr1q0xdOjQO95ctLy8HJ6enqaIbVEau4137doFd3f3Ovc8Cw0Nhbu7O37++WeTfw5zd7PtfMPKlSvRsmVL9OzZEzExMaioqNC/5uXlhe7du2P58uW4cuUKqqur8cUXX6B169YICQkx9ccwa43dxnl5eSgtLYWNjQ2Cg4OhVqsxatQoHDx40NQfwSI0djsDwO+//44nn3wSK1asgLOzsyljW5SmbOO/a/R3X4MrkZVqaItdu3at5OLiIqlUKqlNmzbS3r179a/dGCXw9PSUvvzySykvL0+aPXu25ODgIB09evSm6zt+/Ljk5uYmJScnN/WjmC1Tb+P58+dLXbt2rbferl27Su+++26TP4+5MuZ2liRJSkpKkjZv3iwVFhZKq1atknx9faWIiIg685w+fVoKCQmRVCqVZGtrK7Vp04b/6v2Lpm7jVatWSQCkDh06SN999530yy+/SFOmTJG8vLykCxcuGOtjmR1Tb+fa2lrpvvvuk/71r39JkiRJv/32G0dw/sYYf1/8VVO++6yy4Lz11lsSgNs+cnJy6izT0P/IlZWV0rFjx6Rdu3ZJjz/+uOTr6yv9/vvvkiRJ0s6dOyUAUmxsbJ1lAgMDpddee63eukpLS6UuXbpIM2fObPiHFcQStvH8+fOlbt261Vtvly5dpPj4+AZ+YjFEb+eb+eWXXyQAUm5uriRJf34pjBs3Tho1apS0Y8cOKTc3V3rmmWektm3bSmfOnGnU5zYlS9jGK1eulABIX3zxhX6e69evSy1btpQ+//zzhn1gQSxhO3/88cfSwIEDperqakmSLK/gWMI2/qumfvfZNXzMx/I999xztzwy/gZfX98mvYeLiwu6dOmCLl26IDQ0FF27dsXSpUsRGxsLtVoNAOjRo0edZbp3747i4uI6086cOYPhw4cjLCwMSUlJTcpkSpawjX18fPD777/XW+/58+fRunXrJmUzFdHb+Wb69u0Le3t7HDt2DH379sXWrVuxbt06XLp0SX+H4U8//RSbN2/Gf/7zH7z22mtNyic3S9jGN/t9d3R0ROfOnev9nWKuLGE7b926Fbt37653r6V+/fohKioK//nPf5qUT26WsI1vMMZ3n1UWnJYtW6Jly5YmfU9JkqDVagH8+QvUpk0bFBUV1Znn6NGjGDVqlP55aWkphg8fjpCQECxbtqzO2T/mzhK2cVhYGMrLy7F3717cddddAIA9e/agvLwcAwcONGn2xhK9nW/m4MGDqKqq0n/pXr16FQDq/f7a2NigtrZWvqBGYgnbOCQkBI6OjigqKsLdd98NAKiqqsLJkyfRsWNHk2RuKkvYzosWLcK8efP0r585cwYjR47EN998U+dYPnNlCdsYMOJ3X6PGfazIqVOnpPz8fCkuLk5q3ry5lJ+fL+Xn50sVFRX6efz9/aXVq1dLkvTn8FxsbKy0a9cu6eTJk1Jubq40c+ZMydHRUTpw4IB+mY8++khyc3OTvv32W+nYsWPS3LlzJScnJ+n48eOSJP1vaO6ee+6RTp8+LZWVlekfSiNqG0uSJN13331SUFCQtGvXLmnXrl1SYGCgNGbMGNN9eBOSYzsfP35ciouLk3JycqTffvtNWr9+vRQQECAFBwfrh/HPnz8veXl5SePHj5cKCgqkoqIiKSYmRrK3t5cKCgpMvyFkJGobS5IkRUdHS23btpU2bdokHTlyRJo5c6bk7e0tXbx40bQbwQREbue/srRdVA0hahsb87uPBecOpk+fftP9lFlZWfp5AEjLli2TJEmSrl27Jj344INSmzZtJAcHB0mtVkvjxo2rd6CVJElSfHy81K5dO8nZ2VkKCwuTfvrpJ/1ry5Ytu+U+UqURtY0lSZIuXLggRUVFSa6urpKrq6sUFRUlXbp0ScZPK44c27m4uFgaMmSI5OnpKTk4OEh+fn7SCy+8UO/A1pycHGnEiBGSp6en5OrqKoWGhkobNmwwxcc2KZHbWKfTSS+//LLk7e0tubq6ShEREXUKv5KI3M5/peSCI2obG/O7T/XfkERERESKYTkHdRAREREZiAWHiIiIFIcFh4iIiBSHBYeIiIgUhwWHiIiIFIcFh4iIiBSHBYeIiIgUhwWHiIiIbmn79u0YO3Ys2rRpA5VKhTVr1jRo+bfffhsqlarew8XFRZ7A/8WCQ0RERLd05coV9O7dG4sXL27U8jExMSgrK6vz6NGjByZNmmTkpHWx4BAREdEtjRo1CvPmzcP48eNv+rpOp8Orr76Ktm3bwsXFBQMGDEB2drb+9ebNm8PHx0f/+P3333Ho0CHMnDlT1txWeTdxIiIiMo4ZM2bg5MmTSE1NRZs2bfD999/jvvvuQ2FhIbp27Vpv/iVLlqBbt24YPHiwrLk4gkNERESNcuLECaxatQrffvstBg8eDD8/P8TExODuu+/GsmXL6s2v1WqxcuVK2UdvAI7gEBERUSPl5eVBkiR069atznStVgsvL696869evRoVFRWYNm2a7NlYcIiIiKhRamtrYWtri9zcXNja2tZ5rXnz5vXmX7JkCcaMGQMfHx/Zs7HgEBERUaMEBwejpqYG586du+MxNb/99huysrKQkZFhkmwsOERERHRLlZWVOH78uP75b7/9hoKCAnh6eqJbt26IiorCtGnT8MEHHyA4OBh//PEHtm7disDAQIwePVq/3Jdffgm1Wo1Ro0aZJLdKkiTJJO9EREREFic7OxvDhw+vN3369On46quvUFVVhXnz5mH58uUoLS2Fl5cXwsLCEBcXh8DAQAB/7srq2LEjpk2bhvnz55skNwsOERERKQ5PEyciIiLFYcEhIiIixWHBISIiIsVhwSEiIiLFYcEhIiIixWHBISIiIsVhwSEiIiLFYcEhIiIixWHBISIiIsVhwSEiIiLFYcEhIiIixWHBISIiIsX5fzo9ebvHkeqLAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "alameda_county.plot(color='darkgreen')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 3. CRS and Map Projections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with CRSs in GeoPandas\n", + "\n", + "Now that we've covered some of the basics, let's turn back to the code. Even though there are a lot of details, GeoPandas actually makes it pretty easy to work with CRSs!\n", + "\n", + "### Identifying the CRS of a GeoDataFrame\n", + "\n", + "GeoPandas GeoDataFrames have a `crs` attribute that returns the CRS of the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "Name: WGS 84 / Pseudo-Mercator\n", + "Axis Info [cartesian]:\n", + "- X[east]: Easting (metre)\n", + "- Y[north]: Northing (metre)\n", + "Area of Use:\n", + "- name: World between 85.06°S and 85.06°N.\n", + "- bounds: (-180.0, -85.06, 180.0, 85.06)\n", + "Coordinate Operation:\n", + "- name: Popular Visualisation Pseudo-Mercator\n", + "- method: Popular Visualisation Pseudo Mercator\n", + "Datum: World Geodetic System 1984 ensemble\n", + "- Ellipsoid: WGS 84\n", + "- Prime Meridian: Greenwich" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "counties.crs" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EPSG:3857\n" + ] + } + ], + "source": [ + "print(counties.crs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setting the CRS\n", + "\n", + "You can also set the CRS of a GeoDataFrame using the `crs` attribute. You should set the CRS if is not defined or if you think it is incorrectly defined.\n", + "\n", + "> In desktop GIS terminology, setting the CRS is called **defining the CRS**.\n", + "\n", + "As an example, let's set the CRS of our data to `None`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 4. Mapping and Spatial Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More Data More Maps" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data-Driven Mapping" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Code cells\n", + "\n", + "# Imports are always put at the top of the file. They should be on separate lines.\n", + "import some_package\n", + "\n", + "# But this is okay\n", + "from another_package import some_function\n", + "\n", + "# Comments:\n", + "# Use comments sparingly: better to explain in markdown!\n", + "# Use comments to further specify particular lines of code when needed.\n", + "# Comments start with a capital letter, and a space between the hashtag and the first word\n", + "\n", + "# In general ,we follow the PEP style guide: https://peps.python.org/pep-0008/\n", + "\n", + "# Coding style: \n", + "# Use snake case and single quotation marks, unless your string includes single quotation marks.\n", + "# Most operators are surrounded with a single space.\n", + "some_variable = 12\n", + "if some_variable == 10:\n", + " print(\"high\")\n", + "\n", + "# Always use spaces after commas\n", + "some_list = [1, 2, 3, 4]\n", + "\n", + "# Don’t use spaces around the = sign when used to indicate a keyword argument.\n", + "def some_function(a=1, b=2):\n", + "# Use 4 spaces per indentation level\n", + " print(\"something\")\n", + "\n", + "\n", + "# Data: \n", + "# use relevant social science datasets whenever you can. \n", + "# Think health data, demographics, etc.\n", + "# Stay away from \"impersonal\" datasets like the Iris or Penguins dataset.\n", + "# Use the top-level \"data\" folder in the repo to store data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You might want to have an install cell, if your workshop uses a special package\n", + "# e.g.,\n", + "# !pip install [PACKAGE]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You might want to have an import cell, so that you can do all imports at the beginning.\n", + "# e.g.,\n", + "# import numpy as np\n", + "# import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Subsubsection [EDIT ME]\n", + "\n", + "Use H3 headers for subsubsections, in Title Case, following [APA rules](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case). Don't go lower than H3 if you can avoid it." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "
Expandable sections\n", + "Expandable sections like these can be used for hints, or for information that is optional or more advanced, and you do not want to immediately expose to all workshop participants. Use these expandable sections scarcely!\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Section Name [EDIT ME]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## 🥊 Challenge #: [Name of Challenge]\n", + "\n", + "- Challenges are typically formatted as subsection (##). Title Case applies.\n", + "- Challenges use the 🥊 Boxing Glove emoji in the header.\n", + "- Try to have at least one exercise every 15 minutes of instruction. More is better. A two-hour workshop needs at least **six challenges**.\n", + "- Challenges have names and are numbered. You should reference them in the Solutions file.\n", + "- Plan around 8 minutes for each challenge (including discussion of the solution and questions).\n", + "- Don't use \"Bonus Challenges\" or the like. If really needed, use a \"Take-Home Challenge\" (1 max!) so it's clear these can be completed outside the workshop.\n", + "- Copy filled-in challenges over to a solutions notebook that goes into the \"solutions \"folder. \n", + "\n", + "### *Example:*\n", + "\n", + "## 🥊 Challenge 1: Printing!\n", + "\n", + "Write your own `print()` statement in the code cell below. Follow the syntax of the example above, and change the text in the quotation marks.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You may have some starter code for the challenge that you can put in its own cell.\n", + "# Always have a following cell that says \"YOUR CODE HERE\" with a few empty lines beneath it, \n", + "# so that attendees know where to put their code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# YOUR CODE HERE\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You may also use scaffolding. Use three dots (...) to indicate scaffolding.\n", + "\n", + "def ...:\n", + " # YOUR CODE HERE\n", + " return ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "💡 **Tip**: \n", + "- Tips can be formatted as subsection (##) when they're more substantial.\n", + "- Tips use the 💡 Electric Light Bulb Emoji in the header / at the start of the line, followed by boldface **Tip:**, followed by the tip. \n", + "- Tips are not numbered.\n", + "- Keep them short and to the point.\n", + "- See the Jupyter notebook template for an example.\n", + "\n", + "### *Example:*\n", + "\n", + "💡 **Tip**: A method is written with parenteses: e.g. `gap.value_counts()`. An attribute is written without parentheses: e.g. `gap.columns`.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 💡 Tip: [Name of Tip]\n", + "- Tips can be formatted as subsection (##) when they're more substantial. Title Case applies.\n", + "- Tips use the 💡 Electric Light Bulb Emoji in the header.\n", + "- Tips are not numbered.\n", + "- Keep them short and to the point.\n", + "- See the Jupyter notebook template for an example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "🔔 **Question:** \n", + "- Questions are used without header. \n", + "- Questions use the 🔔 Bell Emoji at the start of the line, followed by boldface **Question:**, followed by the question.\n", + "- Questions are short queries about code or concepts. \n", + "- Questions do not require participants to enter code. \n", + "- Questions can be used as attention checks, and discussed during the workshop.\n", + "- See the Jupyter notebook template for an example.\n", + "\n", + "*Example:*\n", + "\n", + "🔔 **Question**: what will the output of the following code be?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers = [12, 20, 43, 88, 97, 100, 105, 110]\n", + "\n", + "for number in numbers:\n", + " if number > 100:\n", + " print(number, 'is greater than 100.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "📝 **Poll**\n", + "\n", + "- Polls refer to Zoom polls, which can be used as a form of formative assessment.\n", + "- Talk to D-Lab staff if you want to create Zoom polls before adding them in the notebook.\n", + "- Polls use the 📝 memo enoji at the start of the line, followed by boldface **Poll**, followed by the name of the poll.\n", + "- Polls are named with the format {workshop name}{workshop part - poll number}\n", + "- make sure to check if they are **activated** by clicking \"Polls/Quizzes\" in Zoom.\n", + "- Polls are used without header.\n", + "\n", + "### *Example:*\n", + "\n", + "📝 **Poll PyInt 2-2:** Why are only some of the columns in the `DataFrame` visible in the output?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "\n", + "\n", + "# 🎬 Demo: [Title Of Demo]\n", + "\n", + "- Demos can be used at the end of a notebook to show / highlight some advanced functionalities outside the scope of the workshop. \n", + "- Demos are written as main sections (#) that are linked to in the \"Sections\" section. Title Case applies.\n", + "- Demos use the 🎬 Clapper Board Emoji at the start of the header.\n", + "- Demos can used once per notebook.\n", + "- Demos can be used to enthuse participants, and to point them to relevant other D-Lab workshops.\n", + "- Demos are meant to be short: 5-10 mins max.\n", + "\n", + "### *Example:*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "# 🎬 Demo: Working With Data Frames\n", + "\n", + "To cap off this workshop, here's a demo to see what reproducible data science with Python looks like.\n", + "Just run the code cell below, and don't worry if you don't understand everything!\n", + "\n", + "* We'll be using a `pandas` DataFrame to store and manipulate the data - you'll learn more about `pandas` and DataFrames in the next workshop!\n", + "* Our data comes from the California Health Interview Survey (CHIS), the nation's largest state health survey. \n", + "\n", + "Let's have a look at the data:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# Reading in a comma-seperated values file\n", + "chis_df = pd.read_csv('some_file.csv')\n", + "chis_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Looks like we have a bunch of information here. Let's focus on the column for the number of sodas people have per day (the \"number_sodas\" column), and whether people rent or own a house (the \"tenure\" column).\n", + "\n", + "In the next steps, we'll...\n", + "1. change the datatype of a column,\n", + "2. create dummy variables (variables that take values of 0 and 1), and \n", + "3. group our data.\n", + "\n", + "This allows us to calculate the average amount of sodas consumed by people who do and do not own a house." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Changing the data type of a column\n", + "chis_df['number_sodas'] = chis_df['number_sodas'].astype(float)\n", + "\n", + "# Creating dummy variables\n", + "chis_dummies = pd.get_dummies(chis_df, columns=['tenure'])\n", + "\n", + "# Grouping the average number of consumed sodas by people who own a house\n", + "chis_dummies['number_sodas'].groupby(chis_dummies['tenure_OWN']).mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: For more information, see the `style.md` file in the main folder." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "
\n", + "\n", + "## ❗ Key Points\n", + "\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "\n", + "
" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/lessons/2_Example_R_Markdown.Rmd b/lessons/2_Example_R_Markdown.Rmd deleted file mode 100644 index f86bc03..0000000 --- a/lessons/2_Example_R_Markdown.Rmd +++ /dev/null @@ -1,47 +0,0 @@ -# Workshop Name: Subtitle - -The beginning of every workshop notebook should be an H1 (one hashtag) header, with the workshop name, followed by a colon, followed by a subtitle for this notebook. - -Provide a brief introduction to what this lesson covers here. - -## Workshop Subtopic 1 - -Provide some more text on what this subtopic covers. - -```{r} -# You might want to have an install cell, if your workshop uses a special package -# e.g., -# install.packages(PACKAGE) -``` - -```{r} -# You might want to have an import cell, so that you can do all imports at the beginning. -# e.g., -# library(PACKAGE) -``` - -Be sure to have text between code cells explaining the material, step-by-step. - -### Workshop Sub-subtopic 1 - -Perhaps your subtopic will be divided into finer sub-subtopics. Be sure to use consistent headers for each one, and always have an introductory paragraph explaining what the workshop attendee can expect with this section. - -### Challenge #: Challenge Title Here - -Every challenge should be an H3 (3 hashtags) header. The challenge should be numbered, and should have a title. - -Insert some text here explaining the challenge. - -```{r} - -# You may have some starter code for the challenge that you can put in its own cell -# Always have a following cell that says "YOUR CODE HERE", so that attendees know where to put their code -``` - -```{r challenge_X} -# YOUR CODE HERE -``` - -# Optional: Closing Section - -You may optionally include a summary section at the end of the workshop highlighting what this notebook covered. \ No newline at end of file diff --git a/lessons/2_Geoprocessing and Analysis.ipynb b/lessons/2_Geoprocessing and Analysis.ipynb new file mode 100644 index 0000000..d30cfa9 --- /dev/null +++ b/lessons/2_Geoprocessing and Analysis.ipynb @@ -0,0 +1,490 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python Geospatial Fundamental: Geoprocessing and Analysis\n", + "\n", + "* * * \n", + "\n", + "
\n", + " \n", + "### Learning Objectives \n", + " \n", + "* Apply more advanced Python libraries for interactive visualization.\n", + "* Choose domain-specific spatial datasets to create your own maps.\n", + "
\n", + "\n", + "### Icons Used in This Notebook\n", + "🔔 **Question**: A quick question to help you understand what's going on.
\n", + "🥊 **Challenge**: Interactive excersise. We'll work through these in the workshop!
\n", + "💡 **Tip**: How to do something a bit more efficiently or effectively.
\n", + "⚠️ **Warning:** Heads-up about tricky stuff or common mistakes.
\n", + "📝 **Poll:** A Zoom poll to help you learn!
\n", + "🎬 **Demo**: Showing off something more advanced – so you know what Python can be used for!
\n", + "\n", + "### Sections\n", + "1. [Mapping and Spatial Analysis](#section1)\n", + "2. [Interactive Visualization](#section2)\n", + "3. [API, Vector and Raster Data Sources](#section3)\n", + "4. [Create Your Own Map](#section4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "\n", + "# 1. Mapping and Spatial Analysis (cont'd)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joins and Aggregation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Putting It All Together" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Be sure to have text between code cells explaining the material, step-by-step.\n", + "\n", + "Keep the following in mind:\n", + "- Keep narrative text limited! \n", + "- Avoid discussion of edge cases or caveats.\n", + "- Use colloquial languague and minimal jargon; if you need it, explain it.\n", + "- Use **boldface** to highlight key concepts and important terms, but use it sparingly.\n", + "- Don't use italics.\n", + "- Use en-dash for lists.\n", + "- Use `code font` for anything in code like variables, functions, and packages.\n", + "- Use `code font` for menu items (like `Restart Kernel`), and data frame rows/columns. \n", + "- When discussing functions, include the trailing parentheses (e.g. `print()`).\n", + "- When discussing methods, include the dot (e.g. `.sum()`).\n", + "- Consistently use emoji for relevant sections. See below for some examples." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 2. Interactive Visualization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 3. API, Vector and Raster Data Sources" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# 4. Create Your Own Map" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Code cells\n", + "\n", + "# Imports are always put at the top of the file. They should be on separate lines.\n", + "import some_package\n", + "\n", + "# But this is okay\n", + "from another_package import some_function\n", + "\n", + "# Comments:\n", + "# Use comments sparingly: better to explain in markdown!\n", + "# Use comments to further specify particular lines of code when needed.\n", + "# Comments start with a capital letter, and a space between the hashtag and the first word\n", + "\n", + "# In general ,we follow the PEP style guide: https://peps.python.org/pep-0008/\n", + "\n", + "# Coding style: \n", + "# Use snake case and single quotation marks, unless your string includes single quotation marks.\n", + "# Most operators are surrounded with a single space.\n", + "some_variable = 12\n", + "if some_variable == 10:\n", + " print(\"high\")\n", + "\n", + "# Always use spaces after commas\n", + "some_list = [1, 2, 3, 4]\n", + "\n", + "# Don’t use spaces around the = sign when used to indicate a keyword argument.\n", + "def some_function(a=1, b=2):\n", + "# Use 4 spaces per indentation level\n", + " print(\"something\")\n", + "\n", + "\n", + "# Data: \n", + "# use relevant social science datasets whenever you can. \n", + "# Think health data, demographics, etc.\n", + "# Stay away from \"impersonal\" datasets like the Iris or Penguins dataset.\n", + "# Use the top-level \"data\" folder in the repo to store data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You might want to have an install cell, if your workshop uses a special package\n", + "# e.g.,\n", + "# !pip install [PACKAGE]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You might want to have an import cell, so that you can do all imports at the beginning.\n", + "# e.g.,\n", + "# import numpy as np\n", + "# import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Subsubsection [EDIT ME]\n", + "\n", + "Use H3 headers for subsubsections, in Title Case, following [APA rules](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case). Don't go lower than H3 if you can avoid it." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "
Expandable sections\n", + "Expandable sections like these can be used for hints, or for information that is optional or more advanced, and you do not want to immediately expose to all workshop participants. Use these expandable sections scarcely!\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Section Name [EDIT ME]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "## 🥊 Challenge #: [Name of Challenge]\n", + "\n", + "- Challenges are typically formatted as subsection (##). Title Case applies.\n", + "- Challenges use the 🥊 Boxing Glove emoji in the header.\n", + "- Try to have at least one exercise every 15 minutes of instruction. More is better. A two-hour workshop needs at least **six challenges**.\n", + "- Challenges have names and are numbered. You should reference them in the Solutions file.\n", + "- Plan around 8 minutes for each challenge (including discussion of the solution and questions).\n", + "- Don't use \"Bonus Challenges\" or the like. If really needed, use a \"Take-Home Challenge\" (1 max!) so it's clear these can be completed outside the workshop.\n", + "- Copy filled-in challenges over to a solutions notebook that goes into the \"solutions \"folder. \n", + "\n", + "### *Example:*\n", + "\n", + "## 🥊 Challenge 1: Printing!\n", + "\n", + "Write your own `print()` statement in the code cell below. Follow the syntax of the example above, and change the text in the quotation marks.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You may have some starter code for the challenge that you can put in its own cell.\n", + "# Always have a following cell that says \"YOUR CODE HERE\" with a few empty lines beneath it, \n", + "# so that attendees know where to put their code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# YOUR CODE HERE\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You may also use scaffolding. Use three dots (...) to indicate scaffolding.\n", + "\n", + "def ...:\n", + " # YOUR CODE HERE\n", + " return ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "💡 **Tip**: \n", + "- Tips can be formatted as subsection (##) when they're more substantial.\n", + "- Tips use the 💡 Electric Light Bulb Emoji in the header / at the start of the line, followed by boldface **Tip:**, followed by the tip. \n", + "- Tips are not numbered.\n", + "- Keep them short and to the point.\n", + "- See the Jupyter notebook template for an example.\n", + "\n", + "### *Example:*\n", + "\n", + "💡 **Tip**: A method is written with parenteses: e.g. `gap.value_counts()`. An attribute is written without parentheses: e.g. `gap.columns`.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 💡 Tip: [Name of Tip]\n", + "- Tips can be formatted as subsection (##) when they're more substantial. Title Case applies.\n", + "- Tips use the 💡 Electric Light Bulb Emoji in the header.\n", + "- Tips are not numbered.\n", + "- Keep them short and to the point.\n", + "- See the Jupyter notebook template for an example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "🔔 **Question:** \n", + "- Questions are used without header. \n", + "- Questions use the 🔔 Bell Emoji at the start of the line, followed by boldface **Question:**, followed by the question.\n", + "- Questions are short queries about code or concepts. \n", + "- Questions do not require participants to enter code. \n", + "- Questions can be used as attention checks, and discussed during the workshop.\n", + "- See the Jupyter notebook template for an example.\n", + "\n", + "*Example:*\n", + "\n", + "🔔 **Question**: what will the output of the following code be?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers = [12, 20, 43, 88, 97, 100, 105, 110]\n", + "\n", + "for number in numbers:\n", + " if number > 100:\n", + " print(number, 'is greater than 100.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "📝 **Poll**\n", + "\n", + "- Polls refer to Zoom polls, which can be used as a form of formative assessment.\n", + "- Talk to D-Lab staff if you want to create Zoom polls before adding them in the notebook.\n", + "- Polls use the 📝 memo enoji at the start of the line, followed by boldface **Poll**, followed by the name of the poll.\n", + "- Polls are named with the format {workshop name}{workshop part - poll number}\n", + "- make sure to check if they are **activated** by clicking \"Polls/Quizzes\" in Zoom.\n", + "- Polls are used without header.\n", + "\n", + "### *Example:*\n", + "\n", + "📝 **Poll PyInt 2-2:** Why are only some of the columns in the `DataFrame` visible in the output?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "\n", + "\n", + "# 🎬 Demo: [Title Of Demo]\n", + "\n", + "- Demos can be used at the end of a notebook to show / highlight some advanced functionalities outside the scope of the workshop. \n", + "- Demos are written as main sections (#) that are linked to in the \"Sections\" section. Title Case applies.\n", + "- Demos use the 🎬 Clapper Board Emoji at the start of the header.\n", + "- Demos can used once per notebook.\n", + "- Demos can be used to enthuse participants, and to point them to relevant other D-Lab workshops.\n", + "- Demos are meant to be short: 5-10 mins max.\n", + "\n", + "### *Example:*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "# 🎬 Demo: Working With Data Frames\n", + "\n", + "To cap off this workshop, here's a demo to see what reproducible data science with Python looks like.\n", + "Just run the code cell below, and don't worry if you don't understand everything!\n", + "\n", + "* We'll be using a `pandas` DataFrame to store and manipulate the data - you'll learn more about `pandas` and DataFrames in the next workshop!\n", + "* Our data comes from the California Health Interview Survey (CHIS), the nation's largest state health survey. \n", + "\n", + "Let's have a look at the data:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# Reading in a comma-seperated values file\n", + "chis_df = pd.read_csv('some_file.csv')\n", + "chis_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Looks like we have a bunch of information here. Let's focus on the column for the number of sodas people have per day (the \"number_sodas\" column), and whether people rent or own a house (the \"tenure\" column).\n", + "\n", + "In the next steps, we'll...\n", + "1. change the datatype of a column,\n", + "2. create dummy variables (variables that take values of 0 and 1), and \n", + "3. group our data.\n", + "\n", + "This allows us to calculate the average amount of sodas consumed by people who do and do not own a house." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Changing the data type of a column\n", + "chis_df['number_sodas'] = chis_df['number_sodas'].astype(float)\n", + "\n", + "# Creating dummy variables\n", + "chis_dummies = pd.get_dummies(chis_df, columns=['tenure'])\n", + "\n", + "# Grouping the average number of consumed sodas by people who own a house\n", + "chis_dummies['number_sodas'].groupby(chis_dummies['tenure_OWN']).mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: For more information, see the `style.md` file in the main folder." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "
\n", + "\n", + "## ❗ Key Points\n", + "\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "* EDIT ME. Recap the most useful information in this notebook. Keep it short and use action words. Min 3, max 8.\n", + "\n", + "
" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/lessons/1_Example_Jupyter.ipynb b/lessons/Notebook Template.ipynb similarity index 96% rename from lessons/1_Example_Jupyter.ipynb rename to lessons/Notebook Template.ipynb index 4147c95..80528ec 100644 --- a/lessons/1_Example_Jupyter.ipynb +++ b/lessons/Notebook Template.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Workshop Name: Subtitle [EDIT ME]\n", + "# Python Geospatial Fundamental: Introduction to Geospatial Data\n", "\n", "* * * \n", "\n", @@ -12,9 +12,10 @@ " \n", "### Learning Objectives \n", " \n", - "* EDIT ME. At least 3, max 6, use [learning objective verbs](https://swcarpentry.github.io/swc-releases/2016.06/instructor-training/20-lessons/).\n", - "* EDIT ME. At least 3, max 6, use [learning objective verbs](https://swcarpentry.github.io/swc-releases/2016.06/instructor-training/20-lessons/).\n", - "* EDIT ME. At least 3, max 6, use [learning objective verbs](https://swcarpentry.github.io/swc-releases/2016.06/instructor-training/20-lessons/).\n", + "* Recognize different forms of geospatial data and coordinate reference system (CRS).\n", + "* Use `GeoPandas` and `matplotlib` libraries to map and analyze spatial data.\n", + "* Apply more advanced Python libraries for interactive visualization.\n", + "* Choose domain-specific spatial datasets to create your own maps.\n", "\n", "\n", "### Icons Used in This Notebook\n", @@ -420,7 +421,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -434,7 +435,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/solutions/01_example_jupyter_solutions.ipynb b/solutions/01_example_jupyter_solutions.ipynb index bd51b0b..4f40dfb 100644 --- a/solutions/01_example_jupyter_solutions.ipynb +++ b/solutions/01_example_jupyter_solutions.ipynb @@ -112,7 +112,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.13" + "version": "3.11.5" } }, "nbformat": 4,