Full Code of osmlab/atlas for AI

dev bf5cb903df88 cached
2119 files
47.2 MB
3.7M tokens
12245 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (14,776K chars total). Download the full file to get everything.
Repository: osmlab/atlas
Branch: dev
Commit: bf5cb903df88
Files: 2119
Total size: 47.2 MB

Directory structure:
gitextract_1k5scvdv/

├── .circleci/
│   ├── config.yml
│   └── sonar.sh
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── workflow_data/
│   │   └── secret.gpg.aes256
│   ├── workflow_scripts/
│   │   ├── decrypt_gpg_key.sh
│   │   ├── deploy.sh
│   │   ├── merge-dev-to-main.sh
│   │   ├── sonar.sh
│   │   ├── tag-main.sh
│   │   └── update_project_version.sh
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .travis/
│   ├── build-pyatlas-gate.sh
│   ├── build.sh
│   ├── deploy-gate.sh
│   ├── deploy.sh
│   ├── install.sh
│   ├── merge-dev-to-main-gate.sh
│   ├── merge-dev-to-main.sh
│   ├── secring.gpg.enc
│   ├── sonar-gate.sh
│   ├── sonar.sh
│   ├── tag-main-gate.sh
│   ├── tag-main.sh
│   └── trigger-release.sh
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── atlas-shell-tools/
│   ├── .atlas-shell-tools-integrity-file
│   ├── README.md
│   ├── ast_completions.bash
│   ├── ast_completions.zsh
│   ├── man/
│   │   ├── man1/
│   │   │   ├── atlas-config-activate.1
│   │   │   ├── atlas-config-deactivate.1
│   │   │   ├── atlas-config-install.1
│   │   │   ├── atlas-config-list.1
│   │   │   ├── atlas-config-log.1
│   │   │   ├── atlas-config-preset.1
│   │   │   ├── atlas-config-repo.1
│   │   │   ├── atlas-config-reset.1
│   │   │   ├── atlas-config-sync.1
│   │   │   ├── atlas-config-uninstall.1
│   │   │   ├── atlas-config-update.1
│   │   │   ├── atlas-config.1
│   │   │   └── atlas.1
│   │   ├── man5/
│   │   │   └── atlas-plumbing.5
│   │   └── man7/
│   │       ├── atlas-cli.7
│   │       ├── atlas-cookbook.7
│   │       ├── atlas-environment.7
│   │       ├── atlas-glossary.7
│   │       ├── atlas-presets.7
│   │       └── atlas-shell-tools.7
│   ├── quick_install_bash.sh
│   ├── quick_install_zsh.sh
│   └── scripts/
│       ├── atlas
│       ├── atlas-config
│       └── common/
│           ├── ast_completions.pm
│           ├── ast_log_subsystem.pm
│           ├── ast_module_subsystem.pm
│           ├── ast_preset_subsystem.pm
│           ├── ast_repo_subsystem.pm
│           ├── ast_tty.pm
│           └── ast_utilities.pm
├── build.gradle
├── config/
│   ├── checkstyle/
│   │   ├── arrangement.txt
│   │   ├── checkstyle.xml
│   │   └── suppressions.xml
│   ├── format/
│   │   └── code_format.xml
│   └── log4j/
│       └── log4j.properties
├── dependencies.gradle
├── gradle.properties
├── pyatlas/
│   ├── README.md
│   ├── clean.sh
│   ├── doc/
│   │   └── how_to_get_the_docs.txt
│   ├── format.sh
│   ├── package.sh
│   ├── pyatlas/
│   │   ├── __init__.py
│   │   ├── atlas.py
│   │   ├── atlas_entities.py
│   │   ├── atlas_metadata.py
│   │   ├── autogen/
│   │   │   └── __init__.py
│   │   ├── geometry.py
│   │   ├── identifier_converters.py
│   │   ├── pyatlas_globalfunc.py
│   │   └── spatial_index.py
│   ├── resources/
│   │   ├── CreateTestAtlas.java
│   │   └── test.atlas
│   ├── setup.py
│   ├── style.yapf
│   ├── test.sh
│   ├── unit_tests/
│   │   ├── test_atlas.py
│   │   ├── test_identifier_converters.py
│   │   ├── test_location.py
│   │   ├── test_polygon_converters.py
│   │   ├── test_polyline_polygon.py
│   │   ├── test_rectangle.py
│   │   └── test_spatial_index.py
│   ├── venv.sh
│   └── yapf_format.py
├── sample/
│   ├── Readme.md
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── openstreetmap/
│           │           └── atlas/
│           │               └── sample/
│           │                   └── Sample.java
│           └── resources/
│               └── log4j.properties
├── scripts/
│   └── log4j-atlas/
│       └── log4j.properties
├── settings.gradle
└── src/
    ├── integrationTest/
    │   ├── java/
    │   │   └── org/
    │   │       └── openstreetmap/
    │   │           └── atlas/
    │   │               └── geography/
    │   │                   ├── PolygonPerformanceTest.java
    │   │                   ├── atlas/
    │   │                   │   ├── AtlasIntegrationTest.java
    │   │                   │   ├── SubAtlasIntegrationTest.java
    │   │                   │   ├── builder/
    │   │                   │   │   └── text/
    │   │                   │   │       └── TextAtlasBuilderIntegrationTest.java
    │   │                   │   ├── delta/
    │   │                   │   │   ├── AtlasDeltaGeoJsonIntegrationTest.java
    │   │                   │   │   └── AtlasDeltaIntegrationTest.java
    │   │                   │   ├── dynamic/
    │   │                   │   │   └── DynamicAtlasIntegrationTest.java
    │   │                   │   ├── items/
    │   │                   │   │   ├── AtlasEntityTypeTest.java
    │   │                   │   │   └── complex/
    │   │                   │   │       └── boundaries/
    │   │                   │   │           ├── ComplexBoundariesIntegrationTest.java
    │   │                   │   │           └── ComplexBoundaryIntegrationTestRule.java
    │   │                   │   ├── multi/
    │   │                   │   │   ├── MultiAtlasIntegrationTest.java
    │   │                   │   │   └── MultiAtlasIntegrationTestRule.java
    │   │                   │   ├── packed/
    │   │                   │   │   ├── PackedAtlasClonerIntegrationTest.java
    │   │                   │   │   └── PackedAtlasIntegrationTest.java
    │   │                   │   ├── pbf/
    │   │                   │   │   ├── OsmPbfIngestIntegrationTest.java
    │   │                   │   │   └── slicing/
    │   │                   │   │       └── AtlasSectionProcessorIntegrationTest.java
    │   │                   │   ├── raw/
    │   │                   │   │   ├── DynamicRawAtlasSectioningTestRule.java
    │   │                   │   │   └── RawAtlasIntegrationTest.java
    │   │                   │   └── routing/
    │   │                   │       └── AtlasRoutingIntegrationTest.java
    │   │                   └── boundary/
    │   │                       ├── CountryBoundaryMapArchiverIntegrationTest.java
    │   │                       └── CountryBoundaryMapIntegrationTest.java
    │   └── resources/
    │       └── org/
    │           └── openstreetmap/
    │               └── atlas/
    │                   └── geography/
    │                       ├── atlas/
    │                       │   ├── pbf/
    │                       │   │   ├── BHS-6-18-27.pbf
    │                       │   │   ├── BLZ_raw_08242015.osm.pbf
    │                       │   │   └── CUB_72-111.pbf
    │                       │   └── raw/
    │                       │       ├── 8-122-122-trimmed.osm.pbf
    │                       │       ├── layerIntersectionAtEndBoundaryMap.txt
    │                       │       ├── layerIntersectionAtStartBoundaryMap.txt
    │                       │       ├── layerIntersectionInMiddleBoundaryMap.txt
    │                       │       ├── node-4353689487.pbf
    │                       │       ├── twoWaysWithDifferentLayersIntersectingAtEnd.pbf
    │                       │       ├── twoWaysWithDifferentLayersIntersectingAtStart.pbf
    │                       │       └── twoWaysWithDifferentLayersIntersectingInMiddle.pbf
    │                       └── boundary/
    │                           └── oceanTestBoundary.txt
    ├── main/
    │   ├── java/
    │   │   └── org/
    │   │       └── openstreetmap/
    │   │           └── atlas/
    │   │               ├── event/
    │   │               │   ├── Event.java
    │   │               │   ├── EventService.java
    │   │               │   ├── EventServiceable.java
    │   │               │   ├── Processor.java
    │   │               │   ├── README.md
    │   │               │   └── ShutdownEvent.java
    │   │               ├── exception/
    │   │               │   ├── CoreException.java
    │   │               │   ├── ExceptionSearch.java
    │   │               │   ├── LoadAtlasFromResourceException.java
    │   │               │   └── change/
    │   │               │       ├── FeatureChangeMergeException.java
    │   │               │       └── MergeFailureType.java
    │   │               ├── geography/
    │   │               │   ├── Altitude.java
    │   │               │   ├── CompressedPolyLine.java
    │   │               │   ├── CompressedPolygon.java
    │   │               │   ├── GeometricObject.java
    │   │               │   ├── GeometricSurface.java
    │   │               │   ├── GeometryPrintable.java
    │   │               │   ├── Heading.java
    │   │               │   ├── Latitude.java
    │   │               │   ├── Located.java
    │   │               │   ├── Location.java
    │   │               │   ├── Longitude.java
    │   │               │   ├── MultiPolyLine.java
    │   │               │   ├── MultiPolygon.java
    │   │               │   ├── PolyLine.java
    │   │               │   ├── Polygon.java
    │   │               │   ├── README.md
    │   │               │   ├── Rectangle.java
    │   │               │   ├── Segment.java
    │   │               │   ├── Snapper.java
    │   │               │   ├── StringCompressedPolyLine.java
    │   │               │   ├── StringCompressedPolygon.java
    │   │               │   ├── WkbPrintable.java
    │   │               │   ├── WktPrintable.java
    │   │               │   ├── atlas/
    │   │               │   │   ├── AbstractAtlas.java
    │   │               │   │   ├── Atlas.java
    │   │               │   │   ├── AtlasLoadingCommand.java
    │   │               │   │   ├── AtlasMetaData.java
    │   │               │   │   ├── AtlasResourceLoader.java
    │   │               │   │   ├── BareAtlas.java
    │   │               │   │   ├── Crawler.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── ShardFileOverlapsPolygon.java
    │   │               │   │   ├── builder/
    │   │               │   │   │   ├── AtlasBuilder.java
    │   │               │   │   │   ├── AtlasSize.java
    │   │               │   │   │   ├── GeoJsonAtlasBuilder.java
    │   │               │   │   │   ├── RelationBean.java
    │   │               │   │   │   ├── store/
    │   │               │   │   │   │   ├── AtlasPrimitiveArea.java
    │   │               │   │   │   │   ├── AtlasPrimitiveBigNode.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEdge.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEdgeIdentifier.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEntity.java
    │   │               │   │   │   │   ├── AtlasPrimitiveLineItem.java
    │   │               │   │   │   │   ├── AtlasPrimitiveLocationItem.java
    │   │               │   │   │   │   ├── AtlasPrimitiveObjectStore.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRelation.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRoute.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRouteIdentifier.java
    │   │               │   │   │   │   └── TemporaryObjectStore.java
    │   │               │   │   │   └── text/
    │   │               │   │   │       └── TextAtlasBuilder.java
    │   │               │   │   ├── change/
    │   │               │   │   │   ├── AtlasChangeGenerator.java
    │   │               │   │   │   ├── AtlasEntityKey.java
    │   │               │   │   │   ├── Change.java
    │   │               │   │   │   ├── ChangeArea.java
    │   │               │   │   │   ├── ChangeAtlas.java
    │   │               │   │   │   ├── ChangeBuilder.java
    │   │               │   │   │   ├── ChangeEdge.java
    │   │               │   │   │   ├── ChangeEntity.java
    │   │               │   │   │   ├── ChangeLine.java
    │   │               │   │   │   ├── ChangeNode.java
    │   │               │   │   │   ├── ChangePoint.java
    │   │               │   │   │   ├── ChangeRelation.java
    │   │               │   │   │   ├── ChangeType.java
    │   │               │   │   │   ├── FeatureChange.java
    │   │               │   │   │   ├── FeatureChangeBoundsExpander.java
    │   │               │   │   │   ├── FeatureChangeMergeGroup.java
    │   │               │   │   │   ├── FeatureChangeMergingHelpers.java
    │   │               │   │   │   ├── MemberMergeStrategies.java
    │   │               │   │   │   ├── MemberMerger.java
    │   │               │   │   │   ├── description/
    │   │               │   │   │   │   ├── ChangeDescription.java
    │   │               │   │   │   │   ├── ChangeDescriptorGenerator.java
    │   │               │   │   │   │   ├── ChangeDescriptorType.java
    │   │               │   │   │   │   └── descriptors/
    │   │               │   │   │   │       ├── ChangeDescriptor.java
    │   │               │   │   │   │       ├── ChangeDescriptorComparator.java
    │   │               │   │   │   │       ├── ChangeDescriptorName.java
    │   │               │   │   │   │       ├── GeometricRelationGeometryChangeDescriptor.java
    │   │               │   │   │   │       ├── GeometryChangeDescriptor.java
    │   │               │   │   │   │       ├── LongElementChangeDescriptor.java
    │   │               │   │   │   │       ├── RelationMemberChangeDescriptor.java
    │   │               │   │   │   │       └── TagChangeDescriptor.java
    │   │               │   │   │   ├── diff/
    │   │               │   │   │   │   ├── AtlasDiff.java
    │   │               │   │   │   │   └── AtlasDiffHelper.java
    │   │               │   │   │   ├── eventhandling/
    │   │               │   │   │   │   ├── event/
    │   │               │   │   │   │   │   ├── EntityChangeEvent.java
    │   │               │   │   │   │   │   ├── TagChangeEvent.java
    │   │               │   │   │   │   │   └── consts/
    │   │               │   │   │   │   │       └── FieldChangeOperation.java
    │   │               │   │   │   │   ├── listenable/
    │   │               │   │   │   │   │   ├── EntityChangeListenable.java
    │   │               │   │   │   │   │   └── TagChangeListenable.java
    │   │               │   │   │   │   └── listener/
    │   │               │   │   │   │       ├── EntityChangeListener.java
    │   │               │   │   │   │       └── TagChangeListener.java
    │   │               │   │   │   ├── exception/
    │   │               │   │   │   │   └── EmptyChangeException.java
    │   │               │   │   │   ├── serializer/
    │   │               │   │   │   │   ├── ChangeGeoJsonSerializer.java
    │   │               │   │   │   │   └── FeatureChangeGeoJsonSerializer.java
    │   │               │   │   │   ├── testing/
    │   │               │   │   │   │   ├── AtlasChangeGeneratorAddTurnRestrictions.java
    │   │               │   │   │   │   ├── AtlasChangeGeneratorRemoveReverseEdges.java
    │   │               │   │   │   │   └── AtlasChangeGeneratorSplitRoundabout.java
    │   │               │   │   │   └── validators/
    │   │               │   │   │       └── ChangeValidator.java
    │   │               │   │   ├── changeset/
    │   │               │   │   │   ├── BinaryChangeSetDeserializer.java
    │   │               │   │   │   ├── BinaryChangeSetSerializer.java
    │   │               │   │   │   ├── ChangeAction.java
    │   │               │   │   │   ├── ChangeItem.java
    │   │               │   │   │   ├── ChangeItemMember.java
    │   │               │   │   │   ├── ChangeSet.java
    │   │               │   │   │   ├── ChangeSetAtlasBuilder.java
    │   │               │   │   │   ├── ChangeSetDeserializer.java
    │   │               │   │   │   ├── ChangeSetSerializer.java
    │   │               │   │   │   ├── GeoJSONChangeSetSerializer.java
    │   │               │   │   │   ├── MutableChangeItem.java
    │   │               │   │   │   ├── SimpleChangeItem.java
    │   │               │   │   │   ├── SimpleChangeItemMember.java
    │   │               │   │   │   └── SimpleChangeSet.java
    │   │               │   │   ├── command/
    │   │               │   │   │   ├── AbstractAtlasOutputTestSubCommand.java
    │   │               │   │   │   ├── AbstractAtlasSubCommand.java
    │   │               │   │   │   ├── AtlasCommandConstants.java
    │   │               │   │   │   ├── AtlasCountriesSubCommand.java
    │   │               │   │   │   ├── AtlasFeatureCountsSubCommand.java
    │   │               │   │   │   ├── AtlasFindByAtlasIdentifierSubCommand.java
    │   │               │   │   │   ├── AtlasFindByFeatureIdentifierLocatorSubCommand.java
    │   │               │   │   │   ├── AtlasFindEntitiesByIdSubCommand.java
    │   │               │   │   │   ├── AtlasGeoJSONSubCommand.java
    │   │               │   │   │   ├── AtlasItemsWithSharedShapepointsSubCommand.java
    │   │               │   │   │   ├── AtlasJoinerSubCommand.java
    │   │               │   │   │   ├── AtlasListRestrictedPathsCommand.java
    │   │               │   │   │   ├── AtlasListValidTurnRestrictionIds.java
    │   │               │   │   │   ├── AtlasMetadataSubCommand.java
    │   │               │   │   │   ├── AtlasMissingISOSubCommand.java
    │   │               │   │   │   ├── AtlasReader.java
    │   │               │   │   │   ├── AtlasResourceLoaderErrorSubCommand.java
    │   │               │   │   │   ├── AtlasSplitterWithSlippyTileCommand.java
    │   │               │   │   │   ├── FerrySearchSubCommand.java
    │   │               │   │   │   ├── OsmPbfToAtlasSubCommand.java
    │   │               │   │   │   ├── PackedToTextAtlasSubCommand.java
    │   │               │   │   │   ├── SubAtlasSubCommand.java
    │   │               │   │   │   ├── TextToPackedAtlasSubCommand.java
    │   │               │   │   │   └── buildings/
    │   │               │   │   │       ├── AtlasFindBuildingPartsSubCommand.java
    │   │               │   │   │       ├── BuildingsWithHeightSearchSubCommand.java
    │   │               │   │   │       └── TinyBuildingsSearchSubCommand.java
    │   │               │   │   ├── complete/
    │   │               │   │   │   ├── CompleteArea.java
    │   │               │   │   │   ├── CompleteEdge.java
    │   │               │   │   │   ├── CompleteEntity.java
    │   │               │   │   │   ├── CompleteItemType.java
    │   │               │   │   │   ├── CompleteLine.java
    │   │               │   │   │   ├── CompleteLineItem.java
    │   │               │   │   │   ├── CompleteLocationItem.java
    │   │               │   │   │   ├── CompleteNode.java
    │   │               │   │   │   ├── CompletePoint.java
    │   │               │   │   │   ├── CompleteRelation.java
    │   │               │   │   │   ├── EmptyAtlas.java
    │   │               │   │   │   ├── PrettifyStringFormat.java
    │   │               │   │   │   └── TagChangeDelegate.java
    │   │               │   │   ├── converters/
    │   │               │   │   │   └── AtlasDebugTool.java
    │   │               │   │   ├── delta/
    │   │               │   │   │   ├── AtlasDelta.java
    │   │               │   │   │   ├── AtlasDeltaGenerator.java
    │   │               │   │   │   ├── Diff.java
    │   │               │   │   │   └── README.md
    │   │               │   │   ├── dynamic/
    │   │               │   │   │   ├── DynamicArea.java
    │   │               │   │   │   ├── DynamicAtlas.java
    │   │               │   │   │   ├── DynamicAtlasExpander.java
    │   │               │   │   │   ├── DynamicEdge.java
    │   │               │   │   │   ├── DynamicLine.java
    │   │               │   │   │   ├── DynamicNode.java
    │   │               │   │   │   ├── DynamicPoint.java
    │   │               │   │   │   ├── DynamicRelation.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   └── policy/
    │   │               │   │   │       ├── DynamicAtlasPolicy.java
    │   │               │   │   │       └── DynamicAtlasResourcePolicy.java
    │   │               │   │   ├── exception/
    │   │               │   │   │   └── AtlasIntegrityException.java
    │   │               │   │   ├── geojson/
    │   │               │   │   │   ├── AtlasGeoJsonConverter.java
    │   │               │   │   │   └── LineDelimitedGeoJsonConverter.java
    │   │               │   │   ├── inspection/
    │   │               │   │   │   └── EntityClassifier.java
    │   │               │   │   ├── items/
    │   │               │   │   │   ├── Area.java
    │   │               │   │   │   ├── AtlasEntity.java
    │   │               │   │   │   ├── AtlasItem.java
    │   │               │   │   │   ├── AtlasObject.java
    │   │               │   │   │   ├── ConnectedEdgeType.java
    │   │               │   │   │   ├── ConnectedEntityType.java
    │   │               │   │   │   ├── ConnectedNodeType.java
    │   │               │   │   │   ├── DiffViewFriendlyItem.java
    │   │               │   │   │   ├── DirectionalizedEdge.java
    │   │               │   │   │   ├── Edge.java
    │   │               │   │   │   ├── ItemType.java
    │   │               │   │   │   ├── Line.java
    │   │               │   │   │   ├── LineItem.java
    │   │               │   │   │   ├── LocationItem.java
    │   │               │   │   │   ├── Node.java
    │   │               │   │   │   ├── Point.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   ├── Relation.java
    │   │               │   │   │   ├── RelationMember.java
    │   │               │   │   │   ├── RelationMemberList.java
    │   │               │   │   │   ├── Route.java
    │   │               │   │   │   ├── SnappedEdge.java
    │   │               │   │   │   ├── SnappedLineItem.java
    │   │               │   │   │   ├── TurnRestriction.java
    │   │               │   │   │   └── complex/
    │   │               │   │   │       ├── ComplexEntity.java
    │   │               │   │   │       ├── Finder.java
    │   │               │   │   │       ├── MultiPolygonRelationToMemberConverter.java
    │   │               │   │   │       ├── README.md
    │   │               │   │   │       ├── RelationOrAreaToMultiPolygonConverter.java
    │   │               │   │   │       ├── RelationToMultiPolygonMemberConverter.java
    │   │               │   │   │       ├── WaterIslandConfigurationReader.java
    │   │               │   │   │       ├── aoi/
    │   │               │   │   │       │   ├── ComplexAreaOfInterest.java
    │   │               │   │   │       │   └── ComplexAreaOfInterestFinder.java
    │   │               │   │   │       ├── bignode/
    │   │               │   │   │       │   ├── BigNode.java
    │   │               │   │   │       │   ├── BigNodeFinder.java
    │   │               │   │   │       │   ├── README.md
    │   │               │   │   │       │   ├── RestrictedPath.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       ├── AtlasBigNodeRestrictedPathToGeoJsonConverter.java
    │   │               │   │   │       │       └── AtlasBigNodesToGeoJsonConverter.java
    │   │               │   │   │       ├── boundaries/
    │   │               │   │   │       │   ├── ComplexBoundary.java
    │   │               │   │   │       │   ├── ComplexBoundaryFinder.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── ComplexBoundaryIterableToGeoJsonWriter.java
    │   │               │   │   │       ├── buildings/
    │   │               │   │   │       │   ├── BuildingPart.java
    │   │               │   │   │       │   ├── ComplexBuilding.java
    │   │               │   │   │       │   ├── ComplexBuildingFinder.java
    │   │               │   │   │       │   ├── HeightConverter.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── ComplexBuildingToGeojsonConverter.java
    │   │               │   │   │       ├── highwayarea/
    │   │               │   │   │       │   ├── ComplexHighwayArea.java
    │   │               │   │   │       │   ├── ComplexHighwayAreaFinder.java
    │   │               │   │   │       │   └── ComplexHighwayAreaHelper.java
    │   │               │   │   │       ├── islands/
    │   │               │   │   │       │   ├── ComplexIsland.java
    │   │               │   │   │       │   ├── ComplexIslandFinder.java
    │   │               │   │   │       │   └── DefaultIslandConfigurationReader.java
    │   │               │   │   │       ├── landcover/
    │   │               │   │   │       │   ├── ComplexLandCover.java
    │   │               │   │   │       │   └── ComplexLandCoverFinder.java
    │   │               │   │   │       ├── restriction/
    │   │               │   │   │       │   ├── ComplexTurnRestriction.java
    │   │               │   │   │       │   ├── ComplexTurnRestrictionFinder.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── AtlasTurnRestrictionsToGeoJsonConverter.java
    │   │               │   │   │       ├── roundabout/
    │   │               │   │   │       │   ├── ComplexRoundabout.java
    │   │               │   │   │       │   └── ComplexRoundaboutFinder.java
    │   │               │   │   │       └── water/
    │   │               │   │   │           ├── ComplexWaterEntity.java
    │   │               │   │   │           ├── ComplexWaterbody.java
    │   │               │   │   │           ├── ComplexWaterway.java
    │   │               │   │   │           ├── WaterType.java
    │   │               │   │   │           └── finder/
    │   │               │   │   │               ├── ComplexWaterEntityFinder.java
    │   │               │   │   │               ├── DefaultWaterConfigurationReader.java
    │   │               │   │   │               └── WaterConfigurationReader.java
    │   │               │   │   ├── lightweight/
    │   │               │   │   │   ├── LightArea.java
    │   │               │   │   │   ├── LightEdge.java
    │   │               │   │   │   ├── LightEntity.java
    │   │               │   │   │   ├── LightLine.java
    │   │               │   │   │   ├── LightLineItem.java
    │   │               │   │   │   ├── LightLocationItem.java
    │   │               │   │   │   ├── LightNode.java
    │   │               │   │   │   ├── LightPoint.java
    │   │               │   │   │   └── LightRelation.java
    │   │               │   │   ├── multi/
    │   │               │   │   │   ├── MultiArea.java
    │   │               │   │   │   ├── MultiAtlas.java
    │   │               │   │   │   ├── MultiAtlasLoaderCommand.java
    │   │               │   │   │   ├── MultiAtlasOverlappingNodesFixer.java
    │   │               │   │   │   ├── MultiEdge.java
    │   │               │   │   │   ├── MultiLine.java
    │   │               │   │   │   ├── MultiNode.java
    │   │               │   │   │   ├── MultiPoint.java
    │   │               │   │   │   ├── MultiRelation.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   ├── SubAreaList.java
    │   │               │   │   │   ├── SubEdgeList.java
    │   │               │   │   │   ├── SubLineList.java
    │   │               │   │   │   ├── SubNodeList.java
    │   │               │   │   │   ├── SubPointList.java
    │   │               │   │   │   └── SubRelationList.java
    │   │               │   │   ├── packed/
    │   │               │   │   │   ├── PackedArea.java
    │   │               │   │   │   ├── PackedAtlas.java
    │   │               │   │   │   ├── PackedAtlasBuilder.java
    │   │               │   │   │   ├── PackedAtlasCloner.java
    │   │               │   │   │   ├── PackedAtlasLogMessages.java
    │   │               │   │   │   ├── PackedAtlasSerializer.java
    │   │               │   │   │   ├── PackedEdge.java
    │   │               │   │   │   ├── PackedLine.java
    │   │               │   │   │   ├── PackedNode.java
    │   │               │   │   │   ├── PackedPoint.java
    │   │               │   │   │   ├── PackedRelation.java
    │   │               │   │   │   ├── PackedTagStore.java
    │   │               │   │   │   └── README.md
    │   │               │   │   ├── pbf/
    │   │               │   │   │   ├── AtlasLoadingOption.java
    │   │               │   │   │   ├── BridgeConfiguredFilter.java
    │   │               │   │   │   ├── CloseableOsmosisReader.java
    │   │               │   │   │   ├── converters/
    │   │               │   │   │   │   └── TagMapToTagCollectionConverter.java
    │   │               │   │   │   └── slicing/
    │   │               │   │   │       └── identifier/
    │   │               │   │   │           ├── AbstractIdentifierFactory.java
    │   │               │   │   │           ├── CountrySlicingIdentifierFactory.java
    │   │               │   │   │           ├── PaddingIdentifierFactory.java
    │   │               │   │   │           ├── PointIdentifierFactory.java
    │   │               │   │   │           ├── ReverseIdentifierFactory.java
    │   │               │   │   │           └── WaySectionIdentifierFactory.java
    │   │               │   │   ├── raw/
    │   │               │   │   │   ├── creation/
    │   │               │   │   │   │   ├── OsmPbfCounter.java
    │   │               │   │   │   │   ├── OsmPbfReader.java
    │   │               │   │   │   │   ├── README.md
    │   │               │   │   │   │   ├── RawAtlasGenerator.java
    │   │               │   │   │   │   └── RawAtlasStatistic.java
    │   │               │   │   │   ├── sectioning/
    │   │               │   │   │   │   ├── AtlasSectionProcessor.java
    │   │               │   │   │   │   ├── PbfOneWay.java
    │   │               │   │   │   │   ├── README.md
    │   │               │   │   │   │   └── TagMap.java
    │   │               │   │   │   └── slicing/
    │   │               │   │   │       ├── CountryCodeProperties.java
    │   │               │   │   │       ├── README.md
    │   │               │   │   │       └── RawAtlasSlicer.java
    │   │               │   │   ├── routing/
    │   │               │   │   │   ├── AStarRouter.java
    │   │               │   │   │   ├── AbstractRouter.java
    │   │               │   │   │   ├── AllPathsRouter.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   └── Router.java
    │   │               │   │   ├── statistics/
    │   │               │   │   │   ├── AtlasStatistics.java
    │   │               │   │   │   ├── AtlasStatisticsMerger.java
    │   │               │   │   │   ├── Counter.java
    │   │               │   │   │   └── coverage/
    │   │               │   │   │       ├── Coverage.java
    │   │               │   │   │       ├── area/
    │   │               │   │   │       │   ├── AreaCoverage.java
    │   │               │   │   │       │   ├── LakeAreaCoverage.java
    │   │               │   │   │       │   └── RiverAreaCoverage.java
    │   │               │   │   │       ├── linear/
    │   │               │   │   │       │   ├── BusRouteLinearCoverage.java
    │   │               │   │   │       │   ├── LinearCoverage.java
    │   │               │   │   │       │   ├── edge/
    │   │               │   │   │       │   │   ├── AllHighwayTagEdgeCoverage.java
    │   │               │   │   │       │   │   ├── BridgeEdgeCoverage.java
    │   │               │   │   │       │   │   ├── EdgeCoverage.java
    │   │               │   │   │       │   │   ├── FerryEdgeCoverage.java
    │   │               │   │   │       │   │   ├── FreshnessEdgeCoverage.java
    │   │               │   │   │       │   │   ├── LanesEdgeCoverage.java
    │   │               │   │   │       │   │   ├── NameEdgeCoverage.java
    │   │               │   │   │       │   │   ├── NoNameEdgeCoverage.java
    │   │               │   │   │       │   │   ├── OneWayEdgeCoverage.java
    │   │               │   │   │       │   │   ├── PrivateAccessEdgeCoverage.java
    │   │               │   │   │       │   │   ├── ReferenceEdgeCoverage.java
    │   │               │   │   │       │   │   ├── SpeedLimitEdgeCoverage.java
    │   │               │   │   │       │   │   ├── SurfaceEdgeCoverage.java
    │   │               │   │   │       │   │   ├── TollEdgeCoverage.java
    │   │               │   │   │       │   │   └── TunnelEdgeCoverage.java
    │   │               │   │   │       │   └── line/
    │   │               │   │   │       │       ├── LineCoverage.java
    │   │               │   │   │       │       ├── RailLineCoverage.java
    │   │               │   │   │       │       ├── RiverLineCoverage.java
    │   │               │   │   │       │       └── TransitRailLineCoverage.java
    │   │               │   │   │       ├── poi/
    │   │               │   │   │       │   ├── EdgesCountCoverage.java
    │   │               │   │   │       │   ├── LastUserNameCountCoverage.java
    │   │               │   │   │       │   ├── OneWayEdgesCountCoverage.java
    │   │               │   │   │       │   └── SimpleCoverage.java
    │   │               │   │   │       └── weird/
    │   │               │   │   │           └── NodesPerLength.java
    │   │               │   │   ├── sub/
    │   │               │   │   │   ├── AtlasCutType.java
    │   │               │   │   │   └── SubAtlasCreator.java
    │   │               │   │   ├── validators/
    │   │               │   │   │   ├── AtlasEdgeValidator.java
    │   │               │   │   │   ├── AtlasLineItemValidator.java
    │   │               │   │   │   ├── AtlasLocationItemValidator.java
    │   │               │   │   │   ├── AtlasNodeValidator.java
    │   │               │   │   │   ├── AtlasRelationValidator.java
    │   │               │   │   │   ├── AtlasValidator.java
    │   │               │   │   │   └── FeatureChangeUsefulnessValidator.java
    │   │               │   │   └── walker/
    │   │               │   │       ├── EdgeWalker.java
    │   │               │   │       ├── OsmWayWalker.java
    │   │               │   │       └── SimpleEdgeWalker.java
    │   │               │   ├── boundary/
    │   │               │   │   ├── CountryBoundaryMap.java
    │   │               │   │   ├── CountryBoundaryMapArchiver.java
    │   │               │   │   ├── CountryBoundaryMapCompareCommand.java
    │   │               │   │   ├── CountryBoundaryMapFiller.java
    │   │               │   │   ├── CountryCodeGenerator.java
    │   │               │   │   ├── CountryShardListing.java
    │   │               │   │   ├── CountryShardListingProcessor.java
    │   │               │   │   ├── CountryToShardListCache.java
    │   │               │   │   ├── CountryToShardListing.java
    │   │               │   │   ├── README.md
    │   │               │   │   └── converters/
    │   │               │   │       ├── CountryBoundaryMapGeoJsonConverter.java
    │   │               │   │       └── CountryListTwoWayStringConverter.java
    │   │               │   ├── clipping/
    │   │               │   │   ├── Clip.java
    │   │               │   │   ├── GeometryOperation.java
    │   │               │   │   ├── MultiPolygonClipper.java
    │   │               │   │   ├── PolygonClipper.java
    │   │               │   │   └── README.md
    │   │               │   ├── constants/
    │   │               │   │   └── WorldGeodeticStandardConstants.java
    │   │               │   ├── converters/
    │   │               │   │   ├── GeodeticEarthCenteredEarthFixedConverter.java
    │   │               │   │   ├── MultiPolygonStringConverter.java
    │   │               │   │   ├── MultiplePolyLineToMultiPolygonConverter.java
    │   │               │   │   ├── MultiplePolyLineToPolygonsConverter.java
    │   │               │   │   ├── MultiplePolyLineToPolygonsConverterCommand.java
    │   │               │   │   ├── PolyLineStringConverter.java
    │   │               │   │   ├── PolygonStringConverter.java
    │   │               │   │   ├── PolygonStringFormat.java
    │   │               │   │   ├── WkMultiPolygonConverter.java
    │   │               │   │   ├── WkbLocationConverter.java
    │   │               │   │   ├── WkbMultiPolyLineConverter.java
    │   │               │   │   ├── WkbMultiPolygonConverter.java
    │   │               │   │   ├── WkbPolyLineConverter.java
    │   │               │   │   ├── WkbPolygonConverter.java
    │   │               │   │   ├── WktLocationConverter.java
    │   │               │   │   ├── WktMultiPolyLineConverter.java
    │   │               │   │   ├── WktMultiPolygonConverter.java
    │   │               │   │   ├── WktPolyLineConverter.java
    │   │               │   │   ├── WktPolygonConverter.java
    │   │               │   │   └── jts/
    │   │               │   │       ├── GeometryStreamer.java
    │   │               │   │       ├── JtsCoordinateArrayConverter.java
    │   │               │   │       ├── JtsLinearRingConverter.java
    │   │               │   │       ├── JtsLocationConverter.java
    │   │               │   │       ├── JtsMultiPolyLineConverter.java
    │   │               │   │       ├── JtsMultiPolygonConverter.java
    │   │               │   │       ├── JtsMultiPolygonToMultiLineStringConverter.java
    │   │               │   │       ├── JtsMultiPolygonToMultiPolygonConverter.java
    │   │               │   │       ├── JtsPointConverter.java
    │   │               │   │       ├── JtsPolyLineConverter.java
    │   │               │   │       ├── JtsPolygonConverter.java
    │   │               │   │       ├── JtsPolygonToMultiPolygonConverter.java
    │   │               │   │       ├── JtsPrecisionManager.java
    │   │               │   │       └── JtsUtility.java
    │   │               │   ├── coordinates/
    │   │               │   │   ├── EarthCenteredEarthFixedCoordinate.java
    │   │               │   │   └── GeodeticCoordinate.java
    │   │               │   ├── geojson/
    │   │               │   │   ├── ConcatenateGeoJsonCommand.java
    │   │               │   │   ├── GeoJson.java
    │   │               │   │   ├── GeoJsonBuilder.java
    │   │               │   │   ├── GeoJsonCollection.java
    │   │               │   │   ├── GeoJsonConstants.java
    │   │               │   │   ├── GeoJsonFeature.java
    │   │               │   │   ├── GeoJsonFeatureCollection.java
    │   │               │   │   ├── GeoJsonGeometry.java
    │   │               │   │   ├── GeoJsonObject.java
    │   │               │   │   ├── GeoJsonProperties.java
    │   │               │   │   ├── GeoJsonSaver.java
    │   │               │   │   ├── GeoJsonType.java
    │   │               │   │   ├── GeoJsonUtils.java
    │   │               │   │   ├── GeojsonGeometryCollection.java
    │   │               │   │   └── parser/
    │   │               │   │       ├── GeoJsonParser.java
    │   │               │   │       ├── README.md
    │   │               │   │       ├── domain/
    │   │               │   │       │   ├── annotation/
    │   │               │   │       │   │   └── Foreign.java
    │   │               │   │       │   ├── base/
    │   │               │   │       │   │   ├── AbstractGeoJsonItem.java
    │   │               │   │       │   │   ├── GeoJsonItem.java
    │   │               │   │       │   │   └── type/
    │   │               │   │       │   │       ├── FeatureType.java
    │   │               │   │       │   │       ├── GeometryType.java
    │   │               │   │       │   │       ├── Type.java
    │   │               │   │       │   │       └── TypeUtil.java
    │   │               │   │       │   ├── bbox/
    │   │               │   │       │   │   ├── AbstractBbox.java
    │   │               │   │       │   │   ├── Bbox.java
    │   │               │   │       │   │   ├── Bbox2D.java
    │   │               │   │       │   │   ├── Bbox3D.java
    │   │               │   │       │   │   └── Dimensions.java
    │   │               │   │       │   ├── feature/
    │   │               │   │       │   │   ├── AbstractFeature.java
    │   │               │   │       │   │   ├── Feature.java
    │   │               │   │       │   │   └── FeatureCollection.java
    │   │               │   │       │   ├── foreign/
    │   │               │   │       │   │   ├── DefaultForeignFieldsImpl.java
    │   │               │   │       │   │   ├── ForeignFields.java
    │   │               │   │       │   │   └── SupportsForeigners.java
    │   │               │   │       │   ├── geometry/
    │   │               │   │       │   │   ├── AbstractGeometry.java
    │   │               │   │       │   │   ├── AbstractGeometryWithCoordinateSupport.java
    │   │               │   │       │   │   ├── Geometry.java
    │   │               │   │       │   │   ├── GeometryCollection.java
    │   │               │   │       │   │   ├── GeometryWithCoordinates.java
    │   │               │   │       │   │   ├── LineString.java
    │   │               │   │       │   │   ├── MultiLineString.java
    │   │               │   │       │   │   ├── MultiPoint.java
    │   │               │   │       │   │   ├── MultiPolygon.java
    │   │               │   │       │   │   ├── Point.java
    │   │               │   │       │   │   ├── Polygon.java
    │   │               │   │       │   │   └── coordinate/
    │   │               │   │       │   │       ├── Coordinates.java
    │   │               │   │       │   │       ├── Position.java
    │   │               │   │       │   │       └── Positions.java
    │   │               │   │       │   └── properties/
    │   │               │   │       │       ├── Properties.java
    │   │               │   │       │       └── ext/
    │   │               │   │       │           └── change/
    │   │               │   │       │               ├── Description.java
    │   │               │   │       │               ├── Descriptor.java
    │   │               │   │       │               └── FeatureChangeProperties.java
    │   │               │   │       ├── impl/
    │   │               │   │       │   └── jackson/
    │   │               │   │       │       └── GeoJsonParserJacksonImpl.java
    │   │               │   │       └── mapper/
    │   │               │   │           ├── Mapper.java
    │   │               │   │           └── impl/
    │   │               │   │               └── DefaultBeanUtilsBasedMapperImpl.java
    │   │               │   ├── index/
    │   │               │   │   ├── JtsSpatialIndex.java
    │   │               │   │   ├── PackedSpatialIndex.java
    │   │               │   │   ├── QuadTree.java
    │   │               │   │   ├── RTree.java
    │   │               │   │   └── SpatialIndex.java
    │   │               │   ├── matching/
    │   │               │   │   ├── PolyLineMatch.java
    │   │               │   │   └── PolyLineRoute.java
    │   │               │   └── sharding/
    │   │               │       ├── CountryShard.java
    │   │               │       ├── DynamicTileSharding.java
    │   │               │       ├── GeoHashSharding.java
    │   │               │       ├── GeoHashTile.java
    │   │               │       ├── GeoHashTileIterable.java
    │   │               │       ├── LocationToShardCommand.java
    │   │               │       ├── README.md
    │   │               │       ├── Shard.java
    │   │               │       ├── Sharding.java
    │   │               │       ├── SlippyTile.java
    │   │               │       ├── SlippyTileSharding.java
    │   │               │       ├── converters/
    │   │               │       │   ├── DynamicTileShardingGeoJsonConverter.java
    │   │               │       │   ├── RectangleToSpatial4JRectangleConverter.java
    │   │               │       │   ├── SlippyTileConverter.java
    │   │               │       │   └── StringToShardConverter.java
    │   │               │       └── preparation/
    │   │               │           ├── TilePrinter.java
    │   │               │           ├── tileDownload.sh
    │   │               │           ├── tileExecute.sh
    │   │               │           └── tilePrinter.sh
    │   │               ├── locale/
    │   │               │   ├── IsoCountry.java
    │   │               │   ├── IsoCountryFuzzyMatcher.java
    │   │               │   └── IsoLanguage.java
    │   │               ├── proto/
    │   │               │   ├── ProtoSerializable.java
    │   │               │   ├── adapters/
    │   │               │   │   ├── ProtoAdapter.java
    │   │               │   │   ├── ProtoAtlasMetaDataAdapter.java
    │   │               │   │   ├── ProtoByteArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoIntegerArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoIntegerStringDictionaryAdapter.java
    │   │               │   │   ├── ProtoLongArrayAdapter.java
    │   │               │   │   ├── ProtoLongArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoLongToLongMapAdapter.java
    │   │               │   │   ├── ProtoLongToLongMultiMapAdapter.java
    │   │               │   │   ├── ProtoPackedTagStoreAdapter.java
    │   │               │   │   ├── ProtoPolyLineArrayAdapter.java
    │   │               │   │   └── ProtoPolygonArrayAdapter.java
    │   │               │   ├── builder/
    │   │               │   │   └── ProtoAtlasBuilder.java
    │   │               │   ├── command/
    │   │               │   │   ├── PackedToProtoAtlasSubCommand.java
    │   │               │   │   └── ProtoToPackedAtlasSubCommand.java
    │   │               │   └── converters/
    │   │               │       ├── ProtoIntegerArrayOfArraysConverter.java
    │   │               │       ├── ProtoLocationConverter.java
    │   │               │       └── ProtoTagListConverter.java
    │   │               ├── streaming/
    │   │               │   ├── CounterOutputStream.java
    │   │               │   ├── NotifyingIOUtils.java
    │   │               │   ├── SplittableInputStream.java
    │   │               │   ├── Streams.java
    │   │               │   ├── StringInputStream.java
    │   │               │   ├── StringOutputStream.java
    │   │               │   ├── compression/
    │   │               │   │   ├── Compressor.java
    │   │               │   │   └── Decompressor.java
    │   │               │   ├── readers/
    │   │               │   │   ├── CsvLine.java
    │   │               │   │   ├── CsvReader.java
    │   │               │   │   ├── CsvSchema.java
    │   │               │   │   ├── GeoJsonReader.java
    │   │               │   │   ├── csv/
    │   │               │   │   │   └── converters/
    │   │               │   │   │       └── CsvLineConverter.java
    │   │               │   │   └── json/
    │   │               │   │       ├── converters/
    │   │               │   │       │   ├── MultiPolyLineCoordinateConverter.java
    │   │               │   │       │   ├── MultiPolygonCoordinateConverter.java
    │   │               │   │       │   ├── PointCoordinateConverter.java
    │   │               │   │       │   ├── PolyLineCoordinateConverter.java
    │   │               │   │       │   └── PolygonCoordinateConverter.java
    │   │               │   │       ├── deserializers/
    │   │               │   │       │   ├── LocatedDeserializer.java
    │   │               │   │       │   ├── LocationDeserializer.java
    │   │               │   │       │   ├── MultiPolyLineDeserializer.java
    │   │               │   │       │   ├── MultiPolygonDeserializer.java
    │   │               │   │       │   ├── PolyLineDeserializer.java
    │   │               │   │       │   └── PolygonDeserializer.java
    │   │               │   │       └── serializers/
    │   │               │   │           ├── LocationSerializer.java
    │   │               │   │           ├── MultiLocationSerializer.java
    │   │               │   │           ├── PolyLineSerializer.java
    │   │               │   │           ├── PolygonSerializer.java
    │   │               │   │           └── PropertiesLocated.java
    │   │               │   ├── resource/
    │   │               │   │   ├── AbstractResource.java
    │   │               │   │   ├── AbstractWritableResource.java
    │   │               │   │   ├── ByteArrayResource.java
    │   │               │   │   ├── ClassResource.java
    │   │               │   │   ├── File.java
    │   │               │   │   ├── FileSuffix.java
    │   │               │   │   ├── GeoJsonFile.java
    │   │               │   │   ├── InputStreamResource.java
    │   │               │   │   ├── InputStreamResourceCloseable.java
    │   │               │   │   ├── LineFilteredResource.java
    │   │               │   │   ├── LineWriter.java
    │   │               │   │   ├── OutputStreamWritableResource.java
    │   │               │   │   ├── OutputStreamWritableResourceCloseable.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── Resource.java
    │   │               │   │   ├── ResourceCloseable.java
    │   │               │   │   ├── StreamOfResourceStreams.java
    │   │               │   │   ├── StringResource.java
    │   │               │   │   ├── TemporaryFile.java
    │   │               │   │   ├── WritableResource.java
    │   │               │   │   ├── WritableResourceCloseable.java
    │   │               │   │   ├── http/
    │   │               │   │   │   ├── DeleteResource.java
    │   │               │   │   │   ├── GetResource.java
    │   │               │   │   │   ├── HttpResource.java
    │   │               │   │   │   ├── PostResource.java
    │   │               │   │   │   └── PutResource.java
    │   │               │   │   └── zip/
    │   │               │   │       ├── ZipFileWritableResource.java
    │   │               │   │       ├── ZipResource.java
    │   │               │   │       └── ZipWritableResource.java
    │   │               │   └── writers/
    │   │               │       ├── JsonWriter.java
    │   │               │       └── SafeBufferedWriter.java
    │   │               ├── tags/
    │   │               │   ├── AbandonedAerowayTag.java
    │   │               │   ├── AbandonedAmenityTag.java
    │   │               │   ├── AbandonedArtworkTypeTag.java
    │   │               │   ├── AccessTag.java
    │   │               │   ├── AddressCityTag.java
    │   │               │   ├── AddressCountryTag.java
    │   │               │   ├── AddressFlatsTag.java
    │   │               │   ├── AddressFullTag.java
    │   │               │   ├── AddressHousenameTag.java
    │   │               │   ├── AddressHousenumberTag.java
    │   │               │   ├── AddressInterpolationTag.java
    │   │               │   ├── AddressPlaceTag.java
    │   │               │   ├── AddressPostcodeTag.java
    │   │               │   ├── AddressProvinceTag.java
    │   │               │   ├── AddressStateTag.java
    │   │               │   ├── AddressStreetTag.java
    │   │               │   ├── AdministrativeLevelTag.java
    │   │               │   ├── AerialWayTag.java
    │   │               │   ├── AerowayTag.java
    │   │               │   ├── AmenityTag.java
    │   │               │   ├── AreaTag.java
    │   │               │   ├── ArtworkTypeTag.java
    │   │               │   ├── AtlasTag.java
    │   │               │   ├── BarrierTag.java
    │   │               │   ├── BicycleTag.java
    │   │               │   ├── BoundaryTag.java
    │   │               │   ├── BrandTag.java
    │   │               │   ├── BreakfastTag.java
    │   │               │   ├── BridgeTag.java
    │   │               │   ├── BuildingHeightTag.java
    │   │               │   ├── BuildingLevelsTag.java
    │   │               │   ├── BuildingMinLevelTag.java
    │   │               │   ├── BuildingPartTag.java
    │   │               │   ├── BuildingRoofTag.java
    │   │               │   ├── BuildingTag.java
    │   │               │   ├── CheckDateTag.java
    │   │               │   ├── ConstructionDateTag.java
    │   │               │   ├── ConstructionTag.java
    │   │               │   ├── ContactDiasporaTag.java
    │   │               │   ├── ContactEmailTag.java
    │   │               │   ├── ContactFacebookTag.java
    │   │               │   ├── ContactFaxTag.java
    │   │               │   ├── ContactGooglePlusTag.java
    │   │               │   ├── ContactInstagramTag.java
    │   │               │   ├── ContactLinkedInTag.java
    │   │               │   ├── ContactMobileTag.java
    │   │               │   ├── ContactPhoneTag.java
    │   │               │   ├── ContactTwitterTag.java
    │   │               │   ├── ContactWebsiteTag.java
    │   │               │   ├── ContactXingTag.java
    │   │               │   ├── CoveredTag.java
    │   │               │   ├── CuisineTag.java
    │   │               │   ├── CyclewayLaneTag.java
    │   │               │   ├── CyclewayLeftTag.java
    │   │               │   ├── CyclewayRightTag.java
    │   │               │   ├── CyclewayTag.java
    │   │               │   ├── DestinationForwardTag.java
    │   │               │   ├── DestinationIntRefTag.java
    │   │               │   ├── DestinationRefTag.java
    │   │               │   ├── DestinationRefToTag.java
    │   │               │   ├── DestinationStreetTag.java
    │   │               │   ├── DestinationTag.java
    │   │               │   ├── DirectionTag.java
    │   │               │   ├── DisusedRailwayTag.java
    │   │               │   ├── DisusedShopTag.java
    │   │               │   ├── ElevationTag.java
    │   │               │   ├── EmbankmentTag.java
    │   │               │   ├── EntranceTag.java
    │   │               │   ├── EstimatedWidthTag.java
    │   │               │   ├── ExitToLeftTag.java
    │   │               │   ├── ExitToRightTag.java
    │   │               │   ├── ExitToTag.java
    │   │               │   ├── FaxTag.java
    │   │               │   ├── FerryTag.java
    │   │               │   ├── FixMeTag.java
    │   │               │   ├── FootTag.java
    │   │               │   ├── FootwayTag.java
    │   │               │   ├── FordTag.java
    │   │               │   ├── FourWheelDriveOnlyTag.java
    │   │               │   ├── HarbourTag.java
    │   │               │   ├── HeightTag.java
    │   │               │   ├── HighResolutionTag.java
    │   │               │   ├── HighwayTag.java
    │   │               │   ├── HistoricTag.java
    │   │               │   ├── ISOCountryTag.java
    │   │               │   ├── IceRoadTag.java
    │   │               │   ├── IndustrialTag.java
    │   │               │   ├── IntermittentTag.java
    │   │               │   ├── InternetAccessFeeTag.java
    │   │               │   ├── InternetAccessTag.java
    │   │               │   ├── Iso31662CountryTag.java
    │   │               │   ├── Iso31663CountryTag.java
    │   │               │   ├── Iso3166DefaultCountryTag.java
    │   │               │   ├── JunctionTag.java
    │   │               │   ├── LandUseTag.java
    │   │               │   ├── LandcoverTag.java
    │   │               │   ├── LanesTag.java
    │   │               │   ├── LastEditChangesetTag.java
    │   │               │   ├── LastEditTimeTag.java
    │   │               │   ├── LastEditUserIdentifierTag.java
    │   │               │   ├── LastEditUserNameTag.java
    │   │               │   ├── LastEditVersionTag.java
    │   │               │   ├── LayerTag.java
    │   │               │   ├── LeisureTag.java
    │   │               │   ├── LevelTag.java
    │   │               │   ├── LivingStreetTag.java
    │   │               │   ├── LocalizedTagNameWithOptionalDate.java
    │   │               │   ├── LocationTag.java
    │   │               │   ├── ManMadeTag.java
    │   │               │   ├── MaxHeightTag.java
    │   │               │   ├── MaxSpeedBackwardTag.java
    │   │               │   ├── MaxSpeedForwardTag.java
    │   │               │   ├── MaxSpeedTag.java
    │   │               │   ├── MaxWidthTag.java
    │   │               │   ├── MilitaryTag.java
    │   │               │   ├── MinHeightTag.java
    │   │               │   ├── MinSpeedTag.java
    │   │               │   ├── MotorVehicleTag.java
    │   │               │   ├── MotorcarTag.java
    │   │               │   ├── MotorcycleTag.java
    │   │               │   ├── NaturalTag.java
    │   │               │   ├── NetworkTag.java
    │   │               │   ├── NoExitTag.java
    │   │               │   ├── NotesTag.java
    │   │               │   ├── OpenDateTag.java
    │   │               │   ├── OpeningDateTag.java
    │   │               │   ├── OpeningHoursTag.java
    │   │               │   ├── OrganicTag.java
    │   │               │   ├── ParkingTag.java
    │   │               │   ├── PhoneTag.java
    │   │               │   ├── PlaceTag.java
    │   │               │   ├── PowerTag.java
    │   │               │   ├── ProtectClassTag.java
    │   │               │   ├── PublicServiceVehiclesTag.java
    │   │               │   ├── README.md
    │   │               │   ├── RailwayTag.java
    │   │               │   ├── RampBicycleTag.java
    │   │               │   ├── RelationTypeTag.java
    │   │               │   ├── RouteTag.java
    │   │               │   ├── SaltTag.java
    │   │               │   ├── SeasonalTag.java
    │   │               │   ├── ServiceTag.java
    │   │               │   ├── ShopTag.java
    │   │               │   ├── SidewalkLeftTag.java
    │   │               │   ├── SidewalkRightTag.java
    │   │               │   ├── SidewalkTag.java
    │   │               │   ├── SkiTag.java
    │   │               │   ├── SmokingTag.java
    │   │               │   ├── SmoothnessTag.java
    │   │               │   ├── SnowmobileTag.java
    │   │               │   ├── SourceTag.java
    │   │               │   ├── SourceTypeTag.java
    │   │               │   ├── SourceURLTag.java
    │   │               │   ├── SportTag.java
    │   │               │   ├── SurfaceTag.java
    │   │               │   ├── SwimmingPoolTag.java
    │   │               │   ├── SyntheticBoundaryNodeTag.java
    │   │               │   ├── SyntheticDuplicateOsmNodeTag.java
    │   │               │   ├── SyntheticGeometrySlicedTag.java
    │   │               │   ├── SyntheticInvalidGeometryTag.java
    │   │               │   ├── SyntheticInvalidMultiPolygonRelationMembersRemovedTag.java
    │   │               │   ├── SyntheticInvalidWaySectionTag.java
    │   │               │   ├── SyntheticRelationMemberAdded.java
    │   │               │   ├── SyntheticRelationRoleUpdated.java
    │   │               │   ├── SyntheticSyntheticRelationMemberTag.java
    │   │               │   ├── Taggable.java
    │   │               │   ├── TemporaryDateOnTag.java
    │   │               │   ├── TollTag.java
    │   │               │   ├── TourismTag.java
    │   │               │   ├── TracktypeTag.java
    │   │               │   ├── TrafficCalmingTag.java
    │   │               │   ├── TunnelTag.java
    │   │               │   ├── TurnLanesBackwardTag.java
    │   │               │   ├── TurnLanesForwardTag.java
    │   │               │   ├── TurnLanesTag.java
    │   │               │   ├── TurnRestrictionTag.java
    │   │               │   ├── TurnTag.java
    │   │               │   ├── URLTag.java
    │   │               │   ├── UsageTag.java
    │   │               │   ├── VacantTag.java
    │   │               │   ├── VehicleTag.java
    │   │               │   ├── VendingTag.java
    │   │               │   ├── WaterTag.java
    │   │               │   ├── WaterwayTag.java
    │   │               │   ├── WebsiteTag.java
    │   │               │   ├── WetlandTag.java
    │   │               │   ├── WheelchairDescriptionTag.java
    │   │               │   ├── WheelchairTag.java
    │   │               │   ├── WidthTag.java
    │   │               │   ├── WifiTag.java
    │   │               │   ├── WikidataTag.java
    │   │               │   ├── WikipediaTag.java
    │   │               │   ├── WinterRoadTag.java
    │   │               │   ├── ZooTag.java
    │   │               │   ├── annotations/
    │   │               │   │   ├── Tag.java
    │   │               │   │   ├── TagKey.java
    │   │               │   │   ├── TagValue.java
    │   │               │   │   ├── TagValueAs.java
    │   │               │   │   ├── TagValueDeprecated.java
    │   │               │   │   ├── extraction/
    │   │               │   │   │   ├── AltitudeExtractor.java
    │   │               │   │   │   ├── IsoCountryExtractor.java
    │   │               │   │   │   ├── LengthExtractor.java
    │   │               │   │   │   ├── LongExtractor.java
    │   │               │   │   │   ├── NonEmptyStringExtractor.java
    │   │               │   │   │   ├── OrdinalExtractor.java
    │   │               │   │   │   ├── SpeedExtractor.java
    │   │               │   │   │   └── TagExtractor.java
    │   │               │   │   └── validation/
    │   │               │   │       ├── DoubleValidator.java
    │   │               │   │       ├── ExactMatchValidator.java
    │   │               │   │       ├── ISO2CountryValidator.java
    │   │               │   │       ├── ISO3CountryValidator.java
    │   │               │   │       ├── ISOCountryValidator.java
    │   │               │   │       ├── LengthValidator.java
    │   │               │   │       ├── LongValidator.java
    │   │               │   │       ├── NonEmptyStringValidator.java
    │   │               │   │       ├── NoneValidator.java
    │   │               │   │       ├── NumericValidator.java
    │   │               │   │       ├── OrdinalValidator.java
    │   │               │   │       ├── SpeedValidator.java
    │   │               │   │       ├── TagDocumenter.java
    │   │               │   │       ├── TagValidator.java
    │   │               │   │       ├── TimestampValidator.java
    │   │               │   │       ├── URIValidator.java
    │   │               │   │       └── Validators.java
    │   │               │   ├── cache/
    │   │               │   │   ├── CachingValidator.java
    │   │               │   │   └── Tagger.java
    │   │               │   ├── filters/
    │   │               │   │   ├── ConfiguredTaggableFilter.java
    │   │               │   │   ├── LineFilterConverter.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── RegexTaggableFilter.java
    │   │               │   │   ├── TaggableFilter.java
    │   │               │   │   ├── TaggableFilterToMatcherConverter.java
    │   │               │   │   └── matcher/
    │   │               │   │       ├── ConfiguredTaggableMatcher.java
    │   │               │   │       ├── README.md
    │   │               │   │       ├── TaggableMatcher.java
    │   │               │   │       └── parsing/
    │   │               │   │           ├── Lexer.java
    │   │               │   │           ├── Parser.java
    │   │               │   │           ├── SemanticChecker.java
    │   │               │   │           ├── Token.java
    │   │               │   │           └── tree/
    │   │               │   │               ├── ASTNode.java
    │   │               │   │               ├── AndOperator.java
    │   │               │   │               ├── BangOperator.java
    │   │               │   │               ├── BinaryOperator.java
    │   │               │   │               ├── EqualsOperator.java
    │   │               │   │               ├── LiteralOperand.java
    │   │               │   │               ├── Operand.java
    │   │               │   │               ├── OrOperator.java
    │   │               │   │               ├── RegexOperand.java
    │   │               │   │               ├── TreePrinter.java
    │   │               │   │               ├── UnaryOperator.java
    │   │               │   │               └── XorOperator.java
    │   │               │   ├── names/
    │   │               │   │   ├── AlternativeNameTag.java
    │   │               │   │   ├── BridgeNameTag.java
    │   │               │   │   ├── BulkNameFinder.java
    │   │               │   │   ├── HistoricallyKnownAsTag.java
    │   │               │   │   ├── HistoricallyReferencedAsTag.java
    │   │               │   │   ├── InternationallyKnownAsTag.java
    │   │               │   │   ├── InternationallyReferencedAsTag.java
    │   │               │   │   ├── LocallyKnownAsTag.java
    │   │               │   │   ├── LocallyReferencedAsTag.java
    │   │               │   │   ├── Name1Tag.java
    │   │               │   │   ├── NameFinder.java
    │   │               │   │   ├── NameLeftTag.java
    │   │               │   │   ├── NameRightTag.java
    │   │               │   │   ├── NameTag.java
    │   │               │   │   ├── NationallyKnownAsTag.java
    │   │               │   │   ├── NationallyReferencedAsTag.java
    │   │               │   │   ├── NoNameTag.java
    │   │               │   │   ├── OfficialNameTag.java
    │   │               │   │   ├── OldReferenceTag.java
    │   │               │   │   ├── ReferenceTag.java
    │   │               │   │   ├── RegionallyKnownAsTag.java
    │   │               │   │   ├── RegionallyReferencedAsTag.java
    │   │               │   │   ├── ShortNameTag.java
    │   │               │   │   ├── SortingNameTag.java
    │   │               │   │   └── TunnelNameTag.java
    │   │               │   └── oneway/
    │   │               │       ├── OneWayTag.java
    │   │               │       ├── bicycle/
    │   │               │       │   ├── BicycleOneWayTag.java
    │   │               │       │   ├── CyclewayLeftOneWayTag.java
    │   │               │       │   ├── CyclewayOneWayTag.java
    │   │               │       │   ├── CyclewayRightOneWayTag.java
    │   │               │       │   └── OneWayBicycleTag.java
    │   │               │       └── motor/
    │   │               │           ├── OneWayMotorVehicleTag.java
    │   │               │           ├── OneWayMotorcarTag.java
    │   │               │           └── OneWayVehicleTag.java
    │   │               └── utilities/
    │   │                   ├── README.md
    │   │                   ├── archive/
    │   │                   │   ├── AbstractArchiverOrExtractor.java
    │   │                   │   ├── ArchiveStorageProfileDelegate.java
    │   │                   │   ├── ArchiveVetoDelegate.java
    │   │                   │   ├── Archiver.java
    │   │                   │   ├── ArchiverEventListener.java
    │   │                   │   ├── DefaultZipVetoDelegate.java
    │   │                   │   ├── Extractor.java
    │   │                   │   ├── UnzipperCommand.java
    │   │                   │   └── ZipperCommand.java
    │   │                   ├── arrays/
    │   │                   │   ├── Arrays.java
    │   │                   │   ├── BitArray.java
    │   │                   │   ├── BooleanArray.java
    │   │                   │   ├── ByteArray.java
    │   │                   │   ├── ByteArrayOfArrays.java
    │   │                   │   ├── IntegerArray.java
    │   │                   │   ├── IntegerArrayOfArrays.java
    │   │                   │   ├── LargeArray.java
    │   │                   │   ├── LongArray.java
    │   │                   │   ├── LongArrayOfArrays.java
    │   │                   │   ├── PolyLineArray.java
    │   │                   │   ├── PolygonArray.java
    │   │                   │   ├── PrimitiveArray.java
    │   │                   │   ├── ShortArray.java
    │   │                   │   └── StringArray.java
    │   │                   ├── caching/
    │   │                   │   ├── ConcurrentResourceCache.java
    │   │                   │   ├── LocalFileInMemoryCache.java
    │   │                   │   ├── README.md
    │   │                   │   ├── ResourceCache.java
    │   │                   │   └── strategies/
    │   │                   │       ├── AbstractCachingStrategy.java
    │   │                   │       ├── ByteArrayCachingStrategy.java
    │   │                   │       ├── CachingStrategy.java
    │   │                   │       ├── GlobalNamespaceCachingStrategy.java
    │   │                   │       ├── NamespaceCachingStrategy.java
    │   │                   │       └── NoCachingStrategy.java
    │   │                   ├── checkstyle/
    │   │                   │   ├── ArrangementCheck.java
    │   │                   │   └── README.md
    │   │                   ├── cli/
    │   │                   │   └── operations/
    │   │                   │       ├── AbstractHDFSOperation.java
    │   │                   │       ├── AbstractOperation.java
    │   │                   │       ├── CheckIfFileExistsOperation.java
    │   │                   │       ├── DeepLSOperation.java
    │   │                   │       ├── HDFSCatOperation.java
    │   │                   │       ├── HDFSCheckIfFileExistsOperation.java
    │   │                   │       ├── HDFSCopyOperation.java
    │   │                   │       ├── HDFSLSOperation.java
    │   │                   │       ├── HDFSMkdirOperation.java
    │   │                   │       ├── HDFSPutOperation.java
    │   │                   │       ├── LSOperation.java
    │   │                   │       ├── MkdirOperation.java
    │   │                   │       ├── Operation.java
    │   │                   │       ├── RMDirOperation.java
    │   │                   │       └── base/
    │   │                   │           ├── AvailableSocketFinder.java
    │   │                   │           ├── OperationResults.java
    │   │                   │           ├── RemoteObject.java
    │   │                   │           ├── SCPOperation.java
    │   │                   │           ├── SCPOperationResults.java
    │   │                   │           ├── SSHForwarder.java
    │   │                   │           ├── SSHOperation.java
    │   │                   │           └── SSHOperationResults.java
    │   │                   ├── collections/
    │   │                   │   ├── EnhancedCollectors.java
    │   │                   │   ├── EnumSetCollector.java
    │   │                   │   ├── FilteredIterable.java
    │   │                   │   ├── FixedSizePriorityQueue.java
    │   │                   │   ├── ImmutableListCollector.java
    │   │                   │   ├── Iterables.java
    │   │                   │   ├── JoinedCollection.java
    │   │                   │   ├── Maps.java
    │   │                   │   ├── MultiIterable.java
    │   │                   │   ├── OptionalIterable.java
    │   │                   │   ├── ParallelIterable.java
    │   │                   │   ├── Sets.java
    │   │                   │   ├── ShardBucketCollection.java
    │   │                   │   ├── StreamIterable.java
    │   │                   │   ├── StringList.java
    │   │                   │   ├── SubIterable.java
    │   │                   │   ├── UnmodifiableSortedMapCollector.java
    │   │                   │   └── UnmodifiableSortedSetCollector.java
    │   │                   ├── command/
    │   │                   │   ├── ActiveModuleIndexWriter.java
    │   │                   │   ├── AtlasShellToolsException.java
    │   │                   │   ├── ReflectionUtilities.java
    │   │                   │   ├── abstractcommand/
    │   │                   │   │   ├── AbstractAtlasShellToolsCommand.java
    │   │                   │   │   ├── AtlasShellToolsCommandTemplate.java
    │   │                   │   │   ├── AtlasShellToolsMarkerInterface.java
    │   │                   │   │   ├── CommandOutputDelegate.java
    │   │                   │   │   └── OptionAndArgumentDelegate.java
    │   │                   │   ├── documentation/
    │   │                   │   │   ├── DocumentationFormatType.java
    │   │                   │   │   ├── DocumentationFormatter.java
    │   │                   │   │   ├── DocumentationRegistrar.java
    │   │                   │   │   └── PagerHelper.java
    │   │                   │   ├── parsing/
    │   │                   │   │   ├── ArgumentArity.java
    │   │                   │   │   ├── ArgumentOptionality.java
    │   │                   │   │   ├── OptionArgumentType.java
    │   │                   │   │   ├── OptionOptionality.java
    │   │                   │   │   ├── SimpleOptionAndArgumentParser.java
    │   │                   │   │   └── exceptions/
    │   │                   │   │       ├── AmbiguousAbbreviationException.java
    │   │                   │   │       ├── ArgumentException.java
    │   │                   │   │       ├── OptionParseException.java
    │   │                   │   │       ├── UnknownOptionException.java
    │   │                   │   │       └── UnparsableContextException.java
    │   │                   │   ├── subcommands/
    │   │                   │   │   ├── AnyToGeoJsonCommand.java
    │   │                   │   │   ├── AtlasDiffCommand.java
    │   │                   │   │   ├── AtlasMetadataReaderCommand.java
    │   │                   │   │   ├── AtlasSearchCommand.java
    │   │                   │   │   ├── AtlasShardingConverterCommand.java
    │   │                   │   │   ├── AtlasShellToolsDemoCommand.java
    │   │                   │   │   ├── ConcatenateAtlasCommand.java
    │   │                   │   │   ├── CountryBoundaryMapPrinterCommand.java
    │   │                   │   │   ├── CountryShardToBoundsCommand.java
    │   │                   │   │   ├── HelloWorldCommand.java
    │   │                   │   │   ├── IsoCountryCodeCommand.java
    │   │                   │   │   ├── JavaToProtoSerializationCommand.java
    │   │                   │   │   ├── OsmFileParserCommand.java
    │   │                   │   │   ├── OsmToAtlasCommand.java
    │   │                   │   │   ├── PackedToTextAtlasCommand.java
    │   │                   │   │   ├── PbfToAtlasCommand.java
    │   │                   │   │   ├── SubAtlasCommand.java
    │   │                   │   │   ├── TaggableMatcherPrinterCommand.java
    │   │                   │   │   ├── TemplateTestCommand.java
    │   │                   │   │   ├── WKTShardCommand.java
    │   │                   │   │   └── templates/
    │   │                   │   │       ├── AtlasLoaderCommand.java
    │   │                   │   │       ├── AtlasLoaderTemplate.java
    │   │                   │   │       ├── CountryBoundaryMapTemplate.java
    │   │                   │   │       ├── ListOfNumbersTemplate.java
    │   │                   │   │       ├── MultipleOutputCommand.java
    │   │                   │   │       ├── OutputDirectoryTemplate.java
    │   │                   │   │       ├── PredicateTemplate.java
    │   │                   │   │       └── ShardingTemplate.java
    │   │                   │   └── terminal/
    │   │                   │       ├── TTYAttribute.java
    │   │                   │       └── TTYStringBuilder.java
    │   │                   ├── compression/
    │   │                   │   ├── IntegerDictionary.java
    │   │                   │   └── LongDictionary.java
    │   │                   ├── configuration/
    │   │                   │   ├── Configurable.java
    │   │                   │   ├── Configuration.java
    │   │                   │   ├── ConfigurationDeserializer.java
    │   │                   │   ├── ConfigurationReader.java
    │   │                   │   ├── ConfiguredFilter.java
    │   │                   │   ├── MergedConfiguration.java
    │   │                   │   └── StandardConfiguration.java
    │   │                   ├── conversion/
    │   │                   │   ├── Converter.java
    │   │                   │   ├── HexStringByteArrayConverter.java
    │   │                   │   ├── StringConverter.java
    │   │                   │   ├── StringToPredicateConverter.java
    │   │                   │   ├── TagConverter.java
    │   │                   │   ├── TwoWayConverter.java
    │   │                   │   └── TwoWayStringConverter.java
    │   │                   ├── direction/
    │   │                   │   └── EdgeDirectionComparator.java
    │   │                   ├── filters/
    │   │                   │   ├── AtlasEntityPolygonsFilter.java
    │   │                   │   └── IntersectionPolicy.java
    │   │                   ├── function/
    │   │                   │   ├── QuaternaryFunction.java
    │   │                   │   ├── QuaternaryOperator.java
    │   │                   │   ├── SenaryFunction.java
    │   │                   │   ├── SenaryOperator.java
    │   │                   │   ├── TernaryConsumer.java
    │   │                   │   ├── TernaryFunction.java
    │   │                   │   └── TernaryOperator.java
    │   │                   ├── graphs/
    │   │                   │   └── DirectedAcyclicGraph.java
    │   │                   ├── http/
    │   │                   │   └── rest/
    │   │                   │       ├── DislikedResponseCodeException.java
    │   │                   │       └── HttpResultHandler.java
    │   │                   ├── identifiers/
    │   │                   │   └── EntityIdentifierGenerator.java
    │   │                   ├── jsoncompare/
    │   │                   │   ├── RegularExpressionJSONComparator.java
    │   │                   │   └── RegularExpressionJSONCompareResult.java
    │   │                   ├── maps/
    │   │                   │   ├── IntegerToIntegerMap.java
    │   │                   │   ├── LargeMap.java
    │   │                   │   ├── LinkedMultiMap.java
    │   │                   │   ├── LongToBooleanMap.java
    │   │                   │   ├── LongToIntegerMap.java
    │   │                   │   ├── LongToIntegerMultiMap.java
    │   │                   │   ├── LongToLongMap.java
    │   │                   │   ├── LongToLongMultiMap.java
    │   │                   │   ├── MultiMap.java
    │   │                   │   └── MultiMapWithSet.java
    │   │                   ├── matching/
    │   │                   │   └── NameMatcher.java
    │   │                   ├── random/
    │   │                   │   ├── RandomTagsSupplier.java
    │   │                   │   └── RandomTextGenerator.java
    │   │                   ├── regex/
    │   │                   │   └── RegexUtils.java
    │   │                   ├── runtime/
    │   │                   │   ├── BoundedPipeBuffer.java
    │   │                   │   ├── ClassPathTree.java
    │   │                   │   ├── Command.java
    │   │                   │   ├── CommandMap.java
    │   │                   │   ├── FlexibleCommand.java
    │   │                   │   ├── FlexibleSubCommand.java
    │   │                   │   ├── OpenPipeBuffer.java
    │   │                   │   ├── PipeBuffer.java
    │   │                   │   ├── Retry.java
    │   │                   │   ├── RunScript.java
    │   │                   │   ├── RunScriptMonitor.java
    │   │                   │   ├── SingleLineMonitor.java
    │   │                   │   ├── TimedRetry.java
    │   │                   │   └── system/
    │   │                   │       ├── SystemInfo.java
    │   │                   │       └── memory/
    │   │                   │           └── Memory.java
    │   │                   ├── scalars/
    │   │                   │   ├── Angle.java
    │   │                   │   ├── Counter.java
    │   │                   │   ├── Distance.java
    │   │                   │   ├── DoubleCounter.java
    │   │                   │   ├── Duration.java
    │   │                   │   ├── README.md
    │   │                   │   ├── Ratio.java
    │   │                   │   ├── Speed.java
    │   │                   │   └── Surface.java
    │   │                   ├── statistic/
    │   │                   │   ├── AbstractStatistic.java
    │   │                   │   ├── Statistic.java
    │   │                   │   ├── StatisticUtils.java
    │   │                   │   └── storeless/
    │   │                   │       ├── CounterWithStatistic.java
    │   │                   │       ├── CustomizedStatistic.java
    │   │                   │       └── StatisticType.java
    │   │                   ├── testing/
    │   │                   │   ├── Bean.java
    │   │                   │   ├── BeanHandler.java
    │   │                   │   ├── CoreTestRule.java
    │   │                   │   ├── CreationContext.java
    │   │                   │   ├── FeatureIDGenerator.java
    │   │                   │   ├── FieldHandler.java
    │   │                   │   ├── FreezeDryFunction.java
    │   │                   │   ├── OsmFileParser.java
    │   │                   │   ├── OsmFileToPbf.java
    │   │                   │   ├── OsmosisXmlReaderFromResource.java
    │   │                   │   ├── TestAtlas.java
    │   │                   │   ├── TestAtlasHandler.java
    │   │                   │   └── TestTaggable.java
    │   │                   ├── threads/
    │   │                   │   ├── CustomNamesThreadPoolFactory.java
    │   │                   │   ├── LogTicker.java
    │   │                   │   ├── Pool.java
    │   │                   │   ├── Result.java
    │   │                   │   └── Ticker.java
    │   │                   ├── time/
    │   │                   │   ├── LocalTime.java
    │   │                   │   └── Time.java
    │   │                   ├── timezone/
    │   │                   │   ├── TimeZoneBoundary.java
    │   │                   │   └── TimeZoneMap.java
    │   │                   ├── tuples/
    │   │                   │   ├── Either.java
    │   │                   │   └── Tuple.java
    │   │                   ├── unicode/
    │   │                   │   ├── AbstractClassifier.java
    │   │                   │   ├── Classification.java
    │   │                   │   ├── Classifier.java
    │   │                   │   └── LoadingClassifier.java
    │   │                   └── vectortiles/
    │   │                       ├── MinimumZoom.java
    │   │                       ├── README.md
    │   │                       ├── TippecanoeCommands.java
    │   │                       ├── TippecanoeConverter.java
    │   │                       ├── TippecanoeExporter.java
    │   │                       ├── TippecanoeGeoJsonExtension.java
    │   │                       └── TippecanoeSettings.java
    │   ├── proto/
    │   │   ├── Area.proto
    │   │   ├── Edge.proto
    │   │   ├── Line.proto
    │   │   ├── Location.proto
    │   │   ├── Node.proto
    │   │   ├── Point.proto
    │   │   ├── ProtoAtlas.proto
    │   │   ├── ProtoAtlasMetaData.proto
    │   │   ├── ProtoByteArray.proto
    │   │   ├── ProtoByteArrayOfArrays.proto
    │   │   ├── ProtoIntegerArray.proto
    │   │   ├── ProtoIntegerArrayOfArrays.proto
    │   │   ├── ProtoIntegerStringDictionary.proto
    │   │   ├── ProtoLongArray.proto
    │   │   ├── ProtoLongArrayOfArrays.proto
    │   │   ├── ProtoLongToLongMap.proto
    │   │   ├── ProtoLongToLongMultiMap.proto
    │   │   ├── ProtoPackedTagStore.proto
    │   │   ├── ProtoPolyLineArray.proto
    │   │   ├── ProtoPolygonArray.proto
    │   │   ├── Relation.proto
    │   │   └── Tag.proto
    │   └── resources/
    │       └── org/
    │           └── openstreetmap/
    │               └── atlas/
    │                   ├── atlas.json
    │                   ├── geography/
    │                   │   └── atlas/
    │                   │       ├── items/
    │                   │       │   └── complex/
    │                   │       │       ├── aoi/
    │                   │       │       │   └── aoi-tag-filter.json
    │                   │       │       ├── islands/
    │                   │       │       │   └── islands.json
    │                   │       │       ├── landcover/
    │                   │       │       │   └── land-cover-tag-filter.json
    │                   │       │       └── water/
    │                   │       │           └── finder/
    │                   │       │               ├── canal.json
    │                   │       │               ├── creek.json
    │                   │       │               ├── ditch.json
    │                   │       │               ├── harbour.json
    │                   │       │               ├── lagoon.json
    │                   │       │               ├── lake.json
    │                   │       │               ├── pond.json
    │                   │       │               ├── pool.json
    │                   │       │               ├── reservoir.json
    │                   │       │               ├── river.json
    │                   │       │               └── wetland.json
    │                   │       ├── pbf/
    │                   │       │   ├── atlas-area.json
    │                   │       │   ├── atlas-edge.json
    │                   │       │   ├── atlas-relation-slicing.json
    │                   │       │   ├── atlas-way-section.json
    │                   │       │   ├── osm-pbf-node.json
    │                   │       │   ├── osm-pbf-relation.json
    │                   │       │   └── osm-pbf-way.json
    │                   │       └── statistics/
    │                   │           └── coverage/
    │                   │               └── poi/
    │                   │                   ├── counts.txt
    │                   │                   └── countsOne.txt
    │                   ├── tags/
    │                   │   └── annotations/
    │                   │       └── implicit-speed-values.json
    │                   └── utilities/
    │                       ├── checkstyle/
    │                       │   └── arrangement.txt
    │                       ├── command/
    │                       │   └── subcommands/
    │                       │       ├── AnyToGeoJsonCommandDescriptionSection.txt
    │                       │       ├── AnyToGeoJsonCommandExamplesSection.txt
    │                       │       ├── AtlasDiffCommandDescriptionSection.txt
    │                       │       ├── AtlasDiffCommandExamplesSection.txt
    │                       │       ├── AtlasMetadataReaderCommandDescriptionSection.txt
    │                       │       ├── AtlasMetadataReaderCommandExamplesSection.txt
    │                       │       ├── AtlasSearchCommandDescriptionSection.txt
    │                       │       ├── AtlasSearchCommandExamplesSection.txt
    │                       │       ├── AtlasShardingConverterCommandDescriptionSection.txt
    │                       │       ├── AtlasShardingConverterCommandExamplesSection.txt
    │                       │       ├── AtlasShellToolsDemoCommandDescriptionSection.txt
    │                       │       ├── AtlasShellToolsDemoCommandExamplesSection.txt
    │                       │       ├── ConcatenateAtlasCommandDescriptionSection.txt
    │                       │       ├── ConcatenateAtlasCommandExamplesSection.txt
    │                       │       ├── CountryBoundaryMapPrinterCommandDescriptionSection.txt
    │                       │       ├── CountryBoundaryMapPrinterCommandExamplesSection.txt
    │                       │       ├── CountryShardToBoundsCommandDescriptionSection.txt
    │                       │       ├── CountryShardToBoundsCommandExamplesSection.txt
    │                       │       ├── HelloWorldCommandDescriptionSection.txt
    │                       │       ├── IsoCountryCodeCommandDescriptionSection.txt
    │                       │       ├── IsoCountryCodeCommandExamplesSection.txt
    │                       │       ├── JavaToProtoSerializationCommandDescriptionSection.txt
    │                       │       ├── JavaToProtoSerializationCommandExamplesSection.txt
    │                       │       ├── OsmFileParserCommandDescriptionSection.txt
    │                       │       ├── OsmFileParserCommandExamplesSection.txt
    │                       │       ├── OsmToAtlasCommandDescriptionSection.txt
    │                       │       ├── OsmToAtlasCommandExamplesSection.txt
    │                       │       ├── PackedToTextAtlasCommandDescriptionSection.txt
    │                       │       ├── PackedToTextAtlasCommandExamplesSection.txt
    │                       │       ├── PbfToAtlasCommandExamplesSection.txt
    │                       │       ├── PbfToAtlasDescriptionSection.txt
    │                       │       ├── SubAtlasCommandDescriptionSection.txt
    │                       │       ├── SubAtlasCommandExamplesSection.txt
    │                       │       ├── TaggableMatcherPrinterCommandDescriptionSection.txt
    │                       │       ├── TaggableMatcherPrinterCommandExamplesSection.txt
    │                       │       ├── WKTShardCommandDescriptionSection.txt
    │                       │       ├── WKTShardCommandExamplesSection.txt
    │                       │       └── templates/
    │                       │           ├── AtlasLoaderCommandSection.txt
    │                       │           ├── AtlasLoaderTemplateSection.txt
    │                       │           ├── CountryBoundaryMapTemplateSection.txt
    │                       │           ├── MultipleOutputCommandSection.txt
    │                       │           ├── OutputDirectoryTemplateSection.txt
    │                       │           ├── PredicateTemplateSection.txt
    │                       │           └── ShardingTemplateSection.txt
    │                       ├── random/
    │                       │   └── dictionary.txt
    │                       ├── timezone/
    │                       │   ├── index.html
    │                       │   ├── tz_world.dbf
    │                       │   ├── tz_world.prj
    │                       │   ├── tz_world.qix
    │                       │   ├── tz_world.shp
    │                       │   └── tz_world.shx
    │                       ├── unicode/
    │                       │   └── unicode.defaults
    │                       └── vectortiles/
    │                           └── minimum-zooms.json
    └── test/
        ├── groovy/
        │   └── org/
        │       └── openstreetmap/
        │           └── atlas/
        │               └── geography/
        │                   └── converters/
        │                       └── jts/
        │                           └── JtsPolyLineConverterTest.java
        ├── java/
        │   └── org/
        │       └── openstreetmap/
        │           └── atlas/
        │               ├── event/
        │               │   ├── EventBusTest.java
        │               │   ├── EventServiceTest.java
        │               │   ├── TestEvent.java
        │               │   └── TestProcessor.java
        │               ├── exception/
        │               │   ├── CoreExceptionTest.java
        │               │   └── change/
        │               │       └── FeatureChangeMergeExceptionTest.java
        │               ├── geography/
        │               │   ├── AltitudeTest.java
        │               │   ├── CompressedPolyLineTest.java
        │               │   ├── HeadingTest.java
        │               │   ├── LatitudeTest.java
        │               │   ├── LocationTest.java
        │               │   ├── LongitudeTest.java
        │               │   ├── MultiPolyLineTest.java
        │               │   ├── MultiPolygonTest.java
        │               │   ├── PolyLineCoveringPolygonTest.java
        │               │   ├── PolyLineCoveringPolygonTestRule.java
        │               │   ├── PolyLineTest.java
        │               │   ├── PolygonCoveringPolygonTest.java
        │               │   ├── PolygonCoveringPolygonTestRule.java
        │               │   ├── PolygonTest.java
        │               │   ├── PolygonTestRule.java
        │               │   ├── RectangleTest.java
        │               │   ├── SegmentTest.java
        │               │   ├── SelfIntersectingPolyLineTestCase.java
        │               │   ├── SnapperTest.java
        │               │   ├── StringCompressedPolyLineTest.java
        │               │   ├── atlas/
        │               │   │   ├── AtlasResourceLoaderTest.java
        │               │   │   ├── AtlasTest.java
        │               │   │   ├── AtlasTestRule.java
        │               │   │   ├── BareAtlasTest.java
        │               │   │   ├── BareAtlasTestRule.java
        │               │   │   ├── IsAtlasTestCase.java
        │               │   │   ├── ShardFileOverlapsPolygonTest.java
        │               │   │   ├── SubAtlasRule.java
        │               │   │   ├── SubAtlasTest.java
        │               │   │   ├── builder/
        │               │   │   │   ├── GeoJsonAtlasBuilderTest.java
        │               │   │   │   ├── PackedAtlasBuilderTest.java
        │               │   │   │   ├── store/
        │               │   │   │   │   ├── AtlasPrimitiveObjectStoreTest.java
        │               │   │   │   │   └── AtlasPrimitiveRouteTest.java
        │               │   │   │   └── text/
        │               │   │   │       └── TextAtlasBuilderTest.java
        │               │   │   ├── change/
        │               │   │   │   ├── AbstractChangeTest.java
        │               │   │   │   ├── AtlasChangeGeneratorTest.java
        │               │   │   │   ├── AtlasChangeGeneratorTestRule.java
        │               │   │   │   ├── CascadeDeleteTest.java
        │               │   │   │   ├── CascadeDeleteTestHelper.java
        │               │   │   │   ├── CascadeDeleteTestRule.java
        │               │   │   │   ├── ChangeAtlasTest.java
        │               │   │   │   ├── ChangeAtlasTestRule.java
        │               │   │   │   ├── ChangeBuilderTest.java
        │               │   │   │   ├── ChangeMergeTest.java
        │               │   │   │   ├── ChangeTest.java
        │               │   │   │   ├── FeatureChangeMergerTest.java
        │               │   │   │   ├── FeatureChangeTest.java
        │               │   │   │   ├── FeatureChangeUnitTestFactory.java
        │               │   │   │   ├── MemberMergeStrategiesTest.java
        │               │   │   │   ├── MultiCascadeDeleteTest.java
        │               │   │   │   ├── MultiCascadeDeleteTestRule.java
        │               │   │   │   ├── MultipleChangeAtlasTest.java
        │               │   │   │   ├── MultipleChangeAtlasTestRule.java
        │               │   │   │   ├── TagChangeTest.java
        │               │   │   │   ├── TagChangeTestRule.java
        │               │   │   │   ├── description/
        │               │   │   │   │   └── descriptors/
        │               │   │   │   │       └── ChangeDescriptorComparatorTest.java
        │               │   │   │   ├── diff/
        │               │   │   │   │   ├── AtlasDiffTest.java
        │               │   │   │   │   └── AtlasDiffTestRule.java
        │               │   │   │   ├── eventhandling/
        │               │   │   │   │   └── listener/
        │               │   │   │   │       ├── TagChangeListenerTest.java
        │               │   │   │   │       └── TestTagChangeListenerImplementation.java
        │               │   │   │   ├── exception/
        │               │   │   │   │   └── EmptyChangeExceptionTest.java
        │               │   │   │   ├── serializer/
        │               │   │   │   │   ├── ChangeGeoJsonSerializerTest.java
        │               │   │   │   │   ├── FeatureChangeGeoJsonSerializerTest.java
        │               │   │   │   │   └── FeatureChangeGeoJsonSerializerTestRule.java
        │               │   │   │   └── validators/
        │               │   │   │       └── ChangeValidatorTest.java
        │               │   │   ├── changeset/
        │               │   │   │   └── BinaryChangeSetSerializerTest.java
        │               │   │   ├── command/
        │               │   │   │   ├── AtlasFeatureCountsSubCommandTestCase.java
        │               │   │   │   ├── AtlasFeatureCountsSubCommandTestCaseRule.java
        │               │   │   │   ├── AtlasFindByAtlasIdentifierSubCommandTest.java
        │               │   │   │   ├── AtlasJoinerSubCommandTest.java
        │               │   │   │   ├── AtlasSplitterWithSlippyTileCommandTest.java
        │               │   │   │   ├── CaptureOutputStream.java
        │               │   │   │   ├── ComplexBuildingsTestRule.java
        │               │   │   │   ├── OsmPbfToAtlasSubCommandTest.java
        │               │   │   │   └── TinyBuildingsSearchSubCommandTest.java
        │               │   │   ├── complete/
        │               │   │   │   ├── CompleteAreaTest.java
        │               │   │   │   ├── CompleteEdgeTest.java
        │               │   │   │   ├── CompleteEntityTest.java
        │               │   │   │   ├── CompleteItemTypeTest.java
        │               │   │   │   ├── CompleteItemTypeTestRule.java
        │               │   │   │   ├── CompleteLineTest.java
        │               │   │   │   ├── CompleteNodeTest.java
        │               │   │   │   ├── CompletePointTest.java
        │               │   │   │   ├── CompleteRelationTest.java
        │               │   │   │   ├── CompleteTestRule.java
        │               │   │   │   └── EmptyAtlasTest.java
        │               │   │   ├── delta/
        │               │   │   │   ├── AtlasDeltaAreaTest.java
        │               │   │   │   ├── AtlasDeltaEdgeTest.java
        │               │   │   │   ├── AtlasDeltaLineTest.java
        │               │   │   │   ├── AtlasDeltaNodeTest.java
        │               │   │   │   ├── AtlasDeltaPointTest.java
        │               │   │   │   ├── AtlasDeltaRelationTest.java
        │               │   │   │   ├── AtlasDeltaRelationsTest.java
        │               │   │   │   └── AtlasDeltaTagTest.java
        │               │   │   ├── dynamic/
        │               │   │   │   ├── DynamicAtlasAggressiveRelationsTest.java
        │               │   │   │   ├── DynamicAtlasFilteredEntitiesTest.java
        │               │   │   │   ├── DynamicAtlasMovingTooFastTest.java
        │               │   │   │   ├── DynamicAtlasMultipleInitialShardTest.java
        │               │   │   │   ├── DynamicAtlasPartialInitialShardsTest.java
        │               │   │   │   ├── DynamicAtlasPreemptiveLoadTest.java
        │               │   │   │   ├── DynamicAtlasRestrainedExpansionWithPolygonTest.java
        │               │   │   │   ├── DynamicAtlasTest.java
        │               │   │   │   └── rules/
        │               │   │   │       ├── DynamicAtlasAggressiveRelationsTestRule.java
        │               │   │   │       ├── DynamicAtlasMovingTooFastTestRule.java
        │               │   │   │       ├── DynamicAtlasPartialInitialShardsTestRule.java
        │               │   │   │       ├── DynamicAtlasPreemptiveLoadTestRule.java
        │               │   │   │       ├── DynamicAtlasRestrainedExpansionWithPolygonTestRule.java
        │               │   │   │       └── DynamicAtlasTestRule.java
        │               │   │   ├── items/
        │               │   │   │   ├── AreaEntityTestRule.java
        │               │   │   │   ├── AreaTest.java
        │               │   │   │   ├── AreaTestRule.java
        │               │   │   │   ├── AtlasEntityTest.java
        │               │   │   │   ├── AtlasItemIntersectionTest.java
        │               │   │   │   ├── AtlasItemIntersectionTestRule.java
        │               │   │   │   ├── EdgeTest.java
        │               │   │   │   ├── EdgeTestRule.java
        │               │   │   │   ├── ItemTypeTest.java
        │               │   │   │   ├── LineItemTest.java
        │               │   │   │   ├── LineItemTestRule.java
        │               │   │   │   ├── LoopingRelationTest.java
        │               │   │   │   ├── LoopingRelationTestRule.java
        │               │   │   │   ├── RelationBeanTest.java
        │               │   │   │   ├── RelationBeanTestRule.java
        │               │   │   │   ├── RelationFlatteningRule.java
        │               │   │   │   ├── RelationFlatteningTest.java
        │               │   │   │   ├── RelationMemberComparisonTestCase.java
        │               │   │   │   ├── RelationMemberComparisonTestCaseRule.java
        │               │   │   │   ├── RelationMemberListTest.java
        │               │   │   │   ├── RouteTest.java
        │               │   │   │   ├── RouteTestRule.java
        │               │   │   │   ├── SnappedLineItemTest.java
        │               │   │   │   ├── SnappedLineItemTestRule.java
        │               │   │   │   ├── WithinTest.java
        │               │   │   │   ├── WithinTestRule.java
        │               │   │   │   └── complex/
        │               │   │   │       ├── RelationOrAreaToMultiPolygonConverterTest.java
        │               │   │   │       ├── RelationOrAreaToMultiPolygonConverterTestRule.java
        │               │   │   │       ├── RelationToMultiPolygonMemberConverterTest.java
        │               │   │   │       ├── aoi/
        │               │   │   │       │   ├── ComplexAreaOfInterestFinderTest.java
        │               │   │   │       │   └── ComplexAreaOfInterestFinderTestRule.java
        │               │   │   │       ├── bignode/
        │               │   │   │       │   ├── BigNodeFinderTest.java
        │               │   │   │       │   └── BigNodeFinderTestCaseRule.java
        │               │   │   │       ├── boundaries/
        │               │   │   │       │   ├── ComplexBoundaryTest.java
        │               │   │   │       │   └── ComplexBoundaryTestRule.java
        │               │   │   │       ├── buildings/
        │               │   │   │       │   ├── AtlasComplexBuildingTestCase.java
        │               │   │   │       │   ├── AtlasComplexBuildingTestCaseRule.java
        │               │   │   │       │   ├── BuildingHeightTestCase.java
        │               │   │   │       │   ├── BuildingHeightTestCaseRule.java
        │               │   │   │       │   ├── BuildingLevelsTestCase.java
        │               │   │   │       │   ├── BuildingLevelsTestCaseRule.java
        │               │   │   │       │   ├── BuildingsContainsOsmIdentifierTestCase.java
        │               │   │   │       │   ├── BuildingsContainsOsmIdentifierTestCaseRule.java
        │               │   │   │       │   └── HeightConverterTest.java
        │               │   │   │       ├── highwayarea/
        │               │   │   │       │   ├── ComplexHighwayAreaTestCase.java
        │               │   │   │       │   ├── ComplexHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── OutOfOrderEdgesHighwayAreaTestCase.java
        │               │   │   │       │   ├── OutOfOrderEdgesHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── SelfIntersectingHighwayAreaTestCase.java
        │               │   │   │       │   ├── SelfIntersectingHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── ZeroSizeHighwayAreaTestCase.java
        │               │   │   │       │   └── ZeroSizeHighwayAreaTestCaseRule.java
        │               │   │   │       ├── islands/
        │               │   │   │       │   ├── ComplexIslandFinderTest.java
        │               │   │   │       │   └── ComplexIslandFinderTestRule.java
        │               │   │   │       ├── landcover/
        │               │   │   │       │   ├── ComplexLandCoverFinderTest.java
        │               │   │   │       │   └── ComplexLandCoverFinderTestRule.java
        │               │   │   │       ├── restriction/
        │               │   │   │       │   ├── ComplexTurnRestrictionTest.java
        │               │   │   │       │   └── ComplexTurnRestrictionTestCaseRule.java
        │               │   │   │       ├── roundabout/
        │               │   │   │       │   ├── ComplexRoundaboutTest.java
        │               │   │   │       │   └── ComplexRoundaboutTestRule.java
        │               │   │   │       └── water/
        │               │   │   │           ├── AbstractWaterIslandTest.java
        │               │   │   │           ├── ComplexHarborTestRule.java
        │               │   │   │           ├── ComplexHarbourTest.java
        │               │   │   │           ├── ComplexWaterEntityTest.java
        │               │   │   │           ├── ComplexWaterWayTest.java
        │               │   │   │           └── ComplexWaterWayTestRule.java
        │               │   │   ├── lightweight/
        │               │   │   │   ├── LightAreaTest.java
        │               │   │   │   ├── LightEdgeTest.java
        │               │   │   │   ├── LightLineTest.java
        │               │   │   │   ├── LightNodeTest.java
        │               │   │   │   ├── LightPointTest.java
        │               │   │   │   ├── LightRelationTest.java
        │               │   │   │   └── LightweightTestAtlasRule.java
        │               │   │   ├── multi/
        │               │   │   │   ├── MissingMultiEntityRelationTest.java
        │               │   │   │   ├── MultiAtlasOverlappingNodesFixerTest.java
        │               │   │   │   ├── MultiAtlasOverlappingNodesFixerTestRule.java
        │               │   │   │   ├── MultiAtlasTest.java
        │               │   │   │   └── MultiAtlasTestRule.java
        │               │   │   ├── packed/
        │               │   │   │   ├── PackedAtlasClonerTest.java
        │               │   │   │   ├── PackedAtlasSerializerTest.java
        │               │   │   │   ├── PackedAtlasTest.java
        │               │   │   │   ├── PackedAtlasTestRule.java
        │               │   │   │   ├── PackedRelationTest.java
        │               │   │   │   ├── PackedRelationTestCaseRule.java
        │               │   │   │   ├── RandomPackedAtlasBuilder.java
        │               │   │   │   └── RelationMultipolygonGeometryTest.java
        │               │   │   ├── pbf/
        │               │   │   │   ├── BridgeConfiguredFilterTest.java
        │               │   │   │   ├── OsmPbfIngestTest.java
        │               │   │   │   ├── OsmPbfNodeToAtlasItemTest.java
        │               │   │   │   ├── OsmPbfNodeToAtlasItemTestRule.java
        │               │   │   │   ├── OsmPbfWayToAtlasEdgeTranslationTest.java
        │               │   │   │   ├── OsmPbfWayToAtlasEdgeTranslationTestRule.java
        │               │   │   │   ├── OsmosisReaderMock.java
        │               │   │   │   ├── converters/
        │               │   │   │   │   ├── AtlasPrimitiveAreaToOsmosisWayConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveLineItemToOsmosisWayConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveLocationItemToOsmosisNodeConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveRelationToOsmosisRelationConverter.java
        │               │   │   │   │   ├── ItemTypeToEntityTypeConverter.java
        │               │   │   │   │   ├── LocationIterableToWayNodeListConverter.java
        │               │   │   │   │   └── LocationToOsmosisNodeConverter.java
        │               │   │   │   ├── slicing/
        │               │   │   │   │   └── identifier/
        │               │   │   │   │       └── ReverseIdentifierFactoryTest.java
        │               │   │   │   └── store/
        │               │   │   │       └── PbfOneWayTest.java
        │               │   │   ├── raw/
        │               │   │   │   ├── RawAtlasTest.java
        │               │   │   │   ├── creation/
        │               │   │   │   │   └── RawAtlasGeneratorTest.java
        │               │   │   │   ├── sectioning/
        │               │   │   │   │   ├── AtlasSectionProcessorTest.java
        │               │   │   │   │   └── WaySectionProcessorTestRule.java
        │               │   │   │   └── slicing/
        │               │   │   │       ├── RawAtlasSlicerTest.java
        │               │   │   │       └── RawAtlasSlicerTestRule.java
        │               │   │   ├── routing/
        │               │   │   │   ├── AStarRouterTest.java
        │               │   │   │   ├── AStarRouterTestRule.java
        │               │   │   │   ├── AllPathsRouterTest.java
        │               │   │   │   └── RoutingTestRule.java
        │               │   │   ├── statistics/
        │               │   │   │   ├── AtlasStatisticsTest.java
        │               │   │   │   ├── AtlasStatisticsTestRule.java
        │               │   │   │   ├── CounterTest.java
        │               │   │   │   └── coverage/
        │               │   │   │       └── poi/
        │               │   │   │           ├── CountCoverageTest.java
        │               │   │   │           └── CountCoverageTestCaseRule.java
        │               │   │   ├── validators/
        │               │   │   │   ├── AtlasEdgeValidatorTest.java
        │               │   │   │   ├── AtlasLineItemValidatorTest.java
        │               │   │   │   ├── AtlasLocationItemValidatorTest.java
        │               │   │   │   ├── AtlasNodeValidatorTest.java
        │               │   │   │   ├── AtlasRelationValidatorTest.java
        │               │   │   │   └── AtlasValidatorTest.java
        │               │   │   └── walker/
        │               │   │       ├── OsmWayWalkerTest.java
        │               │   │       ├── OsmWayWalkerTestRule.java
        │               │   │       ├── SimpleEdgeWalkerTest.java
        │               │   │       └── SimpleEdgeWalkerTestRule.java
        │               │   ├── boundary/
        │               │   │   ├── CountryBoundaryMapTest.java
        │               │   │   ├── CountryShardListingTest.java
        │               │   │   ├── CountryToShardListCacheTest.java
        │               │   │   └── converters/
        │               │   │       └── CountryBoundaryMapGeoJsonConverterTest.java
        │               │   ├── clipping/
        │               │   │   ├── GeometryOperationTest.java
        │               │   │   ├── MultiPolygonClipperTest.java
        │               │   │   └── PolygonClipperTest.java
        │               │   ├── converters/
        │               │   │   ├── GeodeticEarthCenteredEarthFixedConverterTest.java
        │               │   │   ├── MultiPolygonStringConverterTest.java
        │               │   │   ├── MultiplePolyLineToMultiPolygonConverterTest.java
        │               │   │   ├── MultiplePolyLineToPolygonsConverterCommandTest.java
        │               │   │   ├── MultiplePolyLineToPolygonsConverterTest.java
        │               │   │   ├── SlippyTileConverterTest.java
        │               │   │   ├── WkbMultiPolygonConverterTest.java
        │               │   │   ├── WkbPolyLineConverterTest.java
        │               │   │   ├── WkbPolygonConverterTest.java
        │               │   │   ├── WktMultiPolygonConverterTest.java
        │               │   │   └── WktPolygonConverterTest.java
        │               │   ├── coordinates/
        │               │   │   └── CoordinatesTest.java
        │               │   ├── geojson/
        │               │   │   ├── ConcatenateGeoJsonCommandTest.java
        │               │   │   ├── GeoJsonBuilderTest.java
        │               │   │   ├── GeoJsonUtilsTest.java
        │               │   │   └── parser/
        │               │   │       ├── domain/
        │               │   │       │   ├── bbox/
        │               │   │       │   │   └── DimensionsTest.java
        │               │   │       │   └── geometry/
        │               │   │       │       └── coordinate/
        │               │   │       │           └── CoordinatesTest.java
        │               │   │       ├── impl/
        │               │   │       │   └── jackson/
        │               │   │       │       ├── AbstractGeoJsonParserJacksonImplTestBase.java
        │               │   │       │       ├── GeoJsonParserJacksonImplExtensionsTest.java
        │               │   │       │       └── GeoJsonParserJacksonImplTest.java
        │               │   │       └── testdomain/
        │               │   │           ├── BeanA.java
        │               │   │           └── BeanB.java
        │               │   ├── index/
        │               │   │   └── SpatialIndexTest.java
        │               │   ├── matching/
        │               │   │   └── PolyLineMatchTest.java
        │               │   └── sharding/
        │               │       ├── CountryShardTest.java
        │               │       ├── DynamicTileShardingTest.java
        │               │       ├── GeoHashShardingTest.java
        │               │       ├── GeoHashTileTest.java
        │               │       ├── SlippyTileShardingTest.java
        │               │       ├── SlippyTileTest.java
        │               │       └── converters/
        │               │           ├── RectangleToSpatial4JRectangleConverterTest.java
        │               │           └── StringToShardConverterTest.java
        │               ├── locale/
        │               │   ├── IsoCountryFuzzyMatcherTest.java
        │               │   ├── IsoCountryTest.java
        │               │   └── IsoLanguageTest.java
        │               ├── proto/
        │               │   ├── FullProtoSuiteTest.java
        │               │   ├── adapters/
        │               │   │   ├── ProtoAtlasMetaDataAdapterTest.java
        │               │   │   ├── ProtoByteArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoIntegerArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoIntegerStringDictionaryAdapterTest.java
        │               │   │   ├── ProtoLongArrayAdapterTest.java
        │               │   │   ├── ProtoLongArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoLongToLongMapAdapterTest.java
        │               │   │   ├── ProtoLongToLongMultiMapAdapterTest.java
        │               │   │   ├── ProtoPackedTagStoreAdapterTest.java
        │               │   │   ├── ProtoPolyLineArrayAdapterTest.java
        │               │   │   └── ProtoPolygonArrayAdapterTest.java
        │               │   ├── builder/
        │               │   │   └── ProtoAtlasBuilderTest.java
        │               │   └── converters/
        │               │       ├── ProtoIntegerArrayOfArraysConverterTest.java
        │               │       ├── ProtoLocationConverterTest.java
        │               │       └── ProtoTagListConverterTest.java
        │               ├── streaming/
        │               │   ├── SplittableInputStreamTest.java
        │               │   ├── readers/
        │               │   │   ├── CsvReaderTest.java
        │               │   │   └── GeoJsonReaderTest.java
        │               │   ├── resource/
        │               │   │   ├── ByteArrayOutputStreamExceptional.java
        │               │   │   ├── FileSuffixTestCase.java
        │               │   │   ├── FileSuffixTestCaseResource.java
        │               │   │   ├── FileTest.java
        │               │   │   ├── InputStreamResourceCloseableTest.java
        │               │   │   ├── OutputStreamWritableResourceCloseableTest.java
        │               │   │   ├── ResourceTest.java
        │               │   │   └── zip/
        │               │   │       └── ZipResourceTest.java
        │               │   └── writers/
        │               │       └── JsonWriterTest.java
        │               ├── tags/
        │               │   ├── AbstractNameFinderTestCase.java
        │               │   ├── BarrierTagTestCase.java
        │               │   ├── BulkNameFinderForcedLocalizableTestCase.java
        │               │   ├── BulkNameFinderTestCase.java
        │               │   ├── CheckDateTagTestCase.java
        │               │   ├── ConstructionDateTagTestCase.java
        │               │   ├── DestinationTagTestCase.java
        │               │   ├── DisusedRailwayTagTestCase.java
        │               │   ├── EstimatedWidthTagTest.java
        │               │   ├── FerryTagTest.java
        │               │   ├── GetTagsTestCase.java
        │               │   ├── HeightTagTestCase.java
        │               │   ├── HighwayTagTestCase.java
        │               │   ├── ISOCountryTagTestCase.java
        │               │   ├── LayerTagTest.java
        │               │   ├── LocalizedTagNameWithOptionalDateTestCase.java
        │               │   ├── LocalizedTaggableTestCase.java
        │               │   ├── NameFinderTestCase.java
        │               │   ├── OpenDateTagTestCase.java
        │               │   ├── OpeningDateTagTestCase.java
        │               │   ├── ProtectClassTagTest.java
        │               │   ├── RailwayTagTestCase.java
        │               │   ├── SmoothnessTagTest.java
        │               │   ├── StandardNameFinderTestCase.java
        │               │   ├── SyntheticTagTestCase.java
        │               │   ├── TagTestSuite.java
        │               │   ├── TaggableTest.java
        │               │   ├── TemporaryDateOnTagTestCase.java
        │               │   ├── TestSyntheticTag.java
        │               │   ├── TurnLaneBackwardTagTestCase.java
        │               │   ├── TurnLaneForwardTagTestCase.java
        │               │   ├── TurnLaneTagTestCase.java
        │               │   ├── TurnTagTestCase.java
        │               │   ├── annotations/
        │               │   │   ├── extraction/
        │               │   │   │   ├── AltitudeExtractorTest.java
        │               │   │   │   ├── LengthExtractorTest.java
        │               │   │   │   ├── LongExtractorTestCase.java
        │               │   │   │   ├── OrdinalExtractorTestCase.java
        │               │   │   │   └── SpeedExtractorTest.java
        │               │   │   └── validation/
        │               │   │       ├── AddressFlatsTagTestCase.java
        │               │   │       ├── BaseTagTestCase.java
        │               │   │       ├── BuildingTagTestCase.java
        │               │   │       ├── DisusedShopTagTestCase.java
        │               │   │       ├── FromEnumTestCase.java
        │               │   │       ├── HighwayTagTestCase.java
        │               │   │       ├── ISOCountryTagTestCase.java
        │               │   │       ├── LastEditUserIdentifierTestCase.java
        │               │   │       ├── LayerTagTestCase.java
        │               │   │       ├── LengthValidatorTest.java
        │               │   │       ├── LevelTagTestCase.java
        │               │   │       ├── MaxHeightTagTestCase.java
        │               │   │       ├── MaxWidthTagTestCase.java
        │               │   │       ├── OpeningHoursTagTestCase.java
        │               │   │       ├── SpeedTagsTestCase.java
        │               │   │       ├── TagValidationTestSuite.java
        │               │   │       ├── TagValueAsTestCase.java
        │               │   │       ├── ValidatorsHasValuesForTestCase.java
        │               │   │       └── ValidatorsTestCase.java
        │               │   ├── cache/
        │               │   │   ├── TaggerTestCase.java
        │               │   │   └── TaggerTestRule.java
        │               │   ├── filters/
        │               │   │   ├── ConfiguredTaggableFilterTest.java
        │               │   │   ├── RegexTaggableFilterTest.java
        │               │   │   ├── TaggableFilterTest.java
        │               │   │   ├── TaggableFilterToMatcherConverterTest.java
        │               │   │   └── matcher/
        │               │   │       ├── ConfiguredTaggableMatcherTest.java
        │               │   │       ├── TaggableMatcherTest.java
        │               │   │       └── parsing/
        │               │   │           ├── LexerTest.java
        │               │   │           ├── ParserTest.java
        │               │   │           ├── SemanticCheckerTest.java
        │               │   │           └── tree/
        │               │   │               ├── ASTNodeTest.java
        │               │   │               └── TreePrinterTest.java
        │               │   └── oneway/
        │               │       └── OneWayTagTest.java
        │               ├── test/
        │               │   └── TestUtility.java
        │               └── utilities/
        │                   ├── archive/
        │                   │   └── ExtractorTest.java
        │                   ├── arrays/
        │                   │   └── LargeArrayTest.java
        │                   ├── caching/
        │                   │   ├── ConcurrentResourceCacheTest.java
        │                   │   ├── LocalFileInMemoryCacheTest.java
        │                   │   ├── ResourceCacheTest.java
        │                   │   └── strategies/
        │                   │       ├── ByteArrayCachingStrategyTest.java
        │                   │       ├── NamespaceCachingStrategiesTest.java
        │                   │       └── NoCachingStrategyTest.java
        │                   ├── checkstyle/
        │                   │   └── ArrangementCheckTest.java
        │                   ├── collections/
        │                   │   ├── EnumSetCollectorTestCase.java
        │                   │   ├── FilteredIterableTest.java
        │                   │   ├── FixedSizePriorityQueueTest.java
        │                   │   ├── IterablesAddAllTestCase.java
        │                   │   ├── IterablesTest.java
        │                   │   ├── MapsTest.java
        │                   │   ├── MultiIterableTest.java
        │                   │   ├── OptionalIterableTest.java
        │                   │   ├── ParallelIterableTest.java
        │                   │   ├── SetsTest.java
        │                   │   ├── ShardBucketCollectionTest.java
        │                   │   ├── ShardBucketCollectionTestClasses.java
        │                   │   ├── StreamIterableTest.java
        │                   │   ├── StringListTest.java
        │                   │   └── SubIterableTest.java
        │                   ├── command/
        │                   │   ├── SimpleOptionAndArgumentParserTest.java
        │                   │   └── subcommands/
        │                   │       ├── AnyToGeoJsonCommandTest.java
        │                   │       ├── AtlasDiffCommandTest.java
        │                   │       ├── AtlasDiffCommandTestRule.java
        │                   │       ├── AtlasMetadataReaderCommandTest.java
        │                   │       ├── AtlasSearchCommandTest.java
        │                   │       ├── AtlasShardingConverterCommandTest.java
        │                   │       ├── AtlasShellToolsDemoCommandTest.java
        │                   │       ├── ConcatenateAtlasCommandTest.java
        │                   │       ├── CountryBoundaryMapPrinterCommandTest.java
        │                   │       ├── CountryShardToBoundsCommandTest.java
        │                   │       ├── HelloWorldCommandTest.java
        │                   │       ├── IsoCountryCodeCommandTest.java
        │                   │       ├── JavaToProtoSerializationCommandTest.java
        │                   │       ├── OsmFileParserCommandTest.java
        │                   │       ├── OsmToAtlasCommandTest.java
        │                   │       ├── PackedToTextAtlasCommandTest.java
        │                   │       ├── PbfToAtlasCommandTest.java
        │                   │       ├── SubAtlasCommandTest.java
        │                   │       ├── TaggableMatcherPrinterCommandTest.java
        │                   │       ├── TemplateTestCommandTest.java
        │                   │       ├── WKTShardCommandTest.java
        │                   │       └── templates/
        │                   │           ├── AtlasLoaderCommandTest.java
        │                   │           ├── AtlasLoaderTemplateTest.java
        │                   │           ├── MultipleOutputCommandTest.java
        │                   │           └── OutputDirectoryTemplateTest.java
        │                   ├── configuration/
        │                   │   ├── ConfiguredFilterTest.java
        │                   │   ├── MergedConfigurationTest.java
        │                   │   └── StandardConfigurationTest.java
        │                   ├── conversion/
        │                   │   ├── HexStringByteArrayConverterTest.java
        │                   │   ├── StringToPredicateConverterTest.java
        │                   │   └── StringToPredicateConverterTestRule.java
        │                   ├── direction/
        │                   │   ├── EdgeDirectionComparatorTest.java
        │                   │   └── EdgeDirectionComparatorTestCaseRule.java
        │                   ├── filters/
        │                   │   ├── AtlasEntityPolygonsFilterTest.java
        │                   │   └── AtlasEntityPolygonsFilterTestRule.java
        │                   ├── graphs/
        │                   │   └── DirectedAcyclicGraphTest.java
        │                   ├── identifiers/
        │                   │   └── EntityIdentifierGeneratorTest.java
        │                   ├── jsoncompare/
        │                   │   ├── ArraysRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── DegenerateRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── MatchingRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── ObjectsRegularExpressionJSONComparatorTestCase.java
        │                   │   └── RegularExpressionJSONComparatorTestSuite.java
        │                   ├── maps/
        │                   │   ├── LargeMapTest.java
        │                   │   └── MultiMapTest.java
        │                   ├── matching/
        │                   │   └── NameMatcherTestCase.java
        │                   ├── random/
        │                   │   └── RandomTextGeneratorTest.java
        │                   ├── runtime/
        │                   │   ├── BooleanFlagTest.java
        │                   │   ├── FlagNameParsingRegressionTest.java
        │                   │   ├── RetryTest.java
        │                   │   ├── RunScriptTest.java
        │                   │   └── system/
        │                   │       ├── SystemInfoTest.java
        │                   │       └── memory/
        │                   │           └── MemoryTest.java
        │                   ├── scalars/
        │                   │   ├── AngleTest.java
        │                   │   ├── DistanceTest.java
        │                   │   ├── DoubleCounterTest.java
        │                   │   ├── DurationTest.java
        │                   │   ├── RatioTest.java
        │                   │   ├── SpeedTest.java
        │                   │   └── SurfaceTest.java
        │                   ├── statistic/
        │                   │   ├── CounterWithStatisticTest.java
        │                   │   ├── CustomizedStatisticTest.java
        │                   │   └── StatisticUtilsTest.java
        │                   ├── testing/
        │                   │   ├── AtlasFromTextTestCase.java
        │                   │   ├── AtlasFromTextTestCaseRule.java
        │                   │   ├── AtlasTestCase.java
        │                   │   ├── AtlasTestCaseRule.java
        │                   │   ├── BeanTestCase.java
        │                   │   ├── BeanTestCaseRule.java
        │                   │   ├── CoreTestExtension.java
        │                   │   ├── OsmFileParserTest.java
        │                   │   ├── SomeTestBean.java
        │                   │   ├── TestAtlasTest.java
        │                   │   └── TestAtlasTestRule.java
        │                   ├── threads/
        │                   │   └── PoolTest.java
        │                   ├── time/
        │                   │   └── LocalTimeTest.java
        │                   ├── timezone/
        │                   │   └── TimeZoneTest.java
        │                   ├── tuples/
        │                   │   ├── EitherTest.java
        │                   │   └── TupleTest.java
        │                   ├── unicode/
        │                   │   └── LoadingClassifierTestCase.java
        │                   └── vectortiles/
        │                       └── MinimumZoomTest.java
        └── resources/
            ├── aql-files/
            │   ├── test.aql
            │   ├── test1/
            │   │   └── test.aql
            │   └── test2/
            │       ├── test.aql
            │       ├── testA/
            │       │   ├── test.aql
            │       │   └── test.aql.sig
            │       └── testB/
            │           ├── test.aql
            │           ├── test.aql.sig
            │           ├── test2.aql
            │           └── test2.aql.sig
            ├── data/
            │   ├── Alcatraz/
            │   │   ├── Alcatraz.atlas.txt
            │   │   └── Alcatraz.osm
            │   ├── ButterflyPark/
            │   │   ├── ButterflyPark.atlas.txt
            │   │   └── ButterflyPark.osm
            │   └── polygon/
            │       └── jsonl/
            │           └── samples.jsonl
            ├── log4j.properties
            └── org/
                └── openstreetmap/
                    └── atlas/
                        ├── geography/
                        │   ├── MultiPolygonTestGeom1.wkt
                        │   ├── MultiPolygonTestGeom10.josm.osm
                        │   ├── MultiPolygonTestGeom2.josm.osm
                        │   ├── MultiPolygonTestGeom3.josm.osm
                        │   ├── MultiPolygonTestGeom4.josm.osm
                        │   ├── MultiPolygonTestGeom5.josm.osm
                        │   ├── MultiPolygonTestGeom6.josm.osm
                        │   ├── MultiPolygonTestGeom7.josm.osm
                        │   ├── MultiPolygonTestGeom8.josm.osm
                        │   ├── MultiPolygonTestGeom9.josm.osm
                        │   ├── atlas/
                        │   │   ├── ECU_6-16-31.atlas
                        │   │   ├── builder/
                        │   │   │   └── overpass-turbo.geojson
                        │   │   ├── change/
                        │   │   │   ├── ChangeAtlasTest.josm.osm
                        │   │   │   ├── ChangeAtlasTestEdge.josm.osm
                        │   │   │   ├── MultipleChangeAtlasTest.atlas.txt
                        │   │   │   ├── MultipleChangeAtlasTest.osm
                        │   │   │   ├── diff/
                        │   │   │   │   ├── DiffAtlas1.josm.osm
                        │   │   │   │   └── DiffAtlas2.josm.osm
                        │   │   │   ├── nodeBoundsExpansionAtlas.josm.osm
                        │   │   │   └── serializer/
                        │   │   │       ├── change.json
                        │   │   │       ├── serializedAddEdgeWithDescription.json
                        │   │   │       ├── serializedAddRelationWithDescription.json
                        │   │   │       ├── serializedAreaFull.json
                        │   │   │       ├── serializedAreaNull.json
                        │   │   │       ├── serializedAreaRemove.json
                        │   │   │       ├── serializedEdgeFull.json
                        │   │   │       ├── serializedEdgeNull.json
                        │   │   │       ├── serializedEdgeRemove.json
                        │   │   │       ├── serializedLineFull.json
                        │   │   │       ├── serializedLineNull.json
                        │   │   │       ├── serializedLineRemove.json
                        │   │   │       ├── serializedNodeFull.json
                        │   │   │       ├── serializedNodeNull.json
                        │   │   │       ├── serializedNodeRemove.json
                        │   │   │       ├── serializedPointFull.json
                        │   │   │       ├── serializedPointNull.json
                        │   │   │       ├── serializedPointRemove.json
                        │   │   │       ├── serializedPointWithTags.json
                        │   │   │       ├── serializedRelationFull.json
                        │   │   │       ├── serializedRelationNull.json
                        │   │   │       ├── serializedRelationRemove.json
                        │   │   │       ├── serializedRemoveAreaWithDescription.json
                        │   │   │       ├── serializedReverseWay.json
                        │   │   │       └── serializedUpdateEdgeWithDescription.json
                        │   │   ├── command/
                        │   │   │   ├── DNK_Copenhagen/
                        │   │   │   │   ├── DNK_1.atlas.txt
                        │   │   │   │   ├── DNK_2.atlas.txt
                        │   │   │   │   └── DNK_3.atlas.txt
                        │   │   │   ├── atlas-edge.json
                        │   │   │   ├── atlas-way-section.json
                        │   │   │   ├── complex-SF.txt
                        │   │   │   ├── continent_map.txt
                        │   │   │   ├── osm-pbf-node.json
                        │   │   │   ├── osm-pbf-relation.json
                        │   │   │   ├── osm-pbf-way.json
                        │   │   │   └── world_islands.osm.pbf
                        │   │   ├── dynamic/
                        │   │   │   └── rules/
                        │   │   │       ├── DynamicAtlasAgressiveRelationsTest_11-998-708.josm.osm
                        │   │   │       ├── DynamicAtlasAgressiveRelationsTest_11-999-708.josm.osm
                        │   │   │       ├── DynamicAtlasMovingTooFastTest.osm
                        │   │   │       ├── DynamicAtlasPartialInitialShardsTest.osm
                        │   │   │       ├── DynamicAtlasPreemptiveLoadTest.osm
                        │   │   │       ├── DynamicAtlasRestrainedExpansionWithPolygonTest.osm
                        │   │   │       ├── z12all.atlas.geojson
                        │   │   │       ├── z12x1349y1869.atlas.geojson
                        │   │   │       ├── z12x1349y1869.geojson
                        │   │   │       ├── z12x1349y1870.atlas.geojson
                        │   │   │       ├── z12x1349y1870.geojson
                        │   │   │       ├── z12x1350y1869.atlas.geojson
                        │   │   │       ├── z12x1350y1869.geojson
                        │   │   │       ├── z12x1350y1870.atlas.geojson
                        │   │   │       └── z12x1350y1870.geojson
                        │   │   ├── items/
                        │   │   │   ├── complex/
                        │   │   │   │   ├── InnerOuterMultiPolygon.osm
                        │   │   │   │   ├── bignode/
                        │   │   │   │   │   ├── dnk-link-road-test.osm
                        │   │   │   │   │   ├── u-turn-shape-edge.osm
                        │   │   │   │   │   └── ukr-link-road-test.osm
                        │   │   │   │   ├── buildings/
                        │   │   │   │   │   ├── building_block_atlas.txt
                        │   │   │   │   │   ├── building_with_levels.txt
                        │   │   │   │   │   └── building_with_minheights.txt
                        │   │   │   │   ├── restriction/
                        │   │   │   │   │   └── atlasBrokenTurnRestrictionRoute.josm.osm
                        │   │   │   │   └── water/
                        │   │   │   │       ├── canalAsRelation.atlas.txt
                        │   │   │   │       ├── canalAsRelationOfCanals.atlas.txt
                        │   │   │   │       ├── harborAsArea.atlas.txt
                        │   │   │   │       └── harborAsRelation.atlas.txt
                        │   │   │   └── intersectionAtlas.atlas.txt
                        │   │   ├── line-delimited-geojson.txt
                        │   │   ├── pbf/
                        │   │   │   ├── AIA_boundary.txt
                        │   │   │   ├── DMA_boundary.txt
                        │   │   │   ├── DNK_SWE_boundary.txt
                        │   │   │   ├── bridgeConfiguredFilter1.json
                        │   │   │   ├── bridgeConfiguredFilter2.json
                        │   │   │   ├── edge-filter.json
                        │   │   │   ├── ferryRelation5831018.osm
                        │   │   │   ├── noRelationNoTagsAtIntersectionAtlas.osm
                        │   │   │   ├── noRelationNoTagsNoIntersectionAtlas.osm
                        │   │   │   ├── noRelationWithTagsAtIntersectionAtlas.osm
                        │   │   │   ├── noRelationWithTagsNoIntersectionAtlas.osm
                        │   │   │   ├── one_way_roads_in_AIA.osm
                        │   │   │   ├── osmPbfProcessorTest_keepOutsideWaysThatAreConnected.osm
                        │   │   │   ├── outsideConnectedOneWayWays.osm
                        │   │   │   ├── partOfRelationNoTagsAtIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationNoTagsNoIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationWithTagsAtIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationWithTagsNoIntersectionAtlas.osm
                        │   │   │   └── partialRelation4451979.osm
                        │   │   ├── raw/
                        │   │   │   ├── DMA_boundary.txt
                        │   │   │   ├── DNK_SWE_boundary.txt
                        │   │   │   ├── creation/
                        │   │   │   │   ├── 7-105-51.osm.pbf
                        │   │   │   │   ├── 9-433-268.osm.pbf
                        │   │   │   │   ├── nestedSingleRelations.josm.osm
                        │   │   │   │   ├── nestedSingleRelations.osm
                        │   │   │   │   └── nestedSingleRelations.osm.pbf
                        │   │   │   ├── osmPbfProcessorTest_keepOutsideWaysThatAreConnected.osm
                        │   │   │   ├── outsideConnectedOneWayWays.osm
                        │   │   │   └── sectioning/
                        │   │   │       ├── bidirectionalRing.atlas.txt
                        │   │   │       ├── lineWithBarrier.atlas.txt
                        │   │   │       ├── lineWithInvalidOverlappingGeometry.atlas.txt
                        │   │   │       ├── lineWithLessThanTwoNodesDueToRepeatedLocationAtEndOfLine.atlas.txt
                        │   │   │       ├── lineWithLoopAtEnd.atlas.txt
                        │   │   │       ├── lineWithLoopAtStart.atlas.txt
                        │   │   │       ├── lineWithLoopInMiddle.atlas.txt
                        │   │   │       ├── lineWithRepeatedLocation.atlas.txt
                        │   │   │       ├── loopWithRepeatedLocation.atlas.txt
                        │   │   │       ├── loopingWayWithIntersection.atlas.txt
                        │   │   │       ├── malformedPolyLine.atlas.txt
                        │   │   │       ├── malformedPolyLineBoundaryMap.txt
                        │   │   │       ├── nestedRelationRemoval.atlas.txt
                        │   │   │       ├── nestedRelationRemovalBoundaryMap.txt
                        │   │   │       ├── nodeAndPointAsRelationMember.atlas.txt
                        │   │   │       ├── nodeAndPointRelationMemberBoundaryMap.txt
                        │   │   │       ├── oneWayRing.atlas.txt
                        │   │   │       ├── oneWaySimpleLine.atlas.txt
                        │   │   │       ├── pedestrianRing.atlas.txt
                        │   │   │       ├── rawAtlasSpanningOutsideBoundary.atlas.txt
                        │   │   │       ├── reversedOneWayLine.atlas.txt
                        │   │   │       ├── ringWithSingleIntersection.atlas.txt
                        │   │   │       ├── roundAbout.atlas.txt
                        │   │   │       ├── selfIntersectingLoop.atlas.txt
                        │   │   │       ├── simpleBiDirectionalLine.atlas.txt
                        │   │   │       └── wayExceedingSectioningLimit.atlas.txt
                        │   │   ├── statistics/
                        │   │   │   ├── addressAtlas.josm.osm
                        │   │   │   ├── ferryAtlas.josm.osm
                        │   │   │   ├── refsAtlas.josm.osm
                        │   │   │   └── waterAtlas.josm.osm
                        │   │   └── walker/
                        │   │       ├── OsmWayWalker-Way169884263.atlas.txt
                        │   │       └── OsmWayWalker-Way30647513.atlas.txt
                        │   ├── boundary/
                        │   │   ├── AAA_boundary.expected.json
                        │   │   ├── AAA_boundary.txt
                        │   │   ├── DMA_boundary.txt
                        │   │   ├── DMA_snake_polyline.wkt
                        │   │   ├── HTI_boundary.txt
                        │   │   ├── USA_HTI_overlapping.atlas.txt
                        │   │   ├── USA_boundary_reduced.txt
                        │   │   ├── ZAF_osm_shards_with_14.txt
                        │   │   ├── countryToShardList.txt
                        │   │   ├── duplicate_shape.dbf
                        │   │   ├── duplicate_shape.prj
                        │   │   ├── duplicate_shape.qpj
                        │   │   ├── duplicate_shape.shp
                        │   │   ├── duplicate_shape.shx
                        │   │   └── slicing-filter.json
                        │   ├── clipping/
                        │   │   ├── testHuggingPolygons.josm.osm
                        │   │   ├── testOverlappingPolygonsToMultiPolygon.josm.osm
                        │   │   ├── testOverlappingPolygonsToPolygon.josm.osm
                        │   │   └── testTouchingPolygons.josm.osm
                        │   ├── converters/
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_crossingPolyLines.txt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_expectedPolygons.txt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorInner1.wkt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorInner2.wkt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorOuter.wkt
                        │   │   └── MultiplePolyLineToPolygonsConverterTest_multiplePolyLines.txt
                        │   ├── fourSelfIntersectingPolygon.osm
                        │   ├── geojson/
                        │   │   ├── concatenated_geojson_files_expected
                        │   │   ├── parser/
                        │   │   │   ├── beanA.json
                        │   │   │   ├── beanBWithArray.json
                        │   │   │   ├── beanBWithoutArray.json
                        │   │   │   ├── description1.json
                        │   │   │   ├── descriptor1.json
                        │   │   │   ├── descriptor2.json
                        │   │   │   ├── descriptor3.json
                        │   │   │   ├── feature1.json
                        │   │   │   ├── feature2.json
                        │   │   │   ├── featureChangeProperties.json
                        │   │   │   ├── featureChangePropertiesBad1.json
                        │   │   │   ├── featureChangePropertiesBad2.json
                        │   │   │   ├── featureChangePropertiesExample1.json
                        │   │   │   ├── featureChangePropertiesExample2.json
                        │   │   │   ├── featureChangePropertiesRelationMemberDescriptor.json
                        │   │   │   ├── featureCollection1.json
                        │   │   │   ├── featureWithExtendedProperties.json
                        │   │   │   ├── foreignFieldsNested.json
                        │   │   │   ├── foreignFieldsSimple.json
                        │   │   │   ├── geometryCollectionBasic.json
                        │   │   │   ├── geometryCollectionChildConversion.json
                        │   │   │   ├── geometryCollectionRecursiveNested.json
                        │   │   │   ├── lineString.json
                        │   │   │   ├── lineStringConversion.json
                        │   │   │   ├── multiLineString.json
                        │   │   │   ├── multiLineStringConversion.json
                        │   │   │   ├── multiPoint.json
                        │   │   │   ├── multiPointConversion.json
                        │   │   │   ├── multiPolygon.json
                        │   │   │   ├── multiPolygonConversion.json
                        │   │   │   ├── multiPolygonDonut.json
                        │   │   │   ├── point.json
                        │   │   │   ├── pointConversion.json
                        │   │   │   ├── pointWithBbox2D.json
                        │   │   │   ├── pointWithBbox3D.json
                        │   │   │   ├── polygon.json
                        │   │   │   ├── polygonConversion.json
                        │   │   │   ├── propertiesNested.json
                        │   │   │   └── propertiesSimple.json
                        │   │   ├── test1.geojson
                        │   │   ├── test2.geojson
                        │   │   └── test3.geojson
                        │   ├── polygonWithFlatZeroAreaPart.osm
                        │   ├── polygonWithInclinedZeroArea.osm
                        │   ├── selfIntersectingPolygon.osm
                        │   └── sharding/
                        │       ├── testDynamicSharding.txt
                        │       ├── testDynamicShardingChildOrdering.txt
                        │       └── testDynamicShardingMissingChildren.txt
                        ├── streaming/
                        │   └── readers/
                        │       ├── data.csv
                        │       ├── geojson-multipolygon.json
                        │       ├── geojson-point.json
                        │       ├── geojson-polygon.json
                        │       ├── geojson-sample.json
                        │       └── wrongData.csv
                        ├── tags/
                        │   └── filters/
                        │       ├── matcher/
                        │       │   └── test-matching.json
                        │       └── test-filtering.json
                        └── utilities/
                            ├── checkstyle/
                            │   ├── ArrangementCheckRight.java
                            │   ├── ArrangementCheckWrongField0.java
                            │   ├── ArrangementCheckWrongField1.java
                            │   ├── ArrangementCheckWrongField2.java
                            │   ├── ArrangementCheckWrongInitializerBlock.java
                            │   ├── ArrangementCheckWrongInitializerStaticBlock.java
                            │   ├── ArrangementCheckWrongMethodModifier.java
                            │   ├── ArrangementCheckWrongMethodName.java
                            │   ├── ArrangementCheckWrongMethodVisibility1.java
                            │   └── ArrangementCheckWrongMethodVisibility2.java
                            ├── command/
                            │   └── subcommands/
                            │       ├── AtlasDiffCommandAtlas1.josm.osm
                            │       ├── AtlasDiffCommandAtlas2.josm.osm
                            │       ├── AtlasDiffCommandAtlas3.josm.osm
                            │       ├── AtlasDiffCommandAtlas4.josm.osm
                            │       ├── CountryBoundaryMapPrinterCommandTestBoundaries.txt
                            │       ├── MAF_AIA_osm_boundaries_with_grid_index.txt
                            │       ├── MultiPolygonTest.josm.osm
                            │       ├── MultiPolygonTest.osm
                            │       ├── expected-json-features.txt
                            │       ├── sharding-tree-1-expected.geojson
                            │       ├── sharding-tree-1.txt
                            │       ├── shardingConverter.josm.osm
                            │       ├── templates/
                            │       │   ├── atlas1.atlas.txt
                            │       │   ├── atlas2.atlas.txt
                            │       │   └── atlas_malformed.atlas.txt
                            │       ├── testPbf2Atlas.josm.osm
                            │       ├── test_boundary.txt
                            │       └── test_boundary_expected.geojson
                            ├── configuration/
                            │   ├── ConfiguredFilterTest.json
                            │   ├── ConfiguredFilterTestOtherRoot.json
                            │   ├── application.json
                            │   ├── application.yml
                            │   ├── development.json
                            │   ├── development.yml
                            │   ├── developmentOverriding.json
                            │   ├── developmentOverriding.yml
                            │   ├── feature.json
                            │   ├── feature.yml
                            │   ├── geometryFilter.josm.osm
                            │   ├── keywordOverridingApplication.json
                            │   ├── keywordOverridingApplication.yml
                            │   ├── yaml_dot_compressed.yml
                            │   └── yaml_dot_expanded.yml
                            ├── filters/
                            │   ├── includeExcludePolygonArrangements.osm
                            │   ├── multiPolygons.osm
                            │   ├── testCounts.osm
                            │   └── testForms.osm
                            └── testing/
                                ├── josmOsmFile.osm
                                ├── osmFile.osm
                                └── test.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .circleci/config.yml
================================================
# Java Gradle CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-java/ for more details
#
version: 2
general:
  branches:
    only:
      - main
      - dev
jobs:
  build:
    docker:
      - image: circleci/openjdk:11-jdk

    working_directory: ~/repo

    environment:
      JVM_OPTS: -Xmx3200m
      TERM: dumb

    steps:
      - checkout
      # - run: if [ -z "$SONAR_TOKEN" ]; then echo "SONAR_TOKEN missing"; else echo "SONAR_TOKEN is here"; fi
      # - run: echo $SONAR_TOKEN
      # Run jar first, as the checkstyle plugin depends on atlas itself here.
      - run:
          name: Quality checks (No tests)
          command: ./gradlew jar check -x test -x integrationTest
      - run:
          name: Tests
          command: ./gradlew check
          no_output_timeout: 30m
      # - run: .circleci/sonar.sh
      # - run: ./gradlew cleanPyatlas buildPyatlas


================================================
FILE: .circleci/sonar.sh
================================================
#!/usr/bin/env sh

if [ -z "$CIRCLE_PR_NUMBER" ];
then
    echo "Running sonarqube in a regular build"
    echo "sonar.branch.name=$CIRCLE_BRANCH"
	#TODO: Remove echo below
	echo ./gradlew jacocoTestReport sonarqube \
		-Dsonar.branch.name=$CIRCLE_BRANCH \
		-Dsonar.organization=osmlab \
		-Dsonar.host.url=https://sonarcloud.io \
		-Dsonar.login=$SONAR_TOKEN \
		-Dsonar.junit.reportPaths=build/test-results/test \
		-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml
else
    CIRCLE_PR_BRANCH=`curl -s https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pulls/$CIRCLE_PR_NUMBER | jq -r '.head.ref'`
    CIRCLE_PR_TARGET_BRANCH=`curl -s https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pulls/$CIRCLE_PR_NUMBER | jq -r '.base.ref'`
	SONAR_PULLREQUEST_BRANCH="$CIRCLE_PR_USERNAME/$CIRCLE_PR_BRANCH"
	echo "Running sonarqube in Pull Request $CIRCLE_PR_NUMBER"
	echo "sonar.pullrequest.key=$CIRCLE_PR_NUMBER"
	echo "sonar.pullrequest.branch=$SONAR_PULLREQUEST_BRANCH"
	echo "sonar.pullrequest.base=$CIRCLE_PR_TARGET_BRANCH"
	#TODO: Remove echo below
	echo ./gradlew jacocoTestReport sonarqube \
		-Dsonar.organization=osmlab \
		-Dsonar.host.url=https://sonarcloud.io \
		-Dsonar.login=$SONAR_TOKEN \
		-Dsonar.junit.reportPaths=build/test-results/test \
		-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \
		-Dsonar.pullrequest.key=$CIRCLE_PR_NUMBER \
		-Dsonar.pullrequest.branch=$SONAR_PULLREQUEST_BRANCH \
		-Dsonar.pullrequest.base=$CIRCLE_PR_TARGET_BRANCH \
		-Dsonar.pullrequest.provider=github \
		-Dsonar.pullrequest.github.repository=osmlab/atlas \
		-Dsonar.pullrequest.github.endpoint=https://api.github.com/ \
		-Dsonar.pullrequest.github.token.secured=$SONAR_PR_DECORATION_GITHUB_TOKEN
fi


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Description:

Add description here.

### Potential Impact:

List potential impact to downstream libraries here (ex. atlas-checks, atlas-generator)

### Unit Test Approach:

Describe unit tests being added with that PR.

### Test Results:

Describe other (non-unit) test results here.

------

In doubt: [Contributing Guidelines](CONTRIBUTING.md)


================================================
FILE: .github/workflow_scripts/decrypt_gpg_key.sh
================================================
#!/bin/sh

# Decrypt the file

if [ "$MANUAL_RELEASE_TRIGGERED" = "true" ];
then
    # --batch to prevent interactive command
    # --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$GPG_AES256_PASSPHRASE" \
    --output "$GPG_KEY_LOCATION" .github/workflow_data/secret.gpg.aes256

    chmod 700 "$GPG_KEY_LOCATION"
else
    echo "Not decrypting key, since MANUAL_RELEASE_TRIGGERED=$MANUAL_RELEASE_TRIGGERED"
fi


================================================
FILE: .github/workflow_scripts/deploy.sh
================================================
#!/bin/sh

CURRENT_BRANCH=$(echo "$GITHUB_REF" | awk 'BEGIN { FS = "/" } ; { print $3 }')
echo "Criterion for Publishing artifacts to Maven Central:"
echo "Current Branch (Should be main): $CURRENT_BRANCH"
echo "Pull Request (Should be empty): $GITHUB_HEAD_REF"
echo "Manual Release Triggered (Should be true): $MANUAL_RELEASE_TRIGGERED"

if [ "$CURRENT_BRANCH" = "main" ] && [ -z "$GITHUB_HEAD_REF" ];
then
    echo "On branch main, not in a Pull Request"
    if [ "$MANUAL_RELEASE_TRIGGERED" = "true" ];
    then
        echo "Sign, Upload archives to local repo, Upload archives to Sonatype, Close and release repository."
        ./gradlew publish publishToNexusAndClose
        #python -m pip install --user --upgrade twine
        #twine upload ./pyatlas/dist/*
    else
        echo "Not publishing artifacts, since MANUAL_RELEASE_TRIGGERED=$MANUAL_RELEASE_TRIGGERED"
    fi
else
    echo "Not publishing artifacts, since not on branch main, or in a Pull Request"
fi


================================================
FILE: .github/workflow_scripts/merge-dev-to-main.sh
================================================
#!/usr/bin/env sh

GITHUB_REPO="osmlab/atlas"
MERGE_BRANCH=main
SOURCE_BRANCH=dev

FUNCTION_NAME="merge-$SOURCE_BRANCH-to-$MERGE_BRANCH"
CURRENT_BRANCH=$(echo "$GITHUB_REF" | awk 'BEGIN { FS = "/" } ; { print $3 }')

echo "$FUNCTION_NAME: $GITHUB_REPO"
echo "$FUNCTION_NAME: CURRENT_BRANCH = $CURRENT_BRANCH"
echo "$FUNCTION_NAME: GITHUB_HEAD_REF = $GITHUB_HEAD_REF"

if [ "$CURRENT_BRANCH" != "$SOURCE_BRANCH" ];
then
    echo "$FUNCTION_NAME: Exiting! Branch is not $SOURCE_BRANCH: ($CURRENT_BRANCH)"
    exit 0;
fi

if [ -n "$GITHUB_HEAD_REF" ];
then
    PULL_REQUEST_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')
    echo "$FUNCTION_NAME: Exiting! This is a Pull Request: $PULL_REQUEST_NUMBER"
    exit 0;
fi

: ${MERGE_TAG_GITHUB_SECRET_TOKEN:?"MERGE_TAG_GITHUB_SECRET_TOKEN needs to be set in the workflow yml file!"}
: ${GITHUB_SHA:?"GITHUB_SHA needs to be available to tag the right commit!"}

TEMPORARY_REPOSITORY=$(mktemp -d)
git clone "https://github.com/$GITHUB_REPO" "$TEMPORARY_REPOSITORY"
cd "$TEMPORARY_REPOSITORY"

echo "Checking out $SOURCE_BRANCH"
git checkout $SOURCE_BRANCH
git checkout -b tomerge "$GITHUB_SHA"

echo "Checking out $MERGE_BRANCH"
git checkout "$MERGE_BRANCH"

echo "Merging temporary branch tomerge ($GITHUB_SHA) from $SOURCE_BRANCH into $MERGE_BRANCH"
git merge --ff-only "tomerge"

echo "Pushing to $GITHUB_REPO"
# Redirect to /dev/null to avoid secret leakage
git push "https://$MERGE_TAG_GITHUB_SECRET_TOKEN@github.com/$GITHUB_REPO" "$MERGE_BRANCH" > /dev/null 2>&1


================================================
FILE: .github/workflow_scripts/sonar.sh
================================================
#!/usr/bin/env sh

if [ -n "$GITHUB_HEAD_REF" ];
then
    PULL_REQUEST_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')
    echo "Running sonarqube in Pull Request $PULL_REQUEST_NUMBER"
    echo "sonar.pullrequest.key=$PULL_REQUEST_NUMBER"
    echo "sonar.pullrequest.branch=$GITHUB_HEAD_REF"
    echo "sonar.pullrequest.base=$GITHUB_BASE_REF"
    ./gradlew jacocoTestReport sonarqube \
        -Dsonar.organization=osmlab \
        -Dsonar.host.url=https://sonarcloud.io \
        -Dsonar.login="$SONAR_TOKEN" \
        -Dsonar.junit.reportPaths=build/test-results/test \
        -Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \
        -Dsonar.pullrequest.key="$PULL_REQUEST_NUMBER" \
        -Dsonar.pullrequest.branch="$GITHUB_HEAD_REF" \
        -Dsonar.pullrequest.base="$GITHUB_BASE_REF" \
        -Dsonar.pullrequest.provider=github \
        -Dsonar.pullrequest.github.repository=osmlab/atlas \
        -Dsonar.pullrequest.github.endpoint=https://api.github.com/ \
        -Dsonar.pullrequest.github.token.secured="$SONAR_PR_DECORATION_GITHUB_TOKEN"
else
    CURRENT_BRANCH=$(echo "$GITHUB_REF" | awk 'BEGIN { FS = "/" } ; { print $3 }')
    echo "Running sonarqube in branch $CURRENT_BRANCH"
    ./gradlew jacocoTestReport sonarqube \
        -Dsonar.branch.name="$CURRENT_BRANCH" \
        -Dsonar.organization=osmlab \
        -Dsonar.host.url=https://sonarcloud.io \
        -Dsonar.login="$SONAR_TOKEN" \
        -Dsonar.junit.reportPaths=build/test-results/test \
        -Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml
fi


================================================
FILE: .github/workflow_scripts/tag-main.sh
================================================
#!/usr/bin/env sh

GITHUB_REPO="osmlab/atlas"
RELEASE_BRANCH=main

FUNCTION_NAME="tag-$RELEASE_BRANCH"
CURRENT_BRANCH=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')

echo "$FUNCTION_NAME: $GITHUB_REPO"
echo "$FUNCTION_NAME: CURRENT_BRANCH = $CURRENT_BRANCH"
echo "$FUNCTION_NAME: GITHUB_HEAD_REF = $GITHUB_HEAD_REF"

if [ "$CURRENT_BRANCH" != "$RELEASE_BRANCH" ];
then
    echo "$FUNCTION_NAME: Exiting! Branch is not $RELEASE_BRANCH: ($CURRENT_BRANCH)"
    exit 0;
fi

if [ -n "$GITHUB_HEAD_REF" ];
then
    PULL_REQUEST_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')
    echo "$FUNCTION_NAME: Exiting! This is a Pull Request: $PULL_REQUEST_NUMBER"
    exit 0;
fi

if [ "$MANUAL_RELEASE_TRIGGERED" != "true" ];
then
    echo "$FUNCTION_NAME: Exiting! This is not a release build."
    exit 0;
fi

: ${MERGE_TAG_GITHUB_SECRET_TOKEN:?"MERGE_TAG_GITHUB_SECRET_TOKEN needs to be set in the workflow yml file!"}
: ${GITHUB_SHA:?"GITHUB_SHA needs to be available to tag the right commit!"}

export GIT_COMMITTER_EMAIL="github-actions@github.com"
export GIT_COMMITTER_NAME="Github Actions CI"

TEMPORARY_REPOSITORY=$(mktemp -d)
git clone "https://github.com/$GITHUB_REPO" "$TEMPORARY_REPOSITORY"
cd "$TEMPORARY_REPOSITORY"

echo "Checking out $RELEASE_BRANCH (commit $GITHUB_SHA)"
git checkout $GITHUB_SHA

PROJECT_VERSION=$(cat gradle.properties | grep "\-SNAPSHOT" | awk -F '=' '{print $2}' | awk -F '-' '{print $1}')
: ${PROJECT_VERSION:?"PROJECT_VERSION could not be found."}

echo "Tagging $RELEASE_BRANCH (commit $GITHUB_SHA) at version $PROJECT_VERSION"
git tag -a $PROJECT_VERSION -m "Release $PROJECT_VERSION"

echo "Pushing tag $PROJECT_VERSION to $GITHUB_REPO"
# Redirect to /dev/null to avoid secret leakage
git push "https://$MERGE_TAG_GITHUB_SECRET_TOKEN@github.com/$GITHUB_REPO" "$PROJECT_VERSION" > /dev/null 2>&1


================================================
FILE: .github/workflow_scripts/update_project_version.sh
================================================
#!/bin/sh

CURRENT_BRANCH=$(echo "$GITHUB_REF" | awk 'BEGIN { FS = "/" } ; { print $3 }')
echo "Current Branch: $CURRENT_BRANCH"

if [ "$CURRENT_BRANCH" = "main" ] && [ "$MANUAL_RELEASE_TRIGGERED" = "true" ];
then
	echo "This is a manual release, change the version locally to remove the -SNAPSHOT"
	sed -i "s/-SNAPSHOT//g" gradle.properties
else
	echo "Not a manual release, keeping -SNAPSHOT"
fi


================================================
FILE: .github/workflows/ci.yml
================================================
name: Continuous Integration

on:
  push:
    branches: [ main, dev ]
  pull_request:
    branches: [ dev ]
  workflow_dispatch:
    inputs:
      MANUAL_RELEASE_TRIGGERED:
        description: "Environment Variable used to trigger a Maven Central release"
        required: false
        default: "true"

jobs:
  build:

    runs-on: ubuntu-latest

    steps:

# Setup
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v4
      with:
        distribution: 'zulu'
        java-version: 11
#    - name: Set up Python
#      uses: actions/setup-python@v2
#      with:
#        python-version: 3.7
#    - name: Install Virtualenv
#      run: pip install virtualenv
    - name: Install GEOS
      run: sudo apt-get install libgeos-dev
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Grant execute permission for Github Actions Workflows
      run: chmod -R ug+x .github/workflow_scripts
    - name: For release builds, remove -SNAPSHOT
      env:
        MANUAL_RELEASE_TRIGGERED: ${{ github.event.inputs.MANUAL_RELEASE_TRIGGERED }}
      run: .github/workflow_scripts/update_project_version.sh

# Quality Checks
#    - name: ShellCheck PyAtlas
#      run: shellcheck pyatlas/*.sh
#    - name: Build PyAtlas
#      run: ./gradlew cleanPyatlas buildPyatlas
    - name: Quality checks (No tests)
      run: ./gradlew jar check -x test -x integrationTest
    - name: Tests
      run: ./gradlew check build
#    - name: Sonar
#      env:
#        SONAR_TOKEN: 374d4e512b90257ba50c21c37202ee01af40c6a0
#        SONAR_PR_DECORATION_GITHUB_TOKEN: ${{ secrets.SONAR_PR_DECORATION_GITHUB_TOKEN }}
#      run: .github/workflow_scripts/sonar.sh

# Merge to Main
    - name: Merge dev to main
      env:
        MERGE_TAG_GITHUB_SECRET_TOKEN: ${{ secrets.MERGE_TAG_GITHUB_SECRET_TOKEN }}
      run: .github/workflow_scripts/merge-dev-to-main.sh

# Sign and Publish
    - name: Decrypt GPG key (To sign artifacts)
      env:
        GPG_KEY_LOCATION: secring.gpg
        GPG_AES256_PASSPHRASE: ${{ secrets.GPG_AES256_PASSPHRASE }}
        MANUAL_RELEASE_TRIGGERED: ${{ github.event.inputs.MANUAL_RELEASE_TRIGGERED }}
      run: .github/workflow_scripts/decrypt_gpg_key.sh
    - name: Sign and Upload Archives
      env:
        GPG_KEY_LOCATION: secring.gpg
        GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
        GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
        SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
        SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
        MANUAL_RELEASE_TRIGGERED: ${{ github.event.inputs.MANUAL_RELEASE_TRIGGERED }}
      run: .github/workflow_scripts/deploy.sh
    - name: Tag main branch
      env:
        MANUAL_RELEASE_TRIGGERED: ${{ github.event.inputs.MANUAL_RELEASE_TRIGGERED }}
        MERGE_TAG_GITHUB_SECRET_TOKEN: ${{ secrets.MERGE_TAG_GITHUB_SECRET_TOKEN }}
      run: .github/workflow_scripts/tag-main.sh


================================================
FILE: .gitignore
================================================
**/build/
**/bin/
.classpath
.project
.settings
.checkstyle
.gradle
.out
.dist
*.ipr
*.iml
*.iws
*.ws~
.idea/
/tags
/build/
.DS_Store
**/.DS_Store
**/out/
/bin/
**/ignored/
src/generated/
**/gradle/
gradlew*

# pyatlas stuff
*_pb2.py
*.pyc
pyatlas/dist/
pyatlas/pyatlas.egg-info/
__*venv__
pyatlas/protoc
pyatlas/doc/*.html
pyatlas/LICENSE


================================================
FILE: .travis/build-pyatlas-gate.sh
================================================
#!/usr/bin/env sh

if [ $TRAVIS_TEST_RESULT -eq 0 ];
then
	./gradlew cleanPyatlas buildPyatlas
	RETURN_VALUE=$?
	if [ "$RETURN_VALUE" != "0" ];
	then
		exit $RETURN_VALUE
	fi
fi


================================================
FILE: .travis/build.sh
================================================
#!/usr/bin/env sh

chmod u+x gradlew

if [ "$MANUAL_RELEASE_TRIGGERED" = "true" ];
then
	# This is a release job, triggered manually
	# Change the version locally to remove the -SNAPSHOT
	sed -i "s/-SNAPSHOT//g" gradle.properties
	echo "This is a manual release!"
else
	echo "Not a manual release"
fi

if [ "$TRAVIS_PULL_REQUEST" != "false" ];
then
	./gradlew clean build
else
	./gradlew clean build
fi


================================================
FILE: .travis/deploy-gate.sh
================================================
#!/usr/bin/env sh

if [ $TRAVIS_TEST_RESULT -eq 0 ];
then
	.travis/deploy.sh
	RETURN_VALUE=$?
	if [ "$RETURN_VALUE" != "0" ];
	then
		exit $RETURN_VALUE
	fi
fi


================================================
FILE: .travis/deploy.sh
================================================
#!/usr/bin/env sh

if [ "$TRAVIS_BRANCH" = "main" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ];
then
	if [ "$MANUAL_RELEASE_TRIGGERED" = "true" ];
	then
		echo "Sign, Upload archives to local repo, Upload archives to Sonatype, Close and release repository."
		./gradlew uploadArchives publishToNexusAndClose
		#python -m pip install --user --upgrade twine
		#twine upload ./pyatlas/dist/*
	fi
fi


================================================
FILE: .travis/install.sh
================================================
#!/usr/bin/env sh

if [ "$TRAVIS_BRANCH" = "main" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ];
then
    openssl aes-256-cbc -K $encrypted_7b323cc104d6_key -iv $encrypted_7b323cc104d6_iv -in $ENCRYPTED_GPG_KEY_LOCATION -out $GPG_KEY_LOCATION -d
fi


================================================
FILE: .travis/merge-dev-to-main-gate.sh
================================================
#!/usr/bin/env sh

if [ $TRAVIS_TEST_RESULT -eq 0 ];
then
	.travis/merge-dev-to-main.sh
	RETURN_VALUE=$?
	if [ "$RETURN_VALUE" != "0" ];
	then
		exit $RETURN_VALUE
	fi
fi


================================================
FILE: .travis/merge-dev-to-main.sh
================================================
#!/usr/bin/env sh

GITHUB_REPO="osmlab/atlas"
MERGE_BRANCH=main
SOURCE_BRANCH=dev

FUNCTION_NAME="merge-$SOURCE_BRANCH-to-$MERGE_BRANCH"

echo "$FUNCTION_NAME: $GITHUB_REPO"
echo "$FUNCTION_NAME: TRAVIS_BRANCH = $TRAVIS_BRANCH"
echo "$FUNCTION_NAME: TRAVIS_PULL_REQUEST = $TRAVIS_PULL_REQUEST"

if [ "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ];
then
	echo "$FUNCTION_NAME: Exiting! Branch is not $SOURCE_BRANCH: ($TRAVIS_BRANCH)"
    exit 0;
fi

if [ "$TRAVIS_PULL_REQUEST" != "false" ];
then
	echo "$FUNCTION_NAME: Exiting! This is a Pull Request: $TRAVIS_PULL_REQUEST"
    exit 0;
fi

: ${GITHUB_SECRET_TOKEN:?"GITHUB_SECRET_TOKEN needs to be set in .travis.yml!"}
: ${TRAVIS_COMMIT:?"TRAVIS_COMMIT needs to be available to merge the right commit to main!"}

TEMPORARY_REPOSITORY=$(mktemp -d)
git clone "https://github.com/$GITHUB_REPO" "$TEMPORARY_REPOSITORY"
cd $TEMPORARY_REPOSITORY

echo "Checking out $SOURCE_BRANCH"
git checkout $SOURCE_BRANCH
git checkout -b tomerge $TRAVIS_COMMIT

echo "Checking out $MERGE_BRANCH"
git checkout $MERGE_BRANCH

echo "Merging temporary branch tomerge ($TRAVIS_COMMIT) from $SOURCE_BRANCH into $MERGE_BRANCH"
git merge --ff-only "tomerge"

echo "Pushing to $GITHUB_REPO"
# Redirect to /dev/null to avoid secret leakage
git push "https://$GITHUB_SECRET_TOKEN@github.com/$GITHUB_REPO" $MERGE_BRANCH > /dev/null 2>&1


================================================
FILE: .travis/sonar-gate.sh
================================================
#!/usr/bin/env sh

if [ $TRAVIS_TEST_RESULT -eq 0 ];
then
	.travis/sonar.sh
	RETURN_VALUE=$?
	if [ "$RETURN_VALUE" != "0" ];
	then
		exit $RETURN_VALUE
	fi
fi


================================================
FILE: .travis/sonar.sh
================================================
#!/usr/bin/env sh

if [ "$TRAVIS_PULL_REQUEST" != "false" ];
then
	SONAR_PULLREQUEST_BRANCH="$(echo $TRAVIS_PULL_REQUEST_SLUG | awk '{split($0,a,"/"); print a[1]}')/$TRAVIS_PULL_REQUEST_BRANCH"
	echo "Running sonarqube in Pull Request $TRAVIS_PULL_REQUEST"
	echo "sonar.pullrequest.key=$TRAVIS_PULL_REQUEST"
	echo "sonar.pullrequest.branch=$SONAR_PULLREQUEST_BRANCH"
	echo "sonar.pullrequest.base=$TRAVIS_BRANCH"
	./gradlew jacocoTestReport sonarqube \
		-Dsonar.organization=osmlab \
		-Dsonar.host.url=https://sonarcloud.io \
		-Dsonar.login=$SONAR_TOKEN \
		-Dsonar.junit.reportPaths=build/test-results/test \
		-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \
		-Dsonar.pullrequest.key=$TRAVIS_PULL_REQUEST \
		-Dsonar.pullrequest.branch=$SONAR_PULLREQUEST_BRANCH \
		-Dsonar.pullrequest.base=$TRAVIS_BRANCH \
		-Dsonar.pullrequest.provider=github \
		-Dsonar.pullrequest.github.repository=osmlab/atlas \
		-Dsonar.pullrequest.github.endpoint=https://api.github.com/ \
		-Dsonar.pullrequest.github.token.secured=$SONAR_PR_DECORATION_GITHUB_TOKEN
else
	echo "Running sonarqube in a regular build"
	./gradlew jacocoTestReport sonarqube \
		-Dsonar.branch.name=$TRAVIS_BRANCH \
		-Dsonar.organization=osmlab \
		-Dsonar.host.url=https://sonarcloud.io \
		-Dsonar.login=$SONAR_TOKEN \
		-Dsonar.junit.reportPaths=build/test-results/test \
		-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml
fi


================================================
FILE: .travis/tag-main-gate.sh
================================================
#!/usr/bin/env sh

if [ $TRAVIS_TEST_RESULT -eq 0 ];
then
	.travis/tag-main.sh
	RETURN_VALUE=$?
	if [ "$RETURN_VALUE" != "0" ];
	then
		exit $RETURN_VALUE
	fi
fi


================================================
FILE: .travis/tag-main.sh
================================================
#!/usr/bin/env sh

GITHUB_REPO="osmlab/atlas"
RELEASE_BRANCH=main

FUNCTION_NAME="tag-$RELEASE_BRANCH"

echo "$FUNCTION_NAME: $GITHUB_REPO"
echo "$FUNCTION_NAME: TRAVIS_BRANCH = $TRAVIS_BRANCH"
echo "$FUNCTION_NAME: TRAVIS_PULL_REQUEST = $TRAVIS_PULL_REQUEST"

if [ "$TRAVIS_BRANCH" != "$RELEASE_BRANCH" ];
then
	echo "$FUNCTION_NAME: Exiting! Branch is not $RELEASE_BRANCH: ($TRAVIS_BRANCH)"
    exit 0;
fi

if [ "$TRAVIS_PULL_REQUEST" != "false" ];
then
	echo "$FUNCTION_NAME: Exiting! This is a Pull Request: $TRAVIS_PULL_REQUEST"
    exit 0;
fi

if [ "$MANUAL_RELEASE_TRIGGERED" != "true" ];
then
	echo "$FUNCTION_NAME: Exiting! This is not a release build."
    exit 0;
fi

: ${GITHUB_SECRET_TOKEN:?"GITHUB_SECRET_TOKEN needs to be set in .travis.yml!"}
: ${TRAVIS_COMMIT:?"TRAVIS_COMMIT needs to be available to tag the right commit!"}

export GIT_COMMITTER_EMAIL="travis@travis.org"
export GIT_COMMITTER_NAME="Travis CI"

TEMPORARY_REPOSITORY=$(mktemp -d)
git clone "https://github.com/$GITHUB_REPO" "$TEMPORARY_REPOSITORY"
cd $TEMPORARY_REPOSITORY

echo "Checking out $RELEASE_BRANCH (commit $TRAVIS_COMMIT)"
git checkout $TRAVIS_COMMIT

PROJECT_VERSION=$(cat gradle.properties | grep "\-SNAPSHOT" | awk -F '=' '{print $2}' | awk -F '-' '{print $1}')
: ${PROJECT_VERSION:?"PROJECT_VERSION could not be found."}

echo "Tagging $RELEASE_BRANCH (commit $TRAVIS_COMMIT) at version $PROJECT_VERSION"
git tag -a $PROJECT_VERSION -m "Release $PROJECT_VERSION"

echo "Pushing tag $PROJECT_VERSION to $GITHUB_REPO"
# Redirect to /dev/null to avoid secret leakage
git push "https://$GITHUB_SECRET_TOKEN@github.com/$GITHUB_REPO" $PROJECT_VERSION > /dev/null 2>&1


================================================
FILE: .travis/trigger-release.sh
================================================
#!/usr/bin/env sh

# Use Travis to trigger a release from Main

GITHUB_ORGANIZATION=osmlab
GITHUB_REPOSITORY_NAME=atlas

# Assumptions
# - This is called from the root of the project
# - The travis client is installed: gem install travis
# - travis login --org has been called to authenticate

TRAVIS_PERSONAL_TOKEN=$(travis token)

: ${TRAVIS_PERSONAL_TOKEN:?"TRAVIS_PERSONAL_TOKEN needs to be set to access the Travis API to trigger the build"}

body='
{
	"request":
	{
		"branch": "main",
		"config":
		{
			"before_script": "export MANUAL_RELEASE_TRIGGERED=true"
		}
	}
}'

curl -s -X POST \
	-H "Content-Type: application/json" \
	-H "Accept: application/json" \
	-H "Travis-API-Version: 3" \
	-H "Authorization: token $TRAVIS_PERSONAL_TOKEN" \
	-d "$body" \
	https://api.travis-ci.org/repo/$GITHUB_ORGANIZATION%2F$GITHUB_REPOSITORY_NAME/requests


================================================
FILE: .travis.yml
================================================
env:
  global:
    - # GITHUB_SECRET_TOKEN
    - secure: "hYLV25stwJ4GX1BXlr7AOdeLHDCE7z395ibQAo0NDCnCqDZdoD3ySZAJteWxuBu3kpWQ1QUsCmOMn3A8m3DzqZnWQB4Hrp0aY/d5oC50LFFBbuBvuj8gqcog1t80fLAKDNNGlSxjYDPOlBVkHwez706zun0frmy3zHJ3TnfhM66CUnZ0UlKDzHwpXSplEHXJKARIX94A4O0aBsBusoHpbLYC1jqhQJWjH1D/gEcxqd2CNDRDge/xK4BZp9YiiQ1b9JSmw5D2fc1F2rXFv7FWWc9YoJt0HFGxJezVw+kmLEEJH3rk6TNxYPobsTYkwsoie6yKhwWN9xCBVmIXAzhFxjmdd02hlyAuNuK49qDKzFcFxlie3cgjxHFBdfKI/FY5jyRhcvS+IiV02qdNb+g9+Mfwz4SXFbJGUwiSM7VG/ezKxxMi9vjSisfeHSPrVNNDEbS2Nqdu/9zF1IjTsYTY6jTOMBM7hx+u0UpDEA09S280w0wZw+lym9RO3HGQvyZOEFYOQB1/IBvzDvOmWs+IrRFxgKytiZGoHMAZBL9uhYq0arqIs7GcD0ULtWRAba4X7Z1ll2kuIfUe1MruLpEGdABVLxUOwUdFLQwOl6WGL+paCSqXMghpXxP0Lfo8onjI7hLhu1bWdYQrcvnZnyQ1AwxilYjKkZc8wf9KsKeZrpk="
    - # SONATYPE_USERNAME
    - secure: "E4anu/qe0DoKRrC6eHqYu6jYb69N5xgGnsb/yq4Fjb/6MPH3Hqe3VIny+iC/TmmG5qSeQR8FG5FM/Q9CAi0lb1kT8/UgRJdy81cfsmq1kIqhv7I1xxmwIHXLwtc14Bfjw2yhKobjCSQ4f3BhCX7H1q0GLTQRalg7PDUXLIP7Za5CWtKv7XH7Uywfz0f2pOHQ72Leqb/k93ZHGAUNHWVce++CzP+MupVQqTkR15I3DRcxH3IVj/pKGDg5u7xyDQ34lXQNSn6O19Ahbp/a2EnHjoIGSzt5pUjGtijVUqbUG++d0F9avqXhrvknADbSziUn/WaxUGypwfBXFYQ7pzZq1Wb41dngMmyszuSFuDYkLshm9aggJY+/fxSa1jKzWxi/0ArMA3dbbEHNEPjoE7Sp2bsK2yFJrx6R5F9qlNW8D7dvrMU4mx9ykJAce/6aD3l4QdZbmOYlaxdtMaf7DsRxM86LAzEiu7c+FrWqwdroR9TvWq6YYLb4Lwv5LotmhN9i68CPEq/ohiPRHhoD66WXJlEYirVd5o26z02IFWwxCvYP5yZM+3e7pXPM7WGvBwkvqM1kMmJ0NLSZAZr4gxv+AS3t4fvwrxWEVOMC9N7DVr3m9KiwD92OEP0tKY8N727/fr+ybfvPM6bgqGFKu4WDHZWSz27PWvckLhZ+PLBUoMM="
    - # SONATYPE_PASSWORD
    - secure: "sZ3l0cznOkcMF+z7TE0SELgXNmF+RSPl+HX/kNEvVU3vDNNztbGTuaZsGZIQEYvw3FpTzGawMQB+yU+HCVlMOgllvQM7H5X/GYRrWlUNomlx8Flpc0GImz8HCUiJLtZyYO/1nFetmZmPDkMY0MgPstlduNz//+K/c+RzhGIEmNZ0FzAzdNArlgjcWMWKUARcUTf2uwb4rVvkYOhX2RcfcgZ+BJMPYR4svHV8F0U8PiHqn8DOcYAeLmlMVOZ3f3fpYFHQN9tWGoVtdMEMCPBlUcVq3/L9gp4mhj3YE7OTOAYtjfl14WktIGZ2wK2nvNHwsYqx7DeEYg/Gswap0/8xEJhf5gW5Gd6sTIVfpeLojaYacHEcLK/olqDevqKaFxxnN3hUlS6M7k8D9n6j0ZxMYKFDMja8/OduOccs69wz7/tN2RPiqWH10wh+wKDJx/vjvyq5ozmKfh3ebZn87l9hWtDGi53ZRpfqv3GFce/29kOyj0YwTYuIPG10/w6wsSoRqVl4t/WXgAPWMmodLbo9PqvAjVJuFxbfWv60UICg8zmPadc0+t4GkfE7VXI+46jU9ZGoWAWuf4CzmGhsuDkbBh1rhg1R6Xdg8nupWGuDE1rEfEHr6yhq1hcXxxnEXoZZChbRqabjlUDnXtBpCjjimjq4a+LEgWyufCG95EaWthc="
    - # GPG_KEY_ID
    - secure: "ow4WEQXjjCi8hBfLNnhtuOorOn0k//K3QBGALcwynDpJIOxwvrV2jJPcNjoQ4aNmeE5a+zl/JomtUBz0mASe9j/JTGhhqrYC1Tpgoo3naEvFdOaucaTG2RV3u2jv0UdQm+wU4APf9t2HbzrZaa+SDMJwF/qpgH2gUE6v0wEQQyZJvuk9EKDsZL+dZkM5UlSGFJ1bUzgvHPEVXrj/gsh0NOQ7BUdjwfIpxKytUXLmQWs8NkP5ptygeifpaJ+D7IQ5HTJCthZ/MuInAIkD0bDPc0nbjhZSriZzCOUlhLDxb7F/iHUomQhm/EvcvMOmCtyDuaEZZxOEK2+lpOcoaMvRj/cXqY2tLQJgjgC95Ka3GvB7m7UY1QCoRWePUrHAbcZYCugD4vx5y8GJqxdBgtOMbI5blzSsaY7D/knXv2lAp8JBPylrNQJQPty1gl7Hp6CFwa1WkKh7C3mBl2a8oyYXlKIqd+NSGQGbWoy+ULv77tH15L2KwTdxYllQY2P1xj+k6CsEmRfTK8lW7c7AhbmHsW5gqGjK3rFThTPurwaJ92rsc4AusiW3uor3/z13zuHH+kgH58dc6h21lmouchvw4177xxj5aPjA09puRikGhEr2SyVwu2h1HU5+l/YwVOEMJZ6oDfYwug4ktmPjFRvF+PEo/Dw6kCBcCerVh7A0EL8="
    - # GPG_PASSPHRASE
    - secure: "gGAS4pDztf35LwEAj7tuA5rYuh9F3lFqUJ/jW+AkIeS4yaQVB5xvj3Wx6pqFpQyGvr0XYmUYDKTfPxHyXI6Rsr2JEtYHRcYhJXWYmTmfX/rzflN7yvmbkq1Io9UA7q28ZqCirrEoigT+sI6jA5hOdvmYX+kUAju5U1moMDRRn9GGOnoE1rB74mnpo4Pl1OvMk0XTZSMMAnTG2FmpQMBVJkJFz81e+xUGcUa0X25U3nLVvnVf2gwbC0Mhi87ITlH4twzsEBr5nJJNrlidDca6OCWv96pKB1VI1/dgVOBUmQudMKxeAYgwxPepyC1jpMyABC+JWQAvUFu275c/hNPTs5pUdvw6FSEgELjkPwoLjamSLCO8NIfymIXurm7c+3z8FZeA+ny3XWvC7loREh8XpzUoAxzbZP3h9GqDhLljtIdquZp2sEVMRfMCGoe5Gb1YPRlDYPQxgTk2SlZMwjPQitv9wF3QFWSbL3p/f/0qYkOSYYb0XshMu9Q+66kkpLflY9XIXEqAylODXTAjfIOIXQxO+rwBapEDNAhtFK2gSdjztwZDm3cF+V4HNonLstvSHGKUl5ki2f7+/SdzizwLY6RQ1ufwuhRt0hkeUHK+AYOaq2J0yduEJKzMr4PJUPb2r/F6ecplE0vPOXu93E63+E57NbeoB6ESV7YTx1sCnEY="
    - # TWINE_USERNAME
    - secure: "IP7AYNIUI5BtUF5I2/8I+JaAERe9UKUEKrxB8BTvndpC3wF+FlZyzbESl2DUgGV/8JiIAbpHnuAlR0Tm/R0NdFMtqy+QwBAuVkGCI3UPrZ4uWiQGWqnZ/wqH+uX0zZAXNvikvfz2lJfJyHpggIQWegn1MN75ypqvr1MgzpOKHF1RPcFL+MkW8GmfO6S1YMm0+FVffv5DRagZ8ouzS0HwW8t1UfRhVFCanUafgdDt8s3yvhKCMnjq2Q5of+yr6Vcr3wH3IUWF+6rMI8fLo9yr3bG3gP2GnVfxq7JtvgZH7GpZ+5PH9D9Cg7HoWb2Ggt2edFyCRCTYKgqivYUruzd8V9k/a6+JmWByi5QqZSCSQ/ZZOxF7yHz+5vKOwYHJjBg+4qq+CIN+o3cKorqLQ3UFPA8Oaat8WPdB5inAyzfVha5RXP5pucwYTFtnZAojTImYEXKGCK9x7oIjJFoLlVkZO8Wa7GuguG0IloM6tACL4uWognEUMHXADKmjWohcgcwa71PA3I2ZIbdIkoVjjD9RofWfImG/vVu/im3z2BDiuYYbg0kCXn23PD9aPTlJWsJ2XPLARjQlBWrSkvbaX233VLzKKQH3wHq6O1+qBYEFqILT1kBUJfEBseJfMBCwwJajGGDxswZ63n2sKC3UI+WBRZynNgkxhDLqwZKjR9VpxAk="
    - # TWINE_PASSWORD
    - secure: "Nymg9duf3qwC6BAZqGTtoxmYWa5qy/FbTk8Rqy3GAa/YxtfyOHqClwCzY454cO5pIs5K1Z72Y8C/EpzsK3OHVDRQDNYpkJbhvYrHh7lCfl5EsuGQxp8eieXdAlwaDcDCjHIwcZXMaxZqQTKfMoJHzNQf3ktzjBXnUS6d7MygPIVcfCCIpFM40K/qVGvVY+nF2nakd/uveEifEENnts43PfMUr7aXo4WtrCNTOq9OFATnAOMNn/dt0Qx8Rx5HBvfLeXDBUUCHY2Bnc33WTCQWu2uP6KceGtKotWnFhuVxMNbxBPzRmGmiBYzoFydlnYB/t7UgLUJK1r9y+F0SB7mlK1kU6jNW1VYm/1gkNujzxQhKr8Z5CsB+K3ytxFG1W5OMGCfiZYVtz6C2scbEW6HJaogS/7yTPd4/tahxE/7Pf9Aa6RppcZsrz88kHKThkPxzAbgslMLieCIJFI+kkIrr02om3kSSSJq9XfW33YC5FdUpZbm/1DqkFxvm5sawwu8u1I951OgsYbsJWRuquWedeDnxen7fijeDizYsL9J7PcpgsPXr8gNOFbyTD8dCP2fpLi35iRqvjJOqspQ5wiLprUB5Hoj/La/XloCqws+8cjGw4IP/6dmRrimyuEs6g5RsIMAWUhpdhZm95sfe09sSKtXmMj/g/eYrTgxZbED7Hd8="
    - # SONAR_TOKEN
    - secure: "F7d2WgJMrUe6GMGZaob3wBxXC4mSRUq23M18L7bGzrjFhF2eIGqwGBIfpzVuNO1lq3J6AVHwNsal1RiEg+beIsvXC1fOPJwa/FY1QcXWyi7pvdDAPsaRDzBpdZU4sKLbs6bnotiHAx8jMD6T1JFi87Qf2wit2UG/HSjSCOVF8AvONwFaU2Hv4nisvE6gdOcXEo5y3kUruJ3DKbnHyGKtuYacYkmsn90wroNJCSiGtJ3lACyxy5oqq5QX9JU971et3wQtfy1wwTovCsZcSBEg+XnHGlxEDacVb0/m5pbvLep8LKOaDrsxGrMYerJiO2NBVA5b+xI+esVBk8LhhL9BtMXWKMBQ0I/+GhfdThrws97nJhC7DdEh1xhW/bcVg9mkuTXekNgucXCor43xKohUGEwa7efe2upiNpRZMelMgTJzb/dyC/BhNkU3YGZaNuPWWPp4j9aORJ/ul4aMOtPcFW/YX/ZLSszd6Y57B9yGfGlCyYKeFIAabCOi1RXp03eqssAfb+WLNW3AAnRji9NGXIx0LZSAL+Q5V2KJE+t4+45VHJbdUD1Rvu31bEtCg8Qy6X8ySZRxWLmPHiEVHzi7ZAOQ46JaVLRrZfaCYT6TpT6cQ7hUkeWBOEdnEQbpuJaI2SfwQIo/1wfqfJSP2EAr+iQEAYBd/kfooECQK9pozrs="
    - # SONAR_PR_DECORATION_GITHUB_TOKEN
    - secure: "tf1efkXd1zFeIb0CZimlpO39ECIl7yZz5fbO0+Fmx9NTptyguOQOZwEecgkoaIEyCSM25lXeUiGsPbheHWRF5ifs7+2axqM2BeMPX9Yd1frYaQ5yNBcqTmrMKYGkXsovMSZU3qDiQcDTzFotHydsO+KPGIs7LhPYLTw7Y4dDEMUqNAvzBLHUf0reMm5h+0CBIxOfMgSjW73wxBp1baqVvqpj5qM9R07e3EdpnMPszX5HZTvOAWqjLrh0re20wU0aNrMld5xfkP7qkSMO1zC68fzRWnFcwGCIt2FP9Vy7AgV8eq1dIqk+EdnilfY4Gq7KhwML+k0b3qmYWDS4NCc5j4EXrAWZLffoY4dYZp4hnv0JLCI+lq1fSn8Je0+AadmW9NjOKZyWg4iNTaHcBVA52OlWxw7KE4cTccuOwpbQXeatR8ayrYALV0UEc+F14bLZAkswbCA10XV4ghe1gLeCCjtqde1D/oltumR6lcXxsRsOGzAdf9DO0fuIJyvhFhKbSp51MFn0Fo5/SQMuZTO6P/YBnVIuzEZDo8xkhMczUxqB+kc2tlFns+BWt0J1H39G9WEGtgn28bUIDZA5CaY2WAwuFRSy95GFSYXkyNi6cm8Iu9xJ/PjZcLCyeQpviLE8am3oc9Mhjx6RMnTh1nc/B8TtuWTVU+PwuVnJzqo+F44="
    - GPG_KEY_LOCATION=".travis/secring.gpg"
    - ENCRYPTED_GPG_KEY_LOCATION=".travis/secring.gpg.enc"
branches:
  only:
  - main
  - dev
language: java
dist: xenial
jdk:
  - openjdk11
before_install:
  - chmod -R ug+x .travis
  - .travis/install.sh
script:
  - chmod -R ug+x .travis
  - set -e
  - shellcheck pyatlas/*.sh
  - set +e
  - .travis/build.sh
  - .travis/build-pyatlas-gate.sh
  # - .travis/sonar-gate.sh
  # - .travis/merge-dev-to-main-gate.sh
  - .travis/deploy-gate.sh
  - .travis/tag-main-gate.sh


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Atlas

Thanks for taking the time to contribute!

## Where to ask a question

This project uses [StackOverflow](https://stackoverflow.com/) to handle all software related questions. If unsure about an issue, please first ask a question on StackOverflow, and then file an issue if necessary. Do not ask questions in GitHub issues as those will be closed and redirected to StackOverflow.

## Suggestions and bug reports

### Reporting bugs

If you have found a bug to report, that is great! Please search for similar bugs in GitHub issues, as your bug might have been filed already. If not, filing a GitHub issue is the next thing to do!

### Filing a Github issue

When submitting an issue, here is the information to include:

* Title: Use a title that is as self explanatory as possible
* Summary: Detailed description of the issue, including screenshots and/or stack traces
* Steps to reproduce: Do not forget to include links to data samples that can help in reproducing the issue
* Actual vs. Expected: Describe the results and how they differ from the expected behavior
* Workaround: If you have found a temporary workaround the issue, please also include it there!

### Suggesting enhancements

Enhancements are also handled with GitHub issues. Make sure to include the following:

* Title: Use a title that is as self explanatory as possible
* Summary: Use-case description of the proposed enhancement
* Desired: Describe the desired behavior of the proposed enhancement
* Implementation proposal: If you have an idea of how to implement the enhancement

## Submitting code

### Requirements

* OpenJDK 11
* Gradle

### First contribution

The first step would be to fork the project in your own github account, then clone the project locally using `git clone`. Then use gradle to build the code, and run tests:

```
cd <my clone location>
./gradlew build
```

Atlas is serialized using protobuf. The proto-generated sources are not checked-in to the repository, so any IDE setup requires to run `./gradlew build` to generate the proto-generated sources in the project. At that point, the IDE of your choice will be able to resolve all the necessary classes.

To start contributing to your fork, the best way is to make sure that your IDE is setup to follow the [code formatting template](config/format/code_format.xml).

Once you have fixed an issue or added a new feature, it is time to submit [a pull request](#pull-request-guidelines)!

### Building

You can build a shaded JAR that will allow you to execute atlas. 

#### Log4j Properties

Make sure you first have a `log4j.properties` file in `src/main/resources`. 
Alternatively, you can have as a VM parameter:

``` 
-Dlog4j.configuration=file://<path_to_config>
```

https://github.com/osmlab/atlas-checks/blob/dev/config/log4j/log4j.properties

Then, you can build your shaded JAR with:

``` 
./gradlew shaded
```

From there, you can run command line tools in atlas, like the following:

``` 
java -cp atlas-5.1.8-SNAPSHOT-shaded.jar org.openstreetmap.atlas.geography.atlas.delta.AtlasDeltaGenerator <args...>
```

#### IntelliJ Setup

IntellJ IDEA works pretty much out of the box. However, you still need to mess with log4j. First, add a 
`log4j.properties` file to your project or your VM Options.

Also, you need to manually add [slf4j-simple.jar](https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25) 
to your Project Module Dependencies:

    File > Project Structure > Modules > Dependencies

In `atlas_main` add the the JAR that you downloaded.

![slf4j in Intellij](images/slf4j.png)

### Code formatting

The project's code is checked by Checkstyle as part of the `gradle check` step.

There also is an eclipse code formatting template [here](config/format/code_format.xml) that is used by [Spotless](https://github.com/diffplug/spotless) to check that the formatting rules are being followed. In case those are not, the `gradle spotlessCheck` step will fail and the build will not pass. Spotless provides an easy fix though, with `gradle spotlessApply` which will refactor your code so it follows the formatting guidelines.

### Testing

The codebase contains an extensive range of unit tests, and integration tests. Unit tests are supposed to run fairly fast. If the test takes a long time to run, we put it in the integrationTest repository, to allow users to run them only when wanted. All the tests will be run for every pull request build, though! When contributing new code, make sure to not break existing tests (or modify them and explain why the modification is needed) and to add new tests for new features.

### Pull Request Guidelines

Pull requests comments should follow the template below:

* An as extensive as reasonable description of the change proposed, in easy to read [Markdown](https://guides.github.com/features/mastering-markdown/), with as many code snippet examples, screen captures links and diagrams as possible
* A Benefit/Drawback analysis: what does this improve, and at what cost? Is the performance impacted or improved?
* Label: If applicable, apply one of the available labels to the pull request


================================================
FILE: LICENSE
================================================
Copyright (c) 2015-2024, Apple Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:  

    1. Redistributions of source code must retain the above copyright notice, 
       this list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright notice, 
       this list of conditions and the following disclaimer in the documentation 
       and/or other materials provided with the distribution.

    3. Neither the name of the copyright holder(s) nor the names of any 
       contributors may be used to endorse or promote products derived from this 
       software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================
# Atlas

![Continuous Integration](https://github.com/osmlab/atlas/workflows/Continuous%20Integration/badge.svg?branch=main)
[![quality gate](https://sonarcloud.io/api/project_badges/measure?project=org.openstreetmap.atlas%3Aatlas&metric=alert_status)](https://sonarcloud.io/dashboard?id=org.openstreetmap.atlas%3Aatlas)
[![Maven Central](https://img.shields.io/maven-central/v/org.openstreetmap.atlas/atlas.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22org.openstreetmap.atlas%22%20AND%20a:%22atlas%22)
[![CircleCI](https://circleci.com/gh/osmlab/atlas/tree/main.svg?style=shield)](https://circleci.com/gh/osmlab/atlas/tree/main)

---

[`Atlas`](src/main/java/org/openstreetmap/atlas/geography/atlas/Atlas.java) is a way to efficiently represent [OpenStreetMap](http://www.openstreetmap.org/) data in memory. A subset of the data is in a "navigable network" form, meaning anything that is assumed to be navigable will be in a form of `Node`s and `Edge`s in a way a routing algorithm could traverse it. It also provides easy to use APIs to access geographical data. On top of it all, it is easy to shard and re-stitch, making it perfect for distributed processing!

Projects using Atlas:
* [atlas-generator](https://github.com/osmlab/atlas-generator): A Spark job to distribute Atlas shards generation
* [atlas-checks](https://github.com/osmlab/atlas-checks): A suite of tools to check OSM data integrity using Atlas, and Spark.
* [josm-atlas](https://github.com/osmlab/josm-atlas): A JOSM plugin to visualize Atlas data.

# Getting started

For build instructions and to contribute, please see the [contributing guidelines](CONTRIBUTING.md).

Start playing with Atlas directly with [this sample project](/sample)!

# APIs

Language|Level
---|---
[Java](/src/main/java/org/openstreetmap/atlas/geography/atlas#using-atlas)|Full feature
[Python](/pyatlas#pyatlas)|Basic

# What's in it?

* A uni-directional navigable network ([`Edge`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Edge.java), [`Node`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Node.java))
* Non-navigable features ([`Area`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Area.java), [`Line`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Line.java), [`Point`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Point.java), [`Relation`](src/main/java/org/openstreetmap/atlas/geography/atlas/items/Relation.java))
* All tags

As well as other handy tools:

* [Create it from `.osm.pbf`](/src/main/java/org/openstreetmap/atlas/geography/atlas#building-an-atlas-from-an-osmpbf-file)
* [Sharding](/src/main/java/org/openstreetmap/atlas/geography/sharding#sharding)
* [Shard Stitching](/src/main/java/org/openstreetmap/atlas/geography/atlas/multi#multiatlas)
* [Shard Exploration](/src/main/java/org/openstreetmap/atlas/geography/atlas/dynamic#dynamicatlas)
* [Tag Filtering](/src/main/java/org/openstreetmap/atlas/tags/filters#tag-filtering)
* [Atlas Filtering](/src/main/java/org/openstreetmap/atlas/geography/atlas#filtering-an-atlas)
* [PBF Ingest](/src/main/java/org/openstreetmap/atlas/geography/atlas/raw/creation)
* [Country Slicing](/src/main/java/org/openstreetmap/atlas/geography/atlas/raw/slicing)
* [Way Sectioning](/src/main/java/org/openstreetmap/atlas/geography/atlas/raw/sectioning)
* [Cutting](/src/main/java/org/openstreetmap/atlas/geography/atlas#country-slicing)
* [Routing](/src/main/java/org/openstreetmap/atlas/geography/atlas/routing#routing)
* [Higher-level entities](/src/main/java/org/openstreetmap/atlas/geography/atlas/items/complex#complex-entities)
* [Saving](/src/main/java/org/openstreetmap/atlas/geography/atlas#saving-an-atlas) / [Loading](/src/main/java/org/openstreetmap/atlas/geography/atlas#using-atlas)
* [GeoJSON Parser](/src/main/java/org/openstreetmap/atlas/geography/geojson/parser)
* [Command Line Tools](atlas-shell-tools)
* [Atlas Query Language i.e. AQL](/src/main/groovy/org/openstreetmap/atlas/geography/atlas/dsl)

# Community

For more information, please contact our community projects lead [Andrew Wiseman](https://github.com/awisemanapple).


================================================
FILE: atlas-shell-tools/.atlas-shell-tools-integrity-file
================================================
# This file is used by Atlas Shell Tools to ensure that ATLAS_SHELL_TOOLS_HOME
# is set correctly.



================================================
FILE: atlas-shell-tools/README.md
================================================
# Atlas Shell Tools
A command line interface for [`osmlab/atlas`](https://github.com/osmlab/atlas) (and downstream repositories) tools.

##### Table of Contents
1. [What are the Atlas Shell Tools?](#what-are-the-atlas-shell-tools)
2. [Installation](#installation)
   * [Auto-install for `bash` users](#auto-install-for-bash-users)
   * [Auto-install for `zsh` users](#auto-install-for-zsh-users)
   * [Manual install](#manual-install)
3. [Managing Your Installation](#managing-your-installation)
   * [Installing A New Module From A Repo](#installing-a-new-module-from-a-repo)
   * [Switching The Active Module](#switching-the-active-module)
   * [Viewing Command Documentation](#viewing-command-documentation)
   * [Saving Command Option Presets](#saving-command-option-presets)
   * [And Much More](#and-much-more)
4. [Creating Your Own Command](#creating-your-own-command)
5. [Updating The Commands And Tools](#updating-the-commands-and-tools)

## What are the Atlas Shell Tools?
Atlas Shell Tools is a command line interface for executing commands defined in [`osmlab/atlas`](https://github.com/osmlab/atlas)
and its downstream repositories (like [`osmlab/atlas-generator`](https://github.com/osmlab/atlas-generator)). It provides Unix-like option parsing,
autocomplete functionality, a feature-ful option preset system (for commands that need lots
of options), module/repository management, and much more.

To get a basic installation running, see the [**Installation**](#install) section.

You can manage your installation with the `atlas-config(1)` command. Management features include:
1. Installing modules (JARs containing command classes) from various repositories
2. Switching the active module
3. Viewing command documentation
4. Saving command option presets
5. And much more...

See the [**Managing Your Installation**](#managing) section for more information.

To build a command, all you need to do is subclass `AbstractAtlasShellToolsCommand`(or one of its further subclasses) - 
then your command will be automatically integrated into the tools! For more information on this,
see the [**Creating Your Own Command**](#creating) section.

## Installation
Atlas Shell Tools comes with some quick install scripts for users of select shells.
Note that the quick install scripts prompt to modify your shell's startup file(s)
with some code Atlas Shell Tools needs to run (`.bash_profile` and `~/.bashrc`
for `~/bash`, `~/.zshrc` and `~/.zshenv` for `zsh`). If you do not want this behaviour
and just want to configure your startup files yourself, select 'n' at the appropriate prompts.

#### Auto-install for `bash` users:
```
$ curl -O https://raw.githubusercontent.com/osmlab/atlas/main/atlas-shell-tools/quick_install_bash.sh
# Inspect the downloaded file and ensure you are satisfied it is safe to run:
$ vim quick_install_bash.sh
$ sh quick_install_bash.sh
# Answer the prompts, and restart your terminal once this finishes to get started!
```

#### Auto-install for `zsh` users:
```
$ curl -O https://raw.githubusercontent.com/osmlab/atlas/main/atlas-shell-tools/quick_install_zsh.sh
# Inspect the downloaded file and ensure you are satisfied it is safe to run:
$ vim quick_install_zsh.sh
$ sh quick_install_zsh.sh
# Answer the prompts, and restart your terminal once this finishes to get started!
```

#### Manual install:
If you are not running one of the supported shells, or you want to manually
install Atlas Shell Tools, please follow these steps:
##### Building and Installing
```
$ cd /path/to/desired/install/location
$ git clone https://github.com/osmlab/atlas.git atlas-shell-tools
$ cd atlas-shell-tools
$ git checkout main
$ ./gradlew clean shaded -x check -x javadoc
$ chmod +x ./atlas-shell-tools/scripts/atlas ./atlas-shell-tools/scripts/atlas-config
$ ./atlas-shell-tools/scripts/atlas-config repo add atlas https://github.com/osmlab/atlas.git
$ ./atlas-shell-tools/scripts/atlas-config repo install atlas
```
##### Setting up your shell startup file
Next, open whichever configuration file your shell uses to set environment variables
(e.g. `~/.bash_profile` for `bash`, or `~/.zshenv` for `zsh`). Export the following
environment variables using your shell's equivalent `export` statement.
```
# In bash/zsh we can use 'export', other shells may use different syntax

# Point ATLAS_SHELL_TOOLS_HOME at the 'atlas-shell-tools' subfolder within your 'atlas-shell-tools' installation
export ATLAS_SHELL_TOOLS_HOME=/path/to/atlas-shell-tools/atlas-shell-tools

# configure your PATH
export PATH="$PATH:$ATLAS_SHELL_TOOLS_HOME/scripts"
```
##### Autocomplete support
Additionally, Atlas Shell Tools supports autocomplete for `bash` and `zsh`
through [ast_completions.bash](https://github.com/osmlab/atlas/blob/main/atlas-shell-tools/ast_completions.bash)
and [ast_completions.zsh](https://github.com/osmlab/atlas/blob/main/atlas-shell-tools/ast_completions.zsh),
respectively. To get these set up, you'll need to source them in your shell's appropriate
startup file (`~/.bashrc` for `bash` or `~/.zshrc` for `zsh`).

An example for `bash`:
```
##### ~/.bashrc file #####
#
# other stuff here....
#
source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.bash"
```

An example for `zsh`:
```
##### ~/.zshrc file #####
#
# other stuff here....
#
source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.zsh"
```

## Managing Your Installation
Both `atlas(1)` and `atlas-config(1)` provide numerous ways to manage your installation. Some common
operations include:

#### Installing A New Module From A Repo
Suppose the git repository `me/my-repo` depends on [`osmlab/atlas`](https://github.com/osmlab/atlas) and contains a command implementation you would
like to run from the CLI. First, you can save the `my-repo` information with the `repo` subcommand of `atlas-config(1)`:
```
$ atlas-config repo add my-repo 'https://github.com/me/my-repo'
```
Then, to install a new module based on `my-repo`'s `main` branch, simply run:
```
$ atlas-config repo install my-repo
```
See the `atlas-config-repo(1)` man page for more information about repos.

#### Switching The Active Module
After running the command from `me/my-repo`, you may want to switch back to another repo, like `me/my-other-repo`.
Assuming you have a module from `me/my-other-repo` installed, this is straightforward. First, you can list your installed
modules with:
```
$ atlas-config list
```
Then, assuming you see the module you want - for sake of example say it's called `my-other-repo-ef3381a` - run:
```
$ atlas-config activate my-other-repo-ef3381a
```
You can check to see that it worked with `$ atlas-config list` again.

#### Viewing Command Documentation
Atlas Shell Tools comes with extensive documentation, both in the form of man pages as well as subcommand documentation.
To see all available man pages, check the Atlas Shell Tools index man page: `atlas-shell-tools(7)`:
```
$ man atlas-shell-tools
```
From there you can jump to whichever page interests you. Subcommand implementations also provide their own documentation, part
of which is auto-generated and part of which can be optionally supplied by the command author. To view this documentation, try the
subcommand's `--help` option (every subcommand automatically responds to `--help`):
```
$ atlas some-command --help
```
OR
```
$ atlas --help some-command
```

#### Saving Command Option Presets
Some commands require many options, and option presets can make repeated use much easier. Assuming your command is called `my-command`,
you might save an option preset like:
```
$ atlas --save-preset my-command-preset-1 my-command arg1 --opt1=optarg1 --opt2
```
You could then run
```
$ atlas --preset my-command-preset-1 my-command arg1
```
and Atlas Shell Tools would fill in `--opt1=optarg1 --opt2` for you automatically. There is much more to be said about the presets feature.
Please see the `atlas-presets(7)`, `atlas-config-preset(1)`, and `atlas(1)` man pages for all the details.

#### And Much More...
There are many more Atlas Shell Tools features just waiting to be found. Feel free to peruse all the man pages
available in `atlas-shell-tools(7)`.

## Creating Your Own Command
To create a new command for Atlas Shell Tools, simply create a class that `extends`
[AbstractAtlasShellToolsCommand](https://github.com/osmlab/atlas/blob/main/src/main/java/org/openstreetmap/atlas/utilities/command/abstractcommand/AbstractAtlasShellToolsCommand.java).
Once you fill in the abstract methods appropriately (and add a main method), you should build a
fat JAR file containing your command, and install it with:
```
$ atlas-config install /path/to/JARfile.jar --symlink
```
This will install the JAR file to the module workspace using a symlink, so iterative
changes to the JAR will be automatically picked up by Atlas Shell Tools.

For a comprehensive example of the `AbstractAtlasShellToolsCommand` API, check out the
demo class [DemoSubcommand](https://github.com/osmlab/atlas/blob/main/src/main/java/org/openstreetmap/atlas/utilities/command/subcommands/AtlasShellToolsDemoCommand.java).
This class demonstrates how to implement the abstract methods, as well as how to structure
the main method.

## Updating The Commands And Tools
If you just want to quickly update everything, go ahead and run:
```
$ atlas-config update
```
This will update the toolkit, which includes the code for `atlas(1)`, `atlas-config(1)`, and the various man pages
(see the `atlas-glossary(7)` man page for a definition of the toolkit).

Then, to update the basic commands by installing a new module from the default [`osmlab/atlas`](https://github.com/osmlab/atlas)
repo, run:
```
$ atlas-config repo install atlas
```
If you have any other repos you'd like to update, you can run a `repo install` on those as well to get
the latest versions of any commands.


================================================
FILE: atlas-shell-tools/ast_completions.bash
================================================

# What is this script for?
#
# This script provides autocomplete functionality for Atlas Shell Tools in the
# bash shell.
#
# How do I use it?
#
# Run the following command:
#    $ source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.bash"
# Then add 'source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.bash"' to your '~/.bashrc'
# file to pick up the completions in every new shell!


# Return "true" if bash major version is greater than or equal to 4.
# Bash4 has a better auto-complete API, so using bash4 if possible is better.
is_bash_at_least_version_4 ()
{
    local version=$BASH_VERSION
    local major=$(echo "$version" | cut -d. -f1)
    if [ "$major" -ge "4" ];
    then
        echo "true"
    else
        echo "false"
    fi
}

_complete_atlas_shell_tools ()
{
    local completion_mode="default";
    if [ "$1" = "atlas" ];
    then
        local completion_mode="__completion_atlas__"
    elif [ "$1" = "atlas-config" ];
    then
        local completion_mode="__completion_atlascfg__"
    fi

    if [ "$completion_mode" = "default" ];
    then
        echo "complete error: ${completion_mode} was still default"
        return 1
    fi

    # disable readline default autocompletion, we are going to customize
    if [ "$(is_bash_at_least_version_4)" = "true" ];
    then
        compopt +o default
    fi

    local reply=$(atlas-config "${completion_mode}" "${COMP_CWORD}" "${COMP_WORDS[@]}");

    if [ "$reply" = "__atlas-shell-tools_sentinel_complete_filenames__" ];
    then
        # re-enable bash default completion for filenames
        if [ "$(is_bash_at_least_version_4)" = "true" ];
        then
            compopt -o default
            COMPREPLY=()
        else
            local cur=${COMP_WORDS[COMP_CWORD]}

            # We must locally set IFS to '\n' in case there are filenames with whitespace.
            # Without this, a filename like "file with spaces" would present itself
            # as 3 discrete completion options, "file", "with", and "spaces".
            local IFS=$'\n'

            COMPREPLY=($(compgen -o filenames -f -- "$cur"))
        fi
        return 0
    else
        COMPREPLY=(${reply})
    fi
}

complete -o filenames -o bashdefault -F _complete_atlas_shell_tools atlas
complete -o filenames -o bashdefault -F _complete_atlas_shell_tools atlas-config


================================================
FILE: atlas-shell-tools/ast_completions.zsh
================================================

# What is this script for?
#
# This script provides autocomplete functionality for Atlas Shell Tools in the
# zsh shell.
#
# How do I use it?
#
# Run the following command:
#    $ source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.zsh"
# Then add 'source "$ATLAS_SHELL_TOOLS_HOME/ast_completions.zsh"' to your '~/.zshrc'
# file to pick up the completions in every new shell!

_complete_atlas_shell_tools_zsh ()
{
    local completion_mode="default";
    if [ "$1" = "atlas" ];
    then
        local completion_mode="__completion_atlas_zsh__"
    elif [ "$1" = "atlas-config" ];
    then
        local completion_mode="__completion_atlascfg_zsh__"
    fi

    if [ "$completion_mode" = "default" ];
    then
        echo "complete error: ${completion_mode} was still default"
        return 1
    fi

    local reply=$(atlas-config "${completion_mode}" "${COMP_CWORD}" "${COMP_WORDS[@]}");

    if [ "$reply" = "__atlas-shell-tools_sentinel_complete_filenames__" ];
    then
        local cur=${COMP_WORDS[COMP_CWORD]}

        # We must locally set IFS to '\n' in case there are filenames with whitespace.
        # Without this, a filename like "file with spaces" would present itself
        # as 3 discrete completion options, "file", "with", and "spaces".
        local IFS=$'\n'

        COMPREPLY=($(compgen -o filenames -f -- "$cur"))
        return 0
    else
        COMPREPLY=(${reply})
    fi
}

autoload compinit
compinit
autoload bashcompinit
bashcompinit
complete -o filenames -o bashdefault -F _complete_atlas_shell_tools_zsh atlas
complete -o filenames -o bashdefault -F _complete_atlas_shell_tools_zsh atlas-config


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-activate.1
================================================
.\"     Title: atlas-config-activate
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-ACTIVATE" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-activate \-\- Activate an installed Atlas Shell Tools module

.SH "SYNOPSIS"
.sp
.nf
\fIatlas-config activate\fR \-\-help
\fIatlas-config activate\fR <\fImodule\fR>
.fi

.SH "DESCRIPTION"
.sp
Activate the provided <\fImodule\fR>. Commands defined in an activated module
become available for execution by the \fBatlas\fR tool. Activating a
module deactivates any other active modules.

.SH "OPTIONS"
.sp

.PP
<\fImodule\fR>
.RS 4
This indicates a module. The module should be referred to using its name, as
reported by \fBatlas-config-list\fR(1).
.RE

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-config\-deactivate\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-deactivate.1
================================================
.\"     Title: atlas-config-deactivate
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-DEACTIVATE" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-deactivate \-\- Deactivate an installed Atlas Shell Tools module

.SH "SYNOPSIS"
.sp
.nf
\fIatlas-config deactivate\fR \-\-help
\fIatlas-config deactivate\fR <\fImodule\fR>
.fi

.SH "DESCRIPTION"
.sp
Deactivate the provided <\fImodule\fR>. Commands defined in a deactivated module
cannot be run by the \fBatlas\fR tool until the module is reactivated.
Deactivating a module will also prevent the commands from showing in the
\fBatlas\fR tool command list.

.SH "OPTIONS"
.sp

.PP
<\fImodule\fR>
.RS 4
This indicates a module. The module should be referred to using its name, as
reported by \fBatlas-config-list\fR(1).
.RE

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-config\-activate\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite



================================================
FILE: atlas-shell-tools/man/man1/atlas-config-install.1
================================================
.\"     Title: atlas-config-install
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-INSTALL" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-install \-\- Install a new Atlas Shell Tools module from a local JAR

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIinstall\fR \-\-help
\fIatlas\-config\fR \fIinstall\fR [\-\-symlink] [\-\-force] [\-\-skip] [\-\-deactivated]
                     [\-\-name=<\fIname\fR>] <\fIJARfile\fR>
.fi

.SH "DESCRIPTION"
.sp
Installs and activates a given <\fIJARfile\fR> as a new \fBatlas\fR module.
This will deactivate any currently activated module. If you are trying to install
a module from a specific repo, please see \fBatlas-config-repo\fR(1) for more information.

When installing directly from a <\fIJARfile\fR>, the \fB\-\-symlink\fR option
can be enabled to install using a symbolic link. This is great for cases where
the underlying <\fIJARfile\fR> may change dynamically (e.g. when incrementally
rebuilding the JAR during development/testing of a new command).

Note that once a module is installed, it should be referred to by its module
name and not by the <\fIJARfile\fR> name. The module names are displayed by
\fBatlas-config-list\fR(1). Unless the \fB\-\-name\fR option is used, the module name will be
the same as the <\fIJARfile\fR> name but without the '.jar' extension.

.SH "OPTIONS"
.sp

.PP
<\fIJARfile\fR>
.RS 4
The path to a JARfile containing \fBatlas\fR commands. Once installed, this JARfile
is referred to as a module.
.RE

.PP
\fB\-\-deactivated\fR
.RS 4
Install a module without actually activating it.
.RE

.PP
\fB\-\-force\fR
.RS 4
Force overwrite when re-installing an existing module.
.RE

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.PP
\fB\-\-name\fR=<name>
.RS 4
Install a module using a custom name.
.RE

.PP
\fB\-\-skip\fR
.RS 4
Skip installation when re-installing an existing module.
.RE

.PP
\fB\-\-symlink\fR, \fB-s\fR
.RS 4
Install a module using a symlink as opposed to a copy.
.RE


.SH "EXAMPLES"
.sp
Install a module with custom name 'MyModule':
.sp
.RS 4
$ atlas\-config install \-\-name=MyModule ~/Desktop/example.jar
.RE
.sp
Install a symlinked module but do not activate it:
.sp
.RS 4
$ atlas\-config install \-\-symlink \-\-deactivated ~/example.jar
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-config\-uninstall\fR(1), \fBatlas\-config\-activate\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-list.1
================================================
.\"     Title: atlas-config-list
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-LIST" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-list \-\- List installed Atlas Shell Tools modules and module statuses

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIlist\fR \-\-help
\fIatlas\-config\fR \fIlist\fR [\-\-current] [\-\-one\-line]
.fi

.SH "DESCRIPTION"
.sp
List installed modules with additional contextual information. This listing
is also known as the module workspace. The \fB\-\-current\fR option can be used to view
only the current activated module, if there is one. The \fB\-\-one\-line\fR option can be used to
suppress metadata output.

A \fB*\fR next to a module denotes that the module is activated. Symlinked
modules display their targets using the familiar arrow notation (\fB\->\fR). If a
symlink is broken, the warning \fB(BROKEN SYMLINK)\fR is displayed next to the
module name.

.SH "OPTIONS"
.sp

.PP
\fB\-\-current\fR, \fB-c\fR
.RS 4
Show only the currently activated module, if one is activated.
.RE

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.PP
\fB\-\-one\-line\fR, \fB-1\fR
.RS 4
Suppress the module metadata output, instead displaying each module on a single line.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-log.1
================================================
.\"     Title: atlas-config-log
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-LOG" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-log \-\- Check or set Atlas Shell Tools log parameters

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIlog\fR \-\-help
\fIatlas\-config\fR \fIlog\fR reset
\fIatlas\-config\fR \fIlog\fR set\-level <new\-level>
\fIatlas\-config\fR \fIlog\fR set\-stream <new\-stream>
\fIatlas\-config\fR \fIlog\fR show
.fi

.SH "DESCRIPTION"
.sp
Use this command to check or set the current log parameters. Under the hood,
this command is a shortcut for modifying the \fBatlas\fR log4j configuration
file. It expects that file to follow a well-defined format. For best
results, avoid manually updating the configuration file.

.SH "OPTIONS"
.sp
.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "DIRECTIVES"
\fBatlas\-config\-log\fR(1) exposes its interface through various directives,
detailed below.
.sp

.PP
\fIreset\fR
.RS 4
Reset the log parameters to default, i.e. level=\fBERROR\fR and stream=\fBstderr\fR.
This is equivalent to running \fBatlas\-config reset log\fR.
.RE

.PP
\fIset\-level\fR
.RS 4
Set the current logging level to <new\-level>.
Valid log levels: \fBALL\fR, \fBTRACE\fR, \fBDEBUG\fR, \fBINFO\fR, \fBWARN\fR, \fBERROR\fR, \fBFATAL\fR, and \fBOFF\fR.
.RE

.PP
\fIset\-stream\fR
.RS 4
Set the current logging stream to <new\-stream>.
Valid stream settings: \fBstdout\fR and \fBstderr\fR.
.RE

.PP
\fIshow\fR
.RS 4
Show the current log settings.
.RE

.SH "EXAMPLES"
.sp
Set the log level to \fBINFO\fR:
.sp
.RS 4
$ atlas\-config log set\-level INFO
.RE
.sp
Show the log parameters:
.sp
.RS 4
$ atlas\-config log show
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-preset.1
================================================
.\"     Title: atlas-config-preset
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-PRESET" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-preset \-\- Create and manage Atlas Shell Tools command presets

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIpreset\fR \-\-help
\fIatlas\-config\fR \fIpreset\fR \fIcopy\fR <command> <src> <dest>
\fIatlas\-config\fR \fIpreset\fR \fIcopy\-global\fR <src> <dest>
\fIatlas\-config\fR \fIpreset\fR \fIedit\fR <command> <preset>
\fIatlas\-config\fR \fIpreset\fR \fIedit\-global\fR <preset>
\fIatlas\-config\fR \fIpreset\fR \fIlist\fR [command [preset]]
\fIatlas\-config\fR \fIpreset\fR \fIlist\-global\fR [preset]
\fIatlas\-config\fR \fIpreset\fR \fInamespace\fR <subdirective> [namespace]
\fIatlas\-config\fR \fIpreset\fR \fIremove\fR <command> [preset]
\fIatlas\-config\fR \fIpreset\fR \fIremove\-global\fR [preset]
\fIatlas\-config\fR \fIpreset\fR \fIsave\fR <command> <preset> <options...>
\fIatlas\-config\fR \fIpreset\fR \fIsave\-global\fR <preset> <options...>
.fi

.SH "DESCRIPTION"
.sp
\fBatlas\-config\-preset\fR(1) provides a more granular preset management interface
than the basic \fBatlas\fR(1) options (\fB\-\-preset\fR, \fB\-\-save\-preset\fR, \fB\-\-save\-global\-preset\fR).
It can handle more complex tasks like editing a preset in place, or managing the
preset namespaces. For full details on the workings of \fBatlas\-config\-preset\fR(1),
see the \fBTier 2\fR and \fBTier 3\fR sections in \fBatlas\-presets\fR(7).

.SH "OPTIONS"
.sp
.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "DIRECTIVES"
\fBatlas\-config\-preset\fR(1) exposes its interface through various directives,
detailed below. Again, this information is presented in more detail in
\fBatlas\-presets\fR(7).
.sp

.PP
\fIcopy\fR
.RS 4
For <command>, copy preset <src> into new preset <dest>. <dest> must not already
exist, else the copy will fail.
.RE

.PP
\fIcopy\-global\fR
.RS 4
Copy global preset <src> into new global preset <dest>. <dest> must not already
exist, else the copy will fail.
.RE

.PP
\fIedit\fR
.RS 4
Edit preset <preset> for <command>. If <preset> does not exist, then it will be
created when the edit is successfully saved. The default preset editor is \fBvim\fR,
but this can be changed by setting the \fBATLAS_SHELL_TOOLS_EDITOR\fR environment variable.
.RE

.PP
\fIedit\-global\fR
.RS 4
Edit global preset <preset>. If <preset> does not exist, then it will be
created when the edit is successfully saved. The default preset editor is \fBvim\fR,
but this can be changed by setting the \fBATLAS_SHELL_TOOLS_EDITOR\fR environment variable.
.RE

.PP
\fIlist\fR
.RS 4
List all available presets (including globals), or list all presets for a given [command], or
list contents of preset [preset] for [command].
.RE

.PP
\fIlist\-global\fR
.RS 4
List all available global presets, or list contents of global preset [preset].
.RE

.PP
\fInamespace\fR
.RS 4
Execute a <subdirective> on a given preset [namespace]. Available subdirectives
are \fBcreate\fR, \fBlist\fR, \fBremove\fR, and \fBuse\fR. See \fBTier 3\fR in
\fBatlas\-presets\fR(7) for more details.
.RE

.PP
\fIremove\fR
.RS 4
Remove all presets for a given <command>, or remove the preset [name] for
<command>.
.RE

.PP
\fIremove\-global\fR
.RS 4
Remove all global presets, or remove the global preset [name].
.RE

.PP
\fIsave\fR
.RS 4
Save a preset <preset> for <command> without actually running the command.
<options...> is a sequence of options to be saved in the preset.
Again, recall that you must use the long option '=' syntax for specifying option
arguments when saving a preset (e.g. '--opt=arg' and \fInot\fR '--opt arg').
.RE

.PP
\fIsave\-global\fR
.RS 4
Save a global preset <preset>. <options...> is a sequence of options to be saved in the preset.
Again, recall that you must use the long option '=' syntax for specifying option
arguments when saving a preset (e.g. '--opt=arg' and \fInot\fR '--opt arg').
.RE

.SH "EXAMPLES"
.sp
Edit preset "p1" for command "MyCommand":
.sp
.RS 4
$ atlas\-config preset edit MyCommand p1
.RE
.sp
Create a namespace called "namespace1":
.sp
.RS 4
$ atlas\-config preset namespace create namespace1
.RE
.sp
Save a global preset "p1":
.sp
.RS 4
$ atlas\-config preset save\-global p1 --opt1 --opt2=opt2Arg
.RE
.sp
For more examples, see \fBatlas\-presets\fR(7).

.SH "SEE ALSO"
.sp
\fBatlas\-presets\fR(7)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-repo.1
================================================
.\"     Title: atlas-config-repo
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-REPO" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-repo \-\- Register and manage Atlas Shell Tools repositories

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIrepo\fR \-\-help
\fIatlas\-config\fR \fIrepo\fR \fIadd\fR <repo\-name> <URL> [ref]
\fIatlas\-config\fR \fIrepo\fR \fIadd\-gradle\-exclude\fR <repo\-name> <package>
\fIatlas\-config\fR \fIrepo\fR \fIadd\-gradle\-skip\fR <repo\-name> <task>
\fIatlas\-config\fR \fIrepo\fR \fIedit\fR <repo\-name>
\fIatlas\-config\fR \fIrepo\fR \fIinstall\fR <repo\-name> [\-\-ref=ref]
\fIatlas\-config\fR \fIrepo\fR \fIlist\fR [repo\-name]
\fIatlas\-config\fR \fIrepo\fR \fIremove\fR <repo\-name>
.fi

.SH "DESCRIPTION"
.sp
\fBatlas\-config\-repo\fR(1) provides an interface for managing repo objects (By repo,
we simply mean any \fBgit\fR(1) repository that contains Atlas Shell Tools command
implementations). Once a new repo object has been registered using \fIadd\fR,
new modules can be installed from the repo using the \fIinstall\fR directive.
This makes it easy to fetch the newest versions of Atlas Shell Tools commands and
manage their multiple sources. Additional directives facilitate more advanced use
cases. See the \fBDIRECTIVES\fR section for details.
.sp
For module installation, \fBatlas\-config\-repo\fR(1) uses the default \fBbuild.gradle\fR
of the referenced repo, but with a special injected configuration designed to build a fat
JAR that will work with Atlas Shell Tools. See the \fIinstall\fR directive for more details
on this process. Additionally, \fBatlas\-config\-repo\fR(1) provides some other directives to
manipulate this configuration.
.sp
Also note that registering new repos with \fIadd\fR does not actually save the referenced
repository on your machine. Rather it simply stores some metadata (which we refer to as a repo
object) that is used to clone the referenced repo at install\-time. The clone is saved in
a temporary location and is removed when module installation completes.

.SH "DIRECTIVES"
\fBatlas\-config\-repo\fR(1) exposes its interface through various directives,
detailed below.
.sp

.PP
\fIadd\fR
.RS 4
Add a new repo object with a given <repo\-name>, \fBgit\fR(1) remote <URL>, and an
optional default [ref]. Here, [ref] is a \fBgit\fR(1) ref (e.g. a branch name, a tag, or
even a commit hash). If no explicit [ref] is provided, \fIadd\fR defaults to 'main'. The ref
associated with a repo object is used by \fIinstall\fR as the default. See \fIinstall\fR for more
information. Note that for <URL>, you can use any git\-clonable URL, i.e. an https:// URL, a file://
URL, or even a local path like /Users/you/somerepo.
.RE

.PP
\fIadd\-gradle\-exclude\fR
.RS 4
Add an excluded <package> to repo <repo\-name>. When the \fIinstall\fR directive
builds a module, it is using Gradle (with a custom Atlas Shell Tools configuration) to create a
fat JAR file for that module. Excluded packages are removed from the Atlas Shell Tools Gradle
configuration using Gradle's 'exclude group:' directive. The 'exclude module:' directive is
not currently supported.
.RE

.PP
\fIadd\-gradle\-skip\fR
.RS 4
Add a skipped <task> to repo <repo\-name>. When the \fIinstall\fR directive
builds a module, it is using Gradle (with a custom Atlas Shell Tools configuration) to create a
fat JAR file for that module. By default, \fIinstall\fR is running a \fB./gradlew clean build\fR.
Adding skipped tasks effectively adds \fB\-x <task>\fR arguments to the above command.
.RE

.PP
\fIedit\fR
.RS 4
Edit the configuration for repo <repo\-name> if it exists. The default repo editor
is \fBvim\fR, but this can be changed by setting the \fBATLAS_SHELL_TOOLS_EDITOR\fR
environment variable.
.RE

.PP
\fIinstall\fR
.RS 4
Install a module from a repo object with name <repo\-name>. This command will clone
the repo referenced by <repo\-name>'s URL to a temporary location. Next, it will check
out the ref specified in <repo\-name>'s config or use the override provided by \-\-ref
if present. It will then initiate a Gradle build, using the repo's \fBbuild.gradle\fR
file with a custom injected Atlas Shell Tools configuration. Finally, it will install
and activate the freshly built module. When the install finishes, the cloned repo will
be removed.
.RE

.PP
\fIlist\fR
.RS 4
Display all registered repo objects, along with their URLs and default refs. If a [repo\-name]
is provided, then display the full configuration of the given repo object.
.RE

.PP
\fIremove\fR
.RS 4
Remove the registration for repo object <repo\-name>, if it exists.
.RE

.SH "EXAMPLES"
.sp
Register a new repo object with name \fBmy\-repo\fR and default branch \fBmain\fR:
.sp
.RS 4
$ atlas\-config repo add my\-repo https://github.com/me/my\-repo.git
.RE
.sp
Register a new repo object with name \fBmy\-repo\fR and default branch \fBmy\-branch\fR:
.sp
.RS 4
$ atlas\-config repo add my\-repo https://github.com/me/my\-repo.git my\-branch
.RE
.sp
Skip Gradle task 'integrationTest' when installing from \fBmy\-repo\fR:
.sp
.RS 4
$ atlas\-config repo add\-gradle\-skip my\-repo integrationTest
.RE
.sp
Install a new module from repo \fBmy\-repo\fR, but override the default ref with a specific release:
.sp
.RS 4
$ atlas\-config repo install my\-repo \-\-ref=1.3.9
.RE
.sp

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-glossary\fR(7)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-reset.1
================================================
.\"     Title: atlas-config-reset
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-RESET" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-reset \-\- Reset the Atlas Shell Tools installation

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIreset\fR \-\-help
\fIatlas\-config\fR \fIreset\fR all
\fIatlas\-config\fR \fIreset\fR index
\fIatlas\-config\fR \fIreset\fR log
\fIatlas\-config\fR \fIreset\fR modules
\fIatlas\-config\fR \fIreset\fR presets
\fIatlas\-config\fR \fIreset\fR repos
.fi

.SH "DESCRIPTION"
.sp
Completely reset the \fBatlas\fR installation. A full reset (using \fIall\fR) consists
of the following steps:

.RS 4
\fB1)\fR Uninstalling all installed modules

\fB2)\fR Removing all presets

\fB3)\fR Setting the log level back to \fBERROR\fR

\fB4)\fR Setting the log stream back to \fBstderr\fR

\fB5)\fR Deleting the active command index

\fB6)\fR Removing all saved repos
.RE

You can use various directives to only run some subset of these steps. See
the \fBDIRECTIVES\fR section for more details.

.SH "OPTIONS"
.sp

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "DIRECTIVES"
\fBatlas\-config\-reset\fR(1) exposes its interface through various directives,
detailed below.
.sp

.PP
\fIall\fR
.RS 4
Perform all the reset steps, fully resetting the environment to the
state it was in at install time.
.RE

.PP
\fIindex\fR
.RS 4
Reset the active module index.
.RE

.PP
\fIlog\fR
.RS 4
Reset the log parameters to default, i.e. level=\fBERROR\fR and stream=\fBstderr\fR.
This is equivalent to running \fBatlas\-config log reset\fR.
.RE

.PP
\fImodules\fR
.RS 4
Uninstall all installed modules. This is equivalent to running \fBatlas\-config uninstall \-\-all\fR.
.RE

.PP
\fIpresets\fR
.RS 4
Remove all saved presets in all namespaces. Also resets the current namespace
to 'default'.
.RE

.PP
\fIrepos\fR
.RS 4
Remove all saved repos.
.RE

.SH "EXAMPLES"
.sp
Reset everything:
.sp
.RS 4
$ atlas\-config reset all
.RE
.sp
Reset only the repos:
.sp
.RS 4
$ atlas\-config reset repos
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-sync.1
================================================
.\"     Title: atlas-config-sync
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-SYNC" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-sync \-\- Refresh the Atlas Shell Tools installation based on the active module

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIsync\fR \-\-help
\fIatlas\-config\fR \fIsync\fR
.fi

.SH "DESCRIPTION"
.sp
Refresh the command index for the current active module. Additionally, this will
perform some runtime checks to validate that all commands in the active module
registered their documentation and options/arguments correctly.

This command is useful when a module JAR is installed using a symlink, and has
been updated at the other end of the link. If you made changes to a command
name or description, running this command will reflect those changes in
\fBatlas \-\-list\fR. If you altered some option/argument or documentation
registration, running \fBsync\fR will perform a quick validation \- preventing
you from having to test each altered command individually.

.SH "OPTIONS"
.sp
.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-uninstall.1
================================================
.\"     Title: atlas-config-uninstall
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-UNINSTALL" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-uninstall \-\- Uninstall Atlas Shell Tools module(s)

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIuninstall\fR \-\-help
\fIatlas\-config\fR \fIuninstall\fR \-\-all
\fIatlas\-config\fR \fIuninstall\fR [\-\-force] <\fImodules...\fR>
.fi

.SH "DESCRIPTION"
.sp
Remove installed module(s). If the module is a symlink, this will only
remove the link. It will \fBnot\fR delete the linked\-to file. By default, this
command will not uninstall an activated module. This can be overridden with the
\fB\-\-force\fR or \fB\-\-all\fR options.

.SH "OPTIONS"
.sp

.PP
<\fImodules...\fR>
.RS 4
This indicates one or more modules. The modules should be referred to using their names as
reported by \fBatlas-config-list\fR(1).
.RE

.PP
\fB\-\-all\fR, \fB\-a\fR
.RS 4
Uninstall all modules including the activated module, ignoring the supplied <\fImodule\fR>
argument if present. This is equivalent to running \fBatlas\-config reset \-\-modules\fR.
.RE

.PP
\fB\-\-force\fR
.RS 4
Force uninstall an activated module.
.RE

.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-config\-install\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas-config-update.1
================================================
.\"     Title: atlas-config-update
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG-UPDATE" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config\-update \-\- Update the Atlas Shell Tools core toolkit

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR \fIupdate\fR \-\-help
\fIatlas\-config\fR \fIupdate\fR
.fi

.SH "DESCRIPTION"
.sp
Update the \fBatlas\-shell\-tools\fR(7) core toolkit using \fBgit\fR(1). This will not
actually update any modules. To update modules using your repos, see
\fBatlas\-config\-repo\fR(1).

.SH "OPTIONS"
.sp
.PP
\fB\-\-help\fR
.RS 4
Show this help menu.
.RE

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-config\-repo\fR(1)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite



================================================
FILE: atlas-shell-tools/man/man1/atlas-config.1
================================================
.\"     Title: atlas-config
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CONFIG" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-config \-\- Configure the Atlas Shell Tools installation

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\-config\fR [\-\-no-pager] \-\-help[=<\fIcommand\fR>]
\fIatlas\-config\fR \-\-version
\fIatlas\-config\fR [\-\-no-pager] [\-\-quiet] <\fIcommand\fR> [arg...]
.fi

.SH "DESCRIPTION"
.sp
\fBatlas\-config\fR exposes an interface for configuring the Atlas Shell Tools
installation. It provides a way to install new modules, change the currently
activated module, reset the installation, and more. \fBatlas\-config\fR operates
using a subcommand interface, where each subcommand performs a different
configuration action. See the \fBATLAS\-CONFIG COMMANDS\fR section for more
information.
.sp
For running actual Atlas Shell Tools commands, see \fBatlas\fR(1).
.sp
For a glossary of Atlas Shell Tools terms, see \fBatlas\-glossary\fR(7).

.SH "OPTIONS"

.PP
<\fIcommand\fR>
.RS 4
This indicates a command. See the \fBATLAS\-CONFIG COMMANDS\fR section for a list of available
commands.
.RE

.PP
\fB\-\-help\fR[=<\fIcommand\fR>]\fR
.RS 4
Show the help menu for a given command. If no command is given, show
a general help menu and then exit.
.RE

.PP
\fB\-\-no\-pager\fR
.RS 4
Disable pagination for all documentation.
.RE

.PP
\fB\-\-quiet\fR, \fB\-q\fR
.RS 4
Suppress non-essential output.
.RE

.PP
\fB\-\-version\fR, \fB-V\fR
.RS 4
Show the \fBatlas\-config\fR version info and then exit.
.RE
.sp

.SH "ATLAS-CONFIG COMMANDS"
.sp
\fBatlas-config\fR uses a set of subcommands to present a high\-level interface
for installation configuration.

\fBatlas\-config\-activate\fR(1)
.RS 4
Activate an installed module.
.RE

\fBatlas\-config\-deactivate\fR(1)
.RS 4
Deactivate an installed module.
.RE

\fBatlas\-config\-install\fR(1)
.RS 4
Install a new module.
.RE

\fBatlas\-config\-list\fR(1)
.RS 4
List all installed modules and module statuses.
.RE

\fBatlas\-config\-log\fR(1)
.RS 4
Check or set log parameters.
.RE

\fBatlas\-config\-preset\fR(1)
.RS 4
Create and manage Atlas Shell Tools command presets.
.RE

\fBatlas\-config\-repo\fR(1)
.RS 4
Register and manage Atlas Shell Tools repositories.
.RE

\fBatlas\-config\-reset\fR(1)
.RS 4
Reset the installation.
.RE

\fBatlas\-config\-sync\fR(1)
.RS 4
Refresh the installation based on the active module.
.RE

\fBatlas\-config\-uninstall\fR(1)
.RS 4
Uninstall a module.
.RE

\fBatlas\-config\-update\fR(1)
.RS 4
Update the Atlas Shell Tools core toolkit.
.RE

.SH "TERMINAL AND ENVIRONMENT"
.sp
\fBatlas\-config\fR displays its various help and manual pages using \fBman\fR,
which is paged by default. To disable paged output for all documentation, try
the \fB\-\-no\-pager\fR option.
.sp
\fBatlas-config\fR uses formatted output when appropriate. To change this behavior,
\fBatlas-config\fR checks for existence of the following environment variables:
.sp
.RS 4
\fBNO_COLOR\fR \-
Disable all special formatted output. Other popular CLI tools also
respect this variable. See <https://no\-color.org>.
.sp
\fBATLAS_SHELL_TOOLS_NO_COLOR\fR \-
Disable special formatted output for \fBatlas\fR and \fBatlas-config\fR only.
.sp
\fBATLAS_SHELL_TOOLS_USE_COLOR\fR \-
Enable special formatted output. Overrides the setting of \fBNO_COLOR\fR and \fBATLAS_SHELL_TOOLS_NO_COLOR\fR.
.sp
.RE
\fBatlas-config\fR stores program data in compliance with the XDG Base Directory
specification, i.e. at $HOME/.local/share/atlas\-shell\-tools. It also respects the
\fBXDG_DATA_HOME\fR environment variable \- if set, \fBatlas-config\fR will store program
data at the base path specified by that variable. See \fBatlas\-plumbing\fR(5) for
more information.
.sp
For more details about all the environment variables used by \fBatlas\-shell\-tools\fR(7),
see the \fBatlas\-environment\fR(7) manpage.

.SH "SEE ALSO"
.sp
\fBatlas\fR(1), \fBatlas\-plumbing\fR(5), \fBatlas\-presets\fR(7), \fBatlas\-environment\fR(7)

.SH "AUTHOR"
.sp
This program was written by Lucas Cram <lucaspcram@gmail.com>.
Please report any bugs you find.

.SH "BUGS"
.sp
If you run the command:
.sp
.RS 4
$ atlas\-config install <active\-module>
.RE
.sp
where <active\-module> is the path to the currently active module JARfile, this
will start the installation process but then delete the JARfile.
.sp
Please report any bugs you find to the \fBAUTHOR\fR.

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man1/atlas.1
================================================
.\"     Title: atlas
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS" "1" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas \-\- Run an Atlas Shell Tools command

.SH "SYNOPSIS"
.sp
.nf
\fIatlas\fR [\-\-no-pager] \-\-help[=<\fIcommand\fR>]
\fIatlas\fR \-\-version
\fIatlas\fR [\-\-no-pager] \-\-list
\fIatlas\fR \-\-class\-of=<\fIcommand\fR>
\fIatlas\fR [\-\-no\-pager] [\-\-debug] [\-\-memory=<amount>] [\-\-preset=<names>] 
      [\-\-save\-preset=<new\-preset>] [\-\-save\-global\-preset=<new\-preset>] <\fIcommand\fR> [arg...]
.fi

.SH "DESCRIPTION"
.sp
\fBatlas\fR is an easy\-to\-use wrapper for launching Atlas Shell Tools commands.
It provides a simple interface to find and run any commands defined in the currently
activated Atlas Shell Tools module.
Atlas Shell Tools also implements a robust preset management system, which can save
you tons of typing for commands that require a lot of options. See \fBatlas-presets\fR(7)
section for more on this topic.
.sp
For advanced module management capabilites and other installation configuration
commands, see \fBatlas\-config\fR(1).
.sp
For a glossary of Atlas Shell Tools terms, see \fBatlas-glossary\fR(7).

.SH "OPTIONS"

.PP
<\fIcommand\fR>
.RS 4
This indicates a command. A list of available commands can be
seen with the \fB--list\fR option.
.RE

.PP
\fB\-\-class\-of\fR=<\fIcommand\fR>
.RS 4
Show the full classname of a given command and then exit.
.RE

.PP
\fB\-\-debug\fR
.RS 4
Run \fBatlas\fR in debug mode. While in debug mode, \fBatlas\fR will not actually
run any commands. Instead, it will print debug information and exit. Use this
option to see the full JVM launch command, preset debug diagnostics, and more.
.RE

.PP
\fB\-\-help\fR[=<\fIcommand\fR>]\fR
.RS 4
Show the help menu for a given command. If no command is given, show
a general help menu and then exit.
.RE

.PP
\fB\-\-list\fR, \fB-l\fR
.RS 4
Display a list of all available commands and exit. Command name collision is
resolved when the active module index is generated. The resolution exists at
the index level only and is not reflected in the actual command
class files.
.RE

.PP
\fB\-\-memory\fR=<amount>, \fB\-m\fR<amount>
.RS 4
Set the maximum memory pool size for the JVM that runs your command.
<amount> should be specified in bytes. \fB--memory\fR also understands
shorthand for metric prefixes, e.g. 1024K, 512M, 4G, etc. If this option
is not supplied, the memory pool defaults to 8G.
.RE

.PP
\fB\-\-no\-pager\fR
.RS 4
Disable pagination for all documentation.
.RE

.PP
\fB\-\-preset\fR=<names>, \fB\-p\fR<names>
.RS 4
Apply the given preset(s) before running <\fIcommand\fR>. A list of presets
can be provided by separating preset names with either a colon or a comma.
See \fBatlas-presets\fR(7) for more information.
.RE

.PP
\fB\-\-quiet\fR, \fB\-q\fR
.RS 4
Suppress non-essential \fBatlas\fR output.
.RE

.PP
\fB\-\-save\-preset\fR=<new\-preset>
.RS 4
Save the command ARGV to <new\-preset> before running <\fIcommand\fR>. If
\fB\-\-preset\fR is also supplied, the save operation will occur after the
argument to \fB\-\-preset\fR is applied. So <new\-preset> will include ARGV
elements inserted by the \fB\-\-preset\fR application in addition to those
directly supplied by the user. See \fBatlas-presets\fR(7) for more information.
.RE

.PP
\fB\-\-save\-global\-preset\fR=<new\-preset>
.RS 4
This option is the same as \fB\-\-save\-preset\fR, except it will instead save
<new\-preset> to the global presets instead of the command\-specific presets.
Note that it can be used in conjuction with \fB\-\-save\-preset\fR to save both
a global and command preset at the same time. Also like \fB\-\-save\-preset\fR,
\fB\-\-save\-global\-preset\fR saves ARGV after the the application of
\fB\-\-preset\fR if present. See \fBatlas-presets\fR(7) for more information.
.RE

.PP
\fB\-\-version\fR, \fB-V\fR
.RS 4
Show the \fBatlas\fR version info and then exit.
.RE
.sp

.SH "EXAMPLES"
.sp
Let's break down how to run a command called MyCommand with some args and options.
Here, '--opt1' is an option that takes no arguments. '--opt2' is an option that takes
an optional argument, so we use the '=' operator to disambiguate 'optarg2' from a regular
argument. '--opt3' is an option that takes a required argument, so \- if desired \- we
can omit the '=' when specifying 'optarg3'. Finally, 'arg1' and 'arg2' are regular
program arguments:
.sp
.RS 4
$ atlas MyCommand \-\-opt1 arg1 \-\-opt2=optarg2 arg2 --opt3 optarg3
.RE
.sp
See the manual page for MyCommand:
.sp
.RS 4
$ atlas \-\-help MyCommand
.RE
.sp
See a list of all available commands:
.sp
.RS 4
$ atlas \-\-list
.RE
.sp
Save preset 'p1' for MyCommand and then run:
.sp
.RS 4
$ atlas \-\-save\-preset p1 MyCommand arg1 \-\-opt1=opt1arg \-\-opt2=opt2arg
.RE
.sp
Run MyCommand with preset 'p1':
.sp
.RS 4
$ atlas \-\-preset p1 MyCommand arg1 \-\-opt2=overrideOpt2Arg
.RE
.sp
Run MyCommand with preset 'p1', while also saving new preset 'p2':
.sp
.RS 4
$ atlas \-\-preset p1 \-\-save\-preset p2 MyCommand arg1 \-\-opt2=overrideOpt2Arg
.RE
.sp

.SH "TERMINAL AND ENVIRONMENT"
.sp
\fBatlas\fR pages the output of the various help messages using a combination of
\fBless\fR and \fBman\fR. Subcommand help pages are piped through \fBless\fR
by default, but this can be overridden with the \fBATLAS_SHELL_TOOLS_PAGER\fR environment variable.
The actual \fBatlas\fR manual page (which you are currently reading) is displayed
using \fBman\fR. To disable paged output for all documentation, try the
\fB\-\-no\-pager\fR option.
.sp
\fBatlas\fR uses formatted output when appropriate. To change this behavior,
\fBatlas\fR checks for existence of the following environment variables:
.sp
.RS 4
\fBNO_COLOR\fR \-
Disable all special formatted output. Other popular CLI tools also
respect this variable. See <https://no\-color.org>.
.sp
\fBATLAS_SHELL_TOOLS_NO_COLOR\fR \-
Disable special formatted output for \fBatlas\fR and \fBatlas-config\fR only.
.sp
\fBATLAS_SHELL_TOOLS_USE_COLOR\fR \-
Enable special formatted output. Overrides the setting of \fBNO_COLOR\fR and \fBATLAS_SHELL_TOOLS_NO_COLOR\fR.
.sp
.RE
\fBatlas\fR stores program data in compliance with the XDG Base Directory
specification, i.e. at $HOME/.local/share/atlas\-shell\-tools. It also respects the
\fBXDG_DATA_HOME\fR environment variable \- if set, \fBatlas\fR will store program
data at the base path specified by that variable. See \fBatlas\-plumbing\fR(5) for
more information.
.sp
For more details about all the environment variables used by \fBatlas\-shell\-tools\fR(7),
see the \fBatlas\-environment\fR(7) manpage.

.SH "SEE ALSO"
.sp
\fBatlas\-config\fR(1), \fBatlas\-presets\fR(7), \fBatlas\-environment\fR(7)

.SH "AUTHOR"
.sp
This program was written by Lucas Cram <lucaspcram@gmail.com>.

.SH "BUGS"
.sp
Please report any bugs you find to the \fBAUTHOR\fR.

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man5/atlas-plumbing.5
================================================
.\"     Title: atlas-plumbing
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-PLUMBING" "5" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-plumbing \-\- Details about how Atlas Shell Tools stores toolkit program data

.SH "SYNOPSIS"
$HOME/.local/share/atlas-shell-tools/*

.SH "DESCRIPTION"
.sp
Unless otherwise specified via the \fBXDG_DATA_HOME\fR environment variable,
\fBatlas\-shell-tools\fR(7) will store data at $HOME/.local/share/atlas-shell-tools.
This data directory itself contains four other directories, each of which is detailed
in its own section below. These directories store all user data for the toolkit (the toolkit
location is specified by the \fBATLAS_SHELL_TOOLS_HOME\fR environment variable).

.SH "LOG DIRECTORY"
$HOME/.local/share/atlas-shell-tools/log4j

This directory stores the default log4j configuration file for the toolkit. The parameters
in this file can be edited with \fBatlas\-config\-log\fR(1) \- they should \fBnot\fR be edited
manually. This directory also stores a backup log4j file that can be restored using the aforementioned
\fBatlas\-config\-log\fR(1) command should the default file become corrupted.

.SH "MODULE DIRECTORY"
$HOME/.local/share/atlas-shell-tools/modules

Also known as the module workspace, this directory stores modules (fat JARs), module metadata files,
and the active module index. Any JAR that is not the current active module will have a '.deactivated'
file extension. Files with a '.metadata' extension store additional information about the JAR file
with the same name. The active module index file, '.active_module_index', stores data about the
commands found in the current activated module and is used by \fBatlas\fR(1) to look up command
classes and provide the command list for the '\-\-list' option. The active module index stores
each command name, class, and description line\-wise with the fields separated by an ASCII record
separator character. This index can be refreshed with \fBatlas\-config\-sync\fR(1).

.SH "PRESET DIRECTORY"
$HOME/.local/share/atlas-shell-tools/presets

This directory stores all preset data for the toolkit. At root it contains a directory
for each preset namespace, using the 'default' namespace by default. The current active namespace
is stored in a file called '.current_namespace'. Within each namespace is 1) a directory called '.global'
which stores the global presets for the namespace and 2) directories
for any command that has saved presets under that namespace. The actual preset
data files are found within the '.global' and command directories. Preset data is stored
line\-wise exactly as each element will appear in ARGV, e.g. the line "--option=argument" will
become a single ARGV element "--option=argument".

The data in this folder can be managed with \fBatlas\-config\-preset\fR(1).

.SH "REPO DIRECTORY"
$HOME/.local/share/atlas-shell-tools/repos

This directory stores the repo data for all the registered repos. Each registered repo
has its own directory that contains the repo data file 'repo_config'. Repo data is stored
as line\-wise "key = value" pairs.

The data in this folder can be managed with \fBatlas\-config\-repo\fR(1).

.SH "SEE ALSO"
.sp
\fBatlas\-environment\fR(7)

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-cli.7
================================================
.\"     Title: atlas-cli
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-CLI" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-cli \-\- Atlas Shell Tools command line interface and conventions

.SH "SYNOPSIS"
*

.SH "DESCRIPTION"
.sp
\fBatlas\-shell\-tools\fR(7) makes use of various command line conventions and
utilities to provide a comprehensive user experience.

The \fBShells\fR section discusses the various shells supported by \fBatlas\-shell\-tools\fR(7).

The \fBOptions\fR section explains the various ways \fBatlas\-shell\-tools\fR(7) parses
command line options.

The \fBTAB Complete\fR section shows the various ways that TAB completions can make command
line interaction easier.

.SH "SHELLS"
.sp
While \fBatlas\-shell\-tools\fR(7) is compatible with any command shell, \fBbash\fR(1) and
\fBzsh\fR(1) users can take advantage of both the quick installation scripts and advanced TAB
completion features.

For \fBbash\fR(1) users, note that while \fBatlas\-shell\-tools\fR(7) works best with \fBbash\fR(1)
version 4, version 3 can still utilize the full TAB complete feature set.

.SH "OPTIONS"
.sp
\fBatlas\-shell\-tools\fR(7) has two ways of dealing with options:
.sp
1. Perl's Getopt::Long semantics are used when parsing global options suppled to the \fBatlas\fR(1) and
\fBatlas\-config\fR(1) scripts. In the following command line, the '\-\-debug' option is a global option:
.sp
.RS 4
$ atlas \-\-debug my\-command \-\-opt1
.RE
.sp
2. Subcommand options are parsed with the SimpleOptionAndArgumentParser class, found in the
Atlas repo <https://github.com/osmlab/atlas>. Please check the source of that class for
javadoc documentation comments detailing the parsing semantics. They are similar to the
GNU semantics found here:
<https://www.gnu.org/software/libc/manual/html_node/Argument\-Syntax.html>.
More links are provided in the class documentation. In the following command line,
the '\-\-opt1' option is a subcommand option:
.sp
.RS 4
$ atlas \-\-debug my\-command \-\-opt1
.RE
.sp
Also note that both the Perl option parsing and the SimpleOptionAndArgumentParser class recognize options
using a shortest non-ambiguous prefix. For example, suppose 'my\-command' takes two options '\-\-large\-option'
and '\-\-lazy\-option'. You could specify the '\-\-lazy\-option' by simply
supplying '\-\-lazy' at the command line. However, supplying '\-\-la' would cause an error since 'la'
is an ambiguous prefix between those two options.

.SH "TAB COMPLETE"
.sp
\fBatlas\-shell\-tools\fR(7) supports various TAB completions for the \fBbash\fR(1) and
\fBzsh\fR(1) shells. \fBatlas\fR(1) will contextually complete subcommand names in the current activated
module, the '\-\-preset' option with various available presets, and local files. \fBatlas\-config\fR(1)
will contextually complete subcommands as well as relevant arguments to whatever subcommand is provided
on the command line.

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-cookbook.7
================================================
.\"     Title: atlas-cookbook
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-GLOSSARY" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-cookbook \-\- Atlas Shell Tools command cookbook

.SH "SYNOPSIS"
*

.SH "RECIPES"

.sp
\fBUpdate everything from the default installation to latest:\fR
.RS 4
.sp
# First, update the toolkit
.sp
$ atlas\-config update
.sp
# Now, update the default atlas commands using the atlas repo
.sp
$ atlas\-config repo install atlas
.sp
# You can also update any other registered repos in a similar way
.RE

.sp
\fBSee a list of all installed modules, activate <MODULE>, then list its commands:\fR
.RS 4
.sp
$ atlas\-config list
.sp
$ atlas\-config activate <MODULE>
.sp
$ atlas \-\-list
.sp
# You can also use the abbreviated \-l flag
.sp
$ atlas \-l
.RE

.sp
\fBAdd a new repo, check your registered repos, and then install a module from it:\fR
.sp
.RS 4
.sp
$ atlas\-config repo add my\-new\-repo https://github.com/me/my\-repo.git
.sp
$ atlas\-config repo list
.sp
$ atlas\-config repo install my\-new\-repo
.RE

.sp
\fBBuild a fat JAR and then symlink install for local testing:\fR
.sp
.RS 4
.sp
$ cd /path/to/my/project
.sp
$ ./gradlew clean fat \-x check
.sp
$ atlas\-config install \-\-symlink <path/to/wherever/gradle/puts/jar>
.sp
# Now you can make some changes in your code, then simply rebuild to test them!
.sp
$ vim src/MySourceFile.java
.sp
$ ./gradlew clean fat \-x check
.RE

.sp
\fBLower the log level to DEBUG and run a command, then reset everything to default:\fR
.sp
.RS 4
.sp
$ atlas\-config log set\-level DEBUG
.sp
$ atlas my\-command
.sp
$ atlas\-config log reset
.sp
# Now show the log settings to check that it reset
.sp
$ atlas\-config log show
.RE

.sp
\fBSave a global preset called 'foo' for some common options, then use it:\fR
.sp
.RS 4
.sp
$ atlas\-config preset save\-global foo \-\-foo=bar \-\-baz=bat
.sp
$ atlas \-\-preset foo my\-command
.sp
$ atlas \-\-preset foo another\-command
.RE


.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-environment.7
================================================
.\"     Title: atlas-environment
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-ENVIRONMENT" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-environment \-\- Atlas Shell Tools environment variables

.SH "SYNOPSIS"
*

.SH "DESCRIPTION"
.sp
The following are all environment variables utilized in some way by
\fBatlas\-shell\-tools\fR(7).
.sp

\fBATLAS_SHELL_TOOLS_EDITOR\fR
.sp
.RS 4
Use the specified editor when performing tasks that require an editor. This value
must either be a full path to an editor executable or an executable name that is
found on the system path. \fBatlas\-shell\-tools\fR(7) will split the value of
this variable on whitespace to create ARGV, thus you can include editor flags
and options in the standard way.

\fBatlas\-shell\-tools\fR(7) respects this variable first. If it is not set, it
will try the system\-global \fBEDITOR\fR variable. If that is also not set, it will
use a default editor.
.RE
.sp

\fBATLAS_SHELL_TOOLS_HOME\fR
.sp
.RS 4
This variable should point to the location of the current \fBatlas\-shell\-tools\fR(7)
installation. Provided you installed \fBatlas\-shell\-tools\fR(7) in the usual way
(using the setup scripts), this variable should be automatically set for you in
your shell startup file.

You can temporarily switch to an alternate installation (e.g. for debugging
purposes) by resetting this variable. You can also specify a new data directory
by resetting \fBXDG_DATA_HOME\fR.
.RE
.sp

\fBATLAS_SHELL_TOOLS_NO_COLOR\fR
.sp
.RS 4
Disable special formatted output for \fBatlas\-shell\-tools\fR(7) only. See info
on \fBNO_COLOR\fR for contrast.
.RE
.sp

\fBATLAS_SHELL_TOOLS_PAGER\fR
.sp
.RS 4
Use the specified pager when performing tasks that require a pager. This value
must either be a full path to a pager executable or an executable name that is
found on the system path. \fBatlas\-shell\-tools\fR(7) will split the value of
this variable on whitespace to create ARGV, thus you can include pager flags
and options in the standard way.

\fBatlas\-shell\-tools\fR(7) respects this variable first. If it is not set, it
will try the system\-global \fBPAGER\fR variable. If that is also not set, it will
use a default pager.
.RE
.sp

\fBATLAS_SHELL_TOOLS_USE_COLOR\fR
.sp
.RS 4
Enable special formatted output. Overrides the settings of \fBNO_COLOR\fR and
\fBATLAS_SHELL_TOOLS_NO_COLOR\fR.
.RE
.sp

\fBEDITOR\fR
.sp
.RS 4
Use the specified editor when performing tasks that require an editor. This value
must either be a full path to an editor executable or an executable name that is
found on the system path. \fBatlas\-shell\-tools\fR(7) will split the value of
this variable on whitespace to create ARGV, thus you can include editor flags
and options in the standard way.

\fBatlas\-shell\-tools\fR(7) respects the system's \fBEDITOR\fR variable in the
event that \fBATLAS_SHELL_TOOLS_EDITOR\fR is not set. If neither of these are
set, it will use a default editor.
.RE
.sp

\fBNO_COLOR\fR
.sp
.RS 4
Disable all special formatted output. \fBatlas\-shell\-tools\fR(7) respects this
variable, as do other popular CLI tools. See <https://no\-color.org>.
.RE
.sp

\fBPAGER\fR
.sp
.RS 4
Use the specified pager when performing tasks that require a pager. This value
must either be a full path to a pager executable or an executable name that is
found on the system path. \fBatlas\-shell\-tools\fR(7) will split the value of
this variable on whitespace to create ARGV, thus you can include pager flags
and options in the standard way.

\fBatlas\-shell\-tools\fR(7) respects the system's \fBPAGER\fR variable in the
event that \fBATLAS_SHELL_TOOLS_PAGER\fR is not set. If neither of these are
set, it will use a default pager.
.RE
.sp

\fBXDG_DATA_HOME\fR
.sp
.RS 4
\fBatlas\-shell\-tools\fR(7) stores program data in compliance with the XDG Base Directory
specification, i.e. at $HOME/.local/share/atlas\-shell\-tools. Accordingly, it respects the
\fBXDG_DATA_HOME\fR environment variable \- if set, \fBatlas\-shell\-tools\fR(7) will store program
data at the base path specified by that variable. See \fBatlas\-plumbing\fR(5) for
more information.
.RE
.sp

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-glossary.7
================================================
.\"     Title: atlas-glossary
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-GLOSSARY" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-glossary \-\- A glossary of Atlas Shell Tools terms and concepts

.SH "SYNOPSIS"
*

.SH "DESCRIPTION"

.sp
\fBactive module index\fR
.RS 4
The active module index is a file containing metadata about
the commands in the presently activated module. The metadata includes the command names
as well as the full classnames of the command implementations. A new index is generated
each time a new module is activated. The index can also be regenerated with
\fBatlas-config-sync\fR(1). See \fBatlas\-plumbing\fR(5) for info on where the index
is stored.
.RE

.sp
\fBARGV\fR
.RS 4
Throughout the Atlas Shell Tools manual, ARGV refers to the argument vector from the
command line. In the context of \fBatlas\fR(1), it generally refers to the
actual arguments passed to the command. \fBatlas\fR(1) converts your command line
like "$ atlas \-\-globalOpt MyCommand arg1 \-\-opt1" into a JVM call, so here ARGV refers
to just ["arg1", "\-\-opt1"], the actual arguments given to the JVM. In the aforementioned
example, '\-\-globalOpt' is referred to as a "global" option.

See \fBoption\fR.
.RE

.sp
\fBcommand\fR
.RS 4
A command generally refers to a Java class that implements an Atlas Shell Tools
command. In order to implement an Atlas Shell Tools command, the class must be
a subclass of \fBAbstractAtlasShellToolsCommand\fR, found in the Atlas project:
see <https://github.com/osmlab/atlas>.
.RE

.sp
\fBmodule\fR
.RS 4
Atlas Shell Tools lingo for a JARfile that contains implementations of commands
(see "command" in this glossary). Once a JARfile has been installed into
Atlas Shell Tools using \fBatlas\-config\fR(1), it is known as a module and
is referred to using its module name, as reported by \fBatlas\-config\-list\fR(1).
.sp
See \fBmodule workspace\fR.
.RE

.sp
\fBmodule workspace\fR
.RS 4
The module workspace is where \fBatlas\-shell\-tools\fR(7) stores installed modules.
The workspace can be displayed with \fBatlas\-config\-list\fR(1). More info about
the workspace structure is detailed in \fBatlas\-plumbing\fR(5).
.sp
See \fBmodule\fR.
.RE

.sp
\fBoption\fR
.RS 4
An option refers to a special command line argument prefixed with a "\-"
(a.k.a. a short option) or with a "\-\-" (a.k.a. a long option). Options can be
either global (i.e. they come before the subcommand on the command line), or they
can be tied to the subcommand itself. For example, in the command
"atlas \-\-opt1 MyCommand \-\-opt2", "\-\-opt1" is a global option whereas "\-\-opt2" is an
option of the MyCommand subcommand. Options can also
take their own additional optional or required arguments. For more details on
the intricacies of option syntax, see \fBatlas\-cli\fR(7).
.sp
Finally it should be noted that the option prefix dashes without attached options have special
meanings. "\-" on its own is treated as a regular argument, and "\-\-" on its own is treated as
the end\-of\-options marker. Again, see \fBatlas\-cli\fR(7) for more information.
.RE

.sp
\fBpreset\fR
.RS 4
A preset is a list of saved options for a given command. Presets have a name,
but they are meaningless without their associated command context \- i.e. the
preset "p1" is not meaningful unless you say the preset "p1" for command
"MyCommand". Technically speaking, presets are additionally qualified by a
namespace, but this can be effectively ignored unless that behavior is desired.
Presets and their namespaces are manipulated using the \fBatlas\fR(1) and \fBatlas\-config\fR(1) programs.
See \fBatlas\-presets\fR(7) for more information.
.RE

.sp
\fBrepo\fR
.RS 4
A repo is a remote \fBgit\fR(1) repository containing Atlas Shell Tools command implementations.
The repo management interface is exposed by \fBatlas\-config\-repo\fR(1), and repo installation
is performed using the \fBinstall\fR directive of \fBatlas\-config\-repo\fR(1). The repo object
itself simply consists of some metadata \- specifically a remote URL, a ref
name (could be a branch, commit, tag, etc.), and optional Gradle configuration data.
More info on repo objects can be found in \fBatlas\-plumbing\fR(5).
.RE

.sp
\fBtoolkit\fR
.RS 4
Throughout the Atlas Shell Tools documentation, toolkit generally refers to the
\fBatlas\fR(1) and \fBatlas\-config\fR(1) programs, the manpages included
in the \fBatlas\-shell\-tools\fR(7) suite, and anything else stored in the directory pointed to
by the \fBATLAS_SHELL_TOOLS_HOME\fR environment variable. The toolkit does \fBnot\fR refer to
installed modules, repos, or any saved presets. Those are stored in the toolkit's data directory.
See \fBatlas\-plumbing\fR(5) for more on the data directory.
.RE

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-presets.7
================================================
.\"     Title: atlas-presets
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-PRESETS" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-presets \-\- Atlas Shell Tools preset interface

.SH "SYNOPSIS"
*

.SH "DESCRIPTION"
.sp
Atlas Shell Tools features a robust preset management system. Presets provide a way to save
command options (and long option arguments) for future application or modification.
For more information about how Atlas Shell Tools saves and manipulates presets under
the hood, see \fBatlas\-plumbing\fR(5).
.sp
The preset interface is divided into 3 tiers. Each tier supports an increasing
number of potential use cases at the cost of added complexity for the user. The
tiers are designed such that you can stop at any tier you feel comfortable using
\- without needing to understand how the next tier up works. Each tier builds
on concepts introduced in the previous tiers.

The three interface tiers are:
.sp
.RS 4
\fBTier 1)\fR Basic preset creation and use with \fBatlas\fR(1) options \fB\-\-save\-preset\fR and \fB\-\-preset\fR.

.RS 8
\fBGlobal Presets)\fR A brief addendum to Tier 1 about global preset saving.
.RE

\fBTier 2)\fR More precise preset management with \fBatlas-config-preset\fR(1), including editing, copying, etc.

\fBTier 3)\fR Preset namespace management with the \fBatlas-config-preset\fR(1) \fBnamespace\fR directive.
.RE

.SH "TIER 1"
Tier 1 provides a simple, lightweight interface for preset usage through the \fBatlas\fR(1) options
\fB\-\-preset\fR=\fInames\fR and \fB\-\-save\-preset\fR=\fInew\-name\fR, where
\fInames\fR are the name(s) of the preset(s) you would like to apply and \fInew\-name\fR is
the name of the preset you would like to create.
.sp
When running a command with the \fB\-\-preset\fR=\fInames\fR option,
\fBatlas\fR(1) checks the list of saved presets associated with that command.
If one of those presets matches with one of the given \fInames\fR, \fBatlas\fR(1) will apply that
preset. It will perform this check and application for each preset provided in \fInames\fR (which should
be comma or colon separated). If one of the given \fInames\fR does not refer to a saved preset,
\fBatlas\fR(1) displays the list of presets and exits with an error.
.sp
When running a command with the \fB\-\-save\-preset\fR=\fInew\-name\fR option,
\fBatlas\fR attempts to save the current ARGV to a new preset called \fInew\-name\fR.
If \fInew\-name\fR already exists, \fBatlas\fR(1) will exit with an error.
.sp
If both \fB\-\-preset\fR=\fInames\fR and \fB\-\-save\-preset\fR=\fInew\-name\fR
are applied at the same time, \fBatlas\fR(1) will attempt to apply \fInames\fR before
saving \fInew\-name\fR. This allows you to easily save new presets that iterate
on previously created presets.
.sp
Note that preset names are bound to the target command at save\-time \- 
a preset name without its command context is meaningless. This means that preset
"p1" for "ExampleCommand" and preset "p1" for "MyCommand" may contain
completely different values.
.sp
Let's look at an example of the Tier 1 interface in action.
We will run a command called "MyCommand" and assume preset "p1" does not yet exist:
.sp
.RS 4
$ atlas \-\-save\-preset=p1 MyCommand arg1 arg2 \-\-opt1 \-\-opt2=opt2Arg
.RE
.sp
This will save a preset "p1" for "MyCommand" with contents ["\-\-opt1", "\-\-opt2=opt2Arg"]
and then run the command. Note that the preset engine only saves options, and so will
automatically discard any ARGV element that does not look like an option. For this reason,
you \fImust\fR use the long option '=' syntax for specifying option arguments when saving
a preset (e.g. '--opt=arg' and \fInot\fR '--opt arg').
.sp
Now that you have saved preset "p1" for "MyCommand", you can apply it like:
.sp
.RS 4
$ atlas \-\-preset=p1 MyCommand arg1 arg2
.RE
.sp
This will run the exact same command as before, but it saves us from having
to type out "\-\-opt1" and "\-\-opt2=opt2Arg". In addition to simply applying
a preset verbatim, you can also override a saved option by specifying it again
on the command line:
.sp
.RS 4
$ atlas \-\-preset=p1 MyCommand arg1 arg2 \-\-opt2=OverrideOpt2Arg
.RE
.sp
This will run the same command as the above 2 examples, except it will override
the preset value of \-\-opt2 with your new value "OverrideOpt2Arg".
.sp
You can extend presets by applying and saving at the same time. Here,
we apply our preset "p1" while also saving a new preset called "p2", based off
the contents of "p1":
.sp
.RS 4
$ atlas \-\-preset=p1 \-\-save\-preset=p2 MyCommand arg1 arg2 --opt2=OverrideOpt2Arg --opt3
.RE
.sp
The new preset "p2" will contain the following contents:
["\-\-opt1", "\-\-opt2=opt2Arg", "\-\-opt2=OverrideOpt2Arg", "\-\-opt3"]. Even though
\-\-opt2 is repeated, this is OK. When multiple instances of the same option are
supplied, the option parser will use ARGV's rightmost instance of that option.
.sp
Let's look at one final example where we apply two presets at once. Assuming you now have
a preset "p3" with contents: ["\-\-opt3"], you could run:
.sp
.RS 4
$ atlas \-\-preset=p1,p3 MyCommand
.RE
.sp
This would run MyCommand with ["\-\-opt1", "\-\-opt2=opt2Arg", "\-\-opt3"] as the effective ARGV.
Note that the rightmost ARGV selection strategy for duplicate options applies here as well. Keep this in
mind when applying multiple presets that contain the same option.

.SS "Global Presets"
In addition to the presets tied to each command, you can also save global presets
using the \fBatlas\fR(1) option \fB\-\-save\-global\-preset\fR=\fInew\-name\fR. Global presets
can be applied to any command using the \fB\-\-preset\fR=\fInames\fR option.
When checking the \fInames\fR given to \fB\-\-preset\fR, the \fBatlas\fR(1) preset system will always attempt
to use global presets as a fall back. This means, for example, that if you have a preset "p1" for "MyCommand" as well
as global presets "p1" and "p2", supplying \fB\-\-preset=p1,p2\fR when running MyCommand will use the "p1" associated with "MyCommand",
but it will use the global preset "p2".
.sp
For the following examples, let's assume we have a command "MyCommand" with a preset "p1". We also have a command
"AnotherCommand" with no presets. Finally we have global presets "p1" and "p2".
.sp
The following will run "MyCommand" with its version of "p1" but with global "p2":
.sp
.RS 4
$ atlas \-\-preset=p1,p2 MyCommand
.RE
.sp
This next command will run "AnotherCommand" with globals "p1" and "p2":
.sp
.RS 4
$ atlas \-\-preset=p1,p2 AnotherCommand
.RE
.sp
Finally, this last command will fail since there is no preset "p3" associated with "MyCommand", nor is
there a global definition of "p3":
.sp
.RS 4
$ atlas \-\-preset=p1,p2,p3 MyCommand
.RE
.sp


.SH "TIER 2"
Tier 2 provides more precise preset management using the \fBatlas\-config\fR(1)
subcommand \fBpreset\fR. \fBatlas\-config\-preset\fR(1) takes a mandatory \fIdirective\fR,
which is just a verb specifying a configuration action. Note that many of the
directives require additional command context (recall that preset names are meaningless without an associated command).
Below are the available directives:

.sp
.RS 4
\fBcopy\fR \fIcommand\fR <source> <destination>
.RS 4
Copy \fIcommand\fR preset <source> into new preset <destination>.
<destination> must not already exist, else the copy will fail. The following example
copies the preset "p1" into new preset "p2", for command "MyCommand":
.sp
.RS 4
$ atlas\-config preset copy MyCommand p1 p2
.RE
.sp
The \fBcopy\fR directive is useful in combination with the \fBedit\fR directive \-
when you want to make multiple versions of a long preset, each with some minor differences.
.RE
.RE

.sp
.RS 4
\fBcopy\-global\fR <source> <destination>
.RS 4
Copy global preset <source> into new preset <destination>.
<destination> must not already exist, else the copy will fail. The following example
copies the global preset "p1" into new global preset "p2":
.sp
.RS 4
$ atlas\-config preset copy\-global p1 p2
.RE
.sp
Like the \fBcopy\fR directive, the \fBcopy\-global\fR is useful in combination
with the \fBedit\-global\fR directive for quick preset iteration.
.RE
.RE

.sp
.RS 4
\fBedit\fR \fIcommand\fR <name>
.RS 4
Edit preset <name> for \fIcommand\fR. If <name> does not exist, then it will be
created when the edit is successfully saved. The default preset editor is \fBvim\fR,
but this can be changed by setting the \fBATLAS_SHELL_TOOLS_EDITOR\fR environment variable.
The following example will edit preset "p1" for command "MyCommand":
.sp
.RS 4
$ atlas\-config preset edit MyCommand p1
.RE
.RE
.RE

.sp
.RS 4
\fBedit\-global\fR <name>
.RS 4
Edit global preset <name>. If <name> does not exist, then it will be
created when the edit is successfully saved. The default preset editor is \fBvim\fR,
but this can be changed by setting the \fBATLAS_SHELL_TOOLS_EDITOR\fR environment variable.
The following example will edit global preset "p1":
.sp
.RS 4
$ atlas\-config preset edit\-global p1
.RE
.RE
.RE

.sp
.RS 4
\fBlist\fR [\fIcommand\fR [name]]
.RS 4
List all available presets (including globals), or list all presets for a given [\fIcommand\fR], or
list contents of preset [name] for [\fIcommand\fR]. The following example lists
all available presets, then lists all presets for "MyCommand", and finally lists
the contents of preset "p1" for command "MyCommand":
.sp
.RS 4
$ atlas\-config preset list

$ atlas\-config preset list MyCommand

$ atlas\-config preset list MyCommand p1
.RE
.sp
.RE
.RE

.sp
.RS 4
\fBlist\-global\fR [name]
.RS 4
List all available global presets, or list contents of global preset [name]. The
following example lists all available global presets, then lists the contents of
global preset "p1":
.sp
.RS 4
$ atlas\-config preset list\-global

$ atlas\-config preset list\-global p1
.RE
.sp
.RE
.RE

.sp
.RS 4
\fBnamespace\fR <subdirective> [namespace]
.RS 4
Execute a <subdirective> on a given preset [namespace]. Available subdirectives
are \fBlist\fR, \fBuse\fR, \fBcreate\fR, and \fBremove\fR. Preset namespaces \-
and the \fBnamespace\fR directive \- are explained in more detail in the
\fBTIER 3\fR section found below.
.RE
.RE
.sp

.sp
.RS 4
\fBremove\fR \fIcommand\fR [name]
.RS 4
Remove all presets for a given \fIcommand\fR, or remove the preset [name] for
\fIcommand\fR. The following example removes all presets for command "MyCommand",
then removes preset "p1" for command "AnotherCommand":
.sp
.RS 4
$ atlas\-config preset remove MyCommand

$ atlas\-config preset remove AnotherCommand p1
.RE
.sp
.RE
.RE

.sp
.RS 4
\fBremove\-global\fR [name]
.RS 4
Remove all global presets , or remove the global preset [name].
The following example removes all global presets, then removes globa preset "p1":
.sp
.RS 4
$ atlas\-config preset remove\-global

$ atlas\-config preset remove\-global p1
.RE
.sp
.RE
.RE

.sp
.RS 4
\fBsave\fR \fIcommand\fR <name> <options...>
.RS 4
Save a preset <name> for \fIcommand\fR without actually running the command.
<options...> is a sequence of options to be saved in the preset.
Again, recall that you must use the long option '=' syntax for specifying option
arguments when saving a preset (e.g. '--opt=arg' and \fInot\fR '--opt arg').
The following example saves preset "p1" to command "MyCommand" with some options
--opt1 and --opt2=opt2Arg:
.sp
.RS 4
$ atlas\-config preset save MyCommand p1 --opt1 --opt2=opt2Arg
.RE
.sp
.RE
.RE

.sp
.RS 4
\fBsave\-global\fR <name> <options...>
.RS 4
Save a global preset <name>. <options...> is a sequence of options to be savedin the preset.
Again, recall that you must use the long option '=' syntax for specifying option
arguments when saving a preset (e.g. '--opt=arg' and \fInot\fR '--opt arg').
The following example saves global preset "p1" with some options
--opt1 and --opt2=opt2Arg:
.sp
.RS 4
$ atlas\-config preset save\-global p1 --opt1 --opt2=opt2Arg
.RE
.sp
.RE
.RE

.SH "TIER 3"
Tier 3 provides preset namespaces. A namespace creates an enclosing
scope for the presets associated with each command. For example, preset
"p1" for command "MyCommand" under "namespace1" and preset "p1" for command
"MyCommand" under "namespace2" may have completely different contents. Up to
this point, we have been working under the default namespace, appropriately
called "default". You can create and manage namespaces using the
\fBatlas\-config\-preset\fR(1) \fBnamespace\fR directive, which takes a subdirective to denote
the desired action. The available subdirectives are below:
.sp

.RS 4
\fBcreate\fR <namespace>
.RS 4
Create a new <namespace>, throwing an error if <namespace> already exists. This
will not actually switch to the new namespace. The following example creates a
namespace called "namespace1":
.sp
.RS 4
$ atlas\-config preset namespace create namespace1
.RE
.RE
.RE

.RS 4
\fBlist\fR [namespace]
.RS 4
List all namespaces while highlighting the current namespace with a "*", or list the contents of namespace [namespace].
The following example lists all namespaces, then lists the contents of namespace "namespace1".
.sp
.RS 4
$ atlas\-config preset namespace list

$ atlas\-config preset namespace list namespace1
.RE
.RE
.RE

.RS 4
\fBremove\fR <namespace>
.RS 4
Delete a <namespace>, including all associated presets. The \fBremove\fR will
fail if <namespace> does not exist, if <namespace> is currently in-use, or if
<namespace> is the default namespace. The following example removes a namespace
called "namespace1":
.sp
.RS 4
$ atlas\-config preset namespace remove namespace1
.RE
.RE
.RE

.RS 4
\fBuse\fR <namespace>
.RS 4
Switch to <namespace>, throwing an error if <namespace> does not exist. Any new
presets you create will now be saved under <namespace>, and presets you apply
will be sourced from <namespace>. The following example switches to a namespace
called "namespace1":
.sp
.RS 4
$ atlas\-config preset namespace use namespace1
.RE
.RE
.RE

.sp

.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/man/man7/atlas-shell-tools.7
================================================
.\"     Title: atlas-shell-tools
.\"    Author: Lucas Cram
.\"    Source: atlas-shell-tools 1.0.0
.\"  Language: English
.\"
.TH "ATLAS-SHELL-TOOLS" "7" "28 September 2020" "atlas\-shell\-tools 1\&.0\&.0" "Atlas Shell Tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------

.SH "NAME"
.sp
atlas\-shell\-tools \-\- A command line toolkit for Atlas and related projects

.SH "SYNOPSIS"
*

.SH "DESCRIPTION"
The Atlas Shell Tools are a command line toolkit for running commands defined
in Atlas and related projects. The main tool for running commands is
\fBatlas\fR(1), and the installation can be configured with \fBatlas\-config\fR(1)
and its various subcommands.

.SH "MANUAL PAGES"
.RS 4

\fBatlas\fR(1)
.RS 4
Run an Atlas Shell Tools command
.RE

\fBatlas\-config\fR(1)
.RS 4
Configure the Atlas Shell Tools installation
.RE

\fBatlas\-config\-activate\fR(1)
.RS 4
Activate an installed module
.RE

\fBatlas\-config\-deactivate\fR(1)
.RS 4
Deactivate an installed module
.RE

\fBatlas\-config\-install\fR(1)
.RS 4
Install a new Atlas Shell Tools module from a local JAR
.RE

\fBatlas\-config\-list\fR(1)
.RS 4
List installed modules and module statuses
.RE

\fBatlas\-config\-log\fR(1)
.RS 4
Check or set log parameters
.RE

\fBatlas\-config\-preset\fR(1)
.RS 4
Create and manage Atlas Shell Tools command presets
.RE

\fBatlas\-config\-repo\fR(1)
.RS 4
Register and manage Atlas Shell Tools repositories
.RE

\fBatlas\-config\-reset\fR(1)
.RS 4
Reset the installation
.RE

\fBatlas\-config\-sync\fR(1)
.RS 4
Refresh the installation based on the active module
.RE

\fBatlas\-config\-uninstall\fR(1)
.RS 4
Uninstall Atlas Shell Tools module(s)
.RE

\fBatlas\-config\-update\fR(1)
.RS 4
Update the Atlas Shell Tools core toolkit
.RE

\fBatlas\-plumbing\fR(5)
.RS 4
Details about how Atlas Shell Tools stores toolkit program data
.RE

\fBatlas\-cli\fR(7)
.RS 4
Atlas Shell Tools command line interface and conventions
.RE

\fBatlas\-cookbook\fR(7)
.RS 4
Atlas Shell Tools command cookbook
.RE

\fBatlas\-environment\fR(7)
.RS 4
Atlas Shell Tools environment variables
.RE

\fBatlas\-glossary\fR(7)
.RS 4
A glossary of Atlas Shell Tools terms and concepts
.RE

\fBatlas\-presets\fR(7)
.RS 4
Atlas Shell Tools preset interface
.RE

.RE


.SH "ATLAS SHELL TOOLS"
.sp
Part of the \fBatlas\-shell\-tools\fR(7) suite


================================================
FILE: atlas-shell-tools/quick_install_bash.sh
================================================
#!/bin/sh

# Define a prompt function for re-use
prompt_yn_was_yes() {
    prompt=$1
    while true;
    do
        echo "$prompt"
        # handle EOF case
        if ! read -r answer;
        then
            exit 0
        fi
        if [ "$answer" != "${answer#[Yy]}" ];
        then
            # case user entered 'y'
            return 0
        elif [ "$answer" != "${answer#[Nn]}" ];
        then
            # case user entered 'n'
            return 1
        fi
        echo "Please enter 'y' or 'n'..."
    done
}

# Utilize POSIX sh features ONLY for installation. Also, we exit the script
# on any error.
set -e

# Grab the install location from first argument if present.
install_location=$1

# Verify that you have programs needed by atlas-shell-tools
if ! command -v less > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'less' paging program."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 35-42."
    exit 1
fi

if ! command -v man > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'man' program."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 44-51."
    exit 1
fi

if ! command -v vim > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'vim' editor."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 53-60."
    exit 1
fi

# Check the install location. If blank, we will use $HOME as default after
# prompting the user for confirmation.
if [ -z "$install_location" ];
then
    echo "Using the value of \$HOME ($HOME) as install location."
    echo "If an alternative location is desired, select 'n' and try:"
    echo
    echo "    \$ sh quick_install_bash.sh /install/path"
    echo
    if prompt_yn_was_yes "OK to continue (y/n)?";
    then
        install_location="$HOME"
    else
        exit 0
    fi
fi

if [ ! -d "$install_location" ];
then
    echo "Error: $install_location does not exist"
    exit 1
fi

if [ ! -w "$install_location" ];
then
    echo "Error: you do not have write permissions for $install_location"
    exit 1
fi

base_folder="atlas-shell-tools"
full_installation_path="$install_location/$base_folder"

if [ -e "$full_installation_path" ];
then
    echo "Error: $full_installation_path already exists"
    exit 1
fi

git clone https://github.com/osmlab/atlas.git "$full_installation_path"
cd "$full_installation_path"
git checkout main
chmod +x atlas-shell-tools/scripts/atlas atlas-shell-tools/scripts/atlas-config
export ATLAS_SHELL_TOOLS_HOME="$full_installation_path/atlas-shell-tools"
export PATH="$PATH:$ATLAS_SHELL_TOOLS_HOME/scripts"

# Install the core Atlas module using a repo
./atlas-shell-tools/scripts/atlas-config repo add atlas https://github.com/osmlab/atlas.git main
./atlas-shell-tools/scripts/atlas-config repo install atlas

# Modify the bash startup files with appropriate settings
start_startup_line="# atlas-shell-tools startup: added automatically by quick_install_bash.sh"
end_startup_line="# END atlas-shell-tools startup"
export_home_line="export ATLAS_SHELL_TOOLS_HOME=\"$full_installation_path/atlas-shell-tools\""
export_path_line="export PATH=\"\$PATH:\$ATLAS_SHELL_TOOLS_HOME/scripts\""
source_line="source \"\$ATLAS_SHELL_TOOLS_HOME/ast_completions.bash\""

echo
echo "About to append ~/.bash_profile with:"
echo
echo "    $start_startup_line";
echo "    $export_home_line";
echo "    $export_path_line";
echo "    $source_line";
echo "    $end_startup_line";
echo
if prompt_yn_was_yes "Is this OK (y/n)?";
then
    {
        echo;
        echo "$start_startup_line";
        echo "$export_home_line";
        echo "$export_path_line";
        echo "$source_line";
        echo "$end_startup_line";
        echo;
    } >> "$HOME/.bash_profile"
fi
echo
echo "About to append ~/.bashrc with:"
echo
echo "    $start_startup_line";
echo "    $source_line";
echo "    $end_startup_line";
echo
if prompt_yn_was_yes "Is this OK (y/n)?";
then
    {
        echo;
        echo "$start_startup_line";
        echo "$source_line";
        echo "$end_startup_line";
        echo;
    } >> "$HOME/.bashrc"
fi

# Complete the installation
echo
echo "Installation complete."
echo "Restart your terminal and try 'man atlas-shell-tools' to get started."


================================================
FILE: atlas-shell-tools/quick_install_zsh.sh
================================================
#!/bin/sh

# Define a prompt function for re-use
prompt_yn_was_yes() {
    prompt=$1
    while true;
    do
        echo "$prompt"
        # handle EOF case
        if ! read -r answer;
        then
            exit 0
        fi
        if [ "$answer" != "${answer#[Yy]}" ];
        then
            # case user entered 'y'
            return 0
        elif [ "$answer" != "${answer#[Nn]}" ];
        then
            # case user entered 'n'
            return 1
        fi
        echo "Please enter 'y' or 'n'..."
    done
}

# Utilize POSIX sh features ONLY for installation. Also, we exit the script
# on any error.
set -e

# Grab the install location from first argument if present.
install_location=$1

# Verify that you have programs needed by atlas-shell-tools
if ! command -v less > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'less' paging program."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 35-42."
    exit 1
fi

if ! command -v man > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'man' program."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 44-51."
    exit 1
fi

if ! command -v vim > /dev/null;
then
    echo "Error: atlas-shell-tools requires the 'vim' editor."
    # Unfortunately, we cannot use $LINENO in POSIX sh. Make sure to manually
    # maintain this line number.
    echo "To install anyway, open $0 and comment out check on lines 53-60."
    exit 1
fi

# Check the install location. If blank, we will use $HOME as default after
# prompting the user for confirmation.
if [ -z "$install_location" ];
then
    echo "Using the value of \$HOME ($HOME) as install location."
    echo "If an alternative location is desired, select 'n' and try:"
    echo
    echo "    \$ sh quick_install_bash.sh /install/path"
    echo
    if prompt_yn_was_yes "OK to continue (y/n)?";
    then
        install_location="$HOME"
    else
        exit 0
    fi
fi

if [ ! -d "$install_location" ];
then
    echo "Error: $install_location does not exist"
    exit 1
fi

if [ ! -w "$install_location" ];
then
    echo "Error: you do not have write permissions for $install_location"
    exit 1
fi

base_folder="atlas-shell-tools"
full_installation_path="$install_location/$base_folder"

if [ -e "$full_installation_path" ];
then
    echo "Error: $full_installation_path already exists"
    exit 1
fi

git clone https://github.com/osmlab/atlas.git "$full_installation_path"
cd "$full_installation_path"
git checkout main
chmod +x atlas-shell-tools/scripts/atlas atlas-shell-tools/scripts/atlas-config
export ATLAS_SHELL_TOOLS_HOME="$full_installation_path/atlas-shell-tools"
export PATH="$PATH:$ATLAS_SHELL_TOOLS_HOME/scripts"

# Install the core Atlas module using a repo
./atlas-shell-tools/scripts/atlas-config repo add atlas https://github.com/osmlab/atlas.git main
./atlas-shell-tools/scripts/atlas-config repo install atlas

# Modify the bash startup files with appropriate settings
start_startup_line="# atlas-shell-tools startup: added automatically by quick_install_zsh.sh"
end_startup_line="# END atlas-shell-tools startup"
export_home_line="export ATLAS_SHELL_TOOLS_HOME=\"$full_installation_path/atlas-shell-tools\""
export_path_line="export PATH=\"\$PATH:\$ATLAS_SHELL_TOOLS_HOME/scripts\""
source_line="source \"\$ATLAS_SHELL_TOOLS_HOME/ast_completions.zsh\""

echo
echo "About to append ~/.zshenv with:"
echo
echo "    $start_startup_line";
echo "    $export_home_line";
echo "    $export_path_line";
echo "    $source_line";
echo "    $end_startup_line";
echo
if prompt_yn_was_yes "Is this OK (y/n)?";
then
    {
        echo;
        echo "$start_startup_line";
        echo "$export_home_line";
        echo "$export_path_line";
        echo "$source_line";
        echo "$end_startup_line";
        echo;
    } >> "$HOME/.zshenv"
fi
echo
echo "About to append ~/.zshrc with:"
echo
echo "    $start_startup_line";
echo "    $source_line";
echo "    $end_startup_line";
echo
if prompt_yn_was_yes "Is this OK (y/n)?";
then
    {
        echo;
        echo "$start_startup_line";
        echo "$source_line";
        echo "$end_startup_line";
        echo;
    } >> "$HOME/.zshrc"
fi

# Complete the installation
echo
echo "Installation complete."
echo "Restart your terminal and try 'man atlas-shell-tools' to get started."


================================================
FILE: atlas-shell-tools/scripts/atlas
================================================
#!/usr/bin/env perl

use warnings;
use strict;

use File::Spec;
use Getopt::Long qw(GetOptions);
use POSIX;

# Pull in code from the common modules
use FindBin;
use lib "$FindBin::Bin/common";
use ast_log_subsystem;
use ast_preset_subsystem;
use ast_module_subsystem;
use ast_tty;
use ast_utilities;


## ORGANIZATION
## This script is organized into 3 sections:
## 1) GLOBAL INITIALIZATION - initialize some useful global constants
## 2) SUBROUTINES - subroutines used by the command logic
## 3) EXECUTION LOGIC - the actual command logic, ie. 'main'


########## BEGIN GLOBAL INITIALIZATION ##########
my $ansi_red = ast_tty::ansi_red();
my $ansi_green = ast_tty::ansi_green();
my $ansi_magenta = ast_tty::ansi_magenta();
my $ansi_bold = ast_tty::ansi_bold();
my $ansi_reset = ast_tty::ansi_reset();
my $ansi_bunl = ast_tty::ansi_begin_underln();
my $ansi_eunl = ast_tty::ansi_end_underln();

my $no_colors_stdout = ast_tty::is_no_colors_stdout();
my $red_stdout = $no_colors_stdout ? "" : $ansi_red;
my $green_stdout = $no_colors_stdout ? "" : $ansi_green;
my $magenta_stdout = $no_colors_stdout ? "" : $ansi_magenta;
my $bold_stdout = $no_colors_stdout ? "" : $ansi_bold;
my $reset_stdout = $no_colors_stdout ? "" : $ansi_reset;
my $bunl_stdout = $no_colors_stdout ? "" : $ansi_bunl;
my $eunl_stdout = $no_colors_stdout ? "" : $ansi_eunl;

my $no_colors_stderr = ast_tty::is_no_colors_stderr();
my $red_stderr = $no_colors_stderr ? "" : $ansi_red;
my $green_stderr = $no_colors_stderr ? "" : $ansi_green;
my $magenta_stderr = $no_colors_stderr ? "" : $ansi_magenta;
my $bold_stderr = $no_colors_stderr ? "" : $ansi_bold;
my $reset_stderr = $no_colors_stderr ? "" : $ansi_reset;
my $bunl_stderr = $no_colors_stderr ? "" : $ansi_bunl;
my $eunl_stderr = $no_colors_stderr ? "" : $ansi_eunl;

my $ast_path;
my $skip_paging;
my $quiet;
my $debug_flag;

my $program_name = $ast_utilities::COMMAND_PROGRAM;
my $program_version = "$ast_utilities::ATLAS_SHELL_TOOLS_VERSION ($program_name program)";

########## END GLOBAL INITIALIZATION ##########


########## BEGIN SUBROUTINES ##########

sub atlas_unrecognized_command_message_and_exit {
    my $command = shift;
    ast_utilities::error_output($program_name, "no such command ${bold_stderr}${command}${reset_stderr}");
    print STDERR "Try '${bold_stderr}${program_name} --list${reset_stderr}' for a list of commands.\n";
    print STDERR "Try '${bold_stderr}${program_name} --help${reset_stderr}' for more information.\n\n";

    my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);
    my @subcommands = keys %subcommand_classes;

    # Determine the most similar command using Levenshtein distance
    my $closest_command;
    my $min_distance = undef;
    foreach my $candidate_command (@subcommands) {
        my $distance = ast_utilities::levenshtein($command, $candidate_command);
        if (!defined $min_distance) {
            $closest_command = $candidate_command;
            $min_distance = $distance;
        }
        elsif ($distance < $min_distance) {
            $closest_command = $candidate_command;
            $min_distance = $distance;
        }
    }
    print STDERR "The most similar command is: ${bold_stderr}${closest_command}${reset_stderr}\n";

    exit 127;
}

sub atlas_show_contextual_help_menu_and_exit {
    my $context = shift;
    my $skip_paging = shift;
    my $ast_path = shift;

    unless (defined $skip_paging) {
        $skip_paging = 0;
    }

    my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);
    my $subcommand_class = $subcommand_classes{$context};

    unless (defined $subcommand_class) {
        atlas_unrecognized_command_message_and_exit($context);
    }

    my %modules = ast_module_subsystem::get_module_to_status_hash($ast_path);
    my @activated_modules = ast_module_subsystem::get_activated_modules(\%modules);
    my $module = $activated_modules[0];
    my $full_path_to_modules_folder = File::Spec->catfile($ast_path, $ast_module_subsystem::MODULES_FOLDER, "$module" . $ast_module_subsystem::MODULE_SUFFIX);
    my $full_path_to_log4j = File::Spec->catfile($ast_path, $ast_log_subsystem::LOG4J_FILE_PATH);

    my @java_command = ();
    push @java_command, 'java';
    push @java_command, '-Xms2G';
    push @java_command, '-Xmx2G';
    push @java_command, '-cp';
    push @java_command, "${full_path_to_modules_folder}";
    push @java_command, "-Dlog4j.configuration=file:${full_path_to_log4j}";
    push @java_command, "${subcommand_class}";
    push @java_command, "--help";

    if (ast_tty::is_no_colors_stdout()) {
        push @java_command, "$ast_utilities::JAVA_NO_COLOR_STDOUT";
    }
    else {
        push @java_command, "$ast_utilities::JAVA_COLOR_STDOUT";
    }

    if (ast_tty::is_no_colors_stderr()) {
        push @java_command, "$ast_utilities::JAVA_NO_COLOR_STDERR";
    }
    else {
        push @java_command, "$ast_utilities::JAVA_COLOR_STDERR";
    }

    push @java_command, "$ast_utilities::JAVA_NO_USE_PAGER";

    my $terminal_width = ast_tty::terminal_width();
    push @java_command, "$terminal_width";
    push @java_command, "$ast_utilities::JAVA_MARKER_SENTINEL";

    my @pager_command = ast_utilities::get_pager();

    if ($debug_flag) {
        print("Would execute JVM command:\n");
        print("@java_command\n");
        print("Then pipe into:\n");
        print("@pager_command\n");
        exit 0;
    }

    # NOTE: there is no easy way to prevent shell interference should the java
    # command array contain only one element.
    open JAVA, "-|", @java_command or die $!;
    my $output = '';
    while (<JAVA>) {
        # Not the most efficient way to do things.
        # Perhaps some kind of slurp is needed. File::Slurp could work but does
        # have an outstanding Unicode bug. Need to investigate more.
        $output = $output . $_;
    }
    close JAVA;

    if ($skip_paging) {
        print "$output";
    }
    else {
        # NOTE: there is no easy way to prevent shell interference should the pager
        # command array contain only one element.
        open PAGER, "|-", @pager_command or die $!;
        print PAGER "$output";
        close PAGER;
    }

    exit 0;
}

sub atlas_show_class_of_and_exit {
    my $ast_path = shift;
    my $class_of = shift;

    my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);
    my $subcommand_class = $subcommand_classes{$class_of};

    unless (defined $subcommand_class) {
        atlas_unrecognized_command_message_and_exit($class_of);
    }

    print "$subcommand_class\n";
    exit 0;
}

sub atlas_list_subcommands_and_exit {
    my $ast_path = shift;
    my $skip_paging = shift;

    unless (defined $skip_paging) {
        $skip_paging = 0;
    }

    my %subcommand_desc = ast_module_subsystem::get_subcommand_to_description_hash($ast_path);
    my @pager_command = ast_utilities::get_pager();

    if ($skip_paging) {
        print "\n";
        print "${bold_stdout}AVAILABLE COMMANDS${reset_stdout}\n";
        print "See the help page for a command with ${bold_stdout}${program_name} --help <command>${reset_stdout}.\n\n";
        foreach my $subcommand (sort {lc $a cmp lc $b} keys %subcommand_desc) {
            print "    ${bold_stdout}$subcommand${reset_stdout}\n";
            print "        $subcommand_desc{$subcommand}\n\n";
        }
        print "\n";
    }
    else {
        # NOTE: there is no easy way to prevent shell interference should the pager
        # command array contain only one element.
        open PAGER, "|-", @pager_command or die $!;
        print PAGER "${bold_stdout}AVAILABLE COMMANDS${reset_stdout}\n";
        print PAGER "See the help page for a command with ${bold_stdout}${program_name} --help <command>${reset_stdout}.\n";
        print PAGER "You can open a new page directly from this window with ${bold_stdout}!${program_name} --help <command>${reset_stdout}.\n\n";
        foreach my $subcommand (sort {lc $a cmp lc $b} keys %subcommand_desc) {
            print PAGER "    ${bold_stdout}$subcommand${reset_stdout}\n";
            print PAGER "        $subcommand_desc{$subcommand}\n\n";
        }
        close PAGER;
    }

    exit 0;
}

########## END SUBROUTINES ##########


########## BEGIN EXECUTION LOGIC ##########

ast_utilities::verify_environment_or_exit();
$ast_path = ast_utilities::create_data_directory();

# Handle atlas global options. Global options are options that come before the
# supplied subcommand. Subcommand options are handled by the command implementation.
my $memory = '8G';
my $help_argument;
my $show_list;
my $class_of;
my $save_preset;
my $save_global_preset;
my $use_preset;
my $remove_preset;
my $all_presets;
my $show_preset;
my $edit_preset;
my $allow_run_as_root;
Getopt::Long::Configure(qw(no_ignore_case_always));
GetOptions(
    "no-pager"          => \$skip_paging,
    "memory|m=s"        => \$memory,
    "help|h:s"          => \$help_argument,
    "version|V"         => sub {
        print "$program_version\n";
        exit 0;
    },
    "quiet|q"               => \$quiet,
    "list|l"                => \$show_list,
    "class-of=s"            => \$class_of,
    "preset|p=s"            => \$use_preset,
    "save-preset=s"         => \$save_preset,
    "save-global-preset=s"  => \$save_global_preset,
    "debug"                 => \$debug_flag,
    "allow-run-as-root"     => \$allow_run_as_root,
    # This callback occurs the first time we see a non-option argument.
    # In our case, this will be the subcommand.
    "<>"                => sub {
        my ($arg) = @_;
        if ($arg =~ m{^-}) {
            unless ($arg eq '-') {
                die "FATAL error: unhandled global option $arg";
            }
        }
        # add the subcommand to the front of ARGV
        unshift @ARGV, $arg;
        die "!FINISH";
    }
) or ast_utilities::getopt_failure_and_exit($program_name);

if (geteuid() == 0) {
    unless (defined $allow_run_as_root) {
        print STDERR "For security reasons, you are highly discouraged from running atlas-shell-tools\n";
        print STDERR "as the root user. Atlas-shell-tools cannot guarantee that modules installed from\n";
        print STDERR "external repositories are safe to run with root privileges.\n\n";
        print STDERR "To disregard this warning and run as root anyway, please use the option:\n";
        print STDERR "--allow-run-as-root\n\n";
        exit 1;
    }
}

# Handle the case where the user supplied a --help flag with no arg.
# We can show this without doing any other verification.
# Just display the man page and exit.
if (defined $help_argument) {
    if ($help_argument eq '') {
        my @man_command = ast_utilities::get_man($skip_paging);
        if (scalar @man_command == 0) {
            ast_utilities::error_output($program_name, "could not obtain \'man\' command");
            print STDERR "Please ensure a valid \'man\' command is on your path.\n";
            exit 1;
        }
        my @command = ();
        push @command, @man_command;
        push @command, "$program_name";
        system {$command[0]} @command;
        my $exitcode = $? >> 8;
        if ($exitcode != 0) {
            exit 1;
        }
        exit 0;
    }
}

my %modules = ast_module_subsystem::get_module_to_status_hash($ast_path);
my %modules_links = ast_module_subsystem::get_module_to_symlink_hash($ast_path);

# If there are no modules, let's throw an error
unless (keys %modules) {
    ast_utilities::error_output($program_name, 'found no installed modules');
    print STDERR "Try '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} install /path/to/module.jar${reset_stderr}' to install a module.\n";
    exit 1;
}

my @activated_modules = ast_module_subsystem::get_activated_modules(\%modules);

# If there are modules but none are active, warn the user
if (scalar @activated_modules == 0) {
    ast_utilities::error_output($program_name, 'no activated module');
    print STDERR "Try '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} list${reset_stderr}' to see all installed modules.\n";
    print STDERR "Then try '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} activate <module>${reset_stderr}' to activate.\n";
    exit 1;
}

# If the currently active module is a broken symlink, warn the user
if ($modules_links{$activated_modules[0]} == $ast_module_subsystem::BROKEN_SYMLINK) {
    ast_utilities::error_output($program_name, 'current active module is a broken symlink');
    print STDERR "To see the link value, try '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} list${reset_stderr}'.\n";
    print STDERR "Fix the link, then run '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} sync${reset_stderr}' to resolve.\n";
    exit 1;
}

# If there is no active module index, warn the user
my $index_path = File::Spec->catfile($ast_path, $ast_module_subsystem::ACTIVE_INDEX_PATH);
unless (-f $index_path) {
    ast_utilities::error_output($program_name, 'could not find active module index');
    print STDERR "Try '${bold_stderr}${ast_utilities::CONFIG_PROGRAM} sync${reset_stderr}' to resolve.\n";
    exit 1;
}

if ($debug_flag) {
    print "---- ATLAS DEBUG MODE ----\n";
}

# Handle case where user entered --help=TOPIC flag
# We waited until after verifying that a command index exists
if (defined $help_argument) {
    unless ($help_argument eq '') {
        atlas_show_contextual_help_menu_and_exit($help_argument, $skip_paging, $ast_path);
    }
}

my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);

# Handle --class-of option
if (defined $class_of) {
    atlas_show_class_of_and_exit($ast_path, $class_of);
}

# Handle --list option
if (defined $show_list) {
    atlas_list_subcommands_and_exit($ast_path, $skip_paging);
}

# All global options have been processed, so shift the subcommand off of ARGV
my $subcommand = shift @ARGV;

unless (defined $subcommand) {
    ast_utilities::error_output($program_name, "missing required command or option");
    print STDERR "Try '${bold_stderr}${program_name} --list${reset_stderr}' for a list of commands.\n";
    print STDERR "Try '${bold_stderr}${program_name} --help${reset_stderr}' for more information.\n";
    exit 1;
}

my $subcommand_class = $subcommand_classes{$subcommand};

# Case where the user entered an invalid subcommand
unless (defined $subcommand_class) {
    atlas_unrecognized_command_message_and_exit($subcommand);
}

# Set @new_argv to @ARGV for now. @new_argv will get overriden by an applied
# preset if the user supplied one.
my @new_argv = @ARGV;
my $current_namespace = ast_preset_subsystem::get_namespace($ast_path);

# Check if a preset is being saved or used. We check for preset application
# first, and apply it if necessary. We then check for a preset save. This allows
# users to easily extend presets they have already created by applying and
# saving in a single step.
if (defined $use_preset) {
    @new_argv = ast_preset_subsystem::apply_preset_or_exit($ast_path, $program_name, $quiet, $use_preset, $subcommand, $current_namespace, \@ARGV);
    if ($debug_flag) {
        print "Applying preset(s) ${use_preset} for ${subcommand} in namespace ${current_namespace}\n";
    }
}

if (defined $save_preset) {
    unless (ast_preset_subsystem::preset_regex_ok($save_preset)) {
            ast_utilities::error_output($program_name, "invalid preset name ${bold_stderr}${save_preset}${reset_stderr}");
            print STDERR "Name must match regex: " . ast_preset_subsystem::preset_regex() . "\n";
            exit 1;
    }
    if ($debug_flag) {
        print "Would save preset ${save_preset} for ${subcommand} to namespace ${current_namespace}\n";
        print "Preset ARGV: \"@new_argv\"\n\n";
    }
    else {
        my $success = ast_preset_subsystem::save_preset($ast_path, $program_name, $quiet, $save_preset, $subcommand, $current_namespace, \@new_argv);
        unless ($success) {
            exit 1;
        }
        print "Launching command ${bold_stdout}${subcommand}${reset_stdout}...\n\n";
    }
}

if (defined $save_global_preset) {
    unless (ast_preset_subsystem::preset_regex_ok($save_global_preset)) {
            ast_utilities::error_output($program_name, "invalid preset name ${bold_stderr}${save_global_preset}${reset_stderr}");
            print STDERR "Name must match regex: " . ast_preset_subsystem::preset_regex() . "\n";
            exit 1;
    }
    if ($debug_flag) {
        print "Would save global preset ${save_global_preset} to namespace ${current_namespace}\n";
        print "Preset ARGV: \"@new_argv\"\n\n";
    }
    else {
        my $success = ast_preset_subsystem::save_preset($ast_path, $program_name, $quiet, $save_global_preset, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace, \@new_argv);
        unless ($success) {
            exit 1;
        }
        print "Launching command ${bold_stdout}${subcommand}${reset_stdout}...\n\n";
    }
}

# Set up the subcommand to execute using the JVM
my $module = $activated_modules[0];
my $full_path_to_modules_folder = File::Spec->catfile($ast_path, $ast_module_subsystem::MODULES_FOLDER, "$module" . $ast_module_subsystem::MODULE_SUFFIX);
my $full_path_to_log4j = File::Spec->catfile($ast_path, $ast_log_subsystem::LOG4J_FILE_PATH);

my @java_command = ();
push @java_command, "java";
push @java_command, "-Xms$memory";
push @java_command, "-Xmx$memory";
push @java_command, "-cp";
push @java_command, "${full_path_to_modules_folder}";
push @java_command, "-Dlog4j.configuration=file:${full_path_to_log4j}";
push @java_command, "${subcommand_class}";

# Surround each arg in quotes in case it contains whitespace
foreach my $arg (@new_argv) {
    push @java_command, "$arg";
}

# Append the special TTY formatting sentinel arguments
if (ast_tty::is_no_colors_stdout()) {
    push @java_command, "${ast_utilities::JAVA_NO_COLOR_STDOUT}";
}
else {
    push @java_command, "${ast_utilities::JAVA_COLOR_STDOUT}";
}

if (ast_tty::is_no_colors_stderr()) {
    push @java_command, "${ast_utilities::JAVA_NO_COLOR_STDERR}";
}
else {
    push @java_command, "${ast_utilities::JAVA_COLOR_STDERR}";
}

if ($skip_paging) {
    push @java_command, "${ast_utilities::JAVA_NO_USE_PAGER}";
}
else {
    push @java_command, "${ast_utilities::JAVA_USE_PAGER}";
}

my $terminal_width = ast_tty::terminal_width();
push @java_command, "${terminal_width}";
push @java_command, "${ast_utilities::JAVA_MARKER_SENTINEL}";

if ($debug_flag) {
    print("Would execute JVM command:\n");
    print("@java_command\n");
    exit 0;
}

# Here we use system's indirect object syntax to correctly handle all possible
# edge cases regarding the configuration of @java_command.
# See bottom of page: http://perldoc.perl.org/functions/exec.html
system {$java_command[0]} @java_command;
my $exitcode = $? >> 8;
exit $exitcode;


########## END EXECUTION LOGIC ##########


================================================
FILE: atlas-shell-tools/scripts/atlas-config
================================================
#!/usr/bin/env perl

use warnings;
use strict;

use Getopt::Long qw(GetOptions);
use File::Basename;
use File::Copy qw(copy);
use File::Spec;
use File::Path;
use POSIX;

# Pull in code from the common modules
use FindBin;
use lib "$FindBin::Bin/common";
use ast_completions;
use ast_log_subsystem;
use ast_module_subsystem;
use ast_preset_subsystem;
use ast_repo_subsystem;
use ast_utilities;
use ast_tty;


## ORGANIZATION
## This script is organized into 3 sections:
## 1) GLOBAL INITIALIZATION - initialize some useful global constants
## 2) SUBROUTINES - helper subroutines
## 3) COMMAND SUBROUTINES - subcommand execution subroutines
## 4) EXECUTION LOGIC - the actual command logic, ie. 'main'

########## BEGIN GLOBAL INITIALIZATION ##########
my $ansi_red = ast_tty::ansi_red();
my $ansi_green = ast_tty::ansi_green();
my $ansi_magenta = ast_tty::ansi_magenta();
my $ansi_bold = ast_tty::ansi_bold();
my $ansi_blink = ast_tty::ansi_blink();
my $ansi_reset = ast_tty::ansi_reset();
my $ansi_bunl = ast_tty::ansi_begin_underln();
my $ansi_eunl = ast_tty::ansi_end_underln();

my $no_colors_stdout = ast_tty::is_no_colors_stdout();
my $red_stdout = $no_colors_stdout ? "" : $ansi_red;
my $green_stdout = $no_colors_stdout ? "" : $ansi_green;
my $magenta_stdout = $no_colors_stdout ? "" : $ansi_magenta;
my $bold_stdout = $no_colors_stdout ? "" : $ansi_bold;
my $blink_stdout = $no_colors_stdout ? "" : $ansi_blink;
my $reset_stdout = $no_colors_stdout ? "" : $ansi_reset;
my $bunl_stdout = $no_colors_stdout ? "" : $ansi_bunl;
my $eunl_stdout = $no_colors_stdout ? "" : $ansi_eunl;

my $no_colors_stderr = ast_tty::is_no_colors_stderr();
my $red_stderr = $no_colors_stderr ? "" : $ansi_red;
my $green_stderr = $no_colors_stderr ? "" : $ansi_green;
my $magenta_stderr = $no_colors_stderr ? "" : $ansi_magenta;
my $bold_stderr = $no_colors_stderr ? "" : $ansi_bold;
my $blink_stderr = $no_colors_stderr ? "" : $ansi_blink;
my $reset_stderr = $no_colors_stderr ? "" : $ansi_reset;
my $bunl_stderr = $no_colors_stderr ? "" : $ansi_bunl;
my $eunl_stderr = $no_colors_stderr ? "" : $ansi_eunl;

my $ast_path;
my $skip_paging;
my $quiet;

my $program_name = $ast_utilities::CONFIG_PROGRAM;
my $program_version = "$ast_utilities::ATLAS_SHELL_TOOLS_VERSION ($program_name program)";

# logging definitions
my %valid_levels = (
    "ALL"   => 1,
    "TRACE" => 1,
    "DEBUG" => 1,
    "INFO"  => 1,
    "WARN"  => 1,
    "ERROR" => 1,
    "FATAL" => 1,
    "OFF"   => 1
);
my @valid_level_keys = keys %valid_levels;

my %valid_streams = (
    "stdout" => 1,
    "stderr" => 1
);
my @valid_stream_keys = keys %valid_streams;

########## END GLOBAL INITIALIZATION ##########


########## BEGIN SUBROUTINES ##########

sub show_submanpage_and_exit {
    my $subpage = shift;

    my @man_command = ast_utilities::get_man($skip_paging);
    if (scalar @man_command == 0) {
        ast_utilities::error_output($program_name, "could not obtain \'man\' command");
        print STDERR "Please ensure a valid \'man\' command is on your path.\n";
        exit 1;
    }

    my @command = ();
    push @command, @man_command;
    if ($subpage eq '') {
        push @command, "$program_name";
    }
    else {
        push @command, "$program_name-$subpage";
    }
    system {$command[0]} @command;
    exit 0;
}

# helper routine for the 'preset' subcommand
sub atlas_cfgpreset_namespace {
    my $current_namespace = shift;

    my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);
    my $success = 1;

    my $subdirective = shift @ARGV;

    unless (defined $subdirective) {
        ast_utilities::error_output($program_name, "${bold_stderr}${program_name} preset namespace${reset_stderr} requires a subdirective");
        print STDERR "Try ${bold_stderr}create${reset_stderr}, ${bold_stderr}list${reset_stderr}, ${bold_stderr}remove${reset_stderr}, or ${bold_stderr}use${reset_stderr}.\n";
        print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
        return 0;
    }

    if ($subdirective eq 'list') {
        my $namespace = shift @ARGV;
        if (defined $namespace) {
            $success = ast_preset_subsystem::all_presets($ast_path, $program_name, $quiet, $namespace);
        }
        else {
            $success = ast_preset_subsystem::all_namespaces($ast_path, $program_name, $quiet);
        }
    }
    elsif ($subdirective eq 'use') {
        my $namespace = shift @ARGV;
        unless (defined $namespace) {
            ast_utilities::error_output($program_name, "must specify a namespace");
            print STDERR "Usage: ${bold_stderr}${program_name} preset namespace use <namespace>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::use_namespace($ast_path, $program_name, $quiet, $namespace);
    }
    elsif ($subdirective eq 'create') {
        my $new_namespace = shift @ARGV;
        unless (defined $new_namespace) {
            ast_utilities::error_output($program_name, "must specify a new namespace");
            print STDERR "Usage: ${bold_stderr}${program_name} preset namespace create <namespace>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::create_namespace($ast_path, $program_name, $quiet, $new_namespace);
    }
    elsif ($subdirective eq 'remove') {
        my $namespace = shift @ARGV;
        unless (defined $namespace) {
            ast_utilities::error_output($program_name, "must specify a namespace");
            print STDERR "Usage: ${bold_stderr}${program_name} preset namespace remove <namespace>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::remove_namespace($ast_path, $program_name, $quiet, $namespace);
    }
    else {
        ast_utilities::error_output($program_name, "unrecognized ${bold_stderr}${program_name} preset namespace${reset_stderr} subdirective '${bold_stderr}${subdirective}${reset_stderr}'");
        print STDERR "Try ${bold_stderr}create${reset_stderr}, ${bold_stderr}list${reset_stderr}, ${bold_stderr}remove${reset_stderr}, or ${bold_stderr}use${reset_stderr}.\n";
        print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
        return 0;
    }

    return 1;
}

########## END SUBROUTINES ##########


########## BEGIN COMMAND SUBROUTINES ##########

sub execute_command_activate {
    my $help_flag;
    GetOptions(
        'help|h' => \$help_flag
    ) or ast_utilities::getopt_failure_and_exit($program_name, "activate");

    if (defined $help_flag) {
        show_submanpage_and_exit('activate');
    }

    my $module_to_activate = shift @ARGV;
    unless (defined $module_to_activate) {
        ast_utilities::error_output($program_name . ": activate", "missing required argument");
        ast_utilities::getopt_failure_and_exit($program_name, "activate");
    }

    my %modules = get_module_to_status_hash($ast_path);
    unless (exists $modules{$module_to_activate}) {
        ast_utilities::error_output($program_name . ": activate", "no such module ${bold_stderr}${module_to_activate}${reset_stderr}");
        return 0;
    }

    # deactivate all other modules
    foreach my $module (keys %modules) {
        if ($modules{$module} == $ast_module_subsystem::ACTIVATED) {
            ast_module_subsystem::perform_deactivate($module, $ast_path, $program_name, $quiet);
        }
    }

    my $success = ast_module_subsystem::perform_activate($module_to_activate, $ast_path, $program_name, $quiet);
    return $success;
}

sub execute_command_deactivate {
    my $help_flag;
    GetOptions(
        'help|h' => \$help_flag
    ) or ast_utilities::getopt_failure_and_exit($program_name, "deactivate");

    if (defined $help_flag) {
        show_submanpage_and_exit('deactivate');
    }

    my $module_to_deactivate = shift @ARGV;
    unless (defined $module_to_deactivate) {
        ast_utilities::error_output($program_name . ": deactivate", "missing required argument");
        ast_utilities::getopt_failure_and_exit($program_name, "deactivate");
    }

    my %modules = ast_module_subsystem::get_module_to_status_hash($ast_path);
    unless (exists $modules{$module_to_deactivate}) {
        ast_utilities::error_output($program_name . ": deactivate", "no such module ${bold_stderr}${module_to_deactivate}${reset_stderr}");
        return 0;
    }

    my $success = ast_module_subsystem::perform_deactivate($module_to_deactivate, $ast_path, $program_name, $quiet);
    if ($success) {
        ast_module_subsystem::remove_active_module_index($ast_path, $program_name, $quiet);
    }
    return $success;
}

sub execute_command_install {
    my $syminstall = 0;
    my $force_install = 0;
    my $skip_install = 0;
    my $install_deactivated = 0;
    my $alternate_name = "";
    my $help_flag;
    GetOptions(
        'symlink|s'   => \$syminstall,
        'deactivated' => \$install_deactivated,
        'force'       => \$force_install,
        'skip'        => \$skip_install,
        'name=s'      => \$alternate_name,
        'help|h'      => \$help_flag
    ) or ast_utilities::getopt_failure_and_exit($program_name, "install");

    if (defined $help_flag) {
        show_submanpage_and_exit('install');
    }

    my $module_to_install = shift @ARGV;
    unless (defined $module_to_install) {
        ast_utilities::error_output($program_name . ": install", "missing required argument");
        ast_utilities::getopt_failure_and_exit($program_name, "install");
    }

    my %metadata;
    if ($syminstall) {
        $metadata{$ast_module_subsystem::SOURCE_KEY} = "symlink";
    }
    else {
        $metadata{$ast_module_subsystem::SOURCE_KEY} = "local_file";
    }
    my $uri_abs = Cwd::realpath($module_to_install);
    $metadata{$ast_module_subsystem::URI_KEY} = "file://" . $uri_abs;
    $metadata{$ast_module_subsystem::DATE_TIME_KEY} = POSIX::strftime("%Y-%m-%d %H:%M:%S UTC", gmtime(time));
    my $success = ast_module_subsystem::perform_install($module_to_install, $ast_path, $program_name,
        $alternate_name, $syminstall, $skip_install,
        $force_install, $install_deactivated, \%metadata, $quiet);

    unless ($success) {
        return 0;
    }

    return 1;
}

sub execute_command_list {
    my $current = 0;
    my $help_flag;
    my $one_line = 0;
    GetOptions(
        'current|c' => \$current,
        'help|h'    => \$help_flag,
        'one-line|1' => \$one_line
    ) or ast_utilities::getopt_failure_and_exit($program_name, "list");

    if (defined $help_flag) {
        show_submanpage_and_exit('list');
    }

    my $modules_folder = File::Spec->catfile($ast_path, $ast_module_subsystem::MODULES_FOLDER);

    my %modules = ast_module_subsystem::get_module_to_status_hash($ast_path);
    my %symlinks = ast_module_subsystem::get_module_to_symlink_hash($ast_path);
    my %targets = ast_module_subsystem::get_module_to_target_hash($ast_path);
    my %metadata = ast_module_subsystem::get_module_to_metadata_hash($ast_path);

    unless (keys %modules) {
        ast_utilities::error_output($program_name . ": list", "found no installed modules");
        print STDERR "Try '${bold_stderr}${program_name} install /path/to/module.jar${reset_stderr}' to install a module.\n";
        print STDERR "Or try '${bold_stderr}${program_name} repo install atlas${reset_stderr}' to install the commands from the atlas repo.\n";
        return 0;
    }

    if ($current) {
        print "${bold_stdout}Currently active module:${reset_stdout}\n\n";
    }
    else {
        print "${bold_stdout}Installed modules:${reset_stdout}\n\n";
    }
    # Sort the module names alphabetically. We use 'lc' to convert them to
    # lowercase, since by default 'sort' uses ASCII ordering.
    foreach my $module (sort {lc $a cmp lc $b} keys %modules) {
        my $status = $modules{$module};
        my $symlink = $symlinks{$module};
        my $target = $targets{$module};
        my %module_metadata;
        if (defined $metadata{$module}) {
            %module_metadata = %{$metadata{$module}};
        }
        else {
            %module_metadata = ();
        }
        my $display = '    ';

        if ($current && $status != 1) {
            next;
        }

        # if activated, place a star next to the name
        if ($status == 1) {
            $display = $display . '*';
        }
        else {
            $display = $display . ' ';
        }

        # choose an appropriate color for the display
        if ($status == $ast_module_subsystem::ACTIVATED
            && ($symlink == $ast_module_subsystem::REAL_FILE || $symlink == $ast_module_subsystem::GOOD_SYMLINK)) {
            $display = $display . "${green_stdout}${bold_stdout}";
        }
        elsif ($symlink == $ast_module_subsystem::BROKEN_SYMLINK) {
            $display = $display . "${red_stdout}${bold_stdout}";
        }

        # show the module name!
        $display = $display . " ${bold_stdout}${module}${reset_stdout}";

        # show a big message if the symlink is broken, blink if also activated
        if ($symlink == $ast_module_subsystem::BROKEN_SYMLINK) {
            if ($status == $ast_module_subsystem::ACTIVATED) {
                $display = $display . " ${bold_stdout}${blink_stdout}(BROKEN SYMLINK)${reset_stdout}";
            }
            else {
                $display = $display . " ${bold_stdout}(BROKEN SYMLINK)${reset_stdout}";
            }
        }

        # if we were a symlink, show the target after the module name
        if ($symlink != $ast_module_subsystem::REAL_FILE) {
            $display = $display . " -> ${target}";
        }

        print "$display\n";

        unless ($one_line) {
            if (%module_metadata) {
                foreach my $metadata_key (sort {lc $a cmp lc $b} keys %module_metadata) {
                    print "          ${metadata_key}: $module_metadata{$metadata_key}\n";
                }
            }
            print "\n";
        }
    }
    if ($one_line) {
        print "\n";
    }

    return 1;
}

sub execute_command_log {
    my $help_flag;
    GetOptions(
        'help|h' => \$help_flag
    ) or ast_utilities::getopt_failure_and_exit($program_name, "log");

    if (defined $help_flag) {
        show_submanpage_and_exit('log');
    }

    my $directive = shift @ARGV;
    my $success;

    unless (defined $directive) {
        ast_utilities::error_output($program_name . ": log", "missing required directive");
        print STDERR "Usage: ${bold_stderr}${program_name} log <directive> <args...>${reset_stderr}\n";
        print STDERR "Available directives: ${bold_stderr}reset${reset_stderr}, ${bold_stderr}set-level${reset_stderr}, ${bold_stderr}set-stream${reset_stderr}, or ${bold_stderr}show${reset_stderr}\n";
        print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
        return 0;
    }

    my $log_folder = File::Spec->catfile($ast_path, $ast_log_subsystem::LOG4J_FOLDER);
    my $logfile_path = File::Spec->catfile($log_folder, $ast_log_subsystem::LOG4J_FILE);
    my $current_level = ast_log_subsystem::read_loglevel_from_file($logfile_path);
    my $current_stream = ast_log_subsystem::read_logstream_from_file($logfile_path);

    if ($directive eq 'reset') {
        ast_log_subsystem::reset_log4j($ast_path);
    }
    elsif ($directive eq 'set-level') {
        my $new_level = shift @ARGV;
        unless (defined $new_level) {
            ast_utilities::error_output($program_name . ": log", "must specify a new level");
            print STDERR "Usage: ${bold_stderr}${program_name} log set-level <new-level>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        if (exists($valid_levels{$new_level})) {
            ast_log_subsystem::replace_loglevel_in_file($logfile_path, $new_level);
        }
        else {
            ast_utilities::error_output($program_name . ": log", "unrecognized log level ${bold_stderr}${new_level}${reset_stderr}");
            print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
            return 0;
        }
    }
    elsif ($directive eq 'set-stream') {
        my $new_stream = shift @ARGV;
        unless (defined $new_stream) {
            ast_utilities::error_output($program_name . ": log", "must specify a new stream");
            print STDERR "Usage: ${bold_stderr}${program_name} log set-stream <new-stream>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        if (exists($valid_streams{$new_stream})) {
            ast_log_subsystem::replace_logstream_in_file($logfile_path, $new_stream);
        }
        else {
            ast_utilities::error_output($program_name . ": log", "unrecognized log stream ${bold_stderr}${new_stream}${reset_stderr}");
            print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
            return 0;
        }
    }
    elsif ($directive eq 'show') {
        $current_level = ast_log_subsystem::read_loglevel_from_file($logfile_path);
        $current_stream = ast_log_subsystem::read_logstream_from_file($logfile_path);
        print "Current log level:    ${bold_stdout}${current_level}${reset_stdout}\n";
        print "Current log stream:   ${bold_stdout}${current_stream}${reset_stdout}\n";
    }
    else {
        ast_utilities::error_output($program_name . ": log", "unrecognized ${bold_stderr}${program_name} log${reset_stderr} directive '${bold_stderr}${directive}${reset_stderr}'");
        print STDERR "Available directives: ${bold_stderr}reset${reset_stderr}, ${bold_stderr}set-level${reset_stderr}, ${bold_stderr}set-stream${reset_stderr}, or ${bold_stderr}show${reset_stderr}\n";
        print STDERR "Try \'${bold_stderr}${program_name} log --help${reset_stderr}\' for more information.\n";
        return 0;
    }

    return 1;
}

sub execute_command_preset {
    my $help_flag;
    GetOptions(
        'help|h' => \$help_flag,
        # This callback occurs the first time we see a non-option argument.
        # In our case, this will be the subcommand.
        "<>"     => sub {
            my ($arg) = @_;
            if ($arg =~ m{^-}) {
                unless ($arg eq '-') {
                    die "FATAL error: unhandled global option $arg";
                }
            }
            # add the subcommand to the front of ARGV
            unshift @ARGV, $arg;
            die "!FINISH";
        }
    ) or ast_utilities::getopt_failure_and_exit($program_name, "preset");

    if (defined $help_flag) {
        show_submanpage_and_exit('preset');
    }

    my %subcommand_classes = ast_module_subsystem::get_subcommand_to_class_hash($ast_path);
    my $current_namespace = ast_preset_subsystem::get_namespace($ast_path);

    my $directive = shift @ARGV;
    my $success;

    unless (defined $directive) {
        ast_utilities::error_output($program_name . ": preset", "missing required directive");
        print STDERR "Usage: ${bold_stderr}${program_name} preset <directive> <args...>${reset_stderr}\n";
        print STDERR "Available directives: ${bold_stderr}copy${reset_stderr}, ${bold_stderr}edit${reset_stderr}, ${bold_stderr}list${reset_stderr}, ${bold_stderr}namespace${reset_stderr}, ${bold_stderr}remove${reset_stderr}, or ${bold_stderr}save${reset_stderr}\n";
        print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
        return 0;
    }

    if ($directive eq 'copy') {
        my $command_context = shift @ARGV;
        unless (defined $command_context) {
            ast_utilities::error_output($program_name . ": preset", "must specify a command");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy <command> <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        unless (defined $subcommand_classes{$command_context}) {
            ast_utilities::error_output($program_name . ": preset", "no such command ${bold_stderr}${command_context}${reset_stderr}");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy <command> <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        my $src_preset = shift @ARGV;
        my $dest_preset = shift @ARGV;
        unless (defined $src_preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a source preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy <command> <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        unless (defined $dest_preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a destination preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy <command> <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::copy_preset($ast_path, $program_name, $quiet, $src_preset, $dest_preset, $command_context, $current_namespace);
    }
    elsif ($directive eq 'copy-global') {
        my $src_preset = shift @ARGV;
        my $dest_preset = shift @ARGV;
        unless (defined $src_preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a source preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy-global <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        unless (defined $dest_preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a destination preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset copy-global <src> <dest>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::copy_preset($ast_path, $program_name, $quiet, $src_preset, $dest_preset, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
    }
    elsif ($directive eq 'edit') {
        my $command_context = shift @ARGV;
        unless (defined $command_context) {
            ast_utilities::error_output($program_name . ": preset", "must specify a command");
            print STDERR "Usage: ${bold_stderr}${program_name} preset edit <command> <preset>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        unless (defined $subcommand_classes{$command_context}) {
            ast_utilities::error_output($program_name . ": preset", "no such command ${bold_stderr}${command_context}${reset_stderr}");
            print STDERR "Usage: ${bold_stderr}${program_name} preset edit <command> <preset>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        my $preset = shift @ARGV;
        unless (defined $preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset edit <command> <preset>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::edit_preset($ast_path, $program_name, $quiet, $preset, $command_context, $current_namespace);
    }
    elsif ($directive eq 'edit-global') {
        my $preset = shift @ARGV;
        unless (defined $preset) {
            ast_utilities::error_output($program_name . ": preset", "must specify a preset");
            print STDERR "Usage: ${bold_stderr}${program_name} preset edit-global <preset>${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        $success = ast_preset_subsystem::edit_preset($ast_path, $program_name, $quiet, $preset, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
    }
    elsif ($directive eq 'list') {
        my $command_context = shift @ARGV;
        unless (defined $command_context) {
            return ast_preset_subsystem::all_presets($ast_path, $program_name, $quiet, $current_namespace);
        }
        unless (defined $subcommand_classes{$command_context}) {
            ast_utilities::error_output($program_name . ": preset", "no such command ${bold_stderr}${command_context}${reset_stderr}");
            print STDERR "Usage: ${bold_stderr}${program_name} preset list [command [preset]]${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        my $preset = shift @ARGV;
        if (defined $preset) {
            $success = ast_preset_subsystem::show_preset($ast_path, $program_name, $quiet, $preset, $command_context, $current_namespace);
        }
        else {
            $success = ast_preset_subsystem::all_presets_for_command($ast_path, $program_name, $quiet, $command_context, $current_namespace);
        }
    }
    elsif ($directive eq 'list-global') {
        my $preset = shift @ARGV;
        if (defined $preset) {
            $success = ast_preset_subsystem::show_preset($ast_path, $program_name, $quiet, $preset, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
        }
        else {
            $success = ast_preset_subsystem::all_presets_for_command($ast_path, $program_name, $quiet, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
        }
    }
    elsif ($directive eq 'namespace') {
        $success = atlas_cfgpreset_namespace($current_namespace);
    }
    elsif ($directive eq 'remove') {
        my $command_context = shift @ARGV;
        unless (defined $command_context) {
            ast_utilities::error_output($program_name . ": preset", "must specify a command");
            print STDERR "Usage: ${bold_stderr}${program_name} preset remove <command> [preset]${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        unless (defined $subcommand_classes{$command_context}) {
            ast_utilities::error_output($program_name . ": preset", "no such command ${bold_stderr}${command_context}${reset_stderr}");
            print STDERR "Usage: ${bold_stderr}${program_name} preset remove <command> [preset]${reset_stderr}\n";
            print STDERR "Try \'${bold_stderr}${program_name} preset --help${reset_stderr}\' for more information.\n";
            return 0;
        }
        my $preset = shift @ARGV;
        if (defined $preset) {
            $success = ast_preset_subsystem::remove_preset($ast_path, $program_name, $quiet, $preset, $command_context, $current_namespace);
        }
        else {
            $success = ast_preset_subsystem::remove_all_presets_for_command($ast_path, $program_name, $quiet, $command_context, $current_namespace);
        }
    }
    elsif ($directive eq 'remove-global') {
        my $preset = shift @ARGV;
        if (defined $preset) {
            $success = ast_preset_subsystem::remove_preset($ast_path, $program_name, $quiet, $preset, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
        }
        else {
            $success = ast_preset_subsystem::remove_all_presets_for_command($ast_path, $program_name, $quiet, $ast_preset_subsystem::GLOBAL_FOLDER, $current_namespace);
        }
    }
    elsif ($directive eq 'save') {
        my $command_context = shift @ARGV;
        unless (defined $command_context) {
            ast_utilities::error_output($program_name . ": preset", "must specify a command");
            print STDERR "Usage: ${bold_stderr}${program_name} preset save <command> <preset> <options...>${reset_stderr}\n";
            print STDERR "Try \'${b
Download .txt
gitextract_1k5scvdv/

├── .circleci/
│   ├── config.yml
│   └── sonar.sh
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── workflow_data/
│   │   └── secret.gpg.aes256
│   ├── workflow_scripts/
│   │   ├── decrypt_gpg_key.sh
│   │   ├── deploy.sh
│   │   ├── merge-dev-to-main.sh
│   │   ├── sonar.sh
│   │   ├── tag-main.sh
│   │   └── update_project_version.sh
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .travis/
│   ├── build-pyatlas-gate.sh
│   ├── build.sh
│   ├── deploy-gate.sh
│   ├── deploy.sh
│   ├── install.sh
│   ├── merge-dev-to-main-gate.sh
│   ├── merge-dev-to-main.sh
│   ├── secring.gpg.enc
│   ├── sonar-gate.sh
│   ├── sonar.sh
│   ├── tag-main-gate.sh
│   ├── tag-main.sh
│   └── trigger-release.sh
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── atlas-shell-tools/
│   ├── .atlas-shell-tools-integrity-file
│   ├── README.md
│   ├── ast_completions.bash
│   ├── ast_completions.zsh
│   ├── man/
│   │   ├── man1/
│   │   │   ├── atlas-config-activate.1
│   │   │   ├── atlas-config-deactivate.1
│   │   │   ├── atlas-config-install.1
│   │   │   ├── atlas-config-list.1
│   │   │   ├── atlas-config-log.1
│   │   │   ├── atlas-config-preset.1
│   │   │   ├── atlas-config-repo.1
│   │   │   ├── atlas-config-reset.1
│   │   │   ├── atlas-config-sync.1
│   │   │   ├── atlas-config-uninstall.1
│   │   │   ├── atlas-config-update.1
│   │   │   ├── atlas-config.1
│   │   │   └── atlas.1
│   │   ├── man5/
│   │   │   └── atlas-plumbing.5
│   │   └── man7/
│   │       ├── atlas-cli.7
│   │       ├── atlas-cookbook.7
│   │       ├── atlas-environment.7
│   │       ├── atlas-glossary.7
│   │       ├── atlas-presets.7
│   │       └── atlas-shell-tools.7
│   ├── quick_install_bash.sh
│   ├── quick_install_zsh.sh
│   └── scripts/
│       ├── atlas
│       ├── atlas-config
│       └── common/
│           ├── ast_completions.pm
│           ├── ast_log_subsystem.pm
│           ├── ast_module_subsystem.pm
│           ├── ast_preset_subsystem.pm
│           ├── ast_repo_subsystem.pm
│           ├── ast_tty.pm
│           └── ast_utilities.pm
├── build.gradle
├── config/
│   ├── checkstyle/
│   │   ├── arrangement.txt
│   │   ├── checkstyle.xml
│   │   └── suppressions.xml
│   ├── format/
│   │   └── code_format.xml
│   └── log4j/
│       └── log4j.properties
├── dependencies.gradle
├── gradle.properties
├── pyatlas/
│   ├── README.md
│   ├── clean.sh
│   ├── doc/
│   │   └── how_to_get_the_docs.txt
│   ├── format.sh
│   ├── package.sh
│   ├── pyatlas/
│   │   ├── __init__.py
│   │   ├── atlas.py
│   │   ├── atlas_entities.py
│   │   ├── atlas_metadata.py
│   │   ├── autogen/
│   │   │   └── __init__.py
│   │   ├── geometry.py
│   │   ├── identifier_converters.py
│   │   ├── pyatlas_globalfunc.py
│   │   └── spatial_index.py
│   ├── resources/
│   │   ├── CreateTestAtlas.java
│   │   └── test.atlas
│   ├── setup.py
│   ├── style.yapf
│   ├── test.sh
│   ├── unit_tests/
│   │   ├── test_atlas.py
│   │   ├── test_identifier_converters.py
│   │   ├── test_location.py
│   │   ├── test_polygon_converters.py
│   │   ├── test_polyline_polygon.py
│   │   ├── test_rectangle.py
│   │   └── test_spatial_index.py
│   ├── venv.sh
│   └── yapf_format.py
├── sample/
│   ├── Readme.md
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── openstreetmap/
│           │           └── atlas/
│           │               └── sample/
│           │                   └── Sample.java
│           └── resources/
│               └── log4j.properties
├── scripts/
│   └── log4j-atlas/
│       └── log4j.properties
├── settings.gradle
└── src/
    ├── integrationTest/
    │   ├── java/
    │   │   └── org/
    │   │       └── openstreetmap/
    │   │           └── atlas/
    │   │               └── geography/
    │   │                   ├── PolygonPerformanceTest.java
    │   │                   ├── atlas/
    │   │                   │   ├── AtlasIntegrationTest.java
    │   │                   │   ├── SubAtlasIntegrationTest.java
    │   │                   │   ├── builder/
    │   │                   │   │   └── text/
    │   │                   │   │       └── TextAtlasBuilderIntegrationTest.java
    │   │                   │   ├── delta/
    │   │                   │   │   ├── AtlasDeltaGeoJsonIntegrationTest.java
    │   │                   │   │   └── AtlasDeltaIntegrationTest.java
    │   │                   │   ├── dynamic/
    │   │                   │   │   └── DynamicAtlasIntegrationTest.java
    │   │                   │   ├── items/
    │   │                   │   │   ├── AtlasEntityTypeTest.java
    │   │                   │   │   └── complex/
    │   │                   │   │       └── boundaries/
    │   │                   │   │           ├── ComplexBoundariesIntegrationTest.java
    │   │                   │   │           └── ComplexBoundaryIntegrationTestRule.java
    │   │                   │   ├── multi/
    │   │                   │   │   ├── MultiAtlasIntegrationTest.java
    │   │                   │   │   └── MultiAtlasIntegrationTestRule.java
    │   │                   │   ├── packed/
    │   │                   │   │   ├── PackedAtlasClonerIntegrationTest.java
    │   │                   │   │   └── PackedAtlasIntegrationTest.java
    │   │                   │   ├── pbf/
    │   │                   │   │   ├── OsmPbfIngestIntegrationTest.java
    │   │                   │   │   └── slicing/
    │   │                   │   │       └── AtlasSectionProcessorIntegrationTest.java
    │   │                   │   ├── raw/
    │   │                   │   │   ├── DynamicRawAtlasSectioningTestRule.java
    │   │                   │   │   └── RawAtlasIntegrationTest.java
    │   │                   │   └── routing/
    │   │                   │       └── AtlasRoutingIntegrationTest.java
    │   │                   └── boundary/
    │   │                       ├── CountryBoundaryMapArchiverIntegrationTest.java
    │   │                       └── CountryBoundaryMapIntegrationTest.java
    │   └── resources/
    │       └── org/
    │           └── openstreetmap/
    │               └── atlas/
    │                   └── geography/
    │                       ├── atlas/
    │                       │   ├── pbf/
    │                       │   │   ├── BHS-6-18-27.pbf
    │                       │   │   ├── BLZ_raw_08242015.osm.pbf
    │                       │   │   └── CUB_72-111.pbf
    │                       │   └── raw/
    │                       │       ├── 8-122-122-trimmed.osm.pbf
    │                       │       ├── layerIntersectionAtEndBoundaryMap.txt
    │                       │       ├── layerIntersectionAtStartBoundaryMap.txt
    │                       │       ├── layerIntersectionInMiddleBoundaryMap.txt
    │                       │       ├── node-4353689487.pbf
    │                       │       ├── twoWaysWithDifferentLayersIntersectingAtEnd.pbf
    │                       │       ├── twoWaysWithDifferentLayersIntersectingAtStart.pbf
    │                       │       └── twoWaysWithDifferentLayersIntersectingInMiddle.pbf
    │                       └── boundary/
    │                           └── oceanTestBoundary.txt
    ├── main/
    │   ├── java/
    │   │   └── org/
    │   │       └── openstreetmap/
    │   │           └── atlas/
    │   │               ├── event/
    │   │               │   ├── Event.java
    │   │               │   ├── EventService.java
    │   │               │   ├── EventServiceable.java
    │   │               │   ├── Processor.java
    │   │               │   ├── README.md
    │   │               │   └── ShutdownEvent.java
    │   │               ├── exception/
    │   │               │   ├── CoreException.java
    │   │               │   ├── ExceptionSearch.java
    │   │               │   ├── LoadAtlasFromResourceException.java
    │   │               │   └── change/
    │   │               │       ├── FeatureChangeMergeException.java
    │   │               │       └── MergeFailureType.java
    │   │               ├── geography/
    │   │               │   ├── Altitude.java
    │   │               │   ├── CompressedPolyLine.java
    │   │               │   ├── CompressedPolygon.java
    │   │               │   ├── GeometricObject.java
    │   │               │   ├── GeometricSurface.java
    │   │               │   ├── GeometryPrintable.java
    │   │               │   ├── Heading.java
    │   │               │   ├── Latitude.java
    │   │               │   ├── Located.java
    │   │               │   ├── Location.java
    │   │               │   ├── Longitude.java
    │   │               │   ├── MultiPolyLine.java
    │   │               │   ├── MultiPolygon.java
    │   │               │   ├── PolyLine.java
    │   │               │   ├── Polygon.java
    │   │               │   ├── README.md
    │   │               │   ├── Rectangle.java
    │   │               │   ├── Segment.java
    │   │               │   ├── Snapper.java
    │   │               │   ├── StringCompressedPolyLine.java
    │   │               │   ├── StringCompressedPolygon.java
    │   │               │   ├── WkbPrintable.java
    │   │               │   ├── WktPrintable.java
    │   │               │   ├── atlas/
    │   │               │   │   ├── AbstractAtlas.java
    │   │               │   │   ├── Atlas.java
    │   │               │   │   ├── AtlasLoadingCommand.java
    │   │               │   │   ├── AtlasMetaData.java
    │   │               │   │   ├── AtlasResourceLoader.java
    │   │               │   │   ├── BareAtlas.java
    │   │               │   │   ├── Crawler.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── ShardFileOverlapsPolygon.java
    │   │               │   │   ├── builder/
    │   │               │   │   │   ├── AtlasBuilder.java
    │   │               │   │   │   ├── AtlasSize.java
    │   │               │   │   │   ├── GeoJsonAtlasBuilder.java
    │   │               │   │   │   ├── RelationBean.java
    │   │               │   │   │   ├── store/
    │   │               │   │   │   │   ├── AtlasPrimitiveArea.java
    │   │               │   │   │   │   ├── AtlasPrimitiveBigNode.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEdge.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEdgeIdentifier.java
    │   │               │   │   │   │   ├── AtlasPrimitiveEntity.java
    │   │               │   │   │   │   ├── AtlasPrimitiveLineItem.java
    │   │               │   │   │   │   ├── AtlasPrimitiveLocationItem.java
    │   │               │   │   │   │   ├── AtlasPrimitiveObjectStore.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRelation.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRoute.java
    │   │               │   │   │   │   ├── AtlasPrimitiveRouteIdentifier.java
    │   │               │   │   │   │   └── TemporaryObjectStore.java
    │   │               │   │   │   └── text/
    │   │               │   │   │       └── TextAtlasBuilder.java
    │   │               │   │   ├── change/
    │   │               │   │   │   ├── AtlasChangeGenerator.java
    │   │               │   │   │   ├── AtlasEntityKey.java
    │   │               │   │   │   ├── Change.java
    │   │               │   │   │   ├── ChangeArea.java
    │   │               │   │   │   ├── ChangeAtlas.java
    │   │               │   │   │   ├── ChangeBuilder.java
    │   │               │   │   │   ├── ChangeEdge.java
    │   │               │   │   │   ├── ChangeEntity.java
    │   │               │   │   │   ├── ChangeLine.java
    │   │               │   │   │   ├── ChangeNode.java
    │   │               │   │   │   ├── ChangePoint.java
    │   │               │   │   │   ├── ChangeRelation.java
    │   │               │   │   │   ├── ChangeType.java
    │   │               │   │   │   ├── FeatureChange.java
    │   │               │   │   │   ├── FeatureChangeBoundsExpander.java
    │   │               │   │   │   ├── FeatureChangeMergeGroup.java
    │   │               │   │   │   ├── FeatureChangeMergingHelpers.java
    │   │               │   │   │   ├── MemberMergeStrategies.java
    │   │               │   │   │   ├── MemberMerger.java
    │   │               │   │   │   ├── description/
    │   │               │   │   │   │   ├── ChangeDescription.java
    │   │               │   │   │   │   ├── ChangeDescriptorGenerator.java
    │   │               │   │   │   │   ├── ChangeDescriptorType.java
    │   │               │   │   │   │   └── descriptors/
    │   │               │   │   │   │       ├── ChangeDescriptor.java
    │   │               │   │   │   │       ├── ChangeDescriptorComparator.java
    │   │               │   │   │   │       ├── ChangeDescriptorName.java
    │   │               │   │   │   │       ├── GeometricRelationGeometryChangeDescriptor.java
    │   │               │   │   │   │       ├── GeometryChangeDescriptor.java
    │   │               │   │   │   │       ├── LongElementChangeDescriptor.java
    │   │               │   │   │   │       ├── RelationMemberChangeDescriptor.java
    │   │               │   │   │   │       └── TagChangeDescriptor.java
    │   │               │   │   │   ├── diff/
    │   │               │   │   │   │   ├── AtlasDiff.java
    │   │               │   │   │   │   └── AtlasDiffHelper.java
    │   │               │   │   │   ├── eventhandling/
    │   │               │   │   │   │   ├── event/
    │   │               │   │   │   │   │   ├── EntityChangeEvent.java
    │   │               │   │   │   │   │   ├── TagChangeEvent.java
    │   │               │   │   │   │   │   └── consts/
    │   │               │   │   │   │   │       └── FieldChangeOperation.java
    │   │               │   │   │   │   ├── listenable/
    │   │               │   │   │   │   │   ├── EntityChangeListenable.java
    │   │               │   │   │   │   │   └── TagChangeListenable.java
    │   │               │   │   │   │   └── listener/
    │   │               │   │   │   │       ├── EntityChangeListener.java
    │   │               │   │   │   │       └── TagChangeListener.java
    │   │               │   │   │   ├── exception/
    │   │               │   │   │   │   └── EmptyChangeException.java
    │   │               │   │   │   ├── serializer/
    │   │               │   │   │   │   ├── ChangeGeoJsonSerializer.java
    │   │               │   │   │   │   └── FeatureChangeGeoJsonSerializer.java
    │   │               │   │   │   ├── testing/
    │   │               │   │   │   │   ├── AtlasChangeGeneratorAddTurnRestrictions.java
    │   │               │   │   │   │   ├── AtlasChangeGeneratorRemoveReverseEdges.java
    │   │               │   │   │   │   └── AtlasChangeGeneratorSplitRoundabout.java
    │   │               │   │   │   └── validators/
    │   │               │   │   │       └── ChangeValidator.java
    │   │               │   │   ├── changeset/
    │   │               │   │   │   ├── BinaryChangeSetDeserializer.java
    │   │               │   │   │   ├── BinaryChangeSetSerializer.java
    │   │               │   │   │   ├── ChangeAction.java
    │   │               │   │   │   ├── ChangeItem.java
    │   │               │   │   │   ├── ChangeItemMember.java
    │   │               │   │   │   ├── ChangeSet.java
    │   │               │   │   │   ├── ChangeSetAtlasBuilder.java
    │   │               │   │   │   ├── ChangeSetDeserializer.java
    │   │               │   │   │   ├── ChangeSetSerializer.java
    │   │               │   │   │   ├── GeoJSONChangeSetSerializer.java
    │   │               │   │   │   ├── MutableChangeItem.java
    │   │               │   │   │   ├── SimpleChangeItem.java
    │   │               │   │   │   ├── SimpleChangeItemMember.java
    │   │               │   │   │   └── SimpleChangeSet.java
    │   │               │   │   ├── command/
    │   │               │   │   │   ├── AbstractAtlasOutputTestSubCommand.java
    │   │               │   │   │   ├── AbstractAtlasSubCommand.java
    │   │               │   │   │   ├── AtlasCommandConstants.java
    │   │               │   │   │   ├── AtlasCountriesSubCommand.java
    │   │               │   │   │   ├── AtlasFeatureCountsSubCommand.java
    │   │               │   │   │   ├── AtlasFindByAtlasIdentifierSubCommand.java
    │   │               │   │   │   ├── AtlasFindByFeatureIdentifierLocatorSubCommand.java
    │   │               │   │   │   ├── AtlasFindEntitiesByIdSubCommand.java
    │   │               │   │   │   ├── AtlasGeoJSONSubCommand.java
    │   │               │   │   │   ├── AtlasItemsWithSharedShapepointsSubCommand.java
    │   │               │   │   │   ├── AtlasJoinerSubCommand.java
    │   │               │   │   │   ├── AtlasListRestrictedPathsCommand.java
    │   │               │   │   │   ├── AtlasListValidTurnRestrictionIds.java
    │   │               │   │   │   ├── AtlasMetadataSubCommand.java
    │   │               │   │   │   ├── AtlasMissingISOSubCommand.java
    │   │               │   │   │   ├── AtlasReader.java
    │   │               │   │   │   ├── AtlasResourceLoaderErrorSubCommand.java
    │   │               │   │   │   ├── AtlasSplitterWithSlippyTileCommand.java
    │   │               │   │   │   ├── FerrySearchSubCommand.java
    │   │               │   │   │   ├── OsmPbfToAtlasSubCommand.java
    │   │               │   │   │   ├── PackedToTextAtlasSubCommand.java
    │   │               │   │   │   ├── SubAtlasSubCommand.java
    │   │               │   │   │   ├── TextToPackedAtlasSubCommand.java
    │   │               │   │   │   └── buildings/
    │   │               │   │   │       ├── AtlasFindBuildingPartsSubCommand.java
    │   │               │   │   │       ├── BuildingsWithHeightSearchSubCommand.java
    │   │               │   │   │       └── TinyBuildingsSearchSubCommand.java
    │   │               │   │   ├── complete/
    │   │               │   │   │   ├── CompleteArea.java
    │   │               │   │   │   ├── CompleteEdge.java
    │   │               │   │   │   ├── CompleteEntity.java
    │   │               │   │   │   ├── CompleteItemType.java
    │   │               │   │   │   ├── CompleteLine.java
    │   │               │   │   │   ├── CompleteLineItem.java
    │   │               │   │   │   ├── CompleteLocationItem.java
    │   │               │   │   │   ├── CompleteNode.java
    │   │               │   │   │   ├── CompletePoint.java
    │   │               │   │   │   ├── CompleteRelation.java
    │   │               │   │   │   ├── EmptyAtlas.java
    │   │               │   │   │   ├── PrettifyStringFormat.java
    │   │               │   │   │   └── TagChangeDelegate.java
    │   │               │   │   ├── converters/
    │   │               │   │   │   └── AtlasDebugTool.java
    │   │               │   │   ├── delta/
    │   │               │   │   │   ├── AtlasDelta.java
    │   │               │   │   │   ├── AtlasDeltaGenerator.java
    │   │               │   │   │   ├── Diff.java
    │   │               │   │   │   └── README.md
    │   │               │   │   ├── dynamic/
    │   │               │   │   │   ├── DynamicArea.java
    │   │               │   │   │   ├── DynamicAtlas.java
    │   │               │   │   │   ├── DynamicAtlasExpander.java
    │   │               │   │   │   ├── DynamicEdge.java
    │   │               │   │   │   ├── DynamicLine.java
    │   │               │   │   │   ├── DynamicNode.java
    │   │               │   │   │   ├── DynamicPoint.java
    │   │               │   │   │   ├── DynamicRelation.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   └── policy/
    │   │               │   │   │       ├── DynamicAtlasPolicy.java
    │   │               │   │   │       └── DynamicAtlasResourcePolicy.java
    │   │               │   │   ├── exception/
    │   │               │   │   │   └── AtlasIntegrityException.java
    │   │               │   │   ├── geojson/
    │   │               │   │   │   ├── AtlasGeoJsonConverter.java
    │   │               │   │   │   └── LineDelimitedGeoJsonConverter.java
    │   │               │   │   ├── inspection/
    │   │               │   │   │   └── EntityClassifier.java
    │   │               │   │   ├── items/
    │   │               │   │   │   ├── Area.java
    │   │               │   │   │   ├── AtlasEntity.java
    │   │               │   │   │   ├── AtlasItem.java
    │   │               │   │   │   ├── AtlasObject.java
    │   │               │   │   │   ├── ConnectedEdgeType.java
    │   │               │   │   │   ├── ConnectedEntityType.java
    │   │               │   │   │   ├── ConnectedNodeType.java
    │   │               │   │   │   ├── DiffViewFriendlyItem.java
    │   │               │   │   │   ├── DirectionalizedEdge.java
    │   │               │   │   │   ├── Edge.java
    │   │               │   │   │   ├── ItemType.java
    │   │               │   │   │   ├── Line.java
    │   │               │   │   │   ├── LineItem.java
    │   │               │   │   │   ├── LocationItem.java
    │   │               │   │   │   ├── Node.java
    │   │               │   │   │   ├── Point.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   ├── Relation.java
    │   │               │   │   │   ├── RelationMember.java
    │   │               │   │   │   ├── RelationMemberList.java
    │   │               │   │   │   ├── Route.java
    │   │               │   │   │   ├── SnappedEdge.java
    │   │               │   │   │   ├── SnappedLineItem.java
    │   │               │   │   │   ├── TurnRestriction.java
    │   │               │   │   │   └── complex/
    │   │               │   │   │       ├── ComplexEntity.java
    │   │               │   │   │       ├── Finder.java
    │   │               │   │   │       ├── MultiPolygonRelationToMemberConverter.java
    │   │               │   │   │       ├── README.md
    │   │               │   │   │       ├── RelationOrAreaToMultiPolygonConverter.java
    │   │               │   │   │       ├── RelationToMultiPolygonMemberConverter.java
    │   │               │   │   │       ├── WaterIslandConfigurationReader.java
    │   │               │   │   │       ├── aoi/
    │   │               │   │   │       │   ├── ComplexAreaOfInterest.java
    │   │               │   │   │       │   └── ComplexAreaOfInterestFinder.java
    │   │               │   │   │       ├── bignode/
    │   │               │   │   │       │   ├── BigNode.java
    │   │               │   │   │       │   ├── BigNodeFinder.java
    │   │               │   │   │       │   ├── README.md
    │   │               │   │   │       │   ├── RestrictedPath.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       ├── AtlasBigNodeRestrictedPathToGeoJsonConverter.java
    │   │               │   │   │       │       └── AtlasBigNodesToGeoJsonConverter.java
    │   │               │   │   │       ├── boundaries/
    │   │               │   │   │       │   ├── ComplexBoundary.java
    │   │               │   │   │       │   ├── ComplexBoundaryFinder.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── ComplexBoundaryIterableToGeoJsonWriter.java
    │   │               │   │   │       ├── buildings/
    │   │               │   │   │       │   ├── BuildingPart.java
    │   │               │   │   │       │   ├── ComplexBuilding.java
    │   │               │   │   │       │   ├── ComplexBuildingFinder.java
    │   │               │   │   │       │   ├── HeightConverter.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── ComplexBuildingToGeojsonConverter.java
    │   │               │   │   │       ├── highwayarea/
    │   │               │   │   │       │   ├── ComplexHighwayArea.java
    │   │               │   │   │       │   ├── ComplexHighwayAreaFinder.java
    │   │               │   │   │       │   └── ComplexHighwayAreaHelper.java
    │   │               │   │   │       ├── islands/
    │   │               │   │   │       │   ├── ComplexIsland.java
    │   │               │   │   │       │   ├── ComplexIslandFinder.java
    │   │               │   │   │       │   └── DefaultIslandConfigurationReader.java
    │   │               │   │   │       ├── landcover/
    │   │               │   │   │       │   ├── ComplexLandCover.java
    │   │               │   │   │       │   └── ComplexLandCoverFinder.java
    │   │               │   │   │       ├── restriction/
    │   │               │   │   │       │   ├── ComplexTurnRestriction.java
    │   │               │   │   │       │   ├── ComplexTurnRestrictionFinder.java
    │   │               │   │   │       │   └── converters/
    │   │               │   │   │       │       └── AtlasTurnRestrictionsToGeoJsonConverter.java
    │   │               │   │   │       ├── roundabout/
    │   │               │   │   │       │   ├── ComplexRoundabout.java
    │   │               │   │   │       │   └── ComplexRoundaboutFinder.java
    │   │               │   │   │       └── water/
    │   │               │   │   │           ├── ComplexWaterEntity.java
    │   │               │   │   │           ├── ComplexWaterbody.java
    │   │               │   │   │           ├── ComplexWaterway.java
    │   │               │   │   │           ├── WaterType.java
    │   │               │   │   │           └── finder/
    │   │               │   │   │               ├── ComplexWaterEntityFinder.java
    │   │               │   │   │               ├── DefaultWaterConfigurationReader.java
    │   │               │   │   │               └── WaterConfigurationReader.java
    │   │               │   │   ├── lightweight/
    │   │               │   │   │   ├── LightArea.java
    │   │               │   │   │   ├── LightEdge.java
    │   │               │   │   │   ├── LightEntity.java
    │   │               │   │   │   ├── LightLine.java
    │   │               │   │   │   ├── LightLineItem.java
    │   │               │   │   │   ├── LightLocationItem.java
    │   │               │   │   │   ├── LightNode.java
    │   │               │   │   │   ├── LightPoint.java
    │   │               │   │   │   └── LightRelation.java
    │   │               │   │   ├── multi/
    │   │               │   │   │   ├── MultiArea.java
    │   │               │   │   │   ├── MultiAtlas.java
    │   │               │   │   │   ├── MultiAtlasLoaderCommand.java
    │   │               │   │   │   ├── MultiAtlasOverlappingNodesFixer.java
    │   │               │   │   │   ├── MultiEdge.java
    │   │               │   │   │   ├── MultiLine.java
    │   │               │   │   │   ├── MultiNode.java
    │   │               │   │   │   ├── MultiPoint.java
    │   │               │   │   │   ├── MultiRelation.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   ├── SubAreaList.java
    │   │               │   │   │   ├── SubEdgeList.java
    │   │               │   │   │   ├── SubLineList.java
    │   │               │   │   │   ├── SubNodeList.java
    │   │               │   │   │   ├── SubPointList.java
    │   │               │   │   │   └── SubRelationList.java
    │   │               │   │   ├── packed/
    │   │               │   │   │   ├── PackedArea.java
    │   │               │   │   │   ├── PackedAtlas.java
    │   │               │   │   │   ├── PackedAtlasBuilder.java
    │   │               │   │   │   ├── PackedAtlasCloner.java
    │   │               │   │   │   ├── PackedAtlasLogMessages.java
    │   │               │   │   │   ├── PackedAtlasSerializer.java
    │   │               │   │   │   ├── PackedEdge.java
    │   │               │   │   │   ├── PackedLine.java
    │   │               │   │   │   ├── PackedNode.java
    │   │               │   │   │   ├── PackedPoint.java
    │   │               │   │   │   ├── PackedRelation.java
    │   │               │   │   │   ├── PackedTagStore.java
    │   │               │   │   │   └── README.md
    │   │               │   │   ├── pbf/
    │   │               │   │   │   ├── AtlasLoadingOption.java
    │   │               │   │   │   ├── BridgeConfiguredFilter.java
    │   │               │   │   │   ├── CloseableOsmosisReader.java
    │   │               │   │   │   ├── converters/
    │   │               │   │   │   │   └── TagMapToTagCollectionConverter.java
    │   │               │   │   │   └── slicing/
    │   │               │   │   │       └── identifier/
    │   │               │   │   │           ├── AbstractIdentifierFactory.java
    │   │               │   │   │           ├── CountrySlicingIdentifierFactory.java
    │   │               │   │   │           ├── PaddingIdentifierFactory.java
    │   │               │   │   │           ├── PointIdentifierFactory.java
    │   │               │   │   │           ├── ReverseIdentifierFactory.java
    │   │               │   │   │           └── WaySectionIdentifierFactory.java
    │   │               │   │   ├── raw/
    │   │               │   │   │   ├── creation/
    │   │               │   │   │   │   ├── OsmPbfCounter.java
    │   │               │   │   │   │   ├── OsmPbfReader.java
    │   │               │   │   │   │   ├── README.md
    │   │               │   │   │   │   ├── RawAtlasGenerator.java
    │   │               │   │   │   │   └── RawAtlasStatistic.java
    │   │               │   │   │   ├── sectioning/
    │   │               │   │   │   │   ├── AtlasSectionProcessor.java
    │   │               │   │   │   │   ├── PbfOneWay.java
    │   │               │   │   │   │   ├── README.md
    │   │               │   │   │   │   └── TagMap.java
    │   │               │   │   │   └── slicing/
    │   │               │   │   │       ├── CountryCodeProperties.java
    │   │               │   │   │       ├── README.md
    │   │               │   │   │       └── RawAtlasSlicer.java
    │   │               │   │   ├── routing/
    │   │               │   │   │   ├── AStarRouter.java
    │   │               │   │   │   ├── AbstractRouter.java
    │   │               │   │   │   ├── AllPathsRouter.java
    │   │               │   │   │   ├── README.md
    │   │               │   │   │   └── Router.java
    │   │               │   │   ├── statistics/
    │   │               │   │   │   ├── AtlasStatistics.java
    │   │               │   │   │   ├── AtlasStatisticsMerger.java
    │   │               │   │   │   ├── Counter.java
    │   │               │   │   │   └── coverage/
    │   │               │   │   │       ├── Coverage.java
    │   │               │   │   │       ├── area/
    │   │               │   │   │       │   ├── AreaCoverage.java
    │   │               │   │   │       │   ├── LakeAreaCoverage.java
    │   │               │   │   │       │   └── RiverAreaCoverage.java
    │   │               │   │   │       ├── linear/
    │   │               │   │   │       │   ├── BusRouteLinearCoverage.java
    │   │               │   │   │       │   ├── LinearCoverage.java
    │   │               │   │   │       │   ├── edge/
    │   │               │   │   │       │   │   ├── AllHighwayTagEdgeCoverage.java
    │   │               │   │   │       │   │   ├── BridgeEdgeCoverage.java
    │   │               │   │   │       │   │   ├── EdgeCoverage.java
    │   │               │   │   │       │   │   ├── FerryEdgeCoverage.java
    │   │               │   │   │       │   │   ├── FreshnessEdgeCoverage.java
    │   │               │   │   │       │   │   ├── LanesEdgeCoverage.java
    │   │               │   │   │       │   │   ├── NameEdgeCoverage.java
    │   │               │   │   │       │   │   ├── NoNameEdgeCoverage.java
    │   │               │   │   │       │   │   ├── OneWayEdgeCoverage.java
    │   │               │   │   │       │   │   ├── PrivateAccessEdgeCoverage.java
    │   │               │   │   │       │   │   ├── ReferenceEdgeCoverage.java
    │   │               │   │   │       │   │   ├── SpeedLimitEdgeCoverage.java
    │   │               │   │   │       │   │   ├── SurfaceEdgeCoverage.java
    │   │               │   │   │       │   │   ├── TollEdgeCoverage.java
    │   │               │   │   │       │   │   └── TunnelEdgeCoverage.java
    │   │               │   │   │       │   └── line/
    │   │               │   │   │       │       ├── LineCoverage.java
    │   │               │   │   │       │       ├── RailLineCoverage.java
    │   │               │   │   │       │       ├── RiverLineCoverage.java
    │   │               │   │   │       │       └── TransitRailLineCoverage.java
    │   │               │   │   │       ├── poi/
    │   │               │   │   │       │   ├── EdgesCountCoverage.java
    │   │               │   │   │       │   ├── LastUserNameCountCoverage.java
    │   │               │   │   │       │   ├── OneWayEdgesCountCoverage.java
    │   │               │   │   │       │   └── SimpleCoverage.java
    │   │               │   │   │       └── weird/
    │   │               │   │   │           └── NodesPerLength.java
    │   │               │   │   ├── sub/
    │   │               │   │   │   ├── AtlasCutType.java
    │   │               │   │   │   └── SubAtlasCreator.java
    │   │               │   │   ├── validators/
    │   │               │   │   │   ├── AtlasEdgeValidator.java
    │   │               │   │   │   ├── AtlasLineItemValidator.java
    │   │               │   │   │   ├── AtlasLocationItemValidator.java
    │   │               │   │   │   ├── AtlasNodeValidator.java
    │   │               │   │   │   ├── AtlasRelationValidator.java
    │   │               │   │   │   ├── AtlasValidator.java
    │   │               │   │   │   └── FeatureChangeUsefulnessValidator.java
    │   │               │   │   └── walker/
    │   │               │   │       ├── EdgeWalker.java
    │   │               │   │       ├── OsmWayWalker.java
    │   │               │   │       └── SimpleEdgeWalker.java
    │   │               │   ├── boundary/
    │   │               │   │   ├── CountryBoundaryMap.java
    │   │               │   │   ├── CountryBoundaryMapArchiver.java
    │   │               │   │   ├── CountryBoundaryMapCompareCommand.java
    │   │               │   │   ├── CountryBoundaryMapFiller.java
    │   │               │   │   ├── CountryCodeGenerator.java
    │   │               │   │   ├── CountryShardListing.java
    │   │               │   │   ├── CountryShardListingProcessor.java
    │   │               │   │   ├── CountryToShardListCache.java
    │   │               │   │   ├── CountryToShardListing.java
    │   │               │   │   ├── README.md
    │   │               │   │   └── converters/
    │   │               │   │       ├── CountryBoundaryMapGeoJsonConverter.java
    │   │               │   │       └── CountryListTwoWayStringConverter.java
    │   │               │   ├── clipping/
    │   │               │   │   ├── Clip.java
    │   │               │   │   ├── GeometryOperation.java
    │   │               │   │   ├── MultiPolygonClipper.java
    │   │               │   │   ├── PolygonClipper.java
    │   │               │   │   └── README.md
    │   │               │   ├── constants/
    │   │               │   │   └── WorldGeodeticStandardConstants.java
    │   │               │   ├── converters/
    │   │               │   │   ├── GeodeticEarthCenteredEarthFixedConverter.java
    │   │               │   │   ├── MultiPolygonStringConverter.java
    │   │               │   │   ├── MultiplePolyLineToMultiPolygonConverter.java
    │   │               │   │   ├── MultiplePolyLineToPolygonsConverter.java
    │   │               │   │   ├── MultiplePolyLineToPolygonsConverterCommand.java
    │   │               │   │   ├── PolyLineStringConverter.java
    │   │               │   │   ├── PolygonStringConverter.java
    │   │               │   │   ├── PolygonStringFormat.java
    │   │               │   │   ├── WkMultiPolygonConverter.java
    │   │               │   │   ├── WkbLocationConverter.java
    │   │               │   │   ├── WkbMultiPolyLineConverter.java
    │   │               │   │   ├── WkbMultiPolygonConverter.java
    │   │               │   │   ├── WkbPolyLineConverter.java
    │   │               │   │   ├── WkbPolygonConverter.java
    │   │               │   │   ├── WktLocationConverter.java
    │   │               │   │   ├── WktMultiPolyLineConverter.java
    │   │               │   │   ├── WktMultiPolygonConverter.java
    │   │               │   │   ├── WktPolyLineConverter.java
    │   │               │   │   ├── WktPolygonConverter.java
    │   │               │   │   └── jts/
    │   │               │   │       ├── GeometryStreamer.java
    │   │               │   │       ├── JtsCoordinateArrayConverter.java
    │   │               │   │       ├── JtsLinearRingConverter.java
    │   │               │   │       ├── JtsLocationConverter.java
    │   │               │   │       ├── JtsMultiPolyLineConverter.java
    │   │               │   │       ├── JtsMultiPolygonConverter.java
    │   │               │   │       ├── JtsMultiPolygonToMultiLineStringConverter.java
    │   │               │   │       ├── JtsMultiPolygonToMultiPolygonConverter.java
    │   │               │   │       ├── JtsPointConverter.java
    │   │               │   │       ├── JtsPolyLineConverter.java
    │   │               │   │       ├── JtsPolygonConverter.java
    │   │               │   │       ├── JtsPolygonToMultiPolygonConverter.java
    │   │               │   │       ├── JtsPrecisionManager.java
    │   │               │   │       └── JtsUtility.java
    │   │               │   ├── coordinates/
    │   │               │   │   ├── EarthCenteredEarthFixedCoordinate.java
    │   │               │   │   └── GeodeticCoordinate.java
    │   │               │   ├── geojson/
    │   │               │   │   ├── ConcatenateGeoJsonCommand.java
    │   │               │   │   ├── GeoJson.java
    │   │               │   │   ├── GeoJsonBuilder.java
    │   │               │   │   ├── GeoJsonCollection.java
    │   │               │   │   ├── GeoJsonConstants.java
    │   │               │   │   ├── GeoJsonFeature.java
    │   │               │   │   ├── GeoJsonFeatureCollection.java
    │   │               │   │   ├── GeoJsonGeometry.java
    │   │               │   │   ├── GeoJsonObject.java
    │   │               │   │   ├── GeoJsonProperties.java
    │   │               │   │   ├── GeoJsonSaver.java
    │   │               │   │   ├── GeoJsonType.java
    │   │               │   │   ├── GeoJsonUtils.java
    │   │               │   │   ├── GeojsonGeometryCollection.java
    │   │               │   │   └── parser/
    │   │               │   │       ├── GeoJsonParser.java
    │   │               │   │       ├── README.md
    │   │               │   │       ├── domain/
    │   │               │   │       │   ├── annotation/
    │   │               │   │       │   │   └── Foreign.java
    │   │               │   │       │   ├── base/
    │   │               │   │       │   │   ├── AbstractGeoJsonItem.java
    │   │               │   │       │   │   ├── GeoJsonItem.java
    │   │               │   │       │   │   └── type/
    │   │               │   │       │   │       ├── FeatureType.java
    │   │               │   │       │   │       ├── GeometryType.java
    │   │               │   │       │   │       ├── Type.java
    │   │               │   │       │   │       └── TypeUtil.java
    │   │               │   │       │   ├── bbox/
    │   │               │   │       │   │   ├── AbstractBbox.java
    │   │               │   │       │   │   ├── Bbox.java
    │   │               │   │       │   │   ├── Bbox2D.java
    │   │               │   │       │   │   ├── Bbox3D.java
    │   │               │   │       │   │   └── Dimensions.java
    │   │               │   │       │   ├── feature/
    │   │               │   │       │   │   ├── AbstractFeature.java
    │   │               │   │       │   │   ├── Feature.java
    │   │               │   │       │   │   └── FeatureCollection.java
    │   │               │   │       │   ├── foreign/
    │   │               │   │       │   │   ├── DefaultForeignFieldsImpl.java
    │   │               │   │       │   │   ├── ForeignFields.java
    │   │               │   │       │   │   └── SupportsForeigners.java
    │   │               │   │       │   ├── geometry/
    │   │               │   │       │   │   ├── AbstractGeometry.java
    │   │               │   │       │   │   ├── AbstractGeometryWithCoordinateSupport.java
    │   │               │   │       │   │   ├── Geometry.java
    │   │               │   │       │   │   ├── GeometryCollection.java
    │   │               │   │       │   │   ├── GeometryWithCoordinates.java
    │   │               │   │       │   │   ├── LineString.java
    │   │               │   │       │   │   ├── MultiLineString.java
    │   │               │   │       │   │   ├── MultiPoint.java
    │   │               │   │       │   │   ├── MultiPolygon.java
    │   │               │   │       │   │   ├── Point.java
    │   │               │   │       │   │   ├── Polygon.java
    │   │               │   │       │   │   └── coordinate/
    │   │               │   │       │   │       ├── Coordinates.java
    │   │               │   │       │   │       ├── Position.java
    │   │               │   │       │   │       └── Positions.java
    │   │               │   │       │   └── properties/
    │   │               │   │       │       ├── Properties.java
    │   │               │   │       │       └── ext/
    │   │               │   │       │           └── change/
    │   │               │   │       │               ├── Description.java
    │   │               │   │       │               ├── Descriptor.java
    │   │               │   │       │               └── FeatureChangeProperties.java
    │   │               │   │       ├── impl/
    │   │               │   │       │   └── jackson/
    │   │               │   │       │       └── GeoJsonParserJacksonImpl.java
    │   │               │   │       └── mapper/
    │   │               │   │           ├── Mapper.java
    │   │               │   │           └── impl/
    │   │               │   │               └── DefaultBeanUtilsBasedMapperImpl.java
    │   │               │   ├── index/
    │   │               │   │   ├── JtsSpatialIndex.java
    │   │               │   │   ├── PackedSpatialIndex.java
    │   │               │   │   ├── QuadTree.java
    │   │               │   │   ├── RTree.java
    │   │               │   │   └── SpatialIndex.java
    │   │               │   ├── matching/
    │   │               │   │   ├── PolyLineMatch.java
    │   │               │   │   └── PolyLineRoute.java
    │   │               │   └── sharding/
    │   │               │       ├── CountryShard.java
    │   │               │       ├── DynamicTileSharding.java
    │   │               │       ├── GeoHashSharding.java
    │   │               │       ├── GeoHashTile.java
    │   │               │       ├── GeoHashTileIterable.java
    │   │               │       ├── LocationToShardCommand.java
    │   │               │       ├── README.md
    │   │               │       ├── Shard.java
    │   │               │       ├── Sharding.java
    │   │               │       ├── SlippyTile.java
    │   │               │       ├── SlippyTileSharding.java
    │   │               │       ├── converters/
    │   │               │       │   ├── DynamicTileShardingGeoJsonConverter.java
    │   │               │       │   ├── RectangleToSpatial4JRectangleConverter.java
    │   │               │       │   ├── SlippyTileConverter.java
    │   │               │       │   └── StringToShardConverter.java
    │   │               │       └── preparation/
    │   │               │           ├── TilePrinter.java
    │   │               │           ├── tileDownload.sh
    │   │               │           ├── tileExecute.sh
    │   │               │           └── tilePrinter.sh
    │   │               ├── locale/
    │   │               │   ├── IsoCountry.java
    │   │               │   ├── IsoCountryFuzzyMatcher.java
    │   │               │   └── IsoLanguage.java
    │   │               ├── proto/
    │   │               │   ├── ProtoSerializable.java
    │   │               │   ├── adapters/
    │   │               │   │   ├── ProtoAdapter.java
    │   │               │   │   ├── ProtoAtlasMetaDataAdapter.java
    │   │               │   │   ├── ProtoByteArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoIntegerArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoIntegerStringDictionaryAdapter.java
    │   │               │   │   ├── ProtoLongArrayAdapter.java
    │   │               │   │   ├── ProtoLongArrayOfArraysAdapter.java
    │   │               │   │   ├── ProtoLongToLongMapAdapter.java
    │   │               │   │   ├── ProtoLongToLongMultiMapAdapter.java
    │   │               │   │   ├── ProtoPackedTagStoreAdapter.java
    │   │               │   │   ├── ProtoPolyLineArrayAdapter.java
    │   │               │   │   └── ProtoPolygonArrayAdapter.java
    │   │               │   ├── builder/
    │   │               │   │   └── ProtoAtlasBuilder.java
    │   │               │   ├── command/
    │   │               │   │   ├── PackedToProtoAtlasSubCommand.java
    │   │               │   │   └── ProtoToPackedAtlasSubCommand.java
    │   │               │   └── converters/
    │   │               │       ├── ProtoIntegerArrayOfArraysConverter.java
    │   │               │       ├── ProtoLocationConverter.java
    │   │               │       └── ProtoTagListConverter.java
    │   │               ├── streaming/
    │   │               │   ├── CounterOutputStream.java
    │   │               │   ├── NotifyingIOUtils.java
    │   │               │   ├── SplittableInputStream.java
    │   │               │   ├── Streams.java
    │   │               │   ├── StringInputStream.java
    │   │               │   ├── StringOutputStream.java
    │   │               │   ├── compression/
    │   │               │   │   ├── Compressor.java
    │   │               │   │   └── Decompressor.java
    │   │               │   ├── readers/
    │   │               │   │   ├── CsvLine.java
    │   │               │   │   ├── CsvReader.java
    │   │               │   │   ├── CsvSchema.java
    │   │               │   │   ├── GeoJsonReader.java
    │   │               │   │   ├── csv/
    │   │               │   │   │   └── converters/
    │   │               │   │   │       └── CsvLineConverter.java
    │   │               │   │   └── json/
    │   │               │   │       ├── converters/
    │   │               │   │       │   ├── MultiPolyLineCoordinateConverter.java
    │   │               │   │       │   ├── MultiPolygonCoordinateConverter.java
    │   │               │   │       │   ├── PointCoordinateConverter.java
    │   │               │   │       │   ├── PolyLineCoordinateConverter.java
    │   │               │   │       │   └── PolygonCoordinateConverter.java
    │   │               │   │       ├── deserializers/
    │   │               │   │       │   ├── LocatedDeserializer.java
    │   │               │   │       │   ├── LocationDeserializer.java
    │   │               │   │       │   ├── MultiPolyLineDeserializer.java
    │   │               │   │       │   ├── MultiPolygonDeserializer.java
    │   │               │   │       │   ├── PolyLineDeserializer.java
    │   │               │   │       │   └── PolygonDeserializer.java
    │   │               │   │       └── serializers/
    │   │               │   │           ├── LocationSerializer.java
    │   │               │   │           ├── MultiLocationSerializer.java
    │   │               │   │           ├── PolyLineSerializer.java
    │   │               │   │           ├── PolygonSerializer.java
    │   │               │   │           └── PropertiesLocated.java
    │   │               │   ├── resource/
    │   │               │   │   ├── AbstractResource.java
    │   │               │   │   ├── AbstractWritableResource.java
    │   │               │   │   ├── ByteArrayResource.java
    │   │               │   │   ├── ClassResource.java
    │   │               │   │   ├── File.java
    │   │               │   │   ├── FileSuffix.java
    │   │               │   │   ├── GeoJsonFile.java
    │   │               │   │   ├── InputStreamResource.java
    │   │               │   │   ├── InputStreamResourceCloseable.java
    │   │               │   │   ├── LineFilteredResource.java
    │   │               │   │   ├── LineWriter.java
    │   │               │   │   ├── OutputStreamWritableResource.java
    │   │               │   │   ├── OutputStreamWritableResourceCloseable.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── Resource.java
    │   │               │   │   ├── ResourceCloseable.java
    │   │               │   │   ├── StreamOfResourceStreams.java
    │   │               │   │   ├── StringResource.java
    │   │               │   │   ├── TemporaryFile.java
    │   │               │   │   ├── WritableResource.java
    │   │               │   │   ├── WritableResourceCloseable.java
    │   │               │   │   ├── http/
    │   │               │   │   │   ├── DeleteResource.java
    │   │               │   │   │   ├── GetResource.java
    │   │               │   │   │   ├── HttpResource.java
    │   │               │   │   │   ├── PostResource.java
    │   │               │   │   │   └── PutResource.java
    │   │               │   │   └── zip/
    │   │               │   │       ├── ZipFileWritableResource.java
    │   │               │   │       ├── ZipResource.java
    │   │               │   │       └── ZipWritableResource.java
    │   │               │   └── writers/
    │   │               │       ├── JsonWriter.java
    │   │               │       └── SafeBufferedWriter.java
    │   │               ├── tags/
    │   │               │   ├── AbandonedAerowayTag.java
    │   │               │   ├── AbandonedAmenityTag.java
    │   │               │   ├── AbandonedArtworkTypeTag.java
    │   │               │   ├── AccessTag.java
    │   │               │   ├── AddressCityTag.java
    │   │               │   ├── AddressCountryTag.java
    │   │               │   ├── AddressFlatsTag.java
    │   │               │   ├── AddressFullTag.java
    │   │               │   ├── AddressHousenameTag.java
    │   │               │   ├── AddressHousenumberTag.java
    │   │               │   ├── AddressInterpolationTag.java
    │   │               │   ├── AddressPlaceTag.java
    │   │               │   ├── AddressPostcodeTag.java
    │   │               │   ├── AddressProvinceTag.java
    │   │               │   ├── AddressStateTag.java
    │   │               │   ├── AddressStreetTag.java
    │   │               │   ├── AdministrativeLevelTag.java
    │   │               │   ├── AerialWayTag.java
    │   │               │   ├── AerowayTag.java
    │   │               │   ├── AmenityTag.java
    │   │               │   ├── AreaTag.java
    │   │               │   ├── ArtworkTypeTag.java
    │   │               │   ├── AtlasTag.java
    │   │               │   ├── BarrierTag.java
    │   │               │   ├── BicycleTag.java
    │   │               │   ├── BoundaryTag.java
    │   │               │   ├── BrandTag.java
    │   │               │   ├── BreakfastTag.java
    │   │               │   ├── BridgeTag.java
    │   │               │   ├── BuildingHeightTag.java
    │   │               │   ├── BuildingLevelsTag.java
    │   │               │   ├── BuildingMinLevelTag.java
    │   │               │   ├── BuildingPartTag.java
    │   │               │   ├── BuildingRoofTag.java
    │   │               │   ├── BuildingTag.java
    │   │               │   ├── CheckDateTag.java
    │   │               │   ├── ConstructionDateTag.java
    │   │               │   ├── ConstructionTag.java
    │   │               │   ├── ContactDiasporaTag.java
    │   │               │   ├── ContactEmailTag.java
    │   │               │   ├── ContactFacebookTag.java
    │   │               │   ├── ContactFaxTag.java
    │   │               │   ├── ContactGooglePlusTag.java
    │   │               │   ├── ContactInstagramTag.java
    │   │               │   ├── ContactLinkedInTag.java
    │   │               │   ├── ContactMobileTag.java
    │   │               │   ├── ContactPhoneTag.java
    │   │               │   ├── ContactTwitterTag.java
    │   │               │   ├── ContactWebsiteTag.java
    │   │               │   ├── ContactXingTag.java
    │   │               │   ├── CoveredTag.java
    │   │               │   ├── CuisineTag.java
    │   │               │   ├── CyclewayLaneTag.java
    │   │               │   ├── CyclewayLeftTag.java
    │   │               │   ├── CyclewayRightTag.java
    │   │               │   ├── CyclewayTag.java
    │   │               │   ├── DestinationForwardTag.java
    │   │               │   ├── DestinationIntRefTag.java
    │   │               │   ├── DestinationRefTag.java
    │   │               │   ├── DestinationRefToTag.java
    │   │               │   ├── DestinationStreetTag.java
    │   │               │   ├── DestinationTag.java
    │   │               │   ├── DirectionTag.java
    │   │               │   ├── DisusedRailwayTag.java
    │   │               │   ├── DisusedShopTag.java
    │   │               │   ├── ElevationTag.java
    │   │               │   ├── EmbankmentTag.java
    │   │               │   ├── EntranceTag.java
    │   │               │   ├── EstimatedWidthTag.java
    │   │               │   ├── ExitToLeftTag.java
    │   │               │   ├── ExitToRightTag.java
    │   │               │   ├── ExitToTag.java
    │   │               │   ├── FaxTag.java
    │   │               │   ├── FerryTag.java
    │   │               │   ├── FixMeTag.java
    │   │               │   ├── FootTag.java
    │   │               │   ├── FootwayTag.java
    │   │               │   ├── FordTag.java
    │   │               │   ├── FourWheelDriveOnlyTag.java
    │   │               │   ├── HarbourTag.java
    │   │               │   ├── HeightTag.java
    │   │               │   ├── HighResolutionTag.java
    │   │               │   ├── HighwayTag.java
    │   │               │   ├── HistoricTag.java
    │   │               │   ├── ISOCountryTag.java
    │   │               │   ├── IceRoadTag.java
    │   │               │   ├── IndustrialTag.java
    │   │               │   ├── IntermittentTag.java
    │   │               │   ├── InternetAccessFeeTag.java
    │   │               │   ├── InternetAccessTag.java
    │   │               │   ├── Iso31662CountryTag.java
    │   │               │   ├── Iso31663CountryTag.java
    │   │               │   ├── Iso3166DefaultCountryTag.java
    │   │               │   ├── JunctionTag.java
    │   │               │   ├── LandUseTag.java
    │   │               │   ├── LandcoverTag.java
    │   │               │   ├── LanesTag.java
    │   │               │   ├── LastEditChangesetTag.java
    │   │               │   ├── LastEditTimeTag.java
    │   │               │   ├── LastEditUserIdentifierTag.java
    │   │               │   ├── LastEditUserNameTag.java
    │   │               │   ├── LastEditVersionTag.java
    │   │               │   ├── LayerTag.java
    │   │               │   ├── LeisureTag.java
    │   │               │   ├── LevelTag.java
    │   │               │   ├── LivingStreetTag.java
    │   │               │   ├── LocalizedTagNameWithOptionalDate.java
    │   │               │   ├── LocationTag.java
    │   │               │   ├── ManMadeTag.java
    │   │               │   ├── MaxHeightTag.java
    │   │               │   ├── MaxSpeedBackwardTag.java
    │   │               │   ├── MaxSpeedForwardTag.java
    │   │               │   ├── MaxSpeedTag.java
    │   │               │   ├── MaxWidthTag.java
    │   │               │   ├── MilitaryTag.java
    │   │               │   ├── MinHeightTag.java
    │   │               │   ├── MinSpeedTag.java
    │   │               │   ├── MotorVehicleTag.java
    │   │               │   ├── MotorcarTag.java
    │   │               │   ├── MotorcycleTag.java
    │   │               │   ├── NaturalTag.java
    │   │               │   ├── NetworkTag.java
    │   │               │   ├── NoExitTag.java
    │   │               │   ├── NotesTag.java
    │   │               │   ├── OpenDateTag.java
    │   │               │   ├── OpeningDateTag.java
    │   │               │   ├── OpeningHoursTag.java
    │   │               │   ├── OrganicTag.java
    │   │               │   ├── ParkingTag.java
    │   │               │   ├── PhoneTag.java
    │   │               │   ├── PlaceTag.java
    │   │               │   ├── PowerTag.java
    │   │               │   ├── ProtectClassTag.java
    │   │               │   ├── PublicServiceVehiclesTag.java
    │   │               │   ├── README.md
    │   │               │   ├── RailwayTag.java
    │   │               │   ├── RampBicycleTag.java
    │   │               │   ├── RelationTypeTag.java
    │   │               │   ├── RouteTag.java
    │   │               │   ├── SaltTag.java
    │   │               │   ├── SeasonalTag.java
    │   │               │   ├── ServiceTag.java
    │   │               │   ├── ShopTag.java
    │   │               │   ├── SidewalkLeftTag.java
    │   │               │   ├── SidewalkRightTag.java
    │   │               │   ├── SidewalkTag.java
    │   │               │   ├── SkiTag.java
    │   │               │   ├── SmokingTag.java
    │   │               │   ├── SmoothnessTag.java
    │   │               │   ├── SnowmobileTag.java
    │   │               │   ├── SourceTag.java
    │   │               │   ├── SourceTypeTag.java
    │   │               │   ├── SourceURLTag.java
    │   │               │   ├── SportTag.java
    │   │               │   ├── SurfaceTag.java
    │   │               │   ├── SwimmingPoolTag.java
    │   │               │   ├── SyntheticBoundaryNodeTag.java
    │   │               │   ├── SyntheticDuplicateOsmNodeTag.java
    │   │               │   ├── SyntheticGeometrySlicedTag.java
    │   │               │   ├── SyntheticInvalidGeometryTag.java
    │   │               │   ├── SyntheticInvalidMultiPolygonRelationMembersRemovedTag.java
    │   │               │   ├── SyntheticInvalidWaySectionTag.java
    │   │               │   ├── SyntheticRelationMemberAdded.java
    │   │               │   ├── SyntheticRelationRoleUpdated.java
    │   │               │   ├── SyntheticSyntheticRelationMemberTag.java
    │   │               │   ├── Taggable.java
    │   │               │   ├── TemporaryDateOnTag.java
    │   │               │   ├── TollTag.java
    │   │               │   ├── TourismTag.java
    │   │               │   ├── TracktypeTag.java
    │   │               │   ├── TrafficCalmingTag.java
    │   │               │   ├── TunnelTag.java
    │   │               │   ├── TurnLanesBackwardTag.java
    │   │               │   ├── TurnLanesForwardTag.java
    │   │               │   ├── TurnLanesTag.java
    │   │               │   ├── TurnRestrictionTag.java
    │   │               │   ├── TurnTag.java
    │   │               │   ├── URLTag.java
    │   │               │   ├── UsageTag.java
    │   │               │   ├── VacantTag.java
    │   │               │   ├── VehicleTag.java
    │   │               │   ├── VendingTag.java
    │   │               │   ├── WaterTag.java
    │   │               │   ├── WaterwayTag.java
    │   │               │   ├── WebsiteTag.java
    │   │               │   ├── WetlandTag.java
    │   │               │   ├── WheelchairDescriptionTag.java
    │   │               │   ├── WheelchairTag.java
    │   │               │   ├── WidthTag.java
    │   │               │   ├── WifiTag.java
    │   │               │   ├── WikidataTag.java
    │   │               │   ├── WikipediaTag.java
    │   │               │   ├── WinterRoadTag.java
    │   │               │   ├── ZooTag.java
    │   │               │   ├── annotations/
    │   │               │   │   ├── Tag.java
    │   │               │   │   ├── TagKey.java
    │   │               │   │   ├── TagValue.java
    │   │               │   │   ├── TagValueAs.java
    │   │               │   │   ├── TagValueDeprecated.java
    │   │               │   │   ├── extraction/
    │   │               │   │   │   ├── AltitudeExtractor.java
    │   │               │   │   │   ├── IsoCountryExtractor.java
    │   │               │   │   │   ├── LengthExtractor.java
    │   │               │   │   │   ├── LongExtractor.java
    │   │               │   │   │   ├── NonEmptyStringExtractor.java
    │   │               │   │   │   ├── OrdinalExtractor.java
    │   │               │   │   │   ├── SpeedExtractor.java
    │   │               │   │   │   └── TagExtractor.java
    │   │               │   │   └── validation/
    │   │               │   │       ├── DoubleValidator.java
    │   │               │   │       ├── ExactMatchValidator.java
    │   │               │   │       ├── ISO2CountryValidator.java
    │   │               │   │       ├── ISO3CountryValidator.java
    │   │               │   │       ├── ISOCountryValidator.java
    │   │               │   │       ├── LengthValidator.java
    │   │               │   │       ├── LongValidator.java
    │   │               │   │       ├── NonEmptyStringValidator.java
    │   │               │   │       ├── NoneValidator.java
    │   │               │   │       ├── NumericValidator.java
    │   │               │   │       ├── OrdinalValidator.java
    │   │               │   │       ├── SpeedValidator.java
    │   │               │   │       ├── TagDocumenter.java
    │   │               │   │       ├── TagValidator.java
    │   │               │   │       ├── TimestampValidator.java
    │   │               │   │       ├── URIValidator.java
    │   │               │   │       └── Validators.java
    │   │               │   ├── cache/
    │   │               │   │   ├── CachingValidator.java
    │   │               │   │   └── Tagger.java
    │   │               │   ├── filters/
    │   │               │   │   ├── ConfiguredTaggableFilter.java
    │   │               │   │   ├── LineFilterConverter.java
    │   │               │   │   ├── README.md
    │   │               │   │   ├── RegexTaggableFilter.java
    │   │               │   │   ├── TaggableFilter.java
    │   │               │   │   ├── TaggableFilterToMatcherConverter.java
    │   │               │   │   └── matcher/
    │   │               │   │       ├── ConfiguredTaggableMatcher.java
    │   │               │   │       ├── README.md
    │   │               │   │       ├── TaggableMatcher.java
    │   │               │   │       └── parsing/
    │   │               │   │           ├── Lexer.java
    │   │               │   │           ├── Parser.java
    │   │               │   │           ├── SemanticChecker.java
    │   │               │   │           ├── Token.java
    │   │               │   │           └── tree/
    │   │               │   │               ├── ASTNode.java
    │   │               │   │               ├── AndOperator.java
    │   │               │   │               ├── BangOperator.java
    │   │               │   │               ├── BinaryOperator.java
    │   │               │   │               ├── EqualsOperator.java
    │   │               │   │               ├── LiteralOperand.java
    │   │               │   │               ├── Operand.java
    │   │               │   │               ├── OrOperator.java
    │   │               │   │               ├── RegexOperand.java
    │   │               │   │               ├── TreePrinter.java
    │   │               │   │               ├── UnaryOperator.java
    │   │               │   │               └── XorOperator.java
    │   │               │   ├── names/
    │   │               │   │   ├── AlternativeNameTag.java
    │   │               │   │   ├── BridgeNameTag.java
    │   │               │   │   ├── BulkNameFinder.java
    │   │               │   │   ├── HistoricallyKnownAsTag.java
    │   │               │   │   ├── HistoricallyReferencedAsTag.java
    │   │               │   │   ├── InternationallyKnownAsTag.java
    │   │               │   │   ├── InternationallyReferencedAsTag.java
    │   │               │   │   ├── LocallyKnownAsTag.java
    │   │               │   │   ├── LocallyReferencedAsTag.java
    │   │               │   │   ├── Name1Tag.java
    │   │               │   │   ├── NameFinder.java
    │   │               │   │   ├── NameLeftTag.java
    │   │               │   │   ├── NameRightTag.java
    │   │               │   │   ├── NameTag.java
    │   │               │   │   ├── NationallyKnownAsTag.java
    │   │               │   │   ├── NationallyReferencedAsTag.java
    │   │               │   │   ├── NoNameTag.java
    │   │               │   │   ├── OfficialNameTag.java
    │   │               │   │   ├── OldReferenceTag.java
    │   │               │   │   ├── ReferenceTag.java
    │   │               │   │   ├── RegionallyKnownAsTag.java
    │   │               │   │   ├── RegionallyReferencedAsTag.java
    │   │               │   │   ├── ShortNameTag.java
    │   │               │   │   ├── SortingNameTag.java
    │   │               │   │   └── TunnelNameTag.java
    │   │               │   └── oneway/
    │   │               │       ├── OneWayTag.java
    │   │               │       ├── bicycle/
    │   │               │       │   ├── BicycleOneWayTag.java
    │   │               │       │   ├── CyclewayLeftOneWayTag.java
    │   │               │       │   ├── CyclewayOneWayTag.java
    │   │               │       │   ├── CyclewayRightOneWayTag.java
    │   │               │       │   └── OneWayBicycleTag.java
    │   │               │       └── motor/
    │   │               │           ├── OneWayMotorVehicleTag.java
    │   │               │           ├── OneWayMotorcarTag.java
    │   │               │           └── OneWayVehicleTag.java
    │   │               └── utilities/
    │   │                   ├── README.md
    │   │                   ├── archive/
    │   │                   │   ├── AbstractArchiverOrExtractor.java
    │   │                   │   ├── ArchiveStorageProfileDelegate.java
    │   │                   │   ├── ArchiveVetoDelegate.java
    │   │                   │   ├── Archiver.java
    │   │                   │   ├── ArchiverEventListener.java
    │   │                   │   ├── DefaultZipVetoDelegate.java
    │   │                   │   ├── Extractor.java
    │   │                   │   ├── UnzipperCommand.java
    │   │                   │   └── ZipperCommand.java
    │   │                   ├── arrays/
    │   │                   │   ├── Arrays.java
    │   │                   │   ├── BitArray.java
    │   │                   │   ├── BooleanArray.java
    │   │                   │   ├── ByteArray.java
    │   │                   │   ├── ByteArrayOfArrays.java
    │   │                   │   ├── IntegerArray.java
    │   │                   │   ├── IntegerArrayOfArrays.java
    │   │                   │   ├── LargeArray.java
    │   │                   │   ├── LongArray.java
    │   │                   │   ├── LongArrayOfArrays.java
    │   │                   │   ├── PolyLineArray.java
    │   │                   │   ├── PolygonArray.java
    │   │                   │   ├── PrimitiveArray.java
    │   │                   │   ├── ShortArray.java
    │   │                   │   └── StringArray.java
    │   │                   ├── caching/
    │   │                   │   ├── ConcurrentResourceCache.java
    │   │                   │   ├── LocalFileInMemoryCache.java
    │   │                   │   ├── README.md
    │   │                   │   ├── ResourceCache.java
    │   │                   │   └── strategies/
    │   │                   │       ├── AbstractCachingStrategy.java
    │   │                   │       ├── ByteArrayCachingStrategy.java
    │   │                   │       ├── CachingStrategy.java
    │   │                   │       ├── GlobalNamespaceCachingStrategy.java
    │   │                   │       ├── NamespaceCachingStrategy.java
    │   │                   │       └── NoCachingStrategy.java
    │   │                   ├── checkstyle/
    │   │                   │   ├── ArrangementCheck.java
    │   │                   │   └── README.md
    │   │                   ├── cli/
    │   │                   │   └── operations/
    │   │                   │       ├── AbstractHDFSOperation.java
    │   │                   │       ├── AbstractOperation.java
    │   │                   │       ├── CheckIfFileExistsOperation.java
    │   │                   │       ├── DeepLSOperation.java
    │   │                   │       ├── HDFSCatOperation.java
    │   │                   │       ├── HDFSCheckIfFileExistsOperation.java
    │   │                   │       ├── HDFSCopyOperation.java
    │   │                   │       ├── HDFSLSOperation.java
    │   │                   │       ├── HDFSMkdirOperation.java
    │   │                   │       ├── HDFSPutOperation.java
    │   │                   │       ├── LSOperation.java
    │   │                   │       ├── MkdirOperation.java
    │   │                   │       ├── Operation.java
    │   │                   │       ├── RMDirOperation.java
    │   │                   │       └── base/
    │   │                   │           ├── AvailableSocketFinder.java
    │   │                   │           ├── OperationResults.java
    │   │                   │           ├── RemoteObject.java
    │   │                   │           ├── SCPOperation.java
    │   │                   │           ├── SCPOperationResults.java
    │   │                   │           ├── SSHForwarder.java
    │   │                   │           ├── SSHOperation.java
    │   │                   │           └── SSHOperationResults.java
    │   │                   ├── collections/
    │   │                   │   ├── EnhancedCollectors.java
    │   │                   │   ├── EnumSetCollector.java
    │   │                   │   ├── FilteredIterable.java
    │   │                   │   ├── FixedSizePriorityQueue.java
    │   │                   │   ├── ImmutableListCollector.java
    │   │                   │   ├── Iterables.java
    │   │                   │   ├── JoinedCollection.java
    │   │                   │   ├── Maps.java
    │   │                   │   ├── MultiIterable.java
    │   │                   │   ├── OptionalIterable.java
    │   │                   │   ├── ParallelIterable.java
    │   │                   │   ├── Sets.java
    │   │                   │   ├── ShardBucketCollection.java
    │   │                   │   ├── StreamIterable.java
    │   │                   │   ├── StringList.java
    │   │                   │   ├── SubIterable.java
    │   │                   │   ├── UnmodifiableSortedMapCollector.java
    │   │                   │   └── UnmodifiableSortedSetCollector.java
    │   │                   ├── command/
    │   │                   │   ├── ActiveModuleIndexWriter.java
    │   │                   │   ├── AtlasShellToolsException.java
    │   │                   │   ├── ReflectionUtilities.java
    │   │                   │   ├── abstractcommand/
    │   │                   │   │   ├── AbstractAtlasShellToolsCommand.java
    │   │                   │   │   ├── AtlasShellToolsCommandTemplate.java
    │   │                   │   │   ├── AtlasShellToolsMarkerInterface.java
    │   │                   │   │   ├── CommandOutputDelegate.java
    │   │                   │   │   └── OptionAndArgumentDelegate.java
    │   │                   │   ├── documentation/
    │   │                   │   │   ├── DocumentationFormatType.java
    │   │                   │   │   ├── DocumentationFormatter.java
    │   │                   │   │   ├── DocumentationRegistrar.java
    │   │                   │   │   └── PagerHelper.java
    │   │                   │   ├── parsing/
    │   │                   │   │   ├── ArgumentArity.java
    │   │                   │   │   ├── ArgumentOptionality.java
    │   │                   │   │   ├── OptionArgumentType.java
    │   │                   │   │   ├── OptionOptionality.java
    │   │                   │   │   ├── SimpleOptionAndArgumentParser.java
    │   │                   │   │   └── exceptions/
    │   │                   │   │       ├── AmbiguousAbbreviationException.java
    │   │                   │   │       ├── ArgumentException.java
    │   │                   │   │       ├── OptionParseException.java
    │   │                   │   │       ├── UnknownOptionException.java
    │   │                   │   │       └── UnparsableContextException.java
    │   │                   │   ├── subcommands/
    │   │                   │   │   ├── AnyToGeoJsonCommand.java
    │   │                   │   │   ├── AtlasDiffCommand.java
    │   │                   │   │   ├── AtlasMetadataReaderCommand.java
    │   │                   │   │   ├── AtlasSearchCommand.java
    │   │                   │   │   ├── AtlasShardingConverterCommand.java
    │   │                   │   │   ├── AtlasShellToolsDemoCommand.java
    │   │                   │   │   ├── ConcatenateAtlasCommand.java
    │   │                   │   │   ├── CountryBoundaryMapPrinterCommand.java
    │   │                   │   │   ├── CountryShardToBoundsCommand.java
    │   │                   │   │   ├── HelloWorldCommand.java
    │   │                   │   │   ├── IsoCountryCodeCommand.java
    │   │                   │   │   ├── JavaToProtoSerializationCommand.java
    │   │                   │   │   ├── OsmFileParserCommand.java
    │   │                   │   │   ├── OsmToAtlasCommand.java
    │   │                   │   │   ├── PackedToTextAtlasCommand.java
    │   │                   │   │   ├── PbfToAtlasCommand.java
    │   │                   │   │   ├── SubAtlasCommand.java
    │   │                   │   │   ├── TaggableMatcherPrinterCommand.java
    │   │                   │   │   ├── TemplateTestCommand.java
    │   │                   │   │   ├── WKTShardCommand.java
    │   │                   │   │   └── templates/
    │   │                   │   │       ├── AtlasLoaderCommand.java
    │   │                   │   │       ├── AtlasLoaderTemplate.java
    │   │                   │   │       ├── CountryBoundaryMapTemplate.java
    │   │                   │   │       ├── ListOfNumbersTemplate.java
    │   │                   │   │       ├── MultipleOutputCommand.java
    │   │                   │   │       ├── OutputDirectoryTemplate.java
    │   │                   │   │       ├── PredicateTemplate.java
    │   │                   │   │       └── ShardingTemplate.java
    │   │                   │   └── terminal/
    │   │                   │       ├── TTYAttribute.java
    │   │                   │       └── TTYStringBuilder.java
    │   │                   ├── compression/
    │   │                   │   ├── IntegerDictionary.java
    │   │                   │   └── LongDictionary.java
    │   │                   ├── configuration/
    │   │                   │   ├── Configurable.java
    │   │                   │   ├── Configuration.java
    │   │                   │   ├── ConfigurationDeserializer.java
    │   │                   │   ├── ConfigurationReader.java
    │   │                   │   ├── ConfiguredFilter.java
    │   │                   │   ├── MergedConfiguration.java
    │   │                   │   └── StandardConfiguration.java
    │   │                   ├── conversion/
    │   │                   │   ├── Converter.java
    │   │                   │   ├── HexStringByteArrayConverter.java
    │   │                   │   ├── StringConverter.java
    │   │                   │   ├── StringToPredicateConverter.java
    │   │                   │   ├── TagConverter.java
    │   │                   │   ├── TwoWayConverter.java
    │   │                   │   └── TwoWayStringConverter.java
    │   │                   ├── direction/
    │   │                   │   └── EdgeDirectionComparator.java
    │   │                   ├── filters/
    │   │                   │   ├── AtlasEntityPolygonsFilter.java
    │   │                   │   └── IntersectionPolicy.java
    │   │                   ├── function/
    │   │                   │   ├── QuaternaryFunction.java
    │   │                   │   ├── QuaternaryOperator.java
    │   │                   │   ├── SenaryFunction.java
    │   │                   │   ├── SenaryOperator.java
    │   │                   │   ├── TernaryConsumer.java
    │   │                   │   ├── TernaryFunction.java
    │   │                   │   └── TernaryOperator.java
    │   │                   ├── graphs/
    │   │                   │   └── DirectedAcyclicGraph.java
    │   │                   ├── http/
    │   │                   │   └── rest/
    │   │                   │       ├── DislikedResponseCodeException.java
    │   │                   │       └── HttpResultHandler.java
    │   │                   ├── identifiers/
    │   │                   │   └── EntityIdentifierGenerator.java
    │   │                   ├── jsoncompare/
    │   │                   │   ├── RegularExpressionJSONComparator.java
    │   │                   │   └── RegularExpressionJSONCompareResult.java
    │   │                   ├── maps/
    │   │                   │   ├── IntegerToIntegerMap.java
    │   │                   │   ├── LargeMap.java
    │   │                   │   ├── LinkedMultiMap.java
    │   │                   │   ├── LongToBooleanMap.java
    │   │                   │   ├── LongToIntegerMap.java
    │   │                   │   ├── LongToIntegerMultiMap.java
    │   │                   │   ├── LongToLongMap.java
    │   │                   │   ├── LongToLongMultiMap.java
    │   │                   │   ├── MultiMap.java
    │   │                   │   └── MultiMapWithSet.java
    │   │                   ├── matching/
    │   │                   │   └── NameMatcher.java
    │   │                   ├── random/
    │   │                   │   ├── RandomTagsSupplier.java
    │   │                   │   └── RandomTextGenerator.java
    │   │                   ├── regex/
    │   │                   │   └── RegexUtils.java
    │   │                   ├── runtime/
    │   │                   │   ├── BoundedPipeBuffer.java
    │   │                   │   ├── ClassPathTree.java
    │   │                   │   ├── Command.java
    │   │                   │   ├── CommandMap.java
    │   │                   │   ├── FlexibleCommand.java
    │   │                   │   ├── FlexibleSubCommand.java
    │   │                   │   ├── OpenPipeBuffer.java
    │   │                   │   ├── PipeBuffer.java
    │   │                   │   ├── Retry.java
    │   │                   │   ├── RunScript.java
    │   │                   │   ├── RunScriptMonitor.java
    │   │                   │   ├── SingleLineMonitor.java
    │   │                   │   ├── TimedRetry.java
    │   │                   │   └── system/
    │   │                   │       ├── SystemInfo.java
    │   │                   │       └── memory/
    │   │                   │           └── Memory.java
    │   │                   ├── scalars/
    │   │                   │   ├── Angle.java
    │   │                   │   ├── Counter.java
    │   │                   │   ├── Distance.java
    │   │                   │   ├── DoubleCounter.java
    │   │                   │   ├── Duration.java
    │   │                   │   ├── README.md
    │   │                   │   ├── Ratio.java
    │   │                   │   ├── Speed.java
    │   │                   │   └── Surface.java
    │   │                   ├── statistic/
    │   │                   │   ├── AbstractStatistic.java
    │   │                   │   ├── Statistic.java
    │   │                   │   ├── StatisticUtils.java
    │   │                   │   └── storeless/
    │   │                   │       ├── CounterWithStatistic.java
    │   │                   │       ├── CustomizedStatistic.java
    │   │                   │       └── StatisticType.java
    │   │                   ├── testing/
    │   │                   │   ├── Bean.java
    │   │                   │   ├── BeanHandler.java
    │   │                   │   ├── CoreTestRule.java
    │   │                   │   ├── CreationContext.java
    │   │                   │   ├── FeatureIDGenerator.java
    │   │                   │   ├── FieldHandler.java
    │   │                   │   ├── FreezeDryFunction.java
    │   │                   │   ├── OsmFileParser.java
    │   │                   │   ├── OsmFileToPbf.java
    │   │                   │   ├── OsmosisXmlReaderFromResource.java
    │   │                   │   ├── TestAtlas.java
    │   │                   │   ├── TestAtlasHandler.java
    │   │                   │   └── TestTaggable.java
    │   │                   ├── threads/
    │   │                   │   ├── CustomNamesThreadPoolFactory.java
    │   │                   │   ├── LogTicker.java
    │   │                   │   ├── Pool.java
    │   │                   │   ├── Result.java
    │   │                   │   └── Ticker.java
    │   │                   ├── time/
    │   │                   │   ├── LocalTime.java
    │   │                   │   └── Time.java
    │   │                   ├── timezone/
    │   │                   │   ├── TimeZoneBoundary.java
    │   │                   │   └── TimeZoneMap.java
    │   │                   ├── tuples/
    │   │                   │   ├── Either.java
    │   │                   │   └── Tuple.java
    │   │                   ├── unicode/
    │   │                   │   ├── AbstractClassifier.java
    │   │                   │   ├── Classification.java
    │   │                   │   ├── Classifier.java
    │   │                   │   └── LoadingClassifier.java
    │   │                   └── vectortiles/
    │   │                       ├── MinimumZoom.java
    │   │                       ├── README.md
    │   │                       ├── TippecanoeCommands.java
    │   │                       ├── TippecanoeConverter.java
    │   │                       ├── TippecanoeExporter.java
    │   │                       ├── TippecanoeGeoJsonExtension.java
    │   │                       └── TippecanoeSettings.java
    │   ├── proto/
    │   │   ├── Area.proto
    │   │   ├── Edge.proto
    │   │   ├── Line.proto
    │   │   ├── Location.proto
    │   │   ├── Node.proto
    │   │   ├── Point.proto
    │   │   ├── ProtoAtlas.proto
    │   │   ├── ProtoAtlasMetaData.proto
    │   │   ├── ProtoByteArray.proto
    │   │   ├── ProtoByteArrayOfArrays.proto
    │   │   ├── ProtoIntegerArray.proto
    │   │   ├── ProtoIntegerArrayOfArrays.proto
    │   │   ├── ProtoIntegerStringDictionary.proto
    │   │   ├── ProtoLongArray.proto
    │   │   ├── ProtoLongArrayOfArrays.proto
    │   │   ├── ProtoLongToLongMap.proto
    │   │   ├── ProtoLongToLongMultiMap.proto
    │   │   ├── ProtoPackedTagStore.proto
    │   │   ├── ProtoPolyLineArray.proto
    │   │   ├── ProtoPolygonArray.proto
    │   │   ├── Relation.proto
    │   │   └── Tag.proto
    │   └── resources/
    │       └── org/
    │           └── openstreetmap/
    │               └── atlas/
    │                   ├── atlas.json
    │                   ├── geography/
    │                   │   └── atlas/
    │                   │       ├── items/
    │                   │       │   └── complex/
    │                   │       │       ├── aoi/
    │                   │       │       │   └── aoi-tag-filter.json
    │                   │       │       ├── islands/
    │                   │       │       │   └── islands.json
    │                   │       │       ├── landcover/
    │                   │       │       │   └── land-cover-tag-filter.json
    │                   │       │       └── water/
    │                   │       │           └── finder/
    │                   │       │               ├── canal.json
    │                   │       │               ├── creek.json
    │                   │       │               ├── ditch.json
    │                   │       │               ├── harbour.json
    │                   │       │               ├── lagoon.json
    │                   │       │               ├── lake.json
    │                   │       │               ├── pond.json
    │                   │       │               ├── pool.json
    │                   │       │               ├── reservoir.json
    │                   │       │               ├── river.json
    │                   │       │               └── wetland.json
    │                   │       ├── pbf/
    │                   │       │   ├── atlas-area.json
    │                   │       │   ├── atlas-edge.json
    │                   │       │   ├── atlas-relation-slicing.json
    │                   │       │   ├── atlas-way-section.json
    │                   │       │   ├── osm-pbf-node.json
    │                   │       │   ├── osm-pbf-relation.json
    │                   │       │   └── osm-pbf-way.json
    │                   │       └── statistics/
    │                   │           └── coverage/
    │                   │               └── poi/
    │                   │                   ├── counts.txt
    │                   │                   └── countsOne.txt
    │                   ├── tags/
    │                   │   └── annotations/
    │                   │       └── implicit-speed-values.json
    │                   └── utilities/
    │                       ├── checkstyle/
    │                       │   └── arrangement.txt
    │                       ├── command/
    │                       │   └── subcommands/
    │                       │       ├── AnyToGeoJsonCommandDescriptionSection.txt
    │                       │       ├── AnyToGeoJsonCommandExamplesSection.txt
    │                       │       ├── AtlasDiffCommandDescriptionSection.txt
    │                       │       ├── AtlasDiffCommandExamplesSection.txt
    │                       │       ├── AtlasMetadataReaderCommandDescriptionSection.txt
    │                       │       ├── AtlasMetadataReaderCommandExamplesSection.txt
    │                       │       ├── AtlasSearchCommandDescriptionSection.txt
    │                       │       ├── AtlasSearchCommandExamplesSection.txt
    │                       │       ├── AtlasShardingConverterCommandDescriptionSection.txt
    │                       │       ├── AtlasShardingConverterCommandExamplesSection.txt
    │                       │       ├── AtlasShellToolsDemoCommandDescriptionSection.txt
    │                       │       ├── AtlasShellToolsDemoCommandExamplesSection.txt
    │                       │       ├── ConcatenateAtlasCommandDescriptionSection.txt
    │                       │       ├── ConcatenateAtlasCommandExamplesSection.txt
    │                       │       ├── CountryBoundaryMapPrinterCommandDescriptionSection.txt
    │                       │       ├── CountryBoundaryMapPrinterCommandExamplesSection.txt
    │                       │       ├── CountryShardToBoundsCommandDescriptionSection.txt
    │                       │       ├── CountryShardToBoundsCommandExamplesSection.txt
    │                       │       ├── HelloWorldCommandDescriptionSection.txt
    │                       │       ├── IsoCountryCodeCommandDescriptionSection.txt
    │                       │       ├── IsoCountryCodeCommandExamplesSection.txt
    │                       │       ├── JavaToProtoSerializationCommandDescriptionSection.txt
    │                       │       ├── JavaToProtoSerializationCommandExamplesSection.txt
    │                       │       ├── OsmFileParserCommandDescriptionSection.txt
    │                       │       ├── OsmFileParserCommandExamplesSection.txt
    │                       │       ├── OsmToAtlasCommandDescriptionSection.txt
    │                       │       ├── OsmToAtlasCommandExamplesSection.txt
    │                       │       ├── PackedToTextAtlasCommandDescriptionSection.txt
    │                       │       ├── PackedToTextAtlasCommandExamplesSection.txt
    │                       │       ├── PbfToAtlasCommandExamplesSection.txt
    │                       │       ├── PbfToAtlasDescriptionSection.txt
    │                       │       ├── SubAtlasCommandDescriptionSection.txt
    │                       │       ├── SubAtlasCommandExamplesSection.txt
    │                       │       ├── TaggableMatcherPrinterCommandDescriptionSection.txt
    │                       │       ├── TaggableMatcherPrinterCommandExamplesSection.txt
    │                       │       ├── WKTShardCommandDescriptionSection.txt
    │                       │       ├── WKTShardCommandExamplesSection.txt
    │                       │       └── templates/
    │                       │           ├── AtlasLoaderCommandSection.txt
    │                       │           ├── AtlasLoaderTemplateSection.txt
    │                       │           ├── CountryBoundaryMapTemplateSection.txt
    │                       │           ├── MultipleOutputCommandSection.txt
    │                       │           ├── OutputDirectoryTemplateSection.txt
    │                       │           ├── PredicateTemplateSection.txt
    │                       │           └── ShardingTemplateSection.txt
    │                       ├── random/
    │                       │   └── dictionary.txt
    │                       ├── timezone/
    │                       │   ├── index.html
    │                       │   ├── tz_world.dbf
    │                       │   ├── tz_world.prj
    │                       │   ├── tz_world.qix
    │                       │   ├── tz_world.shp
    │                       │   └── tz_world.shx
    │                       ├── unicode/
    │                       │   └── unicode.defaults
    │                       └── vectortiles/
    │                           └── minimum-zooms.json
    └── test/
        ├── groovy/
        │   └── org/
        │       └── openstreetmap/
        │           └── atlas/
        │               └── geography/
        │                   └── converters/
        │                       └── jts/
        │                           └── JtsPolyLineConverterTest.java
        ├── java/
        │   └── org/
        │       └── openstreetmap/
        │           └── atlas/
        │               ├── event/
        │               │   ├── EventBusTest.java
        │               │   ├── EventServiceTest.java
        │               │   ├── TestEvent.java
        │               │   └── TestProcessor.java
        │               ├── exception/
        │               │   ├── CoreExceptionTest.java
        │               │   └── change/
        │               │       └── FeatureChangeMergeExceptionTest.java
        │               ├── geography/
        │               │   ├── AltitudeTest.java
        │               │   ├── CompressedPolyLineTest.java
        │               │   ├── HeadingTest.java
        │               │   ├── LatitudeTest.java
        │               │   ├── LocationTest.java
        │               │   ├── LongitudeTest.java
        │               │   ├── MultiPolyLineTest.java
        │               │   ├── MultiPolygonTest.java
        │               │   ├── PolyLineCoveringPolygonTest.java
        │               │   ├── PolyLineCoveringPolygonTestRule.java
        │               │   ├── PolyLineTest.java
        │               │   ├── PolygonCoveringPolygonTest.java
        │               │   ├── PolygonCoveringPolygonTestRule.java
        │               │   ├── PolygonTest.java
        │               │   ├── PolygonTestRule.java
        │               │   ├── RectangleTest.java
        │               │   ├── SegmentTest.java
        │               │   ├── SelfIntersectingPolyLineTestCase.java
        │               │   ├── SnapperTest.java
        │               │   ├── StringCompressedPolyLineTest.java
        │               │   ├── atlas/
        │               │   │   ├── AtlasResourceLoaderTest.java
        │               │   │   ├── AtlasTest.java
        │               │   │   ├── AtlasTestRule.java
        │               │   │   ├── BareAtlasTest.java
        │               │   │   ├── BareAtlasTestRule.java
        │               │   │   ├── IsAtlasTestCase.java
        │               │   │   ├── ShardFileOverlapsPolygonTest.java
        │               │   │   ├── SubAtlasRule.java
        │               │   │   ├── SubAtlasTest.java
        │               │   │   ├── builder/
        │               │   │   │   ├── GeoJsonAtlasBuilderTest.java
        │               │   │   │   ├── PackedAtlasBuilderTest.java
        │               │   │   │   ├── store/
        │               │   │   │   │   ├── AtlasPrimitiveObjectStoreTest.java
        │               │   │   │   │   └── AtlasPrimitiveRouteTest.java
        │               │   │   │   └── text/
        │               │   │   │       └── TextAtlasBuilderTest.java
        │               │   │   ├── change/
        │               │   │   │   ├── AbstractChangeTest.java
        │               │   │   │   ├── AtlasChangeGeneratorTest.java
        │               │   │   │   ├── AtlasChangeGeneratorTestRule.java
        │               │   │   │   ├── CascadeDeleteTest.java
        │               │   │   │   ├── CascadeDeleteTestHelper.java
        │               │   │   │   ├── CascadeDeleteTestRule.java
        │               │   │   │   ├── ChangeAtlasTest.java
        │               │   │   │   ├── ChangeAtlasTestRule.java
        │               │   │   │   ├── ChangeBuilderTest.java
        │               │   │   │   ├── ChangeMergeTest.java
        │               │   │   │   ├── ChangeTest.java
        │               │   │   │   ├── FeatureChangeMergerTest.java
        │               │   │   │   ├── FeatureChangeTest.java
        │               │   │   │   ├── FeatureChangeUnitTestFactory.java
        │               │   │   │   ├── MemberMergeStrategiesTest.java
        │               │   │   │   ├── MultiCascadeDeleteTest.java
        │               │   │   │   ├── MultiCascadeDeleteTestRule.java
        │               │   │   │   ├── MultipleChangeAtlasTest.java
        │               │   │   │   ├── MultipleChangeAtlasTestRule.java
        │               │   │   │   ├── TagChangeTest.java
        │               │   │   │   ├── TagChangeTestRule.java
        │               │   │   │   ├── description/
        │               │   │   │   │   └── descriptors/
        │               │   │   │   │       └── ChangeDescriptorComparatorTest.java
        │               │   │   │   ├── diff/
        │               │   │   │   │   ├── AtlasDiffTest.java
        │               │   │   │   │   └── AtlasDiffTestRule.java
        │               │   │   │   ├── eventhandling/
        │               │   │   │   │   └── listener/
        │               │   │   │   │       ├── TagChangeListenerTest.java
        │               │   │   │   │       └── TestTagChangeListenerImplementation.java
        │               │   │   │   ├── exception/
        │               │   │   │   │   └── EmptyChangeExceptionTest.java
        │               │   │   │   ├── serializer/
        │               │   │   │   │   ├── ChangeGeoJsonSerializerTest.java
        │               │   │   │   │   ├── FeatureChangeGeoJsonSerializerTest.java
        │               │   │   │   │   └── FeatureChangeGeoJsonSerializerTestRule.java
        │               │   │   │   └── validators/
        │               │   │   │       └── ChangeValidatorTest.java
        │               │   │   ├── changeset/
        │               │   │   │   └── BinaryChangeSetSerializerTest.java
        │               │   │   ├── command/
        │               │   │   │   ├── AtlasFeatureCountsSubCommandTestCase.java
        │               │   │   │   ├── AtlasFeatureCountsSubCommandTestCaseRule.java
        │               │   │   │   ├── AtlasFindByAtlasIdentifierSubCommandTest.java
        │               │   │   │   ├── AtlasJoinerSubCommandTest.java
        │               │   │   │   ├── AtlasSplitterWithSlippyTileCommandTest.java
        │               │   │   │   ├── CaptureOutputStream.java
        │               │   │   │   ├── ComplexBuildingsTestRule.java
        │               │   │   │   ├── OsmPbfToAtlasSubCommandTest.java
        │               │   │   │   └── TinyBuildingsSearchSubCommandTest.java
        │               │   │   ├── complete/
        │               │   │   │   ├── CompleteAreaTest.java
        │               │   │   │   ├── CompleteEdgeTest.java
        │               │   │   │   ├── CompleteEntityTest.java
        │               │   │   │   ├── CompleteItemTypeTest.java
        │               │   │   │   ├── CompleteItemTypeTestRule.java
        │               │   │   │   ├── CompleteLineTest.java
        │               │   │   │   ├── CompleteNodeTest.java
        │               │   │   │   ├── CompletePointTest.java
        │               │   │   │   ├── CompleteRelationTest.java
        │               │   │   │   ├── CompleteTestRule.java
        │               │   │   │   └── EmptyAtlasTest.java
        │               │   │   ├── delta/
        │               │   │   │   ├── AtlasDeltaAreaTest.java
        │               │   │   │   ├── AtlasDeltaEdgeTest.java
        │               │   │   │   ├── AtlasDeltaLineTest.java
        │               │   │   │   ├── AtlasDeltaNodeTest.java
        │               │   │   │   ├── AtlasDeltaPointTest.java
        │               │   │   │   ├── AtlasDeltaRelationTest.java
        │               │   │   │   ├── AtlasDeltaRelationsTest.java
        │               │   │   │   └── AtlasDeltaTagTest.java
        │               │   │   ├── dynamic/
        │               │   │   │   ├── DynamicAtlasAggressiveRelationsTest.java
        │               │   │   │   ├── DynamicAtlasFilteredEntitiesTest.java
        │               │   │   │   ├── DynamicAtlasMovingTooFastTest.java
        │               │   │   │   ├── DynamicAtlasMultipleInitialShardTest.java
        │               │   │   │   ├── DynamicAtlasPartialInitialShardsTest.java
        │               │   │   │   ├── DynamicAtlasPreemptiveLoadTest.java
        │               │   │   │   ├── DynamicAtlasRestrainedExpansionWithPolygonTest.java
        │               │   │   │   ├── DynamicAtlasTest.java
        │               │   │   │   └── rules/
        │               │   │   │       ├── DynamicAtlasAggressiveRelationsTestRule.java
        │               │   │   │       ├── DynamicAtlasMovingTooFastTestRule.java
        │               │   │   │       ├── DynamicAtlasPartialInitialShardsTestRule.java
        │               │   │   │       ├── DynamicAtlasPreemptiveLoadTestRule.java
        │               │   │   │       ├── DynamicAtlasRestrainedExpansionWithPolygonTestRule.java
        │               │   │   │       └── DynamicAtlasTestRule.java
        │               │   │   ├── items/
        │               │   │   │   ├── AreaEntityTestRule.java
        │               │   │   │   ├── AreaTest.java
        │               │   │   │   ├── AreaTestRule.java
        │               │   │   │   ├── AtlasEntityTest.java
        │               │   │   │   ├── AtlasItemIntersectionTest.java
        │               │   │   │   ├── AtlasItemIntersectionTestRule.java
        │               │   │   │   ├── EdgeTest.java
        │               │   │   │   ├── EdgeTestRule.java
        │               │   │   │   ├── ItemTypeTest.java
        │               │   │   │   ├── LineItemTest.java
        │               │   │   │   ├── LineItemTestRule.java
        │               │   │   │   ├── LoopingRelationTest.java
        │               │   │   │   ├── LoopingRelationTestRule.java
        │               │   │   │   ├── RelationBeanTest.java
        │               │   │   │   ├── RelationBeanTestRule.java
        │               │   │   │   ├── RelationFlatteningRule.java
        │               │   │   │   ├── RelationFlatteningTest.java
        │               │   │   │   ├── RelationMemberComparisonTestCase.java
        │               │   │   │   ├── RelationMemberComparisonTestCaseRule.java
        │               │   │   │   ├── RelationMemberListTest.java
        │               │   │   │   ├── RouteTest.java
        │               │   │   │   ├── RouteTestRule.java
        │               │   │   │   ├── SnappedLineItemTest.java
        │               │   │   │   ├── SnappedLineItemTestRule.java
        │               │   │   │   ├── WithinTest.java
        │               │   │   │   ├── WithinTestRule.java
        │               │   │   │   └── complex/
        │               │   │   │       ├── RelationOrAreaToMultiPolygonConverterTest.java
        │               │   │   │       ├── RelationOrAreaToMultiPolygonConverterTestRule.java
        │               │   │   │       ├── RelationToMultiPolygonMemberConverterTest.java
        │               │   │   │       ├── aoi/
        │               │   │   │       │   ├── ComplexAreaOfInterestFinderTest.java
        │               │   │   │       │   └── ComplexAreaOfInterestFinderTestRule.java
        │               │   │   │       ├── bignode/
        │               │   │   │       │   ├── BigNodeFinderTest.java
        │               │   │   │       │   └── BigNodeFinderTestCaseRule.java
        │               │   │   │       ├── boundaries/
        │               │   │   │       │   ├── ComplexBoundaryTest.java
        │               │   │   │       │   └── ComplexBoundaryTestRule.java
        │               │   │   │       ├── buildings/
        │               │   │   │       │   ├── AtlasComplexBuildingTestCase.java
        │               │   │   │       │   ├── AtlasComplexBuildingTestCaseRule.java
        │               │   │   │       │   ├── BuildingHeightTestCase.java
        │               │   │   │       │   ├── BuildingHeightTestCaseRule.java
        │               │   │   │       │   ├── BuildingLevelsTestCase.java
        │               │   │   │       │   ├── BuildingLevelsTestCaseRule.java
        │               │   │   │       │   ├── BuildingsContainsOsmIdentifierTestCase.java
        │               │   │   │       │   ├── BuildingsContainsOsmIdentifierTestCaseRule.java
        │               │   │   │       │   └── HeightConverterTest.java
        │               │   │   │       ├── highwayarea/
        │               │   │   │       │   ├── ComplexHighwayAreaTestCase.java
        │               │   │   │       │   ├── ComplexHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── OutOfOrderEdgesHighwayAreaTestCase.java
        │               │   │   │       │   ├── OutOfOrderEdgesHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── SelfIntersectingHighwayAreaTestCase.java
        │               │   │   │       │   ├── SelfIntersectingHighwayAreaTestCaseRule.java
        │               │   │   │       │   ├── ZeroSizeHighwayAreaTestCase.java
        │               │   │   │       │   └── ZeroSizeHighwayAreaTestCaseRule.java
        │               │   │   │       ├── islands/
        │               │   │   │       │   ├── ComplexIslandFinderTest.java
        │               │   │   │       │   └── ComplexIslandFinderTestRule.java
        │               │   │   │       ├── landcover/
        │               │   │   │       │   ├── ComplexLandCoverFinderTest.java
        │               │   │   │       │   └── ComplexLandCoverFinderTestRule.java
        │               │   │   │       ├── restriction/
        │               │   │   │       │   ├── ComplexTurnRestrictionTest.java
        │               │   │   │       │   └── ComplexTurnRestrictionTestCaseRule.java
        │               │   │   │       ├── roundabout/
        │               │   │   │       │   ├── ComplexRoundaboutTest.java
        │               │   │   │       │   └── ComplexRoundaboutTestRule.java
        │               │   │   │       └── water/
        │               │   │   │           ├── AbstractWaterIslandTest.java
        │               │   │   │           ├── ComplexHarborTestRule.java
        │               │   │   │           ├── ComplexHarbourTest.java
        │               │   │   │           ├── ComplexWaterEntityTest.java
        │               │   │   │           ├── ComplexWaterWayTest.java
        │               │   │   │           └── ComplexWaterWayTestRule.java
        │               │   │   ├── lightweight/
        │               │   │   │   ├── LightAreaTest.java
        │               │   │   │   ├── LightEdgeTest.java
        │               │   │   │   ├── LightLineTest.java
        │               │   │   │   ├── LightNodeTest.java
        │               │   │   │   ├── LightPointTest.java
        │               │   │   │   ├── LightRelationTest.java
        │               │   │   │   └── LightweightTestAtlasRule.java
        │               │   │   ├── multi/
        │               │   │   │   ├── MissingMultiEntityRelationTest.java
        │               │   │   │   ├── MultiAtlasOverlappingNodesFixerTest.java
        │               │   │   │   ├── MultiAtlasOverlappingNodesFixerTestRule.java
        │               │   │   │   ├── MultiAtlasTest.java
        │               │   │   │   └── MultiAtlasTestRule.java
        │               │   │   ├── packed/
        │               │   │   │   ├── PackedAtlasClonerTest.java
        │               │   │   │   ├── PackedAtlasSerializerTest.java
        │               │   │   │   ├── PackedAtlasTest.java
        │               │   │   │   ├── PackedAtlasTestRule.java
        │               │   │   │   ├── PackedRelationTest.java
        │               │   │   │   ├── PackedRelationTestCaseRule.java
        │               │   │   │   ├── RandomPackedAtlasBuilder.java
        │               │   │   │   └── RelationMultipolygonGeometryTest.java
        │               │   │   ├── pbf/
        │               │   │   │   ├── BridgeConfiguredFilterTest.java
        │               │   │   │   ├── OsmPbfIngestTest.java
        │               │   │   │   ├── OsmPbfNodeToAtlasItemTest.java
        │               │   │   │   ├── OsmPbfNodeToAtlasItemTestRule.java
        │               │   │   │   ├── OsmPbfWayToAtlasEdgeTranslationTest.java
        │               │   │   │   ├── OsmPbfWayToAtlasEdgeTranslationTestRule.java
        │               │   │   │   ├── OsmosisReaderMock.java
        │               │   │   │   ├── converters/
        │               │   │   │   │   ├── AtlasPrimitiveAreaToOsmosisWayConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveLineItemToOsmosisWayConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveLocationItemToOsmosisNodeConverter.java
        │               │   │   │   │   ├── AtlasPrimitiveRelationToOsmosisRelationConverter.java
        │               │   │   │   │   ├── ItemTypeToEntityTypeConverter.java
        │               │   │   │   │   ├── LocationIterableToWayNodeListConverter.java
        │               │   │   │   │   └── LocationToOsmosisNodeConverter.java
        │               │   │   │   ├── slicing/
        │               │   │   │   │   └── identifier/
        │               │   │   │   │       └── ReverseIdentifierFactoryTest.java
        │               │   │   │   └── store/
        │               │   │   │       └── PbfOneWayTest.java
        │               │   │   ├── raw/
        │               │   │   │   ├── RawAtlasTest.java
        │               │   │   │   ├── creation/
        │               │   │   │   │   └── RawAtlasGeneratorTest.java
        │               │   │   │   ├── sectioning/
        │               │   │   │   │   ├── AtlasSectionProcessorTest.java
        │               │   │   │   │   └── WaySectionProcessorTestRule.java
        │               │   │   │   └── slicing/
        │               │   │   │       ├── RawAtlasSlicerTest.java
        │               │   │   │       └── RawAtlasSlicerTestRule.java
        │               │   │   ├── routing/
        │               │   │   │   ├── AStarRouterTest.java
        │               │   │   │   ├── AStarRouterTestRule.java
        │               │   │   │   ├── AllPathsRouterTest.java
        │               │   │   │   └── RoutingTestRule.java
        │               │   │   ├── statistics/
        │               │   │   │   ├── AtlasStatisticsTest.java
        │               │   │   │   ├── AtlasStatisticsTestRule.java
        │               │   │   │   ├── CounterTest.java
        │               │   │   │   └── coverage/
        │               │   │   │       └── poi/
        │               │   │   │           ├── CountCoverageTest.java
        │               │   │   │           └── CountCoverageTestCaseRule.java
        │               │   │   ├── validators/
        │               │   │   │   ├── AtlasEdgeValidatorTest.java
        │               │   │   │   ├── AtlasLineItemValidatorTest.java
        │               │   │   │   ├── AtlasLocationItemValidatorTest.java
        │               │   │   │   ├── AtlasNodeValidatorTest.java
        │               │   │   │   ├── AtlasRelationValidatorTest.java
        │               │   │   │   └── AtlasValidatorTest.java
        │               │   │   └── walker/
        │               │   │       ├── OsmWayWalkerTest.java
        │               │   │       ├── OsmWayWalkerTestRule.java
        │               │   │       ├── SimpleEdgeWalkerTest.java
        │               │   │       └── SimpleEdgeWalkerTestRule.java
        │               │   ├── boundary/
        │               │   │   ├── CountryBoundaryMapTest.java
        │               │   │   ├── CountryShardListingTest.java
        │               │   │   ├── CountryToShardListCacheTest.java
        │               │   │   └── converters/
        │               │   │       └── CountryBoundaryMapGeoJsonConverterTest.java
        │               │   ├── clipping/
        │               │   │   ├── GeometryOperationTest.java
        │               │   │   ├── MultiPolygonClipperTest.java
        │               │   │   └── PolygonClipperTest.java
        │               │   ├── converters/
        │               │   │   ├── GeodeticEarthCenteredEarthFixedConverterTest.java
        │               │   │   ├── MultiPolygonStringConverterTest.java
        │               │   │   ├── MultiplePolyLineToMultiPolygonConverterTest.java
        │               │   │   ├── MultiplePolyLineToPolygonsConverterCommandTest.java
        │               │   │   ├── MultiplePolyLineToPolygonsConverterTest.java
        │               │   │   ├── SlippyTileConverterTest.java
        │               │   │   ├── WkbMultiPolygonConverterTest.java
        │               │   │   ├── WkbPolyLineConverterTest.java
        │               │   │   ├── WkbPolygonConverterTest.java
        │               │   │   ├── WktMultiPolygonConverterTest.java
        │               │   │   └── WktPolygonConverterTest.java
        │               │   ├── coordinates/
        │               │   │   └── CoordinatesTest.java
        │               │   ├── geojson/
        │               │   │   ├── ConcatenateGeoJsonCommandTest.java
        │               │   │   ├── GeoJsonBuilderTest.java
        │               │   │   ├── GeoJsonUtilsTest.java
        │               │   │   └── parser/
        │               │   │       ├── domain/
        │               │   │       │   ├── bbox/
        │               │   │       │   │   └── DimensionsTest.java
        │               │   │       │   └── geometry/
        │               │   │       │       └── coordinate/
        │               │   │       │           └── CoordinatesTest.java
        │               │   │       ├── impl/
        │               │   │       │   └── jackson/
        │               │   │       │       ├── AbstractGeoJsonParserJacksonImplTestBase.java
        │               │   │       │       ├── GeoJsonParserJacksonImplExtensionsTest.java
        │               │   │       │       └── GeoJsonParserJacksonImplTest.java
        │               │   │       └── testdomain/
        │               │   │           ├── BeanA.java
        │               │   │           └── BeanB.java
        │               │   ├── index/
        │               │   │   └── SpatialIndexTest.java
        │               │   ├── matching/
        │               │   │   └── PolyLineMatchTest.java
        │               │   └── sharding/
        │               │       ├── CountryShardTest.java
        │               │       ├── DynamicTileShardingTest.java
        │               │       ├── GeoHashShardingTest.java
        │               │       ├── GeoHashTileTest.java
        │               │       ├── SlippyTileShardingTest.java
        │               │       ├── SlippyTileTest.java
        │               │       └── converters/
        │               │           ├── RectangleToSpatial4JRectangleConverterTest.java
        │               │           └── StringToShardConverterTest.java
        │               ├── locale/
        │               │   ├── IsoCountryFuzzyMatcherTest.java
        │               │   ├── IsoCountryTest.java
        │               │   └── IsoLanguageTest.java
        │               ├── proto/
        │               │   ├── FullProtoSuiteTest.java
        │               │   ├── adapters/
        │               │   │   ├── ProtoAtlasMetaDataAdapterTest.java
        │               │   │   ├── ProtoByteArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoIntegerArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoIntegerStringDictionaryAdapterTest.java
        │               │   │   ├── ProtoLongArrayAdapterTest.java
        │               │   │   ├── ProtoLongArrayOfArraysAdapterTest.java
        │               │   │   ├── ProtoLongToLongMapAdapterTest.java
        │               │   │   ├── ProtoLongToLongMultiMapAdapterTest.java
        │               │   │   ├── ProtoPackedTagStoreAdapterTest.java
        │               │   │   ├── ProtoPolyLineArrayAdapterTest.java
        │               │   │   └── ProtoPolygonArrayAdapterTest.java
        │               │   ├── builder/
        │               │   │   └── ProtoAtlasBuilderTest.java
        │               │   └── converters/
        │               │       ├── ProtoIntegerArrayOfArraysConverterTest.java
        │               │       ├── ProtoLocationConverterTest.java
        │               │       └── ProtoTagListConverterTest.java
        │               ├── streaming/
        │               │   ├── SplittableInputStreamTest.java
        │               │   ├── readers/
        │               │   │   ├── CsvReaderTest.java
        │               │   │   └── GeoJsonReaderTest.java
        │               │   ├── resource/
        │               │   │   ├── ByteArrayOutputStreamExceptional.java
        │               │   │   ├── FileSuffixTestCase.java
        │               │   │   ├── FileSuffixTestCaseResource.java
        │               │   │   ├── FileTest.java
        │               │   │   ├── InputStreamResourceCloseableTest.java
        │               │   │   ├── OutputStreamWritableResourceCloseableTest.java
        │               │   │   ├── ResourceTest.java
        │               │   │   └── zip/
        │               │   │       └── ZipResourceTest.java
        │               │   └── writers/
        │               │       └── JsonWriterTest.java
        │               ├── tags/
        │               │   ├── AbstractNameFinderTestCase.java
        │               │   ├── BarrierTagTestCase.java
        │               │   ├── BulkNameFinderForcedLocalizableTestCase.java
        │               │   ├── BulkNameFinderTestCase.java
        │               │   ├── CheckDateTagTestCase.java
        │               │   ├── ConstructionDateTagTestCase.java
        │               │   ├── DestinationTagTestCase.java
        │               │   ├── DisusedRailwayTagTestCase.java
        │               │   ├── EstimatedWidthTagTest.java
        │               │   ├── FerryTagTest.java
        │               │   ├── GetTagsTestCase.java
        │               │   ├── HeightTagTestCase.java
        │               │   ├── HighwayTagTestCase.java
        │               │   ├── ISOCountryTagTestCase.java
        │               │   ├── LayerTagTest.java
        │               │   ├── LocalizedTagNameWithOptionalDateTestCase.java
        │               │   ├── LocalizedTaggableTestCase.java
        │               │   ├── NameFinderTestCase.java
        │               │   ├── OpenDateTagTestCase.java
        │               │   ├── OpeningDateTagTestCase.java
        │               │   ├── ProtectClassTagTest.java
        │               │   ├── RailwayTagTestCase.java
        │               │   ├── SmoothnessTagTest.java
        │               │   ├── StandardNameFinderTestCase.java
        │               │   ├── SyntheticTagTestCase.java
        │               │   ├── TagTestSuite.java
        │               │   ├── TaggableTest.java
        │               │   ├── TemporaryDateOnTagTestCase.java
        │               │   ├── TestSyntheticTag.java
        │               │   ├── TurnLaneBackwardTagTestCase.java
        │               │   ├── TurnLaneForwardTagTestCase.java
        │               │   ├── TurnLaneTagTestCase.java
        │               │   ├── TurnTagTestCase.java
        │               │   ├── annotations/
        │               │   │   ├── extraction/
        │               │   │   │   ├── AltitudeExtractorTest.java
        │               │   │   │   ├── LengthExtractorTest.java
        │               │   │   │   ├── LongExtractorTestCase.java
        │               │   │   │   ├── OrdinalExtractorTestCase.java
        │               │   │   │   └── SpeedExtractorTest.java
        │               │   │   └── validation/
        │               │   │       ├── AddressFlatsTagTestCase.java
        │               │   │       ├── BaseTagTestCase.java
        │               │   │       ├── BuildingTagTestCase.java
        │               │   │       ├── DisusedShopTagTestCase.java
        │               │   │       ├── FromEnumTestCase.java
        │               │   │       ├── HighwayTagTestCase.java
        │               │   │       ├── ISOCountryTagTestCase.java
        │               │   │       ├── LastEditUserIdentifierTestCase.java
        │               │   │       ├── LayerTagTestCase.java
        │               │   │       ├── LengthValidatorTest.java
        │               │   │       ├── LevelTagTestCase.java
        │               │   │       ├── MaxHeightTagTestCase.java
        │               │   │       ├── MaxWidthTagTestCase.java
        │               │   │       ├── OpeningHoursTagTestCase.java
        │               │   │       ├── SpeedTagsTestCase.java
        │               │   │       ├── TagValidationTestSuite.java
        │               │   │       ├── TagValueAsTestCase.java
        │               │   │       ├── ValidatorsHasValuesForTestCase.java
        │               │   │       └── ValidatorsTestCase.java
        │               │   ├── cache/
        │               │   │   ├── TaggerTestCase.java
        │               │   │   └── TaggerTestRule.java
        │               │   ├── filters/
        │               │   │   ├── ConfiguredTaggableFilterTest.java
        │               │   │   ├── RegexTaggableFilterTest.java
        │               │   │   ├── TaggableFilterTest.java
        │               │   │   ├── TaggableFilterToMatcherConverterTest.java
        │               │   │   └── matcher/
        │               │   │       ├── ConfiguredTaggableMatcherTest.java
        │               │   │       ├── TaggableMatcherTest.java
        │               │   │       └── parsing/
        │               │   │           ├── LexerTest.java
        │               │   │           ├── ParserTest.java
        │               │   │           ├── SemanticCheckerTest.java
        │               │   │           └── tree/
        │               │   │               ├── ASTNodeTest.java
        │               │   │               └── TreePrinterTest.java
        │               │   └── oneway/
        │               │       └── OneWayTagTest.java
        │               ├── test/
        │               │   └── TestUtility.java
        │               └── utilities/
        │                   ├── archive/
        │                   │   └── ExtractorTest.java
        │                   ├── arrays/
        │                   │   └── LargeArrayTest.java
        │                   ├── caching/
        │                   │   ├── ConcurrentResourceCacheTest.java
        │                   │   ├── LocalFileInMemoryCacheTest.java
        │                   │   ├── ResourceCacheTest.java
        │                   │   └── strategies/
        │                   │       ├── ByteArrayCachingStrategyTest.java
        │                   │       ├── NamespaceCachingStrategiesTest.java
        │                   │       └── NoCachingStrategyTest.java
        │                   ├── checkstyle/
        │                   │   └── ArrangementCheckTest.java
        │                   ├── collections/
        │                   │   ├── EnumSetCollectorTestCase.java
        │                   │   ├── FilteredIterableTest.java
        │                   │   ├── FixedSizePriorityQueueTest.java
        │                   │   ├── IterablesAddAllTestCase.java
        │                   │   ├── IterablesTest.java
        │                   │   ├── MapsTest.java
        │                   │   ├── MultiIterableTest.java
        │                   │   ├── OptionalIterableTest.java
        │                   │   ├── ParallelIterableTest.java
        │                   │   ├── SetsTest.java
        │                   │   ├── ShardBucketCollectionTest.java
        │                   │   ├── ShardBucketCollectionTestClasses.java
        │                   │   ├── StreamIterableTest.java
        │                   │   ├── StringListTest.java
        │                   │   └── SubIterableTest.java
        │                   ├── command/
        │                   │   ├── SimpleOptionAndArgumentParserTest.java
        │                   │   └── subcommands/
        │                   │       ├── AnyToGeoJsonCommandTest.java
        │                   │       ├── AtlasDiffCommandTest.java
        │                   │       ├── AtlasDiffCommandTestRule.java
        │                   │       ├── AtlasMetadataReaderCommandTest.java
        │                   │       ├── AtlasSearchCommandTest.java
        │                   │       ├── AtlasShardingConverterCommandTest.java
        │                   │       ├── AtlasShellToolsDemoCommandTest.java
        │                   │       ├── ConcatenateAtlasCommandTest.java
        │                   │       ├── CountryBoundaryMapPrinterCommandTest.java
        │                   │       ├── CountryShardToBoundsCommandTest.java
        │                   │       ├── HelloWorldCommandTest.java
        │                   │       ├── IsoCountryCodeCommandTest.java
        │                   │       ├── JavaToProtoSerializationCommandTest.java
        │                   │       ├── OsmFileParserCommandTest.java
        │                   │       ├── OsmToAtlasCommandTest.java
        │                   │       ├── PackedToTextAtlasCommandTest.java
        │                   │       ├── PbfToAtlasCommandTest.java
        │                   │       ├── SubAtlasCommandTest.java
        │                   │       ├── TaggableMatcherPrinterCommandTest.java
        │                   │       ├── TemplateTestCommandTest.java
        │                   │       ├── WKTShardCommandTest.java
        │                   │       └── templates/
        │                   │           ├── AtlasLoaderCommandTest.java
        │                   │           ├── AtlasLoaderTemplateTest.java
        │                   │           ├── MultipleOutputCommandTest.java
        │                   │           └── OutputDirectoryTemplateTest.java
        │                   ├── configuration/
        │                   │   ├── ConfiguredFilterTest.java
        │                   │   ├── MergedConfigurationTest.java
        │                   │   └── StandardConfigurationTest.java
        │                   ├── conversion/
        │                   │   ├── HexStringByteArrayConverterTest.java
        │                   │   ├── StringToPredicateConverterTest.java
        │                   │   └── StringToPredicateConverterTestRule.java
        │                   ├── direction/
        │                   │   ├── EdgeDirectionComparatorTest.java
        │                   │   └── EdgeDirectionComparatorTestCaseRule.java
        │                   ├── filters/
        │                   │   ├── AtlasEntityPolygonsFilterTest.java
        │                   │   └── AtlasEntityPolygonsFilterTestRule.java
        │                   ├── graphs/
        │                   │   └── DirectedAcyclicGraphTest.java
        │                   ├── identifiers/
        │                   │   └── EntityIdentifierGeneratorTest.java
        │                   ├── jsoncompare/
        │                   │   ├── ArraysRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── DegenerateRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── MatchingRegularExpressionJSONComparatorTestCase.java
        │                   │   ├── ObjectsRegularExpressionJSONComparatorTestCase.java
        │                   │   └── RegularExpressionJSONComparatorTestSuite.java
        │                   ├── maps/
        │                   │   ├── LargeMapTest.java
        │                   │   └── MultiMapTest.java
        │                   ├── matching/
        │                   │   └── NameMatcherTestCase.java
        │                   ├── random/
        │                   │   └── RandomTextGeneratorTest.java
        │                   ├── runtime/
        │                   │   ├── BooleanFlagTest.java
        │                   │   ├── FlagNameParsingRegressionTest.java
        │                   │   ├── RetryTest.java
        │                   │   ├── RunScriptTest.java
        │                   │   └── system/
        │                   │       ├── SystemInfoTest.java
        │                   │       └── memory/
        │                   │           └── MemoryTest.java
        │                   ├── scalars/
        │                   │   ├── AngleTest.java
        │                   │   ├── DistanceTest.java
        │                   │   ├── DoubleCounterTest.java
        │                   │   ├── DurationTest.java
        │                   │   ├── RatioTest.java
        │                   │   ├── SpeedTest.java
        │                   │   └── SurfaceTest.java
        │                   ├── statistic/
        │                   │   ├── CounterWithStatisticTest.java
        │                   │   ├── CustomizedStatisticTest.java
        │                   │   └── StatisticUtilsTest.java
        │                   ├── testing/
        │                   │   ├── AtlasFromTextTestCase.java
        │                   │   ├── AtlasFromTextTestCaseRule.java
        │                   │   ├── AtlasTestCase.java
        │                   │   ├── AtlasTestCaseRule.java
        │                   │   ├── BeanTestCase.java
        │                   │   ├── BeanTestCaseRule.java
        │                   │   ├── CoreTestExtension.java
        │                   │   ├── OsmFileParserTest.java
        │                   │   ├── SomeTestBean.java
        │                   │   ├── TestAtlasTest.java
        │                   │   └── TestAtlasTestRule.java
        │                   ├── threads/
        │                   │   └── PoolTest.java
        │                   ├── time/
        │                   │   └── LocalTimeTest.java
        │                   ├── timezone/
        │                   │   └── TimeZoneTest.java
        │                   ├── tuples/
        │                   │   ├── EitherTest.java
        │                   │   └── TupleTest.java
        │                   ├── unicode/
        │                   │   └── LoadingClassifierTestCase.java
        │                   └── vectortiles/
        │                       └── MinimumZoomTest.java
        └── resources/
            ├── aql-files/
            │   ├── test.aql
            │   ├── test1/
            │   │   └── test.aql
            │   └── test2/
            │       ├── test.aql
            │       ├── testA/
            │       │   ├── test.aql
            │       │   └── test.aql.sig
            │       └── testB/
            │           ├── test.aql
            │           ├── test.aql.sig
            │           ├── test2.aql
            │           └── test2.aql.sig
            ├── data/
            │   ├── Alcatraz/
            │   │   ├── Alcatraz.atlas.txt
            │   │   └── Alcatraz.osm
            │   ├── ButterflyPark/
            │   │   ├── ButterflyPark.atlas.txt
            │   │   └── ButterflyPark.osm
            │   └── polygon/
            │       └── jsonl/
            │           └── samples.jsonl
            ├── log4j.properties
            └── org/
                └── openstreetmap/
                    └── atlas/
                        ├── geography/
                        │   ├── MultiPolygonTestGeom1.wkt
                        │   ├── MultiPolygonTestGeom10.josm.osm
                        │   ├── MultiPolygonTestGeom2.josm.osm
                        │   ├── MultiPolygonTestGeom3.josm.osm
                        │   ├── MultiPolygonTestGeom4.josm.osm
                        │   ├── MultiPolygonTestGeom5.josm.osm
                        │   ├── MultiPolygonTestGeom6.josm.osm
                        │   ├── MultiPolygonTestGeom7.josm.osm
                        │   ├── MultiPolygonTestGeom8.josm.osm
                        │   ├── MultiPolygonTestGeom9.josm.osm
                        │   ├── atlas/
                        │   │   ├── ECU_6-16-31.atlas
                        │   │   ├── builder/
                        │   │   │   └── overpass-turbo.geojson
                        │   │   ├── change/
                        │   │   │   ├── ChangeAtlasTest.josm.osm
                        │   │   │   ├── ChangeAtlasTestEdge.josm.osm
                        │   │   │   ├── MultipleChangeAtlasTest.atlas.txt
                        │   │   │   ├── MultipleChangeAtlasTest.osm
                        │   │   │   ├── diff/
                        │   │   │   │   ├── DiffAtlas1.josm.osm
                        │   │   │   │   └── DiffAtlas2.josm.osm
                        │   │   │   ├── nodeBoundsExpansionAtlas.josm.osm
                        │   │   │   └── serializer/
                        │   │   │       ├── change.json
                        │   │   │       ├── serializedAddEdgeWithDescription.json
                        │   │   │       ├── serializedAddRelationWithDescription.json
                        │   │   │       ├── serializedAreaFull.json
                        │   │   │       ├── serializedAreaNull.json
                        │   │   │       ├── serializedAreaRemove.json
                        │   │   │       ├── serializedEdgeFull.json
                        │   │   │       ├── serializedEdgeNull.json
                        │   │   │       ├── serializedEdgeRemove.json
                        │   │   │       ├── serializedLineFull.json
                        │   │   │       ├── serializedLineNull.json
                        │   │   │       ├── serializedLineRemove.json
                        │   │   │       ├── serializedNodeFull.json
                        │   │   │       ├── serializedNodeNull.json
                        │   │   │       ├── serializedNodeRemove.json
                        │   │   │       ├── serializedPointFull.json
                        │   │   │       ├── serializedPointNull.json
                        │   │   │       ├── serializedPointRemove.json
                        │   │   │       ├── serializedPointWithTags.json
                        │   │   │       ├── serializedRelationFull.json
                        │   │   │       ├── serializedRelationNull.json
                        │   │   │       ├── serializedRelationRemove.json
                        │   │   │       ├── serializedRemoveAreaWithDescription.json
                        │   │   │       ├── serializedReverseWay.json
                        │   │   │       └── serializedUpdateEdgeWithDescription.json
                        │   │   ├── command/
                        │   │   │   ├── DNK_Copenhagen/
                        │   │   │   │   ├── DNK_1.atlas.txt
                        │   │   │   │   ├── DNK_2.atlas.txt
                        │   │   │   │   └── DNK_3.atlas.txt
                        │   │   │   ├── atlas-edge.json
                        │   │   │   ├── atlas-way-section.json
                        │   │   │   ├── complex-SF.txt
                        │   │   │   ├── continent_map.txt
                        │   │   │   ├── osm-pbf-node.json
                        │   │   │   ├── osm-pbf-relation.json
                        │   │   │   ├── osm-pbf-way.json
                        │   │   │   └── world_islands.osm.pbf
                        │   │   ├── dynamic/
                        │   │   │   └── rules/
                        │   │   │       ├── DynamicAtlasAgressiveRelationsTest_11-998-708.josm.osm
                        │   │   │       ├── DynamicAtlasAgressiveRelationsTest_11-999-708.josm.osm
                        │   │   │       ├── DynamicAtlasMovingTooFastTest.osm
                        │   │   │       ├── DynamicAtlasPartialInitialShardsTest.osm
                        │   │   │       ├── DynamicAtlasPreemptiveLoadTest.osm
                        │   │   │       ├── DynamicAtlasRestrainedExpansionWithPolygonTest.osm
                        │   │   │       ├── z12all.atlas.geojson
                        │   │   │       ├── z12x1349y1869.atlas.geojson
                        │   │   │       ├── z12x1349y1869.geojson
                        │   │   │       ├── z12x1349y1870.atlas.geojson
                        │   │   │       ├── z12x1349y1870.geojson
                        │   │   │       ├── z12x1350y1869.atlas.geojson
                        │   │   │       ├── z12x1350y1869.geojson
                        │   │   │       ├── z12x1350y1870.atlas.geojson
                        │   │   │       └── z12x1350y1870.geojson
                        │   │   ├── items/
                        │   │   │   ├── complex/
                        │   │   │   │   ├── InnerOuterMultiPolygon.osm
                        │   │   │   │   ├── bignode/
                        │   │   │   │   │   ├── dnk-link-road-test.osm
                        │   │   │   │   │   ├── u-turn-shape-edge.osm
                        │   │   │   │   │   └── ukr-link-road-test.osm
                        │   │   │   │   ├── buildings/
                        │   │   │   │   │   ├── building_block_atlas.txt
                        │   │   │   │   │   ├── building_with_levels.txt
                        │   │   │   │   │   └── building_with_minheights.txt
                        │   │   │   │   ├── restriction/
                        │   │   │   │   │   └── atlasBrokenTurnRestrictionRoute.josm.osm
                        │   │   │   │   └── water/
                        │   │   │   │       ├── canalAsRelation.atlas.txt
                        │   │   │   │       ├── canalAsRelationOfCanals.atlas.txt
                        │   │   │   │       ├── harborAsArea.atlas.txt
                        │   │   │   │       └── harborAsRelation.atlas.txt
                        │   │   │   └── intersectionAtlas.atlas.txt
                        │   │   ├── line-delimited-geojson.txt
                        │   │   ├── pbf/
                        │   │   │   ├── AIA_boundary.txt
                        │   │   │   ├── DMA_boundary.txt
                        │   │   │   ├── DNK_SWE_boundary.txt
                        │   │   │   ├── bridgeConfiguredFilter1.json
                        │   │   │   ├── bridgeConfiguredFilter2.json
                        │   │   │   ├── edge-filter.json
                        │   │   │   ├── ferryRelation5831018.osm
                        │   │   │   ├── noRelationNoTagsAtIntersectionAtlas.osm
                        │   │   │   ├── noRelationNoTagsNoIntersectionAtlas.osm
                        │   │   │   ├── noRelationWithTagsAtIntersectionAtlas.osm
                        │   │   │   ├── noRelationWithTagsNoIntersectionAtlas.osm
                        │   │   │   ├── one_way_roads_in_AIA.osm
                        │   │   │   ├── osmPbfProcessorTest_keepOutsideWaysThatAreConnected.osm
                        │   │   │   ├── outsideConnectedOneWayWays.osm
                        │   │   │   ├── partOfRelationNoTagsAtIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationNoTagsNoIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationWithTagsAtIntersectionAtlas.osm
                        │   │   │   ├── partOfRelationWithTagsNoIntersectionAtlas.osm
                        │   │   │   └── partialRelation4451979.osm
                        │   │   ├── raw/
                        │   │   │   ├── DMA_boundary.txt
                        │   │   │   ├── DNK_SWE_boundary.txt
                        │   │   │   ├── creation/
                        │   │   │   │   ├── 7-105-51.osm.pbf
                        │   │   │   │   ├── 9-433-268.osm.pbf
                        │   │   │   │   ├── nestedSingleRelations.josm.osm
                        │   │   │   │   ├── nestedSingleRelations.osm
                        │   │   │   │   └── nestedSingleRelations.osm.pbf
                        │   │   │   ├── osmPbfProcessorTest_keepOutsideWaysThatAreConnected.osm
                        │   │   │   ├── outsideConnectedOneWayWays.osm
                        │   │   │   └── sectioning/
                        │   │   │       ├── bidirectionalRing.atlas.txt
                        │   │   │       ├── lineWithBarrier.atlas.txt
                        │   │   │       ├── lineWithInvalidOverlappingGeometry.atlas.txt
                        │   │   │       ├── lineWithLessThanTwoNodesDueToRepeatedLocationAtEndOfLine.atlas.txt
                        │   │   │       ├── lineWithLoopAtEnd.atlas.txt
                        │   │   │       ├── lineWithLoopAtStart.atlas.txt
                        │   │   │       ├── lineWithLoopInMiddle.atlas.txt
                        │   │   │       ├── lineWithRepeatedLocation.atlas.txt
                        │   │   │       ├── loopWithRepeatedLocation.atlas.txt
                        │   │   │       ├── loopingWayWithIntersection.atlas.txt
                        │   │   │       ├── malformedPolyLine.atlas.txt
                        │   │   │       ├── malformedPolyLineBoundaryMap.txt
                        │   │   │       ├── nestedRelationRemoval.atlas.txt
                        │   │   │       ├── nestedRelationRemovalBoundaryMap.txt
                        │   │   │       ├── nodeAndPointAsRelationMember.atlas.txt
                        │   │   │       ├── nodeAndPointRelationMemberBoundaryMap.txt
                        │   │   │       ├── oneWayRing.atlas.txt
                        │   │   │       ├── oneWaySimpleLine.atlas.txt
                        │   │   │       ├── pedestrianRing.atlas.txt
                        │   │   │       ├── rawAtlasSpanningOutsideBoundary.atlas.txt
                        │   │   │       ├── reversedOneWayLine.atlas.txt
                        │   │   │       ├── ringWithSingleIntersection.atlas.txt
                        │   │   │       ├── roundAbout.atlas.txt
                        │   │   │       ├── selfIntersectingLoop.atlas.txt
                        │   │   │       ├── simpleBiDirectionalLine.atlas.txt
                        │   │   │       └── wayExceedingSectioningLimit.atlas.txt
                        │   │   ├── statistics/
                        │   │   │   ├── addressAtlas.josm.osm
                        │   │   │   ├── ferryAtlas.josm.osm
                        │   │   │   ├── refsAtlas.josm.osm
                        │   │   │   └── waterAtlas.josm.osm
                        │   │   └── walker/
                        │   │       ├── OsmWayWalker-Way169884263.atlas.txt
                        │   │       └── OsmWayWalker-Way30647513.atlas.txt
                        │   ├── boundary/
                        │   │   ├── AAA_boundary.expected.json
                        │   │   ├── AAA_boundary.txt
                        │   │   ├── DMA_boundary.txt
                        │   │   ├── DMA_snake_polyline.wkt
                        │   │   ├── HTI_boundary.txt
                        │   │   ├── USA_HTI_overlapping.atlas.txt
                        │   │   ├── USA_boundary_reduced.txt
                        │   │   ├── ZAF_osm_shards_with_14.txt
                        │   │   ├── countryToShardList.txt
                        │   │   ├── duplicate_shape.dbf
                        │   │   ├── duplicate_shape.prj
                        │   │   ├── duplicate_shape.qpj
                        │   │   ├── duplicate_shape.shp
                        │   │   ├── duplicate_shape.shx
                        │   │   └── slicing-filter.json
                        │   ├── clipping/
                        │   │   ├── testHuggingPolygons.josm.osm
                        │   │   ├── testOverlappingPolygonsToMultiPolygon.josm.osm
                        │   │   ├── testOverlappingPolygonsToPolygon.josm.osm
                        │   │   └── testTouchingPolygons.josm.osm
                        │   ├── converters/
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_crossingPolyLines.txt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_expectedPolygons.txt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorInner1.wkt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorInner2.wkt
                        │   │   ├── MultiplePolyLineToPolygonsConverterTest_jtsErrorOuter.wkt
                        │   │   └── MultiplePolyLineToPolygonsConverterTest_multiplePolyLines.txt
                        │   ├── fourSelfIntersectingPolygon.osm
                        │   ├── geojson/
                        │   │   ├── concatenated_geojson_files_expected
                        │   │   ├── parser/
                        │   │   │   ├── beanA.json
                        │   │   │   ├── beanBWithArray.json
                        │   │   │   ├── beanBWithoutArray.json
                        │   │   │   ├── description1.json
                        │   │   │   ├── descriptor1.json
                        │   │   │   ├── descriptor2.json
                        │   │   │   ├── descriptor3.json
                        │   │   │   ├── feature1.json
                        │   │   │   ├── feature2.json
                        │   │   │   ├── featureChangeProperties.json
                        │   │   │   ├── featureChangePropertiesBad1.json
                        │   │   │   ├── featureChangePropertiesBad2.json
                        │   │   │   ├── featureChangePropertiesExample1.json
                        │   │   │   ├── featureChangePropertiesExample2.json
                        │   │   │   ├── featureChangePropertiesRelationMemberDescriptor.json
                        │   │   │   ├── featureCollection1.json
                        │   │   │   ├── featureWithExtendedProperties.json
                        │   │   │   ├── foreignFieldsNested.json
                        │   │   │   ├── foreignFieldsSimple.json
                        │   │   │   ├── geometryCollectionBasic.json
                        │   │   │   ├── geometryCollectionChildConversion.json
                        │   │   │   ├── geometryCollectionRecursiveNested.json
                        │   │   │   ├── lineString.json
                        │   │   │   ├── lineStringConversion.json
                        │   │   │   ├── multiLineString.json
                        │   │   │   ├── multiLineStringConversion.json
                        │   │   │   ├── multiPoint.json
                        │   │   │   ├── multiPointConversion.json
                        │   │   │   ├── multiPolygon.json
                        │   │   │   ├── multiPolygonConversion.json
                        │   │   │   ├── multiPolygonDonut.json
                        │   │   │   ├── point.json
                        │   │   │   ├── pointConversion.json
                        │   │   │   ├── pointWithBbox2D.json
                        │   │   │   ├── pointWithBbox3D.json
                        │   │   │   ├── polygon.json
                        │   │   │   ├── polygonConversion.json
                        │   │   │   ├── propertiesNested.json
                        │   │   │   └── propertiesSimple.json
                        │   │   ├── test1.geojson
                        │   │   ├── test2.geojson
                        │   │   └── test3.geojson
                        │   ├── polygonWithFlatZeroAreaPart.osm
                        │   ├── polygonWithInclinedZeroArea.osm
                        │   ├── selfIntersectingPolygon.osm
                        │   └── sharding/
                        │       ├── testDynamicSharding.txt
                        │       ├── testDynamicShardingChildOrdering.txt
                        │       └── testDynamicShardingMissingChildren.txt
                        ├── streaming/
                        │   └── readers/
                        │       ├── data.csv
                        │       ├── geojson-multipolygon.json
                        │       ├── geojson-point.json
                        │       ├── geojson-polygon.json
                        │       ├── geojson-sample.json
                        │       └── wrongData.csv
                        ├── tags/
                        │   └── filters/
                        │       ├── matcher/
                        │       │   └── test-matching.json
                        │       └── test-filtering.json
                        └── utilities/
                            ├── checkstyle/
                            │   ├── ArrangementCheckRight.java
                            │   ├── ArrangementCheckWrongField0.java
                            │   ├── ArrangementCheckWrongField1.java
                            │   ├── ArrangementCheckWrongField2.java
                            │   ├── ArrangementCheckWrongInitializerBlock.java
                            │   ├── ArrangementCheckWrongInitializerStaticBlock.java
                            │   ├── ArrangementCheckWrongMethodModifier.java
                            │   ├── ArrangementCheckWrongMethodName.java
                            │   ├── ArrangementCheckWrongMethodVisibility1.java
                            │   └── ArrangementCheckWrongMethodVisibility2.java
                            ├── command/
                            │   └── subcommands/
                            │       ├── AtlasDiffCommandAtlas1.josm.osm
                            │       ├── AtlasDiffCommandAtlas2.josm.osm
                            │       ├── AtlasDiffCommandAtlas3.josm.osm
                            │       ├── AtlasDiffCommandAtlas4.josm.osm
                            │       ├── CountryBoundaryMapPrinterCommandTestBoundaries.txt
                            │       ├── MAF_AIA_osm_boundaries_with_grid_index.txt
                            │       ├── MultiPolygonTest.josm.osm
                            │       ├── MultiPolygonTest.osm
                            │       ├── expected-json-features.txt
                            │       ├── sharding-tree-1-expected.geojson
                            │       ├── sharding-tree-1.txt
                            │       ├── shardingConverter.josm.osm
                            │       ├── templates/
                            │       │   ├── atlas1.atlas.txt
                            │       │   ├── atlas2.atlas.txt
                            │       │   └── atlas_malformed.atlas.txt
                            │       ├── testPbf2Atlas.josm.osm
                            │       ├── test_boundary.txt
                            │       └── test_boundary_expected.geojson
                            ├── configuration/
                            │   ├── ConfiguredFilterTest.json
                            │   ├── ConfiguredFilterTestOtherRoot.json
                            │   ├── application.json
                            │   ├── application.yml
                            │   ├── development.json
                            │   ├── development.yml
                            │   ├── developmentOverriding.json
                            │   ├── developmentOverriding.yml
                            │   ├── feature.json
                            │   ├── feature.yml
                            │   ├── geometryFilter.josm.osm
                            │   ├── keywordOverridingApplication.json
                            │   ├── keywordOverridingApplication.yml
                            │   ├── yaml_dot_compressed.yml
                            │   └── yaml_dot_expanded.yml
                            ├── filters/
                            │   ├── includeExcludePolygonArrangements.osm
                            │   ├── multiPolygons.osm
                            │   ├── testCounts.osm
                            │   └── testForms.osm
                            └── testing/
                                ├── josmOsmFile.osm
                                ├── osmFile.osm
                                └── test.txt
Download .txt
Showing preview only (1,061K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (12245 symbols across 1600 files)

FILE: pyatlas/pyatlas/atlas.py
  class Atlas (line 31) | class Atlas(object):
    method __init__ (line 36) | def __init__(self, atlas_file_path, lazy_loading=True):
    method metadata (line 105) | def metadata(self):
    method points (line 114) | def points(self, predicate=lambda p: True):
    method point (line 124) | def point(self, identifier):
    method lines (line 134) | def lines(self, predicate=lambda l: True):
    method line (line 144) | def line(self, identifier):
    method areas (line 154) | def areas(self, predicate=lambda a: True):
    method area (line 164) | def area(self, identifier):
    method nodes (line 174) | def nodes(self, predicate=lambda n: True):
    method node (line 184) | def node(self, identifier):
    method edges (line 194) | def edges(self, predicate=lambda e: True):
    method edge (line 204) | def edge(self, identifier):
    method relations (line 214) | def relations(self, predicate=lambda r: True):
    method relation (line 224) | def relation(self, identifier):
    method entities (line 234) | def entities(self, predicate=lambda e: True):
    method entity (line 258) | def entity(self, identifier, entity_type):
    method points_at (line 278) | def points_at(self, location, predicate=lambda p: True):
    method points_within (line 286) | def points_within(self, polygon, predicate=lambda p: True):
    method lines_containing (line 299) | def lines_containing(self, location, predicate=lambda l: True):
    method lines_intersecting_polyline (line 313) | def lines_intersecting_polyline(self, polyline, predicate=lambda l: Tr...
    method lines_intersecting (line 327) | def lines_intersecting(self, polygon, predicate=lambda l: True):
    method areas_covering (line 341) | def areas_covering(self, location, predicate=lambda a: True):
    method areas_intersecting (line 354) | def areas_intersecting(self, polygon, predicate=lambda a: True):
    method nodes_at (line 367) | def nodes_at(self, location, predicate=lambda n: True):
    method nodes_within (line 375) | def nodes_within(self, polygon, predicate=lambda n: True):
    method edges_containing (line 388) | def edges_containing(self, location, predicate=lambda e: True):
    method edges_intersecting_polyline (line 402) | def edges_intersecting_polyline(self, polyline, predicate=lambda e: Tr...
    method edges_intersecting (line 416) | def edges_intersecting(self, polygon, predicate=lambda e: True):
    method relations_with_entities_intersecting (line 430) | def relations_with_entities_intersecting(self, polygon, predicate=lamb...
    method load_all_fields (line 443) | def load_all_fields(self):
    method number_of_points (line 455) | def number_of_points(self):
    method number_of_lines (line 461) | def number_of_lines(self):
    method number_of_areas (line 467) | def number_of_areas(self):
    method number_of_nodes (line 473) | def number_of_nodes(self):
    method number_of_edges (line 479) | def number_of_edges(self):
    method number_of_relations (line 485) | def number_of_relations(self):
    method _get_dictionary (line 492) | def _get_dictionary(self):
    method _get_pointIdentifiers (line 497) | def _get_pointIdentifiers(self):
    method _get_pointIdentifierToPointArrayIndex (line 502) | def _get_pointIdentifierToPointArrayIndex(self):
    method _get_pointLocations (line 508) | def _get_pointLocations(self):
    method _get_pointTags (line 513) | def _get_pointTags(self):
    method _get_pointIndexToRelationIndices (line 519) | def _get_pointIndexToRelationIndices(self):
    method _get_lineIdentifiers (line 524) | def _get_lineIdentifiers(self):
    method _get_lineIdentifierToLineArrayIndex (line 529) | def _get_lineIdentifierToLineArrayIndex(self):
    method _get_linePolyLines (line 534) | def _get_linePolyLines(self):
    method _get_lineTags (line 539) | def _get_lineTags(self):
    method _get_lineIndexToRelationIndices (line 545) | def _get_lineIndexToRelationIndices(self):
    method _get_areaIdentifiers (line 550) | def _get_areaIdentifiers(self):
    method _get_areaIdentifierToAreaArrayIndex (line 555) | def _get_areaIdentifierToAreaArrayIndex(self):
    method _get_areaPolygons (line 560) | def _get_areaPolygons(self):
    method _get_areaTags (line 565) | def _get_areaTags(self):
    method _get_areaIndexToRelationIndices (line 571) | def _get_areaIndexToRelationIndices(self):
    method _get_nodeIdentifiers (line 576) | def _get_nodeIdentifiers(self):
    method _get_nodeIdentifierToNodeArrayIndex (line 581) | def _get_nodeIdentifierToNodeArrayIndex(self):
    method _get_nodeLocations (line 586) | def _get_nodeLocations(self):
    method _get_nodeTags (line 591) | def _get_nodeTags(self):
    method _get_nodeInEdgesIndices (line 597) | def _get_nodeInEdgesIndices(self):
    method _get_nodeOutEdgesIndices (line 602) | def _get_nodeOutEdgesIndices(self):
    method _get_nodeIndexToRelationIndices (line 607) | def _get_nodeIndexToRelationIndices(self):
    method _get_edgeIdentifiers (line 612) | def _get_edgeIdentifiers(self):
    method _get_edgeIdentifierToEdgeArrayIndex (line 617) | def _get_edgeIdentifierToEdgeArrayIndex(self):
    method _get_edgeStartNodeIndex (line 622) | def _get_edgeStartNodeIndex(self):
    method _get_edgeEndNodeIndex (line 627) | def _get_edgeEndNodeIndex(self):
    method _get_edgePolyLines (line 632) | def _get_edgePolyLines(self):
    method _get_edgeTags (line 637) | def _get_edgeTags(self):
    method _get_edgeIndexToRelationIndices (line 643) | def _get_edgeIndexToRelationIndices(self):
    method _get_relationIdentifiers (line 648) | def _get_relationIdentifiers(self):
    method _get_relationIdentifierToRelationArrayIndex (line 653) | def _get_relationIdentifierToRelationArrayIndex(self):
    method _get_relationMemberTypes (line 659) | def _get_relationMemberTypes(self):
    method _get_relationMemberIndices (line 664) | def _get_relationMemberIndices(self):
    method _get_relationMemberRoles (line 669) | def _get_relationMemberRoles(self):
    method _get_relationTags (line 674) | def _get_relationTags(self):
    method _get_relationIndexToRelationIndices (line 680) | def _get_relationIndexToRelationIndices(self):
    method _get_point_spatial_index (line 686) | def _get_point_spatial_index(self):
    method _get_line_spatial_index (line 693) | def _get_line_spatial_index(self):
    method _get_area_spatial_index (line 700) | def _get_area_spatial_index(self):
    method _get_node_spatial_index (line 707) | def _get_node_spatial_index(self):
    method _get_edge_spatial_index (line 714) | def _get_edge_spatial_index(self):
    method _get_relation_spatial_index (line 721) | def _get_relation_spatial_index(self):
  class _AtlasSerializer (line 729) | class _AtlasSerializer(object):
    method __init__ (line 867) | def __init__(self, atlas_file, atlas):
    method _load_all_fields (line 871) | def _load_all_fields(self):
    method _load_metadata (line 875) | def _load_metadata(self):
    method _load_dictionary (line 881) | def _load_dictionary(self):
    method _load_pointIdentifiers (line 888) | def _load_pointIdentifiers(self):
    method _load_pointIdentifierToPointArrayIndex (line 893) | def _load_pointIdentifierToPointArrayIndex(self):
    method _load_pointLocations (line 900) | def _load_pointLocations(self):
    method _load_pointTags (line 905) | def _load_pointTags(self):
    method _load_pointIndexToRelationIndices (line 911) | def _load_pointIndexToRelationIndices(self):
    method _load_lineIdentifiers (line 919) | def _load_lineIdentifiers(self):
    method _load_lineIdentifierToLineArrayIndex (line 924) | def _load_lineIdentifierToLineArrayIndex(self):
    method _load_linePolylines (line 931) | def _load_linePolylines(self):
    method _load_lineTags (line 941) | def _load_lineTags(self):
    method _load_lineIndexToRelationIndices (line 947) | def _load_lineIndexToRelationIndices(self):
    method _load_areaIdentifiers (line 954) | def _load_areaIdentifiers(self):
    method _load_areaIdentifierToAreaArrayIndex (line 959) | def _load_areaIdentifierToAreaArrayIndex(self):
    method _load_areaPolygons (line 966) | def _load_areaPolygons(self):
    method _load_areaTags (line 976) | def _load_areaTags(self):
    method _load_areaIndexToRelationIndices (line 982) | def _load_areaIndexToRelationIndices(self):
    method _load_nodeIdentifiers (line 989) | def _load_nodeIdentifiers(self):
    method _load_nodeIdentifierToNodeArrayIndex (line 994) | def _load_nodeIdentifierToNodeArrayIndex(self):
    method _load_nodeLocations (line 1001) | def _load_nodeLocations(self):
    method _load_nodeTags (line 1006) | def _load_nodeTags(self):
    method _load_nodeInEdgesIndices (line 1012) | def _load_nodeInEdgesIndices(self):
    method _load_nodeOutEdgesIndices (line 1018) | def _load_nodeOutEdgesIndices(self):
    method _load_nodeIndexToRelationIndices (line 1024) | def _load_nodeIndexToRelationIndices(self):
    method _load_edgeIdentifiers (line 1031) | def _load_edgeIdentifiers(self):
    method _load_edgeIdentifierToEdgeArrayIndex (line 1036) | def _load_edgeIdentifierToEdgeArrayIndex(self):
    method _load_edgeStartNodeIndex (line 1043) | def _load_edgeStartNodeIndex(self):
    method _load_edgeEndNodeIndex (line 1048) | def _load_edgeEndNodeIndex(self):
    method _load_edgePolylines (line 1053) | def _load_edgePolylines(self):
    method _load_edgeTags (line 1063) | def _load_edgeTags(self):
    method _load_edgeIndexToRelationIndices (line 1069) | def _load_edgeIndexToRelationIndices(self):
    method _load_relationIdentifiers (line 1076) | def _load_relationIdentifiers(self):
    method _load_relationIdentifierToRelationArrayIndex (line 1081) | def _load_relationIdentifierToRelationArrayIndex(self):
    method _load_relationMemberTypes (line 1088) | def _load_relationMemberTypes(self):
    method _load_relationMemberIndices (line 1094) | def _load_relationMemberIndices(self):
    method _load_relationMemberRoles (line 1100) | def _load_relationMemberRoles(self):
    method _load_relationTags (line 1106) | def _load_relationTags(self):
    method _load_relationIndexToRelationIndices (line 1112) | def _load_relationIndexToRelationIndices(self):
    method _load_field (line 1120) | def _load_field(self, field_name):
  class _PackedTagStore (line 1130) | class _PackedTagStore(object):
    method __init__ (line 1135) | def __init__(self, dictionary):
    method set_dictionary (line 1140) | def set_dictionary(self, dictionary):
    method __str__ (line 1143) | def __str__(self):
    method to_key_value_dict (line 1150) | def to_key_value_dict(self, index):
  class _IntegerDictionary (line 1169) | class _IntegerDictionary(object):
    method __init__ (line 1174) | def __init__(self):
    method add (line 1178) | def add(self, index, word):
    method size (line 1184) | def size(self):
    method word (line 1187) | def word(self, index):
  function _read_zipentry (line 1195) | def _read_zipentry(zip_file, entry):
  function _get_packed_tag_store_from_proto (line 1203) | def _get_packed_tag_store_from_proto(proto_store):
  function _get_integer_dictionary_from_proto (line 1225) | def _get_integer_dictionary_from_proto(proto_integer_dictionary):
  function _get_dict_from_longtolongmap (line 1242) | def _get_dict_from_longtolongmap(proto_map):
  function _get_dict_from_protolongtolongmultimap (line 1254) | def _get_dict_from_protolongtolongmultimap(proto_map):

FILE: pyatlas/pyatlas/atlas_entities.py
  class EntityType (line 16) | class EntityType(object):
    method __init__ (line 22) | def __init__(self):
  class AtlasEntity (line 43) | class AtlasEntity(pyatlas.geometry.Boundable):
    method __init__ (line 50) | def __init__(self, parent_atlas):
    method __eq__ (line 56) | def __eq__(self, other):
    method __ne__ (line 64) | def __ne__(self, other):
    method __hash__ (line 72) | def __hash__(self):
    method get_identifier (line 78) | def get_identifier(self):
    method get_tags (line 84) | def get_tags(self):
    method bounds (line 90) | def bounds(self):
    method intersects (line 96) | def intersects(self, polygon):
    method relations (line 102) | def relations(self):
    method get_type (line 108) | def get_type(self):
    method get_osm_identifier (line 114) | def get_osm_identifier(self):
    method get_parent_atlas (line 121) | def get_parent_atlas(self):
    method _get_relations_helper (line 127) | def _get_relations_helper(self, relation_map, index):
  class Point (line 144) | class Point(AtlasEntity):
    method __init__ (line 149) | def __init__(self, parent_atlas, index):
    method __str__ (line 156) | def __str__(self):
    method get_identifier (line 173) | def get_identifier(self):
    method as_location (line 179) | def as_location(self):
    method get_tags (line 186) | def get_tags(self):
    method bounds (line 193) | def bounds(self):
    method intersects (line 199) | def intersects(self, polygon):
    method relations (line 205) | def relations(self):
    method get_type (line 213) | def get_type(self):
  class Line (line 220) | class Line(AtlasEntity):
    method __init__ (line 225) | def __init__(self, parent_atlas, index):
    method __str__ (line 232) | def __str__(self):
    method as_polyline (line 249) | def as_polyline(self):
    method get_identifier (line 255) | def get_identifier(self):
    method get_tags (line 261) | def get_tags(self):
    method bounds (line 268) | def bounds(self):
    method intersects (line 274) | def intersects(self, polygon):
    method relations (line 280) | def relations(self):
    method get_type (line 288) | def get_type(self):
  class Area (line 295) | class Area(AtlasEntity):
    method __init__ (line 300) | def __init__(self, parent_atlas, index):
    method __str__ (line 307) | def __str__(self):
    method get_identifier (line 324) | def get_identifier(self):
    method as_polygon (line 330) | def as_polygon(self):
    method get_tags (line 336) | def get_tags(self):
    method bounds (line 343) | def bounds(self):
    method intersects (line 349) | def intersects(self, polygon):
    method relations (line 355) | def relations(self):
    method get_type (line 363) | def get_type(self):
  class Node (line 370) | class Node(AtlasEntity):
    method __init__ (line 376) | def __init__(self, parent_atlas, index):
    method __str__ (line 383) | def __str__(self):
    method get_identifier (line 410) | def get_identifier(self):
    method as_location (line 416) | def as_location(self):
    method get_tags (line 423) | def get_tags(self):
    method bounds (line 430) | def bounds(self):
    method intersects (line 436) | def intersects(self, polygon):
    method in_edges (line 442) | def in_edges(self):
    method out_edges (line 453) | def out_edges(self):
    method connected_edges (line 464) | def connected_edges(self):
    method get_absolute_valence (line 476) | def get_absolute_valence(self):
    method get_valence (line 483) | def get_valence(self):
    method relations (line 495) | def relations(self):
    method get_type (line 503) | def get_type(self):
  class Edge (line 510) | class Edge(AtlasEntity):
    method __init__ (line 520) | def __init__(self, parent_atlas, index):
    method __str__ (line 527) | def __str__(self):
    method __lt__ (line 553) | def __lt__(self, other):
    method as_polyline (line 560) | def as_polyline(self):
    method get_identifier (line 566) | def get_identifier(self):
    method get_tags (line 573) | def get_tags(self):
    method bounds (line 580) | def bounds(self):
    method intersects (line 586) | def intersects(self, polygon):
    method relations (line 592) | def relations(self):
    method connected_nodes (line 600) | def connected_nodes(self):
    method connected_edges (line 609) | def connected_edges(self):
    method start (line 624) | def start(self):
    method end (line 632) | def end(self):
    method get_master_edge (line 640) | def get_master_edge(self):
    method is_master_edge (line 649) | def is_master_edge(self):
    method has_reversed_edge (line 655) | def has_reversed_edge(self):
    method is_reversed_edge (line 661) | def is_reversed_edge(self, candidate):
    method get_reversed_edge (line 669) | def get_reversed_edge(self):
    method get_highway_tag_value (line 678) | def get_highway_tag_value(self):
    method is_connected_at_end_to (line 689) | def is_connected_at_end_to(self, candidates):
    method is_connected_at_start_to (line 703) | def is_connected_at_start_to(self, candidates):
    method is_way_sectioned (line 717) | def is_way_sectioned(self):
    method get_type (line 723) | def get_type(self):
  class Relation (line 730) | class Relation(AtlasEntity):
    method __init__ (line 736) | def __init__(self, parent_atlas, index):
    method __str__ (line 743) | def __str__(self):
    method get_identifier (line 764) | def get_identifier(self):
    method get_members (line 770) | def get_members(self):
    method get_tags (line 808) | def get_tags(self):
    method bounds (line 815) | def bounds(self):
    method intersects (line 836) | def intersects(self, polygon):
    method relations (line 851) | def relations(self):
    method get_type (line 859) | def get_type(self):
  class RelationMember (line 866) | class RelationMember(object):
    method __init__ (line 872) | def __init__(self, role, entity, identifier):
    method __lt__ (line 880) | def __lt__(self, other):
    method __str__ (line 900) | def __str__(self):
    method get_entity (line 911) | def get_entity(self):
    method get_relation_identifier (line 917) | def get_relation_identifier(self):
    method get_role (line 923) | def get_role(self):
  function entity_type_to_str (line 930) | def entity_type_to_str(value):

FILE: pyatlas/pyatlas/atlas_metadata.py
  class AtlasMetaData (line 6) | class AtlasMetaData(object):
    method __init__ (line 25) | def __init__(self):
  function _get_atlas_metadata_from_proto (line 40) | def _get_atlas_metadata_from_proto(proto_atlas_metadata):

FILE: pyatlas/pyatlas/geometry.py
  class Boundable (line 28) | class Boundable(object):
    method __init__ (line 33) | def __init__(self):
    method bounds (line 36) | def bounds(self):
    method intersects (line 42) | def intersects(self, polygon):
  class Location (line 49) | class Location(Boundable):
    method __init__ (line 65) | def __init__(self, latitude, longitude):
    method __str__ (line 84) | def __str__(self):
    method __eq__ (line 92) | def __eq__(self, other):
    method __ne__ (line 99) | def __ne__(self, other):
    method __hash__ (line 105) | def __hash__(self):
    method get_as_packed_int (line 113) | def get_as_packed_int(self):
    method bounds (line 123) | def bounds(self):
    method intersects (line 129) | def intersects(self, polygon):
    method get_latitude (line 135) | def get_latitude(self):
    method get_latitude_deg (line 141) | def get_latitude_deg(self):
    method get_longitude (line 147) | def get_longitude(self):
    method get_longitude_deg (line 153) | def get_longitude_deg(self):
  class PolyLine (line 160) | class PolyLine(Boundable):
    method __init__ (line 165) | def __init__(self, location_list, deep=False):
    method __str__ (line 181) | def __str__(self):
    method __eq__ (line 188) | def __eq__(self, other):
    method __ne__ (line 200) | def __ne__(self, other):
    method __hash__ (line 211) | def __hash__(self):
    method compress (line 220) | def compress(self):
    method bounds (line 253) | def bounds(self):
    method intersects_polyline (line 259) | def intersects_polyline(self, polyline):
    method intersects (line 267) | def intersects(self, polygon):
    method get_locations_list (line 273) | def get_locations_list(self):
    method length (line 279) | def length(self):
    method locations (line 293) | def locations(self):
  class Polygon (line 301) | class Polygon(PolyLine):
    method __init__ (line 308) | def __init__(self, location_list, deep=False):
    method __str__ (line 316) | def __str__(self):
    method fully_geometrically_encloses_location (line 323) | def fully_geometrically_encloses_location(self, location):
    method _overlaps_polygon (line 332) | def _overlaps_polygon(self, polygon):
    method overlaps_polyline (line 344) | def overlaps_polyline(self, polyline):
    method closed_loop (line 356) | def closed_loop(self):
    method intersects (line 365) | def intersects(self, polygon):
  class Rectangle (line 373) | class Rectangle(Polygon):
    method __init__ (line 378) | def __init__(self, lower_left, upper_right):
    method get_lower_left (line 390) | def get_lower_left(self):
    method get_upper_right (line 396) | def get_upper_right(self):
  function location_with_degrees (line 403) | def location_with_degrees(latitude, longitude):
  function location_from_packed_int (line 412) | def location_from_packed_int(packed_location):
  function degree_as_dm7 (line 428) | def degree_as_dm7(degree):
  function dm7_as_degree (line 436) | def dm7_as_degree(dm7):
  function decompress_polyline (line 443) | def decompress_polyline(bytestring):
  function decompress_polygon (line 452) | def decompress_polygon(bytestring):
  function bounds_locations (line 461) | def bounds_locations(locations):
  function bounds_atlasentities (line 490) | def bounds_atlasentities(entities):
  function location_haversine_distance (line 520) | def location_haversine_distance(location1, location2):
  function convert_to_radians (line 540) | def convert_to_radians(degree):
  function convert_to_degrees (line 547) | def convert_to_degrees(radian):
  function boundable_to_shapely_box (line 554) | def boundable_to_shapely_box(boundable):
  function polygon_to_shapely_polygon (line 562) | def polygon_to_shapely_polygon(polygon):
  function polygon_to_shapely_polygon_wkt_compat (line 573) | def polygon_to_shapely_polygon_wkt_compat(polygon):
  function location_to_shapely_point (line 585) | def location_to_shapely_point(location):
  function location_to_shapely_point_wkt_compat (line 595) | def location_to_shapely_point_wkt_compat(location):
  function polyline_to_shapely_linestring (line 606) | def polyline_to_shapely_linestring(polyline):
  function polyline_to_shapely_linestring_wkt_compat (line 617) | def polyline_to_shapely_linestring_wkt_compat(polyline):
  function _encode_number (line 629) | def _encode_number(number):
  function _decompress_bytestring (line 645) | def _decompress_bytestring(bytestring):
  function _urshift32 (line 701) | def _urshift32(to_shift, shift_amount):

FILE: pyatlas/pyatlas/identifier_converters.py
  function get_osm_identifier (line 9) | def get_osm_identifier(full_atlas_identifier):
  function get_country_code (line 21) | def get_country_code(full_atlas_identifier):
  function get_way_section_index (line 32) | def get_way_section_index(full_atlas_identifier):

FILE: pyatlas/pyatlas/pyatlas_globalfunc.py
  function hello_atlas (line 6) | def hello_atlas():

FILE: pyatlas/pyatlas/spatial_index.py
  class SpatialIndex (line 12) | class SpatialIndex(object):
    method __init__ (line 20) | def __init__(self, parent_atlas, entity_type, initial_entities=None):
    method initialize_rtree (line 35) | def initialize_rtree(self):
    method initialize_quadtree (line 43) | def initialize_quadtree(self):
    method add (line 51) | def add(self, entity):
    method get (line 63) | def get(self, bounds, predicate=lambda e: True):
  class _RTree (line 80) | class _RTree(object):
    method __init__ (line 97) | def __init__(self, initial_entities=None):
    method _construct_tree_from_contents (line 109) | def _construct_tree_from_contents(self):
    method add (line 125) | def add(self, entity):
    method get (line 135) | def get(self, boundable):
  class _CustomSTRtree (line 147) | class _CustomSTRtree(object):
    method __init__ (line 153) | def __init__(self, items):
    method __del__ (line 168) | def __del__(self):
    method get (line 173) | def get(self, geom):

FILE: pyatlas/resources/CreateTestAtlas.java
  class CreateTestAtlas (line 25) | public class CreateTestAtlas
    method main (line 27) | public static void main(final String[] args)
    method createTestAtlas (line 32) | private static void createTestAtlas()

FILE: pyatlas/unit_tests/test_atlas.py
  class AtlasTest (line 9) | class AtlasTest(unittest.TestCase):
    method setUp (line 10) | def setUp(self):
    method test_lazy_loading (line 13) | def test_lazy_loading(self):
    method test_upfront_loading (line 23) | def test_upfront_loading(self):
    method test_point_spatial_index (line 33) | def test_point_spatial_index(self):
    method test_line_spatial_index (line 50) | def test_line_spatial_index(self):
    method test_area_spatial_index (line 62) | def test_area_spatial_index(self):
    method test_node_spatial_index (line 72) | def test_node_spatial_index(self):
    method test_edge_spatial_index (line 89) | def test_edge_spatial_index(self):
    method test_relation_spatial_index (line 101) | def test_relation_spatial_index(self):
  function _touch_all_atlas_features (line 112) | def _touch_all_atlas_features(atlas):

FILE: pyatlas/unit_tests/test_identifier_converters.py
  class IdentifierConvertersTest (line 6) | class IdentifierConvertersTest(unittest.TestCase):
    method setUp (line 7) | def setUp(self):
    method test_osm_conversion (line 10) | def test_osm_conversion(self):
    method test_country_code_conversion (line 27) | def test_country_code_conversion(self):
    method test_way_section_conversion (line 44) | def test_way_section_conversion(self):

FILE: pyatlas/unit_tests/test_location.py
  class LocationTest (line 7) | class LocationTest(unittest.TestCase):
    method setUp (line 8) | def setUp(self):
    method test_location_packing (line 11) | def test_location_packing(self):
    method test_location_conversion (line 36) | def test_location_conversion(self):
    method test_location_bounds (line 62) | def test_location_bounds(self):

FILE: pyatlas/unit_tests/test_polygon_converters.py
  class PolygonConvertersTest (line 10) | class PolygonConvertersTest(unittest.TestCase):
    method setUp (line 11) | def setUp(self):
    method test_boundable_to_shapely_box (line 14) | def test_boundable_to_shapely_box(self):
    method test_polygon_to_shapely_polygon (line 31) | def test_polygon_to_shapely_polygon(self):
    method test_location_to_shapely_point (line 48) | def test_location_to_shapely_point(self):
    method test_polyline_to_shapely_linestring (line 61) | def test_polyline_to_shapely_linestring(self):

FILE: pyatlas/unit_tests/test_polyline_polygon.py
  class PolyLinePolygonTest (line 7) | class PolyLinePolygonTest(unittest.TestCase):
    method setUp (line 8) | def setUp(self):
    method test_polyline_compression (line 11) | def test_polyline_compression(self):
    method test_polygon_closedness (line 29) | def test_polygon_closedness(self):
    method test_poly_bounds (line 44) | def test_poly_bounds(self):
    method test_poly_length (line 69) | def test_poly_length(self):
    method test_fully_geometrically_encloses_location (line 78) | def test_fully_geometrically_encloses_location(self):
    method test_overlaps_polyline (line 96) | def test_overlaps_polyline(self):
    method test_intersects_polygon (line 109) | def test_intersects_polygon(self):
    method test_intersects_polyline (line 122) | def test_intersects_polyline(self):

FILE: pyatlas/unit_tests/test_rectangle.py
  class RectangleTest (line 8) | class RectangleTest(unittest.TestCase):
    method setUp (line 9) | def setUp(self):
    method test_rectangle_construction (line 12) | def test_rectangle_construction(self):
    method test_location_bounding_calculation (line 26) | def test_location_bounding_calculation(self):
    method test_entity_bounding_calculation_on_relations (line 49) | def test_entity_bounding_calculation_on_relations(self):

FILE: pyatlas/unit_tests/test_spatial_index.py
  class SpatialIndexTest (line 11) | class SpatialIndexTest(unittest.TestCase):
    method setUp (line 12) | def setUp(self):
    method test_rtree (line 15) | def test_rtree(self):
    method test_basic_spatial_index_operations (line 31) | def test_basic_spatial_index_operations(self):

FILE: pyatlas/yapf_format.py
  function main (line 10) | def main(argv):
  function detect_formatting_violation (line 39) | def detect_formatting_violation(filepath):
  function read_file_contents (line 48) | def read_file_contents(filepath):

FILE: sample/src/main/java/org/openstreetmap/atlas/sample/Sample.java
  class Sample (line 28) | public class Sample extends Command
    method main (line 40) | public static void main(final String[] args)
    method onRun (line 45) | @Override
    method switches (line 98) | @Override

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/PolygonPerformanceTest.java
  class PolygonPerformanceTest (line 22) | public class PolygonPerformanceTest
    method testCoverPerformanceHelper (line 28) | private static void testCoverPerformanceHelper(final int size, final R...
    method testPerformance (line 73) | @Ignore

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/AtlasIntegrationTest.java
  class AtlasIntegrationTest (line 24) | public class AtlasIntegrationTest
    method loadCuba (line 28) | public static Atlas loadCuba()
    method loadBahamas (line 40) | protected Atlas loadBahamas(final Polygon polygon)
    method loadBelizeRaw (line 51) | protected Atlas loadBelizeRaw(final Polygon polygon,

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/SubAtlasIntegrationTest.java
  class SubAtlasIntegrationTest (line 13) | public class SubAtlasIntegrationTest extends AtlasIntegrationTest
    method testSubCuba (line 15) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/builder/text/TextAtlasBuilderIntegrationTest.java
  class TextAtlasBuilderIntegrationTest (line 12) | public class TextAtlasBuilderIntegrationTest
    method testLoad (line 17) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/delta/AtlasDeltaGeoJsonIntegrationTest.java
  class AtlasDeltaGeoJsonIntegrationTest (line 20) | public class AtlasDeltaGeoJsonIntegrationTest
    method parseGeoJson (line 30) | @Test
    method readAtlases (line 63) | @Before
    method testGeoJson (line 82) | @Test
    method testRelationsGeoJson (line 89) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/delta/AtlasDeltaIntegrationTest.java
  class AtlasDeltaIntegrationTest (line 18) | public class AtlasDeltaIntegrationTest
    method testDiff (line 22) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/dynamic/DynamicAtlasIntegrationTest.java
  class DynamicAtlasIntegrationTest (line 20) | public class DynamicAtlasIntegrationTest
    method testAreas (line 30) | @Test
    method testEdges (line 37) | @Test
    method testLines (line 44) | @Test
    method testNodes (line 51) | @Test
    method testPoints (line 58) | @Test
    method testRelations (line 65) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/AtlasEntityTypeTest.java
  class AtlasEntityTypeTest (line 13) | public class AtlasEntityTypeTest extends AtlasIntegrationTest
    method testTypeRetrieval (line 16) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/complex/boundaries/ComplexBoundariesIntegrationTest.java
  class ComplexBoundariesIntegrationTest (line 15) | public class ComplexBoundariesIntegrationTest
    method testComplexBoundary (line 20) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/complex/boundaries/ComplexBoundaryIntegrationTestRule.java
  class ComplexBoundaryIntegrationTestRule (line 10) | public class ComplexBoundaryIntegrationTestRule extends CoreTestRule
    method getAtlas (line 15) | public Atlas getAtlas()

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/multi/MultiAtlasIntegrationTest.java
  class MultiAtlasIntegrationTest (line 26) | public class MultiAtlasIntegrationTest extends AtlasIntegrationTest
    method main (line 32) | public static void main(final String[] args)
    method largeMultiAtlas (line 38) | public MultiAtlas largeMultiAtlas(final int count, final long eachSize)
    method loadTest (line 52) | public void loadTest(final boolean overWrite, final int count, final l...
    method testPolygonRetrieval (line 97) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/multi/MultiAtlasIntegrationTestRule.java
  class MultiAtlasIntegrationTestRule (line 10) | public class MultiAtlasIntegrationTestRule extends CoreTestRule
    method getAtlas1 (line 17) | public Atlas getAtlas1()
    method getAtlas2 (line 22) | public Atlas getAtlas2()

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/packed/PackedAtlasClonerIntegrationTest.java
  class PackedAtlasClonerIntegrationTest (line 12) | public class PackedAtlasClonerIntegrationTest extends AtlasIntegrationTest
    method cloneRealCountry (line 14) | @Test
    method cloneTest (line 20) | @Test
    method cloneAndCompare (line 30) | private void cloneAndCompare(final Atlas atlas)

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/packed/PackedAtlasIntegrationTest.java
  class PackedAtlasIntegrationTest (line 25) | public class PackedAtlasIntegrationTest extends AtlasIntegrationTest
    method main (line 29) | public static void main(final String[] args)
    method loadTest (line 34) | public void loadTest(final boolean overWrite, final long size)
    method testPolygonRetrieval (line 85) | @Test
    method testSerialization (line 98) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/pbf/OsmPbfIngestIntegrationTest.java
  class OsmPbfIngestIntegrationTest (line 42) | public class OsmPbfIngestIntegrationTest extends AtlasIntegrationTest
    method testAreaAndLine (line 44) | @Test
    method testEdgeAndNode (line 76) | @Test
    method testPoint (line 130) | @Test
    method testPolygonLoading (line 147) | @Test
    method testRestrictionAndMultiPolygon (line 163) | @Test
    method testRoute (line 206) | @Test
    method testWaysSpanningOutsideOfCountry (line 231) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/pbf/slicing/AtlasSectionProcessorIntegrationTest.java
  class AtlasSectionProcessorIntegrationTest (line 21) | public class AtlasSectionProcessorIntegrationTest extends AtlasIntegrati...
    method createAtlas (line 26) | @Before
    method testPrimaryWay (line 47) | @Test
    method testSelfIntersectionRing (line 72) | @Test
    method testShapePointOrder (line 87) | @Test
    method testTotalCounts (line 106) | @Test
    method testWaterWay (line 128) | @Test
    method testWayAcrossArea (line 137) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/raw/DynamicRawAtlasSectioningTestRule.java
  class DynamicRawAtlasSectioningTestRule (line 15) | public class DynamicRawAtlasSectioningTestRule extends CoreTestRule
    method getAtlasz7x62y61 (line 157) | public Atlas getAtlasz7x62y61()
    method getAtlasz8x123y122 (line 162) | public Atlas getAtlasz8x123y122()
    method getAtlasz8x123y123 (line 167) | public Atlas getAtlasz8x123y123()

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/raw/RawAtlasIntegrationTest.java
  class RawAtlasIntegrationTest (line 45) | public class RawAtlasIntegrationTest
    method testPbfToSlicedAtlasWithExpansion (line 110) | @Test
    method testPbfToSlicedRawAtlas (line 180) | @Test
    method testSectioningFromShard (line 234) | @Ignore
    method testStandAloneNodeIngest (line 274) | @Ignore
    method testTwoWaysWithDifferentLayersIntersectingAtEnd (line 297) | @Test
    method testTwoWaysWithDifferentLayersIntersectingAtStart (line 330) | @Test
    method testTwoWaysWithDifferentLayersIntersectingInMiddle (line 368) | @Test
    method assertAllEntitiesHaveCountryCode (line 400) | private void assertAllEntitiesHaveCountryCode(final Atlas atlas)
    method generateSectionedAtlasStartingAtShard (line 416) | private Atlas generateSectionedAtlasStartingAtShard(final Shard shard,
    method prepareShardStore (line 426) | private Map<Shard, Atlas> prepareShardStore()

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/routing/AtlasRoutingIntegrationTest.java
  class AtlasRoutingIntegrationTest (line 23) | public class AtlasRoutingIntegrationTest extends AtlasIntegrationTest
    class ExpectedRoute (line 28) | private static final class ExpectedRoute
      method ExpectedRoute (line 35) | ExpectedRoute(final Location start, final Location end,
      method getEnd (line 44) | public Location getEnd()
      method getExpectedMaximumLength (line 49) | public Distance getExpectedMaximumLength()
      method getExpectedMaximumSize (line 54) | public int getExpectedMaximumSize()
      method getStart (line 59) | public Location getStart()
    method destroy (line 88) | @After
    method initialize (line 95) | @Before
    method testRouting (line 103) | @Test
    method route (line 115) | private Route route(final Location start, final Location end)

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/boundary/CountryBoundaryMapArchiverIntegrationTest.java
  class CountryBoundaryMapArchiverIntegrationTest (line 17) | public class CountryBoundaryMapArchiverIntegrationTest
    method testOceanBoundary (line 19) | @Test

FILE: src/integrationTest/java/org/openstreetmap/atlas/geography/boundary/CountryBoundaryMapIntegrationTest.java
  class CountryBoundaryMapIntegrationTest (line 12) | public class CountryBoundaryMapIntegrationTest
    method testCountryBoundaryMapFromAtlas (line 18) | @Test

FILE: src/main/java/org/openstreetmap/atlas/event/Event.java
  class Event (line 10) | public abstract class Event
    method Event (line 17) | protected Event()
    method getTimestamp (line 22) | protected Date getTimestamp()

FILE: src/main/java/org/openstreetmap/atlas/event/EventService.java
  class EventService (line 24) | public final class EventService<T extends Event> implements EventService...
    method get (line 47) | public static <T extends Event> EventService get(final String key)
    method EventService (line 53) | private EventService()
    method complete (line 62) | @Override
    method post (line 81) | @Override
    method register (line 105) | @Override
    method unregister (line 118) | @Override

FILE: src/main/java/org/openstreetmap/atlas/event/EventServiceable.java
  type EventServiceable (line 12) | public interface EventServiceable<T extends Event>
    method complete (line 18) | void complete();
    method post (line 26) | void post(T event);
    method register (line 34) | void register(Processor<T> processor);
    method unregister (line 42) | void unregister(Processor<T> processor);

FILE: src/main/java/org/openstreetmap/atlas/event/Processor.java
  type Processor (line 10) | public interface Processor<T extends Event>
    method process (line 20) | void process(ShutdownEvent event);
    method process (line 30) | void process(T event);

FILE: src/main/java/org/openstreetmap/atlas/event/ShutdownEvent.java
  class ShutdownEvent (line 8) | public class ShutdownEvent extends Event

FILE: src/main/java/org/openstreetmap/atlas/exception/CoreException.java
  class CoreException (line 30) | public class CoreException extends RuntimeException
    method supplier (line 54) | public static Supplier<CoreException> supplier(final String message)
    method supplier (line 59) | public static Supplier<CoreException> supplier(final String message, f...
    method supplier (line 64) | public static Supplier<CoreException> supplier(final String message, f...
    method messageWithToken (line 69) | protected static String messageWithToken(final String message)
    method CoreException (line 76) | public CoreException(final String message)
    method CoreException (line 90) | public CoreException(final String message, final Object... arguments)
    method CoreException (line 96) | public CoreException(final String message, final Throwable cause)
    method CoreException (line 101) | public CoreException(final String message, final Throwable cause, fina...

FILE: src/main/java/org/openstreetmap/atlas/exception/ExceptionSearch.java
  class ExceptionSearch (line 12) | public final class ExceptionSearch<T extends Throwable>
    method find (line 16) | public static <T extends Throwable> ExceptionSearch<T> find(final Clas...
    method ExceptionSearch (line 25) | private ExceptionSearch(final Class<T> target)
    method within (line 30) | public Optional<T> within(final Throwable source)
    method within0 (line 39) | private T within0(final Throwable source)

FILE: src/main/java/org/openstreetmap/atlas/exception/LoadAtlasFromResourceException.java
  class LoadAtlasFromResourceException (line 11) | public class LoadAtlasFromResourceException extends CoreException
    method LoadAtlasFromResourceException (line 17) | public LoadAtlasFromResourceException(final Resource resource, final S...
    method LoadAtlasFromResourceException (line 23) | public LoadAtlasFromResourceException(final Resource resource, final S...
    method LoadAtlasFromResourceException (line 30) | public LoadAtlasFromResourceException(final Resource resource, final S...
    method LoadAtlasFromResourceException (line 37) | public LoadAtlasFromResourceException(final Resource resource, final S...
    method getResource (line 44) | public Resource getResource()

FILE: src/main/java/org/openstreetmap/atlas/exception/change/FeatureChangeMergeException.java
  class FeatureChangeMergeException (line 15) | public class FeatureChangeMergeException extends CoreException
    method truncate (line 22) | static String truncate(final String input)
    method FeatureChangeMergeException (line 27) | public FeatureChangeMergeException(final List<MergeFailureType> failur...
    method FeatureChangeMergeException (line 38) | public FeatureChangeMergeException(final List<MergeFailureType> failur...
    method FeatureChangeMergeException (line 50) | public FeatureChangeMergeException(final MergeFailureType rootLevelFai...
    method FeatureChangeMergeException (line 63) | public FeatureChangeMergeException(final MergeFailureType rootLevelFai...
    method failureAtFrameIndex (line 84) | public MergeFailureType failureAtFrameIndex(final int index)
    method failureTraceSize (line 98) | public int failureTraceSize()
    method getMergeFailureTrace (line 103) | public List<MergeFailureType> getMergeFailureTrace()
    method rootLevelFailure (line 115) | public MergeFailureType rootLevelFailure()
    method topLevelFailure (line 127) | public MergeFailureType topLevelFailure()
    method traceContainsExactFailureSubSequence (line 144) | public boolean traceContainsExactFailureSubSequence(final List<MergeFa...
    method traceContainsFailureType (line 185) | public boolean traceContainsFailureType(final MergeFailureType type)
    method traceMatchesExactFailureSequence (line 205) | public boolean traceMatchesExactFailureSequence(final List<MergeFailur...
    method withNewTopLevelFailure (line 225) | public List<MergeFailureType> withNewTopLevelFailure(final MergeFailur...

FILE: src/main/java/org/openstreetmap/atlas/exception/change/MergeFailureType.java
  type MergeFailureType (line 6) | public enum MergeFailureType
    method MergeFailureType (line 72) | MergeFailureType(final String description)
    method getDescription (line 77) | public String getDescription()

FILE: src/main/java/org/openstreetmap/atlas/geography/Altitude.java
  class Altitude (line 25) | public final class Altitude implements Serializable
    method meters (line 38) | public static Altitude meters(final double meters)
    method Altitude (line 43) | private Altitude(final double meters)
    method asMeters (line 60) | public double asMeters()
    method equals (line 65) | @Override
    method hashCode (line 76) | @Override
    method toString (line 82) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/CompressedPolyLine.java
  class CompressedPolyLine (line 13) | public class CompressedPolyLine implements Located, Serializable
    class ByteSign (line 18) | private static class ByteSign
      method ByteSign (line 23) | ByteSign(final byte[] bytes, final boolean sign)
      method getBytes (line 29) | public byte[] getBytes()
      method isSign (line 34) | public boolean isSign()
    method CompressedPolyLine (line 51) | public CompressedPolyLine(final byte[][] positions, final boolean[] si...
    method CompressedPolyLine (line 63) | public CompressedPolyLine(final PolyLine polyLine)
    method asPolyLine (line 99) | public PolyLine asPolyLine()
    method bounds (line 123) | @Override
    method getPositions (line 129) | public byte[][] getPositions()
    method getSigns (line 134) | public boolean[] getSigns()
    method toString (line 139) | @Override
    method expand (line 155) | private int expand(final byte[] result, final int index)
    method shrink (line 184) | private ByteSign shrink(final int value)

FILE: src/main/java/org/openstreetmap/atlas/geography/CompressedPolygon.java
  class CompressedPolygon (line 8) | public class CompressedPolygon extends CompressedPolyLine
    method CompressedPolygon (line 12) | public CompressedPolygon(final byte[][] positions, final boolean[] signs)
    method CompressedPolygon (line 17) | public CompressedPolygon(final Polygon polygon)
    method asPolygon (line 22) | public Polygon asPolygon()

FILE: src/main/java/org/openstreetmap/atlas/geography/GeometricObject.java
  type GeometricObject (line 6) | public interface GeometricObject
    method intersects (line 10) | boolean intersects(PolyLine other);

FILE: src/main/java/org/openstreetmap/atlas/geography/GeometricSurface.java
  type GeometricSurface (line 10) | public interface GeometricSurface extends Located, GeometryPrintable, Ge...
    method fullyGeometricallyEncloses (line 12) | boolean fullyGeometricallyEncloses(Location location);
    method fullyGeometricallyEncloses (line 14) | boolean fullyGeometricallyEncloses(MultiPolygon multiPolygon);
    method fullyGeometricallyEncloses (line 16) | boolean fullyGeometricallyEncloses(PolyLine polyLine);
    method overlaps (line 18) | boolean overlaps(MultiPolygon multiPolygon);
    method overlaps (line 20) | boolean overlaps(PolyLine polyLine);
    method surface (line 27) | Surface surface();
    method surfaceOnSphere (line 35) | Surface surfaceOnSphere();

FILE: src/main/java/org/openstreetmap/atlas/geography/GeometryPrintable.java
  type GeometryPrintable (line 8) | public interface GeometryPrintable extends GeoJson, WktPrintable, WkbPri...

FILE: src/main/java/org/openstreetmap/atlas/geography/Heading.java
  class Heading (line 13) | public class Heading extends Angle
    method degrees (line 32) | public static Heading degrees(final double degrees)
    method dm7 (line 42) | public static Heading dm7(final long dm7)
    method radians (line 69) | public static Heading radians(final double radians)
    method Heading (line 74) | protected Heading(final int dm7)
    method asDm7 (line 79) | @Override
    method toString (line 86) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/Latitude.java
  class Latitude (line 11) | public class Latitude extends Angle
    method degrees (line 27) | public static Latitude degrees(final double degrees)
    method dm7 (line 37) | public static Latitude dm7(final long dm7)
    method radians (line 53) | public static Latitude radians(final double radians)
    method radiansBounded (line 65) | public static Latitude radiansBounded(final double radians)
    method Latitude (line 85) | protected Latitude(final int dm7)
    method toString (line 94) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/Located.java
  type Located (line 9) | public interface Located
    method bounds (line 14) | Rectangle bounds();
    method within (line 25) | default boolean within(GeometricSurface surface)

FILE: src/main/java/org/openstreetmap/atlas/geography/Location.java
  class Location (line 30) | public class Location implements Located, Iterable<Location>, Serializab...
    method forString (line 72) | public static Location forString(final String locationString)
    method forStringLongitudeLatitude (line 90) | public static Location forStringLongitudeLatitude(final String locatio...
    method forWkt (line 107) | public static Location forWkt(final String wkt)
    method random (line 117) | public static Location random(final Rectangle bounds)
    method Location (line 134) | public Location(final Latitude latitude, final Longitude longitude)
    method Location (line 154) | public Location(final Location other)
    method Location (line 171) | public Location(final long concatenation)
    method asConcatenation (line 183) | public long asConcatenation()
    method asGeoJsonGeometry (line 191) | @Override
    method bounds (line 197) | @Override
    method boxAround (line 211) | public Rectangle boxAround(final Distance extension)
    method distanceTo (line 225) | public Distance distanceTo(final Location that)
    method equals (line 236) | @Override
    method equirectangularDistanceTo (line 258) | public Distance equirectangularDistanceTo(final Location that)
    method getGeoJsonType (line 272) | @Override
    method getLatitude (line 281) | public Latitude getLatitude()
    method getLongitude (line 289) | public Longitude getLongitude()
    method hasSameLatitudeAs (line 300) | public boolean hasSameLatitudeAs(final Location other)
    method hasSameLongitudeAs (line 311) | public boolean hasSameLongitudeAs(final Location other)
    method hashCode (line 316) | @Override
    method haversineDistanceTo (line 335) | public Distance haversineDistanceTo(final Location that)
    method headingTo (line 361) | public Heading headingTo(final Location that)
    method intersects (line 382) | @Override
    method isEastOf (line 393) | public boolean isEastOf(final Location other)
    method isEastOfOrOnTheSameLatitudeAs (line 404) | public boolean isEastOfOrOnTheSameLatitudeAs(final Location other)
    method isNorthOf (line 414) | public boolean isNorthOf(final Location other)
    method isNorthOfOrOnTheSameLatitudeAs (line 425) | public boolean isNorthOfOrOnTheSameLatitudeAs(final Location other)
    method iterator (line 430) | @Override
    method loxodromicMidPoint (line 444) | public Location loxodromicMidPoint(final Location that)
    method midPoint (line 488) | public Location midPoint(final Location that)
    method shiftAlongGreatCircle (line 527) | public Location shiftAlongGreatCircle(final Heading initialHeading, fi...
    method snapTo (line 562) | public SnappedLocation snapTo(final MultiPolygon shape)
    method snapTo (line 574) | public SnappedLocation snapTo(final PolyLine shape)
    method toCompactString (line 579) | public String toCompactString()
    method toEarthCenteredEarthFixedCoordinate (line 587) | public EarthCenteredEarthFixedCoordinate toEarthCenteredEarthFixedCoor...
    method toGeodeticCoordinate (line 595) | public GeodeticCoordinate toGeodeticCoordinate()
    method toString (line 600) | @Override
    method toWkb (line 606) | @Override
    method toWkt (line 612) | @Override
    method within (line 618) | @Override
    method asAwtPoint (line 624) | protected Point2D asAwtPoint()

FILE: src/main/java/org/openstreetmap/atlas/geography/Longitude.java
  class Longitude (line 11) | public class Longitude extends Angle
    method degrees (line 26) | public static Longitude degrees(final double degrees)
    method dm7 (line 36) | public static Longitude dm7(final long dm7)
    method radians (line 54) | public static Longitude radians(final double radians)
    method radiansBounded (line 66) | public static Longitude radiansBounded(final double radians)
    method Longitude (line 86) | protected Longitude(final int dm7)
    method asDm7 (line 95) | @Override
    method isCloserViaAntimeridianTo (line 115) | public boolean isCloserViaAntimeridianTo(final Longitude that)
    method toString (line 121) | @Override
    method assertDm7 (line 127) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/MultiPolyLine.java
  class MultiPolyLine (line 29) | public class MultiPolyLine
    method wkt (line 42) | public static MultiPolyLine wkt(final String wkt)
    method MultiPolyLine (line 47) | public MultiPolyLine(final Iterable<? extends PolyLine> polyLines)
    method MultiPolyLine (line 52) | public MultiPolyLine(final List<? extends PolyLine> polyLines)
    method MultiPolyLine (line 61) | public MultiPolyLine(final PolyLine... polyLines)
    method asGeoJsonGeometry (line 66) | @Override
    method asLocationIterableProperties (line 75) | public Iterable<GeoJsonBuilder.LocationIterableProperties> asLocationI...
    method bounds (line 83) | @Override
    method equals (line 91) | @Override
    method getGeoJsonType (line 102) | @Override
    method getPolyLineList (line 108) | public List<PolyLine> getPolyLineList()
    method hashCode (line 113) | @Override
    method iterator (line 124) | @Override
    method toWkb (line 130) | @Override
    method toWkt (line 136) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/MultiPolygon.java
  class MultiPolygon (line 57) | public class MultiPolygon
    method forOuters (line 91) | public static MultiPolygon forOuters(final Iterable<Polygon> polygons)
    method forOuters (line 98) | public static MultiPolygon forOuters(final Polygon... polygons)
    method forPolygon (line 109) | public static MultiPolygon forPolygon(final Polygon polygon)
    method wkt (line 123) | public static MultiPolygon wkt(final String wkt)
    method MultiPolygon (line 128) | public MultiPolygon(final MultiMap<Polygon, Polygon> outerToInners)
    method asGeoJsonFeatureCollection (line 133) | public GeoJsonObject asGeoJsonFeatureCollection()
    method asGeoJsonGeometry (line 147) | @Override
    method asLocationIterableProperties (line 154) | public Iterable<LocationIterableProperties> asLocationIterableProperti...
    method asSimplePolygon (line 174) | public Optional<Polygon> asSimplePolygon()
    method bounds (line 184) | @Override
    method clip (line 203) | public Clip clip(final MultiPolygon clipping, final ClipType clipType)
    method concatenate (line 217) | public MultiPolygon concatenate(final MultiPolygon other)
    method equals (line 225) | @Override
    method fullyGeometricallyEncloses (line 266) | @Override
    method fullyGeometricallyEncloses (line 285) | @Override
    method fullyGeometricallyEncloses (line 302) | @Override
    method getGeoJsonType (line 318) | @Override
    method getOuterToInners (line 324) | public MultiMap<Polygon, Polygon> getOuterToInners()
    method hashCode (line 329) | @Override
    method inners (line 340) | public List<Polygon> inners()
    method innersOf (line 345) | public List<Polygon> innersOf(final Polygon outer)
    method intersects (line 354) | @Override
    method isEmpty (line 372) | public boolean isEmpty()
    method isOGCValid (line 381) | public boolean isOGCValid()
    method isOSMValid (line 392) | public boolean isOSMValid()
    method isSimilarTo (line 418) | public boolean isSimilarTo(final MultiPolygon other)
    method isSimplePolygon (line 429) | public boolean isSimplePolygon()
    method iterator (line 434) | @Override
    method merge (line 448) | public MultiPolygon merge(final MultiPolygon other)
    method outers (line 456) | public Set<Polygon> outers()
    method overlaps (line 461) | @Override
    method overlaps (line 473) | @Override
    method saveAsGeoJson (line 488) | public void saveAsGeoJson(final WritableResource resource)
    method surface (line 495) | @Override
    method surfaceOnSphere (line 510) | @Override
    method toCompactString (line 525) | public String toCompactString()
    method toReadableString (line 530) | public String toReadableString()
    method toSimpleString (line 549) | public String toSimpleString()
    method toString (line 559) | @Override
    method toWkb (line 565) | @Override
    method toWkt (line 571) | @Override
    method isLinear (line 577) | private boolean isLinear(final GeometricObject geometricObject)
    method isOSMValidSelfIntersection (line 591) | private boolean isOSMValidSelfIntersection(final Rectangle errorExpand...

FILE: src/main/java/org/openstreetmap/atlas/geography/PolyLine.java
  class PolyLine (line 58) | public class PolyLine implements Collection<Location>, Located, Serializ...
    method asGeoJson (line 84) | public static GeoJsonObject asGeoJson(final Iterable<? extends Iterabl...
    method random (line 99) | public static PolyLine random(final int numberPoints, final Rectangle ...
    method saveAsGeoJson (line 106) | public static void saveAsGeoJson(final Iterable<? extends Iterable<Loc...
    method wkb (line 122) | public static PolyLine wkb(final byte[] wkb)
    method wkt (line 134) | public static PolyLine wkt(final String wkt)
    method PolyLine (line 139) | public PolyLine(final Iterable<? extends Location> points)
    method PolyLine (line 144) | public PolyLine(final List<? extends Location> points)
    method PolyLine (line 153) | public PolyLine(final Location... points)
    method add (line 158) | @Override
    method addAll (line 164) | @Override
    method anglesGreaterThanOrEqualTo (line 180) | public List<Tuple<Angle, Location>> anglesGreaterThanOrEqualTo(final A...
    method anglesLessThanOrEqualTo (line 218) | public List<Tuple<Angle, Location>> anglesLessThanOrEqualTo(final Angl...
    method append (line 254) | public PolyLine append(final PolyLine other)
    method asGeoJsonGeometry (line 268) | @Override
    method averageDistanceTo (line 283) | public Distance averageDistanceTo(final PolyLine other)
    method averageOneWayDistanceTo (line 297) | public Distance averageOneWayDistanceTo(final PolyLine other)
    method between (line 322) | public PolyLine between(final Location start, final int startOccurrenc...
    method bounds (line 361) | @Override
    method clear (line 367) | @Override
    method clip (line 382) | public Clip clip(final MultiPolygon clipping, final ClipType clipType)
    method clip (line 396) | public Clip clip(final Polygon clipping, final ClipType clipType)
    method contains (line 406) | public boolean contains(final Location location)
    method contains (line 418) | @Override
    method contains (line 438) | public boolean contains(final Segment segment)
    method containsAll (line 451) | @Override
    method costDistanceToOneWay (line 465) | public PolyLineMatch costDistanceToOneWay(final Iterable<PolyLine> can...
    method equals (line 470) | @Override
    method equalsShape (line 490) | public boolean equalsShape(final PolyLine other)
    method finalHeading (line 499) | public Optional<Heading> finalHeading()
    method first (line 508) | public Location first()
    method get (line 518) | public Location get(final int index)
    method getGeoJsonType (line 528) | @Override
    method hashCode (line 534) | @Override
    method headingDifference (line 549) | public Optional<Angle> headingDifference()
    method initialHeading (line 582) | public Optional<Heading> initialHeading()
    method innerLocations (line 591) | public Iterable<Location> innerLocations()
    method intersections (line 596) | public Set<Location> intersections(final PolyLine candidate)
    method intersections (line 615) | public Set<Location> intersections(final Segment candidate)
    method intersects (line 637) | @Override
    method isClosed (line 647) | public boolean isClosed()
    method isEmpty (line 652) | @Override
    method isPoint (line 661) | public boolean isPoint()
    method isSimple (line 679) | public boolean isSimple()
    method iterator (line 688) | @Override
    method last (line 694) | public Location last()
    method length (line 699) | public Distance length()
    method maximumAngle (line 713) | public Angle maximumAngle()
    method maximumAngleLocation (line 746) | public Optional<Location> maximumAngleLocation()
    method middle (line 776) | public Location middle()
    method occurrences (line 789) | public int occurrences(final Location node)
    method offsetFromStart (line 813) | public Ratio offsetFromStart(final Location node, final int occurrence...
    method offsetFromStart (line 831) | public Location offsetFromStart(final Ratio ratio)
    method overallHeading (line 860) | public Optional<Heading> overallHeading()
    method overlapsShapeOf (line 889) | public boolean overlapsShapeOf(final PolyLine other)
    method prepend (line 917) | public PolyLine prepend(final PolyLine other)
    method remove (line 931) | @Override
    method removeAll (line 937) | @Override
    method retainAll (line 943) | @Override
    method reversed (line 949) | public PolyLine reversed()
    method saveAsGeoJson (line 959) | public void saveAsGeoJson(final WritableResource resource)
    method segments (line 976) | public List<Segment> segments()
    method selfIntersections (line 1010) | public Set<Location> selfIntersections()
    method selfIntersects (line 1061) | public boolean selfIntersects()
    method shiftFirstAlongGreatCircle (line 1084) | public PolyLine shiftFirstAlongGreatCircle(final Heading initialHeading,
    method shiftLastAlongGreatCircle (line 1092) | public PolyLine shiftLastAlongGreatCircle(final Heading initialHeading...
    method shortestDistanceTo (line 1106) | public Distance shortestDistanceTo(final PolyLine other)
    method shortestOneWayDistanceTo (line 1121) | public Distance shortestOneWayDistanceTo(final PolyLine other)
    method size (line 1132) | @Override
    method snapFrom (line 1145) | public SnappedLocation snapFrom(final Location origin)
    method toArray (line 1150) | @Override
    method toArray (line 1156) | @Override
    method toCompactString (line 1162) | public String toCompactString()
    method toSimpleString (line 1172) | public String toSimpleString()
    method toString (line 1183) | @Override
    method toWkb (line 1192) | @Override
    method toWkt (line 1206) | @Override
    method truncate (line 1227) | public Iterable<Location> truncate(final int indexFromStart, final int...
    method within (line 1240) | @Override
    method withoutDuplicateConsecutiveShapePoints (line 1250) | public PolyLine withoutDuplicateConsecutiveShapePoints()
    method getPoints (line 1277) | protected final List<Location> getPoints()

FILE: src/main/java/org/openstreetmap/atlas/geography/Polygon.java
  class Polygon (line 45) | public class Polygon extends PolyLine implements GeometricSurface
    method random (line 86) | public static Polygon random(final int numberPoints, final Rectangle b...
    method wkt (line 100) | public static Polygon wkt(final String wkt)
    method Polygon (line 105) | public Polygon(final Iterable<Location> points)
    method Polygon (line 110) | public Polygon(final List<Location> points)
    method Polygon (line 115) | public Polygon(final Location... points)
    method asGeoJsonGeometry (line 124) | @Override
    method attachedSegments (line 137) | public List<Segment> attachedSegments(final int vertexIndex)
    method center (line 165) | public Location center()
    method closedLoop (line 174) | public Iterable<Location> closedLoop()
    method fullyGeometricallyEncloses (line 203) | @Override
    method fullyGeometricallyEncloses (line 213) | @Override
    method fullyGeometricallyEncloses (line 233) | @Override
    method fullyGeometricallyEncloses (line 257) | public boolean fullyGeometricallyEncloses(final Rectangle rectangle)
    method getGeoJsonType (line 266) | @Override
    method interiorCenter (line 280) | public Location interiorCenter()
    method isApproximatelyNSided (line 295) | public boolean isApproximatelyNSided(final int expectedNumberOfSides, ...
    method isClockwise (line 361) | public boolean isClockwise()
    method isSimilarTo (line 404) | public boolean isSimilarTo(final Polygon other)
    method nextSegmentIndex (line 411) | public int nextSegmentIndex(final int currentVertexIndex)
    method nextVertexIndex (line 417) | public int nextVertexIndex(final int currentVertexIndex)
    method overlaps (line 430) | @Override
    method overlaps (line 449) | @Override
    method previousSegmentIndex (line 463) | public int previousSegmentIndex(final int currentVertexIndex)
    method previousVertexIndex (line 468) | public int previousVertexIndex(final int currentVertexIndex)
    method reversed (line 481) | @Override
    method segmentForIndex (line 487) | public Segment segmentForIndex(final int index)
    method segments (line 497) | @Override
    method surface (line 511) | @Override
    method surfaceOnSphere (line 538) | @Override
    method toWkb (line 566) | @Override
    method toWkt (line 575) | @Override
    method triangles (line 586) | public List<Polygon> triangles()
    method withoutVertex (line 607) | public Polygon withoutVertex(final int index)
    method withoutVertex (line 625) | public Polygon withoutVertex(final Location vertex)
    method loopOnItself (line 639) | private Iterable<Location> loopOnItself()
    method verifyVertexIndex (line 667) | private void verifyVertexIndex(final int index)

FILE: src/main/java/org/openstreetmap/atlas/geography/Rectangle.java
  class Rectangle (line 26) | public final class Rectangle extends Polygon
    method forBoundingBox (line 42) | public static Rectangle forBoundingBox(final BoundingBox boundingBox)
    method forCorners (line 60) | public static Rectangle forCorners(final Location lowerLeft, final Loc...
    method forLocated (line 87) | public static <T extends Located> Rectangle forLocated(final Iterable<...
    method forLocated (line 134) | public static Rectangle forLocated(final Located... locateds)
    method forLocations (line 146) | public static Rectangle forLocations(final Iterable<Location> locations)
    method forLocations (line 183) | public static Rectangle forLocations(final Location... locations)
    method forString (line 193) | public static Rectangle forString(final String rectangleString)
    method Rectangle (line 211) | private Rectangle(final Location lowerLeft, final Location upperRight)
    method asEnvelope (line 222) | public Envelope asEnvelope()
    method asGeoJsonBbox (line 230) | public JsonArray asGeoJsonBbox()
    method bounds (line 240) | @Override
    method center (line 246) | @Override
    method combine (line 258) | public Rectangle combine(final Rectangle that)
    method contract (line 273) | public Rectangle contract(final Distance distance)
    method expand (line 320) | public Rectangle expand(final Distance distance)
    method expandHorizontally (line 333) | public Rectangle expandHorizontally(final Distance distance)
    method expandVertically (line 348) | public Rectangle expandVertically(final Distance distance)
    method fullyGeometricallyEncloses (line 402) | public boolean fullyGeometricallyEncloses(final Located item)
    method fullyGeometricallyEncloses (line 414) | @Override
    method fullyGeometricallyEncloses (line 420) | @Override
    method height (line 429) | public Angle height()
    method intersection (line 440) | public Rectangle intersection(final Rectangle other)
    method lowerLeft (line 533) | public Location lowerLeft()
    method lowerRight (line 541) | public Location lowerRight()
    method overlaps (line 546) | @Override
    method surface (line 567) | @Override
    method toCompactString (line 573) | @Override
    method upperLeft (line 582) | public Location upperLeft()
    method upperRight (line 590) | public Location upperRight()
    method width (line 598) | public Angle width()
    method asAwtRectangle (line 609) | protected Rectangle2D asAwtRectangle()

FILE: src/main/java/org/openstreetmap/atlas/geography/Segment.java
  class Segment (line 18) | public class Segment extends PolyLine
    method asList (line 30) | public static List<Location> asList(final Iterable<Segment> segments)
    method asList (line 47) | private static List<Location> asList(final Location start, final Locat...
    method rangeCheck (line 68) | private static boolean rangeCheck(final double denominator, final doub...
    method rangeCheck (line 83) | private static boolean rangeCheck(final long denominator, final long n...
    method Segment (line 89) | public Segment(final Location start, final Location end)
    method end (line 94) | public Location end()
    method equals (line 99) | @Override
    method hashCode (line 110) | @Override
    method heading (line 124) | public Optional<Heading> heading()
    method intersection (line 144) | public Location intersection(final Segment that)
    method intersects (line 187) | public boolean intersects(final Segment that)
    method isEastWest (line 271) | public boolean isEastWest()
    method isNorthSouth (line 279) | public boolean isNorthSouth()
    method isPoint (line 284) | @Override
    method length (line 290) | @Override
    method middle (line 296) | @Override
    method offsetFromStart (line 306) | @Override
    method pointingNorth (line 321) | public Segment pointingNorth()
    method reversed (line 334) | @Override
    method start (line 340) | public Location start()
    method dotProduct (line 352) | protected double dotProduct(final Segment that)
    method dotProductLength (line 361) | protected double dotProductLength()
    method latitudeSpan (line 366) | protected long latitudeSpan()
    method longitudeSpan (line 371) | protected long longitudeSpan()
    method intersectsApproximate (line 383) | private boolean intersectsApproximate(final Segment that)

FILE: src/main/java/org/openstreetmap/atlas/geography/Snapper.java
  class Snapper (line 16) | public class Snapper
    class SnappedLocation (line 23) | public static class SnappedLocation extends Location implements Compar...
      method SnappedLocation (line 30) | public SnappedLocation(final Location origin, final Location snapped...
      method compareTo (line 37) | @Override
      method equals (line 54) | @Override
      method getDistance (line 72) | public Distance getDistance()
      method getOrigin (line 77) | public Location getOrigin()
      method getTarget (line 82) | public PolyLine getTarget()
      method hashCode (line 87) | @Override
    method snap (line 103) | public SnappedLocation snap(final Location origin, final Iterable<? ex...
    method snap (line 146) | public SnappedLocation snap(final Location origin, final MultiPolygon ...
    method snapSegment (line 160) | private SnappedLocation snapSegment(final Location origin, final Segme...

FILE: src/main/java/org/openstreetmap/atlas/geography/StringCompressedPolyLine.java
  class StringCompressedPolyLine (line 26) | public class StringCompressedPolyLine implements Serializable
    class PolyLineCompressionException (line 31) | public static class PolyLineCompressionException extends CoreException
      method PolyLineCompressionException (line 35) | public PolyLineCompressionException(final String message, final Obje...
    method StringCompressedPolyLine (line 68) | public StringCompressedPolyLine(final byte[] encoding)
    method StringCompressedPolyLine (line 73) | public StringCompressedPolyLine(final PolyLine polyLine)
    method asPolyLine (line 90) | public PolyLine asPolyLine()
    method getEncoding (line 115) | public byte[] getEncoding()
    method toString (line 120) | @Override
    method asPolyLine (line 142) | private PolyLine asPolyLine(final String encoded, final int precision)
    method compress (line 181) | private String compress(final PolyLine points, final int precision0)
    method encodeNumber (line 212) | private String encodeNumber(final long number0)
    method getWkbFallback (line 230) | private byte[] getWkbFallback(final PolyLine polyLine)

FILE: src/main/java/org/openstreetmap/atlas/geography/StringCompressedPolygon.java
  class StringCompressedPolygon (line 8) | public class StringCompressedPolygon extends StringCompressedPolyLine
    method StringCompressedPolygon (line 12) | public StringCompressedPolygon(final byte[] encoding)
    method StringCompressedPolygon (line 17) | public StringCompressedPolygon(final Polygon polygon)
    method asPolygon (line 22) | public Polygon asPolygon()

FILE: src/main/java/org/openstreetmap/atlas/geography/WkbPrintable.java
  type WkbPrintable (line 6) | public interface WkbPrintable
    method toWkb (line 8) | byte[] toWkb();

FILE: src/main/java/org/openstreetmap/atlas/geography/WktPrintable.java
  type WktPrintable (line 8) | public interface WktPrintable
    method toWktCollection (line 10) | static String toWktCollection(final Iterable<? extends WktPrintable> i...
    method toWkt (line 21) | String toWkt();

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/AbstractAtlas.java
  class AbstractAtlas (line 45) | public abstract class AbstractAtlas extends BareAtlas
    method createAndSaveOsmPbf (line 85) | public static Atlas createAndSaveOsmPbf(final Resource osmPbf,
    method createAndSaveOsmPbfWithSlicing (line 107) | public static Atlas createAndSaveOsmPbfWithSlicing(final Resource osmPbf,
    method forOsmPbf (line 127) | public static Atlas forOsmPbf(final Resource resource)
    method areasCovering (line 135) | @Override
    method areasCovering (line 145) | @Override
    method areasIntersecting (line 151) | @Override
    method areasIntersecting (line 161) | @Override
    method areasWithin (line 168) | @Override
    method edgesContaining (line 178) | @Override
    method edgesContaining (line 188) | @Override
    method edgesIntersecting (line 194) | @Override
    method edgesIntersecting (line 204) | @Override
    method edgesWithin (line 211) | @Override
    method getAreaSpatialIndex (line 221) | public SpatialIndex<Area> getAreaSpatialIndex()
    method getEdgeSpatialIndex (line 227) | public SpatialIndex<Edge> getEdgeSpatialIndex()
    method getLineSpatialIndex (line 233) | public SpatialIndex<Line> getLineSpatialIndex()
    method getNodeSpatialIndex (line 239) | public SpatialIndex<Node> getNodeSpatialIndex()
    method getPointSpatialIndex (line 245) | public SpatialIndex<Point> getPointSpatialIndex()
    method getRelationSpatialIndex (line 251) | public SpatialIndex<Relation> getRelationSpatialIndex()
    method linesContaining (line 257) | @Override
    method linesContaining (line 267) | @Override
    method linesIntersecting (line 273) | @Override
    method linesIntersecting (line 283) | @Override
    method linesWithin (line 290) | @Override
    method nodesAt (line 300) | @Override
    method nodesWithin (line 306) | @Override
    method nodesWithin (line 318) | @Override
    method pointsAt (line 324) | @Override
    method pointsWithin (line 330) | @Override
    method pointsWithin (line 342) | @Override
    method relationsWithEntitiesIntersecting (line 349) | @Override
    method relationsWithEntitiesIntersecting (line 356) | @Override
    method relationsWithEntitiesWithin (line 363) | @Override
    method save (line 370) | @Override
    method buildAreaSpatialIndexIfNecessary (line 383) | protected void buildAreaSpatialIndexIfNecessary()
    method buildEdgeSpatialIndexIfNecessary (line 394) | protected void buildEdgeSpatialIndexIfNecessary()
    method buildLineSpatialIndexIfNecessary (line 405) | protected void buildLineSpatialIndexIfNecessary()
    method buildNodeSpatialIndexIfNecessary (line 416) | protected void buildNodeSpatialIndexIfNecessary()
    method buildPointSpatialIndexIfNecessary (line 427) | protected void buildPointSpatialIndexIfNecessary()
    method buildRelationSpatialIndexIfNecessary (line 438) | protected void buildRelationSpatialIndexIfNecessary()
    method getAsNewAreaSpatialIndex (line 450) | protected SpatialIndex<Area> getAsNewAreaSpatialIndex()
    method getAsNewEdgeSpatialIndex (line 464) | protected SpatialIndex<Edge> getAsNewEdgeSpatialIndex()
    method getAsNewLineSpatialIndex (line 478) | protected SpatialIndex<Line> getAsNewLineSpatialIndex()
    method getAsNewNodeSpatialIndex (line 492) | protected SpatialIndex<Node> getAsNewNodeSpatialIndex()
    method getAsNewPointSpatialIndex (line 506) | protected SpatialIndex<Point> getAsNewPointSpatialIndex()
    method getAsNewRelationSpatialIndex (line 520) | protected SpatialIndex<Relation> getAsNewRelationSpatialIndex()
    method buildSpatialIndexIfNecessary (line 544) | @SuppressWarnings("unchecked")
    method newAreaSpatialIndex (line 575) | private SpatialIndex<Area> newAreaSpatialIndex()
    method newEdgeSpatialIndex (line 585) | private SpatialIndex<Edge> newEdgeSpatialIndex()
    method newLineSpatialIndex (line 595) | private SpatialIndex<Line> newLineSpatialIndex()
    method newNodeSpatialIndex (line 605) | private SpatialIndex<Node> newNodeSpatialIndex()
    method newPointSpatialIndex (line 616) | private SpatialIndex<Point> newPointSpatialIndex()
    method newRelationSpatialIndex (line 627) | private SpatialIndex<Relation> newRelationSpatialIndex()
    method newSpatialIndex (line 639) | private <M extends AtlasEntity> SpatialIndex<M> newSpatialIndex(

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/Atlas.java
  type Atlas (line 51) | public interface Atlas
    method entitiesMatchingId (line 54) | static <E extends AtlasEntity> Iterable<E> entitiesMatchingId(final Lo...
    method area (line 66) | Area area(long identifier);
    method areas (line 71) | Iterable<Area> areas();
    method areas (line 80) | default Iterable<Area> areas(final Long... identifiers)
    method areas (line 92) | Iterable<Area> areas(Predicate<Area> matcher);
    method areasCovering (line 101) | Iterable<Area> areasCovering(Location location);
    method areasCovering (line 113) | Iterable<Area> areasCovering(Location location, Predicate<Area> matcher);
    method areasIntersecting (line 122) | Iterable<Area> areasIntersecting(GeometricSurface surface);
    method areasIntersecting (line 135) | Iterable<Area> areasIntersecting(GeometricSurface surface, Predicate<A...
    method areasWithin (line 144) | Iterable<Area> areasWithin(GeometricSurface surface);
    method asGeoJson (line 152) | JsonObject asGeoJson(Predicate<AtlasEntity> matcher);
    method cloneToPackedAtlas (line 160) | default PackedAtlas cloneToPackedAtlas()
    method edge (line 170) | Edge edge(long identifier);
    method edges (line 175) | Iterable<Edge> edges();
    method edges (line 184) | default Iterable<Edge> edges(final Long... identifiers)
    method edges (line 196) | Iterable<Edge> edges(Predicate<Edge> matcher);
    method edgesContaining (line 205) | Iterable<Edge> edgesContaining(Location location);
    method edgesContaining (line 218) | Iterable<Edge> edgesContaining(Location location, Predicate<Edge> matc...
    method edgesIntersecting (line 227) | Iterable<Edge> edgesIntersecting(GeometricSurface surface);
    method edgesIntersecting (line 240) | Iterable<Edge> edgesIntersecting(GeometricSurface surface, Predicate<E...
    method edgesWithin (line 249) | Iterable<Edge> edgesWithin(GeometricSurface surface);
    method entities (line 256) | Iterable<AtlasEntity> entities();
    method entities (line 269) | <M extends AtlasEntity> Iterable<M> entities(ItemType type, Class<M> m...
    method entities (line 278) | Iterable<AtlasEntity> entities(Predicate<AtlasEntity> matcher);
    method entitiesIntersecting (line 287) | Iterable<AtlasEntity> entitiesIntersecting(GeometricSurface surface);
    method entitiesIntersecting (line 300) | Iterable<AtlasEntity> entitiesIntersecting(GeometricSurface surface,
    method entitiesWithin (line 310) | Iterable<AtlasEntity> entitiesWithin(GeometricSurface surface);
    method entitiesWithin (line 322) | Iterable<AtlasEntity> entitiesWithin(GeometricSurface surface, Predica...
    method entity (line 333) | AtlasEntity entity(long identifier, ItemType type);
    method getIdentifier (line 338) | UUID getIdentifier();
    method getName (line 344) | String getName();
    method items (line 351) | Iterable<AtlasItem> items();
    method items (line 360) | Iterable<AtlasItem> items(Predicate<AtlasItem> matcher);
    method itemsContaining (line 369) | Iterable<AtlasItem> itemsContaining(Location location);
    method itemsContaining (line 382) | Iterable<AtlasItem> itemsContaining(Location location, Predicate<Atlas...
    method itemsIntersecting (line 391) | Iterable<AtlasItem> itemsIntersecting(GeometricSurface surface);
    method itemsIntersecting (line 404) | Iterable<AtlasItem> itemsIntersecting(GeometricSurface surface, Predic...
    method itemsWithin (line 413) | Iterable<AtlasItem> itemsWithin(GeometricSurface surface);
    method line (line 420) | Line line(long identifier);
    method lineItems (line 427) | Iterable<LineItem> lineItems();
    method lineItems (line 436) | Iterable<LineItem> lineItems(Predicate<LineItem> matcher);
    method lineItemsContaining (line 445) | Iterable<LineItem> lineItemsContaining(Location location);
    method lineItemsContaining (line 458) | Iterable<LineItem> lineItemsContaining(Location location, Predicate<Li...
    method lineItemsIntersecting (line 467) | Iterable<LineItem> lineItemsIntersecting(GeometricSurface surface);
    method lineItemsIntersecting (line 480) | Iterable<LineItem> lineItemsIntersecting(GeometricSurface surface, Pre...
    method lineItemsWithin (line 489) | Iterable<LineItem> lineItemsWithin(GeometricSurface surface);
    method lines (line 494) | Iterable<Line> lines();
    method lines (line 503) | default Iterable<Line> lines(final Long... identifiers)
    method lines (line 515) | Iterable<Line> lines(Predicate<Line> matcher);
    method linesContaining (line 524) | Iterable<Line> linesContaining(Location location);
    method linesContaining (line 537) | Iterable<Line> linesContaining(Location location, Predicate<Line> matc...
    method linesIntersecting (line 546) | Iterable<Line> linesIntersecting(GeometricSurface surface);
    method linesIntersecting (line 559) | Iterable<Line> linesIntersecting(GeometricSurface surface, Predicate<L...
    method linesWithin (line 568) | Iterable<Line> linesWithin(GeometricSurface surface);
    method locationItems (line 575) | Iterable<LocationItem> locationItems();
    method locationItems (line 584) | Iterable<LocationItem> locationItems(Predicate<LocationItem> matcher);
    method locationItemsWithin (line 594) | Iterable<LocationItem> locationItemsWithin(GeometricSurface surface);
    method locationItemsWithin (line 607) | Iterable<LocationItem> locationItemsWithin(GeometricSurface surface,
    method metaData (line 613) | AtlasMetaData metaData();
    method node (line 620) | Node node(long identifier);
    method nodes (line 625) | Iterable<Node> nodes();
    method nodes (line 634) | default Iterable<Node> nodes(final Long... identifiers)
    method nodes (line 646) | Iterable<Node> nodes(Predicate<Node> matcher);
    method nodesAt (line 655) | Iterable<Node> nodesAt(Location location);
    method nodesWithin (line 667) | Iterable<Node> nodesWithin(GeometricSurface surface);
    method nodesWithin (line 680) | Iterable<Node> nodesWithin(GeometricSurface surface, Predicate<Node> m...
    method numberOfAreas (line 685) | long numberOfAreas();
    method numberOfEdges (line 690) | long numberOfEdges();
    method numberOfLines (line 695) | long numberOfLines();
    method numberOfNodes (line 700) | long numberOfNodes();
    method numberOfPoints (line 705) | long numberOfPoints();
    method numberOfRelations (line 710) | long numberOfRelations();
    method point (line 717) | Point point(long identifier);
    method points (line 722) | Iterable<Point> points();
    method points (line 731) | default Iterable<Point> points(final Long... identifiers)
    method points (line 743) | Iterable<Point> points(Predicate<Point> matcher);
    method pointsAt (line 752) | Iterable<Point> pointsAt(Location location);
    method pointsWithin (line 763) | Iterable<Point> pointsWithin(GeometricSurface surface);
    method pointsWithin (line 777) | Iterable<Point> pointsWithin(GeometricSurface surface, Predicate<Point...
    method relation (line 784) | Relation relation(long identifier);
    method relations (line 789) | Iterable<Relation> relations();
    method relations (line 798) | default Iterable<Relation> relations(final Long... identifiers)
    method relations (line 810) | Iterable<Relation> relations(Predicate<Relation> matcher);
    method relationsLowerOrderFirst (line 817) | Iterable<Relation> relationsLowerOrderFirst();
    method relationsWithEntitiesIntersecting (line 826) | Iterable<Relation> relationsWithEntitiesIntersecting(GeometricSurface ...
    method relationsWithEntitiesIntersecting (line 838) | Iterable<Relation> relationsWithEntitiesIntersecting(GeometricSurface ...
    method relationsWithEntitiesWithin (line 848) | Iterable<Relation> relationsWithEntitiesWithin(GeometricSurface surface);
    method save (line 856) | void save(WritableResource writableResource);
    method saveAsGeoJson (line 864) | void saveAsGeoJson(WritableResource resource);
    method saveAsGeoJson (line 874) | void saveAsGeoJson(WritableResource resource, Predicate<AtlasEntity> m...
    method saveAsLineDelimitedGeoJsonFeatures (line 885) | void saveAsLineDelimitedGeoJsonFeatures(WritableResource resource,
    method saveAsLineDelimitedGeoJsonFeatures (line 899) | void saveAsLineDelimitedGeoJsonFeatures(WritableResource resource,
    method saveAsList (line 908) | void saveAsList(WritableResource resource);
    method saveAsProto (line 916) | void saveAsProto(WritableResource resource);
    method saveAsText (line 924) | void saveAsText(WritableResource resource);
    method size (line 929) | default AtlasSize size()
    method snapped (line 942) | SnappedEdge snapped(Location point, Distance threshold);
    method snaps (line 952) | List<SnappedEdge> snaps(Location point, Distance threshold);
    method snapsLineItem (line 962) | List<SnappedLineItem> snapsLineItem(Location point, Distance threshold);
    method subAtlas (line 975) | Optional<Atlas> subAtlas(GeometricSurface boundary, AtlasCutType cutTy...
    method subAtlas (line 987) | Optional<Atlas> subAtlas(Predicate<AtlasEntity> matcher, AtlasCutType ...
    method summary (line 995) | String summary();
    method toStringDetailed (line 1003) | String toStringDetailed();

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasLoadingCommand.java
  class AtlasLoadingCommand (line 24) | public abstract class AtlasLoadingCommand extends Command
    class AcceptableInputFileFilter (line 32) | public static class AcceptableInputFileFilter implements Predicate<Res...
      method exclude (line 43) | public AcceptableInputFileFilter exclude(final Iterable<String> excl...
      method include (line 52) | public AcceptableInputFileFilter include(final Iterable<String> incl...
      method test (line 61) | @Override
    method loadAtlas (line 105) | protected Atlas loadAtlas(final CommandMap commandMap)
    method loadAtlas (line 120) | @SuppressWarnings("unchecked")
    method switches (line 139) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasMetaData.java
  class AtlasMetaData (line 29) | public final class AtlasMetaData
    method AtlasMetaData (line 51) | public AtlasMetaData()
    method AtlasMetaData (line 56) | public AtlasMetaData(final AtlasSize size)
    method AtlasMetaData (line 62) | public AtlasMetaData(final AtlasSize size, final boolean original, fin...
    method copyWithNewOriginal (line 75) | public AtlasMetaData copyWithNewOriginal(final boolean original)
    method copyWithNewShardName (line 81) | public AtlasMetaData copyWithNewShardName(final String shardName)
    method copyWithNewSize (line 87) | public AtlasMetaData copyWithNewSize(final AtlasSize size)
    method copyWithNewTags (line 100) | public AtlasMetaData copyWithNewTags(final Map<String, String> tags)
    method equals (line 106) | @Override
    method getCodeVersion (line 149) | public Optional<String> getCodeVersion()
    method getCountry (line 154) | public Optional<String> getCountry()
    method getDataVersion (line 159) | public Optional<String> getDataVersion()
    method getGeoJsonProperties (line 164) | @Override
    method getProtoAdapter (line 188) | @Override
    method getShardName (line 194) | public Optional<String> getShardName()
    method getSize (line 199) | public AtlasSize getSize()
    method getTag (line 204) | @Override
    method getTags (line 210) | @Override
    method hashCode (line 220) | @Override
    method isOriginal (line 228) | public boolean isOriginal()
    method toReadableString (line 233) | public String toReadableString()
    method toString (line 274) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasResourceLoader.java
  class AtlasResourceLoader (line 32) | public class AtlasResourceLoader
    method checkFileExistsAndIsNotDirectory (line 54) | private static void checkFileExistsAndIsNotDirectory(final Resource re...
    method setDecompressorFor (line 73) | private static void setDecompressorFor(final Resource resource)
    method AtlasResourceLoader (line 90) | public AtlasResourceLoader()
    method load (line 106) | public Atlas load(final Resource... resources)
    method load (line 121) | public Atlas load(final Iterable<? extends Resource> resources)
    method loadRecursively (line 162) | public Atlas loadRecursively(final Resource... resources)
    method loadRecursively (line 179) | public Atlas loadRecursively(final Iterable<Resource> resources)
    method safeLoad (line 204) | public Optional<Atlas> safeLoad(final Resource... resources)
    method safeLoad (line 217) | public Optional<Atlas> safeLoad(final Iterable<Resource> resources)
    method safeLoadRecursively (line 240) | public Optional<Atlas> safeLoadRecursively(final Resource... resources)
    method safeLoadRecursively (line 255) | public Optional<Atlas> safeLoadRecursively(final Iterable<Resource> re...
    method setAtlasEntityFilter (line 274) | public void setAtlasEntityFilter(final Predicate<AtlasEntity> filter)
    method setResourceFilter (line 285) | public void setResourceFilter(final Predicate<Resource> filter)
    method withAtlasEntityFilter (line 297) | public AtlasResourceLoader withAtlasEntityFilter(final Predicate<Atlas...
    method withMultiAtlasName (line 310) | public AtlasResourceLoader withMultiAtlasName(final String multiAtlasN...
    method withResourceFilter (line 323) | public AtlasResourceLoader withResourceFilter(final Predicate<Resource...
    method applyEntityFilter (line 329) | private Atlas applyEntityFilter(final Atlas atlasToFilter)
    method expandFileOrDirectoryRecursively (line 341) | private List<Resource> expandFileOrDirectoryRecursively(final Resource...
    method filterForBinaryAtlasResources (line 375) | private List<Resource> filterForBinaryAtlasResources(final List<Resour...
    method filterForTextAtlasResources (line 381) | private List<Resource> filterForTextAtlasResources(final List<Resource...
    method loadAtlasResource (line 387) | private Optional<Atlas> loadAtlasResource(final Resource resource)
    method loadMultipleAtlasResources (line 422) | private Optional<Atlas> loadMultipleAtlasResources(final List<Resource...
    method loadTextAtlases (line 486) | private List<Atlas> loadTextAtlases(final List<Resource> textAtlasReso...
    method upcastAndRemoveNullResources (line 498) | private List<Resource> upcastAndRemoveNullResources(final Resource res...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/BareAtlas.java
  class BareAtlas (line 62) | public abstract class BareAtlas implements Atlas
    method BareAtlas (line 77) | protected BareAtlas()
    method areas (line 82) | @Override
    method asGeoJson (line 88) | @Override
    method asGeoJson (line 94) | @Override
    method edges (line 115) | @Override
    method entities (line 121) | @Override
    method entities (line 127) | @Override
    method entities (line 156) | @Override
    method entitiesIntersecting (line 162) | @Override
    method entitiesIntersecting (line 169) | @Override
    method entitiesWithin (line 176) | @Override
    method entitiesWithin (line 182) | @Override
    method entity (line 189) | @Override
    method equals (line 211) | @Override
    method getGeoJsonObjects (line 276) | @Override
    method getGeoJsonProperties (line 282) | @Override
    method getIdentifier (line 290) | @Override
    method getName (line 296) | @Override
    method hashCode (line 309) | @Override
    method items (line 316) | @Override
    method items (line 322) | @Override
    method itemsContaining (line 328) | @Override
    method itemsContaining (line 335) | @Override
    method itemsIntersecting (line 342) | @Override
    method itemsIntersecting (line 349) | @Override
    method itemsWithin (line 356) | @Override
    method iterator (line 363) | @Override
    method lineItems (line 370) | @Override
    method lineItems (line 376) | @Override
    method lineItemsContaining (line 382) | @Override
    method lineItemsContaining (line 388) | @Override
    method lineItemsIntersecting (line 395) | @Override
    method lineItemsIntersecting (line 401) | @Override
    method lineItemsWithin (line 408) | @Override
    method lines (line 414) | @Override
    method locationItems (line 420) | @Override
    method locationItems (line 426) | @Override
    method locationItemsWithin (line 432) | @Override
    method locationItemsWithin (line 438) | @Override
    method nodes (line 445) | @Override
    method points (line 451) | @Override
    method relations (line 457) | @Override
    method relationsLowerOrderFirst (line 463) | @Override
    method saveAsGeoJson (line 521) | @Override
    method saveAsGeoJson (line 527) | @Override
    method saveAsLineDelimitedGeoJsonFeatures (line 536) | @Override
    method saveAsLineDelimitedGeoJsonFeatures (line 543) | @Override
    method saveAsList (line 559) | @Override
    method saveAsProto (line 576) | @Override
    method saveAsText (line 582) | @Override
    method snapped (line 588) | @Override
    method snaps (line 603) | @Override
    method snapsLineItem (line 616) | @Override
    method subAtlas (line 630) | @Override
    method subAtlas (line 648) | @Override
    method summary (line 667) | @Override
    method toString (line 689) | @Override
    method toStringDetailed (line 695) | @Override
    method setName (line 715) | protected void setName(final String name)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/Crawler.java
  class Crawler (line 13) | public abstract class Crawler extends AtlasLoadingCommand
    method Crawler (line 20) | public Crawler(final Logger logger)
    method initialize (line 25) | protected void initialize(final CommandMap command)
    method onRun (line 29) | @Override
    method processAtlas (line 45) | protected abstract void processAtlas(String atlasName, Atlas atlas, St...
    method switches (line 47) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/ShardFileOverlapsPolygon.java
  class ShardFileOverlapsPolygon (line 25) | public class ShardFileOverlapsPolygon implements Predicate<Resource>
    method ShardFileOverlapsPolygon (line 44) | public ShardFileOverlapsPolygon(final DynamicTileSharding shardingTree...
    method ShardFileOverlapsPolygon (line 58) | public ShardFileOverlapsPolygon(final DynamicTileSharding shardingTree...
    method test (line 67) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/AtlasBuilder.java
  type AtlasBuilder (line 22) | public interface AtlasBuilder
    method addArea (line 36) | void addArea(long identifier, Polygon geometry, Map<String, String> ta...
    method addEdge (line 51) | void addEdge(long identifier, PolyLine geometry, Map<String, String> t...
    method addLine (line 65) | void addLine(long identifier, PolyLine geometry, Map<String, String> t...
    method addNode (line 79) | void addNode(long identifier, Location geometry, Map<String, String> t...
    method addPoint (line 93) | void addPoint(long identifier, Location geometry, Map<String, String> ...
    method addRelation (line 110) | void addRelation(long identifier, long osmIdentifier, RelationBean str...
    method get (line 118) | Atlas get();
    method setMetaData (line 126) | void setMetaData(AtlasMetaData metaData);
    method setSizeEstimates (line 134) | void setSizeEstimates(AtlasSize estimates);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/AtlasSize.java
  class AtlasSize (line 25) | public class AtlasSize implements Serializable, GeoJsonProperties
    class AtlasSizeBuilder (line 32) | public static class AtlasSizeBuilder
      method AtlasSizeBuilder (line 41) | public AtlasSizeBuilder()
      method build (line 57) | public AtlasSize build()
      method withAreaEstimate (line 63) | public AtlasSizeBuilder withAreaEstimate(final long areaNumber)
      method withEdgeEstimate (line 69) | public AtlasSizeBuilder withEdgeEstimate(final long edgeNumber)
      method withLineEstimate (line 75) | public AtlasSizeBuilder withLineEstimate(final long lineNumber)
      method withNodeEstimate (line 81) | public AtlasSizeBuilder withNodeEstimate(final long nodeNumber)
      method withPointEstimate (line 87) | public AtlasSizeBuilder withPointEstimate(final long pointNumber)
      method withRelationEstimate (line 93) | public AtlasSizeBuilder withRelationEstimate(final long relationNumber)
    method AtlasSize (line 119) | public AtlasSize(final Iterable<AtlasEntity> entities)
    method AtlasSize (line 182) | public AtlasSize(final long edgeNumber, final long nodeNumber, final l...
    method equals (line 193) | @Override
    method getAreaNumber (line 232) | public long getAreaNumber()
    method getEdgeNumber (line 237) | public long getEdgeNumber()
    method getEntityNumber (line 242) | public long getEntityNumber()
    method getGeoJsonProperties (line 248) | @Override
    method getLineNumber (line 261) | public long getLineNumber()
    method getNodeNumber (line 266) | public long getNodeNumber()
    method getNonRelationEntityNumber (line 271) | public long getNonRelationEntityNumber()
    method getPointNumber (line 277) | public long getPointNumber()
    method getRelationNumber (line 282) | public long getRelationNumber()
    method hashCode (line 287) | @Override
    method toString (line 295) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/GeoJsonAtlasBuilder.java
  class GeoJsonAtlasBuilder (line 28) | public class GeoJsonAtlasBuilder
    class GeoJsonEdge (line 33) | private static class GeoJsonEdge
      method GeoJsonEdge (line 39) | GeoJsonEdge(final long identifier, final Map<String, String> tags, f...
      method getIdentifier (line 46) | public long getIdentifier()
      method getPolyLine (line 51) | public PolyLine getPolyLine()
      method getTags (line 56) | public Map<String, String> getTags()
    method create (line 62) | public Atlas create(final Resource geoJson)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/RelationBean.java
  class RelationBean (line 28) | public class RelationBean extends AbstractCollection<RelationBeanItem> i...
    class RelationBeanItem (line 33) | public static class RelationBeanItem implements Serializable, Comparab...
      method RelationBeanItem (line 41) | public RelationBeanItem(final Long identifier, final String role, fi...
      method RelationBeanItem (line 48) | public RelationBeanItem(final RelationBeanItem item)
      method compareTo (line 55) | @Override
      method equals (line 70) | @Override
      method getIdentifier (line 83) | public Long getIdentifier()
      method getRole (line 88) | public String getRole()
      method getType (line 93) | public ItemType getType()
      method hashCode (line 98) | @Override
      method toString (line 104) | @Override
    method fromSet (line 123) | public static RelationBean fromSet(final Set<RelationBeanItem> set)
    method mergeBeans (line 133) | public static RelationBean mergeBeans(final RelationBean left, final R...
    method RelationBean (line 163) | public RelationBean()
    method add (line 169) | @Override
    method addItem (line 176) | public void addItem(final Long identifier, final String role, final It...
    method addItem (line 181) | public void addItem(final RelationBeanItem item)
    method addItemExplicitlyExcluded (line 186) | public void addItemExplicitlyExcluded(final Long identifier, final Str...
    method addItemExplicitlyExcluded (line 192) | public void addItemExplicitlyExcluded(final RelationBeanItem item)
    method asList (line 202) | public List<RelationBeanItem> asList()
    method asMap (line 217) | public Map<RelationBeanItem, Integer> asMap()
    method asSet (line 245) | public Set<RelationBeanItem> asSet()
    method asSortedList (line 255) | public List<RelationBeanItem> asSortedList()
    method asSortedSet (line 269) | public SortedSet<RelationBeanItem> asSortedSet()
    method equals (line 281) | @Override
    method equalsIncludingExplicitlyExcluded (line 301) | public boolean equalsIncludingExplicitlyExcluded(final Object other)
    method getExplicitlyExcluded (line 311) | public Set<RelationBeanItem> getExplicitlyExcluded()
    method getItemFor (line 316) | public Optional<RelationBeanItem> getItemFor(final long identifier, fi...
    method getItemFor (line 329) | public Optional<RelationBeanItem> getItemFor(final long identifier, fi...
    method getMemberIdentifiers (line 344) | public List<Long> getMemberIdentifiers()
    method getMemberRoles (line 350) | public List<String> getMemberRoles()
    method getMemberTypes (line 355) | public List<ItemType> getMemberTypes()
    method hashCode (line 360) | @Override
    method isEmpty (line 370) | @Override
    method iterator (line 376) | @Override
    method merge (line 382) | public RelationBean merge(final RelationBean other)
    method removeAllMatchingItems (line 398) | public List<String> removeAllMatchingItems(final Long identifier, fina...
    method removeItem (line 422) | public boolean removeItem(final Long identifier, final String role, fi...
    method removeItem (line 427) | public boolean removeItem(final RelationBeanItem item)
    method size (line 435) | @Override
    method toString (line 441) | @Override
    method getItemFor (line 447) | private RelationBeanItem getItemFor(final int index)
    method isExplicitlyExcluded (line 456) | private boolean isExplicitlyExcluded(final RelationBeanItem relationBe...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveArea.java
  class AtlasPrimitiveArea (line 14) | public class AtlasPrimitiveArea extends AtlasPrimitiveEntity
    method AtlasPrimitiveArea (line 19) | public AtlasPrimitiveArea(final long identifier, final Polygon polygon,
    method bounds (line 26) | @Override
    method getPolygon (line 32) | public Polygon getPolygon()
    method toString (line 37) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveBigNode.java
  class AtlasPrimitiveBigNode (line 22) | public class AtlasPrimitiveBigNode extends AtlasPrimitiveEntity
    method from (line 36) | public static AtlasPrimitiveBigNode from(final BigNode bigNode)
    method from (line 41) | public static AtlasPrimitiveBigNode from(final BigNode bigNode,
    method AtlasPrimitiveBigNode (line 77) | public AtlasPrimitiveBigNode(final long identifier, final Set<AtlasPri...
    method bounds (line 90) | @Override
    method edges (line 96) | public Set<AtlasPrimitiveEdge> edges()
    method getRestrictedPaths (line 101) | public Set<AtlasPrimitiveRouteIdentifier> getRestrictedPaths()
    method inEdges (line 106) | public Set<AtlasPrimitiveEdge> inEdges()
    method junctionEdges (line 112) | public Set<AtlasPrimitiveEdge> junctionEdges()
    method nodeLocations (line 119) | public Set<Location> nodeLocations()
    method nodes (line 125) | public Set<AtlasPrimitiveLocationItem> nodes()
    method nodesContain (line 130) | public boolean nodesContain(final Location location)
    method outEdges (line 135) | public Set<AtlasPrimitiveEdge> outEdges()
    method paths (line 141) | public Set<AtlasPrimitiveRoute> paths()
    method toString (line 146) | @Override
    method type (line 154) | public Type type()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEdge.java
  class AtlasPrimitiveEdge (line 12) | public class AtlasPrimitiveEdge extends AtlasPrimitiveLineItem
    method from (line 16) | public static AtlasPrimitiveEdge from(final Edge edge)
    method AtlasPrimitiveEdge (line 21) | public AtlasPrimitiveEdge(final long identifier, final PolyLine polyLine,
    method end (line 27) | public Location end()
    method isReversedEdge (line 32) | public boolean isReversedEdge(final AtlasPrimitiveEdge reverseEdgeCand...
    method start (line 37) | public Location start()
    method toString (line 42) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEdgeIdentifier.java
  class AtlasPrimitiveEdgeIdentifier (line 8) | public class AtlasPrimitiveEdgeIdentifier implements Serializable
    method from (line 14) | public static AtlasPrimitiveEdgeIdentifier from(final AtlasPrimitiveEd...
    method AtlasPrimitiveEdgeIdentifier (line 19) | public AtlasPrimitiveEdgeIdentifier()
    method AtlasPrimitiveEdgeIdentifier (line 23) | public AtlasPrimitiveEdgeIdentifier(final long identifier)
    method equals (line 28) | @Override
    method getIdentifier (line 35) | public long getIdentifier()
    method hashCode (line 40) | @Override
    method setIdentifier (line 46) | public void setIdentifier(final long identifier)
    method toString (line 51) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEntity.java
  class AtlasPrimitiveEntity (line 17) | public abstract class AtlasPrimitiveEntity implements Serializable, Tagg...
    method AtlasPrimitiveEntity (line 23) | public AtlasPrimitiveEntity(final long identifier, final Map<String, S...
    method equals (line 29) | @Override
    method getIdentifier (line 36) | public long getIdentifier()
    method getTag (line 41) | @Override
    method getTags (line 47) | @Override
    method hashCode (line 53) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveLineItem.java
  class AtlasPrimitiveLineItem (line 14) | public class AtlasPrimitiveLineItem extends AtlasPrimitiveEntity
    method AtlasPrimitiveLineItem (line 19) | public AtlasPrimitiveLineItem(final long identifier, final PolyLine po...
    method bounds (line 26) | @Override
    method getPolyLine (line 32) | public PolyLine getPolyLine()
    method toString (line 37) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveLocationItem.java
  class AtlasPrimitiveLocationItem (line 15) | public class AtlasPrimitiveLocationItem extends AtlasPrimitiveEntity
    method from (line 20) | public static AtlasPrimitiveLocationItem from(final Node node)
    method AtlasPrimitiveLocationItem (line 27) | public AtlasPrimitiveLocationItem(final long identifier, final Locatio...
    method bounds (line 34) | @Override
    method getLocation (line 40) | public Location getLocation()
    method toString (line 45) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveObjectStore.java
  class AtlasPrimitiveObjectStore (line 28) | public class AtlasPrimitiveObjectStore
    method addArea (line 39) | public void addArea(final AtlasPrimitiveArea area)
    method addEdge (line 44) | public void addEdge(final AtlasPrimitiveLineItem edge)
    method addLine (line 49) | public void addLine(final AtlasPrimitiveLineItem line)
    method addNode (line 54) | public void addNode(final AtlasPrimitiveLocationItem node)
    method addPoint (line 59) | public void addPoint(final AtlasPrimitiveLocationItem point)
    method addRelation (line 64) | public void addRelation(final AtlasPrimitiveRelation relation)
    method build (line 72) | public Atlas build()
    method checkDataIntegrity (line 136) | public Optional<TemporaryObjectStore> checkDataIntegrity()
    method getAreas (line 220) | public Map<Long, AtlasPrimitiveArea> getAreas()
    method getEdges (line 225) | public Map<Long, AtlasPrimitiveLineItem> getEdges()
    method getLines (line 230) | public Map<Long, AtlasPrimitiveLineItem> getLines()
    method getNodes (line 235) | public Map<Long, AtlasPrimitiveLocationItem> getNodes()
    method getPoints (line 240) | public Map<Long, AtlasPrimitiveLocationItem> getPoints()
    method getRelations (line 245) | public Map<Long, AtlasPrimitiveRelation> getRelations()
    method summary (line 250) | public String summary()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRelation.java
  class AtlasPrimitiveRelation (line 13) | public class AtlasPrimitiveRelation extends AtlasPrimitiveEntity
    method AtlasPrimitiveRelation (line 20) | public AtlasPrimitiveRelation(final long identifier, final long osmIde...
    method bounds (line 29) | @Override
    method getOsmIdentifier (line 35) | public long getOsmIdentifier()
    method getRelationBean (line 40) | public RelationBean getRelationBean()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRoute.java
  class AtlasPrimitiveRoute (line 29) | public final class AtlasPrimitiveRoute implements Iterable<AtlasPrimitiv...
    method from (line 45) | public static AtlasPrimitiveRoute from(final AtlasPrimitiveEdge... pri...
    method from (line 50) | public static AtlasPrimitiveRoute from(
    method from (line 58) | public static AtlasPrimitiveRoute from(final List<Edge> edges)
    method from (line 64) | public static Optional<AtlasPrimitiveRoute> from(final Route route)
    method AtlasPrimitiveRoute (line 74) | public AtlasPrimitiveRoute(final Iterable<AtlasPrimitiveEdge> primitiv...
    method asPolyLine (line 79) | public PolyLine asPolyLine()
    method end (line 94) | public AtlasPrimitiveEdge end()
    method equals (line 103) | @Override
    method getRoute (line 127) | public Optional<Route> getRoute(final Atlas atlas)
    method hashCode (line 148) | @Override
    method indexOf (line 155) | public int indexOf(final AtlasPrimitiveEdge primitiveEdge)
    method isOverlappedBy (line 160) | public boolean isOverlappedBy(final AtlasPrimitiveRoute primitiveRoute)
    method isOverlappedBy (line 166) | public boolean isOverlappedBy(final Route route)
    method iterator (line 172) | @Override
    method overlapCount (line 186) | public int overlapCount(final AtlasPrimitiveRoute subRoute)
    method size (line 223) | public int size()
    method start (line 228) | public AtlasPrimitiveEdge start()
    method subRoute (line 237) | public List<AtlasPrimitiveEdge> subRoute(final int fromIndex, final in...
    method toString (line 242) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRouteIdentifier.java
  class AtlasPrimitiveRouteIdentifier (line 17) | public class AtlasPrimitiveRouteIdentifier
    method from (line 24) | public static AtlasPrimitiveRouteIdentifier from(final AtlasPrimitiveR...
    method AtlasPrimitiveRouteIdentifier (line 32) | public AtlasPrimitiveRouteIdentifier()
    method AtlasPrimitiveRouteIdentifier (line 36) | public AtlasPrimitiveRouteIdentifier(final AtlasPrimitiveEdgeIdentifie...
    method AtlasPrimitiveRouteIdentifier (line 41) | public AtlasPrimitiveRouteIdentifier(
    method end (line 47) | public AtlasPrimitiveEdgeIdentifier end()
    method equals (line 56) | @Override
    method hashCode (line 72) | @Override
    method isOverlappedBy (line 81) | public boolean isOverlappedBy(final AtlasPrimitiveRouteIdentifier prim...
    method iterator (line 104) | @Override
    method overlapCount (line 117) | public int overlapCount(final AtlasPrimitiveRouteIdentifier subRouteId...
    method setPrimitiveRouteIdentifier (line 160) | public void setPrimitiveRouteIdentifier(
    method size (line 166) | public int size()
    method start (line 171) | public AtlasPrimitiveEdgeIdentifier start()
    method subRoute (line 180) | public List<AtlasPrimitiveEdgeIdentifier> subRoute(final int fromIndex...
    method toString (line 185) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/TemporaryObjectStore.java
  class TemporaryObjectStore (line 14) | public class TemporaryObjectStore
    method addArea (line 24) | public void addArea(final long identifier)
    method addEdge (line 29) | public void addEdge(final long identifier)
    method addLine (line 34) | public void addLine(final long identifier)
    method addLocation (line 39) | public void addLocation(final Location location)
    method addNode (line 44) | public void addNode(final long identifier)
    method addPoint (line 49) | public void addPoint(final long identifier)
    method addRelation (line 54) | public void addRelation(final long identifier)
    method getAreas (line 59) | public Set<Long> getAreas()
    method getEdges (line 64) | public Set<Long> getEdges()
    method getLines (line 69) | public Set<Long> getLines()
    method getLocations (line 74) | public Set<Location> getLocations()
    method getNodes (line 79) | public Set<Long> getNodes()
    method getPoints (line 84) | public Set<Long> getPoints()
    method getRelations (line 89) | public Set<Long> getRelations()
    method isEmpty (line 94) | public boolean isEmpty()
    method size (line 101) | public int size()
    method toDebugString (line 107) | public String toDebugString()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/builder/text/TextAtlasBuilder.java
  class TextAtlasBuilder (line 45) | public class TextAtlasBuilder
    type WriteMode (line 50) | private enum WriteMode
      method forHeader (line 61) | protected static WriteMode forHeader(final String header)
      method WriteMode (line 82) | WriteMode(final String header)
      method getHeader (line 87) | protected String getHeader()
    method getNodesHeader (line 105) | public static String getNodesHeader()
    method read (line 110) | public PackedAtlas read(final Resource resource)
    method write (line 215) | public void write(final Atlas atlas, final WritableResource resource)
    method cleanupTags (line 253) | private String cleanupTags(final String value)
    method convertArea (line 286) | private String convertArea(final Area item)
    method convertEdge (line 295) | private String convertEdge(final Edge item)
    method convertLine (line 304) | private String convertLine(final Line item)
    method convertNode (line 313) | private String convertNode(final Node item)
    method convertPoint (line 322) | private String convertPoint(final Point item)
    method convertRelation (line 331) | private String convertRelation(final Relation item)
    method convertRelationBean (line 340) | private String convertRelationBean(final Relation relation)
    method convertTags (line 355) | private String convertTags(final Taggable taggable)
    method parseArea (line 369) | private void parseArea(final PackedAtlasBuilder builder, final String ...
    method parseEdge (line 382) | private void parseEdge(final PackedAtlasBuilder builder, final String ...
    method parseLine (line 395) | private void parseLine(final PackedAtlasBuilder builder, final String ...
    method parseNode (line 408) | private void parseNode(final PackedAtlasBuilder builder, final String ...
    method parsePoint (line 421) | private void parsePoint(final PackedAtlasBuilder builder, final String...
    method parseRelation (line 434) | private void parseRelation(final PackedAtlasBuilder builder, final Str...
    method parseRelationBean (line 465) | private RelationBean parseRelationBean(final String value)
    method parseTags (line 480) | private Map<String, String> parseTags(final String value)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/AtlasChangeGenerator.java
  type AtlasChangeGenerator (line 16) | public interface AtlasChangeGenerator extends Converter<Atlas, Set<Featu...
    method convert (line 18) | @Override
    method generate (line 31) | default Set<FeatureChange> generate(final Atlas atlas)
    method generateWithoutValidation (line 59) | Set<FeatureChange> generateWithoutValidation(Atlas atlas);
    method getName (line 61) | default String getName()
    method validate (line 66) | default void validate(final Atlas source, final Change change)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/AtlasEntityKey.java
  class AtlasEntityKey (line 17) | public class AtlasEntityKey extends Tuple<ItemType, Long>
    method from (line 21) | public static AtlasEntityKey from(final ItemType itemType, final Long ...
    method from (line 26) | public static AtlasEntityKey from(final FeatureChange featureChange)
    method AtlasEntityKey (line 31) | protected AtlasEntityKey(final ItemType itemType, final Long identifier)
    method getAtlasEntity (line 36) | public AtlasEntity getAtlasEntity(final Atlas atlas)
    method getCompleteItemType (line 41) | public CompleteItemType getCompleteItemType()
    method getIdentifier (line 46) | public Long getIdentifier()
    method getItemType (line 51) | public ItemType getItemType()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/Change.java
  class Change (line 45) | public class Change implements Located, Serializable
    method merge (line 68) | public static Change merge(final Change... changeInstances)
    method newInstance (line 79) | public static Change newInstance()
    method Change (line 84) | protected Change()
    method allChangesMappedByAtlasEntityKey (line 91) | public Map<AtlasEntityKey, FeatureChange> allChangesMappedByAtlasEntit...
    method bounds (line 103) | @Override
    method changeCount (line 109) | public int changeCount()
    method changeFor (line 114) | public Optional<FeatureChange> changeFor(final ItemType itemType, fina...
    method changes (line 124) | public Stream<FeatureChange> changes()
    method changesFor (line 129) | public Stream<FeatureChange> changesFor(final ItemType itemType)
    method equals (line 146) | @Override
    method getFeatureChanges (line 170) | public List<FeatureChange> getFeatureChanges()
    method getIdentifier (line 175) | public int getIdentifier()
    method getName (line 180) | public String getName()
    method hashCode (line 193) | @Override
    method prettify (line 210) | public String prettify(final PrettifyStringFormat featureChangeFormat,
    method prettify (line 229) | public String prettify(final PrettifyStringFormat featureChangeFormat,
    method save (line 253) | public void save(final WritableResource resource)
    method save (line 267) | public void save(final WritableResource resource, final boolean showDe...
    method summaryString (line 272) | public String summaryString()
    method tagCountMap (line 295) | public Map<ItemType, Map<ChangeDescriptorType, Map<String, AtomicLong>...
    method toJson (line 347) | public String toJson()
    method toJson (line 352) | public String toJson(final boolean showDescription)
    method toLineDelimitedFeatureChanges (line 357) | public String toLineDelimitedFeatureChanges(final boolean sorted)
    method toLineDelimitedFeatureChanges (line 374) | public String toLineDelimitedFeatureChanges()
    method toString (line 379) | @Override
    method withName (line 396) | public Change withName(final String name)
    method add (line 402) | protected Change add(final FeatureChange featureChange)
    method addAll (line 437) | protected Change addAll(final FeatureChange... featureChanges)
    method changeCountFor (line 443) | private long changeCountFor(final ItemType itemType, final ChangeDescr...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeArea.java
  class ChangeArea (line 22) | public class ChangeArea extends Area // NOSONAR
    method ChangeArea (line 34) | protected ChangeArea(final ChangeAtlas atlas, final Area source, final...
    method asPolygon (line 41) | @Override
    method getIdentifier (line 47) | @Override
    method getTags (line 53) | @Override
    method relations (line 59) | @Override
    method attribute (line 68) | private <T extends Object> T attribute(final Function<Area, T> memberE...
    method getChangeAtlas (line 74) | private ChangeAtlas getChangeAtlas()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeAtlas.java
  class ChangeAtlas (line 42) | public class ChangeAtlas extends AbstractAtlas // NOSONAR
    method checkChanges (line 91) | private static void checkChanges(final Change... changes)
    method checkSource (line 103) | private static void checkSource(final Atlas source)
    method ChangeAtlas (line 111) | public ChangeAtlas(final Atlas source, final Change... changes)
    method ChangeAtlas (line 116) | public ChangeAtlas(final Atlas source, final String name, final Change...
    method ChangeAtlas (line 126) | public ChangeAtlas(final Change... changes)
    method ChangeAtlas (line 131) | public ChangeAtlas(final String name, final Change... changes)
    method area (line 175) | @Override
    method areas (line 186) | @Override
    method bounds (line 192) | @Override
    method edge (line 204) | @Override
    method edges (line 225) | @Override
    method getName (line 231) | @Override
    method line (line 241) | @Override
    method lines (line 252) | @Override
    method metaData (line 258) | @Override
    method node (line 274) | @Override
    method nodes (line 285) | @Override
    method numberOfAreas (line 291) | @Override
    method numberOfEdges (line 301) | @Override
    method numberOfLines (line 311) | @Override
    method numberOfNodes (line 321) | @Override
    method numberOfPoints (line 331) | @Override
    method numberOfRelations (line 341) | @Override
    method point (line 351) | @Override
    method points (line 362) | @Override
    method relation (line 368) | @Override
    method relations (line 390) | @Override
    method validate (line 396) | public void validate()
    method withName (line 405) | public ChangeAtlas withName(final String name)
    method entitiesFor (line 425) | private <M extends AtlasEntity> Iterable<M> entitiesFor(final ItemType...
    method entityFor (line 461) | private <M extends AtlasEntity> M entityFor(final long identifier, fin...
    method getFromCacheOrCreate (line 494) | private <E> E getFromCacheOrCreate(final Map<Long, E> cache,
    method getFromCacheOrCreate (line 524) | private <E> E getFromCacheOrCreate(final Map<Long, E> cache,

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeBuilder.java
  class ChangeBuilder (line 16) | public class ChangeBuilder
    method newInstance (line 27) | public static ChangeBuilder newInstance()
    method ChangeBuilder (line 32) | public ChangeBuilder()
    method add (line 43) | public synchronized ChangeBuilder add(final FeatureChange featureChange)
    method addAll (line 61) | public synchronized ChangeBuilder addAll(final FeatureChange... featur...
    method addAll (line 72) | public synchronized ChangeBuilder addAll(final Iterable<FeatureChange>...
    method addAll (line 84) | public synchronized ChangeBuilder addAll(final Stream<FeatureChange> f...
    method get (line 90) | public synchronized Change get()
    method peekNumberOfChanges (line 97) | public synchronized int peekNumberOfChanges()
    method withName (line 109) | public ChangeBuilder withName(final String name)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeEdge.java
  class ChangeEdge (line 24) | public class ChangeEdge extends Edge // NOSONAR
    method ChangeEdge (line 44) | protected ChangeEdge(final ChangeAtlas atlas, final Edge source, final...
    method asPolyLine (line 51) | @Override
    method end (line 57) | @Override
    method endNodeIdentifier (line 65) | public long endNodeIdentifier()
    method getIdentifier (line 70) | @Override
    method getTags (line 76) | @Override
    method relations (line 82) | @Override
    method start (line 91) | @Override
    method startNodeIdentifier (line 99) | public long startNodeIdentifier()
    method attribute (line 104) | private <T extends Object> T attribute(final Function<Edge, T> memberE...
    method getChangeAtlas (line 110) | private ChangeAtlas getChangeAtlas()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeEntity.java
  class ChangeEntity (line 21) | public final class ChangeEntity
    method filterRelations (line 32) | static Set<Relation> filterRelations(final Set<Relation> listed, final...
    method getAttribute (line 51) | static <T, M extends AtlasEntity> T getAttribute(final M source,
    method getAttributeAndOptionallyBackup (line 80) | static <T, M extends AtlasEntity> List<T> getAttributeAndOptionallyBac...
    method getAttributeOrBackup (line 128) | static <T, M extends AtlasEntity> T getAttributeOrBackup(final M sourc...
    method getOrCreateCache (line 162) | static <V> V getOrCreateCache(final V fieldCache, final Consumer<V> ca...
    method ChangeEntity (line 181) | private ChangeEntity()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeLine.java
  class ChangeLine (line 22) | public class ChangeLine extends Line // NOSONAR
    method ChangeLine (line 34) | protected ChangeLine(final ChangeAtlas atlas, final Line source, final...
    method asPolyLine (line 41) | @Override
    method getIdentifier (line 47) | @Override
    method getTags (line 53) | @Override
    method relations (line 59) | @Override
    method attribute (line 68) | private <T extends Object> T attribute(final Function<Line, T> memberE...
    method getChangeAtlas (line 74) | private ChangeAtlas getChangeAtlas()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeNode.java
  class ChangeNode (line 31) | public class ChangeNode extends Node // NOSONAR
    method ChangeNode (line 51) | protected ChangeNode(final ChangeAtlas atlas, final Node source, final...
    method getIdentifier (line 58) | @Override
    method getLocation (line 64) | @Override
    method getTags (line 70) | @Override
    method inEdgeIdentifiers (line 76) | public SortedSet<Long> inEdgeIdentifiers()
    method inEdges (line 105) | @Override
    method outEdgeIdentifiers (line 116) | public SortedSet<Long> outEdgeIdentifiers()
    method outEdges (line 145) | @Override
    method relations (line 156) | @Override
    method allAvailableAttributes (line 165) | private <T extends Object> List<T> allAvailableAttributes(
    method attribute (line 172) | private <T extends Object> T attribute(final Function<Node, T> memberE...
    method getChangeAtlas (line 178) | private ChangeAtlas getChangeAtlas()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangePoint.java
  class ChangePoint (line 22) | public class ChangePoint extends Point // NOSONAR
    method ChangePoint (line 33) | protected ChangePoint(final ChangeAtlas atlas, final Point source, fin...
    method getIdentifier (line 40) | @Override
    method getLocation (line 46) | @Override
    method getTags (line 52) | @Override
    method relations (line 58) | @Override
    method attribute (line 67) | private <T extends Object> T attribute(final Function<Point, T> member...
    method getChangeAtlas (line 73) | private ChangeAtlas getChangeAtlas()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeRelation.java
  class ChangeRelation (line 44) | public class ChangeRelation extends Relation // NOSONAR
    method ChangeRelation (line 64) | protected ChangeRelation(final ChangeAtlas atlas, final Relation source,
    method allKnownOsmMembers (line 72) | @Override
    method allRelationsWithSameOsmIdentifier (line 79) | @Override
    method asMultiPolygon (line 88) | @Override
    method getIdentifier (line 183) | @Override
    method getTags (line 189) | @Override
    method members (line 195) | @Override
    method osmRelationIdentifier (line 221) | @Override
    method preservedValidGeometry (line 227) | public boolean preservedValidGeometry()
    method relations (line 241) | @Override
    method addedMembers (line 250) | private Set<LineString> addedMembers()
    method allAvailableAttributes (line 259) | private <T extends Object> List<T> allAvailableAttributes(
    method attribute (line 266) | private <T extends Object> T attribute(final Function<Relation, T> mem...
    method getChangeAtlas (line 272) | private ChangeAtlas getChangeAtlas()
    method membersFor (line 277) | private RelationMemberList membersFor(final RelationBean bean)
    method removedMembers (line 297) | private Set<LineString> removedMembers()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeType.java
  type ChangeType (line 8) | public enum ChangeType

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/FeatureChange.java
  class FeatureChange (line 82) | public class FeatureChange implements Located, Taggable, Serializable, C...
    type Options (line 87) | public enum Options
    method add (line 122) | public static FeatureChange add(final AtlasEntity afterView)
    method add (line 142) | public static FeatureChange add(final AtlasEntity afterView, final Atl...
    method add (line 164) | public static FeatureChange add(final AtlasEntity afterView, final Atl...
    method remove (line 180) | public static FeatureChange remove(final AtlasEntity reference)
    method remove (line 198) | public static FeatureChange remove(final AtlasEntity reference, final ...
    method remove (line 218) | public static FeatureChange remove(final AtlasEntity reference, final ...
    method getPolyline (line 234) | @Nullable
    method getTags (line 265) | @Nonnull
    method FeatureChange (line 283) | public FeatureChange(final ChangeType changeType, final AtlasEntity af...
    method FeatureChange (line 300) | public FeatureChange(final ChangeType changeType, final AtlasEntity af...
    method addMetaData (line 351) | public void addMetaData(final String key, final String value)
    method afterViewIsFull (line 370) | public boolean afterViewIsFull()
    method bounds (line 430) | @Override
    method compareTo (line 449) | @Override
    method equals (line 457) | @Override
    method explain (line 475) | public ChangeDescription explain()
    method getAfterView (line 491) | public AtlasEntity getAfterView()
    method getBeforeView (line 496) | public AtlasEntity getBeforeView()
    method getChangeType (line 501) | public ChangeType getChangeType()
    method getFeatureChangeIdentifier (line 506) | public String getFeatureChangeIdentifier()
    method getIdentifier (line 511) | public long getIdentifier()
    method getItemType (line 516) | public ItemType getItemType()
    method getMetaData (line 521) | public Map<String, String> getMetaData()
    method getTag (line 533) | @Override
    method getTags (line 544) | @Override
    method hashCode (line 550) | @Override
    method merge (line 577) | public FeatureChange merge(final FeatureChange other)
    method prettify (line 706) | public String prettify()
    method prettify (line 724) | public String prettify(final PrettifyStringFormat format,
    method prettify (line 745) | public String prettify(final PrettifyStringFormat format,
    method save (line 785) | public void save(final WritableResource resource)
    method save (line 798) | public void save(final WritableResource resource, final boolean showDe...
    method setOptions (line 811) | public FeatureChange setOptions(final Options... options)
    method toGeoJson (line 821) | public String toGeoJson()
    method toGeoJson (line 826) | public String toGeoJson(final boolean showDescription)
    method toPrettyGeoJson (line 831) | public String toPrettyGeoJson()
    method toPrettyGeoJson (line 836) | public String toPrettyGeoJson(final boolean showDescription)
    method toString (line 841) | @Override
    method withAtlasContext (line 858) | public FeatureChange withAtlasContext(final Atlas atlas)
    method withOsc (line 902) | public FeatureChange withOsc(final String osc)
    method buildNodes (line 916) | private void buildNodes(final Atlas atlas, final Collection<Location> ...
    method computeBeforeViewUsingAtlasContext (line 961) | private void computeBeforeViewUsingAtlasContext(final Atlas atlas, fin...
    method computeRequiredOpenStreetMapChangeInformation (line 1174) | private void computeRequiredOpenStreetMapChangeInformation(final Atlas...
    method findNodesToRemove (line 1219) | private void findNodesToRemove(final Atlas atlas, final PolyLine polyL...
    method validateNotShallow (line 1259) | private void validateNotShallow()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/FeatureChangeBoundsExpander.java
  class FeatureChangeBoundsExpander (line 32) | public class FeatureChangeBoundsExpander
    method FeatureChangeBoundsExpander (line 61) | public FeatureChangeBoundsExpander(final Set<FeatureChange> featureCha...
    method apply (line 67) | public Set<FeatureChange> apply()
    method expanded (line 95) | private AtlasEntity expanded(final AtlasEntity other, final Set<Rectan...
    method findBounds (line 126) | private void findBounds() // NOSONAR
    method findBoundsFromEdge (line 183) | private void findBoundsFromEdge(final Edge edge)
    method findBoundsFromRelation (line 200) | private void findBoundsFromRelation(final Relation relation)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/FeatureChangeMergeGroup.java
  class FeatureChangeMergeGroup (line 11) | public class FeatureChangeMergeGroup
    method from (line 17) | public static FeatureChangeMergeGroup from(final FeatureChange feature...
    method FeatureChangeMergeGroup (line 23) | public FeatureChangeMergeGroup(final ItemType itemType, final Long ide...
    method getChangeType (line 32) | public ChangeType getChangeType()
    method getIdentifier (line 37) | public Long getIdentifier()
    method getItemType (line 42) | public ItemType getItemType()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/FeatureChangeMergingHelpers.java
  class FeatureChangeMergingHelpers (line 46) | public final class FeatureChangeMergingHelpers
    method mergeADDFeatureChangePair (line 64) | public static FeatureChange mergeADDFeatureChangePair(final FeatureCha...
    method mergeMetaData (line 139) | public static Map<String, String> mergeMetaData(final FeatureChange left,
    method mergeREMOVEFeatureChangePair (line 194) | public static FeatureChange mergeREMOVEFeatureChangePair(final Feature...
    method mergeAreas (line 259) | private static FeatureChange mergeAreas(final FeatureChange left, fina...
    method mergeEdges (line 341) | private static FeatureChange mergeEdges(final FeatureChange left, fina...
    method mergeLineItems (line 436) | private static FeatureChange mergeLineItems(final FeatureChange left, ...
    method mergeLines (line 489) | private static FeatureChange mergeLines(final FeatureChange left, fina...
    method mergeLocationItems (line 554) | private static FeatureChange mergeLocationItems(final FeatureChange left,
    method mergeNodes (line 607) | private static FeatureChange mergeNodes(final FeatureChange left, fina...
    method mergePoints (line 705) | private static FeatureChange mergePoints(final FeatureChange left, fin...
    method mergeRelations (line 751) | private static FeatureChange mergeRelations(final FeatureChange left, ...
    method FeatureChangeMergingHelpers (line 923) | private FeatureChangeMergingHelpers()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/MemberMergeStrategies.java
  class MemberMergeStrategies (line 38) | public final class MemberMergeStrategies
    method computeMapDifferenceCounts (line 728) | private static <T> Map<T, Integer> computeMapDifferenceCounts(final Ma...
    method getDiffBasedMutuallyExclusiveMerger (line 759) | private static <T> TernaryOperator<T> getDiffBasedMutuallyExclusiveMer...
    method verifyExplicitlyExcludedSets (line 794) | private static <T> void verifyExplicitlyExcludedSets(final Set<T> befo...
    method MemberMergeStrategies (line 830) | private MemberMergeStrategies()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/MemberMerger.java
  class MemberMerger (line 29) | public final class MemberMerger<M>
    class Builder (line 38) | public static class Builder<M>
      method build (line 55) | public MemberMerger<M> build()
      method useHackForMergingConflictingConnectedEdgeSetBeforeViews (line 77) | public Builder<M> useHackForMergingConflictingConnectedEdgeSetBefore...
      method withAfterEntityLeft (line 86) | public Builder<M> withAfterEntityLeft(final AtlasEntity afterEntityL...
      method withAfterEntityRight (line 92) | public Builder<M> withAfterEntityRight(final AtlasEntity afterEntity...
      method withAfterViewConflictingBeforeViewMerger (line 98) | public Builder<M> withAfterViewConflictingBeforeViewMerger(
      method withAfterViewConsistentBeforeViewMerger (line 105) | public Builder<M> withAfterViewConsistentBeforeViewMerger(
      method withAfterViewNoBeforeMerger (line 112) | public Builder<M> withAfterViewNoBeforeMerger(
      method withBeforeEntityLeft (line 119) | public Builder<M> withBeforeEntityLeft(final AtlasEntity beforeEntit...
      method withBeforeEntityRight (line 125) | public Builder<M> withBeforeEntityRight(final AtlasEntity beforeEnti...
      method withBeforeViewMerger (line 131) | public Builder<M> withBeforeViewMerger(final BinaryOperator<M> befor...
      method withMemberExtractor (line 137) | public Builder<M> withMemberExtractor(final Function<AtlasEntity, M>...
      method withMemberName (line 143) | public Builder<M> withMemberName(final String memberName)
      method assertRequiredFieldsNonNull (line 149) | private void assertRequiredFieldsNonNull()
    class MergedMemberBean (line 188) | public static class MergedMemberBean<M>
      method MergedMemberBean (line 193) | public MergedMemberBean(final M before, final M after)
      method getMergedAfterMember (line 199) | public M getMergedAfterMember()
      method getMergedBeforeMember (line 204) | public M getMergedBeforeMember()
    method MemberMerger (line 225) | private MemberMerger()
    method mergeMember (line 236) | public MergedMemberBean<M> mergeMember()
    method chooseNonNullMemberIfPossible (line 320) | private M chooseNonNullMemberIfPossible(final M memberLeft, final M me...
    method mergeMemberHackForConflictingConnectedEdgeSetBeforeViews (line 346) | @SuppressWarnings("unchecked")
    method mergeMemberWithConflictingBeforeViews (line 466) | private MergedMemberBean<M> mergeMemberWithConflictingBeforeViews(fina...
    method mergeMembersWithConsistentBeforeViews (line 548) | private MergedMemberBean<M> mergeMembersWithConsistentBeforeViews(fina...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/ChangeDescription.java
  class ChangeDescription (line 55) | public class ChangeDescription
    method atlasEntityToOscInformationNode (line 109) | private static void atlasEntityToOscInformationNode(final JsonObject i...
    method atlasEntityToOscInformationRelation (line 126) | private static void atlasEntityToOscInformationRelation(final JsonObje...
    method createOscXmlElement (line 165) | private static void createOscXmlElement(final Document document, final...
    method hasTags (line 249) | private static boolean hasTags(@Nullable final AtlasEntity entity)
    method newId (line 262) | private static long newId(final long identifier)
    method saveAsOsc (line 289) | @SuppressWarnings("java:S2755")
    method saveOsc (line 345) | private static void saveOsc(final JsonObject description, final String...
    method ChangeDescription (line 350) | public ChangeDescription(final long identifier, final ItemType itemType,
    method ChangeDescription (line 377) | public ChangeDescription(final long identifier, final ItemType itemType,
    method getChangeDescriptorType (line 427) | public ChangeDescriptorType getChangeDescriptorType()
    method getChangeDescriptors (line 437) | public List<ChangeDescriptor> getChangeDescriptors()
    method getIdentifier (line 447) | public long getIdentifier()
    method getItemType (line 457) | public ItemType getItemType()
    method getOsc (line 467) | public Optional<String> getOsc()
    method setOsc (line 479) | public void setOsc(final String osc)
    method toJsonElement (line 484) | public JsonElement toJsonElement()
    method toString (line 506) | @Override
    method atlasEntityToOscInformation (line 552) | private JsonObject atlasEntityToOscInformation(final AtlasEntity entity,
    method atlasEntityToOscInformationWay (line 631) | private JsonObject atlasEntityToOscInformationWay(final JsonObject inf...
    method createOsc (line 677) | private void createOsc(final JsonObject description)
    method oscCreateUpdate (line 706) | private void oscCreateUpdate(final List<? super JsonObject> create,
    method oscDelete (line 756) | private void oscDelete(final List<JsonObject> delete,
    method oscDeleteNodes (line 791) | private void oscDeleteNodes(final List<JsonObject> delete,
    method updateRequiredLocations (line 842) | private boolean updateRequiredLocations(final List<JsonObject> create,

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/ChangeDescriptorGenerator.java
  class ChangeDescriptorGenerator (line 38) | public final class ChangeDescriptorGenerator
    method ChangeDescriptorGenerator (line 51) | ChangeDescriptorGenerator(final AtlasEntity beforeView, final AtlasEnt...
    method ChangeDescriptorGenerator (line 71) | ChangeDescriptorGenerator(final AtlasEntity beforeView, final AtlasEnt...
    method setNodes (line 87) | public ChangeDescriptorGenerator setNodes(final Collection<LocationIte...
    method generate (line 97) | List<ChangeDescriptor> generate()
    method getChangeDescriptorType (line 141) | ChangeDescriptorType getChangeDescriptorType()
    method generateEdgeStartEndDescriptors (line 146) | private List<LongElementChangeDescriptor> generateEdgeStartEndDescript...
    method generateGeometryDescriptors (line 179) | private List<ChangeDescriptor> generateGeometryDescriptors()
    method generateLongSetDescriptors (line 227) | private List<LongElementChangeDescriptor> generateLongSetDescriptors(
    method generateLongValueDescriptors (line 249) | private List<LongElementChangeDescriptor> generateLongValueDescriptors(
    method generateNodeInOutDescriptors (line 273) | private List<LongElementChangeDescriptor> generateNodeInOutDescriptors(
    method generateParentRelationDescriptors (line 307) | private List<LongElementChangeDescriptor> generateParentRelationDescri...
    method generateRelationMemberDescriptors (line 342) | private List<ChangeDescriptor> generateRelationMemberDescriptors()
    method generateTagDescriptors (line 394) | private List<ChangeDescriptor> generateTagDescriptors()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/ChangeDescriptorType.java
  type ChangeDescriptorType (line 12) | public enum ChangeDescriptorType

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/ChangeDescriptor.java
  type ChangeDescriptor (line 14) | public interface ChangeDescriptor
    method getChangeDescriptorType (line 16) | ChangeDescriptorType getChangeDescriptorType();
    method getName (line 18) | ChangeDescriptorName getName();
    method toJsonElement (line 20) | default JsonElement toJsonElement()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/ChangeDescriptorComparator.java
  class ChangeDescriptorComparator (line 15) | public class ChangeDescriptorComparator implements Comparator<ChangeDesc...
    method compare (line 17) | @Override
    method complexCompare (line 27) | private int complexCompare(final ChangeDescriptor left, final ChangeDe...
    method genericSetChangeCompare (line 54) | private int genericSetChangeCompare(final LongElementChangeDescriptor ...
    method geometryChangeCompare (line 90) | private int geometryChangeCompare(final GeometryChangeDescriptor left,
    method relationMemberChangeCompare (line 125) | private int relationMemberChangeCompare(final RelationMemberChangeDesc...
    method tagChangeCompare (line 143) | private int tagChangeCompare(final TagChangeDescriptor left, final Tag...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/ChangeDescriptorName.java
  type ChangeDescriptorName (line 9) | public enum ChangeDescriptorName

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/GeometricRelationGeometryChangeDescriptor.java
  class GeometricRelationGeometryChangeDescriptor (line 18) | public final class GeometricRelationGeometryChangeDescriptor implements ...
    method getDescriptorsForGeometricRelations (line 26) | public static GeometricRelationGeometryChangeDescriptor getDescriptors...
    method GeometricRelationGeometryChangeDescriptor (line 100) | private GeometricRelationGeometryChangeDescriptor(final String diff,
    method getChangeDescriptorType (line 107) | @Override
    method getName (line 113) | @Override
    method toJsonElement (line 119) | @Override
    method toString (line 127) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/GeometryChangeDescriptor.java
  class GeometryChangeDescriptor (line 25) | public final class GeometryChangeDescriptor implements ChangeDescriptor
    method getDescriptorsForGeometry (line 40) | public static List<GeometryChangeDescriptor> getDescriptorsForGeometry(
    method getPatch (line 62) | public static Patch getPatch(final List<GeometryChangeDescriptor> desc...
    method GeometryChangeDescriptor (line 72) | private GeometryChangeDescriptor(final AbstractDelta<Location> delta,
    method getAfterViewWkt (line 93) | public Optional<String> getAfterViewWkt()
    method getBeforeViewWkt (line 103) | public Optional<String> getBeforeViewWkt()
    method getChangeDescriptorType (line 113) | @Override
    method getDelta (line 119) | public AbstractDelta<Location> getDelta()
    method getName (line 124) | @Override
    method getSourcePosition (line 130) | public int getSourcePosition()
    method toJsonElement (line 135) | @Override
    method toString (line 165) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/LongElementChangeDescriptor.java
  class LongElementChangeDescriptor (line 14) | public class LongElementChangeDescriptor implements ChangeDescriptor
    method LongElementChangeDescriptor (line 21) | public LongElementChangeDescriptor(final ChangeDescriptorType changeType,
    method LongElementChangeDescriptor (line 30) | public LongElementChangeDescriptor(final ChangeDescriptorType changeType,
    method getAfterElement (line 39) | public Long getAfterElement()
    method getBeforeElement (line 44) | public Long getBeforeElement()
    method getChangeDescriptorType (line 49) | @Override
    method getName (line 55) | @Override
    method toJsonElement (line 61) | @Override
    method toString (line 76) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/RelationMemberChangeDescriptor.java
  class RelationMemberChangeDescriptor (line 14) | public class RelationMemberChangeDescriptor implements ChangeDescriptor
    method RelationMemberChangeDescriptor (line 21) | public RelationMemberChangeDescriptor(final ChangeDescriptorType chang...
    method getChangeDescriptorType (line 30) | @Override
    method getIdentifier (line 36) | public long getIdentifier()
    method getItemType (line 41) | public ItemType getItemType()
    method getName (line 46) | @Override
    method getRole (line 52) | public String getRole()
    method toJsonElement (line 57) | @Override
    method toString (line 67) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/description/descriptors/TagChangeDescriptor.java
  class TagChangeDescriptor (line 15) | public class TagChangeDescriptor implements ChangeDescriptor
    method TagChangeDescriptor (line 22) | public TagChangeDescriptor(final ChangeDescriptorType changeType, fina...
    method TagChangeDescriptor (line 31) | public TagChangeDescriptor(final ChangeDescriptorType changeType, fina...
    method getChangeDescriptorType (line 37) | @Override
    method getKey (line 43) | public String getKey()
    method getName (line 48) | @Override
    method getOriginalValue (line 54) | public Optional<String> getOriginalValue()
    method getValue (line 59) | public String getValue()
    method toJsonElement (line 64) | @Override
    method toString (line 77) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/diff/AtlasDiff.java
  class AtlasDiff (line 35) | public class AtlasDiff
    method AtlasDiff (line 60) | public AtlasDiff(final Atlas before, final Atlas after)
    method generateChange (line 99) | public Optional<Change> generateChange()
    method getAfterAtlas (line 161) | public Atlas getAfterAtlas()
    method getBeforeAtlas (line 166) | public Atlas getBeforeAtlas()
    method saveAllGeometries (line 179) | public AtlasDiff saveAllGeometries(final boolean saveAllGeometries)
    method createFeatureChangesBasedOnEntitySets (line 204) | private Set<FeatureChange> createFeatureChangesBasedOnEntitySets(
    method createModifyFeatureChanges (line 245) | private Set<FeatureChange> createModifyFeatureChanges(final AtlasEntit...
    method createSimpleFeatureChangeWithType (line 362) | private FeatureChange createSimpleFeatureChangeWithType(final ChangeTy...
    method isEntityMissingFromGivenAtlas (line 409) | private boolean isEntityMissingFromGivenAtlas(final AtlasEntity entity,

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/diff/AtlasDiffHelper.java
  class AtlasDiffHelper (line 38) | public final class AtlasDiffHelper
    method getAreaChangeIfNecessary (line 42) | public static Optional<FeatureChange> getAreaChangeIfNecessary(final A...
    method getEdgeChangeIfNecessary (line 67) | public static Optional<FeatureChange> getEdgeChangeIfNecessary(final E...
    method getLineChangeIfNecessary (line 111) | public static Optional<FeatureChange> getLineChangeIfNecessary(final L...
    method getNodeChangeIfNecessary (line 136) | public static Optional<FeatureChange> getNodeChangeIfNecessary(final N...
    method getParentRelationMembershipChangeIfNecessary (line 183) | public static Optional<FeatureChange> getParentRelationMembershipChang...
    method getPointChangeIfNecessary (line 283) | public static Optional<FeatureChange> getPointChangeIfNecessary(final ...
    method getRelationChangeIfNecessary (line 308) | public static Optional<FeatureChange> getRelationChangeIfNecessary(
    method getTagChangeIfNecessary (line 361) | public static Optional<FeatureChange> getTagChangeIfNecessary(final At...
    method simpleCompleteAreaChange (line 429) | public static FeatureChange simpleCompleteAreaChange(final ChangeType ...
    method simpleCompleteEdgeChange (line 452) | public static FeatureChange simpleCompleteEdgeChange(final ChangeType ...
    method simpleCompleteLineChange (line 475) | public static FeatureChange simpleCompleteLineChange(final ChangeType ...
    method simpleCompleteNodeChange (line 498) | public static FeatureChange simpleCompleteNodeChange(final ChangeType ...
    method simpleCompletePointChange (line 521) | public static FeatureChange simpleCompletePointChange(final ChangeType...
    method simpleCompleteRelationChange (line 544) | public static FeatureChange simpleCompleteRelationChange(final ChangeT...
    method differentEdgeSet (line 567) | private static boolean differentEdgeSet(final SortedSet<Edge> beforeEd...
    method AtlasDiffHelper (line 588) | private AtlasDiffHelper()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/event/EntityChangeEvent.java
  class EntityChangeEvent (line 14) | public abstract class EntityChangeEvent implements Serializable
    method EntityChangeEvent (line 22) | public EntityChangeEvent(final CompleteItemType completeItemType, fina...
    method EntityChangeEvent (line 27) | public EntityChangeEvent(final CompleteItemType completeItemType, fina...
    method getCompleteItemType (line 36) | public CompleteItemType getCompleteItemType()
    method getIdentifier (line 41) | public long getIdentifier()
    method getNewValue (line 46) | public Optional<Object> getNewValue()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/event/TagChangeEvent.java
  class TagChangeEvent (line 17) | public class TagChangeEvent extends EntityChangeEvent
    method added (line 23) | public static TagChangeEvent added(final CompleteItemType completeItem...
    method overwrite (line 30) | public static TagChangeEvent overwrite(final CompleteItemType complete...
    method remove (line 37) | public static TagChangeEvent remove(final CompleteItemType completeIte...
    method replaced (line 44) | public static TagChangeEvent replaced(final CompleteItemType completeI...
    method TagChangeEvent (line 51) | protected TagChangeEvent(final CompleteItemType completeItemType, fina...
    method getFieldOperation (line 58) | public FieldChangeOperation getFieldOperation()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/event/consts/FieldChangeOperation.java
  type FieldChangeOperation (line 10) | public enum FieldChangeOperation

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/listenable/EntityChangeListenable.java
  type EntityChangeListenable (line 9) | public interface EntityChangeListenable

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/listenable/TagChangeListenable.java
  type TagChangeListenable (line 12) | public interface TagChangeListenable extends EntityChangeListenable
    method addTagChangeListener (line 14) | void addTagChangeListener(TagChangeListener tagChangeListener);
    method fireTagChangeEvent (line 16) | void fireTagChangeEvent(TagChangeEvent tagChangeEvent);
    method removeTagChangeListeners (line 18) | void removeTagChangeListeners();

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/listener/EntityChangeListener.java
  type EntityChangeListener (line 15) | @FunctionalInterface
    method entityChanged (line 18) | void entityChanged(E entityChangeEvent);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/eventhandling/listener/TagChangeListener.java
  type TagChangeListener (line 11) | public interface TagChangeListener extends EntityChangeListener<TagChang...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/exception/EmptyChangeException.java
  class EmptyChangeException (line 8) | public class EmptyChangeException extends CoreException
    method EmptyChangeException (line 12) | public EmptyChangeException()
    method EmptyChangeException (line 17) | public EmptyChangeException(final Throwable cause)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/serializer/ChangeGeoJsonSerializer.java
  class ChangeGeoJsonSerializer (line 26) | public class ChangeGeoJsonSerializer
    class ChangeTypeHierarchyAdapter (line 32) | private static class ChangeTypeHierarchyAdapter implements JsonSeriali...
      method ChangeTypeHierarchyAdapter (line 36) | ChangeTypeHierarchyAdapter(final boolean showDescription)
      method serialize (line 42) | @Override
    method ChangeGeoJsonSerializer (line 66) | public ChangeGeoJsonSerializer()
    method ChangeGeoJsonSerializer (line 71) | public ChangeGeoJsonSerializer(final boolean prettyPrint, final boolea...
    method ChangeGeoJsonSerializer (line 84) | public ChangeGeoJsonSerializer(final boolean prettyPrint)
    method accept (line 89) | @Override
    method convert (line 103) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/serializer/FeatureChangeGeoJsonSerializer.java
  class FeatureChangeGeoJsonSerializer (line 42) | public class FeatureChangeGeoJsonSerializer
    class FeatureChangeTypeHierarchyAdapter (line 48) | protected static class FeatureChangeTypeHierarchyAdapter
      method addGeometryGeojson (line 53) | private static void addGeometryGeojson(final JsonObject result,
      method addGeometryWkt (line 59) | private static void addGeometryWkt(final JsonObject result,
      method FeatureChangeTypeHierarchyAdapter (line 65) | FeatureChangeTypeHierarchyAdapter(final boolean showDescription)
      method serialize (line 70) | public JsonElement serialize(final FeatureChange source)
      method serialize (line 97) | @Override
    class AtlasEntityGeometryPrintableConverter (line 108) | private static class AtlasEntityGeometryPrintableConverter
      method convert (line 111) | @Override
    class AtlasEntityPropertiesConverter (line 164) | private static class AtlasEntityPropertiesConverter
      method convert (line 167) | @Override
    method add (line 223) | private static <T> void add(final JsonObject result, final String name...
    method addProperty (line 236) | private static <T> void addProperty(final JsonObject result, final Str...
    method FeatureChangeGeoJsonSerializer (line 242) | public FeatureChangeGeoJsonSerializer(final boolean prettyPrint)
    method FeatureChangeGeoJsonSerializer (line 247) | public FeatureChangeGeoJsonSerializer(final boolean prettyPrint, final...
    method accept (line 260) | @Override
    method convert (line 274) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/testing/AtlasChangeGeneratorAddTurnRestrictions.java
  class AtlasChangeGeneratorAddTurnRestrictions (line 29) | public class AtlasChangeGeneratorAddTurnRestrictions implements AtlasCha...
    method AtlasChangeGeneratorAddTurnRestrictions (line 36) | public AtlasChangeGeneratorAddTurnRestrictions()
    method AtlasChangeGeneratorAddTurnRestrictions (line 41) | public AtlasChangeGeneratorAddTurnRestrictions(final int minimumNodeVa...
    method generateWithoutValidation (line 46) | @Override
    method mergeRelationMembers (line 127) | private Set<Long> mergeRelationMembers(final Set<Relation> relations, ...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/testing/AtlasChangeGeneratorRemoveReverseEdges.java
  class AtlasChangeGeneratorRemoveReverseEdges (line 16) | public class AtlasChangeGeneratorRemoveReverseEdges implements AtlasChan...
    method generateWithoutValidation (line 20) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/testing/AtlasChangeGeneratorSplitRoundabout.java
  class AtlasChangeGeneratorSplitRoundabout (line 25) | public class AtlasChangeGeneratorSplitRoundabout implements AtlasChangeG...
    method generateWithoutValidation (line 29) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/change/validators/ChangeValidator.java
  class ChangeValidator (line 31) | public class ChangeValidator
    method ChangeValidator (line 37) | public ChangeValidator(final Change change)
    method validate (line 42) | public void validate()
    method validateAreaGeometricRelationsUpdated (line 55) | protected void validateAreaGeometricRelationsUpdated()
    method validateChangeNotEmpty (line 120) | protected void validateChangeNotEmpty()
    method validateEdgeGeometricRelationsUpdated (line 128) | protected void validateEdgeGeometricRelationsUpdated()
    method validateLineGeometricRelationsUpdated (line 192) | protected void validateLineGeometricRelationsUpdated()
    method validateReverseEdgesHaveForwardMatchingCounterpart (line 256) | protected void validateReverseEdgesHaveForwardMatchingCounterpart()
    method differ (line 291) | private <T> boolean differ(final T left, final T right, final BiPredic...
    method validateEdgeConnectedNodesMatch (line 303) | private void validateEdgeConnectedNodesMatch(final Edge forwardEdge, f...
    method validateEdgePolyLinesMatch (line 326) | private void validateEdgePolyLinesMatch(final Edge forwardEdge, final ...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/BinaryChangeSetDeserializer.java
  class BinaryChangeSetDeserializer (line 20) | @Deprecated
    method BinaryChangeSetDeserializer (line 28) | public BinaryChangeSetDeserializer(final Resource resourceToReadFrom) ...
    method close (line 34) | @Override
    method get (line 40) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/BinaryChangeSetSerializer.java
  class BinaryChangeSetSerializer (line 17) | @Deprecated
    method BinaryChangeSetSerializer (line 24) | public BinaryChangeSetSerializer(final WritableResource resourceToWrit...
    method accept (line 29) | @Override
    method close (line 43) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeAction.java
  type ChangeAction (line 9) | @Deprecated

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeItem.java
  type ChangeItem (line 18) | @Deprecated
    method getAction (line 24) | ChangeAction getAction();
    method getGeometry (line 32) | Iterable<Location> getGeometry();
    method getIdentifier (line 40) | long getIdentifier();
    method getMembers (line 45) | Iterable<ChangeItemMember> getMembers();
    method getRelationBean (line 52) | Optional<RelationBean> getRelationBean();
    method getScore (line 59) | default double getScore()
    method getSourceName (line 67) | String getSourceName();
    method getTags (line 72) | @Override
    method getType (line 78) | ItemType getType();

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeItemMember.java
  type ChangeItemMember (line 12) | @Deprecated
    method getIdentifier (line 18) | long getIdentifier();
    method getRole (line 24) | String getRole();
    method getType (line 29) | ItemType getType();

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeSet.java
  type ChangeSet (line 18) | @Deprecated
    method contains (line 28) | boolean contains(long identifier, ItemType type);
    method contains (line 39) | boolean contains(long identifier, ItemType type, ChangeAction action);
    method get (line 53) | Optional<ChangeItem> get(long identifier, ItemType type);
    method get (line 64) | Optional<ChangeItem> get(long identifier, ItemType type, ChangeAction ...
    method getDescription (line 71) | String getDescription();
    method getSourceNames (line 77) | Iterable<String> getSourceNames();
    method getVersion (line 84) | String getVersion();
    method iterator (line 91) | Iterator<ChangeItem> iterator(ChangeAction action);
    method iterator (line 98) | Iterator<ChangeItem> iterator(ItemType type);
    method iterator (line 107) | Iterator<ChangeItem> iterator(ItemType type, ChangeAction action);
    method setDescription (line 113) | void setDescription(String description);
    method setVersion (line 122) | void setVersion(String version);
    method subSet (line 129) | Set<ChangeItem> subSet(ChangeAction action);
    method subSet (line 136) | Set<ChangeItem> subSet(ItemType type);
    method subSet (line 147) | Set<ChangeItem> subSet(ItemType type, ChangeAction action);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeSetAtlasBuilder.java
  class ChangeSetAtlasBuilder (line 34) | @Deprecated
    method ChangeSetAtlasBuilder (line 44) | public ChangeSetAtlasBuilder(final Atlas atlas, final ChangeSet change...
    method get (line 57) | public Atlas get()
    method addItem (line 73) | private void addItem(final long identifier, final ItemType type,
    method handleRelations (line 99) | private void handleRelations()
    method handleSimple (line 186) | private void handleSimple(final Iterable<? extends AtlasItem> items)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeSetDeserializer.java
  type ChangeSetDeserializer (line 13) | @Deprecated

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/ChangeSetSerializer.java
  type ChangeSetSerializer (line 12) | @Deprecated

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/GeoJSONChangeSetSerializer.java
  class GeoJSONChangeSetSerializer (line 18) | @Deprecated
    method GeoJSONChangeSetSerializer (line 23) | public GeoJSONChangeSetSerializer(final WritableResource resourceToWri...
    method accept (line 28) | @Override
    method close (line 34) | @Override
    method toGeoJson (line 40) | public GeoJsonObject toGeoJson(final ChangeSet changeSet)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/MutableChangeItem.java
  type MutableChangeItem (line 16) | @Deprecated
    method addAllMembers (line 19) | void addAllMembers(Iterable<ChangeItemMember> members) throws CoreExce...
    method addMember (line 21) | void addMember(ChangeItemMember member) throws CoreException;
    method removeMember (line 23) | boolean removeMember(long identifier, String role, ItemType type) thro...
    method setAction (line 25) | void setAction(ChangeAction action);
    method setGeometry (line 27) | void setGeometry(Iterable<Location> geometry) throws CoreException;
    method setIdentifier (line 29) | void setIdentifier(long identifier);
    method setScore (line 36) | void setScore(double score);
    method setSourceName (line 38) | void setSourceName(String sourceName);
    method setTags (line 40) | void setTags(Map<String, String> tags);
    method setType (line 42) | void setType(ItemType type);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/SimpleChangeItem.java
  class SimpleChangeItem (line 22) | @Deprecated
    method SimpleChangeItem (line 36) | public SimpleChangeItem()
    method SimpleChangeItem (line 41) | public SimpleChangeItem(final long identifier, final String sourceName...
    method addAllMembers (line 54) | @Override
    method addMember (line 61) | @Override
    method equals (line 68) | @Override
    method getAction (line 85) | @Override
    method getGeometry (line 91) | @Override
    method getIdentifier (line 97) | @Override
    method getMembers (line 103) | @Override
    method getRelationBean (line 109) | @Override
    method getScore (line 123) | @Override
    method getSourceName (line 129) | @Override
    method getTag (line 135) | @Override
    method getTags (line 141) | @Override
    method getType (line 147) | @Override
    method hashCode (line 153) | @Override
    method removeMember (line 163) | @Override
    method setAction (line 171) | @Override
    method setGeometry (line 177) | @Override
    method setIdentifier (line 184) | @Override
    method setMembers (line 190) | public void setMembers(final Iterable<ChangeItemMember> members)
    method setScore (line 196) | @Override
    method setSourceName (line 202) | @Override
    method setTags (line 208) | @Override
    method setType (line 214) | @Override
    method assertTypeIsNotRelation (line 220) | private void assertTypeIsNotRelation()
    method assertTypeIsRelation (line 229) | private void assertTypeIsRelation()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/SimpleChangeItemMember.java
  class SimpleChangeItemMember (line 15) | @Deprecated
    method SimpleChangeItemMember (line 24) | public SimpleChangeItemMember(final long identifier, final String role...
    method equals (line 31) | @Override
    method getIdentifier (line 43) | @Override
    method getRole (line 49) | @Override
    method getType (line 55) | @Override
    method hashCode (line 61) | @Override
    method setIdentifier (line 67) | public void setIdentifier(final long identifier)
    method setRole (line 72) | public void setRole(final String role)
    method setType (line 77) | public void setType(final ItemType type)
    method toString (line 82) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/changeset/SimpleChangeSet.java
  class SimpleChangeSet (line 30) | @Deprecated
    method computeKey (line 41) | private static String computeKey(final long identifier, final ItemType...
    method SimpleChangeSet (line 47) | public SimpleChangeSet()
    method add (line 53) | @Override
    method addAll (line 59) | @Override
    method clear (line 70) | @Override
    method contains (line 76) | @Override
    method contains (line 89) | @Override
    method contains (line 95) | @Override
    method containsAll (line 105) | @Override
    method equals (line 111) | @Override
    method get (line 124) | @Override
    method get (line 138) | @Override
    method getDescription (line 145) | @Override
    method getSourceNames (line 151) | @Override
    method getVersion (line 159) | @Override
    method hashCode (line 165) | @Override
    method isEmpty (line 171) | @Override
    method iterator (line 177) | @Override
    method iterator (line 183) | @Override
    method iterator (line 189) | @Override
    method iterator (line 195) | @Override
    method remove (line 202) | @Override
    method removeAll (line 208) | @Override
    method retainAll (line 214) | @Override
    method setDescription (line 220) | @Override
    method setVersion (line 226) | @Override
    method size (line 232) | @Override
    method subSet (line 238) | @Override
    method subSet (line 244) | @Override
    method subSet (line 250) | @Override
    method toArray (line 257) | @Override
    method toArray (line 263) | @Override
    method computeKey (line 269) | private String computeKey(final ChangeItem item)
    method filterIterator (line 274) | private Iterator<ChangeItem> filterIterator(final Iterator<ChangeItem>...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AbstractAtlasOutputTestSubCommand.java
  class AbstractAtlasOutputTestSubCommand (line 37) | abstract class AbstractAtlasOutputTestSubCommand extends AbstractAtlasSu...
    method AbstractAtlasOutputTestSubCommand (line 57) | protected AbstractAtlasOutputTestSubCommand(final String name, final S...
    method switches (line 62) | @Override
    method usage (line 69) | @Override
    method filter (line 81) | protected abstract boolean filter(AtlasEntity entity);
    method finish (line 83) | @Override
    method handle (line 117) | @Override
    method start (line 125) | @SuppressWarnings("unchecked")
    method output (line 142) | private void output(final AtlasEntity item)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AbstractAtlasSubCommand.java
  class AbstractAtlasSubCommand (line 22) | public abstract class AbstractAtlasSubCommand implements FlexibleSubCommand
    method AbstractAtlasSubCommand (line 38) | protected AbstractAtlasSubCommand(final String name, final String desc...
    method execute (line 44) | @Override
    method getDescription (line 73) | @Override
    method getName (line 79) | @Override
    method switches (line 85) | @Override
    method finish (line 99) | protected int finish(final CommandMap command)
    method handle (line 112) | protected abstract void handle(Atlas atlas, CommandMap command);
    method start (line 121) | protected void start(final CommandMap command)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasCommandConstants.java
  type AtlasCommandConstants (line 8) | public interface AtlasCommandConstants

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasCountriesSubCommand.java
  class AtlasCountriesSubCommand (line 15) | public class AtlasCountriesSubCommand extends AbstractAtlasSubCommand
    method AtlasCountriesSubCommand (line 19) | public AtlasCountriesSubCommand()
    method usage (line 25) | @Override
    method finish (line 31) | @Override
    method handle (line 39) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasFeatureCountsSubCommand.java
  class AtlasFeatureCountsSubCommand (line 30) | public class AtlasFeatureCountsSubCommand extends AbstractAtlasSubCommand
    type AtlasType (line 35) | protected enum AtlasType
    method AtlasFeatureCountsSubCommand (line 56) | public AtlasFeatureCountsSubCommand()
    method switches (line 62) | @Override
    method usage (line 68) | @Override
    method finish (line 74) | @Override
    method handle (line 104) | @Override
    method updateHashMapForAtlasType (line 113) | private void updateHashMapForAtlasType(final AtlasType type, final Atl...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasFindByAtlasIdentifierSubCommand.java
  class AtlasFindByAtlasIdentifierSubCommand (line 23) | public class AtlasFindByAtlasIdentifierSubCommand extends AbstractAtlasS...
    method AtlasFindByAtlasIdentifierSubCommand (line 40) | public AtlasFindByAtlasIdentifierSubCommand()
    method switches (line 46) | @Override
    method usage (line 52) | @Override
    method finish (line 60) | @Override
    method handle (line 77) | @Override
    method start (line 90) | @Override
    method formatAtlasObject (line 105) | private String formatAtlasObject(final AtlasEntity entity)
    method identifierCheck (line 120) | private <T extends AtlasObject> Predicate<T> identifierCheck()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasFindByFeatureIdentifierLocatorSubCommand.java
  class AtlasFindByFeatureIdentifierLocatorSubCommand (line 30) | public class AtlasFindByFeatureIdentifierLocatorSubCommand extends Abstr...
    method AtlasFindByFeatureIdentifierLocatorSubCommand (line 74) | public AtlasFindByFeatureIdentifierLocatorSubCommand()
    method switches (line 80) | @Override
    method usage (line 86) | @Override
    method formatAtlasObject (line 93) | protected String formatAtlasObject(final String type, final Atlas atlas,
    method handle (line 102) | @Override
    method start (line 143) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasFindEntitiesByIdSubCommand.java
  class AtlasFindEntitiesByIdSubCommand (line 20) | public class AtlasFindEntitiesByIdSubCommand extends AbstractAtlasOutput...
    method AtlasFindEntitiesByIdSubCommand (line 30) | public AtlasFindEntitiesByIdSubCommand()
    method switches (line 36) | @Override
    method usage (line 42) | @Override
    method filter (line 50) | @Override
    method start (line 56) | @SuppressWarnings("unchecked")

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasGeoJSONSubCommand.java
  class AtlasGeoJSONSubCommand (line 25) | public class AtlasGeoJSONSubCommand extends AbstractAtlasSubCommand
    method AtlasGeoJSONSubCommand (line 33) | public AtlasGeoJSONSubCommand()
    method switches (line 38) | @Override
    method usage (line 44) | @Override
    method finish (line 54) | @Override
    method handle (line 61) | @Override
    method getWriter (line 67) | @SuppressWarnings("unchecked")

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasItemsWithSharedShapepointsSubCommand.java
  class AtlasItemsWithSharedShapepointsSubCommand (line 50) | public class AtlasItemsWithSharedShapepointsSubCommand extends AbstractA...
    class PolyLineTrouble (line 58) | private static final class PolyLineTrouble
      method PolyLineTrouble (line 63) | PolyLineTrouble(final AtlasItem item)
      method getOsmId (line 69) | Long getOsmId()
      method hasDuplicatePoints (line 80) | boolean hasDuplicatePoints()
    method AtlasItemsWithSharedShapepointsSubCommand (line 108) | public AtlasItemsWithSharedShapepointsSubCommand()
    method switches (line 114) | @Override
    method usage (line 120) | @Override
    method finish (line 127) | @Override
    method handle (line 152) | @Override
    method outputFor (line 176) | protected PrintStream outputFor(final String isoCountry, final Command...
    method start (line 193) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasJoinerSubCommand.java
  class AtlasJoinerSubCommand (line 35) | public class AtlasJoinerSubCommand extends AbstractAtlasSubCommand
    method AtlasJoinerSubCommand (line 47) | public AtlasJoinerSubCommand()
    method switches (line 52) | @Override
    method usage (line 58) | @Override
    method finish (line 68) | @Override
    method handle (line 86) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasListRestrictedPathsCommand.java
  class AtlasListRestrictedPathsCommand (line 25) | public class AtlasListRestrictedPathsCommand extends AbstractAtlasSubCom...
    method AtlasListRestrictedPathsCommand (line 33) | public AtlasListRestrictedPathsCommand()
    method switches (line 40) | @Override
    method usage (line 46) | @Override
    method finish (line 52) | @Override
    method handle (line 81) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasListValidTurnRestrictionIds.java
  class AtlasListValidTurnRestrictionIds (line 23) | public class AtlasListValidTurnRestrictionIds extends AbstractAtlasSubCo...
    method AtlasListValidTurnRestrictionIds (line 31) | public AtlasListValidTurnRestrictionIds()
    method switches (line 37) | @Override
    method usage (line 43) | @Override
    method finish (line 49) | @Override
    method handle (line 66) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasMetadataSubCommand.java
  class AtlasMetadataSubCommand (line 14) | public class AtlasMetadataSubCommand extends AbstractAtlasSubCommand
    method AtlasMetadataSubCommand (line 16) | public AtlasMetadataSubCommand()
    method usage (line 21) | @Override
    method handle (line 29) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasMissingISOSubCommand.java
  class AtlasMissingISOSubCommand (line 25) | public class AtlasMissingISOSubCommand extends AbstractAtlasSubCommand
    method AtlasMissingISOSubCommand (line 32) | public AtlasMissingISOSubCommand()
    method usage (line 37) | @Override
    method finish (line 45) | @Override
    method handle (line 58) | @Override
    method start (line 67) | @Override
    method log (line 74) | private void log(final AtlasItem item)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasReader.java
  class AtlasReader (line 19) | public class AtlasReader extends FlexibleCommand
    method main (line 21) | public static void main(final String... args)
    method AtlasReader (line 35) | public AtlasReader(final String... args)
    method getSupportedCommands (line 40) | @SuppressWarnings("unchecked")

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasResourceLoaderErrorSubCommand.java
  class AtlasResourceLoaderErrorSubCommand (line 24) | public class AtlasResourceLoaderErrorSubCommand implements FlexibleSubCo...
    method execute (line 32) | @Override
    method getDescription (line 49) | @Override
    method getName (line 55) | @Override
    method switches (line 61) | @Override
    method usage (line 67) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/AtlasSplitterWithSlippyTileCommand.java
  class AtlasSplitterWithSlippyTileCommand (line 28) | public class AtlasSplitterWithSlippyTileCommand extends AbstractAtlasSub...
    method AtlasSplitterWithSlippyTileCommand (line 38) | public AtlasSplitterWithSlippyTileCommand()
    method switches (line 43) | @Override
    method usage (line 49) | @Override
    method handle (line 57) | @Override
    method buildAtlasBasedOnTile (line 85) | private PackedAtlas buildAtlasBasedOnTile(final SlippyTile tile, final...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/FerrySearchSubCommand.java
  class FerrySearchSubCommand (line 18) | public class FerrySearchSubCommand extends AbstractAtlasSubCommand
    method FerrySearchSubCommand (line 22) | public FerrySearchSubCommand()
    method usage (line 27) | @Override
    method finish (line 33) | @Override
    method handle (line 40) | @Override
    method start (line 51) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/OsmPbfToAtlasSubCommand.java
  class OsmPbfToAtlasSubCommand (line 35) | public class OsmPbfToAtlasSubCommand implements FlexibleSubCommand
    method execute (line 78) | @Override
    method getDescription (line 93) | @Override
    method getName (line 99) | @Override
    method switches (line 105) | @Override
    method usage (line 114) | @Override
    method getAtlasLoadingOption (line 144) | private AtlasLoadingOption getAtlasLoadingOption(final CommandMap map)
    method getCountryBoundaryMap (line 194) | private CountryBoundaryMap getCountryBoundaryMap(final CommandMap map)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/PackedToTextAtlasSubCommand.java
  class PackedToTextAtlasSubCommand (line 23) | public class PackedToTextAtlasSubCommand implements FlexibleSubCommand
    method execute (line 38) | @Override
    method getDescription (line 49) | @Override
    method getName (line 55) | @Override
    method switches (line 61) | @Override
    method usage (line 67) | @Override
    method preVerify (line 74) | private void preVerify()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/SubAtlasSubCommand.java
  class SubAtlasSubCommand (line 31) | public class SubAtlasSubCommand extends AbstractAtlasSubCommand
    method SubAtlasSubCommand (line 44) | public SubAtlasSubCommand()
    method switches (line 49) | @Override
    method usage (line 55) | @Override
    method finish (line 67) | @Override
    method handle (line 94) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/TextToPackedAtlasSubCommand.java
  class TextToPackedAtlasSubCommand (line 23) | public class TextToPackedAtlasSubCommand implements FlexibleSubCommand
    method execute (line 38) | @Override
    method getDescription (line 49) | @Override
    method getName (line 55) | @Override
    method switches (line 61) | @Override
    method usage (line 67) | @Override
    method preVerify (line 74) | private void preVerify()

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/buildings/AtlasFindBuildingPartsSubCommand.java
  class AtlasFindBuildingPartsSubCommand (line 21) | public class AtlasFindBuildingPartsSubCommand extends AbstractAtlasSubCo...
    method output (line 23) | private static void output(final AtlasItem item)
    method AtlasFindBuildingPartsSubCommand (line 29) | public AtlasFindBuildingPartsSubCommand()
    method usage (line 34) | @Override
    method handle (line 40) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/buildings/BuildingsWithHeightSearchSubCommand.java
  class BuildingsWithHeightSearchSubCommand (line 40) | public class BuildingsWithHeightSearchSubCommand extends AbstractAtlasSu...
    class BuildingHeightItem (line 47) | private static final class BuildingHeightItem implements Comparable<Bu...
      method BuildingHeightItem (line 58) | BuildingHeightItem(final ComplexBuilding building)
      method compareTo (line 88) | @Override
      method equals (line 96) | @Override
      method hashCode (line 111) | @Override
      method isValid (line 117) | private boolean isValid()
      method output (line 122) | private void output(final int count, final PrintStream stream)
    class BuildingsWithHeightLogger (line 136) | private static final class BuildingsWithHeightLogger
      method BuildingsWithHeightLogger (line 142) | private BuildingsWithHeightLogger(final PrintStream output)
      method accept (line 150) | @Override
      method close (line 160) | @Override
    method BuildingsWithHeightSearchSubCommand (line 179) | public BuildingsWithHeightSearchSubCommand()
    method switches (line 184) | @Override
    method usage (line 190) | @Override
    method finish (line 197) | @Override
    method handle (line 211) | @Override
    method start (line 218) | @Override
    method createStream (line 225) | private PrintStream createStream(final CommandMap command)
    method hasHeight (line 246) | private boolean hasHeight(final ComplexBuilding building)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/command/buildings/TinyBuildingsSearchSubCommand.java
  class TinyBuildingsSearchSubCommand (line 36) | public class TinyBuildingsSearchSubCommand extends AbstractAtlasSubCommand
    class TinyBuildingLogger (line 43) | private static final class TinyBuildingLogger implements Consumer<Comp...
      method TinyBuildingLogger (line 47) | private TinyBuildingLogger(final PrintStream output)
      method accept (line 52) | @Override
      method close (line 68) | @Override
    method TinyBuildingsSearchSubCommand (line 87) | public TinyBuildingsSearchSubCommand()
    method switches (line 93) | @Override
    method tooSmall (line 99) | public boolean tooSmall(final ComplexBuilding building)
    method usage (line 112) | @Override
    method finish (line 120) | @Override
    method handle (line 134) | @Override
    method start (line 141) | @Override
    method createStream (line 149) | private PrintStream createStream(final CommandMap command)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteArea.java
  class CompleteArea (line 27) | public class CompleteArea extends Area implements CompleteEntity<Complet...
    method from (line 49) | public static CompleteArea from(final Area area)
    method shallowFrom (line 75) | public static CompleteArea shallowFrom(final Area area)
    method CompleteArea (line 84) | public CompleteArea(final Long identifier, final Polygon polygon,
    method CompleteArea (line 102) | protected CompleteArea(final long identifier)
    method addTagChangeListener (line 107) | @Override
    method asPolygon (line 113) | @Override
    method bounds (line 119) | @Override
    method completeItemType (line 125) | @Override
    method copy (line 131) | public CompleteArea copy()
    method equals (line 136) | @Override
    method fireTagChangeEvent (line 148) | @Override
    method geometricRelationIdentifiers (line 154) | public Set<Long> geometricRelationIdentifiers()
    method getGeometry (line 159) | @Override
    method getIdentifier (line 169) | @Override
    method getTags (line 175) | @Override
    method hashCode (line 181) | @Override
    method isFull (line 187) | @Override
    method isShallow (line 194) | @Override
    method prettify (line 200) | @Override
    method relationIdentifiers (line 251) | @Override
    method relations (line 257) | @Override
    method removeTagChangeListeners (line 269) | @Override
    method setTags (line 275) | @Override
    method toString (line 281) | @Override
    method toWkt (line 289) | @Override
    method withAddedRelationIdentifier (line 299) | @Override
    method withBoundsExtendedBy (line 306) | public CompleteArea withBoundsExtendedBy(final Rectangle bounds)
    method withGeometricRelationIdentifiers (line 317) | public CompleteArea withGeometricRelationIdentifiers(
    method withGeometry (line 324) | @Override
    method withIdentifier (line 330) | @Override
    method withPolygon (line 337) | public CompleteArea withPolygon(final Polygon polygon)
    method withRelationIdentifiers (line 347) | @Override
    method withRelations (line 354) | @Override
    method withRemovedRelationIdentifier (line 366) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteEdge.java
  class CompleteEdge (line 29) | public class CompleteEdge extends Edge implements CompleteLineItem<Compl...
    method from (line 52) | public static CompleteEdge from(final Edge edge)
    method shallowFrom (line 79) | public static CompleteEdge shallowFrom(final Edge edge)
    method CompleteEdge (line 88) | public CompleteEdge(final Long identifier, final PolyLine polyLine,
    method CompleteEdge (line 109) | protected CompleteEdge(final long identifier)
    method addTagChangeListener (line 114) | @Override
    method asPolyLine (line 120) | @Override
    method bounds (line 126) | @Override
    method completeItemType (line 132) | @Override
    method copy (line 138) | public CompleteEdge copy()
    method end (line 144) | @Override
    method endNodeIdentifier (line 154) | public Long endNodeIdentifier()
    method equals (line 159) | @Override
    method fireTagChangeEvent (line 174) | @Override
    method geometricRelationIdentifiers (line 180) | public Set<Long> geometricRelationIdentifiers()
    method getIdentifier (line 185) | @Override
    method getTags (line 191) | @Override
    method hashCode (line 197) | @Override
    method isFull (line 203) | @Override
    method isShallow (line 211) | @Override
    method prettify (line 219) | @Override
    method relationIdentifiers (line 280) | @Override
    method relations (line 286) | @Override
    method removeTagChangeListeners (line 298) | @Override
    method setTags (line 304) | @Override
    method start (line 310) | @Override
    method startNodeIdentifier (line 320) | public Long startNodeIdentifier()
    method toJson (line 325) | @Override
    method toString (line 336) | @Override
    method toWkt (line 345) | @Override
    method withAddedRelationIdentifier (line 355) | @Override
    method withBoundsExtendedBy (line 362) | public CompleteEdge withBoundsExtendedBy(final Rectangle bounds)
    method withEndNodeIdentifier (line 373) | public CompleteEdge withEndNodeIdentifier(final Long endNodeIdentifier)
    method withGeometricRelationIdentifiers (line 379) | public CompleteEdge withGeometricRelationIdentifiers(
    method withGeometry (line 386) | @Override
    method withIdentifier (line 392) | @Override
    method withPolyLine (line 399) | @Override
    method withRelationIdentifiers (line 410) | @Override
    method withRelations (line 417) | @Override
    method withRemovedRelationIdentifier (line 429) | @Override
    method withStartNodeIdentifier (line 441) | public CompleteEdge withStartNodeIdentifier(final Long startNodeIdenti...

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteEntity.java
  type CompleteEntity (line 35) | public interface CompleteEntity<C extends CompleteEntity<C>> extends Tag...
    method addNewTag (line 37) | static Map<String, String> addNewTag(final Map<String, String> tags, f...
    method basicEqual (line 58) | static boolean basicEqual(final AtlasEntity left, final AtlasEntity ri...
    method equalThroughGet (line 65) | static <M, T> boolean equalThroughGet(final M left, final M right, fin...
    method from (line 90) | static AtlasEntity from(final AtlasEntity reference)
    method removeTag (line 112) | static Map<String, String> removeTag(final Map<String, String> tags, f...
    method shallowFrom (line 133) | static AtlasEntity shallowFrom(final AtlasEntity reference)
    method shallowFrom (line 164) | static AtlasEntity shallowFrom(final ItemType type, final Long identif...
    method withAddedTag (line 185) | static <C extends CompleteEntity<C>> C withAddedTag(final C completeEn...
    method withRemovedTag (line 201) | static <C extends CompleteEntity<C>> C withRemovedTag(final C complete...
    method withReplacedTag (line 216) | static <C extends CompleteEntity<C>> C withReplacedTag(final C complet...
    method withTags (line 233) | static <C extends CompleteEntity<C>> C withTags(final C completeEntity,
    method completeItemType (line 247) | CompleteItemType completeItemType();
    method getGeometry (line 249) | Iterable<Location> getGeometry();
    method getIdentifier (line 251) | long getIdentifier();
    method getTags (line 253) | Map<String, String> getTags();
    method getType (line 255) | ItemType getType();
    method isFull (line 262) | boolean isFull();
    method isShallow (line 269) | boolean isShallow();
    method prettify (line 281) | String prettify(PrettifyStringFormat format, boolean truncate);
    method prettify (line 291) | default String prettify(final PrettifyStringFormat format)
    method prettify (line 302) | default String prettify()
    method relationIdentifiers (line 307) | Set<Long> relationIdentifiers();
    method setTags (line 309) | void setTags(Map<String, String> tags);
    method toJson (line 311) | JsonObject toJson();
    method toWkt (line 318) | String toWkt();
    method truncate (line 320) | default String truncate(final String input)
    method withAddedRelationIdentifier (line 326) | CompleteEntity withAddedRelationIdentifier(Long relationIdentifier);
    method withAddedTag (line 328) | default C withAddedTag(final String key, final String value)
    method withGeometry (line 333) | CompleteEntity withGeometry(Iterable<Location> locations);
    method withIdentifier (line 335) | CompleteEntity withIdentifier(long identifier);
    method withRelationIdentifiers (line 337) | CompleteEntity withRelationIdentifiers(Set<Long> relationIdentifiers);
    method withRelations (line 339) | CompleteEntity withRelations(Set<Relation> relations);
    method withRemovedRelationIdentifier (line 341) | CompleteEntity withRemovedRelationIdentifier(Long relationIdentifier);
    method withRemovedTag (line 343) | default C withRemovedTag(final String key)
    method withReplacedTag (line 348) | default C withReplacedTag(final String oldKey, final String newKey, fi...
    method withTags (line 353) | default C withTags(final Map<String, String> tags)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteItemType.java
  type CompleteItemType (line 14) | public enum CompleteItemType
    method from (line 28) | public static CompleteItemType from(final ItemType itemType)
    method shallowFrom (line 35) | public static <C extends CompleteEntity> C shallowFrom(final AtlasEnti...
    method CompleteItemType (line 43) | CompleteItemType(final Class<? extends CompleteEntity> completeEntityC...
    method completeEntityFrom (line 50) | public <C extends CompleteEntity> C completeEntityFrom(final AtlasEnti...
    method completeEntityShallowFrom (line 56) | public <C extends CompleteEntity> C completeEntityShallowFrom(final At...
    method getCompleteEntityClass (line 62) | public Class<? extends CompleteEntity> getCompleteEntityClass()
    method getItemType (line 67) | public ItemType getItemType()
    method validate (line 72) | private void validate(final AtlasEntity reference)

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteLine.java
  class CompleteLine (line 27) | public class CompleteLine extends Line implements CompleteLineItem<Compl...
    method from (line 49) | public static CompleteLine from(final Line line)
    method shallowFrom (line 75) | public static CompleteLine shallowFrom(final Line line)
    method CompleteLine (line 84) | public CompleteLine(final Long identifier, final PolyLine polyLine,
    method CompleteLine (line 103) | protected CompleteLine(final long identifier)
    method addTagChangeListener (line 108) | @Override
    method asPolyLine (line 114) | @Override
    method bounds (line 120) | @Override
    method completeItemType (line 126) | @Override
    method copy (line 132) | public CompleteLine copy()
    method equals (line 138) | @Override
    method fireTagChangeEvent (line 150) | @Override
    method geometricRelationIdentifiers (line 156) | public Set<Long> geometricRelationIdentifiers()
    method getIdentifier (line 161) | @Override
    method getTags (line 167) | @Override
    method hashCode (line 173) | @Override
    method isFull (line 179) | @Override
    method isShallow (line 186) | @Override
    method prettify (line 192) | @Override
    method relationIdentifiers (line 243) | @Override
    method relations (line 249) | @Override
    method removeTagChangeListeners (line 261) | @Override
    method setTags (line 267) | @Override
    method toString (line 273) | @Override
    method toWkt (line 281) | @Override
    method withAddedRelationIdentifier (line 291) | @Override
    method withBoundsExtendedBy (line 298) | public CompleteLine withBoundsExtendedBy(final Rectangle bounds)
    method withGeometricRelationIdentifiers (line 309) | public CompleteLine withGeometricRelationIdentifiers(
    method withGeometry (line 316) | @Override
    method withIdentifier (line 322) | @Override
    method withPolyLine (line 329) | @Override
    method withRelationIdentifiers (line 340) | @Override
    method withRelations (line 347) | @Override
    method withRemovedRelationIdentifier (line 359) | @Override

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteLineItem.java
  type CompleteLineItem (line 16) | public interface CompleteLineItem<E extends CompleteLineItem<E>> extends...
    method asPolyLine (line 18) | PolyLine asPolyLine();
    method getGeometry (line 20) | @Override
    method withPolyLine (line 30) | CompleteLineItem withPolyLine(PolyLine polyLine);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteLocationItem.java
  type CompleteLocationItem (line 16) | public interface CompleteLocationItem<E extends CompleteLocationItem<E>>...
    method getGeometry (line 18) | @Override
    method getLocation (line 30) | Location getLocation();
    method withLocation (line 32) | CompleteLocationItem withLocation(Location location);

FILE: src/main/java/org/openstreetmap/atlas/geography/atlas/complete/CompleteNode.java
  class CompleteNode (line 32) | public class CompleteNode extends Node implements CompleteLocationItem<C...
    method from (line 57) | public static CompleteNode from(final Node node)
    method shallowFrom (line 82) | public static CompleteNode shallowFrom(final Node node)
    method CompleteNode (line 91) | public CompleteNode(final Long identifier, final Location location,
    method CompleteNode (line 114) | CompleteNode(final long identifier)
    method addTagChangeListener (line 119) | @Override
    method bounds (line 125) | @Override
    method completeItemType (line 131) | @Override
    method copy (line 137) | public CompleteNode copy()
    method equals (line 143) | @Override
    method explicitlyExcludedInEdgeIdentifiers (line 157) | public Set<Long> explicitlyExcludedInEdgeIdentifiers()
    method explicitlyExcludedOutEdgeIdentifiers (line 162) | public Set<Long> explicitlyExcludedOutEdgeIdentifiers()
    method fireTagChangeEvent (line 167) | @Override
    method getIdentifier (line 173) | @Override
    method getLocation (line 179) | @Override
    method getTags (line 185) | @Override
    method hashCode (line 191) | @Override
    method inEdgeIdentifiers (line 197) | public Set<Long> inEdgeIdentifiers()
    method inEdges (line 202) | @Override
    method isFull (line 214) | @Override
    method isShallow (line 222) | @Override
    method outEdgeIdentifiers
Copy disabled (too large) Download .json
Condensed preview — 2119 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,897K chars).
[
  {
    "path": ".circleci/config.yml",
    "chars": 904,
    "preview": "# Java Gradle CircleCI 2.0 configuration file\n#\n# Check https://circleci.com/docs/2.0/language-java/ for more details\n#\n"
  },
  {
    "path": ".circleci/sonar.sh",
    "chars": 1831,
    "preview": "#!/usr/bin/env sh\n\nif [ -z \"$CIRCLE_PR_NUMBER\" ];\nthen\n    echo \"Running sonarqube in a regular build\"\n    echo \"sonar.b"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 350,
    "preview": "### Description:\n\nAdd description here.\n\n### Potential Impact:\n\nList potential impact to downstream libraries here (ex. "
  },
  {
    "path": ".github/workflow_scripts/decrypt_gpg_key.sh",
    "chars": 452,
    "preview": "#!/bin/sh\n\n# Decrypt the file\n\nif [ \"$MANUAL_RELEASE_TRIGGERED\" = \"true\" ];\nthen\n    # --batch to prevent interactive co"
  },
  {
    "path": ".github/workflow_scripts/deploy.sh",
    "chars": 974,
    "preview": "#!/bin/sh\n\nCURRENT_BRANCH=$(echo \"$GITHUB_REF\" | awk 'BEGIN { FS = \"/\" } ; { print $3 }')\necho \"Criterion for Publishing"
  },
  {
    "path": ".github/workflow_scripts/merge-dev-to-main.sh",
    "chars": 1531,
    "preview": "#!/usr/bin/env sh\n\nGITHUB_REPO=\"osmlab/atlas\"\nMERGE_BRANCH=main\nSOURCE_BRANCH=dev\n\nFUNCTION_NAME=\"merge-$SOURCE_BRANCH-t"
  },
  {
    "path": ".github/workflow_scripts/sonar.sh",
    "chars": 1635,
    "preview": "#!/usr/bin/env sh\n\nif [ -n \"$GITHUB_HEAD_REF\" ];\nthen\n    PULL_REQUEST_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = \"/\""
  },
  {
    "path": ".github/workflow_scripts/tag-main.sh",
    "chars": 1861,
    "preview": "#!/usr/bin/env sh\n\nGITHUB_REPO=\"osmlab/atlas\"\nRELEASE_BRANCH=main\n\nFUNCTION_NAME=\"tag-$RELEASE_BRANCH\"\nCURRENT_BRANCH=$("
  },
  {
    "path": ".github/workflow_scripts/update_project_version.sh",
    "chars": 398,
    "preview": "#!/bin/sh\n\nCURRENT_BRANCH=$(echo \"$GITHUB_REF\" | awk 'BEGIN { FS = \"/\" } ; { print $3 }')\necho \"Current Branch: $CURRENT"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 2930,
    "preview": "name: Continuous Integration\n\non:\n  push:\n    branches: [ main, dev ]\n  pull_request:\n    branches: [ dev ]\n  workflow_d"
  },
  {
    "path": ".gitignore",
    "chars": 340,
    "preview": "**/build/\n**/bin/\n.classpath\n.project\n.settings\n.checkstyle\n.gradle\n.out\n.dist\n*.ipr\n*.iml\n*.iws\n*.ws~\n.idea/\n/tags\n/bui"
  },
  {
    "path": ".travis/build-pyatlas-gate.sh",
    "chars": 178,
    "preview": "#!/usr/bin/env sh\n\nif [ $TRAVIS_TEST_RESULT -eq 0 ];\nthen\n\t./gradlew cleanPyatlas buildPyatlas\n\tRETURN_VALUE=$?\n\tif [ \"$"
  },
  {
    "path": ".travis/build.sh",
    "chars": 403,
    "preview": "#!/usr/bin/env sh\n\nchmod u+x gradlew\n\nif [ \"$MANUAL_RELEASE_TRIGGERED\" = \"true\" ];\nthen\n\t# This is a release job, trigge"
  },
  {
    "path": ".travis/deploy-gate.sh",
    "chars": 160,
    "preview": "#!/usr/bin/env sh\n\nif [ $TRAVIS_TEST_RESULT -eq 0 ];\nthen\n\t.travis/deploy.sh\n\tRETURN_VALUE=$?\n\tif [ \"$RETURN_VALUE\" != \""
  },
  {
    "path": ".travis/deploy.sh",
    "chars": 393,
    "preview": "#!/usr/bin/env sh\n\nif [ \"$TRAVIS_BRANCH\" = \"main\" ] && [ \"$TRAVIS_PULL_REQUEST\" = \"false\" ];\nthen\n\tif [ \"$MANUAL_RELEASE"
  },
  {
    "path": ".travis/install.sh",
    "chars": 245,
    "preview": "#!/usr/bin/env sh\n\nif [ \"$TRAVIS_BRANCH\" = \"main\" ] && [ \"$TRAVIS_PULL_REQUEST\" = \"false\" ];\nthen\n    openssl aes-256-cb"
  },
  {
    "path": ".travis/merge-dev-to-main-gate.sh",
    "chars": 171,
    "preview": "#!/usr/bin/env sh\n\nif [ $TRAVIS_TEST_RESULT -eq 0 ];\nthen\n\t.travis/merge-dev-to-main.sh\n\tRETURN_VALUE=$?\n\tif [ \"$RETURN_"
  },
  {
    "path": ".travis/merge-dev-to-main.sh",
    "chars": 1350,
    "preview": "#!/usr/bin/env sh\n\nGITHUB_REPO=\"osmlab/atlas\"\nMERGE_BRANCH=main\nSOURCE_BRANCH=dev\n\nFUNCTION_NAME=\"merge-$SOURCE_BRANCH-t"
  },
  {
    "path": ".travis/sonar-gate.sh",
    "chars": 159,
    "preview": "#!/usr/bin/env sh\n\nif [ $TRAVIS_TEST_RESULT -eq 0 ];\nthen\n\t.travis/sonar.sh\n\tRETURN_VALUE=$?\n\tif [ \"$RETURN_VALUE\" != \"0"
  },
  {
    "path": ".travis/sonar.sh",
    "chars": 1469,
    "preview": "#!/usr/bin/env sh\n\nif [ \"$TRAVIS_PULL_REQUEST\" != \"false\" ];\nthen\n\tSONAR_PULLREQUEST_BRANCH=\"$(echo $TRAVIS_PULL_REQUEST"
  },
  {
    "path": ".travis/tag-main-gate.sh",
    "chars": 162,
    "preview": "#!/usr/bin/env sh\n\nif [ $TRAVIS_TEST_RESULT -eq 0 ];\nthen\n\t.travis/tag-main.sh\n\tRETURN_VALUE=$?\n\tif [ \"$RETURN_VALUE\" !="
  },
  {
    "path": ".travis/tag-main.sh",
    "chars": 1660,
    "preview": "#!/usr/bin/env sh\n\nGITHUB_REPO=\"osmlab/atlas\"\nRELEASE_BRANCH=main\n\nFUNCTION_NAME=\"tag-$RELEASE_BRANCH\"\n\necho \"$FUNCTION_"
  },
  {
    "path": ".travis/trigger-release.sh",
    "chars": 852,
    "preview": "#!/usr/bin/env sh\n\n# Use Travis to trigger a release from Main\n\nGITHUB_ORGANIZATION=osmlab\nGITHUB_REPOSITORY_NAME=atlas\n"
  },
  {
    "path": ".travis.yml",
    "chars": 7067,
    "preview": "env:\n  global:\n    - # GITHUB_SECRET_TOKEN\n    - secure: \"hYLV25stwJ4GX1BXlr7AOdeLHDCE7z395ibQAo0NDCnCqDZdoD3ySZAJteWxuB"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 5142,
    "preview": "# Contributing to Atlas\n\nThanks for taking the time to contribute!\n\n## Where to ask a question\n\nThis project uses [Stack"
  },
  {
    "path": "LICENSE",
    "chars": 1552,
    "preview": "Copyright (c) 2015-2024, Apple Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or wit"
  },
  {
    "path": "README.md",
    "chars": 4147,
    "preview": "# Atlas\n\n![Continuous Integration](https://github.com/osmlab/atlas/workflows/Continuous%20Integration/badge.svg?branch=m"
  },
  {
    "path": "atlas-shell-tools/.atlas-shell-tools-integrity-file",
    "chars": 100,
    "preview": "# This file is used by Atlas Shell Tools to ensure that ATLAS_SHELL_TOOLS_HOME\n# is set correctly.\n\n"
  },
  {
    "path": "atlas-shell-tools/README.md",
    "chars": 9792,
    "preview": "# Atlas Shell Tools\nA command line interface for [`osmlab/atlas`](https://github.com/osmlab/atlas) (and downstream repos"
  },
  {
    "path": "atlas-shell-tools/ast_completions.bash",
    "chars": 2314,
    "preview": "\n# What is this script for?\n#\n# This script provides autocomplete functionality for Atlas Shell Tools in the\n# bash shel"
  },
  {
    "path": "atlas-shell-tools/ast_completions.zsh",
    "chars": 1631,
    "preview": "\n# What is this script for?\n#\n# This script provides autocomplete functionality for Atlas Shell Tools in the\n# zsh shell"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-activate.1",
    "chars": 1680,
    "preview": ".\\\"     Title: atlas-config-activate\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: Eng"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-deactivate.1",
    "chars": 1755,
    "preview": ".\\\"     Title: atlas-config-deactivate\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: E"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-install.1",
    "chars": 3218,
    "preview": ".\\\"     Title: atlas-config-install\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: Engl"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-list.1",
    "chars": 2103,
    "preview": ".\\\"     Title: atlas-config-list\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-log.1",
    "chars": 2560,
    "preview": ".\\\"     Title: atlas-config-log\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-preset.1",
    "chars": 5213,
    "preview": ".\\\"     Title: atlas-config-preset\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: Engli"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-repo.1",
    "chars": 6220,
    "preview": ".\\\"     Title: atlas-config-repo\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-reset.1",
    "chars": 2906,
    "preview": ".\\\"     Title: atlas-config-reset\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: Englis"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-sync.1",
    "chars": 1971,
    "preview": ".\\\"     Title: atlas-config-sync\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-uninstall.1",
    "chars": 2135,
    "preview": ".\\\"     Title: atlas-config-uninstall\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: En"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config-update.1",
    "chars": 1505,
    "preview": ".\\\"     Title: atlas-config-update\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: Engli"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas-config.1",
    "chars": 5213,
    "preview": ".\\\"     Title: atlas-config\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\\"\n"
  },
  {
    "path": "atlas-shell-tools/man/man1/atlas.1",
    "chars": 7655,
    "preview": ".\\\"     Title: atlas\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\\"\n.TH \"AT"
  },
  {
    "path": "atlas-shell-tools/man/man5/atlas-plumbing.5",
    "chars": 4050,
    "preview": ".\\\"     Title: atlas-plumbing\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\"
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-cli.7",
    "chars": 3738,
    "preview": ".\\\"     Title: atlas-cli\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\\"\n.TH"
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-cookbook.7",
    "chars": 2795,
    "preview": ".\\\"     Title: atlas-cookbook\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\"
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-environment.7",
    "chars": 4955,
    "preview": ".\\\"     Title: atlas-environment\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English"
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-glossary.7",
    "chars": 5563,
    "preview": ".\\\"     Title: atlas-glossary\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\"
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-presets.7",
    "chars": 14686,
    "preview": ".\\\"     Title: atlas-presets\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English\n.\\\""
  },
  {
    "path": "atlas-shell-tools/man/man7/atlas-shell-tools.7",
    "chars": 2924,
    "preview": ".\\\"     Title: atlas-shell-tools\n.\\\"    Author: Lucas Cram\n.\\\"    Source: atlas-shell-tools 1.0.0\n.\\\"  Language: English"
  },
  {
    "path": "atlas-shell-tools/quick_install_bash.sh",
    "chars": 4565,
    "preview": "#!/bin/sh\n\n# Define a prompt function for re-use\nprompt_yn_was_yes() {\n    prompt=$1\n    while true;\n    do\n        echo"
  },
  {
    "path": "atlas-shell-tools/quick_install_zsh.sh",
    "chars": 4549,
    "preview": "#!/bin/sh\n\n# Define a prompt function for re-use\nprompt_yn_was_yes() {\n    prompt=$1\n    while true;\n    do\n        echo"
  },
  {
    "path": "atlas-shell-tools/scripts/atlas",
    "chars": 18895,
    "preview": "#!/usr/bin/env perl\n\nuse warnings;\nuse strict;\n\nuse File::Spec;\nuse Getopt::Long qw(GetOptions);\nuse POSIX;\n\n# Pull in c"
  },
  {
    "path": "atlas-shell-tools/scripts/atlas-config",
    "chars": 52810,
    "preview": "#!/usr/bin/env perl\n\nuse warnings;\nuse strict;\n\nuse Getopt::Long qw(GetOptions);\nuse File::Basename;\nuse File::Copy qw(c"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_completions.pm",
    "chars": 17829,
    "preview": "package ast_completions;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse ast_module_subsystem;\nuse ast_preset_s"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_log_subsystem.pm",
    "chars": 6702,
    "preview": "package ast_log_subsystem;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse File::Spec;\nuse ast_tty;\nuse ast_uti"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_module_subsystem.pm",
    "chars": 27883,
    "preview": "package ast_module_subsystem;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse File::Basename qw(basename);\nuse "
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_preset_subsystem.pm",
    "chars": 35225,
    "preview": "package ast_preset_subsystem;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse File::Spec;\nuse File::Path qw(mak"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_repo_subsystem.pm",
    "chars": 26907,
    "preview": "package ast_repo_subsystem;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse File::Basename qw(basename);\nuse Fi"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_tty.pm",
    "chars": 3325,
    "preview": "package ast_tty;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\n\n# Export symbols: variables and subroutines\nour @"
  },
  {
    "path": "atlas-shell-tools/scripts/common/ast_utilities.pm",
    "chars": 14254,
    "preview": "package ast_utilities;\n\nuse warnings;\nuse strict;\n\nuse Exporter qw(import);\nuse File::Path qw(make_path);\nuse List::Util"
  },
  {
    "path": "build.gradle",
    "chars": 4476,
    "preview": "plugins {\n    id 'checkstyle'\n    id 'groovy'\n    id 'idea'\n    id 'jacoco'\n    id 'java'\n    id 'java-library'\n    id '"
  },
  {
    "path": "config/checkstyle/arrangement.txt",
    "chars": 1063,
    "preview": "interface,public,non_static\ninterface,protected,non_static\ninterface,package_private,non_static\ninterface,private,non_st"
  },
  {
    "path": "config/checkstyle/checkstyle.xml",
    "chars": 6261,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE module PUBLIC\n    \"-//Puppy Crawl//DTD Check Configuration 1.1//EN\"\n    \"http://www.pupp"
  },
  {
    "path": "config/checkstyle/suppressions.xml",
    "chars": 3066,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE suppressions PUBLIC\n    \"-//Puppy Crawl//DTD Suppressions 1.1//EN\"\n    \"http://www.puppy"
  },
  {
    "path": "config/format/code_format.xml",
    "chars": 31518,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<profiles version=\"12\">\n<profile kind=\"CodeFormatterProfile\" name"
  },
  {
    "path": "config/log4j/log4j.properties",
    "chars": 947,
    "preview": "log4j.rootLogger=INFO, stdout\n\n# Direct log messages to stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlo"
  },
  {
    "path": "dependencies.gradle",
    "chars": 4228,
    "preview": "project.ext.versions = [\n    checkstyle: '9.3',\n    junit4: '4.13.2',\n    junit5: '5.8.2',\n    jacoco: '0.8.7',\n    slf4"
  },
  {
    "path": "gradle.properties",
    "chars": 533,
    "preview": "group=org.openstreetmap.atlas\nversion=7.0.10-SNAPSHOT\n\nmaven2_url=https://oss.sonatype.org/service/local/staging/deploy/"
  },
  {
    "path": "pyatlas/README.md",
    "chars": 8725,
    "preview": "# PyAtlas\n#### A simplified Atlas API for Python\n\n----\n## Getting Started\nTo get setup in a new project folder, run:\n\n  "
  },
  {
    "path": "pyatlas/clean.sh",
    "chars": 1935,
    "preview": "#!/usr/bin/env bash\n\n# general case script abort if a command fails\n# this can be overridden with a custom error message"
  },
  {
    "path": "pyatlas/doc/how_to_get_the_docs.txt",
    "chars": 130,
    "preview": "Use the 'buildPyatlas' gradle target to generate the docs!\n\nFrom the root atlas project directory run:\n\n$ ./gradlew buil"
  },
  {
    "path": "pyatlas/format.sh",
    "chars": 2008,
    "preview": "#!/usr/bin/env bash\n\n# general case script abort if a command fails\n# this can be overridden with a custom error message"
  },
  {
    "path": "pyatlas/package.sh",
    "chars": 5886,
    "preview": "#!/usr/bin/env bash\n\n# THIS ENTIRE SCRIPT IS A MASSIVE HACK\n# THIS SHOULD REALLY BE DONE WITH GRADLE\n\n# general case scr"
  },
  {
    "path": "pyatlas/pyatlas/__init__.py",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "pyatlas/pyatlas/atlas.py",
    "chars": 52672,
    "preview": "\"\"\"\nThis module defines the Atlas and the various helper types it needs to operate.\n\nAtlas is a representation of an Ope"
  },
  {
    "path": "pyatlas/pyatlas/atlas_entities.py",
    "chars": 29606,
    "preview": "\"\"\"\nThis module defines the Atlas entity types. Entities are features that can be\nqueried from the Atlas, so things like"
  },
  {
    "path": "pyatlas/pyatlas/atlas_metadata.py",
    "chars": 2083,
    "preview": "\"\"\"\nThis module defines the AtlasMetaData container type.\n\"\"\"\n\n\nclass AtlasMetaData(object):\n    \"\"\"\n    Container class"
  },
  {
    "path": "pyatlas/pyatlas/autogen/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "pyatlas/pyatlas/geometry.py",
    "chars": 22464,
    "preview": "\"\"\"\nThis module defines the pyatlas geometry primitives as well as various helping\nfunctions for manipulating the geomet"
  },
  {
    "path": "pyatlas/pyatlas/identifier_converters.py",
    "chars": 1190,
    "preview": "\"\"\"\nThis module defines helpful functions to extract information from Atlas identifiers.\n\"\"\"\n\n# Country code and way sec"
  },
  {
    "path": "pyatlas/pyatlas/pyatlas_globalfunc.py",
    "chars": 159,
    "preview": "\"\"\"\nThis module contains global utility functions for pyatlas.\n\"\"\"\n\n\ndef hello_atlas():\n    \"\"\"\n    Print a welcome mess"
  },
  {
    "path": "pyatlas/pyatlas/spatial_index.py",
    "chars": 6846,
    "preview": "\"\"\"\nThis module defines the spatial index class for use by the Atlas.\n\"\"\"\n\nimport ctypes\nimport shapely.geometry\nfrom sh"
  },
  {
    "path": "pyatlas/resources/CreateTestAtlas.java",
    "chars": 6498,
    "preview": "package org.openstreetmap.atlas.test;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.openstreetmap.atla"
  },
  {
    "path": "pyatlas/setup.py",
    "chars": 918,
    "preview": "import setuptools\n\nwith open(\"README.md\", \"r\") as fh:\n    long_description = fh.read()\n\n# The version field is left blan"
  },
  {
    "path": "pyatlas/style.yapf",
    "chars": 48,
    "preview": "[style]\nbased_on_style = pep8\ncolumn_limit = 100"
  },
  {
    "path": "pyatlas/test.sh",
    "chars": 2653,
    "preview": "#!/usr/bin/env bash\n\n# general case script abort if a command fails\n# this can be overridden with a custom error message"
  },
  {
    "path": "pyatlas/unit_tests/test_atlas.py",
    "chars": 5276,
    "preview": "import unittest\n\nfrom pyatlas.atlas import Atlas\nfrom pyatlas import geometry\nfrom pyatlas import atlas_entities\nfrom py"
  },
  {
    "path": "pyatlas/unit_tests/test_identifier_converters.py",
    "chars": 1999,
    "preview": "import unittest\n\nfrom pyatlas import identifier_converters\n\n\nclass IdentifierConvertersTest(unittest.TestCase):\n    def "
  },
  {
    "path": "pyatlas/unit_tests/test_location.py",
    "chars": 2570,
    "preview": "import unittest\n\nfrom pyatlas import geometry\nfrom pyatlas.geometry import Location, Rectangle\n\n\nclass LocationTest(unit"
  },
  {
    "path": "pyatlas/unit_tests/test_polygon_converters.py",
    "chars": 2468,
    "preview": "import unittest\n\nfrom pyatlas import geometry\nfrom pyatlas.geometry import Location\nfrom pyatlas.geometry import Polygon"
  },
  {
    "path": "pyatlas/unit_tests/test_polyline_polygon.py",
    "chars": 5180,
    "preview": "import unittest\n\nfrom pyatlas import geometry\nfrom pyatlas.geometry import Location, PolyLine, Polygon, Rectangle\n\n\nclas"
  },
  {
    "path": "pyatlas/unit_tests/test_rectangle.py",
    "chars": 2424,
    "preview": "import unittest\n\nfrom pyatlas.atlas import Atlas\nfrom pyatlas import geometry\nfrom pyatlas.geometry import Location, Rec"
  },
  {
    "path": "pyatlas/unit_tests/test_spatial_index.py",
    "chars": 1553,
    "preview": "import unittest\n\nfrom pyatlas import geometry\nfrom pyatlas.geometry import Rectangle\nfrom pyatlas.atlas import Atlas\nfro"
  },
  {
    "path": "pyatlas/venv.sh",
    "chars": 1904,
    "preview": "#!/usr/bin/env bash\n\n# general case script abort if a command fails\n# this can be overridden with a custom error message"
  },
  {
    "path": "pyatlas/yapf_format.py",
    "chars": 1994,
    "preview": "import sys\nimport os\nfrom yapf.yapflib.yapf_api import FormatFile\nfrom yapf.yapflib.yapf_api import FormatCode\n\n# NOTE: "
  },
  {
    "path": "sample/Readme.md",
    "chars": 474,
    "preview": "# Sample Project\n\n- Copy the `sample` project folder locally, and open it as a Gradle project in your favorite IDE.\n- Gr"
  },
  {
    "path": "sample/build.gradle",
    "chars": 332,
    "preview": "plugins {\n    id 'java'\n}\n\nrepositories\n{\n    // For geotools\n    maven { url \"http://repo.osgeo.org/repository/release/"
  },
  {
    "path": "sample/settings.gradle",
    "chars": 34,
    "preview": "rootProject.name = 'atlas-sample'\n"
  },
  {
    "path": "sample/src/main/java/org/openstreetmap/atlas/sample/Sample.java",
    "chars": 4514,
    "preview": "package org.openstreetmap.atlas.sample;\n\nimport java.nio.file.Path;\nimport java.util.Comparator;\nimport java.util.Random"
  },
  {
    "path": "sample/src/main/resources/log4j.properties",
    "chars": 315,
    "preview": "log4j.rootLogger=INFO, stdout\n\n# Direct log messages to stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlo"
  },
  {
    "path": "scripts/log4j-atlas/log4j.properties",
    "chars": 311,
    "preview": "log4j.rootLogger=ERROR, stdout\n\n# Direct log messages to stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nl"
  },
  {
    "path": "settings.gradle",
    "chars": 27,
    "preview": "rootProject.name = 'atlas'\n"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/PolygonPerformanceTest.java",
    "chars": 5787,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.util.List;\nimport java.util.Random;\nimport java.util.function.Fu"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/AtlasIntegrationTest.java",
    "chars": 2947,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.io.InputStream;\nimport java.util.function.Supplier;\n\nimpor"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/SubAtlasIntegrationTest.java",
    "chars": 1271,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport org.openstreetm"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/builder/text/TextAtlasBuilderIntegrationTest.java",
    "chars": 619,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.text;\n\nimport org.junit.Test;\nimport org.openstreetmap.atlas.geo"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/delta/AtlasDeltaGeoJsonIntegrationTest.java",
    "chars": 3503,
    "preview": "package org.openstreetmap.atlas.geography.atlas.delta;\n\nimport org.hamcrest.CoreMatchers;\nimport org.junit.Assert;\nimpor"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/delta/AtlasDeltaIntegrationTest.java",
    "chars": 3267,
    "preview": "package org.openstreetmap.atlas.geography.atlas.delta;\n\nimport java.util.SortedSet;\n\nimport org.junit.Assert;\nimport org"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/dynamic/DynamicAtlasIntegrationTest.java",
    "chars": 2339,
    "preview": "package org.openstreetmap.atlas.geography.atlas.dynamic;\n\nimport java.util.Optional;\n\nimport org.junit.Assert;\nimport or"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/AtlasEntityTypeTest.java",
    "chars": 1561,
    "preview": "package org.openstreetmap.atlas.geography.atlas.items;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport org.opens"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/complex/boundaries/ComplexBoundariesIntegrationTest.java",
    "chars": 1225,
    "preview": "package org.openstreetmap.atlas.geography.atlas.items.complex.boundaries;\n\nimport java.util.ArrayList;\nimport java.util."
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/items/complex/boundaries/ComplexBoundaryIntegrationTestRule.java",
    "chars": 521,
    "preview": "package org.openstreetmap.atlas.geography.atlas.items.complex.boundaries;\n\nimport org.openstreetmap.atlas.geography.atla"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/multi/MultiAtlasIntegrationTest.java",
    "chars": 4866,
    "preview": "package org.openstreetmap.atlas.geography.atlas.multi;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.j"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/multi/MultiAtlasIntegrationTestRule.java",
    "chars": 663,
    "preview": "package org.openstreetmap.atlas.geography.atlas.multi;\n\nimport org.openstreetmap.atlas.geography.atlas.Atlas;\nimport org"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/packed/PackedAtlasClonerIntegrationTest.java",
    "chars": 993,
    "preview": "package org.openstreetmap.atlas.geography.atlas.packed;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport org.open"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/packed/PackedAtlasIntegrationTest.java",
    "chars": 5042,
    "preview": "package org.openstreetmap.atlas.geography.atlas.packed;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport org.open"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/pbf/OsmPbfIngestIntegrationTest.java",
    "chars": 13368,
    "preview": "package org.openstreetmap.atlas.geography.atlas.pbf;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.s"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/pbf/slicing/AtlasSectionProcessorIntegrationTest.java",
    "chars": 6502,
    "preview": "package org.openstreetmap.atlas.geography.atlas.pbf.slicing;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport o"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/raw/DynamicRawAtlasSectioningTestRule.java",
    "chars": 9628,
    "preview": "package org.openstreetmap.atlas.geography.atlas.raw;\n\nimport org.openstreetmap.atlas.geography.atlas.Atlas;\nimport org.o"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/raw/RawAtlasIntegrationTest.java",
    "chars": 21833,
    "preview": "package org.openstreetmap.atlas.geography.atlas.raw;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java."
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/atlas/routing/AtlasRoutingIntegrationTest.java",
    "chars": 4231,
    "preview": "package org.openstreetmap.atlas.geography.atlas.routing;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/boundary/CountryBoundaryMapArchiverIntegrationTest.java",
    "chars": 1680,
    "preview": "package org.openstreetmap.atlas.geography.boundary;\n\nimport java.io.IOException;\n\nimport org.junit.Assert;\nimport org.ju"
  },
  {
    "path": "src/integrationTest/java/org/openstreetmap/atlas/geography/boundary/CountryBoundaryMapIntegrationTest.java",
    "chars": 2227,
    "preview": "package org.openstreetmap.atlas.geography.boundary;\n\nimport org.junit.Assert;\nimport org.junit.Rule;\nimport org.junit.Te"
  },
  {
    "path": "src/integrationTest/resources/org/openstreetmap/atlas/geography/atlas/raw/layerIntersectionAtEndBoundaryMap.txt",
    "chars": 129,
    "preview": "RUS||POLYGON((82.9358393 55.0504618, 82.9440158 55.0514274, 82.9463965 55.0445087, 82.9378292 55.0434533, 82.9358393 55."
  },
  {
    "path": "src/integrationTest/resources/org/openstreetmap/atlas/geography/atlas/raw/layerIntersectionAtStartBoundaryMap.txt",
    "chars": 69,
    "preview": "RUS||POLYGON((38.7 52.4, 38.8 52.4, 38.8 52.5, 38.7 52.5, 38.7 52.4))"
  },
  {
    "path": "src/integrationTest/resources/org/openstreetmap/atlas/geography/atlas/raw/layerIntersectionInMiddleBoundaryMap.txt",
    "chars": 129,
    "preview": "SGP||POLYGON((103.6350863 1.3492437, 103.6863940 1.3448244, 103.6839910 1.2996620, 103.6219767 1.3022755, 103.6350863 1."
  },
  {
    "path": "src/integrationTest/resources/org/openstreetmap/atlas/geography/boundary/oceanTestBoundary.txt",
    "chars": 463,
    "preview": "ABC||POLYGON((-106.02905273438 -46.1865234375, -129.23217773438 -21.5771484375, -125.71655273438 15.6884765625, -99.7009"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/Event.java",
    "chars": 437,
    "preview": "package org.openstreetmap.atlas.event;\n\nimport java.util.Date;\n\n/**\n * Useful base class to hold common information for "
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/EventService.java",
    "chars": 3423,
    "preview": "package org.openstreetmap.atlas.event;\n\nimport java.util.Collection;\nimport java.util.HashSet;\nimport java.util.Map;\nimp"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/EventServiceable.java",
    "chars": 973,
    "preview": "package org.openstreetmap.atlas.event;\n\nimport org.openstreetmap.atlas.utilities.threads.Pool;\n\n/**\n * Contract for Even"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/Processor.java",
    "chars": 1049,
    "preview": "package org.openstreetmap.atlas.event;\n\n/**\n * The {@link Processor} interface provides simple hooks for implementations"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/README.md",
    "chars": 1577,
    "preview": "# EventService\n\nThe [EventService](EventService.java) is a class build on top of Guava's EventBus with\nstatic keyword co"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/event/ShutdownEvent.java",
    "chars": 195,
    "preview": "package org.openstreetmap.atlas.event;\n\n/**\n * An {@link Event} that is posted when {@link EventService} is shutting dow"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/exception/CoreException.java",
    "chars": 3347,
    "preview": "package org.openstreetmap.atlas.exception;\n\nimport java.util.Optional;\nimport java.util.function.Function;\nimport java.u"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/exception/ExceptionSearch.java",
    "chars": 1230,
    "preview": "package org.openstreetmap.atlas.exception;\n\nimport java.util.Optional;\n\n/**\n * Utility class for searching an exception "
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/exception/LoadAtlasFromResourceException.java",
    "chars": 1348,
    "preview": "package org.openstreetmap.atlas.exception;\n\nimport org.openstreetmap.atlas.streaming.resource.Resource;\n\n/**\n * Thrown w"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/exception/change/FeatureChangeMergeException.java",
    "chars": 7850,
    "preview": "package org.openstreetmap.atlas.exception.change;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.openst"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/exception/change/MergeFailureType.java",
    "chars": 4079,
    "preview": "package org.openstreetmap.atlas.exception.change;\n\n/**\n * @author lcram\n */\npublic enum MergeFailureType\n{\n    /*\n     *"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Altitude.java",
    "chars": 2883,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\n\nimport org.openstreetmap.atlas.exception.CoreE"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/CompressedPolyLine.java",
    "chars": 5814,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport java.util.Li"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/CompressedPolygon.java",
    "chars": 586,
    "preview": "package org.openstreetmap.atlas.geography;\n\n/**\n * Compressed {@link Polygon}. This simply extends {@link CompressedPoly"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/GeometricObject.java",
    "chars": 196,
    "preview": "package org.openstreetmap.atlas.geography;\n\n/**\n * @author matthieun\n */\npublic interface GeometricObject\n{\n    double S"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/GeometricSurface.java",
    "chars": 1247,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.utilities.scalars.Surface;\n\n/**\n * An interfa"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/GeometryPrintable.java",
    "chars": 215,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.geography.geojson.GeoJson;\n\n/**\n * @author ma"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Heading.java",
    "chars": 2896,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.utilities.scalars.Angle;\n\n/**\n * A Heading, t"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Latitude.java",
    "chars": 2861,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.utilities.scalars.Angle;\n\n/**\n * A Latitude b"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Located.java",
    "chars": 781,
    "preview": "package org.openstreetmap.atlas.geography;\n\n/**\n * Contract for any item that can be geographcally bound by a {@link Rec"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Location.java",
    "chars": 23097,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.awt.Point;\nimport java.awt.geom.Point2D;\nimport java.io.Serializ"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Longitude.java",
    "chars": 4030,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.utilities.scalars.Angle;\n\n/**\n * A Longitude "
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/MultiPolyLine.java",
    "chars": 4313,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\nimport java.util.HashMap;\nimport java.util.Hash"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/MultiPolygon.java",
    "chars": 22798,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport java.util.Ar"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/PolyLine.java",
    "chars": 42627,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport java.util.Co"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Polygon.java",
    "chars": 25767,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Iterat"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/README.md",
    "chars": 2122,
    "preview": "# Geography Package\n\nThis package contains all the geography tools that make handling geographical data easy.\n\n## Atlas "
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Rectangle.java",
    "chars": 22925,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.awt.geom.Rectangle2D;\nimport java.util.Iterator;\nimport java.uti"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Segment.java",
    "chars": 16647,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/Snapper.java",
    "chars": 6375,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.util.Objects;\n\nimport org.openstreetmap.atlas.utilities.collecti"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/StringCompressedPolyLine.java",
    "chars": 8679,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport java.io.Serializable;\nimport java.nio.charset.Charset;\nimport java.ni"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/StringCompressedPolygon.java",
    "chars": 528,
    "preview": "package org.openstreetmap.atlas.geography;\n\n/**\n * Compressed {@link Polygon}\n *\n * @author matthieun\n */\npublic class S"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/WkbPrintable.java",
    "chars": 127,
    "preview": "package org.openstreetmap.atlas.geography;\n\n/**\n * @author matthieun\n */\npublic interface WkbPrintable\n{\n    byte[] toWk"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/WktPrintable.java",
    "chars": 628,
    "preview": "package org.openstreetmap.atlas.geography;\n\nimport org.openstreetmap.atlas.utilities.collections.StringList;\n\n/**\n * @au"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/AbstractAtlas.java",
    "chars": 24477,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.util.function.BiFunction;\nimport java.util.function.Consum"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/Atlas.java",
    "chars": 33907,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.io.Serializable;\nimport java.util.Arrays;\nimport java.util"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasLoadingCommand.java",
    "chars": 5639,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.util.HashSet;\nimport java.util.Set;\nimport java.util.funct"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasMetaData.java",
    "chars": 9373,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.io.Serializable;\nimport java.util.HashMap;\nimport java.uti"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/AtlasResourceLoader.java",
    "chars": 18852,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Ob"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/BareAtlas.java",
    "chars": 23670,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.io.BufferedWriter;\nimport java.io.IOException;\nimport java"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/Crawler.java",
    "chars": 1473,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport org.openstreetmap.atlas.streaming.resource.File;\nimport org.ope"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/README.md",
    "chars": 6186,
    "preview": "# Using Atlas\n\n* Grab one or more Atlas files (from [here](https://www.dropbox.com/sh/54aqfbs12suqd9t/AACGxhjCaJiRcJUBuF"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/ShardFileOverlapsPolygon.java",
    "chars": 3619,
    "preview": "package org.openstreetmap.atlas.geography.atlas;\n\nimport java.util.HashSet;\nimport java.util.Set;\nimport java.util.funct"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/AtlasBuilder.java",
    "chars": 5163,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.geograph"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/AtlasSize.java",
    "chars": 9431,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder;\n\nimport java.io.Serializable;\nimport java.util.Iterator;\nimport"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/GeoJsonAtlasBuilder.java",
    "chars": 8197,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport j"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/RelationBean.java",
    "chars": 14364,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder;\n\nimport java.io.Serializable;\nimport java.util.AbstractCollecti"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveArea.java",
    "chars": 1064,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.ge"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveBigNode.java",
    "chars": 5724,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Collections;\nimport java.util.Map;\nimpo"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEdge.java",
    "chars": 1432,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.ge"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEdgeIdentifier.java",
    "chars": 1306,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.io.Serializable;\n\n/**\n * @author Sid\n */\npub"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveEntity.java",
    "chars": 1440,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.io.Serializable;\nimport java.util.Map;\nimpor"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveLineItem.java",
    "chars": 1096,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.ge"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveLocationItem.java",
    "chars": 1448,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.ge"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveObjectStore.java",
    "chars": 9223,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.HashMap;\nimport java.util.HashSet;\nimpo"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRelation.java",
    "chars": 1145,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.Map;\n\nimport org.openstreetmap.atlas.ge"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRoute.java",
    "chars": 8847,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/AtlasPrimitiveRouteIdentifier.java",
    "chars": 6408,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/store/TemporaryObjectStore.java",
    "chars": 2820,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.store;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\nimport "
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/builder/text/TextAtlasBuilder.java",
    "chars": 18421,
    "preview": "package org.openstreetmap.atlas.geography.atlas.builder.text;\n\nimport java.util.HashMap;\nimport java.util.Iterator;\nimpo"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/AtlasChangeGenerator.java",
    "chars": 2052,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.io.Serializable;\nimport java.util.Set;\nimport java."
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/AtlasEntityKey.java",
    "chars": 1732,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport org.openstreetmap.atlas.geography.atlas.Atlas;\nimport or"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/Change.java",
    "chars": 16923,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\nimport"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeArea.java",
    "chars": 2466,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.fu"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeAtlas.java",
    "chars": 21455,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Map;\nimport java.util.Objects;\nimport java.uti"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeBuilder.java",
    "chars": 3155,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Arrays;\nimport java.util.stream.Stream;\nimport"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeEdge.java",
    "chars": 3763,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.fu"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeEntity.java",
    "chars": 6032,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java."
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeLine.java",
    "chars": 2471,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.fu"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangeNode.java",
    "chars": 7332,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.S"
  },
  {
    "path": "src/main/java/org/openstreetmap/atlas/geography/atlas/change/ChangePoint.java",
    "chars": 2390,
    "preview": "package org.openstreetmap.atlas.geography.atlas.change;\n\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.fu"
  }
]

// ... and 1919 more files (download for full content)

About this extraction

This page contains the full source code of the osmlab/atlas GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2119 files (47.2 MB), approximately 3.7M tokens, and a symbol index with 12245 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!