summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundle-plugin/src/test/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassTest.java13
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java100
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/application/PreProcessor.java7
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/application/PropertiesProcessor.java5
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java3
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/ApplicationPackageXmlFilesValidator.java4
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java1
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidator.java6
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidators.java28
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/SimpleApplicationValidator.java2
-rw-r--r--config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java28
-rw-r--r--config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java66
-rw-r--r--config-application-package/src/test/resources/multienvapp/services.xml11
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java1
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java17
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentOnlySearch.java (renamed from config-model/src/main/java/com/yahoo/searchdefinition/UnproperSearch.java)13
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java52
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Search.java14
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java44
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/Deriver.java33
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java18
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java35
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxFeatureConverter.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/TensorFlowFeatureConverter.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/XgboostFeatureConverter.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java29
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java (renamed from config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java)57
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesDocumentsOnly.java25
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/Service.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java32
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java13
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java15
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java137
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ml/FeatureArguments.java19
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/Tuning.java3
-rw-r--r--config-model/src/main/javacc/SDParser.jj4
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist/saved/saved_model.pbtxt7982
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.data-00000-of-00001bin0 -> 1066440 bytes
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.indexbin0 -> 308 bytes
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist/simple_mnist.py97
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist_softmax.onnxbin0 -> 31758 bytes
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist_softmax/mnist_sftmax_with_saving.py92
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/saved_model.pbtxt5039
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.data-00000-of-00001bin0 -> 31400 bytes
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.indexbin0 -> 165 bytes
-rw-r--r--config-model/src/test/cfg/application/ml_models/models/xgboost.2.2.json19
-rw-r--r--config-model/src/test/cfg/application/ml_models/searchdefinitions/test.sd41
-rw-r--r--config-model/src/test/cfg/application/ml_models/services.xml21
-rw-r--r--config-model/src/test/derived/documentderiver/compression_body.sd20
-rw-r--r--config-model/src/test/derived/documentderiver/compression_both.sd26
-rw-r--r--config-model/src/test/derived/documentderiver/compression_header.sd20
-rw-r--r--config-model/src/test/derived/documentderiver/documentmanager.cfg394
-rw-r--r--config-model/src/test/derived/documentderiver/mail.sd112
-rw-r--r--config-model/src/test/derived/documentderiver/music.sd44
-rw-r--r--config-model/src/test/derived/documentderiver/newsarticle.sd126
-rw-r--r--config-model/src/test/derived/documentderiver/newssummary.sd165
-rw-r--r--config-model/src/test/derived/documentderiver/sombrero.sd36
-rw-r--r--config-model/src/test/derived/documentderiver/vsmfields.cfg390
-rw-r--r--config-model/src/test/derived/documentderiver/vsmsummary.cfg4
-rw-r--r--config-model/src/test/derived/gemini2/gemini.sd6
-rw-r--r--config-model/src/test/derived/inheritancebadtypes/child.sd8
-rw-r--r--config-model/src/test/derived/inheritancebadtypes/parent.sd8
-rw-r--r--config-model/src/test/derived/tensor/rank-profiles.cfg6
-rw-r--r--config-model/src/test/derived/tensor/tensor.sd6
-rw-r--r--config-model/src/test/examples/attributeindex.sd24
-rw-r--r--config-model/src/test/examples/attributeproperties1.sd21
-rw-r--r--config-model/src/test/examples/attributeproperties2.sd27
-rw-r--r--config-model/src/test/examples/duplicatenamesindoc.sd12
-rw-r--r--config-model/src/test/examples/duplicatenamesinsearchdifferenttype.sd12
-rw-r--r--config-model/src/test/examples/incorrectsummarytypes.sd19
-rw-r--r--config-model/src/test/examples/name-check.sd20
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java4
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/MockModelContext.java3
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/application/provider/SchemaValidatorTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java12
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/ArraysTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java53
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/IncorrectSummaryTypesTestCase.java13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java36
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionLoopDetectionTestCase.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionShadowingTestCase.java10
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/ReservedWordsAsFieldNamesTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java22
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/StemmingSettingTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/DocumentDeriverTestCase.java114
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java14
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/MailTestCase.java32
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/searchdefinition/derived/StreamingStructTestCase.java11
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributeIndexTestCase.java34
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java40
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java8
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java (renamed from config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java)2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java21
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomSearchTuningBuilderTest.java1
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ml/MlModelsTest.java78
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java3
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java4
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java5
-rw-r--r--config-provisioning/src/main/resources/configdefinitions/flavors.def5
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java3
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/classes/app.1.def7
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/classes/qr-templates.3.def141
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/classes/ranges.1.def4
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/classes/testfoobar.12.def918
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/configsglobal/qr-templates.3.cfg111
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/configsglobal/testfoobar.12.cfg105
-rw-r--r--configd/src/apps/sentinel/config-handler.h1
-rw-r--r--configdefinitions/src/vespa/configserver.def1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java13
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java17
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantListener.java4
-rw-r--r--configserver/src/test/apps/app-jdisc-only-restart/searchdefinitions/music.sd7
-rw-r--r--configserver/src/test/apps/app-jdisc-only/searchdefinitions/music.sd7
-rw-r--r--configserver/src/test/apps/app/searchdefinitions/music.sd7
-rw-r--r--configserver/src/test/apps/zkapp/searchdefinitions/music.sd6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java27
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java2
-rw-r--r--container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java25
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java11
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java10
-rw-r--r--container-core/src/test/java/com/yahoo/container/handler/LogHandlerTest.java54
-rw-r--r--container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java8
-rw-r--r--container-dev/pom.xml4
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java1
-rw-r--r--container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4CloseableChannel.java137
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java44
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java17
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/CloseableChannel.java28
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java39
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/InterleavedCloseableChannel.java98
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java2
-rw-r--r--container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java14
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java6
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/templates/test/qr-templates.cfg104
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java15
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java10
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java1
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockOrganization.java12
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/GlobalRoutingService.java16
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/MemoryGlobalRoutingService.java20
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java91
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java32
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java13
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java80
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RotationStatus.java20
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java11
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java33
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmer.java46
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporter.java25
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java112
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java38
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java57
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java13
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java34
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java64
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java122
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java19
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java139
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json4
-rw-r--r--docker-api/pom.xml6
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java12
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStats.java (renamed from docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStatsImpl.java)6
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java16
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java22
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java196
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java165
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/ContainerNotFoundException.java13
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerException.java (renamed from docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerException.java)4
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerExecTimeoutException.java (renamed from docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerExecTimeoutException.java)6
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/package-info.java5
-rw-r--r--docker-api/src/main/resources/configdefinitions/docker.def4
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java192
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java13
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/MbusRequestContext.java1
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java7
-rw-r--r--docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerAllMessageTypesTestCase.java29
-rw-r--r--docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerTransformingMessagesTestCase.java19
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java7
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java9
-rw-r--r--document/src/test/java/com/yahoo/document/json/JsonWriterTestCase.java6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateMessage.java184
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateReply.java29
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java89
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java9
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java15
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories50.java997
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java137
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories52.java916
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java1
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolTest.java36
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java978
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java121
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java850
-rwxr-xr-xdocumentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/RoutableFactoryTestCase.java6
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java2
-rw-r--r--documentapi/src/tests/messagebus/messagebus_test.cpp5
-rw-r--r--documentapi/src/tests/messages/CMakeLists.txt23
-rw-r--r--documentapi/src/tests/messages/messages50app.cpp5
-rw-r--r--documentapi/src/tests/messages/messages50test.cpp1166
-rw-r--r--documentapi/src/tests/messages/messages50test.h54
-rw-r--r--documentapi/src/tests/messages/messages51app.cpp5
-rw-r--r--documentapi/src/tests/messages/messages51test.cpp104
-rw-r--r--documentapi/src/tests/messages/messages51test.h18
-rw-r--r--documentapi/src/tests/messages/messages52test.cpp962
-rw-r--r--documentapi/src/tests/messages/messages52test.h51
-rw-r--r--documentapi/src/tests/policies/policies_test.cpp1
-rw-r--r--documentapi/src/tests/routablefactory/routablefactory.cpp6
-rw-r--r--documentapi/src/vespa/documentapi/documentapi.h2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt4
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp85
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/documentprotocol.h2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/CMakeLists.txt2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.cpp82
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h81
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.cpp14
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.h30
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/policies/documentrouteselectorpolicy.cpp12
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/policies/localservicepolicy.cpp8
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/policies/storagepolicy.cpp5
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/policies/subsetservicepolicy.cpp7
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories41.cpp61
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories41.h81
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories42.cpp12
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories42.h84
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp965
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories50.h458
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp46
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories51.h101
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories52.cpp905
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories52.h398
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories60.h6
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-BatchMessage.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-BatchReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorMessage.datbin173 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorReply.datbin65 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-DocumentListMessage.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-DocumentListReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsMessage.datbin117 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetBucketListMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetBucketListReply.datbin56 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateReply.datbin53 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetDocumentMessage.datbin25 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-GetDocumentReply.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-MapVisitorMessage.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-MapVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-MultiOperationMessage.datbin90 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-MultiOperationReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-PutDocumentMessage.datbin46 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-PutDocumentReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-QueryResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentMessage.datbin21 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessage.datbin34 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageGroup.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageUser.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-SearchResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-StatBucketMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-StatBucketReply.datbin50 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentMessage.datbin94 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoMessage.datbin72 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-cpp-WrongDistributionReply.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-BatchMessage.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-BatchReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-CreateVisitorMessage.datbin173 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-CreateVisitorReply.datbin65 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-DestroyVisitorMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-DestroyVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-DocumentListMessage.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-DocumentListReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-DocumentSummaryReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-EmptyBucketsMessage.datbin117 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-EmptyBucketsReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetBucketListMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetBucketListReply.datbin56 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetBucketStateMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetBucketStateReply.datbin53 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetDocumentMessage.datbin25 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-GetDocumentReply.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-MapVisitorMessage.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-MapVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-MultiOperationMessage.datbin90 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-MultiOperationReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-PutDocumentMessage.datbin46 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-PutDocumentReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-QueryResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveDocumentMessage.datbin21 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessage.datbin34 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageGroup.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageUser.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-RemoveLocationReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-SearchResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-StatBucketMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-StatBucketReply.datbin50 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-UpdateDocumentMessage.datbin94 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-UpdateDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-VisitorInfoMessage.datbin72 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-VisitorInfoReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5-java-WrongDistributionReply.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-BatchMessage.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-BatchReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorMessage.datbin183 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorReply.datbin65 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentIgnoredReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListMessage.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-1.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-2.datbin57 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-3.datbin57 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsMessage.datbin117 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListReply.datbin56 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateReply.datbin53 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentReply.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorMessage.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationMessage.datbin90 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentMessage.datbin46 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-1.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-2.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-3.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-4.datbin121 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-5.datbin121 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentMessage.datbin21 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessage.datbin34 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageGroup.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageUser.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-1.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-2.datbin60 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-3.datbin60 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-4.datbin113 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-5.datbin113 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketReply.datbin50 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentMessage.datbin94 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoMessage.datbin72 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-cpp-WrongDistributionReply.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-BatchMessage.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-BatchReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorMessage.datbin183 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorReply.datbin65 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DocumentIgnoredReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DocumentListMessage.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DocumentListReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-DocumentSummaryReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsMessage.datbin117 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetBucketListMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetBucketListReply.datbin56 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateReply.datbin53 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetDocumentMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-GetDocumentReply.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-MapVisitorMessage.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-MapVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-MultiOperationMessage.datbin90 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-MultiOperationReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-PutDocumentMessage.datbin46 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-PutDocumentReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-QueryResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentMessage.datbin21 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessage.datbin34 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageGroup.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageUser.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-SearchResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-StatBucketMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-StatBucketReply.datbin50 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentMessage.datbin94 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoMessage.datbin72 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.1-java-WrongDistributionReply.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-Priority.txt16
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateMessage.datbin201 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-BatchMessage.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-BatchReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorMessage.datbin183 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorReply.datbin65 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DocumentIgnoredReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListMessage.datbin68 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-DocumentSummaryReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsMessage.datbin117 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedMessage.datbin22 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage0.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage1.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage2.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage3.datbin29 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage4.datbin15 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListReply.datbin56 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateMessage.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateReply.datbin53 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentReply.datbin43 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorMessage.datbin37 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationMessage.datbin90 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentMessage.datbin76 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentReply.datbin13 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-QueryResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentMessage.datbin51 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessage.datbin34 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageGroup.datbin24 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageUser.datbin17 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-SearchResultReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedMessage.datbin26 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedReply.datbin45 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketMessage.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketReply.datbin50 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentMessage.datbin124 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentReply.datbin14 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoMessage.datbin72 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoReply.datbin5 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/5.93.30-java-WrongDistributionReply.datbin32 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-1.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-1.dat)bin17 -> 17 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-2.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-2.dat)bin57 -> 57 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-3.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-3.dat)bin57 -> 57 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-1.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-1.dat)bin37 -> 37 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-2.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-2.dat)bin68 -> 68 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-3.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-3.dat)bin68 -> 68 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-4.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-4.dat)bin121 -> 121 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-5.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-5.dat)bin121 -> 121 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-1.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-1.dat)bin29 -> 29 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-2.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-2.dat)bin60 -> 60 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-3.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-3.dat)bin60 -> 60 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-4.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-4.dat)bin113 -> 113 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-5.dat (renamed from documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-5.dat)bin113 -> 113 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateMessage.datbin207 -> 0 bytes
-rw-r--r--documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateReply.datbin20 -> 0 bytes
-rw-r--r--fnet/src/tests/frt/rpc/CMakeLists.txt4
-rw-r--r--fnet/src/tests/frt/rpc/invoke.cpp907
-rw-r--r--fnet/src/tests/frt/rpc/my_crypto_engine.hpp10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java32
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java8
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldTestCase.java4
-rw-r--r--jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java58
-rw-r--r--jdisc_core/pom.xml1
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ExportPackages.java47
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/core/FelixParamsTestCase.java6
-rw-r--r--jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/application/BundleActivatorIntegrationTest.java4
-rw-r--r--jdisc_core_test/test_bundles/app-g-act/pom.xml6
-rw-r--r--jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/ApplicationG.java (renamed from jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/ApplicationG.java)2
-rw-r--r--jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyBundleActivator.java (renamed from jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java)2
-rw-r--r--jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyService.java (renamed from jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyService.java)2
-rw-r--r--jdisc_core_test/test_bundles/my-bundle-activator/pom.xml4
-rw-r--r--jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyBundleActivator.java (renamed from jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java)2
-rw-r--r--jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyService.java (renamed from jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyService.java)2
-rw-r--r--jrt/src/com/yahoo/jrt/CryptoEngine.java24
-rw-r--r--jrt/src/com/yahoo/jrt/MaybeTlsCryptoEngine.java34
-rw-r--r--jrt/src/com/yahoo/jrt/MaybeTlsCryptoSocket.java126
-rw-r--r--jrt/src/com/yahoo/jrt/TlsCryptoSocket.java5
-rw-r--r--jrt/tests/com/yahoo/jrt/EchoTest.java4
-rw-r--r--jrt/tests/com/yahoo/jrt/SessionTest.java2
-rw-r--r--jrt/tests/com/yahoo/jrt/TlsDetectionTest.java90
-rw-r--r--logd/src/apps/logd/main.cpp3
-rw-r--r--logd/src/logd/cmdbuf.cpp32
-rw-r--r--logd/src/logd/cmdbuf.h8
-rw-r--r--logd/src/logd/conf.cpp58
-rw-r--r--logd/src/logd/conf.h9
-rw-r--r--logd/src/logd/conn.cpp25
-rw-r--r--logd/src/logd/errhandle.h11
-rw-r--r--logd/src/logd/forward.cpp68
-rw-r--r--logd/src/logd/forward.h14
-rw-r--r--logd/src/logd/metrics.cpp23
-rw-r--r--logd/src/logd/metrics.h20
-rw-r--r--logd/src/logd/perform.cpp116
-rw-r--r--logd/src/logd/perform.h5
-rw-r--r--logd/src/logd/service.cpp117
-rw-r--r--logd/src/logd/service.h77
-rw-r--r--logd/src/logd/state.cpp8
-rw-r--r--logd/src/logd/state.h2
-rw-r--r--logd/src/logd/watch.cpp86
-rw-r--r--logd/src/logd/watch.h23
-rw-r--r--logd/src/tests/forward/forward.cpp1
-rw-r--r--metrics/src/vespa/metrics/countmetric.h5
-rw-r--r--metrics/src/vespa/metrics/countmetric.hpp16
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java131
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/handler/package-info.java4
-rw-r--r--model-evaluation/src/test/java/ai/vespa/models/handler/ModelsEvaluationHandlerTest.java10
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java129
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java23
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java13
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerNetworking.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java18
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java51
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java7
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java24
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java9
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java99
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java14
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java21
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java18
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java23
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/IPTablesEditorTest.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java20
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java58
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java6
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java7
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java9
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java7
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java4
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java2
-rw-r--r--node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java4
-rw-r--r--node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureVersions.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java20
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java54
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java34
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json34
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json1
-rw-r--r--parent/pom.xml10
-rw-r--r--processing/src/main/java/com/yahoo/processing/execution/AsyncExecution.java29
-rw-r--r--searchcore/src/tests/proton/documentdb/documentdb_test.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/config/proton.def4
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.cpp83
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h25
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.cpp29
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.h29
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.cpp18
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.h11
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/document_db_explorer.cpp9
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp312
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h11
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.cpp415
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.h61
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h1
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java48
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/ExpressionOptimizer.java6
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizer.java85
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ImportedModel.java79
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ModelImporter.java3
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxImporter.java1
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/LambdaFunctionNode.java43
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java14
-rw-r--r--searchlib/src/test/files/integration/tensorflow/blog/saved/saved_model.pbtxt14726
-rw-r--r--searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.data-00000-of-00001bin0 -> 1579020 bytes
-rw-r--r--searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.indexbin0 -> 520 bytes
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/aggregation/GroupingSerializationTest.java4
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizerTestCase.java116
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BatchNormImportTestCase.java8
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BlogEvaluationBenchmark.java117
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/DropoutImportTestCase.java16
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/MnistImportTestCase.java8
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxMnistSoftmaxImportTestCase.java26
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TensorFlowMnistSoftmaxImportTestCase.java14
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TestableTensorFlowModel.java29
-rw-r--r--searchlib/src/tests/docstore/document_store/document_store_test.cpp67
-rw-r--r--searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/common/transport.h3
-rw-r--r--searchlib/src/vespa/searchlib/common/tunefileinfo.hpp1
-rw-r--r--searchlib/src/vespa/searchlib/docstore/CMakeLists.txt1
-rw-r--r--searchlib/src/vespa/searchlib/docstore/documentstore.cpp225
-rw-r--r--searchlib/src/vespa/searchlib/docstore/documentstore.h24
-rw-r--r--searchlib/src/vespa/searchlib/docstore/value.cpp75
-rw-r--r--searchlib/src/vespa/searchlib/docstore/value.h57
-rw-r--r--searchlib/src/vespa/searchlib/engine/transportserver.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/featurestore.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/featurestore.h98
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/iordereddocumentinserter.h7
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.h21
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java18
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java6
-rw-r--r--slobrok/src/apps/check_slobrok/check_slobrok.cpp21
-rw-r--r--slobrok/src/apps/sbcmd/sbcmd.cpp21
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.cpp89
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.h33
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.cpp131
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.h61
-rw-r--r--slobrok/src/vespa/slobrok/server/history.cpp2
-rw-r--r--slobrok/src/vespa/slobrok/server/history.h3
-rw-r--r--slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp30
-rw-r--r--slobrok/src/vespa/slobrok/server/managed_rpc_server.h10
-rw-r--r--slobrok/src/vespa/slobrok/server/named_service.cpp3
-rw-r--r--slobrok/src/vespa/slobrok/server/named_service.h6
-rw-r--r--slobrok/src/vespa/slobrok/server/remote_slobrok.cpp133
-rw-r--r--slobrok/src/vespa/slobrok/server/remote_slobrok.h25
-rw-r--r--slobrok/src/vespa/slobrok/server/reserved_name.h6
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp171
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.h59
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_map.cpp146
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_map.h45
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.cpp46
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.h12
-rw-r--r--slobrok/src/vespa/slobrok/server/rpcmirror.cpp8
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.cpp14
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.h2
-rw-r--r--slobrok/src/vespa/slobrok/server/selfcheck.cpp3
-rw-r--r--slobrok/src/vespa/slobrok/server/visible_map.cpp81
-rw-r--r--slobrok/src/vespa/slobrok/server/visible_map.h27
-rw-r--r--storage/src/tests/distributor/twophaseupdateoperationtest.cpp1
-rw-r--r--storage/src/tests/persistence/filestorage/filestormanagertest.cpp2
-rw-r--r--storage/src/tests/storageserver/documentapiconvertertest.cpp56
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp2
-rw-r--r--storage/src/vespa/storage/common/messagebucket.cpp3
-rw-r--r--storage/src/vespa/storage/distributor/distributor.cpp2
-rw-r--r--storage/src/vespa/storage/distributor/externaloperationhandler.cpp11
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/getoperation.cpp12
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp2
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h1
-rw-r--r--storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp4
-rw-r--r--storage/src/vespa/storage/distributor/persistence_operation_metric_set.cpp14
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp4
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp11
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormanager.h1
-rw-r--r--storage/src/vespa/storage/persistence/mergehandler.cpp4
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.cpp10
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.cpp4
-rw-r--r--storage/src/vespa/storage/storageserver/documentapiconverter.cpp12
-rw-r--r--storage/src/vespa/storage/storageserver/mergethrottler.cpp20
-rw-r--r--storageapi/src/tests/mbusprot/storageprotocoltest.cpp52
-rw-r--r--storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp11
-rw-r--r--storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h8
-rw-r--r--storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp99
-rw-r--r--storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h6
-rw-r--r--storageapi/src/vespa/storageapi/message/CMakeLists.txt1
-rw-r--r--storageapi/src/vespa/storageapi/message/batch.cpp173
-rw-r--r--storageapi/src/vespa/storageapi/message/batch.h186
-rw-r--r--storageapi/src/vespa/storageapi/messageapi/messagehandler.h16
-rw-r--r--storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp4
-rw-r--r--storageapi/src/vespa/storageapi/messageapi/storagemessage.h8
-rwxr-xr-xvespabase/src/start-cbinaries.sh2
-rwxr-xr-xvespaclient-container-plugin/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerStatus.java10
-rwxr-xr-xvespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/GetSearcher.java13
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/VisitSearcher.java12
-rwxr-xr-xvespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java4
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java2
-rwxr-xr-xvespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/GetSearcherTestCase.java42
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/VisitorSearcherTestCase.java4
-rwxr-xr-xvespaclient-core/src/main/java/com/yahoo/feedapi/DocprocMessageProcessor.java5
-rw-r--r--vespaclient-core/src/main/java/com/yahoo/feedhandler/NullFeedMetric.java7
-rwxr-xr-xvespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java2
-rw-r--r--vespajlib/pom.xml4
-rw-r--r--vespajlib/src/main/java/com/yahoo/io/NativeIO.java104
-rw-r--r--vespajlib/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java66
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/IndexedTensor.java9
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/TensorType.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java97
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java68
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/ReduceJoin.java372
-rw-r--r--vespajlib/src/test/java/com/yahoo/io/NativeIOTestCase.java35
-rw-r--r--vespalib/CMakeLists.txt5
-rw-r--r--vespalib/src/apps/vespa-drop-file-from-cache/.gitignore1
-rw-r--r--vespalib/src/apps/vespa-drop-file-from-cache/CMakeLists.txt9
-rw-r--r--vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp32
-rw-r--r--vespalib/src/testlist.txt1
-rw-r--r--vespalib/src/tests/drop-file-from-cache/CMakeLists.txt8
-rw-r--r--vespalib/src/tests/drop-file-from-cache/drop_file_from_cache_test.cpp25
-rw-r--r--vespalib/src/tests/hashmap/.gitignore6
-rw-r--r--vespalib/src/tests/hashmap/CMakeLists.txt8
-rw-r--r--vespalib/src/tests/hashmap/DESC1
-rw-r--r--vespalib/src/tests/hashmap/FILES1
-rw-r--r--vespalib/src/tests/hashmap/hashmap_test.cpp197
-rw-r--r--vespalib/src/tests/hashmap/in.txt235882
-rw-r--r--vespalib/src/tests/net/tls/direct_buffer_bio/CMakeLists.txt10
-rw-r--r--vespalib/src/tests/net/tls/direct_buffer_bio/direct_buffer_bio_test.cpp138
-rw-r--r--vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp308
-rw-r--r--vespalib/src/tests/net/tls/protocol_snooping/CMakeLists.txt9
-rw-r--r--vespalib/src/tests/net/tls/protocol_snooping/protocol_snooping_test.cpp78
-rw-r--r--vespalib/src/tests/stllike/hash_test.cpp8
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.cpp20
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/CMakeLists.txt4
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/crypto_codec.h1
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp10
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.h8
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/CMakeLists.txt1
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.cpp418
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.h90
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp223
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h22
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp51
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.cpp20
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.h34
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp90
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.h35
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/protocol_snooping.cpp127
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/protocol_snooping.h32
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp4
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h6
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.cpp9
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.h14
-rw-r--r--vespalib/src/vespa/vespalib/stllike/CMakeLists.txt1
-rw-r--r--vespalib/src/vespa/vespalib/stllike/hash_fun.cpp38
-rw-r--r--vespalib/src/vespa/vespalib/stllike/hash_fun.h6
-rw-r--r--vespalib/src/vespa/vespalib/util/CMakeLists.txt1
-rw-r--r--vespalib/src/vespa/vespalib/util/hashmap.cpp229
-rw-r--r--vespalib/src/vespa/vespalib/util/hashmap.h374
-rw-r--r--vespalib/src/vespa/vespalib/util/hashmapdata.h17
-rw-r--r--vespalib/src/vespa/vespalib/util/slaveproc.h15
882 files changed, 40503 insertions, 251449 deletions
diff --git a/bundle-plugin/src/test/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassTest.java b/bundle-plugin/src/test/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassTest.java
index aba6e8f14e8..e9df42f24f4 100644
--- a/bundle-plugin/src/test/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassTest.java
+++ b/bundle-plugin/src/test/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassTest.java
@@ -12,6 +12,8 @@ import com.yahoo.container.plugin.classanalysis.sampleclasses.MethodAnnotation;
import com.yahoo.container.plugin.classanalysis.sampleclasses.MethodInvocation;
import com.yahoo.osgi.annotation.ExportPackage;
import com.yahoo.osgi.annotation.Version;
+import org.hamcrest.Matcher;
+import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -27,7 +29,6 @@ import static com.yahoo.container.plugin.classanalysis.TestUtilities.classFile;
import static com.yahoo.container.plugin.classanalysis.TestUtilities.name;
import static com.yahoo.container.plugin.classanalysis.TestUtilities.throwableMessage;
import static org.hamcrest.Matchers.allOf;
-import static org.hamcrest.Matchers.anyOf;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
@@ -41,6 +42,7 @@ import static org.junit.Assert.assertThat;
* @author ollivir
*/
public class AnalyzeClassTest {
+
@Test
public void require_that_full_class_name_is_returned() {
assertThat(analyzeClass(Base.class).getName(), is(name(Base.class)));
@@ -82,12 +84,14 @@ public class AnalyzeClassTest {
@Test
public void require_that_basic_types_ignored() {
- assertThat(analyzeClass(Interface1.class).getReferencedClasses(), not(anyOf(hasItem("int"), hasItem("float"))));
+ assertThat(analyzeClass(Interface1.class).getReferencedClasses(),
+ not(Matchers.<Iterable<? super String>>anyOf(hasItem("int"), hasItem("float"))));
}
@Test
public void require_that_arrays_of_basic_types_ignored() {
- assertThat(analyzeClass(Interface1.class).getReferencedClasses(), not(anyOf(hasItem("int[]"), hasItem("int[][]"))));
+ assertThat(analyzeClass(Interface1.class).getReferencedClasses(),
+ not(Matchers.<Iterable<? super String>>anyOf(hasItem("int[]"), hasItem("int[][]"))));
}
@Test
@@ -118,7 +122,8 @@ public class AnalyzeClassTest {
@Test
public void require_that_export_package_annotations_are_ignored() {
assertThat(Analyze.analyzeClass(classFile("com.yahoo.container.plugin.classanalysis.sampleclasses.package-info"))
- .getReferencedClasses(), not(anyOf(hasItem(name(ExportPackage.class)), hasItem(name(Version.class)))));
+ .getReferencedClasses(), not(Matchers.<Iterable<? super String>>anyOf(
+ hasItem(name(ExportPackage.class)), hasItem(name(Version.class)))));
}
@Test
diff --git a/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java
index d68b36e063c..16accb368fd 100644
--- a/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java
+++ b/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.application;
+import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.log.LogLevel;
@@ -10,8 +11,16 @@ import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import javax.xml.transform.TransformerException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
* Handles overrides in a XML document according to the rules defined for multi environment application packages.
@@ -23,8 +32,7 @@ import java.util.logging.Logger;
* 3. When multiple XML elements with the same name is specified (i.e. when specifying search or docproc chains),
* the id attribute of the element is used together with the element name when applying directives
*
- * @author lulf
- * @since 5.22
+ * @author Ulf Lilleengen
*/
class OverrideProcessor implements PreProcessor {
@@ -71,15 +79,13 @@ class OverrideProcessor implements PreProcessor {
}
private Context getParentContext(Element parent, Context context) {
- Optional<Environment> environment = context.environment;
- RegionName region = context.region;
- if ( ! environment.isPresent()) {
- environment = getEnvironment(parent);
- }
- if (region.isDefault()) {
- region = getRegion(parent);
- }
- return Context.create(environment, region);
+ Set<Environment> environments = context.environments;
+ Set<RegionName> regions = context.regions;
+ if (environments.isEmpty())
+ environments = getEnvironments(parent);
+ if (regions.isEmpty())
+ regions = getRegions(parent);
+ return Context.create(environments, regions);
}
/**
@@ -100,13 +106,13 @@ class OverrideProcessor implements PreProcessor {
*/
private void checkConsistentInheritance(List<Element> children, Context context) {
for (Element child : children) {
- Optional<Environment> env = getEnvironment(child);
- RegionName reg = getRegion(child);
- if (env.isPresent() && context.environment.isPresent() && !env.equals(context.environment)) {
- throw new IllegalArgumentException("Environment in child (" + env.get() + ") differs from that inherited from parent (" + context.environment + ") at " + child);
+ Set<Environment> environments = getEnvironments(child);
+ Set<RegionName> regions = getRegions(child);
+ if ( ! environments.isEmpty() && ! context.environments.isEmpty() && !environments.equals(context.environments)) {
+ throw new IllegalArgumentException("Environments in child (" + environments + ") differs from that inherited from parent (" + context.environments + ") at " + child);
}
- if (!reg.isDefault() && !context.region.isDefault() && !reg.equals(context.region)) {
- throw new IllegalArgumentException("Region in child (" + reg + ") differs from that inherited from parent (" + context.region + ") at " + child);
+ if ( ! regions.isEmpty() && ! context.regions.isEmpty() && ! regions.equals(context.regions)) {
+ throw new IllegalArgumentException("Regions in child (" + regions + ") differs from that inherited from parent (" + context.regions + ") at " + child);
}
}
}
@@ -118,22 +124,24 @@ class OverrideProcessor implements PreProcessor {
Iterator<Element> elemIt = children.iterator();
while (elemIt.hasNext()) {
Element child = elemIt.next();
- if ( ! matches(getEnvironment(child), getRegion(child))) {
+ if ( ! matches(getEnvironments(child), getRegions(child))) {
parent.removeChild(child);
elemIt.remove();
}
}
}
- private boolean matches(Optional<Environment> elementEnvironment, RegionName elementRegion) {
- if (elementEnvironment.isPresent()) { // match environment
- if (! environment.equals(elementEnvironment.get())) return false;
+ private boolean matches(Set<Environment> elementEnvironments, Set<RegionName> elementRegions) {
+ if ( ! elementEnvironments.isEmpty()) { // match environment
+ if ( ! elementEnvironments.contains(environment)) return false;
}
- if ( ! elementRegion.isDefault()) { // match region
- if ( ! region.equals(elementRegion)) return false;
- // match region but no environment in prod only to avoid a region attribute overriding capacity policies outside prod
- if ( ! elementEnvironment.isPresent() && ! environment.equals(Environment.prod)) return false;
+ if ( ! elementRegions.isEmpty()) { // match region
+ // match region in prod only
+ if ( environment.equals(Environment.prod) && ! elementRegions.contains(region)) return false;
+
+ // explicit region implies prod
+ if ( ! environment.equals(Environment.prod) && elementEnvironments.isEmpty() ) return false;
}
return true;
@@ -174,11 +182,11 @@ class OverrideProcessor implements PreProcessor {
private int getNumberOfOverrides(Element child, Context context) {
int currentMatch = 0;
- Optional<Environment> elementEnvironment = hasEnvironment(child) ? getEnvironment(child) : context.environment;
- RegionName elementRegion = hasRegion(child) ? getRegion(child) : context.region;
- if (elementEnvironment.isPresent() && elementEnvironment.get().equals(environment))
+ Set<Environment> elementEnvironments = hasEnvironment(child) ? getEnvironments(child) : context.environments;
+ Set<RegionName> elementRegions = hasRegion(child) ? getRegions(child) : context.regions;
+ if ( ! elementEnvironments.isEmpty() && elementEnvironments.contains(environment))
currentMatch++;
- if ( ! elementRegion.isDefault() && elementRegion.equals(region))
+ if ( ! elementRegions.isEmpty() && elementRegions.contains(region))
currentMatch++;
return currentMatch;
}
@@ -220,20 +228,16 @@ class OverrideProcessor implements PreProcessor {
return element.hasAttributeNS(XmlPreProcessor.deployNamespaceUri, ATTR_ENV);
}
- private Optional<Environment> getEnvironment(Element element) {
+ private Set<Environment> getEnvironments(Element element) {
String env = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, ATTR_ENV);
- if (env == null || env.isEmpty()) {
- return Optional.empty();
- }
- return Optional.of(Environment.from(env));
+ if (env == null || env.isEmpty()) return Collections.emptySet();
+ return Arrays.stream(env.split(" ")).map(Environment::from).collect(Collectors.toSet());
}
- private RegionName getRegion(Element element) {
+ private Set<RegionName> getRegions(Element element) {
String reg = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, ATTR_REG);
- if (reg == null || reg.isEmpty()) {
- return RegionName.defaultName();
- }
- return RegionName.from(reg);
+ if (reg == null || reg.isEmpty()) return Collections.emptySet();
+ return Arrays.stream(reg.split(" ")).map(RegionName::from).collect(Collectors.toSet());
}
private Map<String, List<Element>> elementsByTagNameAndId(List<Element> children) {
@@ -287,21 +291,21 @@ class OverrideProcessor implements PreProcessor {
*/
private static final class Context {
- final Optional<Environment> environment;
+ final ImmutableSet<Environment> environments;
- final RegionName region;
+ final ImmutableSet<RegionName> regions;
- private Context(Optional<Environment> environment, RegionName region) {
- this.environment = environment;
- this.region = region;
+ private Context(Set<Environment> environments, Set<RegionName> regions) {
+ this.environments = ImmutableSet.copyOf(environments);
+ this.regions = ImmutableSet.copyOf(regions);
}
static Context empty() {
- return new Context(Optional.empty(), RegionName.defaultName());
+ return new Context(ImmutableSet.of(), ImmutableSet.of());
}
- public static Context create(Optional<Environment> environment, RegionName region) {
- return new Context(environment, region);
+ public static Context create(Set<Environment> environments, Set<RegionName> regions) {
+ return new Context(environments, regions);
}
}
diff --git a/config-application-package/src/main/java/com/yahoo/config/application/PreProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/PreProcessor.java
index d331c4432bc..f207a07d3be 100644
--- a/config-application-package/src/main/java/com/yahoo/config/application/PreProcessor.java
+++ b/config-application-package/src/main/java/com/yahoo/config/application/PreProcessor.java
@@ -9,9 +9,10 @@ import java.io.IOException;
/**
* Performs pre-processing of XML document and returns new document that has been processed.
*
- * @author lulf
- * @since 5.21
+ * @author Ulf Lilleengen
*/
public interface PreProcessor {
- public Document process(Document input) throws IOException, TransformerException;
+
+ Document process(Document input) throws IOException, TransformerException;
+
}
diff --git a/config-application-package/src/main/java/com/yahoo/config/application/PropertiesProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/PropertiesProcessor.java
index 6e45460a4c4..65120c3677c 100644
--- a/config-application-package/src/main/java/com/yahoo/config/application/PropertiesProcessor.java
+++ b/config-application-package/src/main/java/com/yahoo/config/application/PropertiesProcessor.java
@@ -16,7 +16,6 @@ import java.util.logging.Logger;
* Handles getting properties from services.xml and replacing references to properties with their real values
*
* @author hmusum
- * @since 5.22
*/
class PropertiesProcessor implements PreProcessor {
private final static Logger log = Logger.getLogger(PropertiesProcessor.class.getName());
@@ -82,8 +81,8 @@ class PropertiesProcessor implements PreProcessor {
}
private String replaceValue(String propertyValue) {
- /* Use a list with keys sorted by length (longest key first)
- Needed for replacing values where you have overlapping keys */
+ // Use a list with keys sorted by length (longest key first)
+ // Needed for replacing values where you have overlapping keys
ArrayList<String> keys = new ArrayList<>(properties.keySet());
Collections.sort(keys, Collections.reverseOrder(Comparator.comparing(String::length)));
diff --git a/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java
index ceef0a6730e..0bb160319c0 100644
--- a/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java
+++ b/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java
@@ -22,7 +22,6 @@ import java.util.List;
* and create a new Document which is based on the supplied environment and region
*
* @author hmusum
- * @since 5.22
*/
public class XmlPreProcessor {
@@ -51,7 +50,7 @@ public class XmlPreProcessor {
public Document run() throws ParserConfigurationException, IOException, SAXException, TransformerException {
DocumentBuilder docBuilder = Xml.getPreprocessDocumentBuilder();
- final Document document = docBuilder.parse(new InputSource(xmlInput));
+ Document document = docBuilder.parse(new InputSource(xmlInput));
return execute(document);
}
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/ApplicationPackageXmlFilesValidator.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/ApplicationPackageXmlFilesValidator.java
index 8e9c5c0b509..74ade9d8e14 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/ApplicationPackageXmlFilesValidator.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/ApplicationPackageXmlFilesValidator.java
@@ -26,9 +26,9 @@ public class ApplicationPackageXmlFilesValidator {
private static final FilenameFilter xmlFilter = (dir, name) -> name.endsWith(".xml");
- public ApplicationPackageXmlFilesValidator(AppSubDirs appDirs, Version vespaVersion) {
+ private ApplicationPackageXmlFilesValidator(AppSubDirs appDirs, Version vespaVersion) {
this.appDirs = appDirs;
- this.validators = new SchemaValidators(vespaVersion, new BaseDeployLogger());
+ this.validators = new SchemaValidators(vespaVersion);
}
public static ApplicationPackageXmlFilesValidator create(File appDir, Version vespaVersion) {
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
index 7ca9bcf48f3..1724bad765f 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
@@ -305,6 +305,7 @@ public class FilesApplicationPackage implements ApplicationPackage {
/**
* Verify that two sets of search definitions are disjoint (TODO: everything except error message is very generic).
+ *
* @param fileSds Set of search definitions from file
* @param bundleSds Set of search definitions from bundles
*/
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidator.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidator.java
index 50268fc1e08..16469bb13ae 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidator.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidator.java
@@ -82,15 +82,15 @@ public class SchemaValidator {
private class CustomErrorHandler implements ErrorHandler {
volatile String fileName;
- public void warning(SAXParseException e) throws SAXException {
+ public void warning(SAXParseException e) {
deployLogger.log(Level.WARNING, message(e));
}
- public void error(SAXParseException e) throws SAXException {
+ public void error(SAXParseException e) {
throw new IllegalArgumentException(message(e));
}
- public void fatalError(SAXParseException e) throws SAXException {
+ public void fatalError(SAXParseException e) {
throw new IllegalArgumentException(message(e));
}
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidators.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidators.java
index 783f7361ad5..a28f771c37b 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidators.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SchemaValidators.java
@@ -2,7 +2,6 @@
package com.yahoo.config.model.application.provider;
import com.yahoo.component.Version;
-import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.io.IOUtils;
import com.yahoo.log.LogLevel;
import org.osgi.framework.Bundle;
@@ -40,8 +39,6 @@ public class SchemaValidators {
private static final String routingStandaloneXmlSchemaName = "routing-standalone.rnc";
- private final DeployLogger deployLogger;
-
private final SchemaValidator servicesXmlValidator;
private final SchemaValidator hostsXmlValidator;
private final SchemaValidator deploymentXmlValidator;
@@ -54,8 +51,7 @@ public class SchemaValidators {
*
* @param vespaVersion the version of Vespa we should validate against
*/
- public SchemaValidators(Version vespaVersion, DeployLogger logger) {
- this.deployLogger = logger;
+ public SchemaValidators(Version vespaVersion) {
File schemaDir = null;
try {
schemaDir = saveSchemasFromJar(new File(SchemaValidators.schemaDirBase), vespaVersion);
@@ -75,15 +71,6 @@ public class SchemaValidators {
}
}
- /**
- * Initializes the validator by using the given file as schema file
- *
- * @param vespaVersion the version of Vespa we should validate against
- */
- public SchemaValidators(Version vespaVersion) {
- this(vespaVersion, new BaseDeployLogger());
- }
-
public SchemaValidator servicesXmlValidator() {
return servicesXmlValidator;
}
@@ -104,7 +91,7 @@ public class SchemaValidators {
return containerIncludeXmlValidator;
}
- public SchemaValidator routingStandaloneXmlValidator() {
+ SchemaValidator routingStandaloneXmlValidator() {
return routingStandaloneXmlValidator;
}
@@ -114,22 +101,20 @@ public class SchemaValidators {
* @return the directory the schema files are stored in
* @throws IOException if it is not possible to read schema files
*/
- File saveSchemasFromJar(File tmpBase, Version vespaVersion) throws IOException {
+ private File saveSchemasFromJar(File tmpBase, Version vespaVersion) throws IOException {
final Class<? extends SchemaValidators> schemaValidatorClass = this.getClass();
final ClassLoader classLoader = schemaValidatorClass.getClassLoader();
Enumeration<URL> uris = classLoader.getResources("schema");
if (uris == null) return null;
File tmpDir = java.nio.file.Files.createTempDirectory(tmpBase.toPath(), "vespa").toFile();
- log.log(LogLevel.DEBUG, "Will save all XML schemas to " + tmpDir);
+ log.log(LogLevel.DEBUG, "Will save all XML schemas found in jar to " + tmpDir);
while (uris.hasMoreElements()) {
URL u = uris.nextElement();
log.log(LogLevel.DEBUG, "uri for resource 'schema'=" + u.toString());
if ("jar".equals(u.getProtocol())) {
JarURLConnection jarConnection = (JarURLConnection) u.openConnection();
JarFile jarFile = jarConnection.getJarFile();
- for (Enumeration<JarEntry> entries = jarFile.entries();
- entries.hasMoreElements(); ) {
-
+ for (Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements(); ) {
JarEntry je = entries.nextElement();
if (je.getName().startsWith("schema/") && je.getName().endsWith(".rnc")) {
writeContentsToFile(tmpDir, je.getName(), jarFile.getInputStream(je));
@@ -168,7 +153,6 @@ public class SchemaValidators {
return tmpDir;
}
- // TODO: This only copies schema for services.xml. Why?
private static void copySchemas(File from, File to) throws IOException {
// TODO: only copy .rnc files.
if (! from.exists()) throw new IOException("Could not find schema source directory '" + from + "'");
@@ -187,7 +171,7 @@ public class SchemaValidators {
private SchemaValidator createValidator(File schemaDir, String schemaFile) {
try {
File file = new File(schemaDir + File.separator + "schema" + File.separator + schemaFile);
- return new SchemaValidator(file, deployLogger);
+ return new SchemaValidator(file, new BaseDeployLogger());
} catch (SAXException e) {
throw new RuntimeException("Invalid schema '" + schemaFile + "'", e);
} catch (IOException e) {
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SimpleApplicationValidator.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SimpleApplicationValidator.java
index 9db254bc742..1284d315058 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SimpleApplicationValidator.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/SimpleApplicationValidator.java
@@ -14,6 +14,6 @@ import java.io.Reader;
public class SimpleApplicationValidator {
public static void checkServices(Reader reader, Version version) throws IOException {
- new SchemaValidators(version, new BaseDeployLogger()).servicesXmlValidator().validate(reader);
+ new SchemaValidators(version).servicesXmlValidator().validate(reader);
}
}
diff --git a/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java
index d3c2b672ee5..a456924673d 100644
--- a/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java
+++ b/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java
@@ -13,44 +13,48 @@ import java.io.*;
import java.nio.file.NoSuchFileException;
/**
- * @author lulf
- * @since 5.22
+ * @author Ulf Lilleengen
*/
public class IncludeProcessorTest {
@Test
- public void testInclude() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException {
+ public void testInclude() throws IOException, SAXException, ParserConfigurationException, TransformerException {
File app = new File("src/test/resources/multienvapp");
DocumentBuilder docBuilder = Xml.getPreprocessDocumentBuilder();
- String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
+ String expected =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
" <preprocess:properties>\n" +
" <qrs.port>4099</qrs.port>\n" +
" <qrs.port>5000</qrs.port>\n" +
" </preprocess:properties>\n" +
" <preprocess:properties deploy:environment='prod'>\n" +
" <qrs.port deploy:region='us-west'>5001</qrs.port>" +
- " <qrs.port deploy:region='us-east'>5002</qrs.port>" +
+ " <qrs.port deploy:region='us-east us-central'>5002</qrs.port>" +
" </preprocess:properties>\n" +
" <admin version=\"2.0\">\n" +
" <adminserver hostalias=\"node0\"/>\n" +
" </admin>\n" +
- " <admin deploy:environment=\"prod\" version=\"2.0\">\n" +
+ " <admin deploy:environment=\"staging prod\" deploy:region=\"us-east us-central\" version=\"2.0\">\n" +
" <adminserver hostalias=\"node1\"/>\n" +
" </admin>\n" +
" <content id=\"foo\" version=\"1.0\">\n" +
" <redundancy>1</redundancy><documents>\n" +
" <document mode=\"index\" type=\"music.sd\"/>\n" +
- "</documents><nodes>\n" +
+ " </documents><nodes>\n" +
" <node distribution-key=\"0\" hostalias=\"node0\"/>\n" +
- "</nodes><nodes deploy:environment=\"prod\">\n" +
+ " </nodes>" +
+ " <nodes deploy:environment=\"prod\">\n" +
" <node distribution-key=\"0\" hostalias=\"node0\"/>\n" +
" <node distribution-key=\"1\" hostalias=\"node1\"/>\n" +
- "</nodes><nodes deploy:environment=\"prod\" deploy:region=\"us-west\">\n" +
+ " </nodes>" +
+ " <nodes deploy:environment=\"prod\" deploy:region=\"us-west\">\n" +
" <node distribution-key=\"0\" hostalias=\"node0\"/>\n" +
" <node distribution-key=\"1\" hostalias=\"node1\"/>\n" +
" <node distribution-key=\"2\" hostalias=\"node2\"/>\n" +
- "</nodes></content>\n" +
+ " </nodes>" +
+ "</content>\n" +
"<jdisc id=\"stateless\" version=\"1.0\">\n" +
" <search deploy:environment=\"prod\">\n" +
" <chain id=\"common\">\n" +
@@ -68,7 +72,7 @@ public class IncludeProcessorTest {
" </nodes>\n" +
"</jdisc></services>";
- Document doc = (new IncludeProcessor(app)).process(docBuilder.parse(Xml.getServices(app)));
+ Document doc = new IncludeProcessor(app).process(docBuilder.parse(Xml.getServices(app)));
// System.out.println(Xml.documentAsString(doc));
TestBase.assertDocument(expected, doc);
}
@@ -77,7 +81,7 @@ public class IncludeProcessorTest {
public void testRequiredIncludeIsDefault() throws ParserConfigurationException, IOException, SAXException, TransformerException {
File app = new File("src/test/resources/multienvapp_failrequired");
DocumentBuilder docBuilder = Xml.getPreprocessDocumentBuilder();
- (new IncludeProcessor(app)).process(docBuilder.parse(Xml.getServices(app)));
+ new IncludeProcessor(app).process(docBuilder.parse(Xml.getServices(app)));
}
}
diff --git a/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java
index b20437bc259..3827fe2ad42 100644
--- a/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java
+++ b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java
@@ -23,8 +23,10 @@ public class XmlPreprocessorTest {
private static final File services = new File(appDir, "services.xml");
@Test
- public void testPreProcessing() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException {
- String expectedDev = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
+ public void testPreProcessing() throws IOException, SAXException, ParserConfigurationException, TransformerException {
+ String expectedDev =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
" <admin version=\"2.0\">\n" +
" <adminserver hostalias=\"node0\"/>\n" +
" </admin>\n" +
@@ -46,14 +48,40 @@ public class XmlPreprocessorTest {
" </nodes>\n" +
" </jdisc>\n" +
"</services>";
+ TestBase.assertDocument(expectedDev, new XmlPreProcessor(appDir, services, Environment.dev, RegionName.from("default")).run());
- Document docDev = (new XmlPreProcessor(appDir, services, Environment.dev, RegionName.from("default")).run());
- TestBase.assertDocument(expectedDev, docDev);
-
+ String expectedStaging =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
+ " <admin version=\"2.0\">\n" +
+ " <adminserver hostalias=\"node1\"/>\n" + // Difference from dev: node1
+ " </admin>\n" +
+ " <content id=\"foo\" version=\"1.0\">\n" +
+ " <redundancy>1</redundancy>\n" +
+ " <documents>\n" +
+ " <document mode=\"index\" type=\"music.sd\"/>\n" +
+ " </documents>\n" +
+ " <nodes>\n" +
+ " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" +
+ " </nodes>\n" +
+ " </content>\n" +
+ " <jdisc id=\"stateless\" version=\"1.0\">\n" +
+ " <search/>\n" +
+ " <component bundle=\"foobundle\" class=\"MyFoo\" id=\"foo\"/>\n" +
+ "" + // Difference from dev: no TestBar
+ " <nodes>\n" +
+ " <node hostalias=\"node0\" baseport=\"5000\"/>\n" +
+ " </nodes>\n" +
+ " </jdisc>\n" +
+ "</services>";
+ // System.out.println(Xml.documentAsString(new XmlPreProcessor(appDir, services, Environment.staging, RegionName.from("default")).run()));
+ TestBase.assertDocument(expectedStaging, new XmlPreProcessor(appDir, services, Environment.staging, RegionName.from("default")).run());
- String expectedUsWest = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
+ String expectedUsWest =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
" <admin version=\"2.0\">\n" +
- " <adminserver hostalias=\"node1\"/>\n" +
+ " <adminserver hostalias=\"node0\"/>\n" +
" </admin>\n" +
" <content id=\"foo\" version=\"1.0\">\n" +
" <redundancy>1</redundancy>\n" +
@@ -81,12 +109,11 @@ public class XmlPreprocessorTest {
" </nodes>\n" +
" </jdisc>\n" +
"</services>";
+ TestBase.assertDocument(expectedUsWest, new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-west")).run());
- Document docUsWest = (new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-west"))).run();
- // System.out.println(Xml.documentAsString(docUsWest));
- TestBase.assertDocument(expectedUsWest, docUsWest);
-
- String expectedUsEast = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
+ String expectedUsEastAndCentral =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" +
" <admin version=\"2.0\">\n" +
" <adminserver hostalias=\"node1\"/>\n" +
" </admin>\n" +
@@ -115,14 +142,16 @@ public class XmlPreprocessorTest {
" </nodes>\n" +
" </jdisc>\n" +
"</services>";
-
- Document docUsEast = (new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-east"))).run();
- TestBase.assertDocument(expectedUsEast, docUsEast);
+ TestBase.assertDocument(expectedUsEastAndCentral,
+ new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-east")).run());
+ TestBase.assertDocument(expectedUsEastAndCentral,
+ new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-central")).run());
}
@Test
- public void testPropertiesWithOverlappingNames() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException {
- String input = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ public void testPropertiesWithOverlappingNames() throws IOException, SAXException, ParserConfigurationException, TransformerException {
+ String input =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
"<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" +
" <preprocess:properties>" +
" <sherpa.host>gamma-usnc1.dht.yahoo.com</sherpa.host>" +
@@ -146,7 +175,8 @@ public class XmlPreprocessorTest {
" </admin>" +
"</services>";
- String expectedProd = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
+ String expectedProd =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
"<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" +
" <config name='a'>" +
" <a>36000</a>" +
diff --git a/config-application-package/src/test/resources/multienvapp/services.xml b/config-application-package/src/test/resources/multienvapp/services.xml
index 3d4a2087c57..d0f43f0b025 100644
--- a/config-application-package/src/test/resources/multienvapp/services.xml
+++ b/config-application-package/src/test/resources/multienvapp/services.xml
@@ -1,5 +1,6 @@
<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<services version='1.0' xmlns:deploy="vespa" xmlns:preprocess="properties">
+
<preprocess:properties>
<qrs.port>4099</qrs.port>
<qrs.port>5000</qrs.port>
@@ -7,17 +8,23 @@
<preprocess:properties deploy:environment='prod'>
<qrs.port deploy:region='us-west'>5001</qrs.port>
- <qrs.port deploy:region='us-east'>5002</qrs.port>
+ <qrs.port deploy:region='us-east us-central'>5002</qrs.port>
</preprocess:properties>
+
<admin version='2.0'>
<adminserver hostalias='node0'/>
</admin>
- <admin version='2.0' deploy:environment='prod'>
+
+ <admin version='2.0' deploy:environment='staging prod' deploy:region='us-east us-central'>
<adminserver hostalias='node1'/>
</admin>
+
<preprocess:include file='jdisc.xml'/>
+
<content version='1.0' id='foo'>
<preprocess:include file='content/content_foo.xml'/>
</content>
+
<preprocess:include file='doesnotexist.xml' required='false' />
+
</services>
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index c75174cd999..6d5804ab700 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -51,6 +51,7 @@ public interface ModelContext {
Set<Rotation> rotations();
boolean isBootstrap();
boolean isFirstTimeDeployment();
+ boolean useDedicatedNodeForLogserver();
}
}
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java
index 53c70399e94..9d9a19bfbd6 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java
@@ -27,6 +27,8 @@ public class DeployProperties {
private final Version vespaVersion;
private final boolean isBootstrap;
private final boolean isFirstTimeDeployment;
+ private final boolean useDedicatedNodeForLogserver;
+
private DeployProperties(boolean multitenant,
ApplicationId applicationId,
@@ -37,7 +39,8 @@ public class DeployProperties {
String athenzDnsSuffix,
Version vespaVersion,
boolean isBootstrap,
- boolean isFirstTimeDeployment) {
+ boolean isFirstTimeDeployment,
+ boolean useDedicatedNodeForLogserver) {
this.loadBalancerName = loadBalancerName;
this.ztsUrl = ztsUrl;
this.athenzDnsSuffix = athenzDnsSuffix;
@@ -48,6 +51,7 @@ public class DeployProperties {
this.hostedVespa = hostedVespa;
this.isBootstrap = isBootstrap;
this.isFirstTimeDeployment = isFirstTimeDeployment;
+ this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver;
}
public boolean multitenant() {
@@ -89,6 +93,8 @@ public class DeployProperties {
/** Returns whether this is the first deployment for this application (used during *prepare*, not set on activate) */
public boolean isFirstTimeDeployment() { return isFirstTimeDeployment; }
+ public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
+
public static class Builder {
private ApplicationId applicationId = ApplicationId.defaultId();
@@ -101,6 +107,7 @@ public class DeployProperties {
private Version vespaVersion = Version.fromIntValues(1, 0, 0);
private boolean isBootstrap = false;
private boolean isFirstTimeDeployment = false;
+ private boolean useDedicatedNodeForLogserver = false;
public Builder applicationId(ApplicationId applicationId) {
this.applicationId = applicationId;
@@ -152,9 +159,15 @@ public class DeployProperties {
return this;
}
+ public Builder useDedicatedNodeForLogserver(boolean useDedicatedNodeForLogserver) {
+ this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver;
+ return this;
+ }
+
public DeployProperties build() {
return new DeployProperties(multitenant, applicationId, configServerSpecs, loadBalancerName, hostedVespa,
- ztsUrl, athenzDnsSuffix, vespaVersion, isBootstrap, isFirstTimeDeployment);
+ ztsUrl, athenzDnsSuffix, vespaVersion, isBootstrap, isFirstTimeDeployment,
+ useDedicatedNodeForLogserver);
}
}
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java b/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
index b538468d0bc..e0047aba2db 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.application.provider.BaseDeployLogger;
import com.yahoo.config.model.application.provider.SchemaValidators;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.builder.xml.ConfigModelBuilder;
+import com.yahoo.vespa.config.VespaVersion;
import com.yahoo.vespa.model.VespaModel;
import org.xml.sax.SAXException;
@@ -103,7 +104,7 @@ public class TestDriver {
if (!validate) {
return;
}
- SchemaValidators schemaValidators = new SchemaValidators(new Version(6), new BaseDeployLogger());
+ SchemaValidators schemaValidators = new SchemaValidators(new Version(VespaVersion.major));
if (appPkg.getHosts() != null) {
schemaValidators.hostsXmlValidator().validate(appPkg.getHosts());
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/UnproperSearch.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentOnlySearch.java
index 71d3db6616b..5940f908be8 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/UnproperSearch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentOnlySearch.java
@@ -5,19 +5,13 @@ import com.yahoo.searchdefinition.document.SDDocumentType;
/**
* A search that was derived from an sd file containing no search element(s), only
- * document specifications.
+ * document specifications, so the name of this is decided by parsing and adding the document instance.
*
* @author vegardh
- *
*/
- // Award for best class name goes to ...
-public class UnproperSearch extends Search {
- // This class exists because the parser accepts SD files without search { ... , and
- // there are unit tests using it too, BUT there are many nullpointer bugs if you try to
- // deploy such a file. Using this class to try to catch those.
- // TODO: Throw away this when we properly support doc-only SD files.
+public class DocumentOnlySearch extends Search {
- public UnproperSearch() {
+ public DocumentOnlySearch() {
// empty
}
@@ -28,4 +22,5 @@ public class UnproperSearch extends Search {
}
super.addDocument(docType);
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
index 16e494c2db1..78f61d7192d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -39,6 +39,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -128,7 +129,7 @@ public class RankProfile implements Serializable, Cloneable {
/**
* Creates a global rank profile
*
- * @param name the name of the new profile
+ * @param name the name of the new profile
* @param model the model owning this profile
*/
public RankProfile(String name, VespaModel model, RankProfileRegistry rankProfileRegistry) {
@@ -231,8 +232,8 @@ public class RankProfile implements Serializable, Cloneable {
/**
* Returns the a rank setting of a field, or null if there is no such rank setting in this profile
*
- * @param field The field whose settings to return.
- * @param type The type that the field is required to be.
+ * @param field the field whose settings to return.
+ * @param type the type that the field is required to be.
* @return the rank setting found, or null.
*/
public RankSetting getDeclaredRankSetting(String field, RankSetting.Type type) {
@@ -449,7 +450,7 @@ public class RankProfile implements Serializable, Cloneable {
addRankProperty(new RankProperty(name, parameter));
}
- public void addRankProperty(RankProperty rankProperty) {
+ private void addRankProperty(RankProperty rankProperty) {
// Just the usual multimap semantics here
List<RankProperty> properties = rankProperties.get(rankProperty.getName());
if (properties == null) {
@@ -539,17 +540,16 @@ public class RankProfile implements Serializable, Cloneable {
return rankingExpressionFunction;
}
- /** Returns an unmodifiable view of the functions in this */
+ /** Returns an unmodifiable snapshot of the functions in this */
public Map<String, RankingExpressionFunction> getFunctions() {
- if (functions.size() == 0 && getInherited() == null) return Collections.emptyMap();
- if (functions.size() == 0) return getInherited().getFunctions();
- if (getInherited() == null) return Collections.unmodifiableMap(functions);
+ if (functions.isEmpty() && getInherited() == null) return Collections.emptyMap();
+ if (functions.isEmpty()) return getInherited().getFunctions();
+ if (getInherited() == null) return Collections.unmodifiableMap(new LinkedHashMap<>(functions));
// Neither is null
Map<String, RankingExpressionFunction> allFunctions = new LinkedHashMap<>(getInherited().getFunctions());
allFunctions.putAll(functions);
return Collections.unmodifiableMap(allFunctions);
-
}
public int getKeepRankCount() {
@@ -664,10 +664,10 @@ public class RankProfile implements Serializable, Cloneable {
// Function compiling first pass: compile inline functions without resolving other functions
Map<String, RankingExpressionFunction> inlineFunctions =
- compileFunctions(getInlineFunctions(), queryProfiles, importedModels, Collections.emptyMap(), expressionTransforms);
+ compileFunctions(this::getInlineFunctions, queryProfiles, importedModels, Collections.emptyMap(), expressionTransforms);
// Function compiling second pass: compile all functions and insert previously compiled inline functions
- functions = compileFunctions(getFunctions(), queryProfiles, importedModels, inlineFunctions, expressionTransforms);
+ functions = compileFunctions(this::getFunctions, queryProfiles, importedModels, inlineFunctions, expressionTransforms);
firstPhaseRanking = compile(this.getFirstPhaseRanking(), queryProfiles, importedModels, getConstants(), inlineFunctions, expressionTransforms);
secondPhaseRanking = compile(this.getSecondPhaseRanking(), queryProfiles, importedModels, getConstants(), inlineFunctions, expressionTransforms);
@@ -686,20 +686,34 @@ public class RankProfile implements Serializable, Cloneable {
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
- private Map<String, RankingExpressionFunction> compileFunctions(Map<String, RankingExpressionFunction> functions,
+ private Map<String, RankingExpressionFunction> compileFunctions(Supplier<Map<String, RankingExpressionFunction>> functions,
QueryProfileRegistry queryProfiles,
ImportedModels importedModels,
Map<String, RankingExpressionFunction> inlineFunctions,
ExpressionTransforms expressionTransforms) {
Map<String, RankingExpressionFunction> compiledFunctions = new LinkedHashMap<>();
- for (Map.Entry<String, RankingExpressionFunction> entry : functions.entrySet()) {
+ Map.Entry<String, RankingExpressionFunction> entry;
+ // Compile all functions. Why iterate in such a complicated way?
+ // Because some functions (imported models adding generated macros) may add other functions during compiling.
+ // A straightforward iteration will either miss those functions, or may cause a ConcurrentModificationException
+ while (null != (entry = findUncompiledFunction(functions.get(), compiledFunctions.keySet()))) {
RankingExpressionFunction rankingExpressionFunction = entry.getValue();
- RankingExpression compiled = compile(rankingExpressionFunction.function().getBody(), queryProfiles, importedModels, getConstants(), inlineFunctions, expressionTransforms);
- compiledFunctions.put(entry.getKey(), rankingExpressionFunction.withBody(compiled));
+ RankingExpression compiled = compile(rankingExpressionFunction.function().getBody(), queryProfiles,
+ importedModels, getConstants(), inlineFunctions, expressionTransforms);
+ compiledFunctions.put(entry.getKey(), rankingExpressionFunction.withExpression(compiled));
}
return compiledFunctions;
}
+ private Map.Entry<String, RankingExpressionFunction> findUncompiledFunction(Map<String, RankingExpressionFunction> functions,
+ Set<String> compiledFunctionNames) {
+ for (Map.Entry<String, RankingExpressionFunction> entry : functions.entrySet()) {
+ if ( ! compiledFunctionNames.contains(entry.getKey()))
+ return entry;
+ }
+ return null;
+ }
+
private RankingExpression compile(RankingExpression expression,
QueryProfileRegistry queryProfiles,
ImportedModels importedModels,
@@ -898,7 +912,7 @@ public class RankProfile implements Serializable, Cloneable {
/** A function in a rank profile */
public static class RankingExpressionFunction {
- private final ExpressionFunction function;
+ private ExpressionFunction function;
/** True if this should be inlined into calling expressions. Useful for very cheap functions. */
private final boolean inline;
@@ -908,13 +922,17 @@ public class RankProfile implements Serializable, Cloneable {
this.inline = inline;
}
+ public void setReturnType(TensorType type) {
+ this.function = function.withReturnType(type);
+ }
+
public ExpressionFunction function() { return function; }
public boolean inline() {
return inline && function.arguments().isEmpty(); // only inline no-arg functions;
}
- public RankingExpressionFunction withBody(RankingExpression expression) {
+ public RankingExpressionFunction withExpression(RankingExpression expression) {
return new RankingExpressionFunction(function.withBody(expression), inline);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
index f42d5de21e8..a988da9664e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
@@ -59,9 +59,6 @@ public class Search implements Serializable, ImmutableSearch {
// Field sets
private FieldSets fieldSets = new FieldSets();
- // Whether or not this object has been processed.
- private boolean processed;
-
// The unique name of this search definition.
private String name;
@@ -585,17 +582,6 @@ public class Search implements Serializable, ImmutableSearch {
return false;
}
- public void process() {
- if (processed) {
- throw new IllegalStateException("Search '" + getName() + "' already processed.");
- }
- processed = true;
- }
-
- public boolean isProcessed() {
- return processed;
- }
-
/**
* The field set settings for this search
*
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
index 3c2ebc058ac..151ad02a3fa 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
@@ -188,10 +188,6 @@ public class SearchBuilder {
throw new IllegalArgumentException("Search has no name.");
}
String rawName = rawSearch.getName();
- if (rawSearch.isProcessed()) {
- throw new IllegalArgumentException("A search definition with a search section called '" + rawName +
- "' has already been processed.");
- }
for (Search search : searchList) {
if (rawName.equals(search.getName())) {
throw new IllegalArgumentException("A search definition with a search section called '" + rawName +
@@ -247,8 +243,7 @@ public class SearchBuilder {
DocumentModelBuilder builder = new DocumentModelBuilder(model);
for (Search search : new SearchOrderer().order(searchList)) {
- new FieldOperationApplierForSearch().process(search);
- // These two needed for a couple of old unit tests, ideally these are just read from app
+ new FieldOperationApplierForSearch().process(search); // TODO: Why is this not in the regular list?
process(search, deployLogger, new QueryProfiles(queryProfileRegistry), validate);
built.add(search);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java
deleted file mode 100644
index 6c12c6c94d1..00000000000
--- a/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition;
-
-import com.yahoo.search.query.profile.QueryProfileRegistry;
-import com.yahoo.searchdefinition.parser.ParseException;
-import com.yahoo.config.application.api.ApplicationPackage;
-import com.yahoo.config.application.api.DeployLogger;
-import com.yahoo.vespa.model.container.search.QueryProfiles;
-
-import java.io.IOException;
-
-/**
- * A SearchBuilder that does not run the processing chain for searches
- */
-public class UnprocessingSearchBuilder extends SearchBuilder {
-
- public UnprocessingSearchBuilder(ApplicationPackage app,
- RankProfileRegistry rankProfileRegistry,
- QueryProfileRegistry queryProfileRegistry) {
- super(app, rankProfileRegistry, queryProfileRegistry);
- }
-
- public UnprocessingSearchBuilder() {
- super();
- }
-
- public UnprocessingSearchBuilder(RankProfileRegistry rankProfileRegistry,
- QueryProfileRegistry queryProfileRegistry) {
- super(rankProfileRegistry, queryProfileRegistry);
- }
-
- @Override
- public void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles, boolean validate) {
- // empty
- }
-
- public static Search buildUnprocessedFromFile(String fileName) throws IOException, ParseException {
- SearchBuilder builder = new UnprocessingSearchBuilder();
- builder.importFile(fileName);
- builder.build();
- return builder.getSearch();
- }
-
-}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
index 9a00ee5bbd0..7c2d9a3b0ad 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
@@ -74,21 +74,11 @@ public class DerivedConfiguration {
QueryProfileRegistry queryProfiles,
ImportedModels importedModels) {
Validator.ensureNotNull("Search definition", search);
- if ( ! search.isProcessed()) {
- throw new IllegalArgumentException("Search '" + search.getName() + "' not processed.");
- }
this.search = search;
if ( ! search.isDocumentsOnly()) {
streamingFields = new VsmFields(search);
streamingSummary = new VsmSummary(search);
}
- if (abstractSearchList != null) {
- for (Search abstractSearch : abstractSearchList) {
- if (!abstractSearch.isProcessed()) {
- throw new IllegalArgumentException("Search '" + search.getName() + "' not processed.");
- }
- }
- }
if ( ! search.isDocumentsOnly()) {
attributeFields = new AttributeFields(search);
summaries = new Summaries(search, deployLogger);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/Deriver.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/Deriver.java
index e6b6c58cb38..133adb45dd9 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/Deriver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/Deriver.java
@@ -3,7 +3,6 @@ package com.yahoo.searchdefinition.derived;
import com.yahoo.document.DocumenttypesConfig;
import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.searchdefinition.SearchBuilder;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.vespa.configmodel.producers.DocumentManager;
import com.yahoo.vespa.configmodel.producers.DocumentTypes;
@@ -18,25 +17,6 @@ import java.util.List;
*/
public class Deriver {
- /**
- * Derives only document manager.
- *
- *
- * @param sdFileNames The name of the search definition files to derive from.
- * @param toDir The directory to write configuration to.
- * @return The list of Search objects, possibly "unproper ones", from sd files containing only document
- */
- public static SearchBuilder deriveDocuments(List<String> sdFileNames, String toDir) {
- SearchBuilder builder = getUnprocessingSearchBuilder(sdFileNames);
- DocumentmanagerConfig.Builder documentManagerCfg = new DocumentManager().produce(builder.getModel(), new DocumentmanagerConfig.Builder());
- try {
- DerivedConfiguration.exportDocuments(documentManagerCfg, toDir);
- } catch (IOException e) {
- throw new IllegalArgumentException(e);
- }
- return builder;
- }
-
public static SearchBuilder getSearchBuilder(List<String> sds) {
SearchBuilder builder = new SearchBuilder();
try {
@@ -50,19 +30,6 @@ public class Deriver {
return builder;
}
- public static SearchBuilder getUnprocessingSearchBuilder(List<String> sds) {
- SearchBuilder builder = new UnprocessingSearchBuilder();
- try {
- for (String s : sds) {
- builder.importFile(s);
- }
- } catch (ParseException | IOException e) {
- throw new IllegalArgumentException(e);
- }
- builder.build();
- return builder;
- }
-
public static DocumentmanagerConfig.Builder getDocumentManagerConfig(String sd) {
return getDocumentManagerConfig(Collections.singletonList(sd));
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
index 3f1d6c55536..dc6c17e425e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
@@ -4,6 +4,7 @@ package com.yahoo.searchdefinition.derived;
import com.yahoo.document.DataType;
import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.configdefinition.IlscriptsConfig.Ilscript.Builder;
@@ -22,7 +23,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -34,8 +34,8 @@ import java.util.Set;
*/
public final class IndexingScript extends Derived implements IlscriptsConfig.Producer {
- private final List<String> docFields = new LinkedList<>();
- private final List<Expression> expressions = new LinkedList<>();
+ private final List<String> docFields = new ArrayList<>();
+ private final List<Expression> expressions = new ArrayList<>();
public IndexingScript(Search search) {
derive(search);
@@ -46,7 +46,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro
if (field.isImportedField()) {
return;
}
- if (!field.isExtraField()) {
+ if (field.hasFullIndexingDocprocRights()) {
docFields.add(field.getName());
}
if (field.usesStructOrMap() &&
@@ -75,9 +75,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro
public void getConfig(IlscriptsConfig.Builder configBuilder) {
IlscriptsConfig.Ilscript.Builder ilscriptBuilder = new IlscriptsConfig.Ilscript.Builder();
ilscriptBuilder.doctype(getName());
- for (String fieldName : docFields) {
- ilscriptBuilder.docfield(fieldName);
- }
+ ilscriptBuilder.docfield(docFields);
addContentInOrder(ilscriptBuilder);
configBuilder.ilscript(ilscriptBuilder);
}
@@ -90,7 +88,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro
if (modifiesSelf(exp)) {
later.add(exp);
} else {
- ilscriptBuilder.content(exp.toString());
+ ilscriptBuilder.content(exp.toString());
}
fieldFetcher.visit(exp);
touchedFields.addAll(fieldFetcher.touchedFields());
@@ -102,9 +100,9 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro
}
private void generateSyntheticStatementsForUntouchedFields(Builder ilscriptBuilder, Set<String> touchedFields) {
- Set<String> fieldsWithSyntheticStatements = new HashSet<String>(docFields);
+ Set<String> fieldsWithSyntheticStatements = new HashSet<>(docFields);
fieldsWithSyntheticStatements.removeAll(touchedFields);
- List<String> orderedFields = new ArrayList<String>(fieldsWithSyntheticStatements);
+ List<String> orderedFields = new ArrayList<>(fieldsWithSyntheticStatements);
Collections.sort(orderedFields);
for (String fieldName : orderedFields) {
StatementExpression copyField = new StatementExpression(new InputExpression(fieldName),
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
index c041d5c6a89..a1b0e72051b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
@@ -13,6 +13,7 @@ import com.yahoo.searchlib.rankingexpression.integration.ml.ImportedModels;
import com.yahoo.searchlib.rankingexpression.parser.ParseException;
import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
import com.yahoo.searchlib.rankingexpression.rule.SerializationContext;
+import com.yahoo.tensor.TensorType;
import com.yahoo.vespa.config.search.RankProfilesConfig;
import java.nio.charset.Charset;
@@ -23,6 +24,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* A rank profile derived from a search definition, containing exactly the features available natively in the server
@@ -180,32 +182,39 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
private void derivePropertiesAndSummaryFeaturesFromFunctions(Map<String, RankProfile.RankingExpressionFunction> functions) {
if (functions.isEmpty()) return;
- Map<String, ExpressionFunction> expressionFunctions = new LinkedHashMap<>();
- for (Map.Entry<String, RankProfile.RankingExpressionFunction> function : functions.entrySet()) {
- expressionFunctions.put(function.getKey(), function.getValue().function());
- }
+
+ List<ExpressionFunction> functionExpressions = functions.values().stream().map(f -> f.function()).collect(Collectors.toList());
Map<String, String> functionProperties = new LinkedHashMap<>();
- functionProperties.putAll(deriveFunctionProperties(expressionFunctions));
+ functionProperties.putAll(deriveFunctionProperties(functions, functionExpressions));
+
if (firstPhaseRanking != null) {
- functionProperties.putAll(firstPhaseRanking.getRankProperties(new ArrayList<>(expressionFunctions.values())));
+ functionProperties.putAll(firstPhaseRanking.getRankProperties(functionExpressions));
}
if (secondPhaseRanking != null) {
- functionProperties.putAll(secondPhaseRanking.getRankProperties(new ArrayList<>(expressionFunctions.values())));
+ functionProperties.putAll(secondPhaseRanking.getRankProperties(functionExpressions));
}
for (Map.Entry<String, String> e : functionProperties.entrySet()) {
rankProperties.add(new RankProfile.RankProperty(e.getKey(), e.getValue()));
}
- SerializationContext context = new SerializationContext(expressionFunctions.values(), null, functionProperties);
+ SerializationContext context = new SerializationContext(functionExpressions, null, functionProperties);
replaceFunctionSummaryFeatures(context);
}
- private Map<String, String> deriveFunctionProperties(Map<String, ExpressionFunction> functions) {
- SerializationContext context = new SerializationContext(functions);
- for (Map.Entry<String, ExpressionFunction> e : functions.entrySet()) {
- String expression = e.getValue().getBody().getRoot().toString(new StringBuilder(), context, null, null).toString();
- context.addFunctionSerialization(RankingExpression.propertyName(e.getKey()), expression);
+ private Map<String, String> deriveFunctionProperties(Map<String, RankProfile.RankingExpressionFunction> functions,
+ List<ExpressionFunction> functionExpressions) {
+ SerializationContext context = new SerializationContext(functionExpressions);
+ for (Map.Entry<String, RankProfile.RankingExpressionFunction> e : functions.entrySet()) {
+ String expressionString = e.getValue().function().getBody().getRoot().toString(new StringBuilder(), context, null, null).toString();
+ context.addFunctionSerialization(RankingExpression.propertyName(e.getKey()), expressionString);
+
+ for (Map.Entry<String, TensorType> argumentType : e.getValue().function().argumentTypes().entrySet())
+ context.addArgumentTypeSerialization(e.getKey(), argumentType.getKey(), argumentType.getValue());
+ if (e.getValue().function().returnType().isPresent())
+ context.addFunctionTypeSerialization(e.getKey(), e.getValue().function().returnType().get());
+ // else if (e.getValue().function().arguments().isEmpty()) TODO: Enable this check when we resolve all types
+ // throw new IllegalStateException("Type of function '" + e.getKey() + "' is not resolved");
}
return context.serializedFunctions();
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
index 125e6b976b5..ff11c2fdf22 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
@@ -169,4 +169,9 @@ public class ImmutableImportedSDField implements ImmutableSDField {
return new UnsupportedOperationException("'" + aspect + "' is not meaningful or relevant for an imported field.");
}
+ @Override
+ public boolean hasFullIndexingDocprocRights() {
+ return importedField.targetField().hasFullIndexingDocprocRights();
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
index 70553d4b57c..6fe8a4da92b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
@@ -81,4 +81,5 @@ public interface ImmutableSDField {
*/
Field asField();
+ boolean hasFullIndexingDocprocRights();
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
index 0590027a402..e310b6b6858 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
@@ -799,4 +799,10 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
return aliasToName;
}
+ @Override
+ public boolean hasFullIndexingDocprocRights() {
+ Attribute self = getAttributes().get(getName());
+ return (!isExtraField() || ((self != null) && self.isMutable()));
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxFeatureConverter.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxFeatureConverter.java
index 8634d51c418..ab143f77b6a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxFeatureConverter.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxFeatureConverter.java
@@ -41,11 +41,11 @@ public class OnnxFeatureConverter extends ExpressionTransformer<RankProfileTrans
if ( ! feature.getName().equals("onnx")) return feature;
try {
- // TODO: Put modelPath in FeatureArguments instead
- Path modelPath = Path.fromString(FeatureArguments.asString(feature.getArguments().expressions().get(0)));
+ FeatureArguments arguments = asFeatureArguments(feature.getArguments());
ConvertedModel convertedModel =
- convertedOnnxModels.computeIfAbsent(modelPath, __ -> ConvertedModel.fromSourceOrStore(modelPath, true, context));
- return convertedModel.expression(asFeatureArguments(feature.getArguments()), context);
+ convertedOnnxModels.computeIfAbsent(arguments.path(),
+ path -> ConvertedModel.fromSourceOrStore(path, true, context));
+ return convertedModel.expression(arguments, context);
}
catch (IllegalArgumentException | UncheckedIOException e) {
throw new IllegalArgumentException("Could not use Onnx model from " + feature, e);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/TensorFlowFeatureConverter.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/TensorFlowFeatureConverter.java
index 5139d041f00..4a315420b0a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/TensorFlowFeatureConverter.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/TensorFlowFeatureConverter.java
@@ -40,10 +40,11 @@ public class TensorFlowFeatureConverter extends ExpressionTransformer<RankProfil
if ( ! feature.getName().equals("tensorflow")) return feature;
try {
- Path modelPath = Path.fromString(FeatureArguments.asString(feature.getArguments().expressions().get(0)));
+ FeatureArguments arguments = asFeatureArguments(feature.getArguments());
ConvertedModel convertedModel =
- convertedTensorFlowModels.computeIfAbsent(modelPath, __ -> ConvertedModel.fromSourceOrStore(modelPath, false, context));
- return convertedModel.expression(asFeatureArguments(feature.getArguments()), context);
+ convertedTensorFlowModels.computeIfAbsent(arguments.path(),
+ path -> ConvertedModel.fromSourceOrStore(path, false, context));
+ return convertedModel.expression(arguments, context);
}
catch (IllegalArgumentException | UncheckedIOException e) {
throw new IllegalArgumentException("Could not use tensorflow model from " + feature, e);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/XgboostFeatureConverter.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/XgboostFeatureConverter.java
index f21248b6d74..663c5afbed6 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/XgboostFeatureConverter.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/XgboostFeatureConverter.java
@@ -41,10 +41,11 @@ public class XgboostFeatureConverter extends ExpressionTransformer<RankProfileTr
if ( ! feature.getName().equals("xgboost")) return feature;
try {
- Path modelPath = Path.fromString(FeatureArguments.asString(feature.getArguments().expressions().get(0)));
+ FeatureArguments arguments = asFeatureArguments(feature.getArguments());
ConvertedModel convertedModel =
- convertedXGBoostModels.computeIfAbsent(modelPath, __ -> ConvertedModel.fromSourceOrStore(modelPath, true, context));
- return convertedModel.expression(asFeatureArguments(feature.getArguments()), context);
+ convertedXGBoostModels.computeIfAbsent(arguments.path(),
+ path -> ConvertedModel.fromSourceOrStore(path, true, context));
+ return convertedModel.expression(arguments, context);
} catch (IllegalArgumentException | UncheckedIOException e) {
throw new IllegalArgumentException("Could not use XGBoost model from " + feature, e);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
index aeab2bb6638..b0129c0a836 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
@@ -97,13 +97,11 @@ public class IndexingInputs extends Processor {
@Override
protected void doVisit(Expression exp) {
if ( ! (exp instanceof InputExpression)) return;
-
- SDDocumentType docType = search.getDocument();
String inputField = ((InputExpression)exp).getFieldName();
- if (docType.getField(inputField) != null) return;
+ if (search.getField(inputField).hasFullIndexingDocprocRights()) return;
fail(search, field, "Indexing script refers to field '" + inputField + "' which does not exist " +
- "in document type '" + docType.getName() + "'.");
+ "in document type '" + search.getDocument().getName() + "', and is not a mutable attribute.");
}
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index 8c8c32389e2..1af2a979cb4 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -7,10 +7,8 @@ import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.processing.multifieldresolver.RankProfileTypeSettingsProcessor;
import com.yahoo.vespa.model.container.search.QueryProfiles;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.List;
/**
* Executor of processors. This defines the right order of processor execution.
@@ -33,6 +31,7 @@ public class Processing {
UriHack::new,
LiteralBoost::new,
TagType::new,
+ ValidateFieldTypesDocumentsOnly::new,
IndexingInputs::new,
OptimizeIlscript::new,
ValidateFieldWithIndexSettingsCreatesIndex::new,
@@ -75,12 +74,20 @@ public class Processing {
ReferenceFieldsProcessor::new,
FastAccessValidator::new,
ReservedFunctionNames::new,
- RankingExpressionTypeValidator::new,
+ RankingExpressionTypeResolver::new,
// These should be last:
IndexingValidation::new,
IndexingValues::new);
}
+ /** Processors of rank profiles only (those who tolerate and so something useful when the search field is null) */
+ private Collection<ProcessorFactory> rankProfileProcessors() {
+ return Arrays.asList(
+ RankProfileTypeSettingsProcessor::new,
+ ReservedFunctionNames::new,
+ RankingExpressionTypeResolver::new);
+ }
+
/**
* Runs all search processors on the given {@link Search} object. These will modify the search object, <b>possibly
* exchanging it with another</b>, as well as its document types.
@@ -93,12 +100,26 @@ public class Processing {
public void process(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry,
QueryProfiles queryProfiles, boolean validate, boolean documentsOnly) {
Collection<ProcessorFactory> factories = processors();
- search.process();
factories.stream()
.map(factory -> factory.create(search, deployLogger, rankProfileRegistry, queryProfiles))
.forEach(processor -> processor.process(validate, documentsOnly));
}
+ /**
+ * Runs rank profiles processors only.
+ *
+ * @param deployLogger The log to log messages and warnings for application deployment to
+ * @param rankProfileRegistry a {@link com.yahoo.searchdefinition.RankProfileRegistry}
+ * @param queryProfiles The query profiles contained in the application this search is part of.
+ */
+ public void processRankProfiles(DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles, boolean validate, boolean documentsOnly) {
+ Collection<ProcessorFactory> factories = rankProfileProcessors();
+ factories.stream()
+ .map(factory -> factory.create(null, deployLogger, rankProfileRegistry, queryProfiles))
+ .forEach(processor -> processor.process(validate, documentsOnly));
+ }
+
@FunctionalInterface
public interface ProcessorFactory {
Processor create(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
index 102d1910360..4c8b5910b78 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
@@ -7,39 +7,44 @@ import com.yahoo.searchdefinition.RankProfile;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
+import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
import com.yahoo.tensor.TensorType;
import com.yahoo.tensor.evaluation.TypeContext;
import com.yahoo.vespa.model.container.search.QueryProfiles;
+import java.util.Map;
+
/**
- * Validates the types of all ranking expressions under a search instance:
+ * Resolves and assigns types to all functions in a ranking expression, and
+ * validates the types of all ranking expressions under a search instance:
* Some operators constrain the types of inputs, and first-and second-phase expressions
- * must return scalar values. In addition, the existence of all referred attribute, query and constant
+ * must return scalar values.
+ *
+ * In addition, the existence of all referred attribute, query and constant
* features is ensured.
*
* @author bratseth
*/
-public class RankingExpressionTypeValidator extends Processor {
+public class RankingExpressionTypeResolver extends Processor {
private final QueryProfileRegistry queryProfiles;
- public RankingExpressionTypeValidator(Search search,
- DeployLogger deployLogger,
- RankProfileRegistry rankProfileRegistry,
- QueryProfiles queryProfiles) {
+ public RankingExpressionTypeResolver(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
this.queryProfiles = queryProfiles.getRegistry();
}
@Override
public void process(boolean validate, boolean documentsOnly) {
- if ( ! validate) return;
if (documentsOnly) return;
for (RankProfile profile : rankProfileRegistry.rankProfilesOf(search)) {
try {
- validate(profile);
+ resolveTypesIn(profile, validate);
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("In " + search + ", " + profile, e);
@@ -47,20 +52,34 @@ public class RankingExpressionTypeValidator extends Processor {
}
}
- /** Throws an IllegalArgumentException if the given rank profile does not produce valid type */
- private void validate(RankProfile profile) {
- TypeContext context = profile.typeContext(queryProfiles);
- profile.getSummaryFeatures().forEach(f -> ensureValid(f, "summary feature " + f, context));
- ensureValidDouble(profile.getFirstPhaseRanking(), "first-phase expression", context);
- ensureValidDouble(profile.getSecondPhaseRanking(), "second-phase expression", context);
+ /**
+ * Resolves the types of all functions in the given profile
+ *
+ * @throws IllegalArgumentException if validate is true and the given rank profile does not produce valid types
+ */
+ private void resolveTypesIn(RankProfile profile, boolean validate) {
+ TypeContext<Reference> context = profile.typeContext(queryProfiles);
+ for (Map.Entry<String, RankProfile.RankingExpressionFunction> function : profile.getFunctions().entrySet()) {
+ if ( ! function.getValue().function().arguments().isEmpty()) continue;
+ TensorType type = resolveType(function.getValue().function().getBody(),
+ "function '" + function.getKey() + "'",
+ context);
+ function.getValue().setReturnType(type);
+ }
+
+ if (validate) {
+ profile.getSummaryFeatures().forEach(f -> resolveType(f, "summary feature " + f, context));
+ ensureValidDouble(profile.getFirstPhaseRanking(), "first-phase expression", context);
+ ensureValidDouble(profile.getSecondPhaseRanking(), "second-phase expression", context);
+ }
}
- private TensorType ensureValid(RankingExpression expression, String expressionDescription, TypeContext context) {
+ private TensorType resolveType(RankingExpression expression, String expressionDescription, TypeContext context) {
if (expression == null) return null;
- return ensureValid(expression.getRoot(), expressionDescription, context);
+ return resolveType(expression.getRoot(), expressionDescription, context);
}
- private TensorType ensureValid(ExpressionNode expression, String expressionDescription, TypeContext context) {
+ private TensorType resolveType(ExpressionNode expression, String expressionDescription, TypeContext context) {
TensorType type;
try {
type = expression.type(context);
@@ -75,7 +94,7 @@ public class RankingExpressionTypeValidator extends Processor {
private void ensureValidDouble(RankingExpression expression, String expressionDescription, TypeContext context) {
if (expression == null) return;
- TensorType type = ensureValid(expression, expressionDescription, context);
+ TensorType type = resolveType(expression, expressionDescription, context);
if ( ! type.equals(TensorType.empty))
throw new IllegalArgumentException("The " + expressionDescription + " must produce a double " +
"(a tensor with no dimensions), but produces " + type);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
index 21b7f1d2675..1cf3d61d8f1 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
@@ -29,16 +29,24 @@ public class ValidateFieldTypes extends Processor {
@Override
public void process(boolean validate, boolean documentsOnly) {
- if ( ! validate) return;
+ if (!validate) return;
String searchName = search.getName();
Map<String, DataType> seenFields = new HashMap<>();
+ verifySearchAndDocFields(searchName, seenFields);
+ verifySummaryFields(searchName, seenFields);
+ }
+
+ final protected void verifySearchAndDocFields(String searchName, Map<String, DataType> seenFields) {
search.allFields().forEach(field -> {
checkFieldType(searchName, "index field", field.getName(), field.getDataType(), seenFields);
for (Map.Entry<String, Attribute> entry : field.getAttributes().entrySet()) {
checkFieldType(searchName, "attribute", entry.getKey(), entry.getValue().getDataType(), seenFields);
}
});
+
+ }
+ final protected void verifySummaryFields(String searchName, Map<String, DataType> seenFields) {
for (DocumentSummary summary : search.getSummaries().values()) {
for (SummaryField field : summary.getSummaryFields()) {
checkFieldType(searchName, "summary field", field.getName(), field.getDataType(), seenFields);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesDocumentsOnly.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesDocumentsOnly.java
new file mode 100644
index 00000000000..ff3e638fff1
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesDocumentsOnly.java
@@ -0,0 +1,25 @@
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.DataType;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ValidateFieldTypesDocumentsOnly extends ValidateFieldTypes {
+ public ValidateFieldTypesDocumentsOnly(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ super(search, deployLogger, rankProfileRegistry, queryProfiles);
+ }
+
+ @Override
+ public void process(boolean validate, boolean documentsOnly) {
+ if ( ! validate) return;
+
+ String searchName = search.getName();
+ Map<String, DataType> seenFields = new HashMap<>();
+ verifySearchAndDocFields(searchName, seenFields);
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
index ec4cbdfe58b..3bde76c1c79 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
@@ -44,6 +44,7 @@ public class RankProfileTypeSettingsProcessor extends Processor {
}
private void processAttributeFields() {
+ if (search == null) return; // we're processing global profiles
for (SDField field : search.allConcreteFields()) {
Attribute attribute = field.getAttributes().get(field.getName());
if (attribute != null && attribute.tensorType().isPresent()) {
@@ -53,6 +54,7 @@ public class RankProfileTypeSettingsProcessor extends Processor {
}
private void processImportedFields() {
+ if (search == null) return; // we're processing global profiles
Optional<ImportedFields> importedFields = search.importedFields();
if (importedFields.isPresent()) {
importedFields.get().fields().forEach((fieldName, field) -> processImportedField(field));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/Service.java b/config-model/src/main/java/com/yahoo/vespa/model/Service.java
index 620e44bc11a..29ec26b06d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/Service.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/Service.java
@@ -7,7 +7,7 @@ import java.util.HashMap;
import java.util.Optional;
/**
- * Representation of a process which runs a service
+ * Representation of a markProcessed which runs a service
*
* @author gjoranv
*/
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
index 4b70b1b5ae2..d80799d4390 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
@@ -32,7 +32,9 @@ import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.RankingConstants;
import com.yahoo.searchdefinition.derived.AttributeFields;
import com.yahoo.searchdefinition.derived.RankProfileList;
+import com.yahoo.searchdefinition.processing.Processing;
import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
import com.yahoo.vespa.model.ml.ConvertedModel;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.integration.ml.ImportedModel;
@@ -168,7 +170,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
createGlobalRankProfiles(deployState.getImportedModels(),
deployState.rankProfileRegistry(),
- deployState.getQueryProfiles().getRegistry());
+ deployState.getQueryProfiles());
this.rankProfileList = new RankProfileList(null, // null search -> global
rankingConstants,
AttributeFields.empty,
@@ -219,41 +221,39 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
/** Adds generic application specific clusters of services */
private void addServiceClusters(ApplicationPackage app, VespaModelBuilder builder) {
- for (ServiceCluster sc : builder.getClusters(app, this))
- serviceClusters.add(sc);
+ serviceClusters.addAll(builder.getClusters(app, this));
}
/**
- * Creates a rank profile not attached to any search definition, for each imported model in the application package
+ * Creates a rank profile not attached to any search definition, for each imported model in the application package,
+ * and adds it to the given rank profile registry.
*/
- private ImmutableList<RankProfile> createGlobalRankProfiles(ImportedModels importedModels,
- RankProfileRegistry rankProfileRegistry,
- QueryProfileRegistry queryProfiles) {
- List<RankProfile> profiles = new ArrayList<>();
+ private void createGlobalRankProfiles(ImportedModels importedModels,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
if ( ! importedModels.all().isEmpty()) { // models/ directory is available
for (ImportedModel model : importedModels.all()) {
RankProfile profile = new RankProfile(model.name(), this, rankProfileRegistry);
rankProfileRegistry.add(profile);
ConvertedModel convertedModel = ConvertedModel.fromSource(new ModelName(model.name()),
- model.name(), profile, queryProfiles, model);
- for (Map.Entry<String, RankingExpression> entry : convertedModel.expressions().entrySet()) {
- profile.addFunction(new ExpressionFunction(entry.getKey(), entry.getValue()), false);
- }
+ model.name(), profile, queryProfiles.getRegistry(), model);
+ convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false));
}
}
else { // generated and stored model information may be available instead
ApplicationFile generatedModelsDir = applicationPackage.getFile(ApplicationPackage.MODELS_GENERATED_REPLICATED_DIR);
for (ApplicationFile generatedModelDir : generatedModelsDir.listFiles()) {
String modelName = generatedModelDir.getPath().last();
+ if (modelName.contains(".")) continue; // Name space: Not a global profile
RankProfile profile = new RankProfile(modelName, this, rankProfileRegistry);
rankProfileRegistry.add(profile);
ConvertedModel convertedModel = ConvertedModel.fromStore(new ModelName(modelName), modelName, profile);
- for (Map.Entry<String, RankingExpression> entry : convertedModel.expressions().entrySet()) {
- profile.addFunction(new ExpressionFunction(entry.getKey(), entry.getValue()), false);
- }
+ convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false));
}
}
- return ImmutableList.copyOf(profiles);
+ new Processing().processRankProfiles(deployState.getDeployLogger(),
+ rankProfileRegistry,
+ queryProfiles, true, false);
}
/** Returns the global rank profiles as a rank profile list */
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
index 75f70d03fcc..2af9b297e9e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
@@ -156,6 +156,7 @@ public class VespaModelFactory implements ModelFactory {
.vespaVersion(getVersion())
.isBootstrap(properties.isBootstrap())
.isFirstTimeDeployment(properties.isFirstTimeDeployment())
+ .useDedicatedNodeForLogserver(properties.useDedicatedNodeForLogserver())
.build();
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
index 73d77406700..8e7c20d4234 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
@@ -349,6 +349,7 @@ public class VespaMetricSet {
metrics.add(new Metric("vds.filestor.alldisks.allthreads.remove.sum.count.rate"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.get.sum.count.rate"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.update.sum.count.rate"));
+ metrics.add(new Metric("vds.filestor.alldisks.allthreads.createiterator.sum.count.rate"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.visit.sum.count.rate"));
metrics.add(new Metric("vds.filestor.alldisks.queuesize.average","diskqueuesize"));
metrics.add(new Metric("vds.filestor.alldisks.averagequeuewait.sum.average","diskqueuewait"));
@@ -356,11 +357,14 @@ public class VespaMetricSet {
metrics.add(new Metric("vds.visitor.allthreads.queuesize.count.average"));
metrics.add(new Metric("vds.visitor.allthreads.completed.sum.average"));
metrics.add(new Metric("vds.visitor.allthreads.created.sum.rate","visit"));
+ metrics.add(new Metric("vds.visitor.allthreads.averagemessagesendtime.sum.average"));
+ metrics.add(new Metric("vds.visitor.allthreads.averageprocessingtime.sum.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.put.sum.latency.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.remove.sum.latency.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.get.sum.latency.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.update.sum.latency.average"));
+ metrics.add(new Metric("vds.filestor.alldisks.allthreads.createiterator.sum.latency.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.visit.sum.latency.average"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.splitbuckets.count.rate"));
metrics.add(new Metric("vds.filestor.alldisks.allthreads.joinbuckets.count.rate"));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
index ea943f069cb..65008b503b4 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
@@ -3,8 +3,10 @@ package com.yahoo.vespa.model.builder.xml.dom;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.api.ConfigServerSpec;
+import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.SystemName;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.model.HostResource;
@@ -93,9 +95,14 @@ public class DomAdminV4Builder extends DomAdminBuilderBase {
private NodesSpecification createNodesSpecificationForLogserver() {
// TODO: Enable for main system as well
- //if (context.getDeployState().isHosted() && context.getDeployState().zone().system() == SystemName.cd)
- // return NodesSpecification.dedicated(1, context);
- //else
+ DeployState deployState = context.getDeployState();
+ if (deployState.getProperties().useDedicatedNodeForLogserver() &&
+ context.getApplicationType() == ConfigModelContext.ApplicationType.DEFAULT &&
+ deployState.isHosted() &&
+ deployState.zone().system() == SystemName.cd &&
+ deployState.zone().environment() == Environment.dev)
+ return NodesSpecification.dedicated(1, context);
+ else
return NodesSpecification.nonDedicated(1, context);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java
index 11736256d1b..812c38db2fd 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.model.container;
import ai.vespa.models.evaluation.ModelsEvaluator;
-import ai.vespa.models.handler.ModelsEvaluationHandler;
import com.yahoo.osgi.provider.model.ComponentModel;
import com.yahoo.searchdefinition.derived.RankProfileList;
import com.yahoo.vespa.config.search.RankProfilesConfig;
@@ -19,9 +18,10 @@ import java.util.Objects;
*/
public class ContainerModelEvaluation implements RankProfilesConfig.Producer, RankingConstantsConfig.Producer {
- private final static String EVALUATOR_NAME = ModelsEvaluator.class.getName();
- private final static String REST_HANDLER_NAME = ModelsEvaluationHandler.class.getName();
private final static String BUNDLE_NAME = "model-evaluation";
+ private final static String EVALUATOR_NAME = ModelsEvaluator.class.getName();
+ private final static String REST_HANDLER_NAME = "ai.vespa.models.handler.ModelsEvaluationHandler";
+ private final static String REST_BINDING = "model-evaluation/v1";
/** Global rank profiles, aka models */
private final RankProfileList rankProfileList;
@@ -48,11 +48,10 @@ public class ContainerModelEvaluation implements RankProfilesConfig.Producer, Ra
public static Handler<?> getHandler() {
Handler<?> handler = new Handler<>(new ComponentModel(REST_HANDLER_NAME, null, BUNDLE_NAME));
- String binding = ModelsEvaluationHandler.API_ROOT + "/" + ModelsEvaluationHandler.VERSION_V1;
- handler.addServerBindings("http://*/" + binding,
- "https://*/" + binding,
- "http://*/" + binding + "/*",
- "https://*/" + binding + "/*");
+ handler.addServerBindings("http://*/" + REST_BINDING,
+ "https://*/" + REST_BINDING,
+ "http://*/" + REST_BINDING + "/*",
+ "https://*/" + REST_BINDING + "/*");
return handler;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
index adf5c81283e..30586b1e677 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
@@ -48,6 +48,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -67,14 +68,14 @@ public class ConvertedModel {
private final ModelName modelName;
private final String modelDescription;
- private final ImmutableMap<String, RankingExpression> expressions;
+ private final ImmutableMap<String, ExpressionFunction> expressions;
/** The source importedModel, or empty if this was created from a stored converted model */
private final Optional<ImportedModel> sourceModel;
private ConvertedModel(ModelName modelName,
String modelDescription,
- Map<String, RankingExpression> expressions,
+ Map<String, ExpressionFunction> expressions,
Optional<ImportedModel> sourceModel) {
this.modelName = modelName;
this.modelDescription = modelDescription;
@@ -90,18 +91,26 @@ public class ConvertedModel {
* @param pathIsFile true if that path (this kind of model) is stored in a file, false if it is in a directory
*/
public static ConvertedModel fromSourceOrStore(Path modelPath, boolean pathIsFile, RankProfileTransformContext context) {
- File sourceModel = sourceModelFile(context.rankProfile().applicationPackage(), modelPath);
+ ImportedModel sourceModel = // TODO: Convert to name here, make sure its done just one way
+ context.importedModels().get(sourceModelFile(context.rankProfile().applicationPackage(), modelPath));
ModelName modelName = new ModelName(context.rankProfile().getName(), modelPath, pathIsFile);
- if (sourceModel.exists())
+
+ if (sourceModel == null && ! new ModelStore(context.rankProfile().applicationPackage(), modelName).exists())
+ throw new IllegalArgumentException("No model '" + modelPath + "' is available. Available models: " +
+ context.importedModels().all().stream().map(ImportedModel::source).collect(Collectors.joining(", ")));
+
+ if (sourceModel != null) {
return fromSource(modelName,
modelPath.toString(),
context.rankProfile(),
context.queryProfiles(),
- context.importedModels().get(sourceModel)); // TODO: Convert to name here, make sure its done just one way
- else
+ sourceModel);
+ }
+ else {
return fromStore(modelName,
modelPath.toString(),
context.rankProfile());
+ }
}
public static ConvertedModel fromSource(ModelName modelName,
@@ -132,23 +141,23 @@ public class ConvertedModel {
* if signatures are used, or the expression name if signatures are not used and there are multiple
* expressions, and the second is the output name if signature names are used.
*/
- public Map<String, RankingExpression> expressions() { return expressions; }
+ public Map<String, ExpressionFunction> expressions() { return expressions; }
/**
* Returns the expression matching the given arguments.
*/
public ExpressionNode expression(FeatureArguments arguments, RankProfileTransformContext context) {
- RankingExpression expression = selectExpression(arguments);
- if (sourceModel.isPresent()) // we can verify
- verifyRequiredFunctions(expression, sourceModel.get(), context.rankProfile(), context.queryProfiles());
- return expression.getRoot();
+ ExpressionFunction expression = selectExpression(arguments);
+ if (sourceModel.isPresent()) // we should verify
+ verifyInputs(expression.getBody(), sourceModel.get(), context.rankProfile(), context.queryProfiles());
+ return expression.getBody().getRoot();
}
- private RankingExpression selectExpression(FeatureArguments arguments) {
+ private ExpressionFunction selectExpression(FeatureArguments arguments) {
if (expressions.isEmpty())
throw new IllegalArgumentException("No expressions available in " + this);
- RankingExpression expression = expressions.get(arguments.toName());
+ ExpressionFunction expression = expressions.get(arguments.toName());
if (expression != null) return expression;
if ( ! arguments.signature().isPresent()) {
@@ -158,7 +167,7 @@ public class ConvertedModel {
}
if ( ! arguments.output().isPresent()) {
- List<Map.Entry<String, RankingExpression>> entriesWithTheRightPrefix =
+ List<Map.Entry<String, ExpressionFunction>> entriesWithTheRightPrefix =
expressions.entrySet().stream().filter(entry -> entry.getKey().startsWith(arguments.signature().get() + ".")).collect(Collectors.toList());
if (entriesWithTheRightPrefix.size() < 1)
throw new IllegalArgumentException("No expressions named '" + arguments.signature().get() +
@@ -179,10 +188,10 @@ public class ConvertedModel {
// ----------------------- Static model conversion/storage below here
- private static Map<String, RankingExpression> convertAndStore(ImportedModel model,
- RankProfile profile,
- QueryProfileRegistry queryProfiles,
- ModelStore store) {
+ private static Map<String, ExpressionFunction> convertAndStore(ImportedModel model,
+ RankProfile profile,
+ QueryProfileRegistry queryProfiles,
+ ModelStore store) {
// Add constants
Set<String> constantsReplacedByFunctions = new HashSet<>();
model.smallConstants().forEach((k, v) -> transformSmallConstant(store, profile, k, v));
@@ -193,8 +202,8 @@ public class ConvertedModel {
addGeneratedFunctions(model, profile);
// Add expressions
- Map<String, RankingExpression> expressions = new HashMap<>();
- for (Pair<String, RankingExpression> output : model.outputExpressions()) {
+ Map<String, ExpressionFunction> expressions = new HashMap<>();
+ for (Pair<String, ExpressionFunction> output : model.outputExpressions()) {
addExpression(output.getSecond(), output.getFirst(),
constantsReplacedByFunctions,
model, store, profile, queryProfiles,
@@ -210,21 +219,21 @@ public class ConvertedModel {
return expressions;
}
- private static void addExpression(RankingExpression expression,
+ private static void addExpression(ExpressionFunction expression,
String expressionName,
Set<String> constantsReplacedByFunctions,
ImportedModel model,
ModelStore store,
RankProfile profile,
QueryProfileRegistry queryProfiles,
- Map<String, RankingExpression> expressions) {
- expression = replaceConstantsByFunctions(expression, constantsReplacedByFunctions);
- reduceBatchDimensions(expression, model, profile, queryProfiles);
+ Map<String, ExpressionFunction> expressions) {
+ expression = expression.withBody(replaceConstantsByFunctions(expression.getBody(), constantsReplacedByFunctions));
+ reduceBatchDimensions(expression.getBody(), model, profile, queryProfiles);
store.writeExpression(expressionName, expression);
expressions.put(expressionName, expression);
}
- private static Map<String, RankingExpression> convertStored(ModelStore store, RankProfile profile) {
+ private static Map<String, ExpressionFunction> convertStored(ModelStore store, RankProfile profile) {
for (Pair<String, Tensor> constant : store.readSmallConstants())
profile.addConstant(constant.getFirst(), asValue(constant.getSecond()));
@@ -290,15 +299,15 @@ public class ConvertedModel {
}
/**
- * Verify that the functions referred in the given expression exists in the given rank profile,
- * and return tensors of the types specified in requiredFunctions.
+ * Verify that the inputs declared in the given expression exists in the given rank profile as functions,
+ * and return tensors of the correct types.
*/
- private static void verifyRequiredFunctions(RankingExpression expression, ImportedModel model,
- RankProfile profile, QueryProfileRegistry queryProfiles) {
+ private static void verifyInputs(RankingExpression expression, ImportedModel model,
+ RankProfile profile, QueryProfileRegistry queryProfiles) {
Set<String> functionNames = new HashSet<>();
addFunctionNamesIn(expression.getRoot(), functionNames, model);
for (String functionName : functionNames) {
- TensorType requiredType = model.requiredFunctions().get(functionName);
+ TensorType requiredType = model.inputs().get(functionName);
if (requiredType == null) continue; // Not a required function
RankProfile.RankingExpressionFunction rankingExpressionFunction = profile.getFunctions().get(functionName);
@@ -375,7 +384,7 @@ public class ConvertedModel {
List<ExpressionNode> children = ((TensorFunctionNode)node).children();
if (children.size() == 1 && children.get(0) instanceof ReferenceNode) {
ReferenceNode referenceNode = (ReferenceNode) children.get(0);
- if (model.requiredFunctions().containsKey(referenceNode.getName())) {
+ if (model.inputs().containsKey(referenceNode.getName())) {
return reduceBatchDimensionExpression(tensorFunction, typeContext);
}
}
@@ -383,7 +392,7 @@ public class ConvertedModel {
}
if (node instanceof ReferenceNode) {
ReferenceNode referenceNode = (ReferenceNode) node;
- if (model.requiredFunctions().containsKey(referenceNode.getName())) {
+ if (model.inputs().containsKey(referenceNode.getName())) {
return reduceBatchDimensionExpression(TensorFunctionNode.wrapArgument(node), typeContext);
}
}
@@ -451,7 +460,8 @@ public class ConvertedModel {
Set<String> constantsReplacedByFunctions) {
if (constantsReplacedByFunctions.isEmpty()) return expression;
return new RankingExpression(expression.getName(),
- replaceConstantsByFunctions(expression.getRoot(), constantsReplacedByFunctions));
+ replaceConstantsByFunctions(expression.getRoot(),
+ constantsReplacedByFunctions));
}
private static ExpressionNode replaceConstantsByFunctions(ExpressionNode node, Set<String> constantsReplacedByFunctions) {
@@ -518,25 +528,32 @@ public class ConvertedModel {
this.modelFiles = new ModelFiles(modelName);
}
+ /** Returns whether a model store for this application and model name exists */
+ public boolean exists() {
+ return application.getFile(modelFiles.storedModelReplicatedPath()).exists();
+ }
+
/**
* Adds this expression to the application package, such that it can be read later.
*
* @param name the name of this ranking expression - may have 1-3 parts separated by dot where the first part
* is always the model name
*/
- void writeExpression(String name, RankingExpression expression) {
- application.getFile(modelFiles.expressionPath(name))
- .writeFile(new StringReader(expression.getRoot().toString()));
+ void writeExpression(String name, ExpressionFunction expression) {
+ StringBuilder b = new StringBuilder(expression.getBody().getRoot().toString());
+ for (Map.Entry<String, TensorType> input : expression.argumentTypes().entrySet())
+ b.append('\n').append(input.getKey()).append('\t').append(input.getValue());
+ application.getFile(modelFiles.expressionPath(name)).writeFile(new StringReader(b.toString()));
}
- Map<String, RankingExpression> readExpressions() {
- Map<String, RankingExpression> expressions = new HashMap<>();
+ Map<String, ExpressionFunction> readExpressions() {
+ Map<String, ExpressionFunction> expressions = new HashMap<>();
ApplicationFile expressionPath = application.getFile(modelFiles.expressionsPath());
if ( ! expressionPath.exists() || ! expressionPath.isDirectory()) return Collections.emptyMap();
for (ApplicationFile expressionFile : expressionPath.listFiles()) {
- try (Reader reader = new BufferedReader(expressionFile.createReader())){
+ try (BufferedReader reader = new BufferedReader(expressionFile.createReader())){
String name = expressionFile.getPath().getName();
- expressions.put(name, new RankingExpression(name, reader));
+ expressions.put(name, readExpression(name, reader));
}
catch (IOException e) {
throw new UncheckedIOException("Failed reading " + expressionFile.getPath(), e);
@@ -548,8 +565,22 @@ public class ConvertedModel {
return expressions;
}
+ private ExpressionFunction readExpression(String name, BufferedReader reader)
+ throws IOException, ParseException {
+ // First line is expression
+ RankingExpression expression = new RankingExpression(name, reader.readLine());
+ // Next lines are inputs on the format name\ttensorTypeSpec
+ Map<String, TensorType> inputs = new LinkedHashMap<>();
+ String line;
+ while (null != (line = reader.readLine())) {
+ String[] parts = line.split("\t");
+ inputs.put(parts[0], TensorType.fromSpec(parts[1]));
+ }
+ return new ExpressionFunction(name, new ArrayList<>(inputs.keySet()), expression, inputs, Optional.empty());
+ }
+
/** Adds this function expression to the application package so it can be read later. */
- void writeFunction(String name, RankingExpression expression) {
+ public void writeFunction(String name, RankingExpression expression) {
application.getFile(modelFiles.functionsPath()).appendFile(name + "\t" +
expression.getRoot().toString() + "\n");
}
@@ -561,20 +592,20 @@ public class ConvertedModel {
if ( ! file.exists()) return Collections.emptyList();
List<Pair<String, RankingExpression>> functions = new ArrayList<>();
- BufferedReader reader = new BufferedReader(file.createReader());
- String line;
- while (null != (line = reader.readLine())) {
- String[] parts = line.split("\t");
- String name = parts[0];
- try {
- RankingExpression expression = new RankingExpression(parts[0], parts[1]);
- functions.add(new Pair<>(name, expression));
- }
- catch (ParseException e) {
- throw new IllegalStateException("Could not parse " + name, e);
+ try (BufferedReader reader = new BufferedReader(file.createReader())) {
+ String line;
+ while (null != (line = reader.readLine())) {
+ String[] parts = line.split("\t");
+ String name = parts[0];
+ try {
+ RankingExpression expression = new RankingExpression(parts[0], parts[1]);
+ functions.add(new Pair<>(name, expression));
+ } catch (ParseException e) {
+ throw new IllegalStateException("Could not parse " + name, e);
+ }
}
+ return functions;
}
- return functions;
}
catch (IOException e) {
throw new UncheckedIOException(e);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ml/FeatureArguments.java b/config-model/src/main/java/com/yahoo/vespa/model/ml/FeatureArguments.java
index fda49af6178..4a02dc97d19 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ml/FeatureArguments.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ml/FeatureArguments.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.ml;
+import com.yahoo.path.Path;
import com.yahoo.searchlib.rankingexpression.rule.Arguments;
import com.yahoo.searchlib.rankingexpression.rule.ConstantNode;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
@@ -14,19 +15,24 @@ import java.util.Optional;
*/
public class FeatureArguments {
+ private final Path path;
+
/** Optional arguments */
private final Optional<String> signature, output;
public FeatureArguments(Arguments arguments) {
- this(optionalArgument(1, arguments),
+ this(Path.fromString(argument(0, arguments)),
+ optionalArgument(1, arguments),
optionalArgument(2, arguments));
}
- public FeatureArguments(Optional<String> signature, Optional<String> output) {
+ private FeatureArguments(Path path, Optional<String> signature, Optional<String> output) {
+ this.path = path;
this.signature = signature;
this.output = output;
}
+ public Path path() { return path; }
public Optional<String> signature() { return signature; }
public Optional<String> output() { return output; }
@@ -35,13 +41,20 @@ public class FeatureArguments {
(output.isPresent() ? "." + output.get() : "");
}
+ private static String argument(int argumentIndex, Arguments arguments) {
+ if (argumentIndex >= arguments.expressions().size())
+ throw new IllegalArgumentException("Requires at least " + argumentIndex +
+ " arguments, but got just " + arguments.size());
+ return asString(arguments.expressions().get(argumentIndex));
+ }
+
private static Optional<String> optionalArgument(int argumentIndex, Arguments arguments) {
if (argumentIndex >= arguments.expressions().size())
return Optional.empty();
return Optional.of(asString(arguments.expressions().get(argumentIndex)));
}
- public static String asString(ExpressionNode node) {
+ private static String asString(ExpressionNode node) {
if ( ! (node instanceof ConstantNode))
throw new IllegalArgumentException("Expected a constant string as argument, but got '" + node);
return stripQuotes(((ConstantNode)node).sourceString());
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
index c7762f09851..c46a662b682 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
@@ -9,7 +9,7 @@ import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.prelude.fastsearch.DocumentdbInfoConfig;
import com.yahoo.search.config.IndexInfoConfig;
-import com.yahoo.searchdefinition.UnproperSearch;
+import com.yahoo.searchdefinition.DocumentOnlySearch;
import com.yahoo.searchdefinition.derived.DerivedConfiguration;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.model.HostResource;
@@ -286,7 +286,7 @@ public class IndexedSearchCluster extends SearchCluster
List<com.yahoo.searchdefinition.Search> globalSearches) {
for (SearchDefinitionSpec spec : localSearches) {
com.yahoo.searchdefinition.Search search = spec.getSearchDefinition().getSearch();
- if ( ! (search instanceof UnproperSearch)) {
+ if ( ! (search instanceof DocumentOnlySearch)) {
DocumentDatabase db = new DocumentDatabase(this,
search.getName(),
new DerivedConfiguration(search,
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/Tuning.java b/config-model/src/main/java/com/yahoo/vespa/model/search/Tuning.java
index f29c7ade816..5581b9b87ba 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/Tuning.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/Tuning.java
@@ -153,9 +153,6 @@ public class Tuning extends AbstractConfigProducer implements PartitionsConfig.P
if (read != null) {
builder.indexing.read.io(ProtonConfig.Indexing.Read.Io.Enum.valueOf(read.name));
}
- if (search != null) {
- builder.search.io(ProtonConfig.Search.Io.Enum.valueOf(search.name));
- }
}
}
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 813d1d47533..c702651b005 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -40,7 +40,7 @@ import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.RankProfile.MatchPhaseSettings;
import com.yahoo.searchdefinition.RankProfile.DiversitySettings;
import com.yahoo.searchdefinition.Search;
-import com.yahoo.searchdefinition.UnproperSearch;
+import com.yahoo.searchdefinition.DocumentOnlySearch;
import com.yahoo.searchdefinition.UnrankedRankProfile;
import com.yahoo.searchdefinition.fieldoperation.*;
import com.yahoo.searchlib.rankingexpression.FeatureList;
@@ -457,7 +457,7 @@ Object rootSearchItem(Search search) : { }
*/
Search rootDocument(String dir) :
{
- Search search = new UnproperSearch();
+ Search search = new DocumentOnlySearch();
}
{
( (rootDocumentItem(search) (<NL>)*)*<EOF> )
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist/saved/saved_model.pbtxt b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/saved_model.pbtxt
new file mode 100644
index 00000000000..eb926836576
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/saved_model.pbtxt
@@ -0,0 +1,7982 @@
+saved_model_schema_version: 1
+meta_graphs {
+ meta_info_def {
+ stripped_op_list {
+ op {
+ name: "Add"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_STRING
+ }
+ }
+ }
+ }
+ op {
+ name: "AddN"
+ input_arg {
+ name: "inputs"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ output_arg {
+ name: "sum"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ type: DT_VARIANT
+ }
+ }
+ }
+ is_aggregate: true
+ is_commutative: true
+ }
+ op {
+ name: "ApplyGradientDescent"
+ input_arg {
+ name: "var"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "alpha"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "delta"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "out"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ }
+ op {
+ name: "Assign"
+ input_arg {
+ name: "ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output_ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "validate_shape"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ allows_uninitialized_input: true
+ }
+ op {
+ name: "BroadcastGradientArgs"
+ input_arg {
+ name: "s0"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "s1"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r0"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r1"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Cast"
+ input_arg {
+ name: "x"
+ type_attr: "SrcT"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "DstT"
+ }
+ attr {
+ name: "SrcT"
+ type: "type"
+ }
+ attr {
+ name: "DstT"
+ type: "type"
+ }
+ }
+ op {
+ name: "Const"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "value"
+ type: "tensor"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ }
+ op {
+ name: "ExpandDims"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "dim"
+ type_attr: "Tdim"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tdim"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Fill"
+ input_arg {
+ name: "dims"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "FloorDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "GreaterEqual"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Identity"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "InTopKV2"
+ input_arg {
+ name: "predictions"
+ type: DT_FLOAT
+ }
+ input_arg {
+ name: "targets"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "k"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "precision"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "MatMul"
+ input_arg {
+ name: "a"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "b"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "product"
+ type_attr: "T"
+ }
+ attr {
+ name: "transpose_a"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "transpose_b"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Maximum"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Mean"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "MergeV2Checkpoints"
+ input_arg {
+ name: "checkpoint_prefixes"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "destination_prefix"
+ type: DT_STRING
+ }
+ attr {
+ name: "delete_old_dirs"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "Mul"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "NoOp"
+ }
+ op {
+ name: "Pack"
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "axis"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ }
+ op {
+ name: "Placeholder"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ default_value {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ op {
+ name: "PreventGradient"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "message"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ }
+ op {
+ name: "Prod"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RealDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Reshape"
+ input_arg {
+ name: "tensor"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "shape"
+ type_attr: "Tshape"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tshape"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RestoreV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ output_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "SaveV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "ScalarSummary"
+ input_arg {
+ name: "tags"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "summary"
+ type: DT_STRING
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Select"
+ input_arg {
+ name: "condition"
+ type: DT_BOOL
+ }
+ input_arg {
+ name: "t"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "e"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "Selu"
+ input_arg {
+ name: "features"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "activations"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ }
+ op {
+ name: "SeluGrad"
+ input_arg {
+ name: "gradients"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "outputs"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "backprops"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ }
+ op {
+ name: "Shape"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "out_type"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "out_type"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "ShardedFilename"
+ input_arg {
+ name: "basename"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shard"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "num_shards"
+ type: DT_INT32
+ }
+ output_arg {
+ name: "filename"
+ type: DT_STRING
+ }
+ }
+ op {
+ name: "SparseSoftmaxCrossEntropyWithLogits"
+ input_arg {
+ name: "features"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "labels"
+ type_attr: "Tlabels"
+ }
+ output_arg {
+ name: "loss"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "backprop"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ attr {
+ name: "Tlabels"
+ type: "type"
+ default_value {
+ type: DT_INT64
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "StringJoin"
+ input_arg {
+ name: "inputs"
+ type: DT_STRING
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type: DT_STRING
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "separator"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ }
+ op {
+ name: "Sum"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Tile"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "multiples"
+ type_attr: "Tmultiples"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tmultiples"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "TruncatedNormal"
+ input_arg {
+ name: "shape"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "seed"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "seed2"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "VariableV2"
+ output_arg {
+ name: "ref"
+ type_attr: "dtype"
+ is_ref: true
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "container"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ attr {
+ name: "shared_name"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "ZerosLike"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ }
+ tags: "serve"
+ tensorflow_version: "1.4.1"
+ tensorflow_git_version: "v1.4.0-19-ga52c8d9"
+ }
+ graph_def {
+ node {
+ name: "input"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "y"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\020\003\000\000,\001\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal/mean"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal/stddev"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0714285746216774
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal/TruncatedNormal"
+ op: "TruncatedNormal"
+ input: "dnn/hidden1/truncated_normal/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal/mul"
+ op: "Mul"
+ input: "dnn/hidden1/truncated_normal/TruncatedNormal"
+ input: "dnn/hidden1/truncated_normal/stddev"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/truncated_normal"
+ op: "Add"
+ input: "dnn/hidden1/truncated_normal/mul"
+ input: "dnn/hidden1/truncated_normal/mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/weights"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/weights/Assign"
+ op: "Assign"
+ input: "dnn/hidden1/weights"
+ input: "dnn/hidden1/truncated_normal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/weights/read"
+ op: "Identity"
+ input: "dnn/hidden1/weights"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/zeros"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 300
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/bias"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/bias/Assign"
+ op: "Assign"
+ input: "dnn/hidden1/bias"
+ input: "dnn/hidden1/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/bias/read"
+ op: "Identity"
+ input: "dnn/hidden1/bias"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/MatMul"
+ op: "MatMul"
+ input: "input"
+ input: "dnn/hidden1/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/add"
+ op: "Add"
+ input: "dnn/hidden1/MatMul"
+ input: "dnn/hidden1/bias/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/mul/x"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.009999999776482582
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/mul"
+ op: "Mul"
+ input: "dnn/hidden1/mul/x"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden1/Maximum"
+ op: "Maximum"
+ input: "dnn/hidden1/mul"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: ",\001\000\000d\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal/mean"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal/stddev"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.1154700517654419
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal/TruncatedNormal"
+ op: "TruncatedNormal"
+ input: "dnn/hidden2/truncated_normal/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal/mul"
+ op: "Mul"
+ input: "dnn/hidden2/truncated_normal/TruncatedNormal"
+ input: "dnn/hidden2/truncated_normal/stddev"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/truncated_normal"
+ op: "Add"
+ input: "dnn/hidden2/truncated_normal/mul"
+ input: "dnn/hidden2/truncated_normal/mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/weights"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/weights/Assign"
+ op: "Assign"
+ input: "dnn/hidden2/weights"
+ input: "dnn/hidden2/truncated_normal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/weights/read"
+ op: "Identity"
+ input: "dnn/hidden2/weights"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/zeros"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 100
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/bias"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/bias/Assign"
+ op: "Assign"
+ input: "dnn/hidden2/bias"
+ input: "dnn/hidden2/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/bias/read"
+ op: "Identity"
+ input: "dnn/hidden2/bias"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/MatMul"
+ op: "MatMul"
+ input: "dnn/hidden1/Maximum"
+ input: "dnn/hidden2/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/add"
+ op: "Add"
+ input: "dnn/hidden2/MatMul"
+ input: "dnn/hidden2/bias/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/hidden2/Selu"
+ op: "Selu"
+ input: "dnn/hidden2/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "d\000\000\000\n\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal/mean"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal/stddev"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.20000000298023224
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal/TruncatedNormal"
+ op: "TruncatedNormal"
+ input: "dnn/outputs/truncated_normal/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal/mul"
+ op: "Mul"
+ input: "dnn/outputs/truncated_normal/TruncatedNormal"
+ input: "dnn/outputs/truncated_normal/stddev"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/truncated_normal"
+ op: "Add"
+ input: "dnn/outputs/truncated_normal/mul"
+ input: "dnn/outputs/truncated_normal/mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/weights"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/weights/Assign"
+ op: "Assign"
+ input: "dnn/outputs/weights"
+ input: "dnn/outputs/truncated_normal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/weights/read"
+ op: "Identity"
+ input: "dnn/outputs/weights"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/zeros"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 10
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/bias"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/bias/Assign"
+ op: "Assign"
+ input: "dnn/outputs/bias"
+ input: "dnn/outputs/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/bias/read"
+ op: "Identity"
+ input: "dnn/outputs/bias"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/MatMul"
+ op: "MatMul"
+ input: "dnn/hidden2/Selu"
+ input: "dnn/outputs/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "dnn/outputs/add"
+ op: "Add"
+ input: "dnn/outputs/MatMul"
+ input: "dnn/outputs/bias/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "loss/SparseSoftmaxCrossEntropyWithLogits/Shape"
+ op: "Shape"
+ input: "y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits"
+ op: "SparseSoftmaxCrossEntropyWithLogits"
+ input: "dnn/outputs/add"
+ input: "y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tlabels"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "loss/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "loss/loss"
+ op: "Mean"
+ input: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits"
+ input: "loss/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/Shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 1.0
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/Fill"
+ op: "Fill"
+ input: "train/gradients/Shape"
+ input: "train/gradients/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Reshape/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/Fill"
+ input: "train/gradients/loss/loss_grad/Reshape/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Shape"
+ op: "Shape"
+ input: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Tile"
+ op: "Tile"
+ input: "train/gradients/loss/loss_grad/Reshape"
+ input: "train/gradients/loss/loss_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tmultiples"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Shape_1"
+ op: "Shape"
+ input: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Shape_2"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Prod"
+ op: "Prod"
+ input: "train/gradients/loss/loss_grad/Shape_1"
+ input: "train/gradients/loss/loss_grad/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Const_1"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Prod_1"
+ op: "Prod"
+ input: "train/gradients/loss/loss_grad/Shape_2"
+ input: "train/gradients/loss/loss_grad/Const_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Maximum/y"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Maximum"
+ op: "Maximum"
+ input: "train/gradients/loss/loss_grad/Prod_1"
+ input: "train/gradients/loss/loss_grad/Maximum/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/floordiv"
+ op: "FloorDiv"
+ input: "train/gradients/loss/loss_grad/Prod"
+ input: "train/gradients/loss/loss_grad/Maximum"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/loss/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/Cast"
+ op: "Cast"
+ input: "train/gradients/loss/loss_grad/floordiv"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/loss_grad/truediv"
+ op: "RealDiv"
+ input: "train/gradients/loss/loss_grad/Tile"
+ input: "train/gradients/loss/loss_grad/Cast"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/zeros_like"
+ op: "ZerosLike"
+ input: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/PreventGradient"
+ op: "PreventGradient"
+ input: "loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "message"
+ value {
+ s: "Currently there is no way to take the second derivative of sparse_softmax_cross_entropy_with_logits due to the fused implementation\'s interaction with tf.gradients()"
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: -1
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/ExpandDims"
+ op: "ExpandDims"
+ input: "train/gradients/loss/loss_grad/truediv"
+ input: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tdim"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/mul"
+ op: "Mul"
+ input: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/ExpandDims"
+ input: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/PreventGradient"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Shape"
+ op: "Shape"
+ input: "dnn/outputs/MatMul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 10
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "train/gradients/dnn/outputs/add_grad/Shape"
+ input: "train/gradients/dnn/outputs/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Sum"
+ op: "Sum"
+ input: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/mul"
+ input: "train/gradients/dnn/outputs/add_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/dnn/outputs/add_grad/Sum"
+ input: "train/gradients/dnn/outputs/add_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Sum_1"
+ op: "Sum"
+ input: "train/gradients/loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits_grad/mul"
+ input: "train/gradients/dnn/outputs/add_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/Reshape_1"
+ op: "Reshape"
+ input: "train/gradients/dnn/outputs/add_grad/Sum_1"
+ input: "train/gradients/dnn/outputs/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/outputs/add_grad/Reshape"
+ input: "^train/gradients/dnn/outputs/add_grad/Reshape_1"
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/outputs/add_grad/Reshape"
+ input: "^train/gradients/dnn/outputs/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/outputs/add_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/add_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/outputs/add_grad/Reshape_1"
+ input: "^train/gradients/dnn/outputs/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/outputs/add_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/MatMul_grad/MatMul"
+ op: "MatMul"
+ input: "train/gradients/dnn/outputs/add_grad/tuple/control_dependency"
+ input: "dnn/outputs/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/MatMul_grad/MatMul_1"
+ op: "MatMul"
+ input: "dnn/hidden2/Selu"
+ input: "train/gradients/dnn/outputs/add_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/MatMul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/outputs/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/outputs/MatMul_grad/MatMul_1"
+ }
+ node {
+ name: "train/gradients/dnn/outputs/MatMul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/outputs/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/outputs/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/outputs/MatMul_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/outputs/MatMul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/outputs/MatMul_grad/MatMul_1"
+ input: "^train/gradients/dnn/outputs/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/outputs/MatMul_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/Selu_grad/SeluGrad"
+ op: "SeluGrad"
+ input: "train/gradients/dnn/outputs/MatMul_grad/tuple/control_dependency"
+ input: "dnn/hidden2/Selu"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Shape"
+ op: "Shape"
+ input: "dnn/hidden2/MatMul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 100
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "train/gradients/dnn/hidden2/add_grad/Shape"
+ input: "train/gradients/dnn/hidden2/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Sum"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden2/Selu_grad/SeluGrad"
+ input: "train/gradients/dnn/hidden2/add_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden2/add_grad/Sum"
+ input: "train/gradients/dnn/hidden2/add_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Sum_1"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden2/Selu_grad/SeluGrad"
+ input: "train/gradients/dnn/hidden2/add_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/Reshape_1"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden2/add_grad/Sum_1"
+ input: "train/gradients/dnn/hidden2/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden2/add_grad/Reshape"
+ input: "^train/gradients/dnn/hidden2/add_grad/Reshape_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden2/add_grad/Reshape"
+ input: "^train/gradients/dnn/hidden2/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden2/add_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/add_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden2/add_grad/Reshape_1"
+ input: "^train/gradients/dnn/hidden2/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden2/add_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/MatMul_grad/MatMul"
+ op: "MatMul"
+ input: "train/gradients/dnn/hidden2/add_grad/tuple/control_dependency"
+ input: "dnn/hidden2/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/MatMul_grad/MatMul_1"
+ op: "MatMul"
+ input: "dnn/hidden1/Maximum"
+ input: "train/gradients/dnn/hidden2/add_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/MatMul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden2/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/hidden2/MatMul_grad/MatMul_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/hidden2/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden2/MatMul_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/MatMul_1"
+ input: "^train/gradients/dnn/hidden2/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden2/MatMul_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Shape"
+ op: "Shape"
+ input: "dnn/hidden1/mul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Shape_1"
+ op: "Shape"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Shape_2"
+ op: "Shape"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/zeros/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/zeros"
+ op: "Fill"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Shape_2"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/zeros/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/GreaterEqual"
+ op: "GreaterEqual"
+ input: "dnn/hidden1/mul"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Shape"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Select"
+ op: "Select"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/GreaterEqual"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Select_1"
+ op: "Select"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/GreaterEqual"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/zeros"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Sum"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Select"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Sum"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Sum_1"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Select_1"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/Reshape_1"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Sum_1"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden1/Maximum_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/Maximum_grad/Reshape_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/Maximum_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/Maximum_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/Maximum_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/Reshape_1"
+ input: "^train/gradients/dnn/hidden1/Maximum_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/Maximum_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Shape_1"
+ op: "Shape"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "train/gradients/dnn/hidden1/mul_grad/Shape"
+ input: "train/gradients/dnn/hidden1/mul_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/mul"
+ op: "Mul"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/tuple/control_dependency"
+ input: "dnn/hidden1/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Sum"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden1/mul_grad/mul"
+ input: "train/gradients/dnn/hidden1/mul_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/mul_grad/Sum"
+ input: "train/gradients/dnn/hidden1/mul_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/mul_1"
+ op: "Mul"
+ input: "dnn/hidden1/mul/x"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Sum_1"
+ op: "Sum"
+ input: "train/gradients/dnn/hidden1/mul_grad/mul_1"
+ input: "train/gradients/dnn/hidden1/mul_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/Reshape_1"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/mul_grad/Sum_1"
+ input: "train/gradients/dnn/hidden1/mul_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden1/mul_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/mul_grad/Reshape_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/mul_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/mul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/mul_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/mul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/mul_grad/Reshape_1"
+ input: "^train/gradients/dnn/hidden1/mul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/mul_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/AddN"
+ op: "AddN"
+ input: "train/gradients/dnn/hidden1/Maximum_grad/tuple/control_dependency_1"
+ input: "train/gradients/dnn/hidden1/mul_grad/tuple/control_dependency_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/Maximum_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Shape"
+ op: "Shape"
+ input: "dnn/hidden1/MatMul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 300
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "train/gradients/dnn/hidden1/add_grad/Shape"
+ input: "train/gradients/dnn/hidden1/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Sum"
+ op: "Sum"
+ input: "train/gradients/AddN"
+ input: "train/gradients/dnn/hidden1/add_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Reshape"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/add_grad/Sum"
+ input: "train/gradients/dnn/hidden1/add_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Sum_1"
+ op: "Sum"
+ input: "train/gradients/AddN"
+ input: "train/gradients/dnn/hidden1/add_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/Reshape_1"
+ op: "Reshape"
+ input: "train/gradients/dnn/hidden1/add_grad/Sum_1"
+ input: "train/gradients/dnn/hidden1/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden1/add_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/add_grad/Reshape_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/add_grad/Reshape"
+ input: "^train/gradients/dnn/hidden1/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/add_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/add_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/add_grad/Reshape_1"
+ input: "^train/gradients/dnn/hidden1/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/add_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/MatMul_grad/MatMul"
+ op: "MatMul"
+ input: "train/gradients/dnn/hidden1/add_grad/tuple/control_dependency"
+ input: "dnn/hidden1/weights/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/MatMul_grad/MatMul_1"
+ op: "MatMul"
+ input: "input"
+ input: "train/gradients/dnn/hidden1/add_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/MatMul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^train/gradients/dnn/hidden1/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/hidden1/MatMul_grad/MatMul_1"
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/MatMul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/MatMul_grad/MatMul"
+ input: "^train/gradients/dnn/hidden1/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/MatMul_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/gradients/dnn/hidden1/MatMul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "train/gradients/dnn/hidden1/MatMul_grad/MatMul_1"
+ input: "^train/gradients/dnn/hidden1/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@train/gradients/dnn/hidden1/MatMul_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/learning_rate"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.009999999776482582
+ }
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/hidden1/weights/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/hidden1/weights"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/hidden1/MatMul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/hidden1/bias/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/hidden1/bias"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/hidden1/add_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/hidden2/weights/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/hidden2/weights"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/hidden2/MatMul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/hidden2/bias/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/hidden2/bias"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/hidden2/add_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/outputs/weights/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/outputs/weights"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/outputs/MatMul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent/update_dnn/outputs/bias/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "dnn/outputs/bias"
+ input: "train/GradientDescent/learning_rate"
+ input: "train/gradients/dnn/outputs/add_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "train/GradientDescent"
+ op: "NoOp"
+ input: "^train/GradientDescent/update_dnn/hidden1/weights/ApplyGradientDescent"
+ input: "^train/GradientDescent/update_dnn/hidden1/bias/ApplyGradientDescent"
+ input: "^train/GradientDescent/update_dnn/hidden2/weights/ApplyGradientDescent"
+ input: "^train/GradientDescent/update_dnn/hidden2/bias/ApplyGradientDescent"
+ input: "^train/GradientDescent/update_dnn/outputs/weights/ApplyGradientDescent"
+ input: "^train/GradientDescent/update_dnn/outputs/bias/ApplyGradientDescent"
+ }
+ node {
+ name: "eval/in_top_k/InTopKV2/k"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT64
+ tensor_shape {
+ }
+ int64_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "eval/in_top_k/InTopKV2"
+ op: "InTopKV2"
+ input: "dnn/outputs/add"
+ input: "y"
+ input: "eval/in_top_k/InTopKV2/k"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "eval/Cast"
+ op: "Cast"
+ input: "eval/in_top_k/InTopKV2"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_BOOL
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "eval/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "eval/Mean"
+ op: "Mean"
+ input: "eval/Cast"
+ input: "eval/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "init"
+ op: "NoOp"
+ input: "^dnn/hidden1/weights/Assign"
+ input: "^dnn/hidden1/bias/Assign"
+ input: "^dnn/hidden2/weights/Assign"
+ input: "^dnn/hidden2/bias/Assign"
+ input: "^dnn/outputs/weights/Assign"
+ input: "^dnn/outputs/bias/Assign"
+ }
+ node {
+ name: "Accuracy/tags"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "Accuracy"
+ }
+ }
+ }
+ }
+ node {
+ name: "Accuracy"
+ op: "ScalarSummary"
+ input: "Accuracy/tags"
+ input: "eval/Mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "model"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/StringJoin/inputs_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "_temp_de3cfc5e8e7e4734ae221577e8fd36a2/part"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/StringJoin"
+ op: "StringJoin"
+ input: "save/Const"
+ input: "save/StringJoin/inputs_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "separator"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "save/num_shards"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "save/ShardedFilename/shard"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "save/ShardedFilename"
+ op: "ShardedFilename"
+ input: "save/StringJoin"
+ input: "save/ShardedFilename/shard"
+ input: "save/num_shards"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 6
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 6
+ }
+ }
+ string_val: "dnn/hidden1/bias"
+ string_val: "dnn/hidden1/weights"
+ string_val: "dnn/hidden2/bias"
+ string_val: "dnn/hidden2/weights"
+ string_val: "dnn/outputs/bias"
+ string_val: "dnn/outputs/weights"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 6
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 6
+ }
+ }
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2"
+ op: "SaveV2"
+ input: "save/ShardedFilename"
+ input: "save/SaveV2/tensor_names"
+ input: "save/SaveV2/shape_and_slices"
+ input: "dnn/hidden1/bias"
+ input: "dnn/hidden1/weights"
+ input: "dnn/hidden2/bias"
+ input: "dnn/hidden2/weights"
+ input: "dnn/outputs/bias"
+ input: "dnn/outputs/weights"
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/control_dependency"
+ op: "Identity"
+ input: "save/ShardedFilename"
+ input: "^save/SaveV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@save/ShardedFilename"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/MergeV2Checkpoints/checkpoint_prefixes"
+ op: "Pack"
+ input: "save/ShardedFilename"
+ input: "^save/control_dependency"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "save/MergeV2Checkpoints"
+ op: "MergeV2Checkpoints"
+ input: "save/MergeV2Checkpoints/checkpoint_prefixes"
+ input: "save/Const"
+ attr {
+ key: "delete_old_dirs"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/Identity"
+ op: "Identity"
+ input: "save/Const"
+ input: "^save/control_dependency"
+ input: "^save/MergeV2Checkpoints"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/hidden1/bias"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2/tensor_names"
+ input: "save/RestoreV2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign"
+ op: "Assign"
+ input: "dnn/hidden1/bias"
+ input: "save/RestoreV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/hidden1/weights"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_1/tensor_names"
+ input: "save/RestoreV2_1/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_1"
+ op: "Assign"
+ input: "dnn/hidden1/weights"
+ input: "save/RestoreV2_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden1/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 300
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/hidden2/bias"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_2/tensor_names"
+ input: "save/RestoreV2_2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_2"
+ op: "Assign"
+ input: "dnn/hidden2/bias"
+ input: "save/RestoreV2_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/hidden2/weights"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_3/tensor_names"
+ input: "save/RestoreV2_3/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_3"
+ op: "Assign"
+ input: "dnn/hidden2/weights"
+ input: "save/RestoreV2_3"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/hidden2/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 300
+ }
+ dim {
+ size: 100
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/outputs/bias"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_4/tensor_names"
+ input: "save/RestoreV2_4/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_4"
+ op: "Assign"
+ input: "dnn/outputs/bias"
+ input: "save/RestoreV2_4"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/bias"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "dnn/outputs/weights"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_5/tensor_names"
+ input: "save/RestoreV2_5/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_5"
+ op: "Assign"
+ input: "dnn/outputs/weights"
+ input: "save/RestoreV2_5"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@dnn/outputs/weights"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 100
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/restore_shard"
+ op: "NoOp"
+ input: "^save/Assign"
+ input: "^save/Assign_1"
+ input: "^save/Assign_2"
+ input: "^save/Assign_3"
+ input: "^save/Assign_4"
+ input: "^save/Assign_5"
+ }
+ node {
+ name: "save/restore_all"
+ op: "NoOp"
+ input: "^save/restore_shard"
+ }
+ versions {
+ producer: 24
+ }
+ }
+ saver_def {
+ filename_tensor_name: "save/Const:0"
+ save_tensor_name: "save/Identity:0"
+ restore_op_name: "save/restore_all"
+ max_to_keep: 5
+ sharded: true
+ keep_checkpoint_every_n_hours: 10000.0
+ version: V2
+ }
+ collection_def {
+ key: "summaries"
+ value {
+ node_list {
+ value: "Accuracy:0"
+ }
+ }
+ }
+ collection_def {
+ key: "train_op"
+ value {
+ node_list {
+ value: "train/GradientDescent"
+ }
+ }
+ }
+ collection_def {
+ key: "trainable_variables"
+ value {
+ bytes_list {
+ value: "\n\025dnn/hidden1/weights:0\022\032dnn/hidden1/weights/Assign\032\032dnn/hidden1/weights/read:02\036dnn/hidden1/truncated_normal:0"
+ value: "\n\022dnn/hidden1/bias:0\022\027dnn/hidden1/bias/Assign\032\027dnn/hidden1/bias/read:02\023dnn/hidden1/zeros:0"
+ value: "\n\025dnn/hidden2/weights:0\022\032dnn/hidden2/weights/Assign\032\032dnn/hidden2/weights/read:02\036dnn/hidden2/truncated_normal:0"
+ value: "\n\022dnn/hidden2/bias:0\022\027dnn/hidden2/bias/Assign\032\027dnn/hidden2/bias/read:02\023dnn/hidden2/zeros:0"
+ value: "\n\025dnn/outputs/weights:0\022\032dnn/outputs/weights/Assign\032\032dnn/outputs/weights/read:02\036dnn/outputs/truncated_normal:0"
+ value: "\n\022dnn/outputs/bias:0\022\027dnn/outputs/bias/Assign\032\027dnn/outputs/bias/read:02\023dnn/outputs/zeros:0"
+ }
+ }
+ }
+ collection_def {
+ key: "variables"
+ value {
+ bytes_list {
+ value: "\n\025dnn/hidden1/weights:0\022\032dnn/hidden1/weights/Assign\032\032dnn/hidden1/weights/read:02\036dnn/hidden1/truncated_normal:0"
+ value: "\n\022dnn/hidden1/bias:0\022\027dnn/hidden1/bias/Assign\032\027dnn/hidden1/bias/read:02\023dnn/hidden1/zeros:0"
+ value: "\n\025dnn/hidden2/weights:0\022\032dnn/hidden2/weights/Assign\032\032dnn/hidden2/weights/read:02\036dnn/hidden2/truncated_normal:0"
+ value: "\n\022dnn/hidden2/bias:0\022\027dnn/hidden2/bias/Assign\032\027dnn/hidden2/bias/read:02\023dnn/hidden2/zeros:0"
+ value: "\n\025dnn/outputs/weights:0\022\032dnn/outputs/weights/Assign\032\032dnn/outputs/weights/read:02\036dnn/outputs/truncated_normal:0"
+ value: "\n\022dnn/outputs/bias:0\022\027dnn/outputs/bias/Assign\032\027dnn/outputs/bias/read:02\023dnn/outputs/zeros:0"
+ }
+ }
+ }
+ signature_def {
+ key: "serving_default"
+ value {
+ inputs {
+ key: "x"
+ value {
+ name: "input:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ outputs {
+ key: "y"
+ value {
+ name: "dnn/outputs/add:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ method_name: "tensorflow/serving/predict"
+ }
+ }
+}
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.data-00000-of-00001 b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.data-00000-of-00001
new file mode 100644
index 00000000000..a7ca01888c7
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.data-00000-of-00001
Binary files differ
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.index b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.index
new file mode 100644
index 00000000000..7989c109a3a
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist/saved/variables/variables.index
Binary files differ
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist/simple_mnist.py b/config-model/src/test/cfg/application/ml_models/models/mnist/simple_mnist.py
new file mode 100644
index 00000000000..26529f67919
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist/simple_mnist.py
@@ -0,0 +1,97 @@
+
+# Common imports
+import numpy as np
+import tensorflow as tf
+
+from tensorflow.examples.tutorials.mnist import input_data
+from datetime import datetime
+
+now = datetime.utcnow().strftime("%Y%m%d%H%M%S")
+root_logdir = "tf_logs"
+logdir = "{}/run-{}/".format(root_logdir, now)
+
+mnist = input_data.read_data_sets("/tmp/data/")
+X_train = mnist.train.images
+X_test = mnist.test.images
+y_train = mnist.train.labels.astype("int")
+y_test = mnist.test.labels.astype("int")
+
+n_inputs = 28*28 # MNIST
+n_hidden1 = 300
+n_hidden2 = 100
+n_hidden3 = 40
+n_outputs = 10
+
+learning_rate = 0.01
+n_epochs = 20
+batch_size = 50
+
+input = tf.placeholder(tf.float32, shape=(None, n_inputs), name="input")
+y = tf.placeholder(tf.int64, shape=(None), name="y")
+
+
+def neuron_layer(X, n_neurons, name, activation=None):
+ with tf.name_scope(name):
+ n_inputs = int(X.get_shape()[1])
+ stddev = 2 / np.sqrt(n_inputs)
+ init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)
+ W = tf.Variable(init, name="weights")
+ b = tf.Variable(tf.zeros([n_neurons]), name="bias")
+ Z = tf.matmul(X, W) + b
+ if activation is not None:
+ return activation(Z)
+ else:
+ return Z
+
+
+def leaky_relu(z, name=None):
+ return tf.maximum(0.01 * z, z, name=name)
+
+
+with tf.name_scope("dnn"):
+ hidden1 = neuron_layer(input, n_hidden1, name="hidden1", activation=leaky_relu)
+ hidden2 = neuron_layer(hidden1, n_hidden2, name="hidden2", activation=tf.nn.selu)
+ logits = neuron_layer(hidden2, n_outputs, name="outputs") #, activation=tf.nn.sigmoid)
+
+with tf.name_scope("loss"):
+ xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
+ loss = tf.reduce_mean(xentropy, name="loss")
+
+with tf.name_scope("train"):
+ optimizer = tf.train.GradientDescentOptimizer(learning_rate)
+ training_op = optimizer.minimize(loss)
+
+with tf.name_scope("eval"):
+ correct = tf.nn.in_top_k(logits, y, 1)
+ accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
+
+init = tf.global_variables_initializer()
+accuracy_summary = tf.summary.scalar('Accuracy', accuracy)
+file_writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
+
+with tf.Session() as sess:
+ init.run()
+ for epoch in range(n_epochs):
+ for iteration in range(mnist.train.num_examples // batch_size):
+ X_batch, y_batch = mnist.train.next_batch(batch_size)
+ sess.run(training_op, feed_dict={input: X_batch, y: y_batch})
+ acc_train = accuracy.eval(feed_dict={input: X_batch, y: y_batch})
+ acc_val = accuracy.eval(feed_dict={input: mnist.validation.images,
+ y: mnist.validation.labels})
+ print(epoch, "Train accuracy:", acc_train, "Val accuracy:", acc_val)
+
+ # Save summary for tensorboard
+ summary_str = accuracy_summary.eval(feed_dict={input: mnist.validation.images,
+ y: mnist.validation.labels})
+ file_writer.add_summary(summary_str, epoch)
+
+ export_path = "saved"
+ print('Exporting trained model to ', export_path)
+ builder = tf.saved_model.builder.SavedModelBuilder(export_path)
+ signature = tf.saved_model.signature_def_utils.predict_signature_def(inputs = {'x':input}, outputs = {'y':logits})
+ builder.add_meta_graph_and_variables(sess,
+ [tf.saved_model.tag_constants.SERVING],
+ signature_def_map={'serving_default':signature})
+ builder.save(as_text=True)
+
+file_writer.close() \ No newline at end of file
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist_softmax.onnx b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax.onnx
new file mode 100644
index 00000000000..a86019bf53a
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax.onnx
Binary files differ
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/mnist_sftmax_with_saving.py b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/mnist_sftmax_with_saving.py
new file mode 100644
index 00000000000..5d67a267706
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/mnist_sftmax_with_saving.py
@@ -0,0 +1,92 @@
+# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ==============================================================================
+
+"""A very simple MNIST classifier.
+
+See extensive documentation at
+https://www.tensorflow.org/get_started/mnist/beginners
+"""
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+import argparse
+import sys
+
+from tensorflow.examples.tutorials.mnist import input_data
+
+import tensorflow as tf
+
+FLAGS = None
+
+
+def main(_):
+ # Import data
+ mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
+
+ # Create the model
+ x = tf.placeholder(tf.float32, [None, 784])
+
+ with tf.name_scope("layer"):
+ W = tf.Variable(tf.zeros([784, 10]))
+ b = tf.Variable(tf.zeros([10]))
+ y = tf.matmul(x, W) + b
+
+
+ # Define loss and optimizer
+ y_ = tf.placeholder(tf.float32, [None, 10])
+
+ # The raw formulation of cross-entropy,
+ #
+ # tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(tf.nn.softmax(y)),
+ # reduction_indices=[1]))
+ #
+ # can be numerically unstable.
+ #
+ # So here we use tf.nn.softmax_cross_entropy_with_logits on the raw
+ # outputs of 'y', and then average across the batch.
+ cross_entropy = tf.reduce_mean(
+ tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
+ train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
+
+ sess = tf.InteractiveSession()
+ tf.global_variables_initializer().run()
+ # Train
+ for _ in range(1000):
+ batch_xs, batch_ys = mnist.train.next_batch(100)
+ sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
+
+ # Test trained model
+ correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
+ accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
+ print(sess.run(accuracy, feed_dict={x: mnist.test.images,
+ y_: mnist.test.labels}))
+
+ # Save the model
+ export_path = "saved"
+ print('Exporting trained model to ', export_path)
+ builder = tf.saved_model.builder.SavedModelBuilder(export_path)
+ signature = tf.saved_model.signature_def_utils.predict_signature_def(inputs = {'x':x}, outputs = {'y':y})
+ builder.add_meta_graph_and_variables(sess,
+ [tf.saved_model.tag_constants.SERVING],
+ signature_def_map={'serving_default':signature})
+ builder.save(as_text=True)
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data',
+ help='Directory for storing input data')
+ FLAGS, unparsed = parser.parse_known_args()
+ tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/saved_model.pbtxt b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/saved_model.pbtxt
new file mode 100644
index 00000000000..05b0e4e0f29
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/saved_model.pbtxt
@@ -0,0 +1,5039 @@
+saved_model_schema_version: 1
+meta_graphs {
+ meta_info_def {
+ stripped_op_list {
+ op {
+ name: "Add"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_STRING
+ }
+ }
+ }
+ }
+ op {
+ name: "ApplyGradientDescent"
+ input_arg {
+ name: "var"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "alpha"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "delta"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "out"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ }
+ op {
+ name: "ArgMax"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "dimension"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "output_type"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ attr {
+ name: "output_type"
+ type: "type"
+ default_value {
+ type: DT_INT64
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Assign"
+ input_arg {
+ name: "ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output_ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "validate_shape"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ allows_uninitialized_input: true
+ }
+ op {
+ name: "BroadcastGradientArgs"
+ input_arg {
+ name: "s0"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "s1"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r0"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r1"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Cast"
+ input_arg {
+ name: "x"
+ type_attr: "SrcT"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "DstT"
+ }
+ attr {
+ name: "SrcT"
+ type: "type"
+ }
+ attr {
+ name: "DstT"
+ type: "type"
+ }
+ }
+ op {
+ name: "ConcatV2"
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ input_arg {
+ name: "axis"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 2
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Const"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "value"
+ type: "tensor"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ }
+ op {
+ name: "Equal"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_QUINT8
+ type: DT_QINT8
+ type: DT_QINT32
+ type: DT_STRING
+ type: DT_BOOL
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "ExpandDims"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "dim"
+ type_attr: "Tdim"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tdim"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Fill"
+ input_arg {
+ name: "dims"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "FloorDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Identity"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "MatMul"
+ input_arg {
+ name: "a"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "b"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "product"
+ type_attr: "T"
+ }
+ attr {
+ name: "transpose_a"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "transpose_b"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Maximum"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Mean"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "MergeV2Checkpoints"
+ input_arg {
+ name: "checkpoint_prefixes"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "destination_prefix"
+ type: DT_STRING
+ }
+ attr {
+ name: "delete_old_dirs"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "Mul"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "NoOp"
+ }
+ op {
+ name: "Pack"
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "axis"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ }
+ op {
+ name: "Placeholder"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ default_value {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ op {
+ name: "Prod"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RealDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Reshape"
+ input_arg {
+ name: "tensor"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "shape"
+ type_attr: "Tshape"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tshape"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RestoreV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ output_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "SaveV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "Shape"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "out_type"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "out_type"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "ShardedFilename"
+ input_arg {
+ name: "basename"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shard"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "num_shards"
+ type: DT_INT32
+ }
+ output_arg {
+ name: "filename"
+ type: DT_STRING
+ }
+ }
+ op {
+ name: "Slice"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "begin"
+ type_attr: "Index"
+ }
+ input_arg {
+ name: "size"
+ type_attr: "Index"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Index"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "SoftmaxCrossEntropyWithLogits"
+ input_arg {
+ name: "features"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "labels"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "loss"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "backprop"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ }
+ op {
+ name: "StringJoin"
+ input_arg {
+ name: "inputs"
+ type: DT_STRING
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type: DT_STRING
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "separator"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ }
+ op {
+ name: "Sub"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Sum"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Tile"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "multiples"
+ type_attr: "Tmultiples"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tmultiples"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "VariableV2"
+ output_arg {
+ name: "ref"
+ type_attr: "dtype"
+ is_ref: true
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "container"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ attr {
+ name: "shared_name"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "ZerosLike"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ }
+ tags: "serve"
+ tensorflow_version: "1.4.1"
+ tensorflow_git_version: "v1.4.0-19-ga52c8d9"
+ }
+ graph_def {
+ node {
+ name: "Placeholder"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Placeholder_1"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "layer/zeros"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "layer/Variable"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "layer/Variable/Assign"
+ op: "Assign"
+ input: "layer/Variable"
+ input: "layer/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "layer/Variable/read"
+ op: "Identity"
+ input: "layer/Variable"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "layer/zeros_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 10
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "layer/Variable_1"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "layer/Variable_1/Assign"
+ op: "Assign"
+ input: "layer/Variable_1"
+ input: "layer/zeros_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "layer/Variable_1/read"
+ op: "Identity"
+ input: "layer/Variable_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "layer/MatMul"
+ op: "MatMul"
+ input: "Placeholder"
+ input: "layer/Variable/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "layer/add"
+ op: "Add"
+ input: "layer/MatMul"
+ input: "layer/Variable_1/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Rank"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 2
+ }
+ }
+ }
+ }
+ node {
+ name: "Shape"
+ op: "Shape"
+ input: "layer/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "Rank_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 2
+ }
+ }
+ }
+ }
+ node {
+ name: "Shape_1"
+ op: "Shape"
+ input: "layer/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "Sub/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Sub"
+ op: "Sub"
+ input: "Rank_1"
+ input: "Sub/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice/begin"
+ op: "Pack"
+ input: "Sub"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "Slice/size"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice"
+ op: "Slice"
+ input: "Shape_1"
+ input: "Slice/begin"
+ input: "Slice/size"
+ attr {
+ key: "Index"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "concat/values_0"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: -1
+ }
+ }
+ }
+ }
+ node {
+ name: "concat/axis"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "concat"
+ op: "ConcatV2"
+ input: "concat/values_0"
+ input: "Slice"
+ input: "concat/axis"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Reshape"
+ op: "Reshape"
+ input: "layer/add"
+ input: "concat"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Rank_2"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 2
+ }
+ }
+ }
+ }
+ node {
+ name: "Shape_2"
+ op: "Shape"
+ input: "Placeholder_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "Sub_1/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Sub_1"
+ op: "Sub"
+ input: "Rank_2"
+ input: "Sub_1/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice_1/begin"
+ op: "Pack"
+ input: "Sub_1"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "Slice_1/size"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice_1"
+ op: "Slice"
+ input: "Shape_2"
+ input: "Slice_1/begin"
+ input: "Slice_1/size"
+ attr {
+ key: "Index"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "concat_1/values_0"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: -1
+ }
+ }
+ }
+ }
+ node {
+ name: "concat_1/axis"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "concat_1"
+ op: "ConcatV2"
+ input: "concat_1/values_0"
+ input: "Slice_1"
+ input: "concat_1/axis"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Reshape_1"
+ op: "Reshape"
+ input: "Placeholder_1"
+ input: "concat_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "SoftmaxCrossEntropyWithLogits"
+ op: "SoftmaxCrossEntropyWithLogits"
+ input: "Reshape"
+ input: "Reshape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Sub_2/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Sub_2"
+ op: "Sub"
+ input: "Rank"
+ input: "Sub_2/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice_2/begin"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "Slice_2/size"
+ op: "Pack"
+ input: "Sub_2"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "Slice_2"
+ op: "Slice"
+ input: "Shape"
+ input: "Slice_2/begin"
+ input: "Slice_2/size"
+ attr {
+ key: "Index"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Reshape_2"
+ op: "Reshape"
+ input: "SoftmaxCrossEntropyWithLogits"
+ input: "Slice_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "Mean"
+ op: "Mean"
+ input: "Reshape_2"
+ input: "Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/Shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 1.0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Fill"
+ op: "Fill"
+ input: "gradients/Shape"
+ input: "gradients/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Reshape/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/Fill"
+ input: "gradients/Mean_grad/Reshape/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Shape"
+ op: "Shape"
+ input: "Reshape_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Tile"
+ op: "Tile"
+ input: "gradients/Mean_grad/Reshape"
+ input: "gradients/Mean_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tmultiples"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Shape_1"
+ op: "Shape"
+ input: "Reshape_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Shape_2"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Prod"
+ op: "Prod"
+ input: "gradients/Mean_grad/Shape_1"
+ input: "gradients/Mean_grad/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Const_1"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Prod_1"
+ op: "Prod"
+ input: "gradients/Mean_grad/Shape_2"
+ input: "gradients/Mean_grad/Const_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Maximum/y"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Maximum"
+ op: "Maximum"
+ input: "gradients/Mean_grad/Prod_1"
+ input: "gradients/Mean_grad/Maximum/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/floordiv"
+ op: "FloorDiv"
+ input: "gradients/Mean_grad/Prod"
+ input: "gradients/Mean_grad/Maximum"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Mean_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/Cast"
+ op: "Cast"
+ input: "gradients/Mean_grad/floordiv"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Mean_grad/truediv"
+ op: "RealDiv"
+ input: "gradients/Mean_grad/Tile"
+ input: "gradients/Mean_grad/Cast"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Reshape_2_grad/Shape"
+ op: "Shape"
+ input: "SoftmaxCrossEntropyWithLogits"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/Reshape_2_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/Mean_grad/truediv"
+ input: "gradients/Reshape_2_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/zeros_like"
+ op: "ZerosLike"
+ input: "SoftmaxCrossEntropyWithLogits:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: -1
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/SoftmaxCrossEntropyWithLogits_grad/ExpandDims"
+ op: "ExpandDims"
+ input: "gradients/Reshape_2_grad/Reshape"
+ input: "gradients/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tdim"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/SoftmaxCrossEntropyWithLogits_grad/mul"
+ op: "Mul"
+ input: "gradients/SoftmaxCrossEntropyWithLogits_grad/ExpandDims"
+ input: "SoftmaxCrossEntropyWithLogits:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Reshape_grad/Shape"
+ op: "Shape"
+ input: "layer/add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/Reshape_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/SoftmaxCrossEntropyWithLogits_grad/mul"
+ input: "gradients/Reshape_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Shape"
+ op: "Shape"
+ input: "layer/MatMul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 10
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/layer/add_grad/Shape"
+ input: "gradients/layer/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Sum"
+ op: "Sum"
+ input: "gradients/Reshape_grad/Reshape"
+ input: "gradients/layer/add_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/layer/add_grad/Sum"
+ input: "gradients/layer/add_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/Reshape_grad/Reshape"
+ input: "gradients/layer/add_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/layer/add_grad/Sum_1"
+ input: "gradients/layer/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/layer/add_grad/Reshape"
+ input: "^gradients/layer/add_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/layer/add_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/layer/add_grad/Reshape"
+ input: "^gradients/layer/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/layer/add_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/add_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/layer/add_grad/Reshape_1"
+ input: "^gradients/layer/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/layer/add_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/MatMul_grad/MatMul"
+ op: "MatMul"
+ input: "gradients/layer/add_grad/tuple/control_dependency"
+ input: "layer/Variable/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/MatMul_grad/MatMul_1"
+ op: "MatMul"
+ input: "Placeholder"
+ input: "gradients/layer/add_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/MatMul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/layer/MatMul_grad/MatMul"
+ input: "^gradients/layer/MatMul_grad/MatMul_1"
+ }
+ node {
+ name: "gradients/layer/MatMul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/layer/MatMul_grad/MatMul"
+ input: "^gradients/layer/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/layer/MatMul_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/layer/MatMul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/layer/MatMul_grad/MatMul_1"
+ input: "^gradients/layer/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/layer/MatMul_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "GradientDescent/learning_rate"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.5
+ }
+ }
+ }
+ }
+ node {
+ name: "GradientDescent/update_layer/Variable/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "layer/Variable"
+ input: "GradientDescent/learning_rate"
+ input: "gradients/layer/MatMul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "GradientDescent/update_layer/Variable_1/ApplyGradientDescent"
+ op: "ApplyGradientDescent"
+ input: "layer/Variable_1"
+ input: "GradientDescent/learning_rate"
+ input: "gradients/layer/add_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "GradientDescent"
+ op: "NoOp"
+ input: "^GradientDescent/update_layer/Variable/ApplyGradientDescent"
+ input: "^GradientDescent/update_layer/Variable_1/ApplyGradientDescent"
+ }
+ node {
+ name: "init"
+ op: "NoOp"
+ input: "^layer/Variable/Assign"
+ input: "^layer/Variable_1/Assign"
+ }
+ node {
+ name: "ArgMax/dimension"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "ArgMax"
+ op: "ArgMax"
+ input: "layer/add"
+ input: "ArgMax/dimension"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "output_type"
+ value {
+ type: DT_INT64
+ }
+ }
+ }
+ node {
+ name: "ArgMax_1/dimension"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "ArgMax_1"
+ op: "ArgMax"
+ input: "Placeholder_1"
+ input: "ArgMax_1/dimension"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "output_type"
+ value {
+ type: DT_INT64
+ }
+ }
+ }
+ node {
+ name: "Equal"
+ op: "Equal"
+ input: "ArgMax"
+ input: "ArgMax_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT64
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Cast_1"
+ op: "Cast"
+ input: "Equal"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_BOOL
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "Mean_1"
+ op: "Mean"
+ input: "Cast_1"
+ input: "Const_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "save/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "model"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/StringJoin/inputs_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "_temp_65caff16d5244276b9828b0dab21b157/part"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/StringJoin"
+ op: "StringJoin"
+ input: "save/Const"
+ input: "save/StringJoin/inputs_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "separator"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "save/num_shards"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "save/ShardedFilename/shard"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "save/ShardedFilename"
+ op: "ShardedFilename"
+ input: "save/StringJoin"
+ input: "save/ShardedFilename/shard"
+ input: "save/num_shards"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ string_val: "layer/Variable"
+ string_val: "layer/Variable_1"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ string_val: ""
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2"
+ op: "SaveV2"
+ input: "save/ShardedFilename"
+ input: "save/SaveV2/tensor_names"
+ input: "save/SaveV2/shape_and_slices"
+ input: "layer/Variable"
+ input: "layer/Variable_1"
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/control_dependency"
+ op: "Identity"
+ input: "save/ShardedFilename"
+ input: "^save/SaveV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@save/ShardedFilename"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/MergeV2Checkpoints/checkpoint_prefixes"
+ op: "Pack"
+ input: "save/ShardedFilename"
+ input: "^save/control_dependency"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "save/MergeV2Checkpoints"
+ op: "MergeV2Checkpoints"
+ input: "save/MergeV2Checkpoints/checkpoint_prefixes"
+ input: "save/Const"
+ attr {
+ key: "delete_old_dirs"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/Identity"
+ op: "Identity"
+ input: "save/Const"
+ input: "^save/control_dependency"
+ input: "^save/MergeV2Checkpoints"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "layer/Variable"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2/tensor_names"
+ input: "save/RestoreV2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign"
+ op: "Assign"
+ input: "layer/Variable"
+ input: "save/RestoreV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 784
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "layer/Variable_1"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_1/tensor_names"
+ input: "save/RestoreV2_1/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_1"
+ op: "Assign"
+ input: "layer/Variable_1"
+ input: "save/RestoreV2_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@layer/Variable_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/restore_shard"
+ op: "NoOp"
+ input: "^save/Assign"
+ input: "^save/Assign_1"
+ }
+ node {
+ name: "save/restore_all"
+ op: "NoOp"
+ input: "^save/restore_shard"
+ }
+ versions {
+ producer: 24
+ }
+ }
+ saver_def {
+ filename_tensor_name: "save/Const:0"
+ save_tensor_name: "save/Identity:0"
+ restore_op_name: "save/restore_all"
+ max_to_keep: 5
+ sharded: true
+ keep_checkpoint_every_n_hours: 10000.0
+ version: V2
+ }
+ collection_def {
+ key: "train_op"
+ value {
+ node_list {
+ value: "GradientDescent"
+ }
+ }
+ }
+ collection_def {
+ key: "trainable_variables"
+ value {
+ bytes_list {
+ value: "\n\020layer/Variable:0\022\025layer/Variable/Assign\032\025layer/Variable/read:02\rlayer/zeros:0"
+ value: "\n\022layer/Variable_1:0\022\027layer/Variable_1/Assign\032\027layer/Variable_1/read:02\017layer/zeros_1:0"
+ }
+ }
+ }
+ collection_def {
+ key: "variables"
+ value {
+ bytes_list {
+ value: "\n\020layer/Variable:0\022\025layer/Variable/Assign\032\025layer/Variable/read:02\rlayer/zeros:0"
+ value: "\n\022layer/Variable_1:0\022\027layer/Variable_1/Assign\032\027layer/Variable_1/read:02\017layer/zeros_1:0"
+ }
+ }
+ }
+ signature_def {
+ key: "serving_default"
+ value {
+ inputs {
+ key: "x"
+ value {
+ name: "Placeholder:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 784
+ }
+ }
+ }
+ }
+ outputs {
+ key: "y"
+ value {
+ name: "layer/add:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 10
+ }
+ }
+ }
+ }
+ method_name: "tensorflow/serving/predict"
+ }
+ }
+}
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.data-00000-of-00001 b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.data-00000-of-00001
new file mode 100644
index 00000000000..826b0280abf
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.data-00000-of-00001
Binary files differ
diff --git a/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.index b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.index
new file mode 100644
index 00000000000..d00fc5b06ed
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/mnist_softmax/saved/variables/variables.index
Binary files differ
diff --git a/config-model/src/test/cfg/application/ml_models/models/xgboost.2.2.json b/config-model/src/test/cfg/application/ml_models/models/xgboost.2.2.json
new file mode 100644
index 00000000000..f8949b47e52
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/models/xgboost.2.2.json
@@ -0,0 +1,19 @@
+[
+ { "nodeid": 0, "depth": 0, "split": "f29", "split_condition": -0.1234567, "yes": 1, "no": 2, "missing": 1, "children": [
+ { "nodeid": 1, "depth": 1, "split": "f56", "split_condition": -0.242398, "yes": 3, "no": 4, "missing": 3, "children": [
+ { "nodeid": 3, "leaf": 1.71218 },
+ { "nodeid": 4, "leaf": -1.70044 }
+ ]},
+ { "nodeid": 2, "depth": 1, "split": "f109", "split_condition": 0.8723473, "yes": 5, "no": 6, "missing": 5, "children": [
+ { "nodeid": 5, "leaf": -1.94071 },
+ { "nodeid": 6, "leaf": 1.85965 }
+ ]}
+ ]},
+ { "nodeid": 0, "depth": 0, "split": "f60", "split_condition": -0.482947, "yes": 1, "no": 2, "missing": 1, "children": [
+ { "nodeid": 1, "depth": 1, "split": "f29", "split_condition": -4.2387498, "yes": 3, "no": 4, "missing": 3, "children": [
+ { "nodeid": 3, "leaf": 0.784718 },
+ { "nodeid": 4, "leaf": -0.96853 }
+ ]},
+ { "nodeid": 2, "leaf": -6.23624 }
+ ]}
+] \ No newline at end of file
diff --git a/config-model/src/test/cfg/application/ml_models/searchdefinitions/test.sd b/config-model/src/test/cfg/application/ml_models/searchdefinitions/test.sd
new file mode 100644
index 00000000000..328628999d0
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/searchdefinitions/test.sd
@@ -0,0 +1,41 @@
+search test {
+
+ document test {
+ field argument type tensor(d0[],d1[784]) {
+ indexing: attribute
+ }
+ }
+
+ rank-profile test {
+
+ function input() {
+ expression: attribute(argument)
+ }
+
+ function Placeholder() {
+ expression: attribute(argument)
+ }
+
+ function mnist_tensorflow() {
+ expression: tensorflow("mnist/saved")
+ }
+
+ function mnist_softmax_tensorflow() {
+ expression: tensorflow("mnist_softmax/saved")
+ }
+
+ function mnist_softmax_onnx() {
+ expression: onnx("mnist_softmax")
+ }
+
+ function my_xgboost() {
+ expression: xgboost("xgboost_2_2")
+ }
+
+ first-phase {
+ expression: mnist_tensorflow + mnist_softmax_tensorflow + mnist_softmax_onnx + my_xgboost
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/config-model/src/test/cfg/application/ml_models/services.xml b/config-model/src/test/cfg/application/ml_models/services.xml
new file mode 100644
index 00000000000..e53e4eaa6ab
--- /dev/null
+++ b/config-model/src/test/cfg/application/ml_models/services.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<services version="1.0">
+
+ <container version="1.0">
+ <nodes>
+ <node hostalias="node1" />
+ </nodes>
+ </container>
+
+ <content id="test" version="1.0">
+ <redundancy>1</redundancy>
+ <documents>
+ <document mode="index" type="test"/>
+ </documents>
+ <nodes>
+ <node distribution-key="0" hostalias="node1" />
+ </nodes>
+ </content>
+
+</services>
diff --git a/config-model/src/test/derived/documentderiver/compression_body.sd b/config-model/src/test/derived/documentderiver/compression_body.sd
deleted file mode 100644
index cd114b24017..00000000000
--- a/config-model/src/test/derived/documentderiver/compression_body.sd
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search compressed_body {
-
- document compressed_body {
- body {
- compression {
- level:6
- }
- }
-
- field from type string {
- }
-
- field content type string {
- body
- }
- }
-
-}
-
diff --git a/config-model/src/test/derived/documentderiver/compression_both.sd b/config-model/src/test/derived/documentderiver/compression_both.sd
deleted file mode 100644
index 577aef702d3..00000000000
--- a/config-model/src/test/derived/documentderiver/compression_both.sd
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search compressed_both {
-
- document compressed_both {
- compression {
- threshold:90
- level:9
- }
-
- header {
- compression {
- threshold:50
- level:6
- }
- }
-
- field from type string {
- }
-
- field content type string {
- body
- }
- }
-
-}
-
diff --git a/config-model/src/test/derived/documentderiver/compression_header.sd b/config-model/src/test/derived/documentderiver/compression_header.sd
deleted file mode 100644
index 6ff951b34cb..00000000000
--- a/config-model/src/test/derived/documentderiver/compression_header.sd
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search compressed_header {
-
- document compressed_header {
- header {
- compression {
- level:9
- }
- }
-
- field from type string {
- }
-
- field content type string {
- body
- }
- }
-
-}
-
diff --git a/config-model/src/test/derived/documentderiver/documentmanager.cfg b/config-model/src/test/derived/documentderiver/documentmanager.cfg
deleted file mode 100644
index 2ab99b75aef..00000000000
--- a/config-model/src/test/derived/documentderiver/documentmanager.cfg
+++ /dev/null
@@ -1,394 +0,0 @@
-enablecompression false
-datatype[].id 1381038251
-datatype[].structtype[].name "position"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "x"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "y"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -843666531
-datatype[].structtype[].name "compressed_body.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "from"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 1704844530
-datatype[].structtype[].name "compressed_body.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype LZ4
-datatype[].structtype[].compresslevel 6
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 0
-datatype[].structtype[].field[].name "content"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 1417245026
-datatype[].documenttype[].name "compressed_body"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct -843666531
-datatype[].documenttype[].bodystruct 1704844530
-datatype[].id -484354914
-datatype[].structtype[].name "compressed_both.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype LZ4
-datatype[].structtype[].compresslevel 6
-datatype[].structtype[].compressthreshold 50
-datatype[].structtype[].compressminsize 0
-datatype[].structtype[].field[].name "from"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -1007627725
-datatype[].structtype[].name "compressed_both.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype LZ4
-datatype[].structtype[].compresslevel 9
-datatype[].structtype[].compressthreshold 90
-datatype[].structtype[].compressminsize 0
-datatype[].structtype[].field[].name "content"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 1417705345
-datatype[].documenttype[].name "compressed_both"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct -484354914
-datatype[].documenttype[].bodystruct -1007627725
-datatype[].id -940182894
-datatype[].structtype[].name "compressed_header.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype LZ4
-datatype[].structtype[].compresslevel 9
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 0
-datatype[].structtype[].field[].name "from"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -579052249
-datatype[].structtype[].name "compressed_header.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "content"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 1946084365
-datatype[].documenttype[].name "compressed_header"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct -940182894
-datatype[].documenttype[].bodystruct -579052249
-datatype[].id -88808602
-datatype[].structtype[].name "mail.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "URI"
-datatype[].structtype[].field[].datatype 10
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "mailid"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "date"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "from"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "replyto"
-datatype[].structtype[].field[].datatype 3
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "to"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "cc"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "bcc"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "subject"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -1244861287
-datatype[].arraytype[].datatype 3
-datatype[].id -953584901
-datatype[].structtype[].name "mail.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "mailbody"
-datatype[].structtype[].field[].datatype 3
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachmentcount"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachmentnames"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachmenttypes"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachmentlanguages"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachmentcontent"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attachments"
-datatype[].structtype[].field[].datatype -1244861287
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -1081574983
-datatype[].documenttype[].name "mail"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct -88808602
-datatype[].documenttype[].bodystruct -953584901
-datatype[].id -1486737430
-datatype[].arraytype[].datatype 2
-datatype[].id 519906144
-datatype[].weightedsettype[].datatype 0
-datatype[].weightedsettype[].createifnonexistant false
-datatype[].weightedsettype[].removeifzero false
-datatype[].id 363959257
-datatype[].weightedsettype[].datatype 0
-datatype[].weightedsettype[].createifnonexistant true
-datatype[].weightedsettype[].removeifzero true
-datatype[].id -1910204744
-datatype[].structtype[].name "music.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "url"
-datatype[].structtype[].field[].datatype 10
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "title"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "artist"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "year"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "description"
-datatype[].structtype[].field[].datatype 3
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "tracks"
-datatype[].structtype[].field[].datatype -1486737430
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "popularity"
-datatype[].structtype[].field[].datatype 519906144
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "popularity2"
-datatype[].structtype[].field[].datatype 363959257
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "popularity3"
-datatype[].structtype[].field[].datatype 363959257
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 993120973
-datatype[].structtype[].name "music.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].id 1412693671
-datatype[].documenttype[].name "music"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct -1910204744
-datatype[].documenttype[].bodystruct 993120973
-datatype[].id 2006483754
-datatype[].structtype[].name "newssummary.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "title"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "abstract"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcename"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "providername"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "thumburl"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "thumbwidth"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "thumbheight"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "language"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "crawldocid"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "url"
-datatype[].structtype[].field[].datatype 10
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourceurl"
-datatype[].structtype[].field[].datatype 10
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "categories"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "pubdate"
-datatype[].structtype[].field[].datatype 4
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "expdate"
-datatype[].structtype[].field[].datatype 4
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "fingerprint"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "debug"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "attributes"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "searchcluster"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "eustaticrank"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "usstaticrank"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "asiastaticrank"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -2059783233
-datatype[].structtype[].name "newssummary.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].id -756330891
-datatype[].documenttype[].name "newssummary"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct 2006483754
-datatype[].documenttype[].bodystruct -2059783233
-datatype[].id 2098419674
-datatype[].structtype[].name "newsarticle.header"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "dynabstract"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "othersourcenames"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "author"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "otherlanguages"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "charset"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "mimetype"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "referrerurl"
-datatype[].structtype[].field[].datatype 10
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcelocation"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcecountry"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcelocale"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcecontinent"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "articlecountry"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "articlelocale"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "articlecontinent"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcerank"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "crawldate"
-datatype[].structtype[].field[].datatype 4
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "indexdate"
-datatype[].structtype[].field[].datatype 4
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "procdate"
-datatype[].structtype[].field[].datatype 4
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourceid"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].structtype[].field[].name "sourcefeedid"
-datatype[].structtype[].field[].datatype 0
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id 197293167
-datatype[].structtype[].name "newsarticle.body"
-datatype[].structtype[].version 0
-datatype[].structtype[].compresstype NONE
-datatype[].structtype[].compresslevel 0
-datatype[].structtype[].compressthreshold 95
-datatype[].structtype[].compressminsize 800
-datatype[].structtype[].field[].name "body"
-datatype[].structtype[].field[].datatype 2
-datatype[].structtype[].field[].detailedtype ""
-datatype[].id -1710661691
-datatype[].documenttype[].name "newsarticle"
-datatype[].documenttype[].version 0
-datatype[].documenttype[].inherits[].name "document"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].inherits[].name "newssummary"
-datatype[].documenttype[].inherits[].version 0
-datatype[].documenttype[].headerstruct 2098419674
-datatype[].documenttype[].bodystruct 197293167
diff --git a/config-model/src/test/derived/documentderiver/mail.sd b/config-model/src/test/derived/documentderiver/mail.sd
deleted file mode 100644
index 87bf8bada45..00000000000
--- a/config-model/src/test/derived/documentderiver/mail.sd
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search mail {
-
- stemming: none
-
- document mail {
-
- field URI type uri {
- indexing: summary
- summary-to: default, mailid
- }
-
- field mailid type string {
- indexing: summary | index
- match: prefix
- summary-to: default, mailid
- }
-
- field date type int {
- indexing: summary | attribute | index
- match: prefix
- }
-
- field from type string {
- indexing: summary | index
- # index-to: from, sender, address, header, default, all
- match: prefix
- }
-
- field replyto type raw {
- indexing: summary | index
- # index-to: replyto
- match: prefix
- }
-
- field to type string {
- indexing: summary | index
- # index-to: to, recipient, address, header, default, all
- match: prefix
- }
-
- field cc type string {
- indexing: index
- # index-to: cc, recipient, address, header, default, all
- match: prefix
- }
-
- field bcc type string {
- indexing: index
- # index-to: bcc
- match: prefix
- }
-
- field subject type string {
- indexing: summary | index
- # index-to: subject, header, default, all
- match: prefix
- }
-
- field mailbody type raw {
- indexing: summary | index
- # index-to: mailbody, default, all
- match: substring
- body
- }
-
- field attachmentcount type int {
- indexing: summary | index
- body
- }
-
- field attachmentnames type string {
- indexing: index
- # index-to: attachmentname, all
- body
- }
-
- field attachmenttypes type string {
- indexing: index
- # index-to: attachmenttype, all
- body
- }
-
- field attachmentlanguages type string {
- indexing: index
- match: prefix
- body
- }
-
- field attachmentcontent type string {
- indexing: summary | index
- # index-to: attachment, all
- match: prefix
- body
- }
-
- field attachments type raw[] {
- body
- }
-
- }
-
- document-summary default {
- summary snippet type string {
- dynamic
- source: body, attachmentcontent
- }
-
- }
-
-}
-
diff --git a/config-model/src/test/derived/documentderiver/music.sd b/config-model/src/test/derived/documentderiver/music.sd
deleted file mode 100644
index a412d510861..00000000000
--- a/config-model/src/test/derived/documentderiver/music.sd
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search music {
-
- document music {
-
- # Link to album main page
- field url type uri { }
-
- # Title of album
- field title type string { }
-
- # Album artist
- field artist type string { }
-
- # Album production year
- field year type int { }
-
- # Album description - about the album
- field description type raw { }
-
- # Names of the album tracks
- field tracks type array<string> { }
-
- # How many have given this album the grade 0/1/2/3
- field popularity type weightedset<int> { }
-
- # How many have given this album the grade 0/1/2/3
- field popularity2 type weightedset<int> {
- weightedset: create-if-nonexistent
- weightedset: remove-if-zero
- }
-
- # How many have given this album the grade 0/1/2/3
- field popularity3 type weightedset<int> {
- weightedset {
- create-if-nonexistent
- remove-if-zero
- }
- }
-
- }
-
-}
-
diff --git a/config-model/src/test/derived/documentderiver/newsarticle.sd b/config-model/src/test/derived/documentderiver/newsarticle.sd
deleted file mode 100644
index d31c309726e..00000000000
--- a/config-model/src/test/derived/documentderiver/newsarticle.sd
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search newsarticle {
-
- document newsarticle inherits newssummary {
-
- field dynabstract type string {
- indexing: summary
- }
-
- field body type string {
- body
- indexing: summary | index
- # index-to: body, default
- stemming: none
- }
-
- field othersourcenames type string {
- indexing: summary | index
- # index-to: othersourcenames, source
- stemming: none
- }
-
- field author type string {
- indexing: summary | index
- stemming: none
- }
-
- field otherlanguages type string {
- indexing: summary | index
- # index-to: languages
- stemming: none
- }
-
- field charset type string {
- indexing: summary
- stemming: none
- }
-
- field mimetype type string {
- indexing: summary
- stemming: none
- }
-
- field referrerurl type uri {
- indexing: summary | lowercase | tokenize | index
- stemming: none
- }
-
- field sourcelocation type string {
- indexing: summary | index
- stemming: none
- alias: location
- }
-
- field sourcecountry type string {
- indexing: summary | index
- stemming: none
- # index-to: sourcecountry, sourcelocation
- }
-
- field sourcelocale type string {
- indexing: summary | index
- stemming: none
- # index-to: sourcelocale, sourcelocation
- }
-
- field sourcecontinent type string {
- indexing: summary | index
- stemming: none
- # index-to: sourcecontinent, sourcelocation
- }
-
- field articlecountry type string {
- indexing: summary | index
- stemming: none
- }
-
- field articlelocale type string {
- indexing: summary | index
- stemming: none
- }
-
- field articlecontinent type string {
- indexing: summary | index
- stemming: none
- }
-
- field sourcerank type int {
- indexing: summary | index | set_var tmpsourcerank
- }
-
- field crawldate type long {
- indexing: summary | index
- }
-
- field indexdate type long {
- indexing: now | summary | index
- }
-
- field procdate type long {
- indexing: summary | index
- }
-
- field sourceid type int {
- indexing: summary | index
- }
-
- field sourcefeedid type int {
- indexing: summary | index
- }
-
- }
-
- rank-profile date {
- }
-
- rank-profile usrank inherits default {
- }
-
- rank-profile eurank inherits default {
- }
-
- rank-profile asiarank inherits default {
- }
-
-}
diff --git a/config-model/src/test/derived/documentderiver/newssummary.sd b/config-model/src/test/derived/documentderiver/newssummary.sd
deleted file mode 100644
index c0fcf8c2d85..00000000000
--- a/config-model/src/test/derived/documentderiver/newssummary.sd
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search newssummary {
-
- document newssummary {
-
- field title type string {
- indexing: summary | index
- # index-to: title, titleabstract, default
- stemming: none
- alias: headline
- }
-
- field abstract type string {
- indexing: summary | index
- # index-to: abstract, titleabstract, default
- stemming: none
- }
-
- field sourcename type string {
- indexing: summary | index
- # index-to: sourcename, source
- stemming: none
- }
-
- field providername type string {
- indexing: summary | index
- # index-to: providername, source
- stemming: none
- alias: provider
- }
-
- field thumburl type string {
- indexing: summary | lowercase | tokenize | index
- stemming: none
- }
-
- field thumbwidth type int {
- indexing: summary | index
- }
-
- field thumbheight type int {
- indexing: summary | index
- }
-
- field language type string {
- indexing: summary | index
- # index-to: language, languages
- stemming: none
- }
-
- field crawldocid type string {
- indexing: summary
- stemming: none
- }
-
- field url type uri {
- indexing: summary | lowercase | tokenize | index
- stemming: none
- }
-
- field sourceurl type uri {
- indexing: summary | lowercase | tokenize | index
- stemming: none
- }
-
- field categories type string {
- indexing: summary | index
- stemming: none
- alias: category
- alias: cat
- }
-
- field pubdate type long {
- indexing: summary | index | attribute pubdate | set_var tmppubdate
- alias: date
- }
-
- field expdate type long {
- indexing: summary | index
- }
-
- field fingerprint type int {
- indexing: summary | index
- }
-
- field debug type string {
- indexing {
-
- # Initialize variables used for superduper ranking
- 0 | set_var superduperus | set_var superdupereu | set_var superduperasia;
-
- input debug | lowercase | summary | normalize | tokenize | index;
- input debug | lowercase | split ";" | for_each {
- # Loop through each token in debug string
- switch {
- case "superduperus": 10 | set_var superduperus;
- case "superdupereu": 10 | set_var superdupereu;
- case "superduperasia": 10 | set_var superduperasia;
- }
- };
- }
- indexing-rewrite: none
- stemming: none
- }
-
- field attributes type string {
- indexing {
-
- # Initialize variables used for superduper ranking
- 1 | set_var superdupermod;
-
- input attributes | lowercase | summary | normalize | tokenize | index;
- input attributes | lowercase | split ";" | for_each {
- # Loop through each token in attributes string
- switch {
-
- # De-rank PR articles using the following rules:
- # 1. Set editedstaticrank to '1'
- # 2. Subtract 2.5 hours (9000 seconds) from timestamp used in ranking
- # 3. No superduper rank
- case "typepr": 1 | set_var tmpsourcerank | get_var tmppubdate - 9000 | set_var tmppubdate | 0 | set_var superdupermod;
- }
- };
- }
- indexing-rewrite: none
- stemming: none
- }
-
- field searchcluster type string {
- indexing: summary
- stemming: none
- }
-
- field eustaticrank type int {
- indexing {
- get_var tmpsourcerank * 4000 + get_var superdupereu * get_var superdupermod * 1000 + get_var tmppubdate * 0.5 | summary | index | attribute eustaticrank;
- }
- }
-
- field usstaticrank type int {
- indexing {
- get_var tmpsourcerank * 4000 + get_var superduperus * get_var superdupermod * 1000 + get_var tmppubdate * 0.5 | summary | index | attribute usstaticrank;
- }
- }
-
- field asiastaticrank type int {
- indexing {
- get_var tmpsourcerank * 4000 + get_var superduperasia * get_var superdupermod * 1000 + get_var tmppubdate * 0.5 | summary | index | attribute asiastaticrank;
- }
- }
- }
-
- rank-profile date {
- }
-
- rank-profile usrank inherits default {
- }
-
- rank-profile eurank inherits default {
- }
-
- rank-profile asiarank inherits default {
- }
-
-}
diff --git a/config-model/src/test/derived/documentderiver/sombrero.sd b/config-model/src/test/derived/documentderiver/sombrero.sd
deleted file mode 100644
index 00bd80bc42a..00000000000
--- a/config-model/src/test/derived/documentderiver/sombrero.sd
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search webdoc {
- document webdoc {
- #
- # a simple key-value pair
- #
- struct keyvalue {
- field key type string {}
- field value type string {}
- }
-
- #
- # tags have a name and an array of attributes
- #
- struct tagvalue {
- field name type string {}
- # todo: this should be a map of attributes, not an array
- field attributes type array<keyvalue> {}
- }
-
- #
- # wordforms are (kind, form, weight) triplets
- # todo: "kind" should be an enum; check how enums are used.
- #
- struct wordform {
- field kind type int {}
- field form type string {}
- field weight type float {}
- }
-
- #
- # web documents have zero or more HTML source strings
- #
- field html type string {}
- }
-}
diff --git a/config-model/src/test/derived/documentderiver/vsmfields.cfg b/config-model/src/test/derived/documentderiver/vsmfields.cfg
deleted file mode 100644
index cd8bc659398..00000000000
--- a/config-model/src/test/derived/documentderiver/vsmfields.cfg
+++ /dev/null
@@ -1,390 +0,0 @@
-fieldspec[].name sddocname
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "exact"
-fieldspec[].name title
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name abstract
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcename
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name providername
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name thumburl
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name thumbwidth
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name thumbheight
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name language
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name crawldocid
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name url
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourceurl
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name categories
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name pubdate
-fieldspec[].searchmethod INT64
-fieldspec[].arg1 ""
-fieldspec[].name expdate
-fieldspec[].searchmethod INT64
-fieldspec[].arg1 ""
-fieldspec[].name fingerprint
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name debug
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name attributes
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name searchcluster
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name eustaticrank
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name usstaticrank
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name asiastaticrank
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name dynabstract
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name body
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name othersourcenames
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name author
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name otherlanguages
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name charset
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name mimetype
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name referrerurl
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcelocation
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcecountry
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcelocale
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcecontinent
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name articlecountry
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name articlelocale
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name articlecontinent
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name sourcerank
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name crawldate
-fieldspec[].searchmethod INT64
-fieldspec[].arg1 ""
-fieldspec[].name indexdate
-fieldspec[].searchmethod INT64
-fieldspec[].arg1 ""
-fieldspec[].name procdate
-fieldspec[].searchmethod INT64
-fieldspec[].arg1 ""
-fieldspec[].name sourceid
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name sourcefeedid
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name URI
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name mailid
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name date
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name from
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name replyto
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name to
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name cc
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name bcc
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name subject
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name mailbody
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "substring"
-fieldspec[].name attachmentcount
-fieldspec[].searchmethod INT32
-fieldspec[].arg1 ""
-fieldspec[].name attachmentnames
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name attachmenttypes
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 ""
-fieldspec[].name attachmentlanguages
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-fieldspec[].name attachmentcontent
-fieldspec[].searchmethod AUTOUTF8
-fieldspec[].arg1 "prefix"
-documenttype[].name newssummary
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].index[].name title
-documenttype[].index[].field[].name title
-documenttype[].index[].name titleabstract
-documenttype[].index[].field[].name title
-documenttype[].index[].field[].name abstract
-documenttype[].index[].name default
-documenttype[].index[].field[].name title
-documenttype[].index[].field[].name abstract
-documenttype[].index[].name abstract
-documenttype[].index[].field[].name abstract
-documenttype[].index[].name sourcename
-documenttype[].index[].field[].name sourcename
-documenttype[].index[].name source
-documenttype[].index[].field[].name sourcename
-documenttype[].index[].field[].name providername
-documenttype[].index[].name providername
-documenttype[].index[].field[].name providername
-documenttype[].index[].name thumburl
-documenttype[].index[].field[].name thumburl
-documenttype[].index[].name thumbwidth
-documenttype[].index[].field[].name thumbwidth
-documenttype[].index[].name thumbheight
-documenttype[].index[].field[].name thumbheight
-documenttype[].index[].name language
-documenttype[].index[].field[].name language
-documenttype[].index[].name languages
-documenttype[].index[].field[].name language
-documenttype[].index[].name url
-documenttype[].index[].field[].name url
-documenttype[].index[].name sourceurl
-documenttype[].index[].field[].name sourceurl
-documenttype[].index[].name categories
-documenttype[].index[].field[].name categories
-documenttype[].index[].name pubdate
-documenttype[].index[].field[].name pubdate
-documenttype[].index[].name expdate
-documenttype[].index[].field[].name expdate
-documenttype[].index[].name fingerprint
-documenttype[].index[].field[].name fingerprint
-documenttype[].index[].name debug
-documenttype[].index[].field[].name debug
-documenttype[].index[].name attributes
-documenttype[].index[].field[].name attributes
-documenttype[].index[].name eustaticrank
-documenttype[].index[].field[].name eustaticrank
-documenttype[].index[].name usstaticrank
-documenttype[].index[].field[].name usstaticrank
-documenttype[].index[].name asiastaticrank
-documenttype[].index[].field[].name asiastaticrank
-documenttype[].name newsarticle
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].index[].name title
-documenttype[].index[].field[].name title
-documenttype[].index[].name titleabstract
-documenttype[].index[].field[].name title
-documenttype[].index[].field[].name abstract
-documenttype[].index[].name default
-documenttype[].index[].field[].name title
-documenttype[].index[].field[].name abstract
-documenttype[].index[].field[].name body
-documenttype[].index[].name abstract
-documenttype[].index[].field[].name abstract
-documenttype[].index[].name sourcename
-documenttype[].index[].field[].name sourcename
-documenttype[].index[].name source
-documenttype[].index[].field[].name sourcename
-documenttype[].index[].field[].name providername
-documenttype[].index[].field[].name othersourcenames
-documenttype[].index[].name providername
-documenttype[].index[].field[].name providername
-documenttype[].index[].name thumburl
-documenttype[].index[].field[].name thumburl
-documenttype[].index[].name thumbwidth
-documenttype[].index[].field[].name thumbwidth
-documenttype[].index[].name thumbheight
-documenttype[].index[].field[].name thumbheight
-documenttype[].index[].name language
-documenttype[].index[].field[].name language
-documenttype[].index[].name languages
-documenttype[].index[].field[].name language
-documenttype[].index[].field[].name otherlanguages
-documenttype[].index[].name url
-documenttype[].index[].field[].name url
-documenttype[].index[].name sourceurl
-documenttype[].index[].field[].name sourceurl
-documenttype[].index[].name categories
-documenttype[].index[].field[].name categories
-documenttype[].index[].name pubdate
-documenttype[].index[].field[].name pubdate
-documenttype[].index[].name expdate
-documenttype[].index[].field[].name expdate
-documenttype[].index[].name fingerprint
-documenttype[].index[].field[].name fingerprint
-documenttype[].index[].name debug
-documenttype[].index[].field[].name debug
-documenttype[].index[].name attributes
-documenttype[].index[].field[].name attributes
-documenttype[].index[].name eustaticrank
-documenttype[].index[].field[].name eustaticrank
-documenttype[].index[].name usstaticrank
-documenttype[].index[].field[].name usstaticrank
-documenttype[].index[].name asiastaticrank
-documenttype[].index[].field[].name asiastaticrank
-documenttype[].index[].name body
-documenttype[].index[].field[].name body
-documenttype[].index[].name othersourcenames
-documenttype[].index[].field[].name othersourcenames
-documenttype[].index[].name author
-documenttype[].index[].field[].name author
-documenttype[].index[].name referrerurl
-documenttype[].index[].field[].name referrerurl
-documenttype[].index[].name sourcelocation
-documenttype[].index[].field[].name sourcelocation
-documenttype[].index[].field[].name sourcecountry
-documenttype[].index[].field[].name sourcelocale
-documenttype[].index[].field[].name sourcecontinent
-documenttype[].index[].name sourcecountry
-documenttype[].index[].field[].name sourcecountry
-documenttype[].index[].name sourcelocale
-documenttype[].index[].field[].name sourcelocale
-documenttype[].index[].name sourcecontinent
-documenttype[].index[].field[].name sourcecontinent
-documenttype[].index[].name articlecountry
-documenttype[].index[].field[].name articlecountry
-documenttype[].index[].name articlelocale
-documenttype[].index[].field[].name articlelocale
-documenttype[].index[].name articlecontinent
-documenttype[].index[].field[].name articlecontinent
-documenttype[].index[].name sourcerank
-documenttype[].index[].field[].name sourcerank
-documenttype[].index[].name crawldate
-documenttype[].index[].field[].name crawldate
-documenttype[].index[].name indexdate
-documenttype[].index[].field[].name indexdate
-documenttype[].index[].name procdate
-documenttype[].index[].field[].name procdate
-documenttype[].index[].name sourceid
-documenttype[].index[].field[].name sourceid
-documenttype[].index[].name sourcefeedid
-documenttype[].index[].field[].name sourcefeedid
-documenttype[].name music
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].name mail
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].index[].name mailid
-documenttype[].index[].field[].name mailid
-documenttype[].index[].name date
-documenttype[].index[].field[].name date
-documenttype[].index[].name from
-documenttype[].index[].field[].name from
-documenttype[].index[].name sender
-documenttype[].index[].field[].name from
-documenttype[].index[].name address
-documenttype[].index[].field[].name from
-documenttype[].index[].field[].name to
-documenttype[].index[].field[].name cc
-documenttype[].index[].name header
-documenttype[].index[].field[].name from
-documenttype[].index[].field[].name to
-documenttype[].index[].field[].name cc
-documenttype[].index[].field[].name subject
-documenttype[].index[].name default
-documenttype[].index[].field[].name from
-documenttype[].index[].field[].name to
-documenttype[].index[].field[].name cc
-documenttype[].index[].field[].name subject
-documenttype[].index[].field[].name mailbody
-documenttype[].index[].name all
-documenttype[].index[].field[].name from
-documenttype[].index[].field[].name to
-documenttype[].index[].field[].name cc
-documenttype[].index[].field[].name subject
-documenttype[].index[].field[].name mailbody
-documenttype[].index[].field[].name attachmentnames
-documenttype[].index[].field[].name attachmenttypes
-documenttype[].index[].field[].name attachmentcontent
-documenttype[].index[].name replyto
-documenttype[].index[].field[].name replyto
-documenttype[].index[].name to
-documenttype[].index[].field[].name to
-documenttype[].index[].name recipient
-documenttype[].index[].field[].name to
-documenttype[].index[].field[].name cc
-documenttype[].index[].name cc
-documenttype[].index[].field[].name cc
-documenttype[].index[].name bcc
-documenttype[].index[].field[].name bcc
-documenttype[].index[].name subject
-documenttype[].index[].field[].name subject
-documenttype[].index[].name mailbody
-documenttype[].index[].field[].name mailbody
-documenttype[].index[].name attachmentcount
-documenttype[].index[].field[].name attachmentcount
-documenttype[].index[].name attachmentname
-documenttype[].index[].field[].name attachmentnames
-documenttype[].index[].name attachmenttype
-documenttype[].index[].field[].name attachmenttypes
-documenttype[].index[].name attachmentlanguages
-documenttype[].index[].field[].name attachmentlanguages
-documenttype[].index[].name attachment
-documenttype[].index[].field[].name attachmentcontent
-documenttype[].name compressed_header
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].name compressed_both
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
-documenttype[].name compressed_body
-documenttype[].index[].name sddocname
-documenttype[].index[].field[].name sddocname
diff --git a/config-model/src/test/derived/documentderiver/vsmsummary.cfg b/config-model/src/test/derived/documentderiver/vsmsummary.cfg
deleted file mode 100644
index 03513244430..00000000000
--- a/config-model/src/test/derived/documentderiver/vsmsummary.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-fieldmap[].summary snippet
-fieldmap[].document[].field body
-fieldmap[].document[].field attachmentcontent
-fieldmap[].command FLATTENJUNIPER
diff --git a/config-model/src/test/derived/gemini2/gemini.sd b/config-model/src/test/derived/gemini2/gemini.sd
index 01e20c1b30a..8a570e58fa8 100644
--- a/config-model/src/test/derived/gemini2/gemini.sd
+++ b/config-model/src/test/derived/gemini2/gemini.sd
@@ -2,6 +2,12 @@
search gemini {
document gemini {
+ field right type string {
+ indexing: attribute
+ }
+ field wrong type string {
+ indexing: attribute
+ }
}
rank-profile test {
diff --git a/config-model/src/test/derived/inheritancebadtypes/child.sd b/config-model/src/test/derived/inheritancebadtypes/child.sd
deleted file mode 100644
index 3a204e95154..00000000000
--- a/config-model/src/test/derived/inheritancebadtypes/child.sd
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search child {
-document child inherits parent {
- field a type int {
- indexing: index
- }
-}
-}
diff --git a/config-model/src/test/derived/inheritancebadtypes/parent.sd b/config-model/src/test/derived/inheritancebadtypes/parent.sd
deleted file mode 100644
index 4fec1b4179f..00000000000
--- a/config-model/src/test/derived/inheritancebadtypes/parent.sd
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search parent {
-document parent {
- field a type string {
- indexing: index
- }
-}
-}
diff --git a/config-model/src/test/derived/tensor/rank-profiles.cfg b/config-model/src/test/derived/tensor/rank-profiles.cfg
index cb496c06367..471343da63c 100644
--- a/config-model/src/test/derived/tensor/rank-profiles.cfg
+++ b/config-model/src/test/derived/tensor/rank-profiles.cfg
@@ -43,10 +43,14 @@ rankprofile[].fef.property[].value "tensor(x{})"
rankprofile[].fef.property[].name "vespa.type.attribute.f4"
rankprofile[].fef.property[].value "tensor(x[10],y[20])"
rankprofile[].name "profile3"
+rankprofile[].fef.property[].name "rankingExpression(joinedtensors).rankingScript"
+rankprofile[].fef.property[].value "tensor(i[10])(i) * attribute(f4)"
+rankprofile[].fef.property[].name "rankingExpression(joinedtensors).type"
+rankprofile[].fef.property[].value "tensor(i[10],x[10],y[20])"
rankprofile[].fef.property[].name "vespa.rank.firstphase"
rankprofile[].fef.property[].value "rankingExpression(firstphase)"
rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
-rankprofile[].fef.property[].value "reduce(tensor(i[10])(i) * attribute(f4), sum)"
+rankprofile[].fef.property[].value "reduce(rankingExpression(joinedtensors), sum)"
rankprofile[].fef.property[].name "vespa.type.attribute.f2"
rankprofile[].fef.property[].value "tensor(x[2],y[])"
rankprofile[].fef.property[].name "vespa.type.attribute.f3"
diff --git a/config-model/src/test/derived/tensor/tensor.sd b/config-model/src/test/derived/tensor/tensor.sd
index 5792a7997f8..54463448e28 100644
--- a/config-model/src/test/derived/tensor/tensor.sd
+++ b/config-model/src/test/derived/tensor/tensor.sd
@@ -36,7 +36,11 @@ search tensor {
rank-profile profile3 {
first-phase {
- expression: sum(tensor(i[10])(i) * attribute(f4))
+ expression: sum(joinedtensors)
+ }
+
+ function joinedtensors() {
+ expression: tensor(i[10])(i) * attribute(f4)
}
}
diff --git a/config-model/src/test/examples/attributeindex.sd b/config-model/src/test/examples/attributeindex.sd
deleted file mode 100644
index a35be556467..00000000000
--- a/config-model/src/test/examples/attributeindex.sd
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search attributeindex {
- document attributeindex {
-
- field nosettings type string {
- indexing: summary | attribute | index
- }
-
- # Attribute and index have different names
- field specifyname type string {
- indexing: summary | attribute newname | index
- }
-
- # # index-to: with same name as attribute
- field specifyname2 type string {
- indexing: summary | attribute newname2 | index
- # index-to: newname2
- }
-
- field withstaticrankname type string {
- indexing: summary | attribute | index | attribute someothername
- }
- }
-}
diff --git a/config-model/src/test/examples/attributeproperties1.sd b/config-model/src/test/examples/attributeproperties1.sd
deleted file mode 100644
index 233e6656866..00000000000
--- a/config-model/src/test/examples/attributeproperties1.sd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search bolding {
- document test {
-
- # Setting attribute properties for a non-existent attribute should fail
- field batchid type int {
- indexing: summary | index
- attribute {
- prefetch
- }
- }
-
- # ... but this is OK
- field anotherbatchid type int {
- indexing: summary | index | attribute
- attribute {
- prefetch
- }
- }
- }
-}
diff --git a/config-model/src/test/examples/attributeproperties2.sd b/config-model/src/test/examples/attributeproperties2.sd
deleted file mode 100644
index 9c5e3e1a07f..00000000000
--- a/config-model/src/test/examples/attributeproperties2.sd
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search bolding {
- document bolding {
-
- # This is how it usually should be
- field anotherbatchid type int {
- indexing: summary | index | attribute
- attribute {
- prefetch
- }
- attribute: huge
- }
-
- # The attribute is created in the next field
- field bar type int {
- indexing: summary | index
- attribute {
- prefetch
- }
- }
-
- # Creates attribute for the previous field
- field foo type int {
- indexing: input bar | attribute bar
- }
- }
-}
diff --git a/config-model/src/test/examples/duplicatenamesindoc.sd b/config-model/src/test/examples/duplicatenamesindoc.sd
deleted file mode 100644
index 3c55efe953d..00000000000
--- a/config-model/src/test/examples/duplicatenamesindoc.sd
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search duplicatenamesindoc {
-document {
- field foo type int {
- indexing: attribute
- }
-
- field fOo type string {
- indexing: index
- }
-}
-}
diff --git a/config-model/src/test/examples/duplicatenamesinsearchdifferenttype.sd b/config-model/src/test/examples/duplicatenamesinsearchdifferenttype.sd
deleted file mode 100644
index 502a4bb7aff..00000000000
--- a/config-model/src/test/examples/duplicatenamesinsearchdifferenttype.sd
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search duplicatenamesinsearch {
-document {
- field grpphotoids64 type string { }
-}
-
-field grpphotoids64 type array<long> {
- indexing: input grpphotoids64 | split " " | for_each {
- base64decode } | attribute
- }
-
-}
diff --git a/config-model/src/test/examples/incorrectsummarytypes.sd b/config-model/src/test/examples/incorrectsummarytypes.sd
deleted file mode 100644
index 9304ad5ca20..00000000000
--- a/config-model/src/test/examples/incorrectsummarytypes.sd
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-search incorrectsummarytypes {
-
- document incorrectsummarytypes {
-
- field somestring type string {
- indexing: summary
- }
-
- }
-
- document-summary incorrect {
-
- summary somestring type int {
- }
-
- }
-
-}
diff --git a/config-model/src/test/examples/name-check.sd b/config-model/src/test/examples/name-check.sd
deleted file mode 100644
index bd7c0713e3a..00000000000
--- a/config-model/src/test/examples/name-check.sd
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-# An entry-level configuration.
-# You can get a reasonable configuration by only configuring
-# a document
-search simple {
-
- document name-check {
-
- field title type string {
- indexing: summary | index
- }
-
- # reserved name, should trigger error
- field sddocname type string {
- indexing: index
- }
-
- }
-
-}
diff --git a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
index 8331ada2271..528393e4135 100644
--- a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
@@ -14,7 +14,7 @@ import com.yahoo.document.DataType;
import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.io.IOUtils;
import com.yahoo.searchdefinition.Search;
-import com.yahoo.searchdefinition.UnproperSearch;
+import com.yahoo.searchdefinition.DocumentOnlySearch;
import com.yahoo.vespa.config.ConfigDefinition;
import com.yahoo.vespa.config.ConfigDefinitionKey;
import com.yahoo.vespa.model.VespaModel;
@@ -72,7 +72,7 @@ public class ApplicationDeployTest {
case "sock":
break;
case "product":
- assertTrue(s instanceof UnproperSearch);
+ assertTrue(s instanceof DocumentOnlySearch);
assertEquals(s.getDocument().getField("title").getDataType(), DataType.STRING);
break;
default:
diff --git a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
index 5bd95334396..948c62c2343 100644
--- a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
+++ b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java
@@ -133,6 +133,9 @@ public class MockModelContext implements ModelContext {
@Override
public boolean isFirstTimeDeployment() { return false; }
+
+ @Override
+ public boolean useDedicatedNodeForLogserver() { return false; }
};
}
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/application/provider/SchemaValidatorTest.java b/config-model/src/test/java/com/yahoo/config/model/application/provider/SchemaValidatorTest.java
index fda230e22ab..5c4b51ca3fa 100644
--- a/config-model/src/test/java/com/yahoo/config/model/application/provider/SchemaValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/application/provider/SchemaValidatorTest.java
@@ -2,6 +2,7 @@
package com.yahoo.config.model.application.provider;
import com.yahoo.component.Version;
+import com.yahoo.vespa.config.VespaVersion;
import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -65,6 +66,6 @@ public class SchemaValidatorTest {
}
private SchemaValidator createValidator() throws IOException {
- return new SchemaValidators(new Version(6)).servicesXmlValidator();
+ return new SchemaValidators(new Version(VespaVersion.major)).servicesXmlValidator();
}
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
index dd28d45ef4d..786abc3f85a 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
@@ -947,11 +947,11 @@ public class ModelProvisioningTest {
" <nodes count='1'/>" +
" </container>" +
"</services>";
- testContainerOnLogserverHost(services);
+ boolean useDedicatedNodeForLogserver = false;
+ testContainerOnLogserverHost(services, useDedicatedNodeForLogserver);
}
@Test
- @Ignore // Ignore until we create container on logserver implicitly
public void testImplicitLogserverContainer() {
String services =
"<?xml version='1.0' encoding='utf-8' ?>\n" +
@@ -960,7 +960,8 @@ public class ModelProvisioningTest {
" <nodes count='1'/>" +
" </container>" +
"</services>";
- testContainerOnLogserverHost(services);
+ boolean useDedicatedNodeForLogserver = true;
+ testContainerOnLogserverHost(services, useDedicatedNodeForLogserver);
}
@Test
@@ -1751,11 +1752,12 @@ public class ModelProvisioningTest {
// Tests that a container is allocated on logserver host and that
// it is able to get config
- private void testContainerOnLogserverHost(String services) {
+ private void testContainerOnLogserverHost(String services, boolean useDedicatedNodeForLogserver) {
int numberOfHosts = 2;
VespaModelTester tester = new VespaModelTester();
+ tester.useDedicatedNodeForLogserver(useDedicatedNodeForLogserver);
tester.addHosts(numberOfHosts);
- Zone zone = new Zone(SystemName.cd, Environment.prod, RegionName.defaultName());
+ Zone zone = new Zone(SystemName.cd, Environment.dev, RegionName.defaultName());
VespaModel model = tester.createModel(zone, services, true);
assertThat(model.getRoot().getHostSystem().getHosts().size(), is(numberOfHosts));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/ArraysTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/ArraysTestCase.java
index 76ea16e47aa..846166ae93c 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/ArraysTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/ArraysTestCase.java
@@ -12,6 +12,7 @@ import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+
/**
* tests importing of document containing array type fields
*
@@ -21,7 +22,7 @@ public class ArraysTestCase extends SearchDefinitionTestCase {
@Test
public void testArrayImporting() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/arrays.sd");
+ Search search = SearchBuilder.buildFromFile("src/test/examples/arrays.sd");
SDField tags = (SDField)search.getDocument().getField("tags");
assertEquals(DataType.STRING, ((CollectionDataType)tags.getDataType()).getNestedType());
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java
index d7f26cd9851..71db60065aa 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java
@@ -3,11 +3,13 @@ package com.yahoo.searchdefinition;
import com.yahoo.document.StructDataType;
import com.yahoo.searchdefinition.derived.AttributeFields;
+import com.yahoo.searchdefinition.derived.IndexingScript;
import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.tensor.TensorType;
import com.yahoo.vespa.config.search.AttributesConfig;
+import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -154,24 +156,28 @@ public class AttributeSettingsTestCase extends SearchDefinitionTestCase {
assertTrue(attr.isMutable());
}
+ private Search getSearchWithMutables() throws ParseException {
+ return getSearch(
+ "search test {\n" +
+ " document test { \n" +
+ " field a type int { \n" +
+ " indexing: attribute \n" +
+ " }\n" +
+ " }\n" +
+ " field m type long {\n" +
+ " indexing: attribute\n" +
+ " attribute: mutable\n" +
+ " }\n" +
+ " field f type long {\n" +
+ " indexing: 0 | to_long | attribute\n" +
+ " }\n" +
+ "}\n");
+ }
+
@Test
- public void requireThatMutableConfigIsProperlyPropagated() throws ParseException{
+ public void requireThatMutableConfigIsProperlyPropagated() throws ParseException {
- AttributeFields attributes = new AttributeFields(getSearch(
- "search test {\n" +
- " document test { \n" +
- " field a type int { \n" +
- " indexing: attribute \n" +
- " }\n" +
- " }\n" +
- " field m type long {\n" +
- " indexing: 0 | to_long | attribute\n" +
- " attribute: mutable\n" +
- " }\n" +
- " field f type long {\n" +
- " indexing: 0 | to_long | attribute\n" +
- " }\n" +
- "}\n"));
+ AttributeFields attributes = new AttributeFields(getSearchWithMutables());
AttributesConfig.Builder builder = new AttributesConfig.Builder();
attributes.getConfig(builder);
AttributesConfig cfg = new AttributesConfig(builder);
@@ -187,6 +193,21 @@ public class AttributeSettingsTestCase extends SearchDefinitionTestCase {
}
@Test
+ public void requireThatMutableIsAllowedThroughIndexing() throws ParseException {
+ IndexingScript script = new IndexingScript(getSearchWithMutables());
+ IlscriptsConfig.Builder builder = new IlscriptsConfig.Builder();
+ script.getConfig(builder);
+ IlscriptsConfig cfg = new IlscriptsConfig(builder);
+ assertEquals(1, cfg.ilscript().size());
+ IlscriptsConfig.Ilscript ils = cfg.ilscript(0);
+ assertEquals("test", ils.doctype());
+ assertEquals(2, ils.docfield().size());
+ assertEquals("a", ils.docfield(0));
+ assertEquals("m", ils.docfield(1));
+
+ }
+
+ @Test
public void attribute_convert_to_array_copies_internal_state() {
StructDataType refType = new StructDataType("my_struct");
Attribute single = new Attribute("foo", Attribute.Type.STRING, Attribute.CollectionType.SINGLE,
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/IncorrectSummaryTypesTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/IncorrectSummaryTypesTestCase.java
index f11799495a2..627394bb6ea 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/IncorrectSummaryTypesTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/IncorrectSummaryTypesTestCase.java
@@ -17,7 +17,18 @@ public class IncorrectSummaryTypesTestCase extends SearchDefinitionTestCase {
@Test
public void testImportingIncorrect() throws IOException, ParseException {
try {
- SearchBuilder.buildFromFile("src/test/examples/incorrectsummarytypes.sd");
+ SearchBuilder.createFromString(
+ "search incorrectsummarytypes {\n" +
+ " document incorrectsummarytypes {\n" +
+ " field somestring type string {\n" +
+ " indexing: summary\n" +
+ " }\n" +
+ " }\n" +
+ " document-summary incorrect {\n" +
+ " summary somestring type int {\n" +
+ " }\n" +
+ " }\n" +
+ "}\n");
fail("processing should have failed");
} catch (RuntimeException e) {
assertEquals("'summary somestring type string' in 'destinations(default )' is inconsistent with 'summary somestring type int' in 'destinations(incorrect )': All declarations of the same summary field must have the same type", e.getMessage());
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
index c19244a4bf2..b539c65150d 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
@@ -22,7 +22,18 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
@Test
public void testNameField() throws IOException, ParseException {
try {
- SearchBuilder.buildFromFile("src/test/examples/name-check.sd");
+ SearchBuilder.createFromString(
+ "search simple {\n" +
+ " document name-check {\n" +
+ " field title type string {\n" +
+ " indexing: summary | index\n" +
+ " }\n" +
+ " # reserved name, should trigger error\n" +
+ " field sddocname type string {\n" +
+ " indexing: index\n" +
+ " }\n" +
+ " }\n" +
+ "}");
fail("Should throw exception.");
} catch (Exception expected) {
// Success
@@ -32,7 +43,16 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
@Test
public void testDuplicateNamesInSearchDifferentType() {
try {
- SearchBuilder.buildFromFile("src/test/examples/duplicatenamesinsearchdifferenttype.sd");
+ SearchBuilder.createFromString(
+ "search duplicatenamesinsearch {\n" +
+ " document {\n" +
+ " field grpphotoids64 type string { }\n" +
+ " }\n" +
+ " field grpphotoids64 type array<long> {\n" +
+ " indexing: input grpphotoids64 | split \" \" | for_each {\n" +
+ " base64decode } | attribute\n" +
+ " }\n" +
+ "}");
fail("Should throw exception.");
} catch (Exception e) {
assertEquals("For search 'duplicatenamesinsearch', field 'grpphotoids64': Incompatible types. Expected Array<long> for index field 'grpphotoids64', got string.", e.getMessage());
@@ -42,7 +62,17 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
@Test
public void testDuplicateNamesInDoc() {
try {
- SearchBuilder.buildFromFile("src/test/examples/duplicatenamesindoc.sd");
+ SearchBuilder.createFromString(
+ "search duplicatenamesindoc {\n" +
+ " document {\n" +
+ " field foo type int {\n" +
+ " indexing: attribute\n" +
+ " }\n" +
+ " field fOo type string {\n" +
+ " indexing: index\n" +
+ " }\n" +
+ " }\n" +
+ "}");
fail("Should throw exception.");
} catch (Exception e) {
assertTrue(e.getMessage().matches(".*Duplicate.*"));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionLoopDetectionTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionLoopDetectionTestCase.java
index 17bebcba70e..0ff8a5cc7ca 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionLoopDetectionTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionLoopDetectionTestCase.java
@@ -40,7 +40,7 @@ public class RankingExpressionLoopDetectionTestCase {
fail("Excepted exception");
}
catch (IllegalArgumentException e) {
- assertEquals("In search definition 'test', rank profile 'test': The first-phase expression is invalid: Invocation loop: foo -> foo",
+ assertEquals("In search definition 'test', rank profile 'test': The function 'foo' is invalid: Invocation loop: foo -> foo",
Exceptions.toMessageString(e));
}
}
@@ -75,7 +75,7 @@ public class RankingExpressionLoopDetectionTestCase {
fail("Excepted exception");
}
catch (IllegalArgumentException e) {
- assertEquals("In search definition 'test', rank profile 'test': The first-phase expression is invalid: Invocation loop: foo -> arg(5) -> foo",
+ assertEquals("In search definition 'test', rank profile 'test': The function 'foo' is invalid: Invocation loop: arg(5) -> foo -> arg(5)",
Exceptions.toMessageString(e));
}
}
@@ -110,7 +110,7 @@ public class RankingExpressionLoopDetectionTestCase {
fail("Excepted exception");
}
catch (IllegalArgumentException e) {
- assertEquals("In search definition 'test', rank profile 'test': The first-phase expression is invalid: Invocation loop: foo -> arg(foo) -> foo",
+ assertEquals("In search definition 'test', rank profile 'test': The function 'foo' is invalid: Invocation loop: arg(foo) -> foo -> arg(foo)",
Exceptions.toMessageString(e));
}
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionShadowingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionShadowingTestCase.java
index e15d4075b19..4f99922a422 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionShadowingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankingExpressionShadowingTestCase.java
@@ -211,12 +211,16 @@ public class RankingExpressionShadowingTestCase extends SearchDefinitionTestCase
censorBindingHash(testRankProperties.get(1).toString()));
assertEquals("(rankingExpression(hidden_layer).rankingScript,rankingExpression(relu@))",
censorBindingHash(testRankProperties.get(2).toString()));
+ assertEquals("(rankingExpression(hidden_layer).type,tensor(x[]))",
+ censorBindingHash(testRankProperties.get(3).toString()));
assertEquals("(rankingExpression(final_layer).rankingScript,sigmoid(reduce(rankingExpression(hidden_layer) * constant(W_final), sum, hidden) + constant(b_final)))",
- testRankProperties.get(3).toString());
- assertEquals("(vespa.rank.secondphase,rankingExpression(secondphase))",
testRankProperties.get(4).toString());
- assertEquals("(rankingExpression(secondphase).rankingScript,reduce(rankingExpression(final_layer), sum))",
+ assertEquals("(rankingExpression(final_layer).type,tensor(x[]))",
testRankProperties.get(5).toString());
+ assertEquals("(vespa.rank.secondphase,rankingExpression(secondphase))",
+ testRankProperties.get(6).toString());
+ assertEquals("(rankingExpression(secondphase).rankingScript,reduce(rankingExpression(final_layer), sum))",
+ testRankProperties.get(7).toString());
}
private QueryProfileRegistry queryProfileWith(String field, String type) {
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/ReservedWordsAsFieldNamesTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/ReservedWordsAsFieldNamesTestCase.java
index 376832c1649..5a5fc1cc312 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/ReservedWordsAsFieldNamesTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/ReservedWordsAsFieldNamesTestCase.java
@@ -15,7 +15,7 @@ public class ReservedWordsAsFieldNamesTestCase extends SearchDefinitionTestCase
@Test
public void testIt() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/reserved_words_as_field_names.sd");
+ Search search = SearchBuilder.buildFromFile("src/test/examples/reserved_words_as_field_names.sd");
assertNotNull(search.getDocument().getField("inline"));
assertNotNull(search.getDocument().getField("constants"));
assertNotNull(search.getDocument().getField("reference"));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
index 82c03c02f61..127ed7a528b 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
@@ -5,7 +5,11 @@ import com.yahoo.config.model.application.provider.BaseDeployLogger;
import com.yahoo.document.DataType;
import com.yahoo.document.Document;
import com.yahoo.search.query.profile.QueryProfileRegistry;
-import com.yahoo.searchdefinition.document.*;
+import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.RankType;
+import com.yahoo.searchdefinition.document.SDDocumentType;
+import com.yahoo.searchdefinition.document.SDField;
+import com.yahoo.searchdefinition.document.Stemming;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.searchdefinition.processing.MakeAliases;
import com.yahoo.vespa.documentmodel.SummaryTransform;
@@ -27,7 +31,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
@Test
public void testSimpleImporting() throws IOException, ParseException {
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
- SearchBuilder sb = new UnprocessingSearchBuilder(rankProfileRegistry, new QueryProfileRegistry());
+ SearchBuilder sb = new SearchBuilder(rankProfileRegistry, new QueryProfileRegistry());
sb.importFile("src/test/examples/simple.sd");
sb.build();
Search search = sb.getSearch();
@@ -36,7 +40,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
SDDocumentType document = search.getDocument();
assertEquals("simple", document.getName());
- assertEquals(12, document.getFieldCount());
+ assertEquals(25, document.getFieldCount());
SDField field;
Attribute attribute;
@@ -46,7 +50,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
// First field
field=(SDField) document.getField("title");
assertEquals(DataType.STRING,field.getDataType());
- assertEquals("{ summary | index; }", field.getIndexingScript().toString());
+ assertEquals("{ input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }", field.getIndexingScript().toString());
assertTrue(!search.getIndex("default").isPrefix());
assertTrue(search.getIndex("title").isPrefix());
Iterator<String> titleAliases=search.getIndex("title").aliasIterator();
@@ -85,7 +89,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
// Fifth field
field=(SDField) document.getField("popularity");
- assertEquals("{ attribute; }",
+ assertEquals("{ input popularity | attribute popularity; }",
field.getIndexingScript().toString());
// Sixth field
@@ -96,19 +100,19 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
// Seventh field
field= search.getConcreteField("categories");
- assertEquals("{ input categories_src | lowercase | normalize | index; }",
+ assertEquals("{ input categories_src | lowercase | normalize | tokenize normalize stem:\"SHORTEST\" | index categories; }",
field.getIndexingScript().toString());
assertTrue(!field.isHeader());
// Eight field
field= search.getConcreteField("categoriesagain");
- assertEquals("{ input categoriesagain_src | lowercase | normalize | index; }",
+ assertEquals("{ input categoriesagain_src | lowercase | normalize | tokenize normalize stem:\"SHORTEST\" | index categoriesagain; }",
field.getIndexingScript().toString());
assertTrue(field.isHeader());
// Ninth field
field= search.getConcreteField("exactemento");
- assertEquals("{ input exactemento_src | lowercase | index | summary; }",
+ assertEquals("{ input exactemento_src | lowercase | tokenize normalize stem:\"SHORTEST\" | index exactemento | summary exactemento; }",
field.getIndexingScript().toString());
// Tenth field
@@ -153,7 +157,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
assertEquals("exact",exact.getName());
assertEquals(Stemming.NONE,exact.getStemming());
assertTrue(!exact.getNormalizing().doRemoveAccents());
- assertEquals("{ input title . \" \" . input category | summary | index; }",
+ assertEquals("{ input title . \" \" . input category | tokenize | summary exact | index exact; }",
exact.getIndexingScript().toString());
assertEquals(RankType.IDENTITY, exact.getRankType());
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/StemmingSettingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/StemmingSettingTestCase.java
index 5b95789bea4..defff99d51e 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/StemmingSettingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/StemmingSettingTestCase.java
@@ -20,7 +20,7 @@ public class StemmingSettingTestCase extends SearchDefinitionTestCase {
@Test
public void testStemmingSettings() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/stemmingsetting.sd");
+ Search search = SearchBuilder.buildFromFile("src/test/examples/stemmingsetting.sd");
SDField artist = (SDField)search.getDocument().getField("artist");
assertEquals(Stemming.SHORTEST, artist.getStemming(search));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/DocumentDeriverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/DocumentDeriverTestCase.java
deleted file mode 100644
index 8e0f77c941c..00000000000
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/DocumentDeriverTestCase.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.derived;
-
-import com.yahoo.document.*;
-import com.yahoo.searchdefinition.SearchBuilder;
-import com.yahoo.searchdefinition.document.SDDocumentType;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests deriving of documentmanager
- *
- * @author <a href="mailto:mathiasm@yahoo-inc.com">Mathias Moelster Lidal</a>
- */
-public class DocumentDeriverTestCase extends AbstractExportingTestCase {
- @Test
- public void testDocumentDeriving() {
- String root = "src/test/derived/documentderiver/";
-
- List<String> files = new ArrayList<>();
- files.add(root + "newsarticle.sd");
- files.add(root + "newssummary.sd");
- files.add(root + "music.sd");
- files.add(root + "mail.sd");
- files.add(root + "compression_header.sd");
- files.add(root + "compression_both.sd");
- files.add(root + "compression_body.sd");
-
- File toDir = new File("temp/documentderiver/");
- toDir.mkdir();
-
- SearchBuilder builder = Deriver.deriveDocuments(files, toDir.getPath());
- try {
- assertEqualFiles(root + "documentmanager.cfg", toDir.getPath() + "/documentmanager.cfg");
- } catch (IOException e) {
- throw new RuntimeException("Exception while comparing files", e);
- }
-
- SDDocumentType doc = builder.getSearch("newsarticle").getDocument();
- assertNotNull(doc);
- }
- @Test
- public void testStructTypesNotUsed() {
- String root = "src/test/derived/documentderiver/";
-
- List<String> files = new ArrayList<>();
- files.add(root + "sombrero.sd");
-
- File toDir = new File("temp/structtypesnotused/");
- toDir.mkdir();
-
- Deriver.deriveDocuments(files, toDir.getPath());
-
- DocumentTypeManager dtm = new DocumentTypeManager();
- int numBuiltInTypes = dtm.getDataTypes().size();
- dtm.configure("file:" + toDir.getPath() + "/documentmanager.cfg");
-
- DocumentType webDocType = dtm.getDocumentType("webdoc");
- assertNotNull(webDocType);
-
- assertEquals(1, webDocType.fieldSet().size());
- Field html = webDocType.getField("html");
- assertNotNull(html);
- assertEquals(DataType.STRING, html.getDataType());
-
- assertEquals(numBuiltInTypes + 8, dtm.getDataTypes().size());
-
- {
- StructDataType keyvalue = (StructDataType) dtm.getDataType("keyvalue");
- assertNotNull(keyvalue);
- assertEquals(2, keyvalue.getFields().size());
- Field key = keyvalue.getField("key");
- assertNotNull(key);
- assertEquals(DataType.STRING, key.getDataType());
- Field value = keyvalue.getField("value");
- assertNotNull(value);
- assertEquals(DataType.STRING, value.getDataType());
- }
- {
- StructDataType tagvalue = (StructDataType) dtm.getDataType("tagvalue");
- assertNotNull(tagvalue);
- assertEquals(2, tagvalue.getFields().size());
- Field name = tagvalue.getField("name");
- assertNotNull(name);
- assertEquals(DataType.STRING, name.getDataType());
- Field attributes = tagvalue.getField("attributes");
- assertNotNull(attributes);
- assertTrue(attributes.getDataType() instanceof ArrayDataType);
- assertEquals(dtm.getDataType("keyvalue"), ((ArrayDataType) attributes.getDataType()).getNestedType());
- }
- {
- StructDataType wordform = (StructDataType) dtm.getDataType("wordform");
- assertNotNull(wordform);
- assertEquals(3, wordform.getFields().size());
- Field kind = wordform.getField("kind");
- assertNotNull(kind);
- assertEquals(DataType.INT, kind.getDataType());
- Field form = wordform.getField("form");
- assertNotNull(form);
- assertEquals(DataType.STRING, form.getDataType());
- Field weight = wordform.getField("weight");
- assertNotNull(weight);
- assertEquals(DataType.FLOAT, weight.getDataType());
- }
-
- }
-
-}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java
index 2833e0ef004..f37a39d6f93 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/InheritanceTestCase.java
@@ -158,18 +158,4 @@ public class InheritanceTestCase extends AbstractExportingTestCase {
assertEquals(new Index("prefixed", true), childSearch.getIndex("prefixed"));
}
- @Test
- public void testFailTypesMismatch() throws IOException, ParseException {
- String root = "src/test/derived/inheritancebadtypes/";
- List<String> files = new LinkedList<>();
- files.add(root + "parent.sd");
- files.add(root + "child.sd");
- File toDir = tmpDir.newFolder("to");
- try {
- Deriver.deriveDocuments(files, toDir.getPath());
- fail("Import of child SD with type mismatch worked.");
- } catch (RuntimeException e) {
- assertTrue(e.getMessage().matches(".*already contains field 'a'.*"));
- }
- }
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/MailTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/MailTestCase.java
index 8cf1846ed04..187e766c315 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/MailTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/MailTestCase.java
@@ -1,25 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition.derived;
-import com.yahoo.config.ConfigInstance;
-import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.searchdefinition.SearchBuilder;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
import com.yahoo.searchdefinition.parser.ParseException;
-import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg;
import org.junit.Test;
-import org.xml.sax.SAXException;
-
-import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
/**
- * Tests VDS+streaming configuration deriving
+ * Tests streaming configuration deriving
*
* @author bratseth
*/
@@ -33,22 +21,4 @@ public class MailTestCase extends AbstractExportingTestCase {
assertCorrectDeriving(sb, dir);
}
- @Test
- public void testMailDocumentsonlyDeriving() {
- String root = "src/test/derived/mail/";
- File toDir = new File("temp/documentderiver/");
- if (!toDir.exists()) {
- toDir.mkdir();
- }
- List<String> files = new ArrayList<>();
- files.add(root + "mail.sd");
- Deriver.deriveDocuments(files, toDir.getPath());
- try {
- assertEqualFiles(root + "onlydoc/documentmanager.cfg",
- toDir.getPath() + "/documentmanager.cfg");
- } catch (IOException e) {
- throw new RuntimeException("Exception while comparing files", e);
- }
- }
-
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/StreamingStructTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/StreamingStructTestCase.java
index 1691d463fad..1be9ee3f465 100755
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/StreamingStructTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/StreamingStructTestCase.java
@@ -22,18 +22,7 @@ public class StreamingStructTestCase extends AbstractExportingTestCase {
@Test
public void testStreamingStructExplicitDefaultSummaryClass() throws IOException, ParseException {
- // Tests an issue for mail in Vespa 4.1; specific overrides of default summary class
assertCorrectDeriving("streamingstructdefault");
}
- @Test
- public void testStreamingStructDocumentsonlyDeriving() throws IOException {
- String root = "src/test/derived/streamingstruct/";
- String temp = "temp/documentderiver/";
- new File(temp).mkdir();
- Deriver.deriveDocuments(Arrays.asList(root + "streamingstruct.sd"), temp);
- assertEqualFiles(root + "/onlydoc/documentmanager.cfg",
- temp + "/documentmanager.cfg");
- }
-
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributeIndexTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributeIndexTestCase.java
deleted file mode 100644
index 29ab2d9e8e8..00000000000
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributeIndexTestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.processing;
-
-import com.yahoo.searchdefinition.Search;
-import com.yahoo.searchdefinition.SearchDefinitionTestCase;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
-import com.yahoo.searchdefinition.parser.ParseException;
-import org.junit.Test;
-
-import java.io.IOException;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-/**
- * Test AttributeIndex processor.
- *
- * @author hmusum
- */
-public class AttributeIndexTestCase extends SearchDefinitionTestCase {
- @Test
- public void testAttributeIndex() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/attributeindex.sd");
-
- assertTrue(search.getConcreteField("nosettings").getAttributes().get("nosettings") != null);
-
- assertTrue(search.getConcreteField("specifyname").getAttributes().get("newname") != null);
-
- assertTrue(search.getConcreteField("specifyname2").getAttributes().get("newname2") != null);
-
- assertTrue(search.getConcreteField("withstaticrankname").getAttributes().get("withstaticrankname") != null);
-
- assertTrue(search.getConcreteField("withstaticrankname").getAttributes().get("someothername") != null);
- }
-}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java
deleted file mode 100644
index 3a0fedfd550..00000000000
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.processing;
-
-import com.yahoo.config.model.application.provider.BaseDeployLogger;
-import com.yahoo.searchdefinition.RankProfileRegistry;
-import com.yahoo.searchdefinition.Search;
-import com.yahoo.searchdefinition.SearchDefinitionTestCase;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
-import com.yahoo.searchdefinition.parser.ParseException;
-import com.yahoo.vespa.model.container.search.QueryProfiles;
-import org.junit.Test;
-
-import java.io.IOException;
-
-import static org.junit.Assert.fail;
-/**
- * Test AttributeProperties processor.
- *
- * @author hmusum
- */
-public class AttributePropertiesTestCase extends SearchDefinitionTestCase {
-
- @Test
- public void testInvalidAttributeProperties() throws IOException, ParseException {
- try {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/attributeproperties1.sd");
- new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
- fail("attribute property should not be set");
- } catch (RuntimeException e) {
- // empty
- }
- }
-
- @Test
- public void testValidAttributeProperties() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/attributeproperties2.sd");
- new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
- }
-
-}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
index 1ab8b054cb7..ac3ba1d98d9 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
@@ -4,8 +4,8 @@ package com.yahoo.searchdefinition.processing;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.SearchBuilder;
import com.yahoo.searchdefinition.SearchDefinitionTestCase;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.vespa.model.container.search.QueryProfiles;
import org.junit.Test;
@@ -23,7 +23,7 @@ public class BoldingTestCase extends SearchDefinitionTestCase {
@Test
public void testBoldingNonString() throws IOException, ParseException {
try {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/processing/boldnonstring.sd");
+ Search search = SearchBuilder.buildFromFile("src/test/processing/boldnonstring.sd");
new Bolding(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
fail();
} catch (IllegalArgumentException e) {
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java
index 8fb40a73f0a..582f5b08517 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java
@@ -18,27 +18,27 @@ public class IndexingInputsTestCase {
assertBuildFails("src/test/examples/indexing_extra_field_input_extra_field.sd",
"For search 'indexing_extra_field_input_extra_field', field 'bar': Indexing script refers " +
"to field 'bar' which does not exist in document type " +
- "'indexing_extra_field_input_extra_field'.");
+ "'indexing_extra_field_input_extra_field', and is not a mutable attribute.");
}
@Test
public void requireThatExtraFieldInputImplicitThrows() throws IOException, ParseException {
assertBuildFails("src/test/examples/indexing_extra_field_input_implicit.sd",
"For search 'indexing_extra_field_input_implicit', field 'foo': Indexing script refers to " +
- "field 'foo' which does not exist in document type 'indexing_extra_field_input_implicit'.");
+ "field 'foo' which does not exist in document type 'indexing_extra_field_input_implicit', and is not a mutable attribute.");
}
@Test
public void requireThatExtraFieldInputNullThrows() throws IOException, ParseException {
assertBuildFails("src/test/examples/indexing_extra_field_input_null.sd",
"For search 'indexing_extra_field_input_null', field 'foo': Indexing script refers to field " +
- "'foo' which does not exist in document type 'indexing_extra_field_input_null'.");
+ "'foo' which does not exist in document type 'indexing_extra_field_input_null', and is not a mutable attribute.");
}
@Test
public void requireThatExtraFieldInputSelfThrows() throws IOException, ParseException {
assertBuildFails("src/test/examples/indexing_extra_field_input_self.sd",
"For search 'indexing_extra_field_input_self', field 'foo': Indexing script refers to field " +
- "'foo' which does not exist in document type 'indexing_extra_field_input_self'.");
+ "'foo' which does not exist in document type 'indexing_extra_field_input_self', and is not a mutable attribute.");
}
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
index 29bba224f46..a8ba762b32b 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
@@ -4,8 +4,8 @@ package com.yahoo.searchdefinition.processing;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.SearchBuilder;
import com.yahoo.searchdefinition.SearchDefinitionTestCase;
-import com.yahoo.searchdefinition.UnprocessingSearchBuilder;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.vespa.model.container.search.QueryProfiles;
@@ -15,6 +15,7 @@ import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+
/**
* @author baldersheim
*/
@@ -22,8 +23,7 @@ public class IntegerIndex2AttributeTestCase extends SearchDefinitionTestCase {
@Test
public void testIntegerIndex2Attribute() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/integerindex2attribute.sd");
- search.process();
+ Search search = SearchBuilder.buildFromFile("src/test/examples/integerindex2attribute.sd");
new IntegerIndex2Attribute(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
SDField f;
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java
index 0d8cbbf2e6a..1b917b6f3a3 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java
@@ -19,7 +19,7 @@ import static org.junit.Assert.fail;
/**
* @author bratseth
*/
-public class RankingExpressionTypeValidatorTestCase {
+public class RankingExpressionTypeResolverTestCase {
@Test
public void tensorFirstPhaseMustProduceDouble() throws Exception {
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
index d0c1bf8b0ca..dbcfc8c202d 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
@@ -2,8 +2,11 @@
package com.yahoo.searchdefinition.processing;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
-import com.yahoo.searchdefinition.*;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.SearchBuilder;
+import com.yahoo.searchdefinition.SearchDefinitionTestCase;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.vespa.model.container.search.QueryProfiles;
import org.junit.Test;
@@ -11,17 +14,14 @@ import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTestCase {
@Test
public void requireThatInvalidSourceIsCaught() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidsummarysource.sd");
- search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
+ SearchBuilder.buildFromFile("src/test/examples/invalidsummarysource.sd");
fail("This should throw and never get here");
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidsummarysource', summary class 'baz', summary field 'cox': there is no valid source 'nonexistingfield'.", e.getMessage());
@@ -30,10 +30,8 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
@Test
public void requireThatInvalidImplicitSourceIsCaught() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidimplicitsummarysource.sd");
- search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
+ SearchBuilder.buildFromFile("src/test/examples/invalidimplicitsummarysource.sd");
fail("This should throw and never get here");
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidsummarysource', summary class 'baz', summary field 'cox': there is no valid source 'cox'.", e.getMessage());
@@ -42,10 +40,8 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
@Test
public void requireThatInvalidSelfReferingSingleSource() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidselfreferringsummary.sd");
- search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true, false);
+ SearchBuilder.buildFromFile("src/test/examples/invalidselfreferringsummary.sd");
fail("This should throw and never get here");
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidselfreferringsummary', summary class 'withid', summary field 'w': there is no valid source 'w'.", e.getMessage());
@@ -54,8 +50,7 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
@Test
public void requireThatDocumentIdIsAllowedToPass() throws IOException, ParseException {
- Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/documentidinsummary.sd");
- search.process();
+ Search search = SearchBuilder.buildFromFile("src/test/examples/documentidinsummary.sd");
BaseDeployLogger deployLogger = new BaseDeployLogger();
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
new SummaryFieldsMustHaveValidSource(search, deployLogger, rankProfileRegistry, new QueryProfiles()).process(true, false);
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
index 8e721dbe503..6e3a227e2a9 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
@@ -58,8 +58,8 @@ public class TensorTransformTestCase extends SearchDefinitionTestCase {
"max(attribute(tensor_field_1),x)");
assertTransformedExpression("1+reduce(attribute(tensor_field_1),max,x)",
"1 + max(attribute(tensor_field_1),x)");
- assertTransformedExpression("if(attribute(double_field),1+reduce(attribute(tensor_field_1),max,x),0)",
- "if(attribute(double_field),1 + max(attribute(tensor_field_1),x),0)");
+ assertTransformedExpression("if(attribute(double_field),1+reduce(attribute(tensor_field_1),max,x),attribute(tensor_field_1))",
+ "if(attribute(double_field),1 + max(attribute(tensor_field_1),x),attribute(tensor_field_1))");
assertTransformedExpression("reduce(max(attribute(tensor_field_1),attribute(tensor_field_2)),max,x)",
"max(max(attribute(tensor_field_1),attribute(tensor_field_2)),x)");
assertTransformedExpression("reduce(if(attribute(double_field),attribute(tensor_field_2),attribute(tensor_field_2)),max,x)",
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
index 094494073df..e4198115b2a 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
@@ -216,6 +216,9 @@ public class VespaModelFactoryTest {
@Override
public boolean isFirstTimeDeployment() { return false; }
+
+ @Override
+ public boolean useDedicatedNodeForLogserver() { return false; }
};
}
};
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomSearchTuningBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomSearchTuningBuilderTest.java
index a2eccbcb583..0126c58eec5 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomSearchTuningBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomSearchTuningBuilderTest.java
@@ -152,7 +152,6 @@ public class DomSearchTuningBuilderTest extends DomBuilderTest {
String cfg = getProtonCfg(t);
assertThat(cfg, containsString("indexing.write.io DIRECTIO"));
assertThat(cfg, containsString("indexing.read.io NORMAL"));
- assertThat(cfg, containsString("search.io MMAP"));
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/MlModelsTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/MlModelsTest.java
new file mode 100644
index 00000000000..9ed82b9eef5
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/MlModelsTest.java
@@ -0,0 +1,78 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.ml;
+
+import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.io.IOUtils;
+import com.yahoo.path.Path;
+import com.yahoo.vespa.config.search.RankProfilesConfig;
+import com.yahoo.vespa.model.VespaModel;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests rank profile imported model evaluation
+ *
+ * @author bratseth
+ */
+public class MlModelsTest {
+
+ @Test
+ public void testMl_serving() throws IOException {
+ Path appDir = Path.fromString("src/test/cfg/application/ml_models");
+ Path storedAppDir = appDir.append("copy");
+ try {
+ ImportedModelTester tester = new ImportedModelTester("ml_models", appDir);
+ verify(tester.createVespaModel());
+
+ // At this point the expression is stored - copy application to another location which do not have a models dir
+ storedAppDir.toFile().mkdirs();
+ IOUtils.copy(appDir.append("services.xml").toString(), storedAppDir.append("services.xml").toString());
+ IOUtils.copyDirectory(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile(),
+ storedAppDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
+ IOUtils.copyDirectory(appDir.append(ApplicationPackage.SEARCH_DEFINITIONS_DIR).toFile(),
+ storedAppDir.append(ApplicationPackage.SEARCH_DEFINITIONS_DIR).toFile());
+ ImportedModelTester storedTester = new ImportedModelTester("ml_models", storedAppDir);
+ verify(storedTester.createVespaModel());
+ }
+ finally {
+ IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
+ IOUtils.recursiveDeleteDir(storedAppDir.toFile());
+ }
+ }
+
+ private void verify(VespaModel model) {
+ assertEquals("Global models are created (although not used directly here",
+ 4, model.rankProfileList().getRankProfiles().size());
+
+ RankProfilesConfig.Builder builder = new RankProfilesConfig.Builder();
+ model.getSearchClusters().get(0).getConfig(builder);
+ RankProfilesConfig config = new RankProfilesConfig(builder);
+ assertEquals(3, config.rankprofile().size());
+ assertEquals("test", config.rankprofile(2).name());
+ RankProfilesConfig.Rankprofile.Fef test = config.rankprofile(2).fef();
+
+ // Compare string content in a denser for that config:
+ StringBuilder b = new StringBuilder();
+ for (RankProfilesConfig.Rankprofile.Fef.Property p : test.property())
+ b.append(p.name()).append(": ").append(p.value()).append("\n");
+ assertEquals(testProfile, b.toString());
+ }
+
+ private final String testProfile =
+ "rankingExpression(input).rankingScript: attribute(argument)\n" +
+ "rankingExpression(input).type: tensor(d0[],d1[784])\n" +
+ "rankingExpression(Placeholder).rankingScript: attribute(argument)\n" +
+ "rankingExpression(Placeholder).type: tensor(d0[],d1[784])\n" +
+ "rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add).rankingScript: join(reduce(join(rename(rankingExpression(input), (d0, d1), (d0, d4)), constant(mnist_saved_dnn_hidden1_weights_read), f(a,b)(a * b)), sum, d4), constant(mnist_saved_dnn_hidden1_bias_read), f(a,b)(a + b))\n" +
+ "rankingExpression(mnist_tensorflow).rankingScript: join(reduce(join(map(join(reduce(join(join(join(rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), 0.009999999776482582, f(a,b)(a * b)), rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), f(a,b)(max(a,b))), constant(mnist_saved_dnn_hidden2_weights_read), f(a,b)(a * b)), sum, d3), constant(mnist_saved_dnn_hidden2_bias_read), f(a,b)(a + b)), f(a)(1.050701 * if (a >= 0, a, 1.673263 * (exp(a) - 1)))), constant(mnist_saved_dnn_outputs_weights_read), f(a,b)(a * b)), sum, d2), constant(mnist_saved_dnn_outputs_bias_read), f(a,b)(a + b))\n" +
+ "rankingExpression(mnist_softmax_tensorflow).rankingScript: join(reduce(join(rename(rankingExpression(Placeholder), (d0, d1), (d0, d2)), constant(mnist_softmax_saved_layer_Variable_read), f(a,b)(a * b)), sum, d2), constant(mnist_softmax_saved_layer_Variable_1_read), f(a,b)(a + b))\n" +
+ "rankingExpression(mnist_softmax_onnx).rankingScript: join(reduce(join(rename(rankingExpression(Placeholder), (d0, d1), (d0, d2)), constant(mnist_softmax_Variable), f(a,b)(a * b)), sum, d2), constant(mnist_softmax_Variable_1), f(a,b)(a + b))\n" +
+ "rankingExpression(my_xgboost).rankingScript: if (f29 < -0.1234567, if (f56 < -0.242398, 1.71218, -1.70044), if (f109 < 0.8723473, -1.94071, 1.85965)) + if (f60 < -0.482947, if (f29 < -4.2387498, 0.784718, -0.96853), -6.23624)\n" +
+ "vespa.rank.firstphase: rankingExpression(firstphase)\n" +
+ "rankingExpression(firstphase).rankingScript: rankingExpression(mnist_tensorflow) + rankingExpression(mnist_softmax_tensorflow) + rankingExpression(mnist_softmax_onnx) + rankingExpression(my_xgboost)\n" +
+ "vespa.type.attribute.argument: tensor(d0[],d1[784])\n";
+
+}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
index 9e26caf2cb4..22bba9dd079 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
@@ -30,6 +30,8 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
+ * Tests stateless model evaluation (turned on by the "model-evaluation" tag in "container")
+ *
* @author bratseth
*/
public class ModelEvaluationTest {
@@ -58,7 +60,7 @@ public class ModelEvaluationTest {
/** Tests that we do not load models (which will waste memory) when not requested */
@Test
- public void testMl_serving_not_activated() throws IOException {
+ public void testMl_serving_not_activated() {
Path appDir = Path.fromString("src/test/cfg/application/ml_serving_not_activated");
try {
ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
index 1023733a652..060fe96100d 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.model.test;
import com.google.common.collect.ImmutableList;
+import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.ConfigModelRegistry;
import com.yahoo.config.model.NullConfigModelRegistry;
@@ -46,6 +47,7 @@ public class VespaModelTester {
private boolean hosted = true;
private Map<String, Collection<Host>> hostsByFlavor = new HashMap<>();
private ApplicationId applicationId = ApplicationId.defaultId();
+ private boolean useDedicatedNodeForLogserver = false;
public VespaModelTester() {
this(new NullConfigModelRegistry());
@@ -92,6 +94,10 @@ public class VespaModelTester {
applicationId = ApplicationId.from(tenant, applicationName, instanceName);
}
+ public void useDedicatedNodeForLogserver(boolean useDedicatedNodeForLogserver) {
+ this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver;
+ }
+
/** Creates a model which uses 0 as start index and fails on out of capacity */
public VespaModel createModel(String services, String ... retiredHostNames) {
return createModel(Zone.defaultZone(), services, true, retiredHostNames);
@@ -131,6 +137,7 @@ public class VespaModelTester {
DeployProperties properties = new DeployProperties.Builder()
.hostedVespa(hosted)
.applicationId(applicationId)
+ .useDedicatedNodeForLogserver(useDedicatedNodeForLogserver)
.build();
DeployState deployState = new DeployState.Builder()
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
index 3c9618ceccd..8147d2e00ca 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
@@ -10,6 +10,7 @@ import com.yahoo.config.model.api.ValidationParameters.FailOnIncompatibleChange;
import com.yahoo.config.model.api.ValidationParameters.IgnoreValidationErrors;
import com.yahoo.config.model.application.provider.*;
import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.vespa.config.VespaVersion;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.application.validation.Validation;
@@ -50,7 +51,7 @@ public class VespaModelCreatorWithFilePkg {
public void validate() throws IOException {
ApplicationPackageXmlFilesValidator validator =
- ApplicationPackageXmlFilesValidator.create(applicationPkg.getAppDir(), new Version(6));
+ ApplicationPackageXmlFilesValidator.create(applicationPkg.getAppDir(), new Version(VespaVersion.major));
validator.checkApplication();
validator.checkIncludedDirs(applicationPkg);
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
index 78507779585..79a17c23dd7 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
@@ -23,6 +23,7 @@ public class Flavor {
private final double minMainMemoryAvailableGb;
private final double minDiskAvailableGb;
private final boolean fastDisk;
+ private final double bandwidth;
private final String description;
private final boolean retired;
private List<Flavor> replacesFlavors;
@@ -42,6 +43,7 @@ public class Flavor {
this.minMainMemoryAvailableGb = flavorConfig.minMainMemoryAvailableGb();
this.minDiskAvailableGb = flavorConfig.minDiskAvailableGb();
this.fastDisk = flavorConfig.fastDisk();
+ this.bandwidth = flavorConfig.bandwidth();
this.description = flavorConfig.description();
this.retired = flavorConfig.retired();
this.idealHeadroom = flavorConfig.idealHeadroom();
@@ -66,6 +68,8 @@ public class Flavor {
public boolean hasFastDisk() { return fastDisk; }
+ public double getBandwidth() { return bandwidth; }
+
public double getMinCpuCores() { return minCpuCores; }
public String getDescription() { return description; }
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
index 763118dbf03..32718524997 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
@@ -24,7 +24,10 @@ public enum NodeType {
config(false, "Config server"),
/** A host of a (docker) config server node */
- confighost(true, "Config docker host");
+ confighost(true, "Config docker host"),
+
+ /** A controller */
+ controller(true, "Controller");
private final boolean isDockerHost;
private final String description;
diff --git a/config-provisioning/src/main/resources/configdefinitions/flavors.def b/config-provisioning/src/main/resources/configdefinitions/flavors.def
index 63b22958487..1e40f6f8f36 100644
--- a/config-provisioning/src/main/resources/configdefinitions/flavors.def
+++ b/config-provisioning/src/main/resources/configdefinitions/flavors.def
@@ -14,7 +14,7 @@ flavor[].name string
# c may be satisfied by assigning nodes of flavor a.
flavor[].replaces[].name string
-# The monthly Total Cost of Ownership (TCO) in USD. Typically calculated as TCO divered by
+# The monthly Total Cost of Ownership (TCO) in USD. Typically calculated as TCO divided by
# the expected lifetime of the node (usually three years).
flavor[].cost int default=0
@@ -40,6 +40,9 @@ flavor[].minDiskAvailableGb double default=0.0
# Whether the disk is fast (typically SSD) or slow (typically spinning HDD).
flavor[].fastDisk bool default=true
+# Expected network interface bandwidth available for this flavor, in Mbit/s.
+flavor[].bandwidth double default=0.0
+
# Human readable free text for description of node.
flavor[].description string default=""
diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java b/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java
index bd6f5fe99d2..a020c8c8c55 100644
--- a/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java
+++ b/config/src/main/java/com/yahoo/vespa/config/ConfigVerification.java
@@ -17,8 +17,7 @@ import java.util.*;
/**
* Tool to verify that configs across multiple config servers are the same.
*
- * @author lulf
- * @since 5.12
+ * @author Ulf Lilleengen
*/
public class ConfigVerification {
private final static int port = 19071;
diff --git a/config/src/test/java/com/yahoo/vespa/config/classes/app.1.def b/config/src/test/java/com/yahoo/vespa/config/classes/app.1.def
deleted file mode 100644
index df2a57bad04..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/classes/app.1.def
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-message string default="Hello!"
-
-times int default=1
-
-a[].name string
diff --git a/config/src/test/java/com/yahoo/vespa/config/classes/qr-templates.3.def b/config/src/test/java/com/yahoo/vespa/config/classes/qr-templates.3.def
deleted file mode 100644
index d3d7ff87cbd..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/classes/qr-templates.3.def
+++ /dev/null
@@ -1,141 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-## Directory for temporary files
-directory string default="tmp/templates"
-
-hey[].ho[].lets[].go string default="ramones"
-hey[].ho[].lets[].fishing int default=-4 range=[-8,0]
-hey[].ho[].lets[].gone int default=200 range=[0,1000000]
-hey[].ho[].lets[].ref reference
-hey[].ho[].gone int default=2000 range=[-10,2000000]
-hey[].ho[].going bool default=false
-hey[].ho[].wash double default=345.3
-hey[].ho[].me double default=-45.5 range=[-234.43,0]
-hey[].ho[].now double default=-34 range=[-234,0]
-hi[].there[].e enum { BATCH, REALTIME, INCREMENTAL} default=BATCH
-hi[].ther[].f enum { BATCH, REALTIME } default=BATCH
-
-#hey[] int
-mode enum { BATCH, REALTIME, INCREMENTAL} default=BATCH
-bar.arrline[] string
-az[] double
-bar.arline[] int range=[0,999]
-#bar[].version int
-b1[].b2[].b3[].b4[] bool
-## Capacities for all storage nodes
-capacity[] double range=[0,100]
-
-longVal long
-longWithDefault long default=9876543210
-longWithRange long range=[-9000000000,0]
-longArr[] long
-longArrWithRange[] long range=[0,9000000000]
-
-fileVal file
-fileWithDefault file
-fileArr[] file
-
-washing double default=5 range=[-1.4,34.324432]
-washer double default=46 range=[-1.6,54]
-
-urlprefix string
-
-## Prefix to use in queries to choose a given template
-templateset[].urlprefix string
-
-## The MIME type of a given template
-templateset[].mimetype string default="text/html"
-
-## The character set of a given template
-templateset[].encoding string default="iso-8859-1"
-
-## Not used
-templateset[].rankprofile int default=0
-
-
-## Not used in 1.0
-templateset[].keepalive bool default=false
-
-## Header template. Always rendered.
-templateset[].headertemplate string
-
-## Footer template. Always rendered.
-templateset[].footertemplate string
-
-## Nohits template. Rendered if there are no hits in the result.
-templateset[].nohitstemplate string
-
-## Hit template. Rendered if there are hits in the result.
-templateset[].hittemplate string
-
-## Error template. Rendered if there is an error condition. This is
-## not mutually exclusive with the (no)hit templates as such.
-templateset[].errortemplate string
-
-groupsheadertemplate string default="[DEFAULT]"
-
-## Aggregated groups header template.
-## Default rendering is used if missing
-templateset[].groupsheadertemplate string default="[DEFAULT]"
-
-## Aggregated range group template.
-## Default rendering is used if missing
-templateset[].rangegrouptemplate string default="[DEFAULT]"
-
-## Aggregated exact group template
-## Default rendering is used if missing
-templateset[].exactgrouptemplate string default="[DEFAULT]"
-
-## Aggregated groups footer template.
-## Default rendering is used if missing
-templateset[].groupsfootertemplate string default="[DEFAULT]"
-
-## Tags used to highlight results, starting a bolded section.
-## An empty string means the template should no override what
-## was inserted by the search chain.
-templateset[].highlightstarttag string default=""
-## Tags used to highlight results, ending a bolded section
-## An empty string means the template should no override what
-## was inserted by the search chain.
-templateset[].highlightendtag string default=""
-## Tags used to highlight results, separating dynamic snippets
-## An empty string means the template should no override what
-## was inserted by the search chain.
-templateset[].highlightseptag string default=""
-
-## The summary class to use for this template if there is none
-## defined in the query.
-ilscript[].name string
-ilscript[].doctype string
-ilscript[].content[] string
-config[].id reference
-config[].autostart string default="no"
-musum string
-
-auran string
-
-route[].name string
-route[].selector string
-route[].feed string
-
-languages[] string
-languages2[] string
-foolang[].lang[] string
-
-# Maps
-myIntMap{} int
-myStringMap{} string
-myStructMap{}.myInt int
-myStructMap{}.myString string
-myStructMap{}.myIntDef int default=56
-myStructMap{}.myStringDef string default="g"
-
-myStructMap{}.myNestedLeafMap{} long
-myStructMap{}.myNestedArray[] long
-
-myStructMap{}.myNestedMap{}.myLong long
-myStructMap{}.myNestedMap{}.myLongDef long default=-100
-
-myStructMap{}.myStruct.a string
-myStructMap{}.myStruct.b string default="pizza"
-myStructMap{}.myStruct.c file
diff --git a/config/src/test/java/com/yahoo/vespa/config/classes/ranges.1.def b/config/src/test/java/com/yahoo/vespa/config/classes/ranges.1.def
deleted file mode 100644
index 5377b143d77..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/classes/ranges.1.def
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-quux int default=5 range=[,]
-xyzzy double default=5 range=[,]
-longVal long default=5 range=[,]
diff --git a/config/src/test/java/com/yahoo/vespa/config/classes/testfoobar.12.def b/config/src/test/java/com/yahoo/vespa/config/classes/testfoobar.12.def
deleted file mode 100644
index 863ac2b0fed..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/classes/testfoobar.12.def
+++ /dev/null
@@ -1,918 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-longVal long
-longWithDefault long default=8589934592
-
-fileVal file
-fileWithDefault file
-
-vh[] double range=[-300,300]
-bg[] int default=0 range=[-10,10]
-gee[] string
-storage[].feeder[] string
-storage[].distributor[] string
-
-ju[].hu[].tu[] double default=-45 range=[0,1000.1]
-ju[].hu[].wu[] enum { HEY, HO} default=HO
-ju[].hu[].tang[] bool default=false
-ju[].hu[].clan[] int default=45 range=[-90,90]
-ju[].hu[].sann reference
-
-foo string
-headertemplate string
-## If true, the bitvector part of results with number of hits within
-## max bin size will be merged into array form before applying static
-## rank. NB: Setting this to true may reduce performance.
-applystaticranktosmallbitvectors bool default=true
-
-## Size of bitvector cache (in bytes).
-bitvectorcachesize int default=50000000
-
-## Size of boolean occurrence cache (in bytes).
-boolocccachesize int default=100000000
-
-## Size of dictionary cache (in bytes).
-dictcachesize int default=40000000
-
-onedimstruct[].val string
-
-## Size of document info cache (in bytes).
-documentinfocachesize int default=25000000
-
-## Size of filter occurrence cache (in bytes).
-## This cache is used to optimizse exclusion handling.
-## A too small size limit will cause serious performance degradation
-## if the staticfilterindexes keyword is used.
-filterocccachesize int default=30000000
-
-## Size of integer range bitvector cache (in bytes).
-intrangebitvectorcachesize int default=50000000
-
-## Size of integer occurrence cache (in bytes).
-intocccachesize int default=100000000
-
-## Size of phrase occurrence cache (in bytes).
-phrasecachesize int default=150000000
-
-## Size of phrase occurrence index cache (in bytes).
-phraseidxcachesize int default=20000000
-
-## Size of position occurrence cache (in bytes).
-posocccachesize int default=100000000
-
-## The filename of a file specifying which hosts that should have
-## access to the internal web-server of the fsearch process.
-accesslist string default=""
-
-## The filename of the log file for HTTP access.
-accesslog string default=""
-
-## The number of threads to perform async occurrence fetch, i.e.
-## read from posocc and boolocc files and possibly generation of
-## posocc/boolocc arrays for phrases. Async occurrence fetches
-## will use more system CPU but can reduce latency on lightly
-## loaded systems.
-asyncfetchocc int default=0
-
-## specifies the high limit of the ranked result bin.
-## If the percentage of the resultset specified in binsize is higher
-## than this limit, this will be the max size.
-binhigh int default=2147483647
-
-## specifies the lowest possible size of a ranked result. This is
-## the lower ramp of the percentage specified in the binsize variable.
-binlow int default=10000
-
-## specifies the size of the ranked results as a percentage of the
-## total result set size. The percentage can be ramped off with the
-## binlow and binhigh variables. NB: Setting this to 100.0 may lead to
-## seriously reduced performance.
-binsize double default=100.0
-
-## Check cache lines beyond offset + maxhits for blacklisting
-## in order to provide correct "totalhits" for queries with many hits.
-checktrailingcachelines bool default=false
-
-## specifies the number of result entries that are processed when
-## doing site collapsing. Site collapsing is performed by reordering
-## the first collapseentries hits in the result set, listing
-## the best hit from each site first.
-collapseentries int default=200 range=[0,1000000]
-
-## Specifies what is the default field used for collapse
-defaultcollapse string default=""
-
-## specifies the rank penalty for additional hits from a site found
-## during site collapsing. When additional hits from a site are
-## found, the rank values of those hits are reduced by shifting
-## them collapserankshift places to the right.
-collapserankshift int default=0
-
-## The maximum number of active and queued requests. Exceeding
-## requests will be discarded.
-cutofftransportconns int default=1024
-
-## specifies the directory where the dataset resides. Only the
-## directory needs to be specified. fsearch will then read the config
-## files (index.cf) in that directory to discover the structure.
-datasetdir string default=""
-
-## If set to "yes", then fallback to the default index if a query
-## term specifies a non-existing index. If set to "no", then always
-## return 0 hits for a query term that specifies a non-existing index.
-## Note that the result set for the entire query might still contain
-## hits from other query terms unless the invalid query term was an
-## and-term. Default value is "no".
-defaultindexfallback string default="no"
-
-# ???
-docattrhashsize int default=8171
-# ???
-docidhashsize int default=8171
-# ???
-docport int default=0
-
-## If present, the result cache is not flushed due to reload operation
-## unless the document summaries have changed.
-dontflushresultcacheonreload bool default=false
-
-## Colon-delimeted list of catalogs for which negative dictionary
-## entries should not be cached. Default is unset. Most useful for
-## dictionary files that are memorymaped or memorylocked in
-## indextune.cf. Note that the list must start and end with a colon (:).
-dropnegativedictionarycacheentriescatalogs string default=""
-
-## specifies a term (used in an ANDNOT) to be used for filtering ALL queries.
-excludefilter string default=""
-
-## If set to "yes", use of firstoccproximity is enabled. If set to
-## "no", use of firstoccproximity is disabled.
-firstoccproximity string default=""
-
-## If present, the filter occurrence cache is flushed due to reload
-## operation when all queries using the old configuration has completed.
-flushfilteroccscacheonreload bool default=false
-
-## Do not use position occurrence information, even though it might
-## be present in the index.
-forceemptyposoccs bool default=false
-
-## The port to run Fnet Remote Tools (RPC) service on.
-## If set to 0, no FRT service is provided.
-frtport int default=0
-
-## The directory where gid based blacklist files are found.
-## Used for "realtime" indexing setups.
-gidblacklistdir string default="../gidblacklist"
-
-## A semicolon-separated list of index names and index name prefixes
-## defining the set of indexes that are relevant when highlighting
-## query keywords. The terms and phrases from the query targeting any
-## of these indexes will be highlighted when dynamic teasers are
-## generated. In order to separate index names and index name prefixes
-## in the list, index name prefixes have a trailing '*'. Note that
-## index aliases are treated like actual index names. This means that
-## if you have an index relevant for highlighting and an index alias
-## pointing to that index, you need to configure both as relevant for
-## highlighting if you want to highlight keywords targeting both the
-## actual index and the alias. Example config value: "normal*;title".
-## Default config value: "*" (highlight all keywords).
-highlightindexes string default="*"
-
-# ???
-hostname string default=""
-
-## provide a HTTP server at the given port number.
-hport int default=8002
-
-## If true, the TCP_NODELAY option is set on the http connections.
-## This causes non-full packets to be sent even though previously sent
-## data hasn't yet been acknowledged (e.g. due to the delayed ack
-## feature present on various tcp stacks).
-httpdnodelay bool default=false
-
-# ???
-intoccpoolsize int default=32768
-# ???
-intoccpoolstep int default=32768
-# ???
-jobqueuethreads int default=5
-
-## Juniper configuration property map.
-## currently known keys with defaults:
-## [juniper.dynsum.highlight_on] = "<b>"
-## [juniper.dynsum.highlight_off] = "</b>"
-## [juniper.dynsum.continuation] = "..."
-## [juniper.dynsum.length] = "256"
-## [juniper.dynsum.min_length] = "128"
-## [juniper.stem.min_length] = "5"
-## [juniper.stem.max_extend] = "3"
-## [juniper.dynsum.surround_max] = "128"
-## [juniper.dynsum.max_matches] = "3"
-## [juniper.dynsum.escape_markup] = "auto"
-## [juniper.matcher.winsize] = "200"
-## [juniper.dynsum.separators] = "\0x1F\0x1D"
-## [juniper.dynsum.connectors] = "\0x1F\0x1D"
-## [juniper.proximity.factor] = "0.25"
-## [juniper.debug_mask] = "0"
-##
-#junipersetup properties
-
-## The maximum number of HTTP connections.
-maxhttpconns int default=1024
-
-## The maximum interval between a successful read from a socket
-## before timeout, in seconds.
-maxsocksilent double default=5.0
-
-## The maximum number of threads to use.
-maxthreads int default=100
-
-## The maximum number of active requests at any time. Exceeding
-## requests will be queued.
-maxtransportconns int default=15
-
-## If present the index to the document summary file (docsum.idx)
-## is accessed on disk on each access instead of being cached in
-## memory. For experimental use on systems with very many docu-
-## ments but very few actual docsum requests.
-nodocsumidxinmemory bool default=false
-
-## If set then locks on result cache are held only for very
-## short intervals and only a single cache element is locked at a
-## time. This simplifies the mutex locking order, but cause extra
-## load due to queries that would previously first block then use
-## cached value now being fully evaluted.
-nonblockingresultcache bool default=false
-
-## A boolean value controlling removal of several common accented
-## uses of characters, used when matching for highlighting.
-normalize.accentremoval bool default=true
-
-## A boolean value controlling normalizing of LATIN CAPITAL/SMALL
-## LIGATURE OE (U+0152 U+0153) to the string "oe", used when matching
-## for highlighting.
-normalize.ligaturesubstitution bool default=true
-
-## A boolean value controlling normalizing of various accented letters
-## to two chars, for linguistics compatibility.
-normalize.multicharexpansion bool default=true
-
-## A boolean value controlling normalizing of LATIN SMALL LETTER SHARP S
-## (U+00DF) to the string "ss", used when matching for highlighting.
-normalize.sharpssubstitution bool default=true
-
-## If true, queries are still handled during the reload operation
-## (even when the document summaries have changed). If false then
-## queries are stalled until reload has completed.
-overlappedreload bool default=true
-
-## The partition number to report to the connecting fdispatch process
-## if the dataset label didn't specify the partition number.
-partition int default=0
-
-## If set to "yes", use of proximity (cf. proximity and firstoccproximity)
-## will affect phrases in addition to single words. If set to "no",
-## use of proximity is never used for phrases.
-phraseproximity string default=""
-
-## The file name to write the PID of the fsearch process to.
-pidfile string default=""
-
-## Minimum value for maximum value of number of 'posocc' entries
-## for a word. If set to 0, computed as 2 * binlow.
-posbinhigh int default=0
-
-## Maximum value for maximum value of number of 'posocc' entries
-## for a word. If set to 0, computed as min(4 * binhigh, 0x7fffffff)
-posbinlow int default=0
-
-## The maximum value for number of 'posocc' entries for a word,
-## specified as a percentage of the number of documents in the index.
-## If more entries are needed for evaluation, posocc entries are not
-## used for that word and evaluation will be performed without full
-## proximity support. The percentage can be ramped off with the posbinlow
-## and posbinhigh variables. If set to 0, computed as 2.0 * binsize.
-posbinsize double default=0
-
-## If set to "yes", use of posocc files is enabled, except when
-## "forceemptyposoccs" is set or posocc files doesn't exist. If
-## set to "no", use of posocc files is disabled.
-proximity string default=""
-
-## Selects behavior when proximity can be used for two words but
-## not three words while firstoccproximity can be used for three
-## words. If set to "yes", then use proximity for two words. If
-## set to "no", then use firstoccproximity for three words.
-proximitypairbeforefirstoccproximitytriple string default=""
-
-## Selects behavior when proximity can be used for three words but
-## not four words while firstoccproximity can be used for four
-## words. If set to "yes", then use proximity for three words. If
-## set to "no", then use firstoccproximity for four words. The
-## default is "yes".
-proximitytriplebeforefirstoccproximityquad string default=""
-
-## specifies the port number for the persistent internal transport
-## protocol provided for a multi-level dispatch system.
-ptport int default=8003
-
-## a reference to a rank-profiles.def type configuration
-## describing how to rank results. If empty, fsearch loads
-## rank.cf from the dataset directory, see rank.cf(5).
-rankcf reference
-
-## specifies a lower limit for the rankvalue of the results
-## returned from the search node.
-rankcutoff int default=0
-
-## if set, an internal calculation is used for determining a
-## rank cutoff value as above.
-rankcutoffadvanced bool default=false
-
-## Specifies the constant value used in the internal advanced rank
-## cutoff calculations done when the rankcutoffadvanced parameter is set.
-## This roughly reflects the expected rank contribution of
-## one good term.
-rankcutoffadvval int default=0
-
-# ???
-rankinginfopoolsize int default=1048576
-# ???
-rankinginfopoolstep int default=262144
-## Grace period (in seconds) after index reload where old index is
-## still available.
-reloadgraceperiod int default=64
-
-## Maximum number of entries in the resultattributescache.
-resultattributescachequeries int default=0
-## Maximum number of entries in the resultattributescache.
-## 0 means no limitation.
-resultattributescachesize int default=5000000
-
-## The maximum lifetime of a resultcache element in seconds.
-resultcachemaximumlifetime int default=7200
-## The minimum lifetime of a resultcache element in seconds.
-resultcacheminimumlifetime int default=3600
-
-## Maximum number of entries in the resultcache.
-## 0 means no limitation.
-resultcachequeries int default=0
-## Maximum size (in bytes) in the resultcache.
-resultcachesize int default=50000000
-
-# ???
-rewriter.indexes string default=""
-# ???
-rewriter.langfield string default="bsumlanguage"
-# ???
-rewriter.rootdir string default=""
-# ???
-#rewritersetup properties
-
-## Set the number of samples a disk is marked as slow before
-## starting selftest when no progress occurred during the last
-## slowdisksamples samples.
-slowdisklatch int default=1
-
-## Set the number of milliseconds to sleep between each sample of
-## disk state.
-slowdisksamplemillisleep int default=100
-
-## Set the number of nanoseconds to sleep between each sample of
-## disk state. If 0, use slowdisksamplemillisleep instead.
-## Restriction: This option only has effect on FreeBSD
-## using the LinuxThreads port.
-slowdisksamplenanosleep int default=0
-
-## Set the number of contigous disk samples without progress and
-## outstanding requests before a disk is detected as slow.
-## If zero, automatic slowdisk detection is turned off.
-## Recommended value is '20' (when using default values for the
-## other slowdisk detection parameters).
-slowdisksamples int default=0
-
-# ???
-staticfilter string default=""
-
-## specifies a set of indexes for which to optimize exclusion
-## handling. Colon is used to separate index names. Default is unset.
-## The optimization use entries in the filter occurrence cache, thus
-## a too small size limit of the cache will cause serious performance
-## degradation.
-staticfilterindexes string default=""
-
-# ???
-strictbind bool default=false
-
-## Specifies a file containing url coded queries to run as part of self
-## test initiated when a slow disk has been detected.
-testloadfile string default=""
-
-## the type of transport to use. Currently only "fnet" is available.
-transport string default=""
-
-## Specifies the transport access log file used by the http server.
-## The real log file name is created by using the strftime function
-## with the given argument as template.
-transportaccesslog string default=""
-
-## Specifies the interval between transport access log rotation.
-## This is the number of minutes between log rotation, e.g a value
-## of 1440 indicates that the log should be rotated every 24 hour.
-transportaccesslogcycle int default=1440
-
-## Specifies the offset from the start of each cycle when the
-## transport access log should be cycled automatically. The unit
-## is seconds, e.g. a value of 1020 indicates that the log should
-## be cycled at 17 minutes past each cycle.
-transportaccesslogcycleoffset int default=0
-
-## Reference to VSM (Vespa Stream Matcher) configuration. If this is
-## set, fsearch will run in VSM mode.
-vsmconfig reference
-
-## If true, the TCP_NODELAY option is set on the persistent transport
-## connections. This causes non-full packets to be sent even though
-## previously sent data hasn't yet been acknowledged (e.g. due to the
-## delayed ack feature present on various tcp stacks).
-transportnodelay bool default=true
-
-# ???
-wordfolder bool default=false
-# ???
-wordhashsize int default=524269
-# ???
-wordoccpoolsize int default=2097152
-# ???
-wordoccpoolstep int default=524288
-# ???
-wordpoolsize int default=262144
-# ???
-wordpoolstep int default=65536
-
-## Connect spec for transactionlog server.
-tlsspec string default=""
-
-## Document manager config
-documentmanagerconfigid reference
-
-functionmodules[] string restart
-
-specialchars string
-
-tokenlist[].name string
-tokenlist[].tokens[].token string
-tokenlist[].tokens[].replace string default=""
-
-afloat double default=34 range=[0,1002]
-
-## qr-searchers:
-tag.bold.open string default="<hi>"
-tag.bold.close string default="</hi>"
-tag.separator string default="<sep />"
-
-## This array contains the built-in searchers that should
-## normally always run in a Vespa-S system. The actual list is
-## in the global/ directory on the configserver.
-builtin[].searcher string
-
-## If for some reason you need to disable one of the built-in
-## searchers you can set this flag to "false". Handle with great
-## care. You need to match the array index from the global/
-## directory, and this may change depending on versions.
-builtin[].enabled bool default=true
-
-# some searcher specific configuration parameters:
-
-com.yahoo.prelude.searcher.FieldCollapsingSearcher.collapsesize int default=1
-com.yahoo.prelude.searcher.FieldCollapsingSearcher.extrafactor double default=2.0
-com.yahoo.prelude.searcher.FieldCollapsingSearcher.collapsefield string default="mid"
-
-com.yahoo.prelude.searcher.BlendingSearcher.numthreads int default=200
-com.yahoo.prelude.searcher.BlendingSearcher.docid string default=""
-
-com.yahoo.prelude.searcher.BoldingSearcher.source string default=""
-
-com.yahoo.prelude.searcher.JuniperSearcher.source string default=""
-com.yahoo.prelude.searcher.JuniperSearcher.defaultdoctype string default=""
-
-com.yahoo.prelude.searcher.XMLStringSearcher.source string default=""
-
-## relevancy as measured from the backend will usually be
-## normalized into the [0,1000] range to make blending between
-## several backends with different relevancy models possible; you
-## can elect to skip this if you only have backends using
-## relevancy scores that are directly comparable.
-com.yahoo.prelude.fastsearch.FastSearcher.skipnormalizing bool default=true
-
-## how many aggregation groups to fetch from the backend
-com.yahoo.prelude.grouping.AggregatingSearcher.maxgroups int default=100
-
-com.yahoo.prelude.querytransform.PhrasingSearcher.automatonfile string default=""
-com.yahoo.prelude.querytransform.NonPhrasingSearcher.automatonfile string default=""
-com.yahoo.prelude.querytransform.TermReplacingSearcher.termlist[] string
-com.yahoo.prelude.querytransform.CompleteBoostSearcher.source string default=""
-
-com.yahoo.prelude.querytransform.ExactStringSearcher.source string default=""
-com.yahoo.prelude.querytransform.LiteralBoostSearcher.source string default=""
-com.yahoo.prelude.querytransform.TermBoostSearcher.source string default=""
-com.yahoo.prelude.querytransform.NormalizingSearcher.source string default=""
-com.yahoo.prelude.querytransform.StemmingSearcher.source string default=""
-
-com.yahoo.prelude.statistics.StatisticsSearcher.latencybucketsize int default=30
-
-
-# here users may add their custom searchers
-# (all strings should be class names)
-customizedsearchers.rawquery[] string
-customizedsearchers.transformedquery[] string
-customizedsearchers.blendedresult[] string
-customizedsearchers.unblendedresult[] string
-customizedsearchers.backend[] string
-customizedsearchers.argument[].key string
-customizedsearchers.argument[].value string
-
-## This is for adding searchers which should be below BlendingSearcher,
-## but not be linked to any Vespa cluster (directly).
-external[].name string
-external[].searcher[] string
-
-# Search cluster specific information.
-## Name of search cluster.
-searchcluster[].name string default=""
-
-## Names of search definitions served by search cluster.
-searchcluster[].searchdef[] string
-
-## configid that may be used to get rank-profiles config for the cluster.
-searchcluster[].rankprofiles.configid reference default=""
-
-## Indexing mode of search cluster.
-searchcluster[].indexingmode enum { REALTIME, STREAMING } default=REALTIME
-
-## Storage cluster to use for search cluster if indexingmode is streaming.
-searchcluster[].storagecluster string default=""
-
-# The available dispatchers on each search cluster
-searchcluster[].dispatcher[].host string
-searchcluster[].dispatcher[].port int
-
-## The number of least significant bits of the part id used to specify the
-## row number (the rest of the bits specifies the column). Don't touch
-## this unless you know why you are doing it.
-searchcluster[].rowbits int default=0
-
-
-# 4 search-cluster-specific overrides of global cache parameters:
-
-## Internal searcher cache. Size is measured in megabytes of raw packet
-## size. Hits larger than 1% of total cache size will not be cached.
-searchcluster[].cache.size int default=1
-
-## Timeout for internal searcher cache. Entries older than this number
-## of seconds will be removed from cache. 0 means no cache timeout.
-## If cachetimeoutseconds is used, the cache is not purged when reindexing.
-searchcluster[].cache.timeout int default=-1
-
-## If timeoutwithpurging is set, the index will be purged (possibly
-## gradually) when index switching occurs, even if cache timeout > 0.
-## Not used if cache timeout is 0. If searchcluster[].cache.timeout is
-## not explicitly set, the global value will be used instead of the one
-## set locally.
-searchcluster[].cache.timeoutwithpurging bool default=false
-
-## Gradual cache switching causes the index to only be gradually purged
-## when cache switching occurs. cacheswitchseconds is the length of the period
-## when a given cache entry may be from either the previous or current
-## index. Setting it to 0 makes QRS purges the cache entirely when a new
-## index becomes available. At the end of the cacheswitchseconds period,
-## the cache will be cleaned of any remaining entries from the previous
-## index.
-searchcluster[].cache.switchseconds int default=-1
-
-# Per dispatcher config-id might be nice to have, remove it until needed.
-# searchcluster[].dispatcher[].configid reference
-
-# rank-profiles
-## name of this rank profile. maps to table index for internal use.
-rankprofile[].name string
-
-## the name of a generic property available to the feature execution framework and feature plugins
-rankprofile[].fef.property[].name string
-
-## the value of a generic property available to feature plugins
-rankprofile[].fef.property[].value string
-
-## the catalog name overrides apply to
-rankprofile[].catalog[].name string
-
-## Boost value for AND queries in this catalog.
-rankprofile[].catalog[].andboost int default=0
-
-## Boost value for OR queries in this catalog.
-rankprofile[].catalog[].orboost int default=0
-
-## Boost value for ANY queries in this catalog.
-rankprofile[].catalog[].anyboost int default=0
-
-## Boost value for NEAR queries in catalog.
-rankprofile[].catalog[].nearboost int default=0
-
-## Boost value for ORDEREDNEAR queries in this catalog.
-rankprofile[].catalog[].orderednearboost int default=0
-
-## Boost value for phrase queries in this catalog.
-rankprofile[].catalog[].phraseboost int default=0
-
-## Boost value for all queries in catalog.
-rankprofile[].catalog[].rankboost int default=0
-
-## If true, the context boost is the max value of
-## the individual contextboosts.
-## When false, the context boost when a term is in
-## several contexts is the sum of the individual contextboosts.
-rankprofile[].catalog[].bestcontextboostonly bool default=false
-
-
-## If true, then use extnumoccboost only when calculating rank values.
-## Also, do not normalize the extnumoccboost value with
-## global term frequency. Default value is false.
-rankprofile[].catalog[].extnumoccboostonly bool default=false
-
-## If yes, then use extnumoccboost only when calculating rank values.
-## Also, do not normalize the extnumoccboost value with
-## global term frequency. Default value is no.
-rankprofile[].catalog[].numoccandextnumoccboostonly bool default=false
-
-## If yes, then use bitvectors when possible.
-## Default value is false.
-rankprofile[].catalog[].preferbitvector bool default=false
-
-## Load extnumoccboost for this catalog from the named file.
-## extnumoccboost specifies boost values due to the number of
-## occurences of a term that are external to the document. If
-## "NULL" is given as file name, then all extnumoccboost values
-## will be set to 0.
-rankprofile[].catalog[].extnumoccboost.table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load numoccboost for this catalog from the named file.
-## numoccboost specifies boost values due to the number of occurences in
-## a document. If "NULL" is given as file name, then all numoccboost
-## values will be set to 0.
-rankprofile[].catalog[].numoccboost.table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load firstoccboost for catalog from the file named.
-## firstoccboost specifies boost values due to the position of the
-## first occurence in a document. If "NULL" is given as file name,
-## then all firstoccboost values will be set to 0.
-rankprofile[].catalog[].firstoccboost.table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-
-## Load firstoccproximityboost for this catalog from the file named.
-## firstoccproximity boost specifies boost values due to the correlation between
-## positions of the first occurence in a document for two and two words.
-##
-## If "NULL" is given as file name, then all
-## firstoccproximityboost values will be set to 0. If otherwise set,
-## should be the name of a file to load into the table. The file
-## should have 256 lines each containing a single integer.
-##
-## There are 256 elements in the table, handling forward distances from 1.
-## The corresponding firstoccrevproximityboost table is used
-## to handle closeness in reverse order.
-##
-## The last array index specifies the proximity table set. During
-## evaluation, the bigram proximity weight supplied by the query segmenter
-## specifies which proximity table set to use, with a fallback to set 0
-## when no information is available.
-rankprofile[].catalog[].firstoccproximityboost[].table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load firstoccrevproximityboost table for this catalog from the named file.
-## Specifies boost values due to the correlation between positions
-## of the first occurence in a document for two and two words when
-## the second word in the query comes first in the document.
-## See also firstoccproximityboost above.
-rankprofile[].catalog[].firstoccrevproximityboost[].table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load proximityboost for this catalog from the named file.
-## proximity boost specifies boost values due to the correlation between
-## positions of the occurences in a document for two and two words.
-## See also firstoccproximityboost above.
-rankprofile[].catalog[].proximityboost[].table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load revproximityboost for this catalog from the named file.
-## revproximity boost specifies boost values due to the correlation between
-## positions of the occurences in a document for two and two words.
-## See also firstoccproximityboost above.
-rankprofile[].catalog[].revproximityboost[].table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## Load divtable for this catalog from the named file.
-## Rank values for a query term are divided by the entry
-## in divtable indexed by log2 of term frequence.
-## The file should contain ?? lines each with a single integer.
-rankprofile[].catalog[].divtable string default=""
-
-## The name of a context in this catalog to specify boosts for.
-rankprofile[].catalog[].context[].name string
-
-## Boost occurrences in this context with the given value.
-## XXX -1 uses default (???) from somewhere(TM).
-rankprofile[].catalog[].context[].contextboost int default=0
-
-## Boost pair of occurrences in this context with
-## the given value when evaluating 2 words from same catalog in
-## parallell.
-## XXX -1 uses default (???) from somewhere(TM).
-rankprofile[].catalog[].context[].commoncontextboost.pair int default=0
-
-## Boost triple of occurrences in this context with
-## the given value when evaluating 3 words from same catalog in
-## parallell.
-## XXX -1 uses default (???) from somewhere(TM).
-rankprofile[].catalog[].context[].commoncontextboost.triple int default=0
-
-## Boost quad of occurrences in this context with
-## the given value when evaluating 4 words from same catalog in
-## parallell.
-## XXX -1 uses default (???) from somewhere(TM).
-rankprofile[].catalog[].context[].commoncontextboost.quad int default=0
-
-
-## The name of the attribute
-rankprofile[].attribute[].name string
-
-## Boost value for queries that hit in this attribute
-rankprofile[].attribute[].attributecontextboost int default=0
-
-## Load weightboost for this attribute from the named file.
-## weightboost specifies boost values due to the weight (weighted set)
-## or number of occurences (single, array) in an attribute.
-## If "NULL" is given as file name, then all weightboost values will be set to 0.
-rankprofile[].attribute[].weightboost.table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-
-## Load static rank values from the given staticrank docattr vector.
-## Must be specified in index.cf as a staticrankfile.
-rankprofile[].staticrankfile string default=""
-
-## Multiply static rank values with given value when calculating total
-## rank value.
-rankprofile[].staticcoefficient int default=1
-
-## If false then use only static ranking when sorting result hits.
-## Default is true.
-rankprofile[].dynamicranking bool default=true
-
-## If dynamic ranking is turned off, then ascending will sort the
-## result hits with lowest static rank values first, while
-## descending will sort with highest static rank values
-## first. Default is descending. This keyword has no effect if
-## dynamic ranking is on.
-rankprofile[].staticranksortorder string default="descending"
-
-## Load static rank mapping from the file named table. The static
-## rank mapping maps each 8-bit static rank value into a 32-bit static
-## rank value. This option may only be used with 8-bit static rank files.
-rankprofile[].staticrankmap string default=""
-
-## If set to "true", total rank will be reduced when dynamic rank is less than
-## 25% of static rank, to suppress irrelevant hits from popular sites.
-## If set to "false", total rank is not reduced.
-rankprofile[].clampstaticrank bool default=false
-
-## Load document datetime values used for freshness boost calculation from
-## this file. The values must be coded as minutes since
-## 1900-01-01T00:00Z. The value 0 has the special meaning
-## "no datetime value exists".
-rankprofile[].freshnessboost.file string default=""
-
-## Load freshnessboost lookup-table values from the file named
-## table instead of using built-in default values. The file must
-## contain 32 white-space separated non-negative integers.
-rankprofile[].freshnessboost.table string default="/home/vespa/conf/vespa/search/ranktables/constant-0000"
-
-## When calculating the freshness boost value multiply difference between
-## current datetime and document datetime with timeoffset before taking
-## the base-2 logarithm. Default value is 1. Max value is 31.
-rankprofile[].freshnessboost.timeoffset int default=1
-
-## If a document has datetime value 0, then use defaultboostvalue
-## as freshness boost value instead of doing table lookup. The default
-## default value is 0 (no boost).
-rankprofile[].freshnessboost.defaultboostvalue int default=0
-
-## Multiply freshness boost value with coefficient when calculating
-## total freshness boost value. If coefficient 0 is used, no freshness
-## boost value will be computed or added. Default value is 0.
-rankprofile[].freshnessboost.coefficient int default=0
-
-## boost table files for distance ranking, 1 dimension.
-## The tables have 465 elements each, where slots 0..15 represents
-## distances 0..15 while the remaining slots represents distance
-## (16 + (slot & 15)) << ((slot >> 4) - 1). Linear interpolation is
-## used for distances "between" table slots.
-##
-## If "NULL" is given as the file name then all 1D distance boost values
-## for that table will be set to 0.
-rankprofile[].distance1dboosttable[].table string
-
-## boost table files for distance ranking, 2 dimensions.
-## The tables have 977 elements each, where slots 0..15 represents
-## square of distance being 0..15 while the remaining slots represents
-## square of distance distance being
-## (16 + (slot & 15)) << ((slot >> 4) - 1). Linear interpolation is
-## used for distances "between" table slots.
-##
-## If "NULL" is given as the file name then all 2D distance boost values
-## for that table will be set to 0.
-rankprofile[].distance2dboosttable[].table string
-
-## The lowest possible size of a ranked result. This is the lower ramp
-## of the percentage specified in the binsize variable. The default is
-## specified in fsearchrc.
-rankprofile[].binlow int default=-1
-
-## The high limit of the ranked result bin. If the percentage of the
-## resultset specified in binsize is higher than this limit, this will be
-## the max size. The default is specified in fsearchrc.
-rankprofile[].binhigh int default=-1
-
-## The size of the ranked results as a percentage of the total result
-## set size. The percentage can be ramped off with the binlow and binhigh
-## variables. The default is specified in fsearchrc.
-rankprofile[].binsize double default=-1
-
-## Minimum value for maximum value of number of 'posocc' entries for a word.
-## The default is specified in fsearchrc.
-rankprofile[].posbinlow int default=-1
-
-## Maximum value for maximum value of number of 'posocc' entries for a word.
-## The default is specified in fsearchrc.
-rankprofile[].posbinhigh int default=-1
-
-## The maximum value for number of 'posocc' entries for a word, specified
-## as a percentage of the number of documents in the index. If more
-## entries are needed for evaluation, posocc entries are not used for that
-## word and evaluation will be performed without full proximity support.
-## The percentage can be ramped off with the posbinlow and posbinhigh
-## variables. The default is specified in fsearchrc.
-rankprofile[].posbinsize int default=-1
-
-## After all other rank calculations, the rank value is tuned according
-## to the tunefactor and tunebias values. The rank value is modified
-## as follows: new_rank = old_rank * tunefactor + tunebias.
-rankprofile[].tunefactor double default=1.0
-
-## After all other rank calculations, the rank value is tuned according
-## to the tunefactor and tunebias values. The rank value is modified
-## as follows: new_rank = old_rank * tunefactor + tunebias.
-rankprofile[].tunebias int default=0
-
-## A lower limit for the rankvalue of the results returned from the
-## search node. If rankcutoff.advanced is set to "true", determines
-## the constant value used in the internal advanced rank cutoff
-## calculations. This roughly reflects the expected rank contribution
-## of one good term.
-## The rankcutoff.val value and the rankcutoff.advanced parameter
-## may be used if you only want hits with a minimum relevancy to show
-## up in the resultset.
-## A value below zero means no rankcutoff is done.
-rankprofile[].rankcutoff.val int default=-1
-
-## When rankcutoff.val is in use, this flag controls whether to use
-## an internal calculation is used for determining the rank cutoff
-## value. If "false", use rankcutoff.val as a direct lower limit.
-rankprofile[].rankcutoff.advanced bool default=false
-
-## If set to "ON", use of posocc files is enabled, except when
-## "forceemptyposoccs" is set in fsearchrc or posocc files doesn't exist.
-## If set to "OFF", use of posocc files is disabled.
-## If "NOTSET" the fsearchrc "proximity" parameter is used instead.
-rankprofile[].proximity.full.enable enum { OFF, ON, NOTSET } default=NOTSET
-
-## If set to "ON", use of firstoccproximity is enabled.
-## If set to "OFF", use of firstoccproximity is disabled.
-## When NOTSET use the firstoccproximity value in fsearchrc configuration.
-rankprofile[].proximity.firstocc.enable enum { OFF, ON, NOTSET } default=NOTSET
-
-## If set to "ON", use of proximity (cf. proximity and firstoccproximity)
-## will affect phrases in addition to single words.
-## If set to "OFF", proximity is never used for phrases.
-## When NOTSET use the phraseproximity value in fsearchrc configuration.
-rankprofile[].proximity.phrase.enable enum { OFF, ON, NOTSET } default=NOTSET
-
-## Selects behavior when proximity can be used for two words but not three
-## words while firstoccproximity can be used for three words.
-## If set to "ON", then use proximity for two words.
-## If set to "OFF", then use firstoccproximity for three words.
-## When NOTSET use the proximitypairbeforefirstoccproximitytriple value
-## in fsearchrc configuration.
-rankprofile[].proximity.pairbeforefirstocctriple.enable enum { OFF, ON, NOTSET } default=NOTSET
-
-## Selects behavior when proximity can be used for three words but not four
-## words while firstoccproximity can be used for four words.
-## If set to "ON", then use proximity for three words.
-## If set to "OFF", then use firstoccproximity for four words.
-## When NOTSET use the proximitytriplebeforefirstoccproximityquad value
-rankprofile[].proximity.triplebeforefirstoccquad.enable enum { OFF, ON, NOTSET } default=NOTSET
diff --git a/config/src/test/java/com/yahoo/vespa/config/configsglobal/qr-templates.3.cfg b/config/src/test/java/com/yahoo/vespa/config/configsglobal/qr-templates.3.cfg
deleted file mode 100644
index 345c20157f9..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/configsglobal/qr-templates.3.cfg
+++ /dev/null
@@ -1,111 +0,0 @@
-washing -0.45
-washer 0
-hey[2]
-hey[0].ho[1]
-hey[0].ho[0].lets[3]
-hey[0].ho[0].lets[0].go "slayer"
-hey[0].ho[0].lets[0].fishing -1
-hey[0].ho[0].lets[0].ref JA
-hey[0].ho[0].lets[1].go "gate"
-hey[0].ho[0].lets[1].ref :parent:
-hey[0].ho[0].lets[str].go "strung"
-hey[0].ho[0].me 0.0
-hey[fooo].ho[0]
-
-hey[0] 78
-
-longVal 500
-longWithRange -9000000000
-longArr[2]
-longArr[0] 0
-longArr[1] 1
-longArrWithRange[1]
-longArrWithRange[0] 9000000000
-
-bar.arrline[0] "foo"
-bar.arrline[1] "bar"
-
-fileVal "/nodefault/file"
-fileArr[2]
-fileArr[0] "keyb.com"
-fileArr[1] "2b4a64d0cb36d44ba8a52506d9fe480bf3511be6"
-
-urlprefix "foo"
-templateset[2]
-templateset[0].urlprefix "/basic"
-#templateset[0].mimetype "text/xml"
-templateset[0].encoding "ut\"f-8\n' <hit relevancy=\"$relevancy\">\n#foreach"
-templateset[0].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resultset totalhits=\"$result.hitCount\">\n"
-templateset[0].footertemplate "</resultset>\n"
-templateset[0].nohitstemplate "<empty/>\n"
-templateset[0].hittemplate "<hit relevancy=\"$relevancy\">\n#foreach( $key in $hit.getPropertyKeySet() )\n <field name='$key'>$hit.getPropertyXML($key)</field>\n#end\n</hit>\n"
-templateset[0].errortemplate "<ERROR CODE=\"$result.error.code\">$result.error.message</ERROR>\n"
-templateset[1].urlprefix "/xsearch"
-templateset[1].mimetype "text/xml"
-templateset[1].encoding "utf-8"
-templateset[1].rankprofile 0
-templateset[1].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<RESULTSET TOTALHITS=\"$result.hitCount\">\n"
-templateset[1].footertemplate "</RESULTSET>\n"
-templateset[1].nohitstemplate "0.56"
-templateset[1].hittemplate "<HIT RELEVANCY=\"$relevancy\" TYPE=\"$hit.typeString\">\n<FIELD NAME=\"uri\">$uri</FIELD>\n<FIELD NAME=\"category\">$category</FIELD>\n<FIELD NAME=\"bsumtitle\">$bsumtitle</FIELD>\n</HIT>\n"
-templateset[1].errortemplate "45"
-config[0].id :parent:
-config[0].autostart
-hi[0].there[0].e BATCH
-ilscript[music].name music
-ilscript[music].doctype music
-ilscript[music].content[1]
-ilscript[music].content[0] "\"music\" | summary sddocname | lowercase | index sddocname;"
-
-musum *
-
-auran "value=\"Confirm\"/></form>\"\"Tuna - step three."
-
-route[1]
-route[0].name "search/cluster.books2"
-route[0].selector "books.isbn=\"none\""
-route[0].feed "books"
-
-languages[3]
-languages[2] "swahili"
-
-languages2[2]
-languages2[0] "swedish"
-
-foolang[5]
-foolang[0].lang[3]
-foolang[0].lang[1] "Swahili"
-foolang[1].lang[3]
-foolang[2].lang[3]
-foolang[2].lang[0] "Setswana"
-foolang[3].lang[4]
-foolang[3].lang[3] "Norwegian"
-foolang[4].lang[2]
-
-myIntMap{"foo"} 67
-myIntMap{"bar"} 68
-myStringMap{"fo"} "gh"
-myStringMap{"ba"} "ij"
-myStructMap{"FOO"}.myInt 78
-myStructMap{"FOO"}.myString "myFoo"
-myStructMap{"FOOO"}.myInt 89
-myStructMap{"FOOO"}.myString "myFooS"
-myStructMap{"FOOO"}.myIntDef -99
-myStructMap{"FOOO"}.myStringDef "myFooSBall"
-
-myStructMap{"FOO"}.myStruct.a "guitar"
-myStructMap{"FOO"}.myStruct.c /tmp
-
-myStructMap{"FOOO"}.myStruct.a "bass"
-myStructMap{"FOOO"}.myStruct.b "drums"
-myStructMap{"FOOO"}.myStruct.c /var/log
-
-myStructMap{"FOO"}.myStructNestedArray[0] -9
-myStructMap{"FOO"}.myStructNestedArray[1] -10
-
-myStructMap{"FOO"}.myNestedLeafMap{"Nested1"} 90
-myStructMap{"FOO"}.myNestedLeafMap{"Nested2"} 9000
-
-myStructMap{"FOO"}.myNestedMap{"Nested3"}.myLong 809
-myStructMap{"FOO"}.myNestedMap{"Nested3"}.myLongDef 810
-myStructMap{"FOO"}.myNestedMap{"Nested4"}.myLong 811
diff --git a/config/src/test/java/com/yahoo/vespa/config/configsglobal/testfoobar.12.cfg b/config/src/test/java/com/yahoo/vespa/config/configsglobal/testfoobar.12.cfg
deleted file mode 100644
index 3d23f7fd29a..00000000000
--- a/config/src/test/java/com/yahoo/vespa/config/configsglobal/testfoobar.12.cfg
+++ /dev/null
@@ -1,105 +0,0 @@
-vh[5]
-vh[0] 0.3345
-vh[1] -0.3
-vh[2] 134.3
-vh[3] 234.34
-vh[4] -24.3
-bg[5]
-bg[0] 5
-bg[1]
-bg[2] 10
-bg[3] 4
-bg[4] -2
-gee[2]
-gee[0] "jabbaTuna"
-gee[1] jabba:500/dusteri
-storage[2]
-storage[0].distributor[2]
-storage[0].distributor[0] "tra"
-storage[0].distributor[1] "de"
-storage[0].feeder[1]
-storage[0].feeder[0] "li"
-#storage[0].feeder[1] "dum"
-storage[1].distributor[3]
-storage[1].distributor[0] "Etra"
-storage[1].distributor[1] "Ede"
-#storage[1].feeder[3]
-storage[1].feeder[0] "Eli"
-storage[1].feeder[1] "Edum"
-storage[1].feeder[2] "TEdum"
-
-#ju[].hu[].tu[] double default=45 range=[0,100.1]
-#ju[].hu[].wu[] enum { HEY, HO} default=HO
-#ju[].hu[].tang[] bool default=false
-#ju[].hu[].clan[] int default=45 range=[-90,90]
-
-ju[2]
-ju[0].hu[2]
-ju[0].hu[0].tu[2]
-ju[0].hu[0].tu[0] 45.0
-ju[0].hu[0].tu[1] 0.0
-ju[0].hu[0].tang[2]
-ju[0].hu[0].tang[0] true
-#ju[0].hu[0].tang[1] 0.0
-
-#ju[0].hu[1].tu[2]
-ju[0].hu[1].tu[0] 667.865
-ju[0].hu[0].wu[2]
-ju[0].hu[0].wu[0] HEY
-ju[0].hu[0].wu[1] HEY
-ju[0].hu[1].wu[1]
-ju[0].hu[1].wu[0] HO
-
-ju[1].hu[2]
-ju[1].hu[0].tu[2]
-ju[1].hu[0].tu[0] 78
-ju[1].hu[0].tu[1] 78.9
-ju[1].hu[1].tu[1]
-ju[1].hu[1].tu[0] 88.9
-
-ju[1].hu[0].wu[3]
-ju[1].hu[0].wu[0] HEY
-ju[1].hu[0].wu[1] HEY
-ju[1].hu[0].wu[2] HO
-ju[1].hu[1].wu[1]
-ju[1].hu[1].wu[0] HO
-ju[1].hu[1].clan[4]
-ju[1].hu[1].clan[0] 5
-ju[1].hu[1].clan[1] 6
-ju[1].hu[1].clan[2] 7
-ju[1].hu[1].clan[3] 8
-foo "123aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa gh:sann\" da"
-headertemplate "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<html>\n<head>\n<title>ranqualizer:$hostname:$profile:</title>\n<link type=\"text/css\" rel=\"stylesheet\" href=\"/layout.css\"/>\n<meta name=\"ROBOTS\" content=\"NOINDEX,NOFOLLOW\"/><meta http-equiv=\"Cache-control\" content=\"no-cache\"/><meta http-equiv=\"Cache-control\" content=\"must-revalidate\"/><meta http-equiv=\"Cache-control\" content=\"max-age=0\"/><meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"/><link rel=\"icon\" href=\"/favicon.ico\"/><script type=\"text/javascript\">function show(foo,f){document.getElementById(foo).style.display=\"block\";} function hide(foo,f){document.getElementById(foo).style.display = \"none\";}</script></head>\n<body>\n"
-ptport 10108
-rankcf :parent:
-hport 10109
-frtport 10107
-transportnodelay true
-partition 0
-datasetdir none
-proximity "yes"
-vsmconfig ""
-documentmanagerconfigid :parent:
-include: search/cluster.music
-include: search/cluster.music2
-
-rankprofile[extra].fef.property[4]
-rankprofile[ignore].fef.property[4].name "vespa.dump.ignoredefaultfeatures"
-rankprofile[ignore].fef.property[4].value true
-
-specialchars "索 索尼 DVD±R"
-
-tokenlist[1]
-tokenlist[0].name "default"
-tokenlist[0].tokens[8]
-tokenlist[0].tokens[0].token "c++"
-tokenlist[0].tokens[1].token "wal-mart"
-tokenlist[0].tokens[1].replace "walmart"
-tokenlist[0].tokens[2].token ".net"
-tokenlist[0].tokens[3].token "-索"
-tokenlist[0].tokens[4].token "sony"
-tokenlist[0].tokens[4].replace "索尼"
-tokenlist[0].tokens[5].token "dvd+-r"
-tokenlist[0].tokens[6].token "DVD±R"
-tokenlist[0].tokens[7].token "dvdplusminusr"
-tokenlist[0].tokens[7].replace "dvd+-r"
diff --git a/configd/src/apps/sentinel/config-handler.h b/configd/src/apps/sentinel/config-handler.h
index d294d97cff9..eb22b7fada1 100644
--- a/configd/src/apps/sentinel/config-handler.h
+++ b/configd/src/apps/sentinel/config-handler.h
@@ -6,7 +6,6 @@
#include "state-api.h"
#include <vespa/config-sentinel.h>
#include <vespa/config/config.h>
-#include <vespa/vespalib/util/hashmap.h>
#include <sys/types.h>
#include <sys/select.h>
diff --git a/configdefinitions/src/vespa/configserver.def b/configdefinitions/src/vespa/configserver.def
index c90709bf4dd..83d48ceab6c 100644
--- a/configdefinitions/src/vespa/configserver.def
+++ b/configdefinitions/src/vespa/configserver.def
@@ -68,3 +68,4 @@ sleepTimeWhenRedeployingFails long default=30
# Feature Flags (poor man's feature flags, to be overridden in configserver-config.xml if needed)
deleteApplicationLegacy bool default=false
buildMinimalSetOfConfigModels bool default=true
+useDedicatedNodeForLogserver bool default=true
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 914d6963ff0..acf49fe51be 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -125,6 +125,7 @@ public class ModelContextImpl implements ModelContext {
private final Set<Rotation> rotations;
private final boolean isBootstrap;
private final boolean isFirstTimeDeployment;
+ private final boolean useDedicatedNodeForLogserver;
public Properties(ApplicationId applicationId,
boolean multitenant,
@@ -136,7 +137,8 @@ public class ModelContextImpl implements ModelContext {
Zone zone,
Set<Rotation> rotations,
boolean isBootstrap,
- boolean isFirstTimeDeployment) {
+ boolean isFirstTimeDeployment,
+ boolean useDedicatedNodeForLogserver) {
this.applicationId = applicationId;
this.multitenant = multitenant;
this.configServerSpecs = configServerSpecs;
@@ -148,6 +150,7 @@ public class ModelContextImpl implements ModelContext {
this.rotations = rotations;
this.isBootstrap = isBootstrap;
this.isFirstTimeDeployment = isFirstTimeDeployment;
+ this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver;
}
@Override
@@ -186,6 +189,9 @@ public class ModelContextImpl implements ModelContext {
@Override
public boolean isFirstTimeDeployment() { return isFirstTimeDeployment; }
+
+ @Override
+ public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; }
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
index c1fc484e23c..82b692e682f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java
@@ -19,7 +19,7 @@ import java.time.Duration;
*/
public class ConfigServerMaintenance extends AbstractComponent {
- private final TenantsMaintainer tenantsMaintainer;
+ //private final TenantsMaintainer tenantsMaintainer;
private final ZooKeeperDataMaintainer zooKeeperDataMaintainer;
private final FileDistributionMaintainer fileDistributionMaintainer;
private final SessionsMaintainer sessionsMaintainer;
@@ -30,7 +30,8 @@ public class ConfigServerMaintenance extends AbstractComponent {
Curator curator,
FileDistributionFactory fileDistributionFactory) {
DefaultTimes defaults = new DefaultTimes(configserverConfig);
- tenantsMaintainer = new TenantsMaintainer(applicationRepository, curator, defaults.tenantsMaintainerInterval);
+ // TODO: Disabled until we have application metadata about applications
+ //tenantsMaintainer = new TenantsMaintainer(applicationRepository, curator, defaults.tenantsMaintainerInterval);
zooKeeperDataMaintainer = new ZooKeeperDataMaintainer(applicationRepository, curator, defaults.defaultInterval);
fileDistributionMaintainer = new FileDistributionMaintainer(applicationRepository, curator, defaults.defaultInterval, configserverConfig);
sessionsMaintainer = new SessionsMaintainer(applicationRepository, curator, defaults.defaultInterval);
@@ -38,7 +39,7 @@ public class ConfigServerMaintenance extends AbstractComponent {
@Override
public void deconstruct() {
- tenantsMaintainer.deconstruct();
+ //tenantsMaintainer.deconstruct();
zooKeeperDataMaintainer.deconstruct();
fileDistributionMaintainer.deconstruct();
sessionsMaintainer.deconstruct();
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
index c18d3c7fe48..b6346677d6b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.modelfactory;
-import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
@@ -16,6 +15,7 @@ import com.yahoo.config.provision.Version;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.ConfigServerSpec;
import com.yahoo.vespa.config.server.GlobalComponentRegistry;
+import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
import com.yahoo.vespa.config.server.tenant.Rotations;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.server.application.Application;
@@ -54,7 +54,8 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
public ActivatedModelsBuilder(TenantName tenant, long appGeneration, SessionZooKeeperClient zkClient, GlobalComponentRegistry globalComponentRegistry) {
super(globalComponentRegistry.getModelFactoryRegistry(),
globalComponentRegistry.getConfigserverConfig(),
- globalComponentRegistry.getZone());
+ globalComponentRegistry.getZone(),
+ HostProvisionerProvider.from(globalComponentRegistry.getHostProvisioner()));
this.tenant = tenant;
this.appGeneration = appGeneration;
this.zkClient = zkClient;
@@ -74,6 +75,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
Instant now) {
log.log(LogLevel.DEBUG, String.format("Loading model version %s for session %s application %s",
modelFactory.getVersion(), appGeneration, applicationId));
+ ModelContext.Properties modelContextProperties = createModelContextProperties(applicationId);
ModelContext modelContext = new ModelContextImpl(
applicationPackage,
Optional.empty(),
@@ -81,8 +83,8 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
logger,
configDefinitionRepo,
getForVersionOrLatest(applicationPackage.getFileRegistryMap(), modelFactory.getVersion()).orElse(new MockFileRegistry()),
- createStaticProvisioner(applicationPackage.getAllocatedHosts()),
- createModelContextProperties(applicationId),
+ createStaticProvisioner(applicationPackage.getAllocatedHosts(), modelContextProperties),
+ modelContextProperties,
Optional.empty(),
new com.yahoo.component.Version(modelFactory.getVersion().toString()),
wantedNodeVespaVersion);
@@ -115,7 +117,8 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
zone(),
new Rotations(curator, TenantRepository.getTenantPath(tenant)).readRotationsFromZooKeeper(applicationId),
false, // We may be bootstrapping, but we only know and care during prepare
- false); // Always false, assume no one uses it when activating
+ false, // Always false, assume no one uses it when activating
+ configserverConfig.useDedicatedNodeForLogserver());
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
index 15834a9eaa0..27343e71a87 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
@@ -5,6 +5,7 @@ import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.api.HostProvisioner;
+import com.yahoo.config.model.api.ModelContext;
import com.yahoo.config.model.api.ModelFactory;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
@@ -16,6 +17,8 @@ import com.yahoo.lang.SettableOptional;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.http.InternalServerException;
import com.yahoo.vespa.config.server.http.UnknownVespaVersionException;
+import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
+import com.yahoo.vespa.config.server.provision.ProvisionerAdapter;
import com.yahoo.vespa.config.server.provision.StaticProvisioner;
import java.time.Instant;
@@ -48,11 +51,15 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
private final Zone zone;
- protected ModelsBuilder(ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig, Zone zone) {
+ private final HostProvisionerProvider hostProvisionerProvider;
+
+ ModelsBuilder(ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig,
+ Zone zone, HostProvisionerProvider hostProvisionerProvider) {
this.modelFactoryRegistry = modelFactoryRegistry;
this.configserverConfig = configserverConfig;
this.hosted = configserverConfig.hostedVespa();
this.zone = zone;
+ this.hostProvisionerProvider = hostProvisionerProvider;
}
/** Returns the zone this is running in */
@@ -211,10 +218,15 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
* returns empty otherwise, which may either mean that no hosts are allocated or that we are running
* non-hosted and should default to use hosts defined in the application package, depending on context
*/
- protected Optional<HostProvisioner> createStaticProvisioner(Optional<AllocatedHosts> allocatedHosts) {
+ Optional<HostProvisioner> createStaticProvisioner(Optional<AllocatedHosts> allocatedHosts, ModelContext.Properties properties) {
if (hosted && allocatedHosts.isPresent())
- return Optional.of(new StaticProvisioner(allocatedHosts.get()));
+ return Optional.of(new StaticProvisioner(allocatedHosts.get(), createNodeRepositoryProvisioner(properties).get()));
return Optional.empty();
}
+ Optional<HostProvisioner> createNodeRepositoryProvisioner(ModelContext.Properties properties) {
+ return hostProvisionerProvider.getHostProvisioner().map(
+ provisioner -> new ProvisionerAdapter(provisioner, properties.applicationId()));
+ }
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
index 56bdd432d90..4c43abf5faa 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
@@ -25,7 +25,6 @@ import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.deploy.ModelContextImpl;
import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
-import com.yahoo.vespa.config.server.provision.ProvisionerAdapter;
import com.yahoo.vespa.config.server.provision.StaticProvisioner;
import com.yahoo.vespa.config.server.session.FileDistributionFactory;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -52,7 +51,6 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
private final DeployLogger logger;
private final PrepareParams params;
private final FileDistributionFactory fileDistributionFactory;
- private final HostProvisionerProvider hostProvisionerProvider;
private final Optional<ApplicationSet> currentActiveApplicationSet;
private final ModelContext.Properties properties;
@@ -67,12 +65,11 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
Optional<ApplicationSet> currentActiveApplicationSet,
ModelContext.Properties properties,
ConfigserverConfig configserverConfig) {
- super(modelFactoryRegistry, configserverConfig, properties.zone());
+ super(modelFactoryRegistry, configserverConfig, properties.zone(), hostProvisionerProvider);
this.permanentApplicationPackage = permanentApplicationPackage;
this.configDefinitionRepo = configDefinitionRepo;
this.fileDistributionFactory = fileDistributionFactory;
- this.hostProvisionerProvider = hostProvisionerProvider;
this.context = context;
this.logger = logger;
@@ -127,12 +124,8 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
Optional<HostProvisioner> nodeRepositoryProvisioner = createNodeRepositoryProvisioner(properties);
if ( ! allocatedHosts.isPresent()) return nodeRepositoryProvisioner;
- Optional<HostProvisioner> staticProvisioner = createStaticProvisioner(allocatedHosts);
+ Optional<HostProvisioner> staticProvisioner = createStaticProvisioner(allocatedHosts, properties);
if ( ! staticProvisioner.isPresent()) return Optional.empty(); // Since we have hosts allocated this means we are on non-hosted
-
- // The following option should not be possible, but since there is a right action for it we can take it
- if ( ! nodeRepositoryProvisioner.isPresent())
- return Optional.of(new StaticProvisioner(allocatedHosts.get()));
// Nodes are already allocated by a model and we should use them unless this model requests hosts from a
// previously unallocated cluster. This allows future models to stop allocate certain clusters.
@@ -154,12 +147,6 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
.collect(Collectors.toList()));
}
- private Optional<HostProvisioner> createNodeRepositoryProvisioner(ModelContext.Properties properties) {
- return hostProvisionerProvider.getHostProvisioner().map(
- provisioner -> new ProvisionerAdapter(provisioner, properties.applicationId()));
- }
-
-
/** The result of preparing a single model version */
public static class PreparedModelResult implements ModelResult {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
index 7e97690331f..b31f4501767 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
@@ -5,7 +5,6 @@ import com.yahoo.config.model.api.HostProvisioner;
import com.yahoo.config.provision.*;
import java.util.List;
-import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -21,13 +20,6 @@ public class StaticProvisioner implements HostProvisioner {
private final HostProvisioner fallback;
/**
- * Creates a static host provisioner with no fallback
- */
- public StaticProvisioner(AllocatedHosts allocatedHosts) {
- this(allocatedHosts, null);
- }
-
- /**
* Creates a static host provisioner which will fall back to using the given provisioner
* if a request is made for nodes in a cluster which is not present in this allocation.
*/
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
index 49287669a06..4edde0904a4 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
@@ -159,7 +159,8 @@ public class SessionPreparer {
zone,
rotationsSet,
params.isBootstrap(),
- ! currentActiveApplicationSet.isPresent());
+ ! currentActiveApplicationSet.isPresent(),
+ configserverConfig.useDedicatedNodeForLogserver());
this.preparedModelsBuilder = new PreparedModelsBuilder(modelFactoryRegistry,
permanentApplicationPackage,
configDefinitionRepo,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantListener.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantListener.java
index 8778d6a585c..b643a0664e8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantListener.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantListener.java
@@ -17,14 +17,14 @@ public interface TenantListener {
* @param tenant name of newly created tenant.
* @param provider provider of request and reload handlers for new tenant.
*/
- public void onTenantCreate(TenantName tenant, TenantHandlerProvider provider);
+ void onTenantCreate(TenantName tenant, TenantHandlerProvider provider);
/**
* Called whenever a tenant is deleted.
*
* @param tenant name of deleted tenant.
*/
- public void onTenantDelete(TenantName tenant);
+ void onTenantDelete(TenantName tenant);
/**
* Called when all tenants have been loaded at startup.
diff --git a/configserver/src/test/apps/app-jdisc-only-restart/searchdefinitions/music.sd b/configserver/src/test/apps/app-jdisc-only-restart/searchdefinitions/music.sd
index 2e40523a6d9..a2d4614c657 100644
--- a/configserver/src/test/apps/app-jdisc-only-restart/searchdefinitions/music.sd
+++ b/configserver/src/test/apps/app-jdisc-only-restart/searchdefinitions/music.sd
@@ -9,7 +9,6 @@ search music {
indexing: summary | index # How this field should be indexed
# index-to: title, default # Create two indexes
weight: 75 # Ranking importancy of this field, used by the built in nativeRank feature
- header
}
field artist type string {
@@ -17,23 +16,19 @@ search music {
# index-to: artist, default
weight: 25
- header
}
field year type int {
indexing: summary | attribute
- header
}
# Increase query
field popularity type int {
indexing: summary | attribute
- body
}
field url type uri {
indexing: summary | index
- header
}
}
@@ -52,6 +47,4 @@ search music {
}
-
-
}
diff --git a/configserver/src/test/apps/app-jdisc-only/searchdefinitions/music.sd b/configserver/src/test/apps/app-jdisc-only/searchdefinitions/music.sd
index 2e40523a6d9..a2d4614c657 100644
--- a/configserver/src/test/apps/app-jdisc-only/searchdefinitions/music.sd
+++ b/configserver/src/test/apps/app-jdisc-only/searchdefinitions/music.sd
@@ -9,7 +9,6 @@ search music {
indexing: summary | index # How this field should be indexed
# index-to: title, default # Create two indexes
weight: 75 # Ranking importancy of this field, used by the built in nativeRank feature
- header
}
field artist type string {
@@ -17,23 +16,19 @@ search music {
# index-to: artist, default
weight: 25
- header
}
field year type int {
indexing: summary | attribute
- header
}
# Increase query
field popularity type int {
indexing: summary | attribute
- body
}
field url type uri {
indexing: summary | index
- header
}
}
@@ -52,6 +47,4 @@ search music {
}
-
-
}
diff --git a/configserver/src/test/apps/app/searchdefinitions/music.sd b/configserver/src/test/apps/app/searchdefinitions/music.sd
index 27c47ef2a54..7670e78f22b 100644
--- a/configserver/src/test/apps/app/searchdefinitions/music.sd
+++ b/configserver/src/test/apps/app/searchdefinitions/music.sd
@@ -9,7 +9,6 @@ search music {
indexing: summary | index # How this field should be indexed
# index-to: title, default # Create two indexes
weight: 75 # Ranking importancy of this field, used by the built in nativeRank feature
- header
}
field artist type string {
@@ -17,23 +16,19 @@ search music {
# index-to: artist, default
weight: 25
- header
}
field year type int {
indexing: summary | attribute
- header
}
# Increase query
field popularity type int {
indexing: summary | attribute
- body
}
field url type uri {
indexing: summary | index
- header
}
}
@@ -52,6 +47,4 @@ search music {
}
-
-
}
diff --git a/configserver/src/test/apps/zkapp/searchdefinitions/music.sd b/configserver/src/test/apps/zkapp/searchdefinitions/music.sd
index dda729d6a35..bdf4c060cf7 100644
--- a/configserver/src/test/apps/zkapp/searchdefinitions/music.sd
+++ b/configserver/src/test/apps/zkapp/searchdefinitions/music.sd
@@ -9,34 +9,28 @@ search music {
indexing: summary | index # How this field should be indexed
# index-to: title, default # Create two indexes
rank-type: about # Type of ranking settings to apply
- header
}
field artist type string {
indexing: summary | attribute | index
# index-to: artist, default
rank-type:about
- header
}
field year type int {
indexing: summary | attribute
- header
}
# Increase rank score of popular documents regardless of query
field popularity type int {
indexing: summary | attribute
- body
}
field url type uri {
indexing: summary | index
- header
}
field cover type raw {
- body
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
index 28fc179770a..43425aec13b 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
@@ -24,7 +24,7 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
- * @author lulf
+ * @author Ulf Lilleengen
*/
public class ModelContextImplTest {
@Test
@@ -52,6 +52,7 @@ public class ModelContextImplTest {
Zone.defaultZone(),
rotations,
false,
+ false,
false),
Optional.empty(),
new Version(6),
@@ -69,5 +70,6 @@ public class ModelContextImplTest {
assertFalse(context.properties().hostedVespa());
assertThat(context.properties().rotations(), equalTo(rotations));
assertThat(context.properties().isFirstTimeDeployment(), equalTo(false));
+ assertThat(context.properties().useDedicatedNodeForLogserver(), equalTo(false));
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
index 5f00499598a..58bd1485dad 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java
@@ -27,7 +27,6 @@ import java.time.Clock;
import java.util.Collections;
import java.util.Optional;
-import static com.yahoo.vespa.config.server.SuperModelRequestHandlerTest.emptyNodeFlavors;
/**
* @author Ulf Lilleengen
@@ -56,7 +55,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
ModelFactoryRegistry modelFactoryRegistry,
PermanentApplicationPackage permanentApplicationPackage,
FileDistributionFactory fileDistributionFactory,
- SuperModelGenerationCounter superModelGenerationCounter,
HostRegistries hostRegistries,
ConfigserverConfig configserverConfig,
SessionPreparer sessionPreparer,
@@ -72,7 +70,7 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
this.configserverConfig = configserverConfig;
this.reloadListener = reloadListener;
this.tenantListener = tenantListener;
- this.superModelGenerationCounter = superModelGenerationCounter;
+ this.superModelGenerationCounter = new SuperModelGenerationCounter(curator);
this.defRepo = defRepo;
this.permanentApplicationPackage = permanentApplicationPackage;
this.hostRegistries = hostRegistries;
@@ -88,7 +86,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
public static class Builder {
private Curator curator = new MockCurator();
- private Optional<ConfigCurator> configCurator = Optional.empty();
private Metrics metrics = Metrics.createTestMetrics();
private ConfigserverConfig configserverConfig = new ConfigserverConfig(
new ConfigserverConfig.Builder()
@@ -115,11 +112,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
return this;
}
- public Builder configCurator(ConfigCurator configCurator) {
- this.configCurator = Optional.ofNullable(configCurator);
- return this;
- }
-
public Builder metrics(Metrics metrics) {
this.metrics = metrics;
return this;
@@ -155,21 +147,16 @@ public class TestComponentRegistry implements GlobalComponentRegistry {
.orElse(new PermanentApplicationPackage(configserverConfig));
FileDistributionFactory fileDistributionFactory = this.fileDistributionFactory
.orElse(new MockFileDistributionFactory(configserverConfig));
- HostProvisionerProvider hostProvisionerProvider = hostProvisioner.isPresent() ?
- HostProvisionerProvider.withProvisioner(hostProvisioner.get()) :
- HostProvisionerProvider.empty();
+ HostProvisionerProvider hostProvisionerProvider = hostProvisioner.
+ map(HostProvisionerProvider::withProvisioner).orElseGet(HostProvisionerProvider::empty);
SessionPreparer sessionPreparer = new SessionPreparer(modelFactoryRegistry, fileDistributionFactory,
hostProvisionerProvider, permApp,
configserverConfig, defRepo, curator,
zone);
- return new TestComponentRegistry(curator, configCurator.orElse(ConfigCurator.create(curator)),
- metrics, modelFactoryRegistry,
- permApp,
- fileDistributionFactory,
- new SuperModelGenerationCounter(curator),
- hostRegistries, configserverConfig, sessionPreparer,
- hostProvisioner, defRepo, reloadListener,
- tenantListener, zone, clock);
+ return new TestComponentRegistry(curator, ConfigCurator.create(curator), metrics, modelFactoryRegistry,
+ permApp, fileDistributionFactory, hostRegistries, configserverConfig,
+ sessionPreparer, hostProvisioner, defRepo, reloadListener, tenantListener,
+ zone, clock);
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
index 75a2d2f778d..b4e3f2374be 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java
@@ -43,7 +43,6 @@ import com.yahoo.vespa.config.server.session.SessionTest;
import com.yahoo.vespa.config.server.session.SessionZooKeeperClient;
import com.yahoo.vespa.config.server.tenant.TenantBuilder;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
-import com.yahoo.vespa.config.server.zookeeper.ConfigCurator;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.model.VespaModelFactory;
@@ -80,7 +79,6 @@ public class SessionActiveHandlerTest extends SessionHandlerTest {
private static final String activatedMessage = " for tenant '" + tenantName + "' activated.";
private final Clock clock = Clock.systemUTC();
- private ConfigCurator configCurator;
private Curator curator;
private RemoteSessionRepo remoteSessionRepo;
private LocalSessionRepo localRepo;
@@ -99,14 +97,12 @@ public class SessionActiveHandlerTest extends SessionHandlerTest {
remoteSessionRepo = new RemoteSessionRepo(tenantName);
applicationRepo = new MemoryTenantApplications();
curator = new MockCurator();
- configCurator = ConfigCurator.create(curator);
localRepo = new LocalSessionRepo(clock, curator);
pathPrefix = "/application/v2/tenant/" + tenantName + "/session/";
hostProvisioner = new MockProvisioner();
modelFactory = new VespaModelFactory(new NullConfigModelRegistry());
componentRegistry = new TestComponentRegistry.Builder()
.curator(curator)
- .configCurator(configCurator)
.modelFactoryRegistry(new ModelFactoryRegistry(Collections.singletonList(modelFactory)))
.build();
TenantBuilder tenantBuilder = TenantBuilder.create(componentRegistry, tenantName)
@@ -218,7 +214,8 @@ public class SessionActiveHandlerTest extends SessionHandlerTest {
private RemoteSession createRemoteSession(long sessionId, Session.Status status, SessionZooKeeperClient zkClient, Clock clock) throws IOException {
zkClient.writeStatus(status);
- ZooKeeperClient zkC = new ZooKeeperClient(configCurator, new BaseDeployLogger(), false, TenantRepository.getSessionsPath(tenantName).append(String.valueOf(sessionId)));
+ ZooKeeperClient zkC = new ZooKeeperClient(componentRegistry.getConfigCurator(), new BaseDeployLogger(), false,
+ TenantRepository.getSessionsPath(tenantName).append(String.valueOf(sessionId)));
zkC.write(Collections.singletonMap(modelFactory.getVersion(), new MockFileRegistry()));
zkC.write(AllocatedHosts.withHosts(Collections.emptySet()));
RemoteSession session = new RemoteSession(tenantName, sessionId, componentRegistry, zkClient, clock);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
index badcdf53b77..17ad741d182 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
@@ -30,7 +30,7 @@ public class StaticProvisionerTest {
InMemoryProvisioner inMemoryHostProvisioner = new InMemoryProvisioner(false, "host1.yahoo.com", "host2.yahoo.com", "host3.yahoo.com", "host4.yahoo.com");
VespaModel firstModel = createModel(app, inMemoryHostProvisioner);
- StaticProvisioner staticProvisioner = new StaticProvisioner(firstModel.allocatedHosts());
+ StaticProvisioner staticProvisioner = new StaticProvisioner(firstModel.allocatedHosts(), null);
VespaModel secondModel = createModel(app, staticProvisioner);
assertModelConfig(firstModel, secondModel);
diff --git a/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java b/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
index d729b092670..805fa52c105 100644
--- a/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
+++ b/container-accesslogging/src/main/java/com/yahoo/container/logging/LogFileHandler.java
@@ -2,6 +2,7 @@
package com.yahoo.container.logging;
import com.yahoo.container.core.AccessLogConfig;
+import com.yahoo.io.NativeIO;
import com.yahoo.log.LogFileDb;
import java.io.File;
@@ -263,15 +264,31 @@ public class LogFileHandler extends StreamHandler {
numberOfRecords = 0;
lastRotationTime = now;
nextRotationTime = 0; //figure it out later (lazy evaluation)
- if (compressOnRotation && (oldFileName != null)) {
- triggerCompression(oldFileName);
+ if ((oldFileName != null)) {
+ File oldFile = new File(oldFileName);
+ if (oldFile.exists()) {
+ if (compressOnRotation) {
+ triggerCompression(oldFile);
+ } else {
+ NativeIO nativeIO = new NativeIO();
+ nativeIO.dropFileFromCache(oldFile);
+ }
+ }
}
}
- private void triggerCompression(String oldFileName) {
+ private void triggerCompression(File oldFile) {
try {
+ String oldFileName = oldFile.getPath();
+ String gzippedFileName = oldFileName + ".gz";
Runtime r = Runtime.getRuntime();
- Process p = r.exec(new String[] { "gzip", oldFileName });
+ StringBuilder cmd = new StringBuilder("gzip");
+ cmd.append(" < "). append(oldFileName).append(" > ").append(gzippedFileName);
+ Process p = r.exec(cmd.toString());
+ NativeIO nativeIO = new NativeIO();
+ nativeIO.dropFileFromCache(oldFile); // Drop from cache in case somebody else has a reference to it preventing from dying quickly.
+ oldFile.delete();
+ nativeIO.dropFileFromCache(new File(gzippedFileName));
// Detonator pattern: Think of all the fun we can have if gzip isn't what we
// think it is, if it doesn't return, etc, etc
} catch (IOException e) {
diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
index 4c12bacf145..d1f84aefeaa 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
@@ -17,10 +17,16 @@ import java.util.concurrent.Executor;
public class LogHandler extends ThreadedHttpRequestHandler {
private static final String LOG_DIRECTORY = "/home/y/logs/vespa/logarchive/";
+ private final LogReader logReader;
@Inject
public LogHandler(Executor executor) {
+ this(executor, new LogReader());
+ }
+
+ protected LogHandler(Executor executor, LogReader logReader) {
super(executor);
+ this.logReader = logReader;
}
@Override
@@ -30,10 +36,9 @@ public class LogHandler extends ThreadedHttpRequestHandler {
HashMap<String, String> apiParams = getParameters(request);
long earliestLogThreshold = getEarliestThreshold(apiParams);
long latestLogThreshold = getLatestThreshold(apiParams);
- LogReader logReader= new LogReader(earliestLogThreshold, latestLogThreshold);
try {
- JSONObject logJson = logReader.readLogs(LOG_DIRECTORY);
- responseJSON.put("logs", logJson.toString());
+ JSONObject logJson = logReader.readLogs(LOG_DIRECTORY, earliestLogThreshold, latestLogThreshold);
+ responseJSON.put("logs", logJson);
} catch (IOException | JSONException e) {
return new HttpResponse(404) {
@Override
diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
index 2483f2497d0..ae43d850258 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
@@ -7,18 +7,16 @@ import javax.xml.bind.DatatypeConverter;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.attribute.BasicFileAttributes;
public class LogReader {
long earliestLogThreshold;
long latestLogThreshold;
- public LogReader(long earliestLogThreshold, long latestLogThreshold) {
+ protected JSONObject readLogs(String logDirectory, long earliestLogThreshold, long latestLogThreshold) throws IOException, JSONException {
this.earliestLogThreshold = earliestLogThreshold;
this.latestLogThreshold = latestLogThreshold;
- }
-
- protected JSONObject readLogs(String logDirectory) throws IOException, JSONException {
JSONObject json = new JSONObject();
File root = new File(logDirectory);
traverse_folder(root, json, "");
@@ -28,9 +26,7 @@ public class LogReader {
private void traverse_folder(File root, JSONObject json, String filename) throws IOException, JSONException {
File[] files = root.listFiles();
for(File child : files) {
- File temp = child;
- JSONObject childJson = new JSONObject();
- long logTime = child.lastModified();
+ long logTime = Files.readAttributes(child.toPath(), BasicFileAttributes.class).creationTime().toMillis();
if(child.isFile() && earliestLogThreshold < logTime && logTime < latestLogThreshold) {
json.put(filename + child.getName(), DatatypeConverter.printBase64Binary(Files.readAllBytes(child.toPath())));
}
diff --git a/container-core/src/test/java/com/yahoo/container/handler/LogHandlerTest.java b/container-core/src/test/java/com/yahoo/container/handler/LogHandlerTest.java
new file mode 100644
index 00000000000..5a3b62be287
--- /dev/null
+++ b/container-core/src/test/java/com/yahoo/container/handler/LogHandlerTest.java
@@ -0,0 +1,54 @@
+package com.yahoo.container.handler;
+
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.container.jdisc.HttpResponse;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.concurrent.Executor;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+
+public class LogHandlerTest {
+
+
+ @Test
+ public void handleCorrectlyParsesQueryParameters() throws IOException {
+ MockLogReader mockLogReader = new MockLogReader();
+ LogHandler logHandler = new LogHandler(mock(Executor.class), mockLogReader);
+
+ {
+ String uri = "http://myhost.com:1111/logs?from=1000&to=2000";
+ HttpResponse response = logHandler.handle(HttpRequest.createTestRequest(uri, com.yahoo.jdisc.http.HttpRequest.Method.GET));
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ response.render(bos);
+ String expectedResponse = "{\"logs\":{\"one\":\"newer_log\"}}";
+ assertEquals(expectedResponse, bos.toString());
+ }
+
+ {
+ String uri = "http://myhost.com:1111/logs?from=0&to=1000";
+ HttpResponse response = logHandler.handle(HttpRequest.createTestRequest(uri, com.yahoo.jdisc.http.HttpRequest.Method.GET));
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ response.render(bos);
+ String expectedResponse = "{\"logs\":{\"two\":\"older_log\"}}";
+ assertEquals(expectedResponse, bos.toString());
+ }
+
+ }
+
+ class MockLogReader extends LogReader {
+ @Override
+ protected JSONObject readLogs(String logDirectory, long earliestLogThreshold, long latestLogThreshold) throws JSONException {
+ if(latestLogThreshold > 1000) {
+ return new JSONObject("{\"one\":\"newer_log\"}");
+ } else {
+ return new JSONObject("{\"two\":\"older_log\"}");
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java b/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java
index 534026f89ac..ad779f6b7b4 100644
--- a/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java
+++ b/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java
@@ -20,8 +20,8 @@ public class LogReaderTest {
@Test
public void testThatFilesAreWrittenCorrectlyToOutputStream() throws Exception{
String logDirectory = "src/test/resources/logfolder/";
- LogReader logReader = new LogReader(21, Long.MAX_VALUE);
- JSONObject json = logReader.readLogs(logDirectory);
+ LogReader logReader = new LogReader();
+ JSONObject json = logReader.readLogs(logDirectory, 21, Long.MAX_VALUE);
String expected = "{\"subfolder-log2.log\":\"VGhpcyBpcyBhbm90aGVyIGxvZyBmaWxl\",\"log1.log\":\"VGhpcyBpcyBvbmUgbG9nIGZpbGU=\"}";
String actual = json.toString();
assertEquals(expected, actual);
@@ -30,8 +30,8 @@ public class LogReaderTest {
@Test
public void testThatLogsOutsideRangeAreExcluded() throws Exception {
String logDirectory = "src/test/resources/logfolder/";
- LogReader logReader = new LogReader(Long.MAX_VALUE, Long.MIN_VALUE);
- JSONObject json = logReader.readLogs(logDirectory);
+ LogReader logReader = new LogReader();
+ JSONObject json = logReader.readLogs(logDirectory, Long.MAX_VALUE, Long.MIN_VALUE);
String expected = "{}";
String actual = json.toString();
assertEquals(expected, actual);
diff --git a/container-dev/pom.xml b/container-dev/pom.xml
index c4c93563026..1b0f36e3adb 100644
--- a/container-dev/pom.xml
+++ b/container-dev/pom.xml
@@ -142,6 +142,10 @@
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
diff --git a/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
index 27298ce6c82..fbc03a38682 100644
--- a/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
@@ -36,6 +36,7 @@ import static com.yahoo.container.di.componentgraph.core.Keys.createKey;
* @author ollivir
*/
public class ComponentNode extends Node {
+
private static final Logger log = Logger.getLogger(ComponentNode.class.getName());
private final Class<?> clazz;
diff --git a/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java b/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
index 19f8f9130dc..a3b8e4f29a2 100644
--- a/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
+++ b/container-search/src/main/java/com/yahoo/fs4/GetDocSumsPacket.java
@@ -69,7 +69,6 @@ public class GetDocSumsPacket extends Packet {
* definition of enum getdocsums_flags
*/
public static final int GDFLAG_IGNORE_ROW = 0x00000001;
- public static final int GDFLAG_ALLOW_SLIME = 0x00000002;
public void encodeBody(ByteBuffer buffer) {
setFieldsFromHits();
@@ -80,9 +79,6 @@ public class GetDocSumsPacket extends Packet {
query.getRanking().getProperties().put(sessionIdKey, query.getSessionId(false).toString());
}
- // always allow slime docsums
- flags |= GDFLAG_ALLOW_SLIME;
-
// set the default features
long features = GDF_MLD;
if (sendQuery)
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4CloseableChannel.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4CloseableChannel.java
index dc95f83365e..10a640c54c8 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4CloseableChannel.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4CloseableChannel.java
@@ -21,15 +21,17 @@ import com.yahoo.search.result.HitGroup;
import java.io.IOException;
import java.util.Iterator;
+import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.yahoo.prelude.fastsearch.VespaBackEndSearcher.hitIterator;
+import static java.util.Arrays.asList;
/**
* {@link CloseableChannel} implementation for FS4 nodes and fdispatch
- *
+ *
* @author ollivir
*/
public class FS4CloseableChannel extends CloseableChannel {
@@ -37,6 +39,14 @@ public class FS4CloseableChannel extends CloseableChannel {
private FS4Channel channel;
private final Optional<Integer> distributionKey;
+ private ErrorMessage pendingSearchError = null;
+ private Query query = null;
+ private QueryPacket queryPacket = null;
+
+ private int expectedFillResults = 0;
+ private CacheKey summaryCacheKey = null;
+ private DocsumPacketKey[] summaryPacketKeys = null;
+
public FS4CloseableChannel(VespaBackEndSearcher searcher, Query query, FS4ResourcePool fs4ResourcePool, String hostname, int port,
int distributionKey) {
this.searcher = searcher;
@@ -56,32 +66,47 @@ public class FS4CloseableChannel extends CloseableChannel {
}
@Override
- public Result search(Query query, QueryPacket queryPacket, CacheKey cacheKey) throws IOException {
+ protected void sendSearchRequest(Query query, QueryPacket queryPacket) throws IOException {
if (isLoggingFine())
getLogger().finest("sending query packet");
+ if(queryPacket == null) {
+ // query changed for subchannel
+ queryPacket = searcher.createQueryPacket(query);
+ }
+
+ this.query = query;
+ this.queryPacket = queryPacket;
+
try {
boolean couldSend = channel.sendPacket(queryPacket);
- if (!couldSend)
- return new Result(query, ErrorMessage.createBackendCommunicationError("Could not reach '" + getName() + "'"));
+ if (!couldSend) {
+ pendingSearchError = ErrorMessage.createBackendCommunicationError("Could not reach '" + getName() + "'");
+ }
} catch (InvalidChannelException e) {
- return new Result(query, ErrorMessage.createBackendCommunicationError("Invalid channel " + getName()));
+ pendingSearchError = ErrorMessage.createBackendCommunicationError("Invalid channel " + getName());
} catch (IllegalStateException e) {
- return new Result(query, ErrorMessage.createBackendCommunicationError("Illegal state in FS4: " + e.getMessage()));
+ pendingSearchError = ErrorMessage.createBackendCommunicationError("Illegal state in FS4: " + e.getMessage());
}
+ }
+ @Override
+ protected List<Result> getSearchResults(CacheKey cacheKey) throws IOException {
+ if(pendingSearchError != null) {
+ return asList(new Result(query, pendingSearchError));
+ }
BasicPacket[] basicPackets;
try {
basicPackets = channel.receivePackets(query.getTimeLeft(), 1);
} catch (ChannelTimeoutException e) {
- return new Result(query, ErrorMessage.createTimeout("Timeout while waiting for " + getName()));
+ return asList(new Result(query, ErrorMessage.createTimeout("Timeout while waiting for " + getName())));
} catch (InvalidChannelException e) {
- return new Result(query, ErrorMessage.createBackendCommunicationError("Invalid channel for " + getName()));
+ return asList(new Result(query, ErrorMessage.createBackendCommunicationError("Invalid channel for " + getName())));
}
if (basicPackets.length == 0) {
- return new Result(query, ErrorMessage.createBackendCommunicationError(getName() + " got no packets back"));
+ return asList(new Result(query, ErrorMessage.createBackendCommunicationError(getName() + " got no packets back")));
}
if (isLoggingFine())
@@ -118,53 +143,67 @@ public class FS4CloseableChannel extends CloseableChannel {
cacheControl.cache(cacheKey, query, new DocsumPacketKey[0], packets, distributionKey);
}
}
- return result;
+ return asList(result);
}
@Override
- public void partialFill(Result result, String summaryClass) {
- Packet[] receivedPackets;
- DocsumPacketKey[] packetKeys;
-
- CacheKey cacheKey = null;
- PacketWrapper packetWrapper = null;
+ protected void sendPartialFillRequest(Result result, String summaryClass) {
+ summaryCacheKey = null;
if (searcher.getCacheControl().useCache(channel.getQuery())) {
- cacheKey = fetchCacheKeyFromHits(result.hits(), summaryClass);
- if (cacheKey == null) {
+ summaryCacheKey = fetchCacheKeyFromHits(result.hits(), summaryClass);
+ if (summaryCacheKey == null) {
QueryPacket queryPacket = QueryPacket.create(channel.getQuery());
- cacheKey = new CacheKey(queryPacket);
+ summaryCacheKey = new CacheKey(queryPacket);
+ }
+ boolean cacheFound = cacheLookupTwoPhase(summaryCacheKey, result, summaryClass);
+ if (!cacheFound) {
+ summaryCacheKey = null;
}
- packetWrapper = cacheLookupTwoPhase(cacheKey, result, summaryClass);
}
if (countFastHits(result) > 0) {
- packetKeys = getPacketKeys(result, summaryClass, false);
- if (packetKeys.length == 0) {
- receivedPackets = new Packet[0];
+ summaryPacketKeys = getPacketKeys(result, summaryClass);
+ if (summaryPacketKeys.length == 0) {
+ expectedFillResults = 0;
} else {
try {
- receivedPackets = fetchSummaries(result, summaryClass);
+ expectedFillResults = requestSummaries(result, summaryClass);
} catch (InvalidChannelException e) {
result.hits()
.addError(ErrorMessage.createBackendCommunicationError("Invalid channel " + getName() + " (summary fetch)"));
return;
- } catch (ChannelTimeoutException e) {
- result.hits().addError(ErrorMessage.createTimeout("timeout waiting for summaries from " + getName()));
- return;
} catch (IOException e) {
result.hits().addError(ErrorMessage.createBackendCommunicationError(
"IO error while talking on channel " + getName() + " (summary fetch): " + e.getMessage()));
return;
}
- if (receivedPackets.length == 0) {
- result.hits()
- .addError(ErrorMessage.createBackendCommunicationError(getName() + " got no packets back (summary fetch)"));
- return;
- }
}
} else {
- packetKeys = new DocsumPacketKey[0];
- receivedPackets = new Packet[0];
+ expectedFillResults = 0;
+ }
+ }
+
+
+ @Override
+ protected void getPartialFillResults(Result result, String summaryClass) {
+ if (expectedFillResults == 0) {
+ return;
+ }
+
+ Packet[] receivedPackets;
+ try {
+ receivedPackets = getSummaryResponses(result);
+ } catch (InvalidChannelException e1) {
+ result.hits().addError(ErrorMessage.createBackendCommunicationError("Invalid channel " + getName() + " (summary fetch)"));
+ return;
+ } catch (ChannelTimeoutException e1) {
+ result.hits().addError(ErrorMessage.createTimeout("timeout waiting for summaries from " + getName()));
+ return;
+ }
+
+ if (receivedPackets.length == 0) {
+ result.hits().addError(ErrorMessage.createBackendCommunicationError(getName() + " got no packets back (summary fetch)"));
+ return;
}
int skippedHits;
@@ -183,8 +222,8 @@ public class FS4CloseableChannel extends CloseableChannel {
"Error filling hits with summary fields, source: " + getName() + " Exception thrown: " + e.getMessage()));
return;
}
- if (skippedHits == 0 && packetWrapper != null) {
- searcher.getCacheControl().updateCacheEntry(cacheKey, channel.getQuery(), packetKeys, receivedPackets);
+ if (skippedHits == 0 && summaryCacheKey != null) {
+ searcher.getCacheControl().updateCacheEntry(summaryCacheKey, channel.getQuery(), summaryPacketKeys, receivedPackets);
}
if (skippedHits > 0)
@@ -216,12 +255,12 @@ public class FS4CloseableChannel extends CloseableChannel {
}
}
- private PacketWrapper cacheLookupTwoPhase(CacheKey cacheKey, Result result, String summaryClass) {
+ private boolean cacheLookupTwoPhase(CacheKey cacheKey, Result result, String summaryClass) {
Query query = result.getQuery();
PacketWrapper packetWrapper = searcher.getCacheControl().lookup(cacheKey, query);
if (packetWrapper == null) {
- return null;
+ return false;
}
if (packetWrapper.getNumPackets() != 0) {
for (Iterator<Hit> i = hitIterator(result); i.hasNext();) {
@@ -241,7 +280,7 @@ public class FS4CloseableChannel extends CloseableChannel {
result.analyzeHits();
}
- return packetWrapper;
+ return true;
}
private CacheKey fetchCacheKeyFromHits(HitGroup hits, String summaryClass) {
@@ -269,10 +308,8 @@ public class FS4CloseableChannel extends CloseableChannel {
return count;
}
- private Packet[] fetchSummaries(Result result, String summaryClass)
- throws InvalidChannelException, ChannelTimeoutException, ClassCastException, IOException {
+ private int requestSummaries(Result result, String summaryClass) throws InvalidChannelException, ClassCastException, IOException {
- BasicPacket[] receivedPackets;
boolean summaryNeedsQuery = searcher.summaryNeedsQuery(result.getQuery());
if (result.getQuery().getTraceLevel() >= 3)
result.getQuery().trace((summaryNeedsQuery ? "Resending " : "Not resending ") + "query during document summary fetching", 3);
@@ -287,7 +324,15 @@ public class FS4CloseableChannel extends CloseableChannel {
boolean couldSend = channel.sendPacket(docsumsPacket);
if (!couldSend)
throw new IOException("Could not successfully send GetDocSumsPacket.");
- receivedPackets = channel.receivePackets(result.getQuery().getTimeLeft(), docsumsPacket.getNumDocsums() + 1);
+
+ return docsumsPacket.getNumDocsums() + 1;
+ }
+
+ private Packet[] getSummaryResponses(Result result) throws InvalidChannelException, ChannelTimeoutException {
+ if(expectedFillResults == 0) {
+ return new Packet[0];
+ }
+ BasicPacket[] receivedPackets = channel.receivePackets(result.getQuery().getTimeLeft(), expectedFillResults);
return convertBasicPackets(receivedPackets);
}
@@ -295,11 +340,9 @@ public class FS4CloseableChannel extends CloseableChannel {
/**
* Returns an array of the hits contained in a result
*
- * @param filled
- * true to return all hits, false to return only unfilled hits
* @return array of docids, empty array if no hits
*/
- private DocsumPacketKey[] getPacketKeys(Result result, String summaryClass, boolean filled) {
+ private DocsumPacketKey[] getPacketKeys(Result result, String summaryClass) {
DocsumPacketKey[] packetKeys = new DocsumPacketKey[result.getHitCount()];
int x = 0;
@@ -307,7 +350,7 @@ public class FS4CloseableChannel extends CloseableChannel {
com.yahoo.search.result.Hit hit = i.next();
if (hit instanceof FastHit) {
FastHit fastHit = (FastHit) hit;
- if (filled || !fastHit.isFilled(summaryClass)) {
+ if (!fastHit.isFilled(summaryClass)) {
packetKeys[x] = new DocsumPacketKey(fastHit.getGlobalId(), fastHit.getPartId(), summaryClass);
x++;
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
index d34d119c1fe..9acf48a7c67 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
@@ -28,6 +28,7 @@ import com.yahoo.search.searchchain.Execution;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.io.IOException;
+import java.util.List;
import java.util.Optional;
import java.util.logging.Level;
@@ -64,9 +65,9 @@ public class FastSearcher extends VespaBackEndSearcher {
private final Dispatcher dispatcher;
private final Backend dispatchBackend;
-
+
private final FS4ResourcePool fs4ResourcePool;
-
+
/**
* Creates a Fastsearcher.
*
@@ -99,7 +100,7 @@ public class FastSearcher extends VespaBackEndSearcher {
public Pong ping(Ping ping, Execution execution) {
return ping(ping, dispatchBackend, getName());
}
-
+
public static Pong ping(Ping ping, Backend backend, String name) {
FS4Channel channel = backend.openPingChannel();
@@ -151,6 +152,7 @@ public class FastSearcher extends VespaBackEndSearcher {
}
}
+ @Override
protected void transformQuery(Query query) {
QueryRewrite.rewriteSddocname(query);
}
@@ -160,7 +162,8 @@ public class FastSearcher extends VespaBackEndSearcher {
if (dispatcher.searchCluster().groupSize() == 1)
forceSinglePassGrouping(query);
try(CloseableChannel channel = getChannel(query)) {
- Result result = channel.search(query, queryPacket, cacheKey);
+ List<Result> results = channel.search(query, queryPacket, cacheKey);
+ Result result = mergeResults(results, query, execution);
if (query.properties().getBoolean(Ranking.RANKFEATURES, false)) {
// There is currently no correct choice for which
@@ -182,13 +185,13 @@ public class FastSearcher extends VespaBackEndSearcher {
return result;
}
}
-
+
/** When we only search a single node, doing all grouping in one pass is more efficient */
private void forceSinglePassGrouping(Query query) {
for (GroupingRequest groupingRequest : query.getSelect().getGrouping())
forceSinglePassGrouping(groupingRequest.getRootOperation());
}
-
+
private void forceSinglePassGrouping(GroupingOperation operation) {
operation.setForceSinglePass(true);
for (GroupingOperation childOperation : operation.getChildren())
@@ -231,6 +234,7 @@ public class FastSearcher extends VespaBackEndSearcher {
* @param result result containing a partition of the unfilled hits
* @param summaryClass the summary class we want to fill with
**/
+ @Override
protected void doPartialFill(Result result, String summaryClass) {
if (result.isFilled(summaryClass)) return;
@@ -262,6 +266,34 @@ public class FastSearcher extends VespaBackEndSearcher {
return false;
}
+ private Result mergeResults(List<Result> results, Query query, Execution execution) {
+ if(results.size() == 1) {
+ return results.get(0);
+ }
+
+ Result result = new Result(query);
+
+ for (Result partialResult : results) {
+ result.mergeWith(partialResult);
+ result.hits().addAll(partialResult.hits().asUnorderedHits());
+ }
+
+ if (query.getOffset() != 0 || result.hits().size() > query.getHits()) {
+ // with multiple results, each partial result is expected to have
+ // offset = 0 to allow correct offset positioning after merge
+
+ if (result.getHitOrderer() != null) {
+ // Make sure we have the necessary data for sorting
+ fill(result, Execution.ATTRIBUTEPREFETCH, execution);
+ }
+ result.hits().trim(query.getOffset(), query.getHits());
+ }
+
+ // TODO grouping
+
+ return result;
+ }
+
private static @NonNull Optional<String> quotedSummaryClass(String summaryClass) {
return Optional.of(summaryClass == null ? "[null]" : quote(summaryClass));
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
index a6f98418a76..409d05e3aaf 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
@@ -213,11 +213,7 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
if (root == null || root instanceof NullItem) // root can become null after resolving and transformation?
return new Result(query);
- QueryPacket queryPacket = QueryPacket.create(query);
- int compressionLimit = query.properties().getInteger(PACKET_COMPRESSION_LIMIT, 0);
- queryPacket.setCompressionLimit(compressionLimit);
- if (compressionLimit != 0)
- queryPacket.setCompressionType(query.properties().getString(PACKET_COMPRESSION_TYPE, "lz4"));
+ QueryPacket queryPacket = createQueryPacket(query);
if (isLoggingFine())
getLogger().fine("made QueryPacket: " + queryPacket);
@@ -241,6 +237,15 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
return result;
}
+ protected QueryPacket createQueryPacket(Query query) {
+ QueryPacket queryPacket = QueryPacket.create(query);
+ int compressionLimit = query.properties().getInteger(PACKET_COMPRESSION_LIMIT, 0);
+ queryPacket.setCompressionLimit(compressionLimit);
+ if (compressionLimit != 0)
+ queryPacket.setCompressionType(query.properties().getString(PACKET_COMPRESSION_TYPE, "lz4"));
+ return queryPacket;
+ }
+
/**
* Returns a cached result, or null if no result was cached for this key
*
@@ -355,7 +360,7 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
s.append(" location=")
.append(query.getRanking().getLocation().toString());
}
-
+
if (query.getGroupingSessionCache()) {
s.append(" groupingSessionCache=true");
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/CloseableChannel.java b/container-search/src/main/java/com/yahoo/search/dispatch/CloseableChannel.java
index 3f5ebe53d0d..fc337d589ec 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/CloseableChannel.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/CloseableChannel.java
@@ -8,19 +8,37 @@ import com.yahoo.search.Result;
import java.io.Closeable;
import java.io.IOException;
+import java.util.List;
/**
- * CloseableChannel is an interface for running a search query and getting document summaries against some
- * content node, node group or dispatcher while abstracting the specifics of the invocation target.
+ * CloseableChannel is an interface for running a search query and getting document summaries against some content node, node group or
+ * dispatcher while abstracting the specifics of the invocation target. ClosebleChannel objects are stateful and should not be reused.
*
* @author ollivir
*/
public abstract class CloseableChannel implements Closeable {
- /** Retrieve the hits for the given {@link Query} */
- public abstract Result search(Query query, QueryPacket queryPacket, CacheKey cacheKey) throws IOException;
+ /** Retrieve the hits for the given {@link Query}. The channel may return more than one result, in
+ * which case the caller is responsible for merging the results. If multiple results are returned
+ * and the search query had a hit offset other than zero, that offset will be set to zero and the
+ * number of requested hits will be adjusted accordingly. */
+ public List<Result> search(Query query, QueryPacket queryPacket, CacheKey cacheKey) throws IOException {
+ sendSearchRequest(query, queryPacket);
+ return getSearchResults(cacheKey);
+ }
+
+ protected abstract void sendSearchRequest(Query query, QueryPacket queryPacket) throws IOException;
+
+ protected abstract List<Result> getSearchResults(CacheKey cacheKey) throws IOException;
/** Retrieve document summaries for the unfilled hits in the given {@link Result} */
- public abstract void partialFill(Result result, String summaryClass);
+ public void partialFill(Result result, String summaryClass) {
+ sendPartialFillRequest(result, summaryClass);
+ getPartialFillResults(result, summaryClass);
+ }
+
+ protected abstract void getPartialFillResults(Result result, String summaryClass);
+
+ protected abstract void sendPartialFillRequest(Result result, String summaryClass);
protected abstract void closeChannel();
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
index 0cf18852dd3..ce0d48f5638 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
@@ -27,6 +27,7 @@ import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.search.DispatchConfig;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -286,21 +287,31 @@ public class Dispatcher extends AbstractComponent {
}
public Optional<CloseableChannel> getDispatchedChannel(VespaBackEndSearcher searcher, Query query) {
- Optional<SearchCluster.Group> groupInCluster = loadBalancer.takeGroupForQuery(query);
+ if (!query.getSelect().getGrouping().isEmpty()) {
+ return Optional.empty();
+ }
- return groupInCluster.flatMap(group -> {
- if(group.nodes().size() == 1) {
- SearchCluster.Node node = group.nodes().iterator().next();
- query.trace(false, 2, "Dispatching internally to ", group, " (", node.toString(), ")");
- CloseableChannel channel = new FS4CloseableChannel(searcher, query, fs4ResourcePool, node.hostname(), node.fs4port(), node.key());
- channel.teardown(() -> {
- loadBalancer.releaseGroup(group);
- });
- return Optional.of(channel);
- } else {
- loadBalancer.releaseGroup(group);
- return Optional.empty();
+ Optional<SearchCluster.Group> groupInCluster = loadBalancer.takeGroupForQuery(query);
+ if (!groupInCluster.isPresent()) {
+ return Optional.empty();
+ }
+ SearchCluster.Group group = groupInCluster.get();
+ query.trace(false, 2, "Dispatching internally to ", group);
+
+ if (group.nodes().size() == 1) {
+ SearchCluster.Node node = group.nodes().iterator().next();
+ CloseableChannel channel = new FS4CloseableChannel(searcher, query, fs4ResourcePool, node.hostname(), node.fs4port(),
+ node.key());
+ return Optional.of(channel);
+ } else {
+ query.setNoCache(true); // Note - multi-node request disables packet based caching
+
+ Map<Integer, CloseableChannel> subchannels = new HashMap<>();
+ for (SearchCluster.Node node : group.nodes()) {
+ subchannels.put(node.key(), new FS4CloseableChannel(searcher, query, fs4ResourcePool, node.hostname(), node.fs4port(), node.key()));
}
- });
+ CloseableChannel multinode = new InterleavedCloseableChannel(subchannels);
+ return Optional.of(multinode);
+ }
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedCloseableChannel.java b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedCloseableChannel.java
new file mode 100644
index 00000000000..e461f6fc725
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedCloseableChannel.java
@@ -0,0 +1,98 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.dispatch;
+
+import com.yahoo.fs4.QueryPacket;
+import com.yahoo.prelude.fastsearch.CacheKey;
+import com.yahoo.prelude.fastsearch.FastHit;
+import com.yahoo.search.Query;
+import com.yahoo.search.Result;
+import com.yahoo.search.result.Hit;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * InterleavedCloseableChannel uses multiple {@link CloseableChannel} objects to interface with
+ * content nodes in parallel. Operationally it first sends requests to all channels and then
+ * collects the results. The invoker of this class is responsible for merging the results if
+ * needed.
+ *
+ * @author ollivir
+ */
+public class InterleavedCloseableChannel extends CloseableChannel {
+ private final Map<Integer, CloseableChannel> subchannels;
+ private Map<Integer, Result> expectedFillResults = null;
+
+ public InterleavedCloseableChannel(Map<Integer, CloseableChannel> subchannels) {
+ this.subchannels = subchannels;
+ }
+
+ /** Sends search queries to the contained {@link CloseableChannel} subchannels. If the
+ * search query has an offset other than zero, it will be reset to zero and the expected
+ * hit amount will be adjusted accordingly. */
+ @Override
+ protected void sendSearchRequest(Query query, QueryPacket queryPacket) throws IOException {
+ for (CloseableChannel subchannel : subchannels.values()) {
+ Query subquery = query.clone();
+
+ subquery.setHits(subquery.getHits() + subquery.getOffset());
+ subquery.setOffset(0);
+ subchannel.sendSearchRequest(subquery, null);
+ }
+ }
+
+ @Override
+ protected List<Result> getSearchResults(CacheKey cacheKey) throws IOException {
+ List<Result> results = new ArrayList<>();
+
+ for (CloseableChannel subchannel : subchannels.values()) {
+ results.addAll(subchannel.getSearchResults(cacheKey));
+ }
+ return results;
+ }
+
+ @Override
+ protected void sendPartialFillRequest(Result result, String summaryClass) {
+ expectedFillResults = new HashMap<>();
+
+ for (Iterator<Hit> it = result.hits().deepIterator(); it.hasNext();) {
+ Hit hit = it.next();
+ if (hit instanceof FastHit) {
+ FastHit fhit = (FastHit) hit;
+ Result res = expectedFillResults.computeIfAbsent(fhit.getDistributionKey(), dk -> new Result(result.getQuery()));
+ res.hits().add(fhit);
+ }
+ }
+ expectedFillResults.forEach((distKey, partialResult) -> {
+ CloseableChannel channel = subchannels.get(distKey);
+ if (channel != null) {
+ channel.sendPartialFillRequest(partialResult, summaryClass);
+ }
+ });
+ }
+
+ @Override
+ protected void getPartialFillResults(Result result, String summaryClass) {
+ if (expectedFillResults == null) {
+ return;
+ }
+ expectedFillResults.forEach((distKey, partialResult) -> {
+ CloseableChannel channel = subchannels.get(distKey);
+ if (channel != null) {
+ channel.getPartialFillResults(partialResult, summaryClass);
+ }
+ });
+ }
+
+ @Override
+ protected void closeChannel() {
+ if (!subchannels.isEmpty()) {
+ subchannels.values().forEach(CloseableChannel::close);
+ subchannels.clear();
+ }
+ }
+}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java b/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
index 269d16fd24d..455696c16b1 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
@@ -26,17 +26,14 @@ public class LoadBalancer {
private static final CompoundName QUERY_NODE_GROUP_AFFINITY = new CompoundName("dispatch.group.affinity");
- private final boolean isInternallyDispatchable;
private final List<GroupSchedule> scoreboard;
private int needle = 0;
public LoadBalancer(SearchCluster searchCluster) {
if (searchCluster == null) {
- this.isInternallyDispatchable = false;
this.scoreboard = null;
return;
}
- this.isInternallyDispatchable = (searchCluster.groupSize() == 1);
this.scoreboard = new ArrayList<>(searchCluster.groups().size());
for (Group group : searchCluster.groups().values()) {
@@ -53,7 +50,7 @@ public class LoadBalancer {
* @return The node group to target, or <i>empty</i> if the internal dispatch logic cannot be used
*/
public Optional<Group> takeGroupForQuery(Query query) {
- if (!isInternallyDispatchable) {
+ if (scoreboard == null) {
return Optional.empty();
}
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java b/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
index d74f29a3b77..4dbec304bde 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
@@ -147,7 +147,7 @@ public class AsyncExecution {
}
private static <T> Future<T> getFuture(Callable<T> callable) {
- final FutureTask<T> future = new FutureTask<>(callable);
+ FutureTask<T> future = new FutureTask<>(callable);
getExecutor().execute(future);
return future;
}
diff --git a/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java b/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
index c284a073704..9b1517454a9 100644
--- a/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
+++ b/container-search/src/test/java/com/yahoo/fs4/test/GetDocSumsPacketTestCase.java
@@ -34,16 +34,16 @@ public class GetDocSumsPacketTestCase {
@Test
public void testEncodingWithQuery() throws BufferTooSmallException {
Hit hit = new FastHit();
- assertPacket(true, hit, new byte[] {0, 0, 0, 57, 0, 0, 0, -37, 0, 0, 40, 21, 0, 0, 0, 0, IGNORE, IGNORE, IGNORE,
+ assertPacket(true, hit, new byte[] {0, 0, 0, 53, 0, 0, 0, -37, 0, 0, 8, 21, 0, 0, 0, 0, IGNORE, IGNORE, IGNORE,
IGNORE, 7, 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 0x03, 0, 0, 0, 7,
- 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 1, 0, 0, 0, 6, 4, 0, 3, 102, 111, 111, 0, 0, 0, 2});
+ 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 1, 0, 0, 0, 6, 4, 0, 3, 102, 111, 111});
}
@Test
public void testEncodingWithoutQuery() throws BufferTooSmallException {
Hit hit = new FastHit();
- assertPacket(false, hit, new byte[] { 0, 0, 0, 43, 0, 0, 0, -37, 0, 0, 40, 17, 0, 0, 0, 0, IGNORE, IGNORE, IGNORE,
- IGNORE, 7, 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 0x03, 0, 0, 0, 7, 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 2
+ assertPacket(false, hit, new byte[] { 0, 0, 0, 39, 0, 0, 0, -37, 0, 0, 8, 17, 0, 0, 0, 0, IGNORE, IGNORE, IGNORE,
+ IGNORE, 7, 100, 101, 102, 97, 117, 108, 116, 0, 0, 0, 0x03, 0, 0, 0, 7, 100, 101, 102, 97, 117, 108, 116
});
}
@@ -56,7 +56,7 @@ public class GetDocSumsPacketTestCase {
result.hits().add(hit);
ByteBuffer answer = ByteBuffer.allocate(1024);
//assertEquals(0, sessionId.asUtf8String().getByteLength());
- answer.put(new byte[] { 0, 0, 0, (byte)(107+sessionId.asUtf8String().getByteLength()), 0, 0, 0, -37, 0, 0, 56, 17, 0, 0, 0, 0,
+ answer.put(new byte[] { 0, 0, 0, (byte)(103+sessionId.asUtf8String().getByteLength()), 0, 0, 0, -37, 0, 0, 24, 17, 0, 0, 0, 0,
// query timeout
IGNORE, IGNORE, IGNORE, IGNORE,
// "default" - rank profile
@@ -72,9 +72,7 @@ public class GetDocSumsPacketTestCase {
answer.put(new byte [] {
// caches: features => true
0, 0, 0, 6, 'c', 'a', 'c', 'h', 'e', 's',
- 0, 0, 0, 1, 0, 0, 0, 5, 'q', 'u', 'e', 'r', 'y', 0, 0, 0, 4, 't', 'r', 'u', 'e',
- // flags
- 0, 0, 0, 2});
+ 0, 0, 0, 1, 0, 0, 0, 5, 'q', 'u', 'e', 'r', 'y', 0, 0, 0, 4, 't', 'r', 'u', 'e'});
byte [] expected = new byte [answer.position()];
answer.flip();
answer.get(expected);
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
index c9773008e05..9c10078fdc0 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java
@@ -316,7 +316,7 @@ public class FastSearcherTestCase {
SessionId sessionId = query.getSessionId(false);
byte IGNORE = 69;
ByteBuffer answer = ByteBuffer.allocate(1024);
- answer.put(new byte[] { 0, 0, 0, (byte)(145+sessionId.asUtf8String().getByteLength()), 0, 0, 0, -37, 0, 0, 48, 17, 0, 0, 0, 0,
+ answer.put(new byte[] { 0, 0, 0, (byte)(141+sessionId.asUtf8String().getByteLength()), 0, 0, 0, -37, 0, 0, 16, 17, 0, 0, 0, 0,
// query timeout
IGNORE, IGNORE, IGNORE, IGNORE,
// "default" - rank profile
@@ -331,9 +331,7 @@ public class FastSearcherTestCase {
// match: documentdb.searchdoctype => test
0, 0, 0, 5, 'm', 'a', 't', 'c', 'h', 0, 0, 0, 1, 0, 0, 0, 24, 'd', 'o', 'c', 'u', 'm', 'e', 'n', 't', 'd', 'b', '.', 's', 'e', 'a', 'r', 'c', 'h', 'd', 'o', 'c', 't', 'y', 'p', 'e', 0, 0, 0, 4, 't', 'e', 's', 't',
// sessionId => qrserver.0.XXXXXXXXXXXXX.0
- 0, 0, 0, 6, 'c', 'a', 'c', 'h', 'e', 's', 0, 0, 0, 1, 0, 0, 0, 5, 'q', 'u', 'e', 'r', 'y', 0, 0, 0, 4, 't', 'r', 'u', 'e',
- // flags
- 0, 0, 0, 2});
+ 0, 0, 0, 6, 'c', 'a', 'c', 'h', 'e', 's', 0, 0, 0, 1, 0, 0, 0, 5, 'q', 'u', 'e', 'r', 'y', 0, 0, 0, 4, 't', 'r', 'u', 'e'});
byte [] expected = new byte [answer.position()];
answer.flip();
answer.get(expected);
diff --git a/container-search/src/test/java/com/yahoo/prelude/templates/test/qr-templates.cfg b/container-search/src/test/java/com/yahoo/prelude/templates/test/qr-templates.cfg
deleted file mode 100644
index 10efc3334be..00000000000
--- a/container-search/src/test/java/com/yahoo/prelude/templates/test/qr-templates.cfg
+++ /dev/null
@@ -1,104 +0,0 @@
-templateset[10]
-templateset[0].urlprefix "/xsearch"
-templateset[0].mimetype "text/xml"
-templateset[0].encoding "utf-8"
-templateset[0].rankprofile 0
-templateset[0].keepalive false
-templateset[0].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<RESULTSET TOTALHITS=\"$result.totalHitCount\">\n"
-templateset[0].footertemplate "</RESULTSET>"
-templateset[0].nohitstemplate "<XTEMPLATENOHITS/>\n"
-templateset[0].hittemplate "<XTEMPLATEHIT RELEVANCY=\"$hit.relevance\" SOURCE=\"$hit.source\" TYPE=\"$hit.typeString\" OFFSET=\"$hitno\">\n<FIELD NAME=\"uri\">$uri</FIELD>\n<FIELD NAME=\"category\">$category</FIELD>\n<FIELD NAME=\"bsumtitle\">$bsumtitle</FIELD>\n</XTEMPLATEHIT>\n"
-templateset[0].errortemplate "<ERROR CODE=\"$result.hits().error.code\">$result.hits().error.message</ERROR>\n"
-templateset[1].urlprefix "/cgi-bin/asearch"
-templateset[1].mimetype "text/html"
-templateset[1].encoding "utf-8"
-templateset[1].rankprofile 0
-templateset[1].keepalive false
-templateset[1].headertemplate "### Result\n"
-templateset[1].footertemplate "### Result\n"
-templateset[1].nohitstemplate "### Result\n"
-templateset[1].hittemplate "### Result\n"
-templateset[1].errortemplate "### Result\n"
-templateset[2].urlprefix "/groups"
-templateset[2].mimetype "text/xml"
-templateset[2].encoding "utf-8"
-templateset[2].rankprofile 0
-templateset[2].keepalive false
-templateset[2].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<RESULTSET TOTALHITS=\"$result.totalHitCount\">\n"
-templateset[2].footertemplate "</RESULTSET>"
-templateset[2].nohitstemplate "<XTEMPLATENOHITS/>\n"
-templateset[2].hittemplate "<XTEMPLATEHIT RELEVANCY=\"$relevancy\" SOURCE=\"$hit.source\" TYPE=\"$hit.typeString\" OFFSET=\"$hitno\">\n<FIELD NAME=\"uri\">$uri</FIELD>\n<FIELD NAME=\"category\">$category</FIELD>\n<FIELD NAME=\"bsumtitle\">$bsumtitle</FIELD>\n</XTEMPLATEHIT>\n"
-templateset[2].errortemplate "<ERROR CODE=\"$result.error.code\">$result.error.message</ERROR>"
-templateset[2].groupsheadertemplate "<GROUP ATTRIBUTE=\"$field\">\n"
-templateset[2].rangegrouptemplate "<RANGE LOW=\"$group.from\" HIGH=\"$group.to\" AMOUNT=\"$group.count\"/>\n"
-templateset[2].exactgrouptemplate "<VAL VAL=\"$group.value\" AMOUNT=\"$group.count\"/>\n"
-templateset[2].groupsfootertemplate "</GROUP>\n"
-templateset[3].urlprefix "/pertemplatebolding"
-templateset[3].mimetype "text/xml"
-templateset[3].encoding "utf-8"
-templateset[3].rankprofile 0
-templateset[3].keepalive false
-templateset[3].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<RESULTSET TOTALHITS=\"$result.totalHitCount\">\n"
-templateset[3].footertemplate "</RESULTSET>"
-templateset[3].nohitstemplate "<XTEMPLATENOHITS/>\n"
-templateset[3].hittemplate "<BOLDINGTEST>\n<FIELD NAME=\"uri\">$uri</FIELD>\n<FIELD NAME=\"bsumtitle\" NOTE=\"bolded escaped\">$bsumtitle</FIELD>\n<FIELD NAME=\"bsumtitle\" NOTE=\"bolded unescaped\">$hit.getField(\"bsumtitle\")</FIELD>\n<FIELD NAME=\"bsumtitle\" NOTE=\"unbolded unescaped\">$hit.getField(\"bsumtitle\").bareContent(false, false)</FIELD>\n<FIELD NAME=\"bsumtitle\" NOTE=\"unbolded escaped\">$hit.getField(\"bsumtitle\").bareContent(true, false)</FIELD>\n</BOLDINGTEST>\n"
-templateset[3].errortemplate "<ERROR CODE=\"$result.error.code\">$result.error.message</ERROR>\n"
-templateset[4].urlprefix "/customhighlighttags"
-templateset[4].mimetype "text/xml"
-templateset[4].encoding "utf-8"
-templateset[4].rankprofile 0
-templateset[4].keepalive false
-templateset[4].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<RESULTSET TOTALHITS=\"$result.totalHitCount\">\n"
-templateset[4].footertemplate "</RESULTSET>"
-templateset[4].nohitstemplate "<XTEMPLATENOHITS/>\n"
-templateset[4].hittemplate "<XTEMPLATEHIT RELEVANCY=\"$hit.relevance\" SOURCE=\"$hit.source\" TYPE=\"$hit.typeString\" OFFSET=\"$hitno\">\n<FIELD NAME=\"uri\">$uri</FIELD>\n<FIELD NAME=\"category\">$category</FIELD>\n<FIELD NAME=\"bsumtitle\">$bsumtitle</FIELD>\n</XTEMPLATEHIT>\n"
-templateset[4].errortemplate "<ERROR CODE=\"$result.error.code\">$result.error.message</ERROR>\n"
-templateset[4].highlightstarttag "<b>"
-templateset[4].highlightendtag "</b>"
-templateset[4].highlightseptag "<p />"
-templateset[5].urlprefix "/checkunsigned"
-templateset[5].mimetype "text/xml"
-templateset[5].encoding "utf-8"
-templateset[5].rankprofile 0
-templateset[5].keepalive false
-templateset[5].headertemplate ""
-templateset[5].footertemplate ""
-templateset[5].nohitstemplate ""
-templateset[5].hittemplate "$number $context.asUnsigned(\"number\")"
-templateset[5].errortemplate ""
-templateset[5].highlightstarttag ""
-templateset[5].highlightendtag ""
-templateset[5].highlightseptag ""
-templateset[6].urlprefix "/summaryclasstest"
-templateset[6].mimetype "text/xml"
-templateset[6].encoding "utf-8"
-templateset[6].rankprofile 0
-templateset[6].keepalive false
-templateset[6].headertemplate "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<result>\n"
-templateset[6].footertemplate "</result>"
-templateset[6].nohitstemplate "<nohits />\n"
-templateset[6].hittemplate "<hit />\n"
-templateset[6].errortemplate "<error />\n"
-templateset[6].defaultsummaryclass "gnurglegnokk"
-templateset[7].urlprefix "/lazydecoding"
-templateset[7].mimetype "text/plain"
-templateset[7].encoding "utf-8"
-templateset[7].rankprofile 0
-templateset[7].keepalive false
-templateset[7].headertemplate ""
-templateset[7].footertemplate ""
-templateset[7].nohitstemplate "no hits"
-templateset[7].hittemplate "$URL\n$TITLE\n$WORDS\n$IPADDRESS"
-templateset[7].errortemplate "error"
-templateset[8].urlprefix "/java"
-templateset[8].classid "com.yahoo.prelude.templates.test.TestTemplate"
-templateset[8].mimetype "text/plain"
-templateset[8].encoding "utf-8"
-templateset[8].rankprofile 0
-templateset[8].keepalive false
-templateset[9].urlprefix "/boom"
-templateset[9].classid "com.yahoo.prelude.templates.test.BoomTemplate"
-templateset[9].mimetype "text/plain"
-templateset[9].encoding "utf-8"
-templateset[9].rankprofile 0
-templateset[9].keepalive false
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
index e94c11e4473..5fa9dee8370 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
@@ -47,18 +47,7 @@ public class LoadBalancerTest {
}
@Test
- public void requreThatLoadBalancerIgnoresClusteredSingleGroup() {
- Node n1 = new SearchCluster.Node(0, "test-node1", 0, 0);
- Node n2 = new SearchCluster.Node(1, "test-node2", 1, 0);
- SearchCluster cluster = new SearchCluster(88.0, Arrays.asList(n1, n2), null, 2, null);
- LoadBalancer lb = new LoadBalancer(cluster);
-
- Optional<Group> grp = lb.takeGroupForQuery(new Query());
- assertThat(grp.isPresent(), is(false));
- }
-
- @Test
- public void requreThatLoadBalancerIgnoresClusteredGroups() {
+ public void requreThatLoadBalancerServesClusteredGroups() {
Node n1 = new SearchCluster.Node(0, "test-node1", 0, 0);
Node n2 = new SearchCluster.Node(1, "test-node2", 1, 0);
Node n3 = new SearchCluster.Node(0, "test-node3", 0, 1);
@@ -67,7 +56,7 @@ public class LoadBalancerTest {
LoadBalancer lb = new LoadBalancer(cluster);
Optional<Group> grp = lb.takeGroupForQuery(new Query());
- assertThat(grp.isPresent(), is(false));
+ assertThat(grp.isPresent(), is(true));
}
@Test
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
index 20e9710f092..849912ef581 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
@@ -1,7 +1,9 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.HostName;
+import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import java.util.Map;
@@ -17,6 +19,12 @@ public interface MetricsService {
DeploymentMetrics getDeploymentMetrics(ApplicationId application, ZoneId zone);
+ /**
+ * Get status for a global rotation
+ * @param rotationName The fully qualified domain name of the rotation
+ */
+ Map<HostName, RotationStatus> getRotationStatus(String rotationName);
+
Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, ZoneId zone);
class DeploymentMetrics {
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java
index a238facc983..713fd7e273c 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobType.java
@@ -25,6 +25,7 @@ public enum JobType {
productionEuWest1 ("production-eu-west-1" , ZoneId.from("prod" , "eu-west-1") , null ),
productionAwsUsEast1a ("production-aws-us-east-1a" , ZoneId.from("prod" , "aws-us-east-1a") , null ),
productionAwsUsWest1b ("production-aws-us-west-1b" , ZoneId.from("prod" , "aws-us-west-1b") , null ),
+ productionAwsUsEast1b ("production-aws-us-east-1b" , ZoneId.from("prod" , "aws-us-east-1b") , null ),
productionCdAwsUsEast1a("production-cd-aws-us-east-1a", null , ZoneId.from("prod" , "cd-aws-us-east-1a")),
productionCdUsCentral1 ("production-cd-us-central-1" , null , ZoneId.from("prod" , "cd-us-central-1") ),
productionCdUsCentral2 ("production-cd-us-central-2" , null , ZoneId.from("prod" , "cd-us-central-2") );
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockOrganization.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockOrganization.java
index 8efbde52d4a..82d3be596bc 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockOrganization.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockOrganization.java
@@ -13,6 +13,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicLong;
@@ -38,6 +39,8 @@ public class MockOrganization extends AbstractComponent implements Organization
@Override
public IssueId file(Issue issue) {
+ if ( ! properties.containsKey(issue.propertyId()))
+ throw new NoSuchElementException("Unknown property '" + issue.propertyId() + "'!");
IssueId issueId = IssueId.from("" + counter.incrementAndGet());
issues.put(issueId, new MockIssue(issue));
return issueId;
@@ -153,7 +156,7 @@ public class MockOrganization extends AbstractComponent implements Organization
this.issue = issue;
this.updated = clock.instant();
this.open = true;
- this.assignee = issue.assignee().orElse(properties.get(issue.propertyId()).defaultAssignee);
+ this.assignee = issue.assignee().orElse(null);
}
public Issue issue() { return issue; }
@@ -164,11 +167,10 @@ public class MockOrganization extends AbstractComponent implements Organization
private class PropertyInfo {
- private User defaultAssignee;
private List<List<User>> contacts = Collections.emptyList();
- private URI issueUrl;
- private URI contactsUrl;
- private URI propertyUrl;
+ private URI issueUrl = URI.create("issues.tld");
+ private URI contactsUrl = URI.create("contacts.tld");
+ private URI propertyUrl = URI.create("properties.tld");
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/GlobalRoutingService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/GlobalRoutingService.java
deleted file mode 100644
index d49d6a9e4c2..00000000000
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/GlobalRoutingService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.controller.api.integration.routing;
-
-import java.util.Map;
-
-/**
- * A global routing service.
- *
- * @author mpolden
- */
-public interface GlobalRoutingService {
-
- /** Returns the health status for each endpoint behind the given rotation name */
- Map<String, RotationStatus> getHealthStatus(String rotationName);
-
-}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/MemoryGlobalRoutingService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/MemoryGlobalRoutingService.java
deleted file mode 100644
index 9f1ac1b1f0b..00000000000
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/routing/MemoryGlobalRoutingService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.controller.api.integration.routing;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author bratseth
- */
-public class MemoryGlobalRoutingService implements GlobalRoutingService {
-
- @Override
- public Map<String, RotationStatus> getHealthStatus(String rotationName) {
- HashMap<String, RotationStatus> map = new HashMap<>();
- map.put("prod.us-west-1", RotationStatus.IN);
- return Collections.unmodifiableMap(map);
- }
-
-}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
index 677f2363c08..cd5178d80ac 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller;
import com.google.common.collect.ImmutableMap;
@@ -7,6 +7,7 @@ import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService.ApplicationMetrics;
import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
@@ -16,12 +17,12 @@ import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.vespa.hosted.controller.rotation.RotationId;
import java.time.Instant;
import java.util.Collections;
import java.util.Comparator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -40,6 +41,7 @@ import java.util.stream.Collectors;
public class Application {
private final ApplicationId id;
+ private final Instant createdAt;
private final DeploymentSpec deploymentSpec;
private final ValidationOverrides validationOverrides;
private final Map<ZoneId, Deployment> deployments;
@@ -49,51 +51,48 @@ public class Application {
private final Optional<IssueId> ownershipIssueId;
private final ApplicationMetrics metrics;
private final Optional<RotationId> rotation;
+ private final Map<HostName, RotationStatus> rotationStatus;
/** Creates an empty application */
- public Application(ApplicationId id) {
- this(id, DeploymentSpec.empty, ValidationOverrides.empty, Collections.emptyMap(),
+ public Application(ApplicationId id, Instant now) {
+ this(id, now, DeploymentSpec.empty, ValidationOverrides.empty, Collections.emptyMap(),
new DeploymentJobs(OptionalLong.empty(), Collections.emptyList(), Optional.empty(), false),
Change.empty(), Change.empty(), Optional.empty(), new ApplicationMetrics(0, 0),
- Optional.empty());
+ Optional.empty(), Collections.emptyMap());
}
/** Used from persistence layer: Do not use */
- public Application(ApplicationId id, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
+ public Application(ApplicationId id, Instant createdAt, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
List<Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, ApplicationMetrics metrics,
- Optional<RotationId> rotation) {
- this(id, deploymentSpec, validationOverrides,
+ Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
+ this(id, createdAt, deploymentSpec, validationOverrides,
deployments.stream().collect(Collectors.toMap(Deployment::zone, d -> d)),
- deploymentJobs, change, outstandingChange, ownershipIssueId, metrics, rotation);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, metrics, rotation, rotationStatus);
}
- Application(ApplicationId id, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
+ Application(ApplicationId id, Instant createdAt, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
Map<ZoneId, Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, ApplicationMetrics metrics,
- Optional<RotationId> rotation) {
- Objects.requireNonNull(id, "id cannot be null");
- Objects.requireNonNull(deploymentSpec, "deploymentSpec cannot be null");
- Objects.requireNonNull(validationOverrides, "validationOverrides cannot be null");
- Objects.requireNonNull(deployments, "deployments cannot be null");
- Objects.requireNonNull(deploymentJobs, "deploymentJobs cannot be null");
- Objects.requireNonNull(change, "change cannot be null");
- Objects.requireNonNull(metrics, "metrics cannot be null");
- Objects.requireNonNull(rotation, "rotation cannot be null");
- this.id = id;
- this.deploymentSpec = deploymentSpec;
- this.validationOverrides = validationOverrides;
- this.deployments = ImmutableMap.copyOf(deployments);
- this.deploymentJobs = deploymentJobs;
- this.change = change;
- this.outstandingChange = outstandingChange;
- this.ownershipIssueId = ownershipIssueId;
- this.metrics = metrics;
- this.rotation = rotation;
+ Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
+ this.id = Objects.requireNonNull(id, "id cannot be null");
+ this.createdAt = Objects.requireNonNull(createdAt, "instant of creation cannot be null");
+ this.deploymentSpec = Objects.requireNonNull(deploymentSpec, "deploymentSpec cannot be null");
+ this.validationOverrides = Objects.requireNonNull(validationOverrides, "validationOverrides cannot be null");
+ this.deployments = ImmutableMap.copyOf(Objects.requireNonNull(deployments, "deployments cannot be null"));
+ this.deploymentJobs = Objects.requireNonNull(deploymentJobs, "deploymentJobs cannot be null");
+ this.change = Objects.requireNonNull(change, "change cannot be null");
+ this.outstandingChange = Objects.requireNonNull(outstandingChange, "outstandingChange cannot be null");
+ this.ownershipIssueId = Objects.requireNonNull(ownershipIssueId, "ownershipIssueId cannot be null");
+ this.metrics = Objects.requireNonNull(metrics, "metrics cannot be null");
+ this.rotation = Objects.requireNonNull(rotation, "rotation cannot be null");
+ this.rotationStatus = ImmutableMap.copyOf(Objects.requireNonNull(rotationStatus, "rotationStatus cannot be null"));
}
public ApplicationId id() { return id; }
+ public Instant createdAt() { return createdAt; }
+
/**
* Returns the last deployed deployment spec of this application,
* or the empty deployment spec if it has never been deployed
@@ -129,12 +128,20 @@ public class Application {
public Change change() { return change; }
/**
- * Returns the change that should used for this application at the given instant, typically now.
+ * Returns the target that should be used for this application at the given instant, typically now.
+ *
+ * This will be any parts of current total change that aren't both blocked and not yet deployed anywhere.
*/
public Change changeAt(Instant now) {
- Change change = change();
- if ( ! deploymentSpec.canUpgradeAt(now)) change = change.withoutPlatform();
- if ( ! deploymentSpec.canChangeRevisionAt(now)) change = change.withoutApplication();
+ Change change = this.change;
+ if ( this.change.platform().isPresent()
+ && productionDeployments().values().stream().noneMatch(deployment -> deployment.version().equals(this.change.platform().get()))
+ && ! deploymentSpec.canUpgradeAt(now))
+ change = change.withoutPlatform();
+ if ( this.change.application().isPresent()
+ && productionDeployments().values().stream().noneMatch(deployment -> deployment.applicationVersion().equals(this.change.application().get()))
+ && ! deploymentSpec.canChangeRevisionAt(now))
+ change = change.withoutApplication();
return change;
}
@@ -182,6 +189,24 @@ public class Application {
return rotation.map(rotation -> new ApplicationRotation(id, rotation));
}
+ /** Returns the status of the global rotation assigned to this. Wil be empty if this does not have a global rotation. */
+ public Map<HostName, RotationStatus> rotationStatus() {
+ return rotationStatus;
+ }
+
+ /** Returns the global rotation status of given deployment */
+ public RotationStatus rotationStatus(Deployment deployment) {
+ // Rotation status only contains VIP host names, one per zone in the system. The only way to map VIP hostname to
+ // this deployment, and thereby determine rotation status, is to check if VIP hostname contains the
+ // deployment's environment and region.
+ // TODO: change this map to be indexed by zones, then?
+ return rotationStatus.entrySet().stream()
+ .filter(kv -> kv.getKey().value().contains(deployment.zone().value()))
+ .map(Map.Entry::getValue)
+ .findFirst()
+ .orElse(RotationStatus.unknown);
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index af5b9198343..b3158102182 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -44,6 +44,7 @@ import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.application.JobStatus.JobRun;
import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.hosted.controller.concurrent.Once;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentSteps;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import com.yahoo.vespa.hosted.controller.rotation.Rotation;
@@ -274,7 +275,7 @@ public class ApplicationController {
zmsClient.addApplication(((AthenzTenant) tenant.get()).domain(),
new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId(id.application().value()));
}
- LockedApplication application = new LockedApplication(new Application(id), lock);
+ LockedApplication application = new LockedApplication(new Application(id, clock.instant()), lock);
store(application);
log.info("Created " + application);
return application.get();
@@ -330,13 +331,9 @@ public class ApplicationController {
validateRun(application.get(), zone, platformVersion, applicationVersion);
}
- validate(applicationPackage.deploymentSpec());
-
// Update application with information from application package
- if ( ! preferOldestVersion && ! application.get().deploymentJobs().builtInternally()) {
- application = withUpdatedConfig(application, applicationPackage);
- store(application); // store missing information even if we fail deployment below
- }
+ if ( ! preferOldestVersion && ! application.get().deploymentJobs().builtInternally())
+ application = storeWithUpdatedConfig(application, applicationPackage);
// Assign global rotation
application = withRotation(application, zone);
@@ -359,8 +356,9 @@ public class ApplicationController {
}
/** Stores the deployment spec and validation overrides from the application package, and runs cleanup. */
- public LockedApplication withUpdatedConfig(LockedApplication application, ApplicationPackage applicationPackage) {
- // Store information about application package
+ public LockedApplication storeWithUpdatedConfig(LockedApplication application, ApplicationPackage applicationPackage) {
+ validate(applicationPackage.deploymentSpec());
+
application = application.with(applicationPackage.deploymentSpec());
application = application.with(applicationPackage.validationOverrides());
@@ -504,6 +502,11 @@ public class ApplicationController {
/** Returns the endpoints of the deployment, or an empty list if the request fails */
public Optional<List<URI>> getDeploymentEndpoints(DeploymentId deploymentId) {
+ if ( ! get(deploymentId.applicationId())
+ .map(application -> application.deployments().containsKey(deploymentId.zoneId()))
+ .orElse(deploymentId.applicationId().instance().isTester()))
+ throw new NotExistsException("Deployment", deploymentId.toString());
+
try {
return Optional.of(ImmutableList.copyOf(routingGenerator.endpoints(deploymentId).stream()
.map(RoutingEndpoint::getEndpoint)
@@ -526,12 +529,10 @@ public class ApplicationController {
*/
public void deleteApplication(ApplicationId applicationId, Optional<NToken> token) {
// Find all instances of the application
- List<ApplicationId> instances = controller.applications().asList(applicationId.tenant())
- .stream()
- .map(Application::id)
- .filter(id -> id.application().equals(applicationId.application()) &&
- id.tenant().equals(applicationId.tenant()))
- .collect(Collectors.toList());
+ List<ApplicationId> instances = asList(applicationId.tenant()).stream()
+ .map(Application::id)
+ .filter(id -> id.application().equals(applicationId.application()))
+ .collect(Collectors.toList());
if (instances.isEmpty()) {
throw new NotExistsException("Could not delete application '" + applicationId + "': Application not found");
}
@@ -646,6 +647,7 @@ public class ApplicationController {
/** Verify that each of the production zones listed in the deployment spec exist in this system. */
private void validate(DeploymentSpec deploymentSpec) {
+ new DeploymentSteps(deploymentSpec, controller::system).jobs();
deploymentSpec.zones().stream()
.filter(zone -> zone.environment() == Environment.prod)
.forEach(zone -> {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
index 1576ab597be..731ed718fc0 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
@@ -24,14 +24,11 @@ import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitHub;
import com.yahoo.vespa.hosted.controller.api.integration.organization.Organization;
-import com.yahoo.vespa.hosted.controller.api.integration.routing.GlobalRoutingService;
-import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus;
import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator;
import com.yahoo.vespa.hosted.controller.api.integration.zone.CloudName;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry;
import com.yahoo.vespa.hosted.controller.deployment.JobController;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
-import com.yahoo.vespa.hosted.controller.rotation.Rotation;
import com.yahoo.vespa.hosted.controller.versions.OsVersion;
import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
@@ -74,7 +71,6 @@ public class Controller extends AbstractComponent {
private final Clock clock;
private final GitHub gitHub;
private final EntityService entityService;
- private final GlobalRoutingService globalRoutingService;
private final ZoneRegistry zoneRegistry;
private final ConfigServer configServer;
private final MetricsService metricsService;
@@ -89,14 +85,13 @@ public class Controller extends AbstractComponent {
@Inject
public Controller(CuratorDb curator, RotationsConfig rotationsConfig,
GitHub gitHub, EntityService entityService, Organization organization,
- GlobalRoutingService globalRoutingService,
ZoneRegistry zoneRegistry, ConfigServer configServer,
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, AthenzClientFactory athenzClientFactory,
ArtifactRepository artifactRepository, ApplicationStore applicationStore, TesterCloud testerCloud,
BuildService buildService, RunDataStore runDataStore) {
this(curator, rotationsConfig,
- gitHub, entityService, globalRoutingService, zoneRegistry,
+ gitHub, entityService, zoneRegistry,
configServer, metricsService, nameService, routingGenerator, chef,
Clock.systemUTC(), athenzClientFactory, artifactRepository, applicationStore, testerCloud,
buildService, runDataStore, com.yahoo.net.HostName::getLocalhost);
@@ -104,7 +99,6 @@ public class Controller extends AbstractComponent {
public Controller(CuratorDb curator, RotationsConfig rotationsConfig,
GitHub gitHub, EntityService entityService,
- GlobalRoutingService globalRoutingService,
ZoneRegistry zoneRegistry, ConfigServer configServer,
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, Clock clock,
@@ -116,7 +110,6 @@ public class Controller extends AbstractComponent {
this.curator = Objects.requireNonNull(curator, "Curator cannot be null");
this.gitHub = Objects.requireNonNull(gitHub, "GitHub cannot be null");
this.entityService = Objects.requireNonNull(entityService, "EntityService cannot be null");
- this.globalRoutingService = Objects.requireNonNull(globalRoutingService, "GlobalRoutingService cannot be null");
this.zoneRegistry = Objects.requireNonNull(zoneRegistry, "ZoneRegistry cannot be null");
this.configServer = Objects.requireNonNull(configServer, "ConfigServer cannot be null");
this.metricsService = Objects.requireNonNull(metricsService, "MetricsService cannot be null");
@@ -168,10 +161,6 @@ public class Controller extends AbstractComponent {
public ZoneRegistry zoneRegistry() { return zoneRegistry; }
- public Map<String, RotationStatus> rotationStatus(Rotation rotation) {
- return globalRoutingService.getHealthStatus(rotation.name());
- }
-
public ApplicationView getApplicationView(String tenantName, String applicationName, String instanceName,
String environment, String region) {
return configServer.getApplicationView(tenantName, applicationName, instanceName, environment, region);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
index 2209cdf3013..433a6d3ed38 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
@@ -6,10 +6,12 @@ import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService.ApplicationMetrics;
import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.ApplicationRotation;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
@@ -40,6 +42,7 @@ public class LockedApplication {
private final Lock lock;
private final ApplicationId id;
+ private final Instant createdAt;
private final DeploymentSpec deploymentSpec;
private final ValidationOverrides validationOverrides;
private final Map<ZoneId, Deployment> deployments;
@@ -49,6 +52,7 @@ public class LockedApplication {
private final Optional<IssueId> ownershipIssueId;
private final ApplicationMetrics metrics;
private final Optional<RotationId> rotation;
+ private final Map<HostName, RotationStatus> rotationStatus;
/**
* Used to create a locked application
@@ -57,21 +61,23 @@ public class LockedApplication {
* @param lock The lock for the application.
*/
LockedApplication(Application application, Lock lock) {
- this(Objects.requireNonNull(lock, "lock cannot be null"), application.id(),
+ this(Objects.requireNonNull(lock, "lock cannot be null"), application.id(), application.createdAt(),
application.deploymentSpec(), application.validationOverrides(),
application.deployments(),
application.deploymentJobs(), application.change(), application.outstandingChange(),
application.ownershipIssueId(), application.metrics(),
- application.rotation().map(ApplicationRotation::id));
+ application.rotation().map(ApplicationRotation::id),
+ application.rotationStatus());
}
- private LockedApplication(Lock lock, ApplicationId id,
+ private LockedApplication(Lock lock, ApplicationId id, Instant createdAt,
DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
Map<ZoneId, Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, ApplicationMetrics metrics,
- Optional<RotationId> rotation) {
+ Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
this.lock = lock;
this.id = id;
+ this.createdAt = createdAt;
this.deploymentSpec = deploymentSpec;
this.validationOverrides = validationOverrides;
this.deployments = deployments;
@@ -81,43 +87,44 @@ public class LockedApplication {
this.ownershipIssueId = ownershipIssueId;
this.metrics = metrics;
this.rotation = rotation;
+ this.rotationStatus = rotationStatus;
}
/** Returns a read-only copy of this */
public Application get() {
- return new Application(id, deploymentSpec, validationOverrides, deployments, deploymentJobs, change,
- outstandingChange, ownershipIssueId, metrics, rotation);
+ return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, change,
+ outstandingChange, ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withBuiltInternally(boolean builtInternally) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withBuiltInternally(builtInternally), change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withProjectId(OptionalLong projectId) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withProjectId(projectId), change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withDeploymentIssueId(IssueId issueId) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.with(issueId), change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withJobCompletion(long projectId, JobType jobType, JobStatus.JobRun completion,
Optional<DeploymentJobs.JobError> jobError) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withCompletion(projectId, jobType, completion, jobError),
- change, outstandingChange, ownershipIssueId, metrics, rotation);
+ change, outstandingChange, ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withJobTriggering(JobType jobType, JobStatus.JobRun job) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withTriggering(jobType, job), change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withNewDeployment(ZoneId zone, ApplicationVersion applicationVersion, Version version,
@@ -165,51 +172,56 @@ public class LockedApplication {
}
public LockedApplication withoutDeploymentJob(JobType jobType) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.without(jobType), change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication with(DeploymentSpec deploymentSpec) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication with(ValidationOverrides validationOverrides) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withChange(Change change) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withOutstandingChange(Change outstandingChange) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication withOwnershipIssueId(IssueId issueId) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- Optional.ofNullable(issueId), metrics, rotation);
+ Optional.ofNullable(issueId), metrics, rotation, rotationStatus);
}
public LockedApplication with(MetricsService.ApplicationMetrics metrics) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
public LockedApplication with(RotationId rotation) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, Optional.of(rotation));
+ ownershipIssueId, metrics, Optional.of(rotation), rotationStatus);
+ }
+
+ public LockedApplication withRotationStatus(Map<HostName, RotationStatus> rotationStatus) {
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, change,
+ outstandingChange, ownershipIssueId, metrics, rotation, rotationStatus);
}
/** Don't expose non-leaf sub-objects. */
@@ -220,9 +232,9 @@ public class LockedApplication {
}
private LockedApplication with(Map<ZoneId, Deployment> deployments) {
- return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, metrics, rotation);
+ ownershipIssueId, metrics, rotation, rotationStatus);
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java
index a2433d223dc..c099e856d04 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java
@@ -30,7 +30,7 @@ public class Deployment {
public Deployment(ZoneId zone, ApplicationVersion applicationVersion, Version version, Instant deployTime) {
this(zone, applicationVersion, version, deployTime, Collections.emptyMap(), Collections.emptyMap(),
- new DeploymentMetrics(), DeploymentActivity.none);
+ DeploymentMetrics.none, DeploymentActivity.none);
}
public Deployment(ZoneId zone, ApplicationVersion applicationVersion, Version version, Instant deployTime,
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java
index c0f7bd6c6a1..35bc86cac6c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java
@@ -2,24 +2,20 @@
package com.yahoo.vespa.hosted.controller.application;
/**
+ * Metrics for a deployment of an application.
+ *
* @author smorgrav
*/
public class DeploymentMetrics {
+ public static final DeploymentMetrics none = new DeploymentMetrics(0, 0, 0, 0, 0);
+
private final double queriesPerSecond;
private final double writesPerSecond;
private final double documentCount;
private final double queryLatencyMillis;
private final double writeLatencyMills;
- DeploymentMetrics() {
- this.queriesPerSecond = 0;
- this.writesPerSecond = 0;
- this.documentCount = 0;
- this.queryLatencyMillis = 0;
- this.writeLatencyMills = 0;
- }
-
public DeploymentMetrics(double queriesPerSecond, double writesPerSecond, double documentCount,
double queryLatencyMillis, double writeLatencyMills) {
this.queriesPerSecond = queriesPerSecond;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RotationStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RotationStatus.java
new file mode 100644
index 00000000000..c9e174e7191
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RotationStatus.java
@@ -0,0 +1,20 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.application;
+
+/**
+ * Represents the health status of a global rotation.
+ *
+ * @author mpolden
+ */
+public enum RotationStatus {
+
+ /** Rotation has status 'in' and is receiving traffic */
+ in,
+
+ /** Rotation has status 'out' and is *NOT* receiving traffic */
+ out,
+
+ /** Rotation status is currently unknown, or no global rotation has been assigned */
+ unknown
+
+}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
index 5086cebc1cf..759c666e042 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTrigger.java
@@ -114,9 +114,14 @@ public class DeploymentTrigger {
}
}
else {
- triggering = application.get().deploymentJobs().statusOf(report.jobType()).flatMap(JobStatus::lastTriggered)
+ triggering = application.get().deploymentJobs().statusOf(report.jobType())
+ .filter(job -> job.lastTriggered().isPresent()
+ && job.lastCompleted()
+ .map(completion -> ! completion.at().isAfter(job.lastTriggered().get().at()))
+ .orElse(true))
.orElseThrow(() -> new IllegalStateException("Notified of completion of " + report.jobType().jobName() + " for " +
- report.applicationId() + ", but that has neither been triggered nor deployed"));
+ report.applicationId() + ", but that has neither been triggered nor deployed"))
+ .lastTriggered().get();
}
application = application.withJobCompletion(report.projectId(),
report.jobType(),
@@ -455,6 +460,9 @@ public class DeploymentTrigger {
// ---------- Change management o_O ----------
private boolean acceptNewApplicationVersion(Application application) {
+ if ( ! application.deploymentSpec().canChangeRevisionAt(clock.instant()) // If rolling out revision
+ && application.changeAt(clock.instant()).application().isPresent() // which isn't complete, but in prod
+ && ! application.deploymentJobs().hasFailures()) return false; // and isn't failing, delay the new submission.
if (application.change().application().isPresent()) return true; // More application changes are ok.
if (application.deploymentJobs().hasFailures()) return true; // Allow changes to fix upgrade problems.
return ! application.changeAt(clock.instant()).platform().isPresent();
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
index 2bb878366c5..71b93731a44 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
@@ -101,7 +101,7 @@ public class InternalStepRunner implements StepRunner {
case endTests: return endTests(id, logger);
case deactivateReal: return deactivateReal(id, logger);
case deactivateTester: return deactivateTester(id, logger);
- case report: return report(id);
+ case report: return report(id, logger);
default: throw new AssertionError("Unknown step '" + step + "'!");
}
}
@@ -398,8 +398,13 @@ public class InternalStepRunner implements StepRunner {
return Optional.of(running);
}
- private Optional<RunStatus> report(RunId id) {
- controller.jobController().active(id).ifPresent(run -> controller.applications().deploymentTrigger().notifyOfCompletion(report(run)));
+ private Optional<RunStatus> report(RunId id, DualLogger logger) {
+ try {
+ controller.jobController().active(id).ifPresent(run -> controller.applications().deploymentTrigger().notifyOfCompletion(report(run)));
+ }
+ catch (IllegalStateException e) {
+ logger.log(INFO, "Job '" + id.type() + "'no longer supposed to run?:", e);
+ }
return Optional.of(running);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index e9b0267a443..3cff6ac2430 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -203,32 +203,31 @@ public class JobController {
* Accepts and stores a new application package and test jar pair under a generated application version key.
*/
public ApplicationVersion submit(ApplicationId id, SourceRevision revision,
- byte[] applicationPackage, byte[] applicationTestPackage) {
+ byte[] packageBytes, byte[] testPackageBytes) {
AtomicReference<ApplicationVersion> version = new AtomicReference<>();
controller.applications().lockOrThrow(id, application -> {
+ if ( ! application.get().deploymentJobs().builtInternally()) {
+ // Copy all current packages to the new application store
+ application.get().deployments().values().stream()
+ .map(Deployment::applicationVersion)
+ .distinct()
+ .forEach(appVersion -> {
+ byte[] content = controller.applications().artifacts().getApplicationPackage(application.get().id(), appVersion.id());
+ controller.applications().applicationStore().putApplicationPackage(application.get().id(), appVersion.id(), content);
+ });
+ }
+
long run = nextBuild(id);
version.set(ApplicationVersion.from(revision, run));
controller.applications().applicationStore().putApplicationPackage(id,
- version.get().id(),
- applicationPackage);
+ version.get().id(),
+ packageBytes);
controller.applications().applicationStore().putTesterPackage(testerOf(id),
version.get().id(),
- applicationTestPackage);
-
- if (!application.get().deploymentJobs().builtInternally()) {
- // Copy all current packages to the new application store
- application.get().deployments().values().stream()
- .map(Deployment::applicationVersion)
- .distinct()
- .forEach(appVersion -> {
- byte[] content = controller.applications().artifacts().getApplicationPackage(application.get().id(), appVersion.id());
- controller.applications().applicationStore().putApplicationPackage(application.get().id(), appVersion.id(), content);
- });
- }
+ testPackageBytes);
- controller.applications().store(controller.applications().withUpdatedConfig(application.withBuiltInternally(true),
- new ApplicationPackage(applicationPackage)));
+ controller.applications().storeWithUpdatedConfig(application.withBuiltInternally(true), new ApplicationPackage(packageBytes));
notifyOfNewSubmission(id, revision, run);
});
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmer.java
index 8db7231c207..349f4390fd1 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmer.java
@@ -11,7 +11,9 @@ import com.yahoo.vespa.hosted.controller.api.integration.organization.User;
import com.yahoo.vespa.hosted.controller.application.ApplicationList;
import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant;
import com.yahoo.vespa.hosted.controller.tenant.Tenant;
+import com.yahoo.yolean.Exceptions;
+import java.io.UncheckedIOException;
import java.time.Duration;
import java.util.NoSuchElementException;
import java.util.Optional;
@@ -35,29 +37,37 @@ public class ApplicationOwnershipConfirmer extends Maintainer {
@Override
protected void maintain() {
- confirmApplicationOwnerships();
- ensureConfirmationResponses();
+ try {
+ confirmApplicationOwnerships();
+ ensureConfirmationResponses();
+ }
+ catch (UncheckedIOException e) {
+ log.log(Level.INFO, () -> "IO exception handling issues, will retry in " + maintenanceInterval() + ": '" + Exceptions.toMessageString(e));
+ }
}
/** File an ownership issue with the owners of all applications we know about. */
private void confirmApplicationOwnerships() {
ApplicationList.from(controller().applications().asList())
- .notPullRequest()
- .hasProductionDeployment()
- .asList()
- .forEach(application -> {
- try {
- Tenant tenant = ownerOf(application.id());
- Optional<IssueId> ourIssueId = application.ownershipIssueId();
- ourIssueId = tenant instanceof AthenzTenant
- ? ownershipIssues.confirmOwnership(ourIssueId, application.id(), propertyIdFor((AthenzTenant) tenant))
- : ownershipIssues.confirmOwnership(ourIssueId, application.id(), userFor(tenant));
- ourIssueId.ifPresent(issueId -> store(issueId, application.id()));
- }
- catch (RuntimeException e) { // Catch errors due to wrong data in the controller, or issues client timeout.
- log.log(Level.WARNING, "Exception caught when attempting to file an issue for " + application.id(), e);
- }
- });
+ .notPullRequest()
+ .withProjectId()
+ .hasProductionDeployment()
+ .asList()
+ .stream()
+ .filter(application -> application.createdAt().isBefore(controller().clock().instant().minus(Duration.ofDays(90))))
+ .forEach(application -> {
+ try {
+ Tenant tenant = ownerOf(application.id());
+ Optional<IssueId> ourIssueId = application.ownershipIssueId();
+ ourIssueId = tenant instanceof AthenzTenant
+ ? ownershipIssues.confirmOwnership(ourIssueId, application.id(), propertyIdFor((AthenzTenant) tenant))
+ : ownershipIssues.confirmOwnership(ourIssueId, application.id(), userFor(tenant));
+ ourIssueId.ifPresent(issueId -> store(issueId, application.id()));
+ }
+ catch (RuntimeException e) { // Catch errors due to wrong data in the controller, or issues client timeout.
+ log.log(Level.WARNING, "Exception caught when attempting to file an issue for " + application.id(), e);
+ }
+ });
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporter.java
index 91eda31d779..c9718af7dff 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporter.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporter.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.SystemName;
import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
@@ -12,7 +13,9 @@ import com.yahoo.vespa.hosted.controller.api.integration.organization.User;
import com.yahoo.vespa.hosted.controller.application.ApplicationList;
import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant;
import com.yahoo.vespa.hosted.controller.tenant.Tenant;
+import com.yahoo.yolean.Exceptions;
+import java.io.UncheckedIOException;
import java.time.Duration;
import java.util.Collection;
import java.util.List;
@@ -45,9 +48,22 @@ public class DeploymentIssueReporter extends Maintainer {
@Override
protected void maintain() {
- maintainDeploymentIssues(controller().applications().asList());
- maintainPlatformIssue(controller().applications().asList());
- escalateInactiveDeploymentIssues(controller().applications().asList());
+ try {
+ maintainDeploymentIssues(applications());
+ maintainPlatformIssue(applications());
+ escalateInactiveDeploymentIssues(applications());
+ }
+ catch (UncheckedIOException e) {
+ log.log(Level.INFO, () -> "IO exception handling issues, will retry in " + maintenanceInterval() + ": '" + Exceptions.toMessageString(e));
+ }
+ }
+
+ /** Returns the applications to maintain issue status for. */
+ private List<Application> applications() {
+ return ApplicationList.from(controller().applications().asList())
+ .withProjectId()
+ .notPullRequest()
+ .asList();
}
/**
@@ -75,6 +91,9 @@ public class DeploymentIssueReporter extends Maintainer {
* longer than the set grace period, or update this list if the issue already exists.
*/
private void maintainPlatformIssue(List<Application> applications) {
+ if (controller().system() == SystemName.cd)
+ return;
+
Version systemVersion = controller().systemVersion();
if ((controller().versionStatus().version(systemVersion).confidence() != broken))
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
index 4dacb2e32d6..0b56916a0de 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
@@ -1,16 +1,26 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.controller.maintenance;// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.maintenance;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.ApplicationController;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService;
import com.yahoo.vespa.hosted.controller.application.ApplicationList;
import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.yolean.Exceptions;
-import java.io.UncheckedIOException;
import java.time.Duration;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -19,42 +29,90 @@ import java.util.logging.Logger;
* update applications with this info.
*
* @author smorgrav
+ * @author mpolden
*/
public class DeploymentMetricsMaintainer extends Maintainer {
private static final Logger log = Logger.getLogger(DeploymentMetricsMaintainer.class.getName());
- DeploymentMetricsMaintainer(Controller controller, Duration duration, JobControl jobControl) {
+ private static final int applicationsToUpdateInParallel = 10;
+
+ private final ApplicationController applications;
+
+ public DeploymentMetricsMaintainer(Controller controller, Duration duration, JobControl jobControl) {
super(controller, duration, jobControl);
+ this.applications = controller.applications();
}
@Override
protected void maintain() {
- boolean hasWarned = false;
- for (Application application : ApplicationList.from(controller().applications().asList()).notPullRequest().asList()) {
- try {
- controller().applications().lockIfPresent(application.id(), lockedApplication ->
- controller().applications().store(lockedApplication.with(controller().metricsService().getApplicationMetrics(application.id()))));
-
- for (Deployment deployment : application.deployments().values()) {
- MetricsService.DeploymentMetrics deploymentMetrics = controller().metricsService()
- .getDeploymentMetrics(application.id(), deployment.zone());
- DeploymentMetrics newMetrics = new DeploymentMetrics(deploymentMetrics.queriesPerSecond(),
- deploymentMetrics.writesPerSecond(),
- deploymentMetrics.documentCount(),
- deploymentMetrics.queryLatencyMillis(),
- deploymentMetrics.writeLatencyMillis());
-
- controller().applications().lockIfPresent(application.id(), lockedApplication ->
- controller().applications().store(lockedApplication.with(deployment.zone(), newMetrics)
- .recordActivityAt(controller().clock().instant(), deployment.zone())));
+ AtomicInteger failures = new AtomicInteger(0);
+ AtomicReference<Exception> lastException = new AtomicReference<>(null);
+ List<Application> applicationList = ApplicationList.from(applications.asList()).notPullRequest().asList();
+
+ // Run parallel stream inside a custom ForkJoinPool so that we can control the number of threads used
+ ForkJoinPool pool = new ForkJoinPool(applicationsToUpdateInParallel);
+ pool.submit(() -> {
+ applicationList.parallelStream().forEach(application -> {
+ try {
+ applications.lockIfPresent(application.id(), locked ->
+ applications.store(locked.with(controller().metricsService().getApplicationMetrics(application.id()))));
+
+ applications.lockIfPresent(application.id(), locked ->
+ applications.store(locked.withRotationStatus(rotationStatus(application))));
+
+ for (Deployment deployment : application.deployments().values()) {
+ MetricsService.DeploymentMetrics deploymentMetrics = controller().metricsService()
+ .getDeploymentMetrics(application.id(), deployment.zone());
+ DeploymentMetrics newMetrics = new DeploymentMetrics(deploymentMetrics.queriesPerSecond(),
+ deploymentMetrics.writesPerSecond(),
+ deploymentMetrics.documentCount(),
+ deploymentMetrics.queryLatencyMillis(),
+ deploymentMetrics.writeLatencyMillis());
+
+ applications.lockIfPresent(application.id(), locked ->
+ applications.store(locked.with(deployment.zone(), newMetrics)
+ .recordActivityAt(controller().clock().instant(), deployment.zone())));
+ }
+ } catch (Exception e) {
+ failures.incrementAndGet();
+ lastException.set(e);
}
- } catch (UncheckedIOException e) {
- if (!hasWarned) // produce only one warning per maintenance interval
- log.log(Level.WARNING, "Failed to query metrics service: " + Exceptions.toMessageString(e) +
- ". Retrying in " + maintenanceInterval());
- hasWarned = true;
+ });
+ });
+ pool.shutdown();
+ try {
+ pool.awaitTermination(30, TimeUnit.MINUTES);
+ if (lastException.get() != null) {
+ log.log(Level.WARNING, String.format("Failed to query metrics service for %d/%d applications. Last error: %s. Retrying in %s",
+ failures.get(),
+ applicationList.size(),
+ Exceptions.toMessageString(lastException.get()),
+ maintenanceInterval()));
}
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Get global rotation status for application */
+ private Map<HostName, RotationStatus> rotationStatus(Application application) {
+ return applications.rotationRepository().getRotation(application)
+ .map(rotation -> controller().metricsService().getRotationStatus(rotation.name()))
+ .map(rotationStatus -> {
+ Map<HostName, RotationStatus> result = new TreeMap<>();
+ rotationStatus.forEach((hostname, status) -> result.put(hostname, from(status)));
+ return result;
+ })
+ .orElseGet(Collections::emptyMap);
+ }
+
+ private static RotationStatus from(com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus status) {
+ switch (status) {
+ case IN: return RotationStatus.in;
+ case OUT: return RotationStatus.out;
+ case UNKNOWN: return RotationStatus.unknown;
+ default: throw new IllegalArgumentException("Unknown API value for rotation status: " + status);
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
index 58e0b8dbeec..3975613835b 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.component.Version;
@@ -6,6 +6,7 @@ import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.HostName;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
@@ -26,18 +27,21 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.vespa.hosted.controller.application.SourceRevision;
import com.yahoo.vespa.hosted.controller.rotation.RotationId;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalLong;
+import java.util.TreeMap;
/**
* Serializes applications to/from slime.
@@ -49,6 +53,7 @@ public class ApplicationSerializer {
// Application fields
private final String idField = "id";
+ private final String createdAtField = "createdAt";
private final String deploymentSpecField = "deploymentSpecField";
private final String validationOverridesField = "validationOverrides";
private final String deploymentsField = "deployments";
@@ -59,6 +64,7 @@ public class ApplicationSerializer {
private final String writeQualityField = "writeQuality";
private final String queryQualityField = "queryQuality";
private final String rotationField = "rotation";
+ private final String rotationStatusField = "rotationStatus";
// Deployment fields
private final String zoneField = "zone";
@@ -124,13 +130,13 @@ public class ApplicationSerializer {
private final String deploymentMetricsQueryLatencyField = "queryLatencyMillis";
private final String deploymentMetricsWriteLatencyField = "writeLatencyMillis";
-
// ------------------ Serialization
public Slime toSlime(Application application) {
Slime slime = new Slime();
Cursor root = slime.setObject();
root.setString(idField, application.id().serializedForm());
+ root.setLong(createdAtField, application.createdAt().toEpochMilli());
root.setString(deploymentSpecField, application.deploymentSpec().xmlForm());
root.setString(validationOverridesField, application.validationOverrides().xmlForm());
deploymentsToSlime(application.deployments().values(), root.setArray(deploymentsField));
@@ -141,6 +147,7 @@ public class ApplicationSerializer {
root.setDouble(queryQualityField, application.metrics().queryServiceQuality());
root.setDouble(writeQualityField, application.metrics().writeServiceQuality());
application.rotation().ifPresent(rotation -> root.setString(rotationField, rotation.id().asString()));
+ toSlime(application.rotationStatus(), root.setArray(rotationStatusField));
return slime;
}
@@ -268,12 +275,21 @@ public class ApplicationSerializer {
toSlime(deploying.application().get(), object);
}
+ private void toSlime(Map<HostName, RotationStatus> rotationStatus, Cursor array) {
+ rotationStatus.forEach((hostname, status) -> {
+ Cursor object = array.addObject();
+ object.setString("hostname", hostname.value());
+ object.setString("status", status.name());
+ });
+ }
+
// ------------------ Deserialization
public Application fromSlime(Slime slime) {
Inspector root = slime.get();
ApplicationId id = ApplicationId.fromSerializedForm(root.field(idField).asString());
+ Instant createdAt = Instant.ofEpochMilli(root.field(createdAtField).asLong());
DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString(), false);
ValidationOverrides validationOverrides = ValidationOverrides.fromXml(root.field(validationOverridesField).asString());
List<Deployment> deployments = deploymentsFromSlime(root.field(deploymentsField));
@@ -284,9 +300,10 @@ public class ApplicationSerializer {
ApplicationMetrics metrics = new ApplicationMetrics(root.field(queryQualityField).asDouble(),
root.field(writeQualityField).asDouble());
Optional<RotationId> rotation = rotationFromSlime(root.field(rotationField));
+ Map<HostName, RotationStatus> rotationStatus = rotationStatusFromSlime(root.field(rotationStatusField));
- return new Application(id, deploymentSpec, validationOverrides, deployments, deploymentJobs, deploying,
- outstandingChange, ownershipIssueId, metrics, rotation);
+ return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, deploying,
+ outstandingChange, ownershipIssueId, metrics, rotation, rotationStatus);
}
private List<Deployment> deploymentsFromSlime(Inspector array) {
@@ -317,6 +334,19 @@ public class ApplicationSerializer {
object.field(deploymentMetricsWriteLatencyField).asDouble());
}
+ private Map<HostName, RotationStatus> rotationStatusFromSlime(Inspector object) {
+ if (!object.valid()) {
+ return Collections.emptyMap();
+ }
+ Map<HostName, RotationStatus> rotationStatus = new TreeMap<>();
+ object.traverse((ArrayTraverser) (idx, inspect) -> {
+ HostName hostname = HostName.from(inspect.field("hostname").asString());
+ RotationStatus status = RotationStatus.valueOf(inspect.field("status").asString());
+ rotationStatus.put(hostname, status);
+ });
+ return Collections.unmodifiableMap(rotationStatus);
+ }
+
private Map<ClusterSpec.Id, ClusterInfo> clusterInfoMapFromSlime(Inspector object) {
Map<ClusterSpec.Id, ClusterInfo> map = new HashMap<>();
object.traverse((String name, Inspector obect) -> map.put(new ClusterSpec.Id(name), clusterInfoFromSlime(obect)));
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 154c4e632de..808bb2e716a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -52,7 +52,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.Logs;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
-import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
@@ -64,6 +63,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentCost;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.vespa.hosted.controller.application.SourceRevision;
import com.yahoo.vespa.hosted.controller.restapi.ErrorResponse;
import com.yahoo.vespa.hosted.controller.restapi.MessageResponse;
@@ -89,7 +89,6 @@ import java.security.Principal;
import java.time.DayOfWeek;
import java.time.Duration;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -443,10 +442,9 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
deploymentObject.setString("environment", deployment.zone().environment().value());
deploymentObject.setString("region", deployment.zone().region().value());
deploymentObject.setString("instance", application.id().instance().value()); // pointless
- controller.applications().rotationRepository().getRotation(application).ifPresent(rotation -> {
- Map<String, RotationStatus> rotationHealthStatus = controller.rotationStatus(rotation);
- setRotationStatus(deployment, rotationHealthStatus, deploymentObject);
- });
+ if (application.rotation().isPresent() && deployment.zone().environment() == Environment.prod) {
+ toSlime(application.rotationStatus(deployment), deploymentObject);
+ }
if (recurseOverDeployments(request)) // List full deployment information when recursive.
toSlime(deploymentObject, new DeploymentId(application.id(), deployment.zone()), deployment, request);
@@ -557,6 +555,11 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
object.setString("gitCommit", revision.get().commit());
}
+ private void toSlime(RotationStatus status, Cursor object) {
+ Cursor bcpStatus = object.setObject("bcpStatus");
+ bcpStatus.setString("rotationStatus", status.name().toUpperCase());
+ }
+
private URI monitoringSystemUri(DeploymentId deploymentId) {
return controller.zoneRegistry().getMonitoringSystemUri(deploymentId);
}
@@ -617,24 +620,18 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
private HttpResponse rotationStatus(String tenantName, String applicationName, String instanceName, String environment, String region) {
ApplicationId applicationId = ApplicationId.from(tenantName, applicationName, instanceName);
Application application = controller.applications().require(applicationId);
+ ZoneId zone = ZoneId.from(environment, region);
if (!application.rotation().isPresent()) {
- throw new NotExistsException("global rotation does not exist for '" + environment + "." + region + "'");
+ throw new NotExistsException("global rotation does not exist for " + application);
+ }
+ Deployment deployment = application.deployments().get(zone);
+ if (deployment == null) {
+ throw new NotExistsException(application + " has no deployment in " + zone);
}
Slime slime = new Slime();
Cursor response = slime.setObject();
-
- Map<String, RotationStatus> rotationStatus = controller.applications().rotationRepository()
- .getRotation(application)
- .map(controller::rotationStatus)
- .orElseGet(Collections::emptyMap);
- for (String rotationEndpoint : rotationStatus.keySet()) {
- if (rotationEndpoint.contains(toDns(environment)) && rotationEndpoint.contains(toDns(region))) {
- Cursor bcpStatusObject = response.setObject("bcpStatus");
- bcpStatusObject.setString("rotationStatus", rotationStatus.getOrDefault(rotationEndpoint, RotationStatus.UNKNOWN).name());
- }
- }
-
+ toSlime(application.rotationStatus(deployment), response);
return new SlimeJsonResponse(slime);
}
@@ -991,28 +988,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
}
}
- private void setRotationStatus(Deployment deployment, Map<String, RotationStatus> healthStatus, Cursor object) {
- if ( ! deployment.zone().environment().equals(Environment.prod)) return;
-
- Cursor bcpStatusObject = object.setObject("bcpStatus");
- bcpStatusObject.setString("rotationStatus", findRotationStatus(deployment, healthStatus).name());
- }
-
- private RotationStatus findRotationStatus(Deployment deployment, Map<String, RotationStatus> healthStatus) {
- for (String endpoint : healthStatus.keySet()) {
- if (endpoint.contains(toDns(deployment.zone().environment().value())) &&
- endpoint.contains(toDns(deployment.zone().region().value()))) {
- return healthStatus.getOrDefault(endpoint, RotationStatus.UNKNOWN);
- }
- }
-
- return RotationStatus.UNKNOWN;
- }
-
- private String toDns(String id) {
- return id.replace('_', '-');
- }
-
private long asLong(String valueOrNull, long defaultWhenNull) {
if (valueOrNull == null) return defaultWhenNull;
try {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java
index a36a8d8384f..33d53b0becf 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java
@@ -121,7 +121,8 @@ public class ControllerAuthorizationFilter extends CorsRequestFilterBase {
path.matches("/provision/v2/{*}") ||
path.matches("/screwdriver/v1/trigger/tenant/{*}") ||
path.matches("/os/v1/{*}") ||
- path.matches("/zone/v2/{*}");
+ path.matches("/zone/v2/{*}") ||
+ path.matches("/nodes/v2/{*}");
}
private static boolean isTenantAdminOperation(Path path, Method method) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 635e0c1fb26..a9353af1b20 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -147,6 +147,19 @@ public class ControllerTest {
assertEquals(5, applications.get(app1.id()).get().deploymentJobs().jobStatus().size());
+ // Production zone for which there is no JobType is not allowed.
+ applicationPackage = new ApplicationPackageBuilder()
+ .environment(Environment.prod)
+ .region("deep-space-9")
+ .build();
+ try {
+ tester.controller().jobController().submit(app1.id(), BuildJob.defaultSourceRevision, applicationPackage.zippedContent(), new byte[0]);
+ fail("Expected exception due to illegal deployment spec.");
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("No job is known for zone prod.deep-space-9 in default.", e.getMessage());
+ }
+
// prod zone removal is not allowed
applicationPackage = new ApplicationPackageBuilder()
.environment(Environment.prod)
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 61b921aa6c1..287fbe8c36d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -23,7 +23,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock;
import com.yahoo.vespa.hosted.controller.api.integration.organization.MockOrganization;
-import com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRoutingService;
import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockBuildService;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockRunDataStore;
@@ -301,7 +300,6 @@ public final class ControllerTester {
rotationsConfig,
gitHub,
entityService,
- new MemoryGlobalRoutingService(),
zoneRegistryMock,
configServer,
metricsService,
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
index 3b381e21b27..b82855813ba 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
@@ -46,6 +46,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobTy
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest;
import static java.time.temporal.ChronoUnit.MILLIS;
+import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -340,7 +341,7 @@ public class DeploymentTriggerTest {
tester.deployAndNotify(app, changedApplication, true, stagingTest);
readyJobsTrigger.run();
- assertEquals(0, tester.buildService().jobs().size());
+ assertEquals(emptyList(), tester.buildService().jobs());
tester.clock().advance(Duration.ofHours(2)); // ---------------- Exit block window: 20:30
tester.deploymentTrigger().triggerReadyJobs(); // Schedules staging test for the blocked production job(s)
@@ -380,27 +381,17 @@ public class DeploymentTriggerTest {
assertEquals((BuildJob.defaultBuildNumber + 1), tester.application(application.id()).outstandingChange().application().get().buildNumber().getAsLong());
tester.readyJobTrigger().maintain();
- assertTrue(tester.buildService().jobs().isEmpty());
+ // Platform upgrade keeps rolling, since it has already deployed in a production zone.
+ assertEquals(1, tester.buildService().jobs().size());
+ tester.deployAndNotify(application, applicationPackage, true, productionUsEast3);
+ assertEquals(emptyList(), tester.buildService().jobs());
+
- // New component triggers a full deployment of new application version, leaving platform versions alone.
+ // New component triggers a full deployment of new application version, but only after the upgrade is done.
tester.jobCompletion(component).application(application).nextBuildNumber().nextBuildNumber().uploadArtifact(applicationPackage).submit();
tester.deployAndNotify(application, applicationPackage, true, stagingTest);
tester.deployAndNotify(application, applicationPackage, true, systemTest);
tester.deployAndNotify(application, applicationPackage, true, productionUsWest1);
- tester.deployAndNotify(application, applicationPackage, true, systemTest);
- tester.deployAndNotify(application, applicationPackage, true, stagingTest);
- tester.deployAndNotify(application, applicationPackage, true, productionUsEast3);
- tester.deployAndNotify(application, applicationPackage, true, systemTest);
- tester.deployAndNotify(application, applicationPackage, true, stagingTest);
-
- // All tests are done for now, and only the platform change remains.
- assertTrue(tester.buildService().jobs().isEmpty());
- assertEquals(Change.of(v2), tester.application(application.id()).change());
-
- // Exiting block window, staging test is re-run for the last prod zone, which has the old platform.
- clock.advance(Duration.ofHours(1));
- tester.readyJobTrigger().maintain();
- tester.deployAndNotify(application, applicationPackage, true, stagingTest);
tester.deployAndNotify(application, applicationPackage, true, productionUsEast3);
assertFalse(tester.application(application.id()).change().isPresent());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
index aea809de365..b0b3b352726 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
@@ -27,12 +27,9 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.serviceview.bindings.ApplicationView;
import com.yahoo.vespa.serviceview.bindings.ClusterView;
import com.yahoo.vespa.serviceview.bindings.ServiceView;
-import org.json.JSONException;
-import org.json.JSONObject;
import java.io.IOException;
import java.io.OutputStream;
-import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -53,7 +50,6 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer
private final Map<ApplicationId, Application> applications = new LinkedHashMap<>();
private final Map<String, EndpointStatus> endpoints = new HashMap<>();
- private final Map<URI, Version> versions = new HashMap<>();
private final NodeRepositoryMock nodeRepository = new NodeRepositoryMock();
private final Map<DeploymentId, ServiceConvergence> serviceStatus = new HashMap<>();
private final Version initialVersion = new Version(6, 1, 0);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
index eca78c01e09..d5fa3d14c62 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
@@ -1,8 +1,11 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.integration;
+import com.yahoo.component.AbstractComponent;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService;
+import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import java.util.HashMap;
@@ -11,15 +14,37 @@ import java.util.Map;
/**
* @author bratseth
*/
-public class MetricsServiceMock implements MetricsService {
+public class MetricsServiceMock extends AbstractComponent implements MetricsService {
private final Map<String, Double> metrics = new HashMap<>();
+ private final Map<String, Map<HostName, RotationStatus>> rotationStatus = new HashMap<>();
+
+ public MetricsServiceMock addRotation(String rotationName) {
+ rotationStatus.put(rotationName, new HashMap<>());
+ return this;
+ }
public MetricsServiceMock setMetric(String key, Double value) {
metrics.put(key, value);
return this;
}
+ public MetricsServiceMock setZoneIn(String rotationName, String vipName) {
+ if (!rotationStatus.containsKey(rotationName)) {
+ throw new IllegalArgumentException("Unknown rotation: " + rotationName);
+ }
+ rotationStatus.get(rotationName).put(HostName.from(vipName), RotationStatus.IN);
+ return this;
+ }
+
+ public MetricsServiceMock setZoneOut(String rotationName, String vipName) {
+ if (!rotationStatus.containsKey(rotationName)) {
+ throw new IllegalArgumentException("Unknown rotation: " + rotationName);
+ }
+ rotationStatus.get(rotationName).put(HostName.from(vipName), RotationStatus.OUT);
+ return this;
+ }
+
@Override
public ApplicationMetrics getApplicationMetrics(ApplicationId application) {
return new ApplicationMetrics(metrics.getOrDefault("queryServiceQuality", 0.5),
@@ -43,4 +68,9 @@ public class MetricsServiceMock implements MetricsService {
return result;
}
+ @Override
+ public Map<HostName, RotationStatus> getRotationStatus(String rotationName) {
+ return rotationStatus.get(rotationName);
+ }
+
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
index 555fdb338e8..2694e205a68 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
@@ -59,6 +59,13 @@ public class ApplicationOwnershipConfirmerTest {
confirmer.maintain();
confirmer.maintain();
+ assertFalse("No issue is stored for an application newer than 3 months.", propertyApp.get().ownershipIssueId().isPresent());
+ assertFalse("No issue is stored for an application newer than 3 months.", userApp.get().ownershipIssueId().isPresent());
+
+ tester.clock().advance(Duration.ofDays(91));
+ confirmer.maintain();
+ confirmer.maintain();
+
assertEquals("Confirmation issue has been filed for property owned application.", issueId, propertyApp.get().ownershipIssueId());
assertEquals("Confirmation issue has been filed for user owned application.", issueId, userApp.get().ownershipIssueId());
assertTrue("Both applications have had their responses ensured.", issues.escalatedForProperty && issues.escalatedForUser);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
index d3e42bae526..e11440a372c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
@@ -1,14 +1,18 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.maintenance;
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.ControllerTester;
+import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.Deployment;
-import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
+import com.yahoo.vespa.hosted.controller.integration.MetricsServiceMock;
import org.junit.Test;
import java.time.Duration;
@@ -26,13 +30,11 @@ import static org.junit.Assert.assertFalse;
public class DeploymentMetricsMaintainerTest {
@Test
- public void maintain() {
+ public void updates_metrics() {
ControllerTester tester = new ControllerTester();
ApplicationId appId = tester.createAndDeploy("tenant1", "domain1", "app1",
Environment.dev, 123).id();
- DeploymentMetricsMaintainer maintainer = new DeploymentMetricsMaintainer(tester.controller(),
- Duration.ofDays(1),
- new JobControl(new MockCuratorDb()));
+ DeploymentMetricsMaintainer maintainer = maintainer(tester.controller());
Supplier<Application> app = tester.application(appId);
Supplier<Deployment> deployment = () -> app.get().deployments().values().stream().findFirst().get();
@@ -85,4 +87,50 @@ public class DeploymentMetricsMaintainerTest {
assertEquals(5, deployment.get().activity().lastWritesPerSecond().getAsDouble(), Double.MIN_VALUE);
}
+ @Test
+ public void updates_rotation_status() {
+ DeploymentTester tester = new DeploymentTester();
+ MetricsServiceMock metricsService = tester.controllerTester().metricsService();
+ DeploymentMetricsMaintainer maintainer = maintainer(tester.controller());
+ Application application = tester.createApplication("app1", "tenant1", 1, 1L);
+ ZoneId zone1 = ZoneId.from("prod", "us-west-1");
+ ZoneId zone2 = ZoneId.from("prod", "us-east-3");
+
+ // Deploy application with global rotation
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .environment(Environment.prod)
+ .globalServiceId("foo")
+ .region(zone1.region().value())
+ .region(zone2.region().value())
+ .build();
+ tester.deployCompletely(application, applicationPackage);
+
+ Supplier<Application> app = () -> tester.application(application.id());
+ Supplier<Deployment> deployment1 = () -> app.get().deployments().get(zone1);
+ Supplier<Deployment> deployment2 = () -> app.get().deployments().get(zone2);
+ String assignedRotation = "rotation-fqdn-01";
+ tester.controllerTester().metricsService().addRotation(assignedRotation);
+
+ // No status gathered yet
+ assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment1.get()));
+ assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment2.get()));
+
+ // One rotation out, one in
+ metricsService.setZoneIn(assignedRotation, "proxy.prod.us-west-1.vip.test");
+ metricsService.setZoneOut(assignedRotation,"proxy.prod.us-east-3.vip.test");
+ maintainer.maintain();
+ assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get()));
+ assertEquals(RotationStatus.out, app.get().rotationStatus(deployment2.get()));
+
+ // All rotations in
+ metricsService.setZoneIn(assignedRotation,"proxy.prod.us-east-3.vip.test");
+ maintainer.maintain();
+ assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get()));
+ assertEquals(RotationStatus.in, app.get().rotationStatus(deployment2.get()));
+ }
+
+ private static DeploymentMetricsMaintainer maintainer(Controller controller) {
+ return new DeploymentMetricsMaintainer(controller, Duration.ofDays(1), new JobControl(controller.curator()));
+ }
+
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
index f1b20694f3d..b53ed77a950 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java
@@ -19,6 +19,7 @@ import org.junit.Test;
import java.time.Duration;
import java.time.Instant;
+import java.util.Collections;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.component;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.productionUsCentral1;
@@ -26,6 +27,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobTy
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.productionUsWest1;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest;
+import static java.lang.Enum.valueOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -650,30 +652,15 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered
tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
- assertTrue(tester.buildService().jobs().isEmpty()); // Next job not triggered due to being in the block window
+ assertEquals(1, tester.buildService().jobs().size()); // Next job triggered because upgrade is already rolling out.
- // One hour passes, time is 19:00, still no upgrade
- tester.clock().advance(Duration.ofHours(1));
- tester.triggerUntilQuiescence();
- assertTrue("No jobs scheduled", tester.buildService().jobs().isEmpty());
-
- // Another hour pass, time is 20:00 and application upgrades
- tester.clock().advance(Duration.ofHours(1));
- tester.triggerUntilQuiescence();
tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
assertTrue("All jobs consumed", tester.buildService().jobs().isEmpty());
}
- /**
- * Tests the scenario where a release is deployed to 2 of 3 production zones, then blocked,
- * followed by timeout of the upgrade and a new release.
- * In this case, the blocked production zone should not progress with upgrading to the previous version,
- * and should not upgrade to the new version until the other production zones have it
- * (expected behavior; both requirements are debatable).
- */
@Test
- public void testBlockVersionChangeHalfwayThoughThenNewVersion() {
+ public void testBlockVersionChangeHalfwayThoughThenNewRevision() {
ManualClock clock = new ManualClock(Instant.parse("2017-09-29T16:00:00.00Z")); // Friday, 16:00
DeploymentTester tester = new DeploymentTester(new ControllerTester(clock));
@@ -681,7 +668,6 @@ public class UpgraderTest {
tester.upgradeSystem(version);
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .upgradePolicy("canary")
// Block upgrades on weekends and ouside working hours
.blockChange(false, true, "mon-fri", "00-09,17-23", "UTC")
.blockChange(false, true, "sat-sun", "00-23", "UTC")
@@ -701,20 +687,38 @@ public class UpgraderTest {
tester.triggerUntilQuiescence();
tester.deployAndNotify(app, applicationPackage, true, systemTest);
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
- tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered
- tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
- assertTrue(tester.buildService().jobs().isEmpty()); // Next job not triggered due to being in the block window
+ tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
+ assertEquals(1, tester.buildService().jobs().size()); // Next job triggered, as upgrade is already in progress.
+ tester.deployAndNotify(app, applicationPackage, false, productionUsCentral1); // us-central-1 fails, permitting a new revision.
+
+ // A new revision is submitted and starts rolling out.
+ tester.jobCompletion(component).application(app).nextBuildNumber().uploadArtifact(applicationPackage).submit();
+
+ // us-central-1 fails again, and isn't re-triggered, because the target is now a revision instead.
+ tester.deployAndNotify(app, applicationPackage, false, productionUsCentral1);
+ assertEquals(2, tester.buildService().jobs().size());
+ tester.deployAndNotify(app, applicationPackage, true, systemTest);
+ tester.deployAndNotify(app, applicationPackage, true, stagingTest);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
+ // us-central-1 has an older version, and needs a new staging test to begin.
+ tester.deployAndNotify(app, applicationPackage, true, stagingTest);
- // A day passes and we get a new version
+ // A new version is also released, cancelling the upgrade, since it is failing on a now outdated version.
tester.clock().advance(Duration.ofDays(1));
version = Version.fromString("5.2");
tester.upgradeSystem(version);
tester.upgrader().maintain();
tester.triggerUntilQuiescence();
- assertTrue("Nothing is scheduled", tester.buildService().jobs().isEmpty());
- // Monday morning: We are not blocked
+ // us-central-1 succeeds upgrade to 5.1, with the revision, but us-east-3 wants to proceed with only the revision change.
+ tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
+ tester.deployAndNotify(app, applicationPackage, true, systemTest);
+ tester.deployAndNotify(app, applicationPackage, true, stagingTest);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
+ assertEquals(Collections.emptyList(), tester.buildService().jobs());
+
+ // Monday morning: We are not blocked, and the new version rolls out to all zones.
tester.clock().advance(Duration.ofDays(1)); // Sunday, 17:00
tester.clock().advance(Duration.ofHours(17)); // Monday, 10:00
tester.upgrader().maintain();
@@ -723,7 +727,6 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
- // us-east-3 has an older version than the other zones, and needs a new staging test run.
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
assertTrue("All jobs consumed", tester.buildService().jobs().isEmpty());
@@ -943,7 +946,7 @@ public class UpgraderTest {
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
.upgradePolicy("canary")
- // Block upgrades on Tuesday in hours 18 and 19.
+ // Block revisions on Tuesday in hours 18 and 19.
.blockChange(true, false, "tue", "18-19", "UTC")
.region("us-west-1")
.region("us-central-1")
@@ -961,37 +964,68 @@ public class UpgraderTest {
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered.
tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
- assertTrue(tester.buildService().jobs().isEmpty()); // Next job not triggered due to being in the block window.
-
- // One hour passes, time is 19:00, still no upgrade.
- tester.clock().advance(Duration.ofHours(1));
- tester.triggerUntilQuiescence();
- assertTrue("No jobs scheduled", tester.buildService().jobs().isEmpty());
+ assertEquals(1, tester.buildService().jobs().size()); // Next job triggered in spite of block, because it is already rolling out.
- // New version is released and upgrades are started in the two first production zones.
+ // New version is released, but upgrades won't start since there's already a revision rolling out.
version = Version.fromString("5.1");
tester.upgradeSystem(version);
+ tester.triggerUntilQuiescence();
+ assertEquals(1, tester.buildService().jobs().size()); // Still just the revision upgrade.
+
+ tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
+ assertEquals(Collections.emptyList(), tester.buildService().jobs()); // No jobs left.
+
+ // Upgrade may start, now that revision is rolled out.
+ tester.upgrader().maintain();
+ tester.readyJobTrigger().maintain();
tester.deployAndNotify(app, applicationPackage, true, systemTest);
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
+ tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
+ assertTrue("All jobs consumed", tester.buildService().jobs().isEmpty());
+ }
- // Tests for central-1.
- tester.deployAndNotify(app, applicationPackage, true, systemTest);
- tester.deployAndNotify(app, applicationPackage, true, stagingTest);
- // Another hour pass, time is 20:00 and both revision and version upgrades are now allowed.
- tester.clock().advance(Duration.ofHours(1));
- tester.triggerUntilQuiescence(); // Tests that trigger now test the full upgrade, since central-1 is still on old versions.
- tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1); // Only upgrade for now.
- // west-1 is now fully upgraded, central-1 only has new version, and east-3 has only old versions.
+ @Test
+ public void testBlockRevisionChangeHalfwayThoughThenNewRevision() {
+ ManualClock clock = new ManualClock(Instant.parse("2017-09-26T17:00:00.00Z")); // Tuesday, 17:00.
+ DeploymentTester tester = new DeploymentTester(new ControllerTester(clock));
+
+ Version version = Version.fromString("5.0");
+ tester.upgradeSystem(version);
- // These tests were triggered with an upgrade of both version and revision. Since central-1 no longer upgrades version,
- // it ignores the initial version of the staging job, and so the current staging job is OK for both zones.
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .upgradePolicy("canary")
+ // Block revision on Tuesday in hours 18 and 19.
+ .blockChange(true, false, "tue", "18-19", "UTC")
+ .region("us-west-1")
+ .region("us-central-1")
+ .region("us-east-3")
+ .build();
+
+ Application app = tester.createAndDeploy("app1", 1, applicationPackage);
+
+ tester.jobCompletion(component).application(app).nextBuildNumber().uploadArtifact(applicationPackage).submit();
+
+ // Application upgrade starts.
+ tester.upgrader().maintain();
+ tester.triggerUntilQuiescence();
tester.deployAndNotify(app, applicationPackage, true, systemTest);
tester.deployAndNotify(app, applicationPackage, true, stagingTest);
+ clock.advance(Duration.ofHours(1)); // Entering block window after prod job is triggered.
+ tester.deployAndNotify(app, applicationPackage, true, productionUsWest1);
+ assertEquals(1, tester.buildService().jobs().size()); // Next job triggered in spite of block, because it is already rolling out.
+
+ // New revision is submitted, but is stored as outstanding, since the previous revision is proceeding in good fashion.
+ tester.jobCompletion(component).application(app).nextBuildNumber().nextBuildNumber().uploadArtifact(applicationPackage).submit();
+ tester.triggerUntilQuiescence();
+ assertEquals(1, tester.buildService().jobs().size()); // Still just the running revision upgrade.
+
tester.deployAndNotify(app, applicationPackage, true, productionUsCentral1);
tester.deployAndNotify(app, applicationPackage, true, productionUsEast3);
- assertTrue("All jobs consumed", tester.buildService().jobs().isEmpty());
+ assertEquals(Collections.emptyList(), tester.buildService().jobs()); // No jobs left.
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
index 40d245db8f0..3e09c9078a0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.component.Version;
@@ -6,6 +6,7 @@ import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService;
@@ -22,6 +23,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
+import com.yahoo.vespa.hosted.controller.application.RotationStatus;
import com.yahoo.vespa.hosted.controller.application.SourceRevision;
import com.yahoo.vespa.hosted.controller.rotation.RotationId;
import org.junit.Test;
@@ -30,6 +32,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -37,6 +41,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalLong;
+import java.util.TreeMap;
import static com.yahoo.config.provision.SystemName.main;
import static com.yahoo.vespa.hosted.controller.ControllerTester.writable;
@@ -70,7 +75,7 @@ public class ApplicationSerializerTest {
deployments.add(new Deployment(zone1, applicationVersion1, Version.fromString("1.2.3"), Instant.ofEpochMilli(3))); // One deployment without cluster info and utils
deployments.add(new Deployment(zone2, applicationVersion2, Version.fromString("1.2.3"), Instant.ofEpochMilli(5),
createClusterUtils(3, 0.2), createClusterInfo(3, 4),
- new DeploymentMetrics(2,3,4,5,6),
+ new DeploymentMetrics(2, 3, 4, 5, 6),
DeploymentActivity.create(Optional.of(activityAt), Optional.of(activityAt),
OptionalDouble.of(200), OptionalDouble.of(10))));
@@ -89,7 +94,12 @@ public class ApplicationSerializerTest {
DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, empty(), true);
+ Map<HostName, RotationStatus> rotationStatus = new TreeMap<>();
+ rotationStatus.put(HostName.from("rot1.fqdn"), RotationStatus.in);
+ rotationStatus.put(HostName.from("rot2.fqdn"), RotationStatus.out);
+
Application original = new Application(ApplicationId.from("t1", "a1", "i1"),
+ Instant.now().truncatedTo(ChronoUnit.MILLIS),
deploymentSpec,
validationOverrides,
deployments, deploymentJobs,
@@ -97,11 +107,13 @@ public class ApplicationSerializerTest {
Change.of(ApplicationVersion.from(new SourceRevision("repo", "master", "deadcafe"), 42)),
Optional.of(IssueId.from("1234")),
new MetricsService.ApplicationMetrics(0.5, 0.9),
- Optional.of(new RotationId("my-rotation")));
+ Optional.of(new RotationId("my-rotation")),
+ rotationStatus);
Application serialized = applicationSerializer.fromSlime(applicationSerializer.toSlime(original));
assertEquals(original.id(), serialized.id());
+ assertEquals(original.createdAt(), serialized.createdAt());
assertEquals(original.deploymentSpec().xmlForm(), serialized.deploymentSpec().xmlForm());
assertEquals(original.validationOverrides().xmlForm(), serialized.validationOverrides().xmlForm());
@@ -129,6 +141,7 @@ public class ApplicationSerializerTest {
assertEquals(original.change(), serialized.change());
assertEquals(original.rotation().get().id(), serialized.rotation().get().id());
+ assertEquals(original.rotationStatus(), serialized.rotationStatus());
// Test cluster utilization
assertEquals(0, serialized.deployments().get(zone1).clusterUtils().size());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
index 2decbe54cb0..992e3cfcd36 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
@@ -69,7 +69,6 @@ public class ControllerContainerTest {
" <component id='com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock'/>\n" +
- " <component id='com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRoutingService'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.stubs.LoggingDeploymentIssues'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.stubs.DummyOwnershipIssues'/>\n" +
" <component id='com.yahoo.vespa.hosted.controller.api.integration.stubs.MockRunDataStore'/>\n" +
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 30c81a0721a..f2e105f2c31 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -46,7 +46,9 @@ import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzDbMock;
import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
import com.yahoo.vespa.hosted.controller.deployment.BuildJob;
import com.yahoo.vespa.hosted.controller.integration.ConfigServerMock;
+import com.yahoo.vespa.hosted.controller.integration.MetricsServiceMock;
import com.yahoo.vespa.hosted.controller.maintenance.ContactInformationMaintainer;
+import com.yahoo.vespa.hosted.controller.maintenance.DeploymentMetricsMaintainer;
import com.yahoo.vespa.hosted.controller.maintenance.JobControl;
import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester;
import com.yahoo.vespa.hosted.controller.restapi.ContainerTester;
@@ -433,28 +435,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
tester.assertResponse(request("/application/v4/", Request.Method.OPTIONS),
"");
- // GET global rotation status
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation", GET)
- .userIdentity(USER_ID),
- new File("global-rotation.json"));
-
- // GET global rotation override status
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation/override", GET)
- .userIdentity(USER_ID),
- new File("global-rotation-get.json"));
-
- // SET global rotation override status
- tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/global-rotation/override", PUT)
- .userIdentity(USER_ID)
- .data("{\"reason\":\"because i can\"}"),
- new File("global-rotation-put.json"));
-
- // DELETE global rotation override status
- tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/global-rotation/override", DELETE)
- .userIdentity(USER_ID)
- .data("{\"reason\":\"because i can\"}"),
- new File("global-rotation-delete.json"));
-
+ // Promote from pipeline
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/promote", POST)
.screwdriverIdentity(SCREWDRIVER_ID),
"{\"message\":\"Successfully copied environment hosted-verified-prod to hosted-instance_tenant1_application1_placeholder_component_default\"}");
@@ -480,6 +461,58 @@ public class ApplicationApiTest extends ControllerContainerTest {
}
@Test
+ public void testRotationOverride() {
+ // Setup
+ tester.computeVersionStatus();
+ createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID);
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .globalServiceId("foo")
+ .region("us-west-1")
+ .region("us-east-3")
+ .build();
+
+ // Create tenant and deploy
+ ApplicationId id = createTenantAndApplication();
+ long projectId = 1;
+ HttpEntity deployData = createApplicationDeployData(Optional.empty(), false);
+ startAndTestChange(controllerTester, id, projectId, applicationPackage, deployData, 100);
+
+ // us-west-1
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/deploy", POST)
+ .data(deployData)
+ .screwdriverIdentity(SCREWDRIVER_ID),
+ new File("deploy-result.json"));
+ controllerTester.jobCompletion(JobType.productionUsWest1)
+ .application(id)
+ .projectId(projectId)
+ .submit();
+ setZoneInRotation("rotation-fqdn-1", ZoneId.from("prod", "us-west-1"));
+
+ // GET global rotation status
+ setZoneInRotation("rotation-fqdn-1", ZoneId.from("prod", "us-west-1"));
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation", GET)
+ .userIdentity(USER_ID),
+ new File("global-rotation.json"));
+
+ // GET global rotation override status
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation/override", GET)
+ .userIdentity(USER_ID),
+ new File("global-rotation-get.json"));
+
+ // SET global rotation override status
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation/override", PUT)
+ .userIdentity(USER_ID)
+ .data("{\"reason\":\"because i can\"}"),
+ new File("global-rotation-put.json"));
+
+ // DELETE global rotation override status
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/global-rotation/override", DELETE)
+ .userIdentity(USER_ID)
+ .data("{\"reason\":\"because i can\"}"),
+ new File("global-rotation-delete.json"));
+ }
+
+ @Test
public void testDeployDirectly() {
// Setup
tester.computeVersionStatus();
@@ -537,31 +570,13 @@ public class ApplicationApiTest extends ControllerContainerTest {
@Test
public void testSortsDeploymentsAndJobs() {
- // Setup
tester.computeVersionStatus();
- createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID);
-
- // Create tenant
- tester.assertResponse(request("/application/v4/tenant/tenant1", POST)
- .userIdentity(USER_ID)
- .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}")
- .nToken(N_TOKEN),
- new File("tenant-without-applications.json"));
-
- // Create application
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", POST)
- .userIdentity(USER_ID)
- .nToken(N_TOKEN),
- new File("application-reference.json"));
-
- // Give Screwdriver project deploy access
- addScrewdriverUserToDeployRole(SCREWDRIVER_ID, ATHENZ_TENANT_DOMAIN, new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId("application1"));
// Deploy
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
.region("us-east-3")
.build();
- ApplicationId id = ApplicationId.from("tenant1", "application1", "default");
+ ApplicationId id = createTenantAndApplication();
long projectId = 1;
HttpEntity deployData = createApplicationDeployData(Optional.empty(), false);
startAndTestChange(controllerTester, id, projectId, applicationPackage, deployData, 100);
@@ -595,6 +610,8 @@ public class ApplicationApiTest extends ControllerContainerTest {
.projectId(projectId)
.submit();
+ setZoneInRotation("rotation-fqdn-1", ZoneId.from("prod", "us-west-1"));
+
// us-east-3
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-east-3/instance/default/deploy", POST)
.data(deployData)
@@ -935,8 +952,15 @@ public class ApplicationApiTest extends ControllerContainerTest {
controllerTester.deploy(app, applicationPackage, TEST_ZONE);
job.type(JobType.systemTest).submit();
- // Notifying about unknown job fails
+ // Notifying about job started not by the controller fails
Request request = request("/application/v4/tenant/tenant1/application/application1/jobreport", POST)
+ .data(asJson(job.type(JobType.systemTest).report()))
+ .userIdentity(HOSTED_VESPA_OPERATOR)
+ .get();
+ tester.assertResponse(request, new File("jobreport-unexpected-system-test-completion.json"), 400);
+
+ // Notifying about unknown job fails
+ request = request("/application/v4/tenant/tenant1/application/application1/jobreport", POST)
.data(asJson(job.type(JobType.productionUsEast3).report()))
.userIdentity(HOSTED_VESPA_OPERATOR)
.get();
@@ -1135,6 +1159,23 @@ public class ApplicationApiTest extends ControllerContainerTest {
athenzApplication.addRoleMember(ApplicationAction.deploy, screwdriverIdentity);
}
+ private ApplicationId createTenantAndApplication() {
+ createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID);
+ tester.assertResponse(request("/application/v4/tenant/tenant1", POST)
+ .userIdentity(USER_ID)
+ .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}")
+ .nToken(N_TOKEN),
+ new File("tenant-without-applications.json"));
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", POST)
+ .userIdentity(USER_ID)
+ .nToken(N_TOKEN),
+ new File("application-reference.json"));
+ addScrewdriverUserToDeployRole(SCREWDRIVER_ID, ATHENZ_TENANT_DOMAIN,
+ new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId("application1"));
+
+ return ApplicationId.from("tenant1", "application1", "default");
+ }
+
private void startAndTestChange(ContainerControllerTester controllerTester, ApplicationId application,
long projectId, ApplicationPackage applicationPackage,
HttpEntity deployData, long buildNumber) {
@@ -1198,7 +1239,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
clusterInfo.put(ClusterSpec.Id.from("cluster1"), new ClusterInfo("flavor1", 37, 2, 4, 50, ClusterSpec.Type.content, hostnames));
Map<ClusterSpec.Id, ClusterUtilization> clusterUtils = new HashMap<>();
clusterUtils.put(ClusterSpec.Id.from("cluster1"), new ClusterUtilization(0.3, 0.6, 0.4, 0.3));
- DeploymentMetrics metrics = new DeploymentMetrics(1,2,3,4,5);
+ DeploymentMetrics metrics = new DeploymentMetrics(1, 2, 3, 4, 5);
lockedApplication = lockedApplication
.withClusterInfo(deployment.zone(), clusterInfo)
@@ -1211,10 +1252,22 @@ public class ApplicationApiTest extends ControllerContainerTest {
}
}
+ private MetricsServiceMock metricsService() {
+ return (MetricsServiceMock) tester.container().components().getComponent(MetricsServiceMock.class.getName());
+ }
+
private MockOrganization organization() {
return (MockOrganization) tester.container().components().getComponent(MockOrganization.class.getName());
}
+ private void setZoneInRotation(String rotationName, ZoneId zone) {
+ String vipName = "proxy." + zone.value() + ".vip.test";
+ metricsService().addRotation(rotationName)
+ .setZoneIn(rotationName, vipName);
+
+ new DeploymentMetricsMaintainer(tester.controller(), Duration.ofDays(1), new JobControl(tester.controller().curator())).run();
+ }
+
private void updateContactInformation() {
new ContactInformationMaintainer(tester.controller(), Duration.ofDays(1),
new JobControl(tester.controller().curator()),
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json
new file mode 100644
index 00000000000..513cfb754ae
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobreport-unexpected-system-test-completion.json
@@ -0,0 +1,4 @@
+{
+ "error-code": "BAD_REQUEST",
+ "message": "Notified of completion of system-test for tenant1.application1, but that has neither been triggered nor deployed"
+}
diff --git a/docker-api/pom.xml b/docker-api/pom.xml
index 74e463ef157..ae06378043b 100644
--- a/docker-api/pom.xml
+++ b/docker-api/pom.xml
@@ -128,6 +128,12 @@
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>testutil</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
index 4c538d6a194..346223d0e7e 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerResources.java
@@ -7,8 +7,8 @@ package com.yahoo.vespa.hosted.dockerapi;
public class ContainerResources {
public static final ContainerResources UNLIMITED = ContainerResources.from(0, 0);
- public final int cpuShares;
- public final long memoryBytes;
+ private final int cpuShares;
+ private final long memoryBytes;
ContainerResources(int cpuShares, long memoryBytes) {
this.cpuShares = cpuShares;
@@ -21,6 +21,14 @@ public class ContainerResources {
(long) ((1L << 30) * memoryGb));
}
+ public int cpuShares() {
+ return cpuShares;
+ }
+
+ public long memoryBytes() {
+ return memoryBytes;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStatsImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStats.java
index a56c1e41a51..738a65bc08b 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStatsImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/ContainerStats.java
@@ -10,14 +10,14 @@ import java.util.Optional;
*
* @author freva
*/
-public class ContainerStatsImpl implements Docker.ContainerStats {
+public class ContainerStats {
private final Map<String, Object> networks;
private final Map<String, Object> cpuStats;
private final Map<String, Object> memoryStats;
private final Map<String, Object> blkioStats;
- public ContainerStatsImpl(Map<String, Object> networks, Map<String, Object> cpuStats,
- Map<String, Object> memoryStats, Map<String, Object> blkioStats) {
+ public ContainerStats(Map<String, Object> networks, Map<String, Object> cpuStats,
+ Map<String, Object> memoryStats, Map<String, Object> blkioStats) {
// Network stats are null when container uses host network
this.networks = Optional.ofNullable(networks).orElse(Collections.emptyMap());
this.cpuStats = cpuStats;
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
index d95f7b7b8e1..cf168df4634 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/CreateContainerCommandImpl.java
@@ -6,6 +6,7 @@ import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.Capability;
import com.github.dockerjava.api.model.Ulimit;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
import java.net.Inet6Address;
import java.net.InetAddress;
@@ -24,6 +25,7 @@ import java.util.stream.IntStream;
import java.util.stream.Stream;
class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
+
private final DockerClient docker;
private final DockerImage dockerImage;
private final ContainerResources containerResources;
@@ -148,8 +150,8 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
final CreateContainerCmd containerCmd = docker
.createContainerCmd(dockerImage.asString())
- .withCpuShares(containerResources.cpuShares)
- .withMemory(containerResources.memoryBytes)
+ .withCpuShares(containerResources.cpuShares())
+ .withMemory(containerResources.memoryBytes())
.withName(containerName.asString())
.withHostName(hostName)
.withLabels(labels)
@@ -202,11 +204,11 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
.skip(1)
.collect(Collectors.joining(" "));
- return String.join(" ",
+ return Stream.of(
"--name " + containerName.asString(),
"--hostname " + hostName,
- "--cpu-shares " + containerResources.cpuShares,
- "--memory " + containerResources.memoryBytes,
+ "--cpu-shares " + containerResources.cpuShares(),
+ "--memory " + containerResources.memoryBytes(),
toRepeatedOption("--label", labelList),
toRepeatedOption("--ulimit", ulimitList),
toRepeatedOption("--env", environmentAssignments),
@@ -219,7 +221,9 @@ class CreateContainerCommandImpl implements Docker.CreateContainerCommand {
toOptionalOption("--entrypoint", entrypointExecuteable),
toFlagOption("--privileged", privileged),
dockerImage.asString(),
- entrypointArgs);
+ entrypointArgs)
+ .filter(s -> !s.isEmpty())
+ .collect(Collectors.joining(" "));
}
/**
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java
index 5e8a0feb099..8bde491d83b 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java
@@ -2,8 +2,8 @@
package com.yahoo.vespa.hosted.dockerapi;
import java.net.InetAddress;
+import java.time.Duration;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
/**
@@ -12,7 +12,8 @@ import java.util.Optional;
*/
public interface Docker {
/**
- * Must be called before any other method. May be called more than once.
+ * Should only be called by non-host-admin. May be called more than once.
+ * TODO: Remove when migration to host-admin is done
*/
void start();
@@ -61,21 +62,8 @@ public interface Docker {
ContainerName containerName,
String hostName);
- interface ContainerStats {
- Map<String, Object> getNetworks();
- Map<String, Object> getCpuStats();
- Map<String, Object> getMemoryStats();
- Map<String, Object> getBlkioStats();
- }
-
- default boolean networkNATed() {
- return false;
- }
-
Optional<ContainerStats> getContainerStats(ContainerName containerName);
- void createContainer(CreateContainerCommand createContainerCommand);
-
void startContainer(ContainerName containerName);
void stopContainer(ContainerName containerName);
@@ -97,12 +85,10 @@ public interface Docker {
*/
boolean pullImageAsyncIfNeeded(DockerImage image);
- void deleteImage(DockerImage dockerImage);
-
/**
* Deletes the local images that are currently not in use by any container and not recently used.
*/
- void deleteUnusedDockerImages();
+ boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete);
/**
* Execute a command in docker container as $VESPA_USER. Will block until the command is finished.
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
index 6e728972da9..dd6ff436aae 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollector.java
@@ -3,107 +3,177 @@ package com.yahoo.vespa.hosted.dockerapi;
import com.github.dockerjava.api.model.Image;
import com.github.dockerjava.api.model.Container;
+import com.google.common.base.Strings;
+import com.yahoo.collections.Pair;
+import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
-import java.util.HashMap;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
+ * This class keeps track of downloaded docker images and helps delete images that have not been recently used
+ *
+ * <p>Definitions:
+ * <ul>
+ * <li>Every image has exactly 1 id</li>
+ * <li>Every image has between 0..n tags, see
+ * <a href="https://docs.docker.com/engine/reference/commandline/tag/">docker tag</a> for more</li>
+ * <li>Every image has 0..1 parent ids</li>
+ * </ul>
+ *
+ * <p>Limitations:
+ * <ol>
+ * <li>Image that has more than 1 tag cannot be deleted by ID</li>
+ * <li>Deleting a tag of an image with multiple tags will only remove the tag, the image with the
+ * remaining tags will remain</li>
+ * <li>Deleting the last tag of an image will delete the entire image.</li>
+ * <li>Image cannot be deleted if:</li>
+ * <ol>
+ * <li>It has 1 or more children</li>
+ * <li>A container uses it</li>
+ * </ol>
+ * </ol>
+ *
* @author freva
*/
-public class DockerImageGarbageCollector {
- private final Duration minAgeImageGc;
- private final Map<String, Instant> lastTimeUsedByImageId = new ConcurrentHashMap<>();
+class DockerImageGarbageCollector {
+ private static final Logger logger = Logger.getLogger(DockerImageGarbageCollector.class.getName());
- public DockerImageGarbageCollector(Duration minAgeImageToDelete) {
- minAgeImageGc = minAgeImageToDelete;
- }
+ private final Map<String, Instant> lastTimeUsedByImageId = new ConcurrentHashMap<>();
+ private final DockerImpl docker;
+ private final Clock clock;
- public void updateLastUsedTimeFor(String imageId) {
- updateLastUsedTimeFor(imageId, Instant.now());
+ DockerImageGarbageCollector(DockerImpl docker) {
+ this(docker, Clock.systemUTC());
}
- void updateLastUsedTimeFor(String imageId, Instant at) {
- lastTimeUsedByImageId.put(imageId, at);
+ DockerImageGarbageCollector(DockerImpl docker, Clock clock) {
+ this.docker = docker;
+ this.clock = clock;
}
/**
- * Generates lists of images that are safe to delete, in the order that is safe to delete them (children before
- * parents). The function starts with the set of all local images and then filters out images that are used now
- * and images that have been used recently (because they might be re-used again in near future).
+ * This method must be called frequently enough to see all containers to know which images are being used
*
- * @param images List of all the local images
- * @param containers List of all the containers, including the ones that are stopped
- * @return List of image tags of unused images, if unused image has no tag, will return image ID instead.
+ * @param excludes List of images (by tag or id) that should not be deleted regardless of their used status
+ * @param minImageAgeToDelete Minimum duration after which an image can be removed if it has not been used
+ * @return true iff at least 1 image was deleted
*/
- public List<DockerImage> getUnusedDockerImages(List<Image> images, List<Container> containers) {
- Map<String, Image> dockerImageByImageId = images.stream().collect(Collectors.toMap(Image::getId, img -> img));
- Map<String, Image> unusedImagesByContainers = filterOutImagesUsedByContainers(dockerImageByImageId, containers);
- Map<String, Image> unusedImagesByRecent = filterOutRecentImages(unusedImagesByContainers);
+ boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) {
+ List<Image> images = docker.listAllImages();
+ List<Container> containers = docker.listAllContainers();
+
+ Map<String, Image> imageByImageId = images.stream().collect(Collectors.toMap(Image::getId, Function.identity()));
+
+ // Find all the ancestors for every local image id, this includes the image id itself
+ Map<String, Set<String>> ancestorsByImageId = images.stream()
+ .map(Image::getId)
+ .collect(Collectors.toMap(
+ Function.identity(),
+ imageId -> {
+ Set<String> ancestors = new HashSet<>();
+ while (!Strings.isNullOrEmpty(imageId)) {
+ ancestors.add(imageId);
+ imageId = Optional.of(imageId).map(imageByImageId::get).map(Image::getParentId).orElse(null);
+ }
+ return ancestors;
+ }
+ ));
- return unusedImagesByRecent.keySet().stream()
+ // The set of images that we want to keep is:
+ // 1. The images that were recently used
+ // 2. The images that were explicitly excluded
+ // 3. All of the ancestors of from images in 1 & 2
+ Set<String> imagesToKeep = Stream
+ .concat(
+ getRecentlyUsedImageIds(images, containers, minImageAgeToDelete).stream(), // 1
+ dockerImageToImageIds(excludes, images).stream()) // 2
+ .flatMap(imageId -> ancestorsByImageId.getOrDefault(imageId, Collections.emptySet()).stream()) // 3
+ .collect(Collectors.toSet());
+
+ // Now take all the images we have locally
+ return imageByImageId.keySet().stream()
+
+ // filter out images we want to keep
+ .filter(imageId -> !imagesToKeep.contains(imageId))
+
+ // Sort images in an order is safe to delete (children before parents)
.sorted((o1, o2) -> {
// If image2 is parent of image1, image1 comes before image2
- if (imageIsDescendantOf(unusedImagesByRecent, o1, o2)) return -1;
+ if (imageIsDescendantOf(imageByImageId, o1, o2)) return -1;
// If image1 is parent of image2, image2 comes before image1
- else if (imageIsDescendantOf(unusedImagesByRecent, o2, o1)) return 1;
+ else if (imageIsDescendantOf(imageByImageId, o2, o1)) return 1;
// Otherwise, sort lexicographically by image name (For testing)
else return o1.compareTo(o2);
})
- .flatMap(imageId -> {
- // Deleting an image by image ID with multiple tags will fail -> map IDs to all the tags referring to the ID
- String[] repoTags = unusedImagesByRecent.get(imageId).getRepoTags();
- return (repoTags == null) ? Stream.of(imageId) : Stream.of(repoTags);
- })
- .map(DockerImage::new)
- .collect(Collectors.toList());
- }
- private Map<String, Image> filterOutImagesUsedByContainers(
- Map<String, Image> dockerImagesByImageId, List<com.github.dockerjava.api.model.Container> containerList) {
- Map<String, Image> filteredDockerImagesByImageId = new HashMap<>(dockerImagesByImageId);
-
- for (com.github.dockerjava.api.model.Container container : containerList) {
- String imageToSpare = container.getImageId();
- do {
- // May be null if two images have have the same parent, the first image will remove the parent, the
- // second will get null.
- Image sparedImage = filteredDockerImagesByImageId.remove(imageToSpare);
- imageToSpare = sparedImage == null ? "" : sparedImage.getParentId();
- } while (!imageToSpare.isEmpty());
- }
+ // Map back to image
+ .map(imageByImageId::get)
+
+ // Delete image, if successful also remove last usage time to prevent re-download being instantly deleted
+ .peek(image -> {
+ // Deleting an image by image ID with multiple tags will fail -> delete by tags instead
+ Optional.ofNullable(image.getRepoTags())
+ .map(Stream::of)
+ .orElse(Stream.of(image.getId()))
+ .forEach(imageReference -> {
+ logger.info("Deleting unused docker image " + imageReference);
+ docker.deleteImage(new DockerImage(imageReference));
+ });
- return filteredDockerImagesByImageId;
+ lastTimeUsedByImageId.remove(image.getId());
+ })
+ .count() > 0;
}
- private Map<String, Image> filterOutRecentImages(Map<String, Image> dockerImageByImageId) {
- Map<String, Image> filteredDockerImagesByImageId = new HashMap<>(dockerImageByImageId);
+ private Set<String> getRecentlyUsedImageIds(List<Image> images, List<Container> containers, Duration minImageAgeToDelete) {
+ final Instant now = clock.instant();
- final Instant now = Instant.now();
- filteredDockerImagesByImageId.keySet().forEach(imageId -> {
- if (! lastTimeUsedByImageId.containsKey(imageId)) lastTimeUsedByImageId.put(imageId, now);
- });
+ // Add any already downloaded image to the list once
+ images.forEach(image -> lastTimeUsedByImageId.putIfAbsent(image.getId(), now));
- lastTimeUsedByImageId.entrySet().stream()
- .filter(entry -> Duration.between(entry.getValue(), now).minus(minAgeImageGc).isNegative())
+ // Update last used time for all current containers
+ containers.forEach(container -> lastTimeUsedByImageId.put(container.getImageId(), now));
+
+ // Return list of images that have been used within minImageAgeToDelete
+ return lastTimeUsedByImageId.entrySet().stream()
+ .filter(entry -> Duration.between(entry.getValue(), now).minus(minImageAgeToDelete).isNegative())
.map(Map.Entry::getKey)
- .forEach(image -> {
- String imageToSpare = image;
- do {
- Image sparedImage = filteredDockerImagesByImageId.remove(imageToSpare);
- imageToSpare = sparedImage == null ? "" : sparedImage.getParentId();
- } while (!imageToSpare.isEmpty());
- });
- return filteredDockerImagesByImageId;
+ .collect(Collectors.toSet());
+ }
+
+ /**
+ * Attemps to make dockerImages which may be image tags or image ids to image ids. This only works
+ * if the given tag is actually present locally. This is fine, because if it isn't - we can't delete
+ * it, so no harm done.
+ */
+ private Set<String> dockerImageToImageIds(List<DockerImage> dockerImages, List<Image> images) {
+ Map<String, String> imageIdByImageTag = images.stream()
+ .flatMap(image -> Optional.ofNullable(image.getRepoTags())
+ .map(Stream::of)
+ .orElseGet(Stream::empty)
+ .map(repoTag -> new Pair<>(repoTag, image.getId())))
+ .collect(Collectors.toMap(Pair::getFirst, Pair::getSecond));
+
+ return dockerImages.stream()
+ .map(DockerImage::asString)
+ .map(tag -> imageIdByImageTag.getOrDefault(tag, tag))
+ .collect(Collectors.toSet());
}
/**
- * Returns true if ancestor is a parent or grand-parent or grand-grand-parent, etc. of img
+ * @return true if ancestor is a parent or grand-parent or grand-grand-parent, etc. of img
*/
private boolean imageIsDescendantOf(Map<String, Image> imageIdToImage, String img, String ancestor) {
while (imageIdToImage.containsKey(img)) {
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
index c5c4547f796..69ab697ea27 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.dockerapi;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.ExecCreateCmdResponse;
-import com.github.dockerjava.api.command.ExecStartCmd;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.command.InspectExecResponse;
import com.github.dockerjava.api.command.InspectImageResponse;
@@ -22,6 +21,9 @@ import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
import com.google.inject.Inject;
import com.yahoo.log.LogLevel;
+import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerExecTimeoutException;
import com.yahoo.vespa.hosted.dockerapi.metrics.CounterWrapper;
import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
@@ -51,66 +53,40 @@ import static com.yahoo.vespa.hosted.dockerapi.DockerNetworkCreator.NetworkAddre
public class DockerImpl implements Docker {
private static final Logger logger = Logger.getLogger(DockerImpl.class.getName());
- public static final String DOCKER_CUSTOM_MACVLAN_NETWORK_NAME = "vespa-macvlan";
static final String LABEL_NAME_MANAGEDBY = "com.yahoo.vespa.managedby";
+ private static final String DOCKER_CUSTOM_MACVLAN_NETWORK_NAME = "vespa-macvlan";
private static final String FRAMEWORK_CONTAINER_PREFIX = "/";
-
- private final DockerConfig config;
- private final Optional<DockerImageGarbageCollector> dockerImageGC;
- private final int secondsToWaitBeforeKilling;
- private CounterWrapper numberOfDockerDaemonFails;
- private boolean started = false;
+ private static final int SECONDS_TO_WAIT_BEFORE_KILLING = 10;
private final Object monitor = new Object();
private final Set<DockerImage> scheduledPulls = new HashSet<>();
- private DockerClient dockerClient;
+ private final DockerClient dockerClient;
+ private final DockerImageGarbageCollector dockerImageGC;
+ private final CounterWrapper numberOfDockerDaemonFails;
@Inject
public DockerImpl(DockerConfig config, MetricReceiverWrapper metricReceiverWrapper) {
- this.config = config;
-
- secondsToWaitBeforeKilling = Optional.ofNullable(config)
- .map(DockerConfig::secondsToWaitBeforeKillingContainer)
- .orElse(10);
-
- dockerImageGC = Optional.ofNullable(config)
- .map(DockerConfig::imageGCMinTimeToLiveMinutes)
- .map(Duration::ofMinutes)
- .map(DockerImageGarbageCollector::new);
-
- Optional.ofNullable(metricReceiverWrapper).ifPresent(this::setMetrics);
+ this(createDockerClient(config), metricReceiverWrapper);
}
- // For testing
- DockerImpl(final DockerClient dockerClient) {
- this(null, null);
+ DockerImpl(DockerClient dockerClient, MetricReceiverWrapper metricReceiver) {
this.dockerClient = dockerClient;
+ this.dockerImageGC = new DockerImageGarbageCollector(this);
+
+ Dimensions dimensions = new Dimensions.Builder().add("role", "docker").build();
+ numberOfDockerDaemonFails = metricReceiver.declareCounter(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, "daemon.api_fails");
}
@Override
public void start() {
- if (started) return;
- started = true;
-
- if (config != null) {
- dockerClient = createDockerClient(config);
-
- if (!config.networkNATed()) {
- try {
- setupDockerNetworkIfNeeded();
- } catch (Exception e) {
- throw new DockerException("Could not setup docker network", e);
- }
- }
+ try {
+ setupDockerNetworkIfNeeded();
+ } catch (Exception e) {
+ throw new DockerException("Could not setup docker network", e);
}
}
- @Override
- public boolean networkNATed() {
- return config.networkNATed();
- }
-
private void setupDockerNetworkIfNeeded() throws IOException {
if (!dockerClient.listNetworksCmd().withNameFilter(DOCKER_CUSTOM_MACVLAN_NETWORK_NAME).exec().isEmpty()) return;
@@ -140,7 +116,7 @@ public class DockerImpl implements Docker {
}
@Override
- public boolean pullImageAsyncIfNeeded(final DockerImage image) {
+ public boolean pullImageAsyncIfNeeded(DockerImage image) {
try {
synchronized (monitor) {
if (scheduledPulls.contains(image)) return true;
@@ -159,7 +135,7 @@ public class DockerImpl implements Docker {
}
}
- private void removeScheduledPoll(final DockerImage image) {
+ private void removeScheduledPoll(DockerImage image) {
synchronized (monitor) {
scheduledPulls.remove(image);
}
@@ -168,7 +144,7 @@ public class DockerImpl implements Docker {
/**
* Check if a given image is already in the local registry
*/
- boolean imageIsDownloaded(final DockerImage dockerImage) {
+ boolean imageIsDownloaded(DockerImage dockerImage) {
return inspectImage(dockerImage).isPresent();
}
@@ -195,6 +171,8 @@ public class DockerImpl implements Docker {
dockerClient.connectToNetworkCmd()
.withContainerId(containerName.asString())
.withNetworkId(networkName).exec();
+ } catch (NotFoundException e) {
+ throw new ContainerNotFoundException(containerName);
} catch (RuntimeException e) {
numberOfDockerDaemonFails.add();
throw new DockerException("Failed to connect container '" + containerName.asString() +
@@ -222,33 +200,27 @@ public class DockerImpl implements Docker {
*/
private ProcessResult executeInContainerAsUser(ContainerName containerName, String user, Optional<Long> timeoutSeconds, String... command) {
try {
- final ExecCreateCmdResponse response = dockerClient.execCreateCmd(containerName.asString())
- .withCmd(command)
- .withAttachStdout(true)
- .withAttachStderr(true)
- .withUser(user)
- .exec();
+ ExecCreateCmdResponse response = execCreateCmd(containerName, user, command);
ByteArrayOutputStream output = new ByteArrayOutputStream();
ByteArrayOutputStream errors = new ByteArrayOutputStream();
- ExecStartCmd execStartCmd = dockerClient.execStartCmd(response.getId());
- ExecStartResultCallback callback = execStartCmd.exec(new ExecStartResultCallback(output, errors));
+ ExecStartResultCallback callback = dockerClient.execStartCmd(response.getId())
+ .exec(new ExecStartResultCallback(output, errors));
if (timeoutSeconds.isPresent()) {
- if (!callback.awaitCompletion(timeoutSeconds.get(), TimeUnit.SECONDS)) {
- throw new DockerExecTimeoutException(String.format("Command '%s' did not finish within %s seconds.", command[0], timeoutSeconds));
- }
+ if (!callback.awaitCompletion(timeoutSeconds.get(), TimeUnit.SECONDS))
+ throw new DockerExecTimeoutException(String.format(
+ "Command '%s' did not finish within %s seconds.", command[0], timeoutSeconds));
} else {
// Wait for completion no timeout
callback.awaitCompletion();
}
- final InspectExecResponse state = dockerClient.inspectExecCmd(execStartCmd.getExecId()).exec();
- assert !state.isRunning();
- Integer exitCode = state.getExitCode();
- assert exitCode != null;
+ InspectExecResponse state = dockerClient.inspectExecCmd(response.getId()).exec();
+ if (state.isRunning())
+ throw new DockerException("Command '%s' did not finish within %s seconds.");
- return new ProcessResult(exitCode, new String(output.toByteArray()), new String(errors.toByteArray()));
+ return new ProcessResult(state.getExitCode(), new String(output.toByteArray()), new String(errors.toByteArray()));
} catch (RuntimeException | InterruptedException e) {
numberOfDockerDaemonFails.add();
throw new DockerException("Container '" + containerName.asString()
@@ -256,6 +228,19 @@ public class DockerImpl implements Docker {
}
}
+ private ExecCreateCmdResponse execCreateCmd(ContainerName containerName, String user, String... command) {
+ try {
+ return dockerClient.execCreateCmd(containerName.asString())
+ .withCmd(command)
+ .withAttachStdout(true)
+ .withAttachStderr(true)
+ .withUser(user)
+ .exec();
+ } catch (NotFoundException e) {
+ throw new ContainerNotFoundException(containerName);
+ }
+ }
+
private Optional<InspectContainerResponse> inspectContainerCmd(String container) {
try {
return Optional.of(dockerClient.inspectContainerCmd(container).exec());
@@ -273,7 +258,7 @@ public class DockerImpl implements Docker {
DockerStatsCallback statsCallback = dockerClient.statsCmd(containerName.asString()).exec(new DockerStatsCallback());
statsCallback.awaitCompletion(5, TimeUnit.SECONDS);
- return statsCallback.stats.map(stats -> new ContainerStatsImpl(
+ return statsCallback.stats.map(stats -> new ContainerStats(
stats.getNetworks(), stats.getCpuStats(), stats.getMemoryStats(), stats.getBlkioStats()));
} catch (NotFoundException ignored) {
return Optional.empty();
@@ -284,21 +269,11 @@ public class DockerImpl implements Docker {
}
@Override
- public void createContainer(CreateContainerCommand createContainerCommand) {
- try {
- dockerClient.execCreateCmd(createContainerCommand.toString());
- } catch (NotModifiedException ignored) {
- // If is already created, ignore
- } catch (RuntimeException e) {
- numberOfDockerDaemonFails.add();
- throw new DockerException("Failed to create container '" + createContainerCommand.toString() + "'", e);
- }
- }
-
- @Override
public void startContainer(ContainerName containerName) {
try {
dockerClient.startContainerCmd(containerName.asString()).exec();
+ } catch (NotFoundException e) {
+ throw new ContainerNotFoundException(containerName);
} catch (NotModifiedException ignored) {
// If is already started, ignore
} catch (RuntimeException e) {
@@ -308,9 +283,11 @@ public class DockerImpl implements Docker {
}
@Override
- public void stopContainer(final ContainerName containerName) {
+ public void stopContainer(ContainerName containerName) {
try {
- dockerClient.stopContainerCmd(containerName.asString()).withTimeout(secondsToWaitBeforeKilling).exec();
+ dockerClient.stopContainerCmd(containerName.asString()).withTimeout(SECONDS_TO_WAIT_BEFORE_KILLING).exec();
+ } catch (NotFoundException e) {
+ throw new ContainerNotFoundException(containerName);
} catch (NotModifiedException ignored) {
// If is already stopped, ignore
} catch (RuntimeException e) {
@@ -322,14 +299,9 @@ public class DockerImpl implements Docker {
@Override
public void deleteContainer(ContainerName containerName) {
try {
- dockerImageGC.ifPresent(imageGC -> {
- Optional<InspectContainerResponse> inspectResponse = inspectContainerCmd(containerName.asString());
- inspectResponse.ifPresent(response -> imageGC.updateLastUsedTimeFor(response.getImageId()));
- });
-
dockerClient.removeContainerCmd(containerName.asString()).exec();
- } catch (NotFoundException ignored) {
- // If container doesn't exist ignore
+ } catch (NotFoundException e) {
+ throw new ContainerNotFoundException(containerName);
} catch (RuntimeException e) {
numberOfDockerDaemonFails.add();
throw new DockerException("Failed to delete container '" + containerName.asString() + "'", e);
@@ -366,7 +338,7 @@ public class DockerImpl implements Docker {
.orElse(Stream.empty());
}
- private boolean isManagedBy(final com.github.dockerjava.api.model.Container container, String manager) {
+ private boolean isManagedBy(com.github.dockerjava.api.model.Container container, String manager) {
final Map<String, String> labels = container.getLabels();
return labels != null && manager.equals(labels.get(LABEL_NAME_MANAGEDBY));
}
@@ -375,7 +347,7 @@ public class DockerImpl implements Docker {
return encodedContainerName.substring(FRAMEWORK_CONTAINER_PREFIX.length());
}
- private List<com.github.dockerjava.api.model.Container> listAllContainers() {
+ List<com.github.dockerjava.api.model.Container> listAllContainers() {
try {
return dockerClient.listContainersCmd().withShowAll(true).exec();
} catch (RuntimeException e) {
@@ -384,7 +356,7 @@ public class DockerImpl implements Docker {
}
}
- private List<Image> listAllImages() {
+ List<Image> listAllImages() {
try {
return dockerClient.listImagesCmd().withShowAll(true).exec();
} catch (RuntimeException e) {
@@ -393,8 +365,7 @@ public class DockerImpl implements Docker {
}
}
- @Override
- public void deleteImage(final DockerImage dockerImage) {
+ void deleteImage(DockerImage dockerImage) {
try {
dockerClient.removeImageCmd(dockerImage.asString()).exec();
} catch (NotFoundException ignored) {
@@ -406,13 +377,8 @@ public class DockerImpl implements Docker {
}
@Override
- public void deleteUnusedDockerImages() {
- if (!dockerImageGC.isPresent()) return;
-
- List<Image> images = listAllImages();
- List<com.github.dockerjava.api.model.Container> containers = listAllContainers();
-
- dockerImageGC.get().getUnusedDockerImages(images, containers).forEach(this::deleteImage);
+ public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) {
+ return dockerImageGC.deleteUnusedDockerImages(excludes, minImageAgeToDelete);
}
private class ImagePullCallback extends PullImageResultCallback {
@@ -431,10 +397,8 @@ public class DockerImpl implements Docker {
@Override
public void onComplete() {
- Optional<InspectImageResponse> image = inspectImage(dockerImage);
- if (image.isPresent()) { // Download successful, update image GC with the newly downloaded image
+ if (imageIsDownloaded(dockerImage)) {
logger.log(LogLevel.INFO, "Download completed: " + dockerImage.asString());
- dockerImageGC.ifPresent(imageGC -> imageGC.updateLastUsedTimeFor(image.get().getId()));
removeScheduledPoll(dockerImage);
} else {
throw new DockerClientException("Could not download image: " + dockerImage);
@@ -479,9 +443,4 @@ public class DockerImpl implements Docker {
return DockerClientImpl.getInstance(dockerClientConfig)
.withDockerCmdExecFactory(dockerFactory);
}
-
- void setMetrics(MetricReceiverWrapper metricReceiver) {
- Dimensions dimensions = new Dimensions.Builder().add("role", "docker").build();
- numberOfDockerDaemonFails = metricReceiver.declareCounter(MetricReceiverWrapper.APPLICATION_DOCKER, dimensions, "daemon.api_fails");
- }
}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/ContainerNotFoundException.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/ContainerNotFoundException.java
new file mode 100644
index 00000000000..b237228ee8e
--- /dev/null
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/ContainerNotFoundException.java
@@ -0,0 +1,13 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.dockerapi.exception;
+
+import com.yahoo.vespa.hosted.dockerapi.ContainerName;
+
+/**
+ * @author freva
+ */
+public class ContainerNotFoundException extends DockerException {
+ public ContainerNotFoundException(ContainerName containerName) {
+ super("No such container: " + containerName.asString());
+ }
+}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerException.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerException.java
index b5b622977fb..df6bb702bf7 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerException.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerException.java
@@ -1,5 +1,5 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.dockerapi;
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.dockerapi.exception;
/**
* This exception wraps any exception thrown by docker-java
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerExecTimeoutException.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerExecTimeoutException.java
index a315bc09d0b..39813db5c1e 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerExecTimeoutException.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/DockerExecTimeoutException.java
@@ -1,5 +1,5 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.dockerapi;
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.dockerapi.exception;
/**
* Runtime exception to be thrown when the exec commands did not finish in time.
@@ -10,7 +10,7 @@ package com.yahoo.vespa.hosted.dockerapi;
* @author smorgrav
*/
@SuppressWarnings("serial")
-public class DockerExecTimeoutException extends RuntimeException {
+public class DockerExecTimeoutException extends DockerException {
public DockerExecTimeoutException(String msg) {
super(msg);
}
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/package-info.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/package-info.java
new file mode 100644
index 00000000000..a5ec5f6c235
--- /dev/null
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/exception/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.vespa.hosted.dockerapi.exception;
+
+import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/docker-api/src/main/resources/configdefinitions/docker.def b/docker-api/src/main/resources/configdefinitions/docker.def
index 83fee05dff6..3d594e5d62b 100644
--- a/docker-api/src/main/resources/configdefinitions/docker.def
+++ b/docker-api/src/main/resources/configdefinitions/docker.def
@@ -3,13 +3,13 @@ namespace=vespa.hosted.dockerapi
uri string default = "unix:///host/var/run/docker.sock"
-secondsToWaitBeforeKillingContainer int default = 10
maxPerRouteConnections int default = 10
maxTotalConnections int default = 100
connectTimeoutMillis int default = 100000 # 100 sec
readTimeoutMillis int default = 1800000 # 30 min
+# TODO: Remove
+secondsToWaitBeforeKillingContainer int default = 10
isRunningLocally bool default = false
imageGCMinTimeToLiveMinutes int default = 45
-
networkNATed bool default = false
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java
index a78c9280e4e..5a6efb68d14 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImageGarbageCollectionTest.java
@@ -5,145 +5,214 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.api.model.Image;
+import com.yahoo.test.ManualClock;
import org.junit.Test;
import java.io.IOException;
import java.time.Duration;
-import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
/**
* @author freva
*/
public class DockerImageGarbageCollectionTest {
+
+ private final ImageGcTester gcTester = new ImageGcTester();
+
@Test
public void noImagesMeansNoUnusedImages() {
- new ImageGcTester(0)
- .withExistingImages()
- .expectUnusedImages();
+ gcTester.withExistingImages()
+ .expectDeletedImages();
}
@Test
public void singleImageWithoutContainersIsUnused() {
- new ImageGcTester(0)
- .withExistingImages(new ImageBuilder("image-1"))
- .expectUnusedImages("image-1");
+ gcTester.withExistingImages(new ImageBuilder("image-1"))
+ // Even though nothing is using the image, we will keep it for at least 1h
+ .expectDeletedImagesAfterMinutes(0)
+ .expectDeletedImagesAfterMinutes(30)
+ .expectDeletedImagesAfterMinutes(30, "image-1");
}
@Test
public void singleImageWithContainerIsUsed() {
- new ImageGcTester(0)
- .withExistingImages(ImageBuilder.forId("image-1"))
+ gcTester.withExistingImages(ImageBuilder.forId("image-1"))
.andExistingContainers(ContainerBuilder.forId("container-1").withImageId("image-1"))
- .expectUnusedImages();
+ .expectDeletedImages();
}
@Test
public void multipleUnusedImagesAreIdentified() {
- new ImageGcTester(0)
- .withExistingImages(
+ gcTester.withExistingImages(
ImageBuilder.forId("image-1"),
ImageBuilder.forId("image-2"))
- .expectUnusedImages("image-1", "image-2");
+ .expectDeletedImages("image-1", "image-2");
}
@Test
public void multipleUnusedLeavesAreIdentified() {
- new ImageGcTester(0)
- .withExistingImages(
+ gcTester.withExistingImages(
ImageBuilder.forId("parent-image"),
ImageBuilder.forId("image-1").withParentId("parent-image"),
ImageBuilder.forId("image-2").withParentId("parent-image"))
- .expectUnusedImages("image-1", "image-2", "parent-image");
+ .expectDeletedImages("image-1", "image-2", "parent-image");
}
@Test
public void unusedLeafWithUsedSiblingIsIdentified() {
- new ImageGcTester(0)
- .withExistingImages(
+ gcTester.withExistingImages(
ImageBuilder.forId("parent-image"),
ImageBuilder.forId("image-1").withParentId("parent-image").withTags("latest"),
ImageBuilder.forId("image-2").withParentId("parent-image").withTags("1.24"))
.andExistingContainers(ContainerBuilder.forId("vespa-node-1").withImageId("image-1"))
- .expectUnusedImages("1.24");
+ .expectDeletedImages("1.24"); // Deleting the only tag will delete the image
}
@Test
public void unusedImagesWithMultipleTags() {
- new ImageGcTester(0)
- .withExistingImages(
+ gcTester.withExistingImages(
ImageBuilder.forId("parent-image"),
ImageBuilder.forId("image-1").withParentId("parent-image")
.withTags("vespa-6", "vespa-6.28", "vespa:latest"))
- .expectUnusedImages("vespa-6", "vespa-6.28", "vespa:latest", "parent-image");
+ .expectDeletedImages("vespa-6", "vespa-6.28", "vespa:latest", "parent-image");
}
@Test
public void taggedImageWithNoContainersIsUnused() {
- new ImageGcTester(0)
- .withExistingImages(ImageBuilder.forId("image-1").withTags("vespa-6"))
- .expectUnusedImages("vespa-6");
+ gcTester.withExistingImages(ImageBuilder.forId("image-1").withTags("vespa-6"))
+ .expectDeletedImages("vespa-6");
}
@Test
public void unusedImagesWithSimpleImageGc() {
- new ImageGcTester(20)
+ gcTester.withExistingImages(ImageBuilder.forId("parent-image"))
+ .expectDeletedImagesAfterMinutes(30)
.withExistingImages(
- ImageBuilder.forId("parent-image").withLastUsedMinutesAgo(25),
- ImageBuilder.forId("image-1").withParentId("parent-image").withLastUsedMinutesAgo(5))
- .expectUnusedImages();
+ ImageBuilder.forId("parent-image"),
+ ImageBuilder.forId("image-1").withParentId("parent-image"))
+ .expectDeletedImagesAfterMinutes(0)
+ .expectDeletedImagesAfterMinutes(30)
+ // At this point, parent-image has been unused for 1h, but image-1 depends on parent-image and it has
+ // only been unused for 30m, so we cannot delete parent-image yet. 30 mins later both can be removed
+ .expectDeletedImagesAfterMinutes(30, "image-1", "parent-image");
}
@Test
- public void unusedImagesWithImageGc() {
- new ImageGcTester(20)
- .withExistingImages(
- ImageBuilder.forId("parent-1").withLastUsedMinutesAgo(40),
- ImageBuilder.forId("parent-2").withTags("p-tag:1").withLastUsedMinutesAgo(10),
- ImageBuilder.forId("image-1-1").withParentId("parent-1").withTags("i-tag:1", "i-tag:2", "i-tag-3").withLastUsedMinutesAgo(5),
- ImageBuilder.forId("image-1-2").withParentId("parent-1").withLastUsedMinutesAgo(25),
- ImageBuilder.forId("image-2-1").withParentId("parent-2").withTags("i-tag:4").withLastUsedMinutesAgo(30))
- .andExistingContainers(
- ContainerBuilder.forId("cont-1").withImageId("image-1-1"))
- .expectUnusedImages("image-1-2", "i-tag:4");
+ public void reDownloadingImageIsNotImmediatelyDeleted() {
+ gcTester.withExistingImages(ImageBuilder.forId("image"))
+ .expectDeletedImages("image") // After 1h we delete image
+ .expectDeletedImagesAfterMinutes(0) // image is immediately re-downloaded, but is not deleted
+ .expectDeletedImagesAfterMinutes(10)
+ .expectDeletedImages("image"); // 1h after re-download it is deleted again
}
- private static class ImageGcTester {
- private static DockerImageGarbageCollector imageGC;
+ @Test
+ public void reDownloadingImageIsNotImmediatelyDeletedWhenDeletingByTag() {
+ gcTester.withExistingImages(ImageBuilder.forId("image").withTags("image-1", "my-tag"))
+ .expectDeletedImages("image-1", "my-tag") // After 1h we delete image
+ .expectDeletedImagesAfterMinutes(0) // image is immediately re-downloaded, but is not deleted
+ .expectDeletedImagesAfterMinutes(10)
+ .expectDeletedImages("image-1", "my-tag"); // 1h after re-download it is deleted again
+ }
- private List<Image> existingImages = Collections.emptyList();
- private List<com.github.dockerjava.api.model.Container> existingContainers = Collections.emptyList();
+ /** Same scenario as in {@link #multipleUnusedImagesAreIdentified()} */
+ @Test
+ public void doesNotDeleteExcludedByIdImages() {
+ gcTester.withExistingImages(
+ ImageBuilder.forId("parent-image"),
+ ImageBuilder.forId("image-1").withParentId("parent-image"),
+ ImageBuilder.forId("image-2").withParentId("parent-image"))
+ // Normally, image-1 and parent-image should also be deleted, but because we exclude image-1
+ // we cannot delete parent-image, so only image-2 is deleted
+ .expectDeletedImages(Collections.singletonList("image-1"), "image-2");
+ }
- private ImageGcTester(int imageGcMinTimeInMinutes) {
- imageGC = new DockerImageGarbageCollector(Duration.ofMinutes(imageGcMinTimeInMinutes));
- }
+ /** Same as in {@link #doesNotDeleteExcludedByIdImages()} but with tags */
+ @Test
+ public void doesNotDeleteExcludedByTagImages() {
+ gcTester.withExistingImages(
+ ImageBuilder.forId("parent-image").withTags("rhel-6"),
+ ImageBuilder.forId("image-1").withParentId("parent-image").withTags("vespa:6.288.16"),
+ ImageBuilder.forId("image-2").withParentId("parent-image").withTags("vespa:6.289.94"))
+ .expectDeletedImages(Collections.singletonList("vespa:6.288.16"), "vespa:6.289.94");
+ }
- private ImageGcTester withExistingImages(final ImageBuilder... images) {
- this.existingImages = Arrays.stream(images)
+ @Test
+ public void exludingNotDownloadedImageIsNoop() {
+ gcTester.withExistingImages(
+ ImageBuilder.forId("parent-image").withTags("rhel-6"),
+ ImageBuilder.forId("image-1").withParentId("parent-image").withTags("vespa:6.288.16"),
+ ImageBuilder.forId("image-2").withParentId("parent-image").withTags("vespa:6.289.94"))
+ .expectDeletedImages(Collections.singletonList("vespa:6.300.1"), "vespa:6.288.16", "vespa:6.289.94", "rhel-6");
+ }
+
+ private class ImageGcTester {
+ private final DockerImpl docker = mock(DockerImpl.class);
+ private final ManualClock clock = new ManualClock();
+ private final DockerImageGarbageCollector imageGC = new DockerImageGarbageCollector(docker, clock);
+ private final Map<DockerImage, Integer> numDeletes = new HashMap<>();
+ private boolean initialized = false;
+
+ private ImageGcTester withExistingImages(ImageBuilder... images) {
+ when(docker.listAllImages()).thenReturn(Arrays.stream(images)
.map(ImageBuilder::toImage)
- .collect(Collectors.toList());
+ .collect(Collectors.toList()));
return this;
}
- private ImageGcTester andExistingContainers(final ContainerBuilder... containers) {
- this.existingContainers = Arrays.stream(containers)
+ private ImageGcTester andExistingContainers(ContainerBuilder... containers) {
+ when(docker.listAllContainers()).thenReturn(Arrays.stream(containers)
.map(ContainerBuilder::toContainer)
- .collect(Collectors.toList());
+ .collect(Collectors.toList()));
return this;
}
- private void expectUnusedImages(final String... imageIds) {
- final List<DockerImage> expectedUnusedImages = Arrays.stream(imageIds)
+ private ImageGcTester expectDeletedImages(String... imageIds) {
+ return expectDeletedImagesAfterMinutes(60, imageIds);
+ }
+
+ private ImageGcTester expectDeletedImages(List<String> except, String... imageIds) {
+ return expectDeletedImagesAfterMinutes(60, except, imageIds);
+ }
+ private ImageGcTester expectDeletedImagesAfterMinutes(int minutesAfter, String... imageIds) {
+ return expectDeletedImagesAfterMinutes(minutesAfter, Collections.emptyList(), imageIds);
+ }
+
+ private ImageGcTester expectDeletedImagesAfterMinutes(int minutesAfter, List<String> except, String... imageIds) {
+ if (!initialized) {
+ // Run once with a very long expiry to initialize internal state of existing images
+ imageGC.deleteUnusedDockerImages(Collections.emptyList(), Duration.ofDays(999));
+ initialized = true;
+ }
+
+ clock.advance(Duration.ofMinutes(minutesAfter));
+
+ imageGC.deleteUnusedDockerImages(
+ except.stream().map(DockerImage::new).collect(Collectors.toList()),
+ Duration.ofHours(1).minusSeconds(1));
+
+ Arrays.stream(imageIds)
.map(DockerImage::new)
- .collect(Collectors.toList());
+ .forEach(image -> {
+ int newValue = numDeletes.getOrDefault(image, 0) + 1;
+ numDeletes.put(image, newValue);
+ verify(docker, times(newValue)).deleteImage(eq(image));
+ });
- assertThat(imageGC.getUnusedDockerImages(existingImages, existingContainers), is(expectedUnusedImages));
+ verify(docker, times(numDeletes.values().stream().mapToInt(i -> i).sum())).deleteImage(any());
+ return this;
}
}
@@ -185,11 +254,6 @@ public class DockerImageGarbageCollectionTest {
private static ImageBuilder forId(String id) { return new ImageBuilder(id); }
private ImageBuilder withParentId(String parentId) { this.parentId = parentId; return this; }
private ImageBuilder withTags(String... tags) { this.repoTags = tags; return this; }
- private ImageBuilder withLastUsedMinutesAgo(int minutesAgo) {
- ImageGcTester.imageGC.updateLastUsedTimeFor(id, Instant.now().minus(Duration.ofMinutes(minutesAgo)));
- return this;
- }
-
private Image toImage() { return createFrom(Image.class, this); }
}
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
index 13ff45808cf..f1a8d4ef65e 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerImplTest.java
@@ -33,6 +33,10 @@ import static org.mockito.Mockito.when;
*/
public class DockerImplTest {
+ private final DockerClient dockerClient = mock(DockerClient.class);
+ private final MetricReceiverWrapper metricReceiver = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
+ private final DockerImpl docker = new DockerImpl(dockerClient, metricReceiver);
+
@Test
public void testExecuteCompletes() {
final String containerId = "container-id";
@@ -40,8 +44,6 @@ public class DockerImplTest {
final String execId = "exec-id";
final int exitCode = 3;
- final DockerClient dockerClient = mock(DockerClient.class);
-
final ExecCreateCmdResponse response = mock(ExecCreateCmdResponse.class);
when(response.getId()).thenReturn(execId);
@@ -64,7 +66,6 @@ public class DockerImplTest {
when(state.isRunning()).thenReturn(false);
when(state.getExitCode()).thenReturn(exitCode);
- final Docker docker = new DockerImpl(dockerClient);
final ProcessResult result = docker.executeInContainer(new ContainerName(containerId), command);
assertThat(result.getExitStatus(), is(exitCode));
}
@@ -87,12 +88,9 @@ public class DockerImplTest {
PullImageCmd pullImageCmd = mock(PullImageCmd.class);
when(pullImageCmd.exec(resultCallback.capture())).thenReturn(null);
- final DockerClient dockerClient = mock(DockerClient.class);
when(dockerClient.inspectImageCmd(image.asString())).thenReturn(imageInspectCmd);
when(dockerClient.pullImageCmd(eq(image.asString()))).thenReturn(pullImageCmd);
- final DockerImpl docker = new DockerImpl(dockerClient);
- docker.setMetrics(new MetricReceiverWrapper(MetricReceiver.nullImplementation));
assertTrue("Should return true, we just scheduled the pull", docker.pullImageAsyncIfNeeded(image));
assertTrue("Should return true, the pull i still ongoing", docker.pullImageAsyncIfNeeded(image));
@@ -114,12 +112,9 @@ public class DockerImplTest {
PullImageCmd pullImageCmd = mock(PullImageCmd.class);
when(pullImageCmd.exec(resultCallback.capture())).thenReturn(null);
- final DockerClient dockerClient = mock(DockerClient.class);
when(dockerClient.inspectImageCmd(image.asString())).thenReturn(imageInspectCmd);
when(dockerClient.pullImageCmd(eq(image.asString()))).thenReturn(pullImageCmd);
- final DockerImpl docker = new DockerImpl(dockerClient);
- docker.setMetrics(new MetricReceiverWrapper(MetricReceiver.nullImplementation));
assertTrue("Should return true, we just scheduled the pull", docker.pullImageAsyncIfNeeded(image));
assertTrue("Should return true, the pull i still ongoing", docker.pullImageAsyncIfNeeded(image));
diff --git a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/MbusRequestContext.java b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/MbusRequestContext.java
index 0f3f3938701..187557791f3 100644
--- a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/MbusRequestContext.java
+++ b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/MbusRequestContext.java
@@ -168,7 +168,6 @@ public class MbusRequestContext implements RequestContext, ResponseHandler {
case DocumentProtocol.MESSAGE_PUTDOCUMENT:
case DocumentProtocol.MESSAGE_UPDATEDOCUMENT:
case DocumentProtocol.MESSAGE_REMOVEDOCUMENT:
- case DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE:
return true;
}
return false;
diff --git a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
index 044f86e93e6..49a6020d633 100644
--- a/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
+++ b/docproc/src/main/java/com/yahoo/docproc/jdisc/messagebus/ProcessingFactory.java
@@ -15,7 +15,6 @@ import com.yahoo.document.DocumentOperation;
import com.yahoo.document.DocumentPut;
import com.yahoo.document.DocumentRemove;
import com.yahoo.document.DocumentUpdate;
-import com.yahoo.documentapi.messagebus.protocol.BatchDocumentUpdateMessage;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage;
@@ -67,12 +66,6 @@ class ProcessingFactory {
processings.add(createProcessing(removeOperation, message));
break;
}
- case DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE: {
- for (DocumentUpdate update : ((BatchDocumentUpdateMessage) message).getUpdates()) {
- processings.add(createProcessing(update, message));
- }
- break;
- }
}
return processings;
}
diff --git a/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerAllMessageTypesTestCase.java b/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerAllMessageTypesTestCase.java
index 387436be546..e0ca630889d 100644
--- a/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerAllMessageTypesTestCase.java
+++ b/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerAllMessageTypesTestCase.java
@@ -10,7 +10,6 @@ import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.IntegerFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.update.FieldUpdate;
-import com.yahoo.documentapi.messagebus.protocol.BatchDocumentUpdateMessage;
import com.yahoo.documentapi.messagebus.protocol.GetDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage;
@@ -52,7 +51,6 @@ public class DocumentProcessingHandlerAllMessageTypesTestCase extends DocumentPr
put();
remove();
update();
- batchDocumentUpdate();
}
private void get() throws InterruptedException {
@@ -129,33 +127,6 @@ public class DocumentProcessingHandlerAllMessageTypesTestCase extends DocumentPr
assertFalse(reply.hasErrors());
}
- private void batchDocumentUpdate() throws InterruptedException {
- DocumentUpdate doc1 = new DocumentUpdate(getType(), new DocumentId("userdoc:test:12345:multi:1"));
- DocumentUpdate doc2 = new DocumentUpdate(getType(), new DocumentId("userdoc:test:12345:multi:2"));
-
- Field testField = getType().getField("blahblah");
- doc1.addFieldUpdate(FieldUpdate.createAssign(testField, new StringFieldValue("1 not yet processed")));
- doc2.addFieldUpdate(FieldUpdate.createAssign(testField, new StringFieldValue("2 not yet processed")));
-
- BatchDocumentUpdateMessage message = new BatchDocumentUpdateMessage(12345);
- message.addUpdate(doc1);
- message.addUpdate(doc2);
-
- assertTrue(sendMessage(FOOBAR, message));
-
- Message remote1 = remoteServer.awaitMessage(60, TimeUnit.SECONDS);
- assertTrue(remote1 instanceof UpdateDocumentMessage);
- remoteServer.ackMessage(remote1);
- assertNull(driver.client().awaitReply(100, TimeUnit.MILLISECONDS));
-
- Message remote2 = remoteServer.awaitMessage(60, TimeUnit.SECONDS);
- assertTrue(remote2 instanceof UpdateDocumentMessage);
- remoteServer.ackMessage(remote2);
- Reply reply = driver.client().awaitReply(60, TimeUnit.SECONDS);
- assertNotNull(reply);
- assertFalse(reply.hasErrors());
- }
-
@Override
public List<Pair<String,CallStack>> getCallStacks() {
CallStack stack = new CallStack();
diff --git a/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerTransformingMessagesTestCase.java b/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerTransformingMessagesTestCase.java
index 30ff43264a0..efa05273c8d 100644
--- a/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerTransformingMessagesTestCase.java
+++ b/docproc/src/test/java/com/yahoo/docproc/jdisc/DocumentProcessingHandlerTransformingMessagesTestCase.java
@@ -69,7 +69,6 @@ public class DocumentProcessingHandlerTransformingMessagesTestCase extends Docum
put();
remove();
update();
- batchDocumentUpdate();
}
private void put() throws InterruptedException {
@@ -170,24 +169,6 @@ public class DocumentProcessingHandlerTransformingMessagesTestCase extends Docum
}
}
- private void batchDocumentUpdate() throws InterruptedException {
- DocumentUpdate doc1 = new DocumentUpdate(getType(), new DocumentId("userdoc:test:12345:batch:nodocstatus:keep:this"));
- DocumentUpdate doc2 = new DocumentUpdate(getType(), new DocumentId("userdoc:test:12345:batch:nodocstatus:skip:this"));
-
- Field testField = getType().getField("foostring");
- doc1.addFieldUpdate(FieldUpdate.createAssign(testField, new StringFieldValue("1 not yet processed")));
- doc2.addFieldUpdate(FieldUpdate.createAssign(testField, new StringFieldValue("2 not yet processed")));
-
- BatchDocumentUpdateMessage message = new BatchDocumentUpdateMessage(12345);
- message.addUpdate(doc1);
- message.addUpdate(doc2);
-
- Routable result = sendMessageAndGetResult(message);
- assertThat(result, instanceOf(UpdateDocumentMessage.class));
- DocumentUpdate outputUpd = ((UpdateDocumentMessage)result).getDocumentUpdate();
- assertThat(outputUpd.getId().toString(), is("userdoc:test:12345:batch:nodocstatus:keep:this"));
- }
-
public class TransformingDocumentProcessor extends DocumentProcessor {
@Override
diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java
index f25603deee9..a2321e912e1 100644
--- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java
+++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java
@@ -9,7 +9,6 @@ import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.MapFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
-import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.StructuredFieldValue;
import com.yahoo.document.datatypes.WeightedSet;
import com.yahoo.document.fieldpathupdate.AssignFieldPathUpdate;
@@ -20,7 +19,11 @@ import com.yahoo.document.update.ValueUpdate;
import com.yahoo.vespa.indexinglanguage.AdapterFactory;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
/**
* @author Simon Thoresen Hult
diff --git a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
index e486e2647cf..8e934001381 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
@@ -116,11 +116,10 @@ public class JsonSerializationHelper {
}
public static void serializeStringField(JsonGenerator generator, FieldBase field, StringFieldValue value) {
- // Hide empty strings
- if (value.getString().length() == 0) {
+ // Hide fields which only contains an empty string
+ if (value.getString().length() == 0 && field != null) {
return;
}
-
serializeString(generator, field, value.getString());
}
@@ -237,10 +236,6 @@ public class JsonSerializationHelper {
}
public static void serializeString(JsonGenerator generator, FieldBase field, String value) {
- if (value.length() == 0) {
- return;
- }
-
fieldNameIfNotNull(generator, field);
wrapIOException(() -> generator.writeString(value));
}
diff --git a/document/src/test/java/com/yahoo/document/json/JsonWriterTestCase.java b/document/src/test/java/com/yahoo/document/json/JsonWriterTestCase.java
index 50d02d70c9b..0ab00b4e2bc 100644
--- a/document/src/test/java/com/yahoo/document/json/JsonWriterTestCase.java
+++ b/document/src/test/java/com/yahoo/document/json/JsonWriterTestCase.java
@@ -213,7 +213,7 @@ public class JsonWriterTestCase {
@Test
public void arrayTest() throws IOException {
roundTripEquality("id:unittest:testarray::whee", "{ \"actualarray\": ["
- + " \"nalle\"," + " \"tralle\"]}");
+ + " \"nalle\"," + " \"\"," + " \"tralle\"]}");
}
@Test
@@ -342,6 +342,10 @@ public class JsonWriterTestCase {
ObjectMapper m = new ObjectMapper();
Map<?, ?> exp = m.readValue(expected, Map.class);
Map<?, ?> gen = m.readValue(generated, Map.class);
+ if (! exp.equals(gen)) {
+ System.err.println("expected: "+Utf8.toString(expected));
+ System.err.println("generated: "+Utf8.toString(generated));
+ }
assertEquals(exp, gen);
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateMessage.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateMessage.java
deleted file mode 100644
index d8288a94ab6..00000000000
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateMessage.java
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol;
-
-import com.yahoo.document.BucketId;
-import com.yahoo.document.BucketIdFactory;
-import com.yahoo.document.DocumentId;
-import com.yahoo.document.DocumentUpdate;
-import com.yahoo.document.idstring.GroupDocIdString;
-import com.yahoo.document.idstring.IdString;
-import com.yahoo.document.idstring.UserDocIdString;
-import com.yahoo.document.serialization.DocumentDeserializer;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Simon Thoresen Hult
- */
-public class BatchDocumentUpdateMessage extends DocumentMessage {
-
- private DocumentDeserializer buffer = null;
- private List<DocumentUpdate> updates = new ArrayList<DocumentUpdate>();
- private LazyDecoder decoder = null;
- private String group = null;
- private Long userId = null;
- private BucketId bucketId = null;
-
- public String getGroup() {
- return group;
- }
-
- public Long getUserId() {
- return userId;
- }
-
- /**
- * Constructs a new message for deserialization.
- */
- BatchDocumentUpdateMessage() {
- // empty
- }
-
- /**
- * Constructs a new message from a byte buffer.
- * @param decoder The decoder to use for deserialization.
- * @param buffer A byte buffer that contains a serialized message.
- */
- public BatchDocumentUpdateMessage(long userId, LazyDecoder decoder, DocumentDeserializer buffer) {
- this.userId = userId;
- this.decoder = decoder;
- this.buffer = buffer;
- setBucketId(new UserDocIdString("foo", userId, "bar"));
- }
-
- /**
- * Constructs a new message from a byte buffer.
- * @param decoder The decoder to use for deserialization.
- * @param buffer A byte buffer that contains a serialized message.
- */
- public BatchDocumentUpdateMessage(String group, LazyDecoder decoder, DocumentDeserializer buffer) {
- this.group = group;
- this.decoder = decoder;
- this.buffer = buffer;
- setBucketId(new GroupDocIdString("foo", group, "bar"));
- }
-
- /**
- * Constructs a batch document update message, to contain updates for documents for the given user.
- */
- public BatchDocumentUpdateMessage(long userId) {
- super();
- this.userId = userId;
- setBucketId(new UserDocIdString("foo", userId, "bar"));
- }
-
- /**
- * Constructs a batch document update message, to contain updates for documents for the given user.
- */
- public BatchDocumentUpdateMessage(String group) {
- super();
- this.group = group;
- setBucketId(new GroupDocIdString("foo", group, "bar"));
- }
-
- void setBucketId(IdString id) {
- BucketIdFactory factory = new BucketIdFactory();
- bucketId = factory.getBucketId(new DocumentId(id));
- }
-
- BucketId getBucketId() {
- return bucketId;
- }
-
- /**
- * This method will make sure that any serialized content is deserialized into proper message content on first
- * entry. Any subsequent entry into this function will do nothing.
- */
- private void deserialize() {
- if (decoder != null && buffer != null) {
- decoder.decode(this, buffer);
- decoder = null;
- buffer = null;
- }
- }
-
- /**
- * Returns the list of document updates to perform.
- *
- * @return The updates.
- */
- public List<DocumentUpdate> getUpdates() {
- deserialize();
- return updates;
- }
-
- /**
- * Adds a document update to perform.
- *
- * @param upd The document update to set.
- */
- public void addUpdate(DocumentUpdate upd) {
- buffer = null;
- decoder = null;
-
- verifyUpdate(upd);
- updates.add(upd);
- }
-
- /**
- * Returns the raw serialized buffer. This buffer is stored as the message is received from accross the network, and
- * deserialized from as soon as a member is requested. This method will return null if the buffer has been decoded.
- *
- * @return The buffer containing the serialized data for this message, or null.
- */
- ByteBuffer getSerializedBuffer() {
- return buffer != null ? buffer.getBuf().getByteBuffer() : null;
- }
-
- @Override
- public DocumentReply createReply() {
- return new BatchDocumentUpdateReply();
- }
-
- @Override
- public int getType() {
- return DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE;
- }
-
- void verifyUpdate(DocumentUpdate update) {
- if (update == null) {
- throw new IllegalArgumentException("Document update can not be null.");
- }
-
- IdString idString = update.getId().getScheme();
-
- if (group != null) {
- String idGroup;
-
- if (idString.hasGroup()) {
- idGroup = idString.getGroup();
- } else {
- throw new IllegalArgumentException("Batch update message can only contain groupdoc or orderdoc items");
- }
-
- if (!group.equals(idGroup)) {
- throw new IllegalArgumentException("Batch update message can not contain messages from group " + idGroup + " only group " + group);
- }
- } else {
- long foundUserId = 0;
-
- if (idString.hasNumber()) {
- foundUserId = idString.getNumber();
- } else {
- throw new IllegalArgumentException("Batch update message can only contain userdoc or orderdoc items");
- }
-
- if (userId != foundUserId) {
- throw new IllegalArgumentException("Batch update message can not contain messages from user " + foundUserId + " only user " + userId);
- }
- }
- }
-
-}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateReply.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateReply.java
deleted file mode 100755
index 3e6e3a3429d..00000000000
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/BatchDocumentUpdateReply.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol;
-
-import java.util.ArrayList;
-
-public class BatchDocumentUpdateReply extends WriteDocumentReply {
-
- private ArrayList<Boolean> documentsNotFound = new ArrayList<Boolean>();
-
- /**
- * Constructs a new reply with no content.
- */
- public BatchDocumentUpdateReply() {
- super(DocumentProtocol.REPLY_BATCHDOCUMENTUPDATE);
- }
-
- /**
- * If all documents to update are found, this vector will be empty. If
- * one or more documents are not found, this vector will have the size of
- * the initial number of updates, with entries set to true where the
- * corresponding update was not found.
- *
- * @return Vector containing indices of not found documents, or empty
- * if all documents were found
- */
- public ArrayList<Boolean> getDocumentsNotFound() {
- return documentsNotFound;
- }
-}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
index b765b928869..10a316f7751 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
@@ -66,7 +66,6 @@ public class DocumentProtocol implements Protocol {
public static final int MESSAGE_EMPTYBUCKETS = DOCUMENT_MESSAGE + 23;
public static final int MESSAGE_REMOVELOCATION = DOCUMENT_MESSAGE + 24;
public static final int MESSAGE_QUERYRESULT = DOCUMENT_MESSAGE + 25;
- public static final int MESSAGE_BATCHDOCUMENTUPDATE = DOCUMENT_MESSAGE + 26;
/**
* All reply types that are implemented by this protocol.
@@ -89,7 +88,6 @@ public class DocumentProtocol implements Protocol {
public static final int REPLY_EMPTYBUCKETS = DOCUMENT_REPLY + 23;
public static final int REPLY_REMOVELOCATION = DOCUMENT_REPLY + 24;
public static final int REPLY_QUERYRESULT = DOCUMENT_REPLY + 25;
- public static final int REPLY_BATCHDOCUMENTUPDATE = DOCUMENT_REPLY + 26;
public static final int REPLY_WRONGDISTRIBUTION = DOCUMENT_REPLY + 1000;
public static final int REPLY_DOCUMENTIGNORED = DOCUMENT_REPLY + 1001;
@@ -303,65 +301,50 @@ public class DocumentProtocol implements Protocol {
putRoutingPolicyFactory("SubsetService", new RoutingPolicyFactories.SubsetServicePolicyFactory());
// Prepare version specifications to use when adding routable factories.
- VersionSpecification version50 = new VersionSpecification(5, 0);
- VersionSpecification version51 = new VersionSpecification(5, 1);
VersionSpecification version52 = new VersionSpecification(5, 115);
VersionSpecification version6 = new VersionSpecification(6, 221);
- List<VersionSpecification> from50 = Arrays.asList(version50, version51, version52, version6);
- List<VersionSpecification> from51 = Arrays.asList(version51, version52, version6);
List<VersionSpecification> from52 = Arrays.asList(version52, version6);
List<VersionSpecification> from6 = Collections.singletonList(version6); // TODO decide minor version...
- // 5.0 serialization (keep alphabetized please)
- putRoutableFactory(MESSAGE_BATCHDOCUMENTUPDATE, new RoutableFactories50.BatchDocumentUpdateMessageFactory(), from50);
- putRoutableFactory(MESSAGE_CREATEVISITOR, new RoutableFactories50.CreateVisitorMessageFactory(), from50);
- putRoutableFactory(MESSAGE_DESTROYVISITOR, new RoutableFactories50.DestroyVisitorMessageFactory(), from50);
- putRoutableFactory(MESSAGE_DOCUMENTLIST, new RoutableFactories50.DocumentListMessageFactory(), from50);
- putRoutableFactory(MESSAGE_DOCUMENTSUMMARY, new RoutableFactories50.DocumentSummaryMessageFactory(), from50);
- putRoutableFactory(MESSAGE_EMPTYBUCKETS, new RoutableFactories50.EmptyBucketsMessageFactory(), from50);
- putRoutableFactory(MESSAGE_GETBUCKETLIST, new RoutableFactories50.GetBucketListMessageFactory(), from50);
- putRoutableFactory(MESSAGE_GETBUCKETSTATE, new RoutableFactories50.GetBucketStateMessageFactory(), from50);
- putRoutableFactory(MESSAGE_GETDOCUMENT, new RoutableFactories50.GetDocumentMessageFactory(), from50);
- putRoutableFactory(MESSAGE_MAPVISITOR, new RoutableFactories50.MapVisitorMessageFactory(), from50);
- putRoutableFactory(MESSAGE_PUTDOCUMENT, new RoutableFactories50.PutDocumentMessageFactory(), from50);
- putRoutableFactory(MESSAGE_QUERYRESULT, new RoutableFactories50.QueryResultMessageFactory(), from50);
- putRoutableFactory(MESSAGE_REMOVEDOCUMENT, new RoutableFactories50.RemoveDocumentMessageFactory(), from50);
- putRoutableFactory(MESSAGE_REMOVELOCATION, new RoutableFactories50.RemoveLocationMessageFactory(), from50);
- putRoutableFactory(MESSAGE_SEARCHRESULT, new RoutableFactories50.SearchResultMessageFactory(), from50);
- putRoutableFactory(MESSAGE_STATBUCKET, new RoutableFactories50.StatBucketMessageFactory(), from50);
- putRoutableFactory(MESSAGE_UPDATEDOCUMENT, new RoutableFactories50.UpdateDocumentMessageFactory(), from50);
- putRoutableFactory(MESSAGE_VISITORINFO, new RoutableFactories50.VisitorInfoMessageFactory(), from50);
- putRoutableFactory(REPLY_BATCHDOCUMENTUPDATE, new RoutableFactories50.BatchDocumentUpdateReplyFactory(), from50);
- putRoutableFactory(REPLY_CREATEVISITOR, new RoutableFactories50.CreateVisitorReplyFactory(), from50);
- putRoutableFactory(REPLY_DESTROYVISITOR, new RoutableFactories50.DestroyVisitorReplyFactory(), from50);
- putRoutableFactory(REPLY_DOCUMENTLIST, new RoutableFactories50.DocumentListReplyFactory(), from50);
- putRoutableFactory(REPLY_DOCUMENTSUMMARY, new RoutableFactories50.DocumentSummaryReplyFactory(), from50);
- putRoutableFactory(REPLY_EMPTYBUCKETS, new RoutableFactories50.EmptyBucketsReplyFactory(), from50);
- putRoutableFactory(REPLY_GETBUCKETLIST, new RoutableFactories50.GetBucketListReplyFactory(), from50);
- putRoutableFactory(REPLY_GETBUCKETSTATE, new RoutableFactories50.GetBucketStateReplyFactory(), from50);
- putRoutableFactory(REPLY_GETDOCUMENT, new RoutableFactories50.GetDocumentReplyFactory(), from50);
- putRoutableFactory(REPLY_MAPVISITOR, new RoutableFactories50.MapVisitorReplyFactory(), from50);
- putRoutableFactory(REPLY_PUTDOCUMENT, new RoutableFactories50.PutDocumentReplyFactory(), from50);
- putRoutableFactory(REPLY_QUERYRESULT, new RoutableFactories50.QueryResultReplyFactory(), from50);
- putRoutableFactory(REPLY_REMOVEDOCUMENT, new RoutableFactories50.RemoveDocumentReplyFactory(), from50);
- putRoutableFactory(REPLY_REMOVELOCATION, new RoutableFactories50.RemoveLocationReplyFactory(), from50);
- putRoutableFactory(REPLY_SEARCHRESULT, new RoutableFactories50.SearchResultReplyFactory(), from50);
- putRoutableFactory(REPLY_STATBUCKET, new RoutableFactories50.StatBucketReplyFactory(), from50);
- putRoutableFactory(REPLY_UPDATEDOCUMENT, new RoutableFactories50.UpdateDocumentReplyFactory(), from50);
- putRoutableFactory(REPLY_UPDATEDOCUMENT, new RoutableFactories50.UpdateDocumentReplyFactory(), from50);
- putRoutableFactory(REPLY_VISITORINFO, new RoutableFactories50.VisitorInfoReplyFactory(), from50);
- putRoutableFactory(REPLY_WRONGDISTRIBUTION, new RoutableFactories50.WrongDistributionReplyFactory(), from50);
-
- // 5.1 serialization
- putRoutableFactory(MESSAGE_CREATEVISITOR, new RoutableFactories51.CreateVisitorMessageFactory(), from51);
- putRoutableFactory(MESSAGE_GETDOCUMENT, new RoutableFactories51.GetDocumentMessageFactory(), from51);
- putRoutableFactory(REPLY_DOCUMENTIGNORED, new RoutableFactories51.DocumentIgnoredReplyFactory(), from51);
-
- // 5.2 serialization
+ // 5.2 serialization (keep alphabetized please)
+ putRoutableFactory(MESSAGE_CREATEVISITOR, new RoutableFactories52.CreateVisitorMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_DESTROYVISITOR, new RoutableFactories52.DestroyVisitorMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_DOCUMENTLIST, new RoutableFactories52.DocumentListMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_DOCUMENTSUMMARY, new RoutableFactories52.DocumentSummaryMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_EMPTYBUCKETS, new RoutableFactories52.EmptyBucketsMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_GETBUCKETLIST, new RoutableFactories52.GetBucketListMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_GETBUCKETSTATE, new RoutableFactories52.GetBucketStateMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_GETDOCUMENT, new RoutableFactories52.GetDocumentMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_MAPVISITOR, new RoutableFactories52.MapVisitorMessageFactory(), from52);
putRoutableFactory(MESSAGE_PUTDOCUMENT, new RoutableFactories52.PutDocumentMessageFactory(), from52);
- putRoutableFactory(MESSAGE_UPDATEDOCUMENT, new RoutableFactories52.UpdateDocumentMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_QUERYRESULT, new RoutableFactories52.QueryResultMessageFactory(), from52);
putRoutableFactory(MESSAGE_REMOVEDOCUMENT, new RoutableFactories52.RemoveDocumentMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_REMOVELOCATION, new RoutableFactories52.RemoveLocationMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_SEARCHRESULT, new RoutableFactories52.SearchResultMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_STATBUCKET, new RoutableFactories52.StatBucketMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_UPDATEDOCUMENT, new RoutableFactories52.UpdateDocumentMessageFactory(), from52);
+ putRoutableFactory(MESSAGE_VISITORINFO, new RoutableFactories52.VisitorInfoMessageFactory(), from52);
+ putRoutableFactory(REPLY_CREATEVISITOR, new RoutableFactories52.CreateVisitorReplyFactory(), from52);
+ putRoutableFactory(REPLY_DESTROYVISITOR, new RoutableFactories52.DestroyVisitorReplyFactory(), from52);
+ putRoutableFactory(REPLY_DOCUMENTIGNORED, new RoutableFactories52.DocumentIgnoredReplyFactory(), from52);
+ putRoutableFactory(REPLY_DOCUMENTLIST, new RoutableFactories52.DocumentListReplyFactory(), from52);
+ putRoutableFactory(REPLY_DOCUMENTSUMMARY, new RoutableFactories52.DocumentSummaryReplyFactory(), from52);
+ putRoutableFactory(REPLY_EMPTYBUCKETS, new RoutableFactories52.EmptyBucketsReplyFactory(), from52);
+ putRoutableFactory(REPLY_GETBUCKETLIST, new RoutableFactories52.GetBucketListReplyFactory(), from52);
+ putRoutableFactory(REPLY_GETBUCKETSTATE, new RoutableFactories52.GetBucketStateReplyFactory(), from52);
+ putRoutableFactory(REPLY_GETDOCUMENT, new RoutableFactories52.GetDocumentReplyFactory(), from52);
+ putRoutableFactory(REPLY_MAPVISITOR, new RoutableFactories52.MapVisitorReplyFactory(), from52);
+ putRoutableFactory(REPLY_PUTDOCUMENT, new RoutableFactories52.PutDocumentReplyFactory(), from52);
+ putRoutableFactory(REPLY_QUERYRESULT, new RoutableFactories52.QueryResultReplyFactory(), from52);
+ putRoutableFactory(REPLY_REMOVEDOCUMENT, new RoutableFactories52.RemoveDocumentReplyFactory(), from52);
+ putRoutableFactory(REPLY_REMOVELOCATION, new RoutableFactories52.RemoveLocationReplyFactory(), from52);
+ putRoutableFactory(REPLY_SEARCHRESULT, new RoutableFactories52.SearchResultReplyFactory(), from52);
+ putRoutableFactory(REPLY_STATBUCKET, new RoutableFactories52.StatBucketReplyFactory(), from52);
+ putRoutableFactory(REPLY_UPDATEDOCUMENT, new RoutableFactories52.UpdateDocumentReplyFactory(), from52);
+ putRoutableFactory(REPLY_UPDATEDOCUMENT, new RoutableFactories52.UpdateDocumentReplyFactory(), from52);
+ putRoutableFactory(REPLY_VISITORINFO, new RoutableFactories52.VisitorInfoReplyFactory(), from52);
+ putRoutableFactory(REPLY_WRONGDISTRIBUTION, new RoutableFactories52.WrongDistributionReplyFactory(), from52);
// 6.x serialization
putRoutableFactory(MESSAGE_CREATEVISITOR, new RoutableFactories60.CreateVisitorMessageFactory(), from6);
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
index e48026ae7d7..dbf4a6cc593 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
@@ -154,15 +154,6 @@ public class DocumentRouteSelectorPolicy
}
}
- case DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE:
- BatchDocumentUpdateMessage bdu = (BatchDocumentUpdateMessage)msg;
- for (int i = 0; i < bdu.getUpdates().size(); i++) {
- if (selector.accepts(bdu.getUpdates().get(i)) == Result.FALSE) {
- return false;
- }
- }
- return true;
-
default:
return true;
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
index 5a68e5bda2a..051ec44dd07 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ExternPolicy.java
@@ -13,6 +13,7 @@ import com.yahoo.messagebus.routing.RoutingContext;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* This policy implements the necessary logic to communicate with an external Vespa application and resolve its list of
@@ -30,6 +31,7 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy {
private int offset = 0;
private int generation = 0;
private final List<Hop> recipients = new ArrayList<>();
+ private final AtomicBoolean destroyed = new AtomicBoolean(false);
/**
* Constructs a new instance of this policy. The argument given is the connection spec to the slobrok to use for
@@ -110,13 +112,6 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy {
}
@Override
- @SuppressWarnings("deprecation") // finalize() is deprecated from Java 9
- public void finalize() throws Throwable {
- super.finalize();
- mirror.shutdown();
- orb.transport().shutdown().join();
- }
-
public void select(RoutingContext ctx) {
if (error != null) {
ctx.setError(DocumentProtocol.ERROR_POLICY_FAILURE, error);
@@ -135,13 +130,19 @@ public class ExternPolicy implements DocumentProtocolRoutingPolicy {
}
}
+ @Override
public void merge(RoutingContext ctx) {
DocumentProtocol.merge(ctx);
}
+ @Override
public void destroy() {
+ if (destroyed.getAndSet(true)) throw new RuntimeException("Already destroyed");
+ mirror.shutdown();
+ orb.transport().shutdown().join();
}
+ @Override
public MetricSet getMetrics() {
return null;
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories50.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories50.java
deleted file mode 100755
index dfc87b77474..00000000000
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories50.java
+++ /dev/null
@@ -1,997 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol;
-
-import com.yahoo.document.*;
-import com.yahoo.document.serialization.DocumentDeserializer;
-import com.yahoo.document.serialization.DocumentSerializer;
-import com.yahoo.document.serialization.DocumentSerializerFactory;
-import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet;
-import com.yahoo.log.LogLevel;
-import com.yahoo.messagebus.Routable;
-import com.yahoo.vdslib.DocumentList;
-import com.yahoo.vdslib.DocumentSummary;
-import com.yahoo.vdslib.SearchResult;
-import com.yahoo.vdslib.VisitorStatistics;
-import com.yahoo.vespa.objects.Deserializer;
-import com.yahoo.vespa.objects.Serializer;
-
-import java.util.Map;
-import java.util.logging.Logger;
-
-
-/**
- * This class encapsulates all the {@link RoutableFactory} classes needed to implement serialization for the document
- * protocol. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
- */
-public abstract class RoutableFactories50 {
-
- /**
- * Implements the shared factory logic required for {@link DocumentMessage} objects, and it offers a more convenient
- * interface for implementing {@link RoutableFactory}.
- *
- * @author Simon Thoresen Hult
- */
- public static abstract class DocumentMessageFactory extends AbstractRoutableFactory {
-
- /**
- * This method encodes the given message using the given serializer. You are guaranteed to only receive messages
- * of the type that this factory was registered for.
- * <p>
- * This method is NOT exception safe. Return false to
- * signal failure.
- *
- * @param msg The message to encode.
- * @param serializer The serializer to use for encoding.
- * @return True if the message was encoded.
- */
- protected abstract boolean doEncode(DocumentMessage msg, DocumentSerializer serializer);
-
- /**
- * This method decodes a message from the given deserializer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentMessage, DocumentSerializer)}.
- * <p>
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param deserializer The deserializer to use for decoding.
- * @return The decoded message.
- */
- protected abstract DocumentMessage doDecode(DocumentDeserializer deserializer);
-
- public boolean encode(Routable obj, DocumentSerializer out) {
- if (!(obj instanceof DocumentMessage)) {
- throw new AssertionError(
- "Document message factory (" + getClass().getName() + ") registered for incompatible " +
- "routable type " + obj.getType() + "(" + obj.getClass().getName() + ").");
- }
- DocumentMessage msg = (DocumentMessage)obj;
- out.putByte(null, (byte)(msg.getPriority().getValue()));
- out.putInt(null, msg.getLoadType().getId());
- return doEncode(msg, out);
- }
-
- public Routable decode(DocumentDeserializer in, LoadTypeSet loadTypes) {
- byte pri = in.getByte(null);
- int loadType = in.getInt(null);
- DocumentMessage msg = doDecode(in);
- if (msg != null) {
- msg.setPriority(DocumentProtocol.getPriority(pri));
- msg.setLoadType(loadTypes.getIdMap().get(loadType));
- }
- return msg;
- }
- }
-
- /**
- * Implements the shared factory logic required for {@link DocumentReply} objects, and it offers a more convenient
- * interface for implementing {@link RoutableFactory}.
- *
- * @author Simon Thoresen Hult
- */
- public static abstract class DocumentReplyFactory extends AbstractRoutableFactory {
-
- /**
- * This method encodes the given reply into the given byte buffer. You are guaranteed to only receive replies of
- * the type that this factory was registered for.
- * <p>
- * This method is NOT exception safe. Return false to signal
- * failure.
- *
- * @param reply The reply to encode.
- * @param buf The byte buffer to write to.
- * @return True if the message was encoded.
- */
- protected abstract boolean doEncode(DocumentReply reply, DocumentSerializer buf);
-
- /**
- * This method decodes a reply from the given byte buffer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentReply, com.yahoo.document.serialization.DocumentSerializer)}.
- *
- * <p>
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param buf The byte buffer to read from.
- * @return The decoded reply.
- */
- protected abstract DocumentReply doDecode(DocumentDeserializer buf);
-
- public boolean encode(Routable obj, DocumentSerializer out) {
- if (!(obj instanceof DocumentReply)) {
- throw new AssertionError(
- "Document reply factory (" + getClass().getName() + ") registered for incompatible " +
- "routable type " + obj.getType() + "(" + obj.getClass().getName() + ").");
- }
- DocumentReply reply = (DocumentReply)obj;
- out.putByte(null, (byte)(reply.getPriority().getValue()));
- return doEncode(reply, out);
- }
-
- public Routable decode(DocumentDeserializer in, LoadTypeSet loadTypes) {
- byte pri = in.getByte(null);
- DocumentReply reply = doDecode(in);
- if (reply != null) {
- reply.setPriority(DocumentProtocol.getPriority(pri));
- }
- return reply;
- }
- }
-
- public static class CreateVisitorMessageFactory extends DocumentMessageFactory {
-
- @Override
- @SuppressWarnings("deprecation")
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- CreateVisitorMessage msg = new CreateVisitorMessage();
- msg.setLibraryName(decodeString(buf));
- msg.setInstanceId(decodeString(buf));
- msg.setControlDestination(decodeString(buf));
- msg.setDataDestination(decodeString(buf));
- msg.setDocumentSelection(decodeString(buf));
- msg.setMaxPendingReplyCount(buf.getInt(null));
-
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- long reversed = buf.getLong(null);
- long rawid = ((reversed >>> 56) & 0x00000000000000FFl) | ((reversed >>> 40) & 0x000000000000FF00l) |
- ((reversed >>> 24) & 0x0000000000FF0000l) | ((reversed >>> 8) & 0x00000000FF000000l) |
- ((reversed << 8) & 0x000000FF00000000l) | ((reversed << 24) & 0x0000FF0000000000l) |
- ((reversed << 40) & 0x00FF000000000000l) | ((reversed << 56) & 0xFF00000000000000l);
- msg.getBuckets().add(new BucketId(rawid));
- }
-
- msg.setFromTimestamp(buf.getLong(null));
- msg.setToTimestamp(buf.getLong(null));
- msg.setVisitRemoves(buf.getByte(null) == (byte)1);
- buf.getByte(null); // removed feature "visitHeadersOnly"
- msg.setVisitInconsistentBuckets(buf.getByte(null) == (byte)1);
-
- size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- String key = decodeString(buf);
- int sz = buf.getInt(null);
- msg.getParameters().put(key, buf.getBytes(null, sz));
- }
-
- msg.setVisitorOrdering(buf.getInt(null));
- msg.setMaxBucketsPerVisitor(buf.getInt(null));
- msg.setVisitorDispatcherVersion(50);
- return msg;
- }
-
- @Override
- @SuppressWarnings("deprecation")
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- CreateVisitorMessage msg = (CreateVisitorMessage)obj;
- encodeString(msg.getLibraryName(), buf);
- encodeString(msg.getInstanceId(), buf);
- encodeString(msg.getControlDestination(), buf);
- encodeString(msg.getDataDestination(), buf);
- encodeString(msg.getDocumentSelection(), buf);
- buf.putInt(null, msg.getMaxPendingReplyCount());
-
- buf.putInt(null, msg.getBuckets().size());
- for (BucketId id : msg.getBuckets()) {
- long rawid = id.getRawId();
- long reversed = ((rawid >>> 56) & 0x00000000000000FFl) | ((rawid >>> 40) & 0x000000000000FF00l) |
- ((rawid >>> 24) & 0x0000000000FF0000l) | ((rawid >>> 8) & 0x00000000FF000000l) |
- ((rawid << 8) & 0x000000FF00000000l) | ((rawid << 24) & 0x0000FF0000000000l) |
- ((rawid << 40) & 0x00FF000000000000l) | ((rawid << 56) & 0xFF00000000000000l);
- buf.putLong(null, reversed);
- }
-
- buf.putLong(null, msg.getFromTimestamp());
- buf.putLong(null, msg.getToTimestamp());
- buf.putByte(null, msg.getVisitRemoves() ? (byte)1 : (byte)0);
- buf.putByte(null, (byte)0); // removed feature "visitHeadersOnly"
- buf.putByte(null, msg.getVisitInconsistentBuckets() ? (byte)1 : (byte)0);
-
- buf.putInt(null, msg.getParameters().size());
- for (Map.Entry<String, byte[]> pairs : msg.getParameters().entrySet()) {
- encodeString(pairs.getKey(), buf);
- byte[] b = pairs.getValue();
- buf.putInt(null, b.length);
- buf.put(null, b);
- }
-
- buf.putInt(null, msg.getVisitorOrdering());
- buf.putInt(null, msg.getMaxBucketsPerVisitor());
- return true;
- }
- }
-
- public static class CreateVisitorReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- CreateVisitorReply reply = new CreateVisitorReply(DocumentProtocol.REPLY_CREATEVISITOR);
- reply.setLastBucket(new BucketId(buf.getLong(null)));
-
- VisitorStatistics vs = new VisitorStatistics();
- vs.setBucketsVisited(buf.getInt(null));
- vs.setDocumentsVisited(buf.getLong(null));
- vs.setBytesVisited(buf.getLong(null));
- vs.setDocumentsReturned(buf.getLong(null));
- vs.setBytesReturned(buf.getLong(null));
- vs.setSecondPassDocumentsReturned(buf.getLong(null));
- vs.setSecondPassBytesReturned(buf.getLong(null));
- reply.setVisitorStatistics(vs);
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- CreateVisitorReply reply = (CreateVisitorReply)obj;
- buf.putLong(null, reply.getLastBucket().getRawId());
- buf.putInt(null, reply.getVisitorStatistics().getBucketsVisited());
- buf.putLong(null, reply.getVisitorStatistics().getDocumentsVisited());
- buf.putLong(null, reply.getVisitorStatistics().getBytesVisited());
- buf.putLong(null, reply.getVisitorStatistics().getDocumentsReturned());
- buf.putLong(null, reply.getVisitorStatistics().getBytesReturned());
- buf.putLong(null, reply.getVisitorStatistics().getSecondPassDocumentsReturned());
- buf.putLong(null, reply.getVisitorStatistics().getSecondPassBytesReturned());
- return true;
- }
- }
-
- public static class DestroyVisitorMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- DestroyVisitorMessage msg = new DestroyVisitorMessage();
- msg.setInstanceId(decodeString(buf));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- DestroyVisitorMessage msg = (DestroyVisitorMessage)obj;
- encodeString(msg.getInstanceId(), buf);
- return true;
- }
- }
-
- public static class DestroyVisitorReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_DESTROYVISITOR);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class DocumentListMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- DocumentListMessage msg = new DocumentListMessage();
- msg.setBucketId(new BucketId(buf.getLong(null)));
- int len = buf.getInt(null);
- for (int i = 0; i < len; i++) {
- msg.getDocuments().add(new DocumentListEntry(buf));
- }
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- DocumentListMessage msg = (DocumentListMessage)obj;
- buf.putLong(null, msg.getBucketId().getRawId());
- buf.putInt(null, msg.getDocuments().size());
-
- for (int i = 0; i < msg.getDocuments().size(); i++) {
- msg.getDocuments().get(i).serialize(buf);
- }
- return true;
- }
- }
-
- public static class DocumentListReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_DOCUMENTLIST);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class DocumentSummaryMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- DocumentSummaryMessage msg = new DocumentSummaryMessage();
- msg.setDocumentSummary(new DocumentSummary(buf));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- return false; // not supported
- }
- }
-
- public static class DocumentSummaryReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_DOCUMENTSUMMARY);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class EmptyBucketsMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- EmptyBucketsMessage msg = new EmptyBucketsMessage();
- int size = buf.getInt(null);
- for (int i = 0; i < size; ++i) {
- msg.getBucketIds().add(new BucketId(buf.getLong(null)));
- }
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- EmptyBucketsMessage msg = (EmptyBucketsMessage)obj;
- buf.putInt(null, msg.getBucketIds().size());
- for (BucketId bid : msg.getBucketIds()) {
- buf.putLong(null, bid.getRawId());
- }
- return true;
- }
- }
-
- public static class EmptyBucketsReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_EMPTYBUCKETS);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class GetBucketListMessageFactory extends DocumentMessageFactory {
-
- protected String decodeBucketSpace(Deserializer deserializer) {
- return FixedBucketSpaces.defaultSpace();
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- GetBucketListMessage msg = new GetBucketListMessage();
- msg.setBucketId(new BucketId(buf.getLong(null)));
- msg.setBucketSpace(decodeBucketSpace(buf));
- return msg;
- }
-
- protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
- return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- GetBucketListMessage msg = (GetBucketListMessage)obj;
- buf.putLong(null, msg.getBucketId().getRawId());
- return encodeBucketSpace(msg.getBucketSpace(), buf);
- }
- }
-
- public static class GetBucketListReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- GetBucketListReply reply = new GetBucketListReply();
- int len = buf.getInt(null);
- for (int i = 0; i < len; i++) {
- GetBucketListReply.BucketInfo info = new GetBucketListReply.BucketInfo();
- info.bucket = new BucketId(buf.getLong(null));
- info.bucketInformation = decodeString(buf);
- reply.getBuckets().add(info);
- }
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- GetBucketListReply reply = (GetBucketListReply)obj;
- buf.putInt(null, reply.getBuckets().size());
- for (GetBucketListReply.BucketInfo info : reply.getBuckets()) {
- buf.putLong(null, info.bucket.getRawId());
- encodeString(info.bucketInformation, buf);
- }
- return true;
- }
- }
-
- public static class GetBucketStateMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- GetBucketStateMessage msg = new GetBucketStateMessage();
- msg.setBucketId(new BucketId(buf.getLong(null)));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- GetBucketStateMessage msg = (GetBucketStateMessage)obj;
- buf.putLong(null, msg.getBucketId().getRawId());
- return true;
- }
- }
-
- public static class GetBucketStateReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- GetBucketStateReply reply = new GetBucketStateReply();
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- reply.getBucketState().add(new DocumentState(buf));
- }
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- GetBucketStateReply reply = (GetBucketStateReply)obj;
- buf.putInt(null, reply.getBucketState().size());
- for (DocumentState stat : reply.getBucketState()) {
- stat.serialize(buf);
- }
- return true;
- }
- }
-
- public static class GetDocumentMessageFactory extends DocumentMessageFactory {
-
- @Override
- @SuppressWarnings("deprecation")
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- GetDocumentMessage msg = new GetDocumentMessage();
- msg.setDocumentId(new DocumentId(buf));
- buf.getInt(null); // removed feature "flags"; ignore
- return msg;
- }
-
- @Override
- @SuppressWarnings("deprecation")
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- GetDocumentMessage msg = (GetDocumentMessage)obj;
- msg.getDocumentId().serialize(buf);
- buf.putInt(null, 0); // removed feature "flags"
- return true;
- }
- }
-
- public static class GetDocumentReplyFactory extends DocumentReplyFactory {
-
- private final LazyDecoder decoder = new LazyDecoder() {
-
- public void decode(Routable obj, DocumentDeserializer buf) {
- GetDocumentReply reply = (GetDocumentReply)obj;
-
- Document doc = null;
- byte flag = buf.getByte(null);
- if (flag != 0) {
- doc = Document.createDocument(buf);
- reply.setDocument(doc);
- }
- long lastModified = buf.getLong(null);
- reply.setLastModified(lastModified);
- if (doc != null) {
- doc.setLastModified(lastModified);
- }
- }
- };
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- GetDocumentReply reply = new GetDocumentReply(decoder, buf);
-
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- GetDocumentReply reply = (GetDocumentReply)obj;
- if (reply.getSerializedBuffer() != null) {
- buf.put(null, reply.getSerializedBuffer());
- } else {
- Document document = reply.getDocument();
- buf.putByte(null, (byte)(document == null ? 0 : 1));
- if (document != null) {
- document.serialize(buf);
- }
- buf.putLong(null, reply.getLastModified());
- }
- return true;
- }
- }
-
- public static class MapVisitorMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- MapVisitorMessage msg = new MapVisitorMessage();
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- String key = decodeString(buf);
- String value = decodeString(buf);
- msg.getData().put(key, value);
- }
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- MapVisitorMessage msg = (MapVisitorMessage)obj;
- buf.putInt(null, msg.getData().size());
- for (Map.Entry<String, String> pairs : msg.getData().entrySet()) {
- encodeString(pairs.getKey(), buf);
- encodeString(pairs.getValue(), buf);
- }
- return true;
- }
- }
-
- public static class MapVisitorReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_MAPVISITOR);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class BatchDocumentUpdateMessageFactory extends DocumentMessageFactory {
-
- private final LazyDecoder decoder = new LazyDecoder() {
-
- public void decode(Routable obj, DocumentDeserializer buf) {
- BatchDocumentUpdateMessage msg = (BatchDocumentUpdateMessage)obj;
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- msg.addUpdate(new DocumentUpdate(buf));
- }
- }
- };
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- long userId = buf.getLong(null);
- String group = decodeString(buf);
-
- if (group.length() > 0) {
- return new BatchDocumentUpdateMessage(group, decoder, buf);
- } else {
- return new BatchDocumentUpdateMessage(userId, decoder, buf);
- }
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- BatchDocumentUpdateMessage msg = (BatchDocumentUpdateMessage)obj;
-
- if (msg.getSerializedBuffer() != null) {
- buf.put(null, msg.getSerializedBuffer());
- } else {
- if (msg.getUserId() != null) {
- buf.putLong(null, msg.getUserId());
- } else {
- buf.putLong(null, 0);
- }
-
- if (msg.getGroup() != null) {
- encodeString(msg.getGroup(), buf);
- } else {
- encodeString("", buf);
- }
-
- buf.putInt(null, msg.getUpdates().size());
- for (int i = 0; i < msg.getUpdates().size(); i++) {
- msg.getUpdates().get(i).serialize(buf);
- }
- }
-
- return true;
- }
- }
-
- public static class BatchDocumentUpdateReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- BatchDocumentUpdateReply rep = new BatchDocumentUpdateReply();
- rep.setHighestModificationTimestamp(buf.getLong(null));
- int size = buf.getInt(null);
- rep.getDocumentsNotFound().ensureCapacity(size);
- for (int i = 0; i < size; ++i) {
- rep.getDocumentsNotFound().add(buf.getByte(null) == 1);
- }
- return rep;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- BatchDocumentUpdateReply rep = (BatchDocumentUpdateReply)obj;
- buf.putLong(null, rep.getHighestModificationTimestamp());
- buf.putInt(null, rep.getDocumentsNotFound().size());
- for (int i = 0; i < rep.getDocumentsNotFound().size(); ++i) {
- buf.putByte(null, (byte)(rep.getDocumentsNotFound().get(i) ? 1 : 0));
- }
- return true;
- }
- }
-
- public static class PutDocumentMessageFactory extends DocumentMessageFactory {
- protected void decodeInto(PutDocumentMessage msg, DocumentDeserializer buf) {
- msg.setDocumentPut(new DocumentPut(Document.createDocument(buf)));
- msg.setTimestamp(buf.getLong(null));
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buffer) {
- final LazyDecoder decoder = (obj, buf) -> {
- decodeInto((PutDocumentMessage) obj, buf);
- };
-
- return new PutDocumentMessage(decoder, buffer);
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- PutDocumentMessage msg = (PutDocumentMessage)obj;
- if (msg.getSerializedBuffer() != null) {
- buf.put(null, msg.getSerializedBuffer());
- } else {
- msg.getDocumentPut().getDocument().serialize(buf);
- buf.putLong(null, msg.getTimestamp());
- }
- return true;
- }
- }
-
- public static class PutDocumentReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- WriteDocumentReply rep = new WriteDocumentReply(DocumentProtocol.REPLY_PUTDOCUMENT);
- rep.setHighestModificationTimestamp(buf.getLong(null));
- return rep;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- WriteDocumentReply rep = (WriteDocumentReply)obj;
- buf.putLong(null, rep.getHighestModificationTimestamp());
- return true;
- }
- }
-
- public static class RemoveDocumentMessageFactory extends DocumentMessageFactory {
- protected void decodeInto(RemoveDocumentMessage msg, DocumentDeserializer buf) {
- msg.setDocumentId(new DocumentId(buf));
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- RemoveDocumentMessage msg = new RemoveDocumentMessage();
- decodeInto(msg, buf);
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- RemoveDocumentMessage msg = (RemoveDocumentMessage)obj;
- msg.getDocumentId().serialize(buf);
- return true;
- }
- }
-
- public static class RemoveDocumentReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- RemoveDocumentReply reply = new RemoveDocumentReply();
- byte flag = buf.getByte(null);
- reply.setWasFound(flag != 0);
- reply.setHighestModificationTimestamp(buf.getLong(null));
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- RemoveDocumentReply reply = (RemoveDocumentReply)obj;
- buf.putByte(null, (byte)(reply.wasFound() ? 1 : 0));
- buf.putLong(null, reply.getHighestModificationTimestamp());
- return true;
- }
- }
-
- public static class RemoveLocationMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- return new RemoveLocationMessage(decodeString(buf));
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- RemoveLocationMessage msg = (RemoveLocationMessage)obj;
- encodeString(msg.getDocumentSelection(), buf);
- return true;
- }
- }
-
- public static class RemoveLocationReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new DocumentReply(DocumentProtocol.REPLY_REMOVELOCATION);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class SearchResultMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- SearchResultMessage msg = new SearchResultMessage();
- msg.setSearchResult(new SearchResult(buf));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- return false; // not supported
- }
- }
-
- public static class QueryResultMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- QueryResultMessage msg = new QueryResultMessage();
- msg.setSearchResult(new SearchResult(buf));
- msg.setSummary(new DocumentSummary(buf));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- return false; // not supported
- }
- }
-
- public static class SearchResultReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_SEARCHRESULT);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class QueryResultReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_QUERYRESULT);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class StatBucketMessageFactory extends DocumentMessageFactory {
-
- protected String decodeBucketSpace(Deserializer deserializer) {
- return FixedBucketSpaces.defaultSpace();
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- StatBucketMessage msg = new StatBucketMessage();
- msg.setBucketId(new BucketId(buf.getLong(null)));
- msg.setDocumentSelection(decodeString(buf));
- msg.setBucketSpace(decodeBucketSpace(buf));
- return msg;
- }
-
- protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
- return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- StatBucketMessage msg = (StatBucketMessage)obj;
- buf.putLong(null, msg.getBucketId().getRawId());
- encodeString(msg.getDocumentSelection(), buf);
- return encodeBucketSpace(msg.getBucketSpace(), buf);
- }
- }
-
- public static class StatBucketReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- StatBucketReply reply = new StatBucketReply();
- reply.setResults(decodeString(buf));
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- StatBucketReply reply = (StatBucketReply)obj;
- encodeString(reply.getResults(), buf);
- return true;
- }
- }
-
- public static class UpdateDocumentMessageFactory extends DocumentMessageFactory {
- protected void decodeInto(UpdateDocumentMessage msg, DocumentDeserializer buf) {
- msg.setDocumentUpdate(new DocumentUpdate(buf));
- msg.setOldTimestamp(buf.getLong(null));
- msg.setNewTimestamp(buf.getLong(null));
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buffer) {
- final LazyDecoder decoder = (obj, buf) -> {
- decodeInto((UpdateDocumentMessage) obj, buf);
- };
-
- return new UpdateDocumentMessage(decoder, buffer);
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- UpdateDocumentMessage msg = (UpdateDocumentMessage)obj;
- if (msg.getSerializedBuffer() != null) {
- buf.put(null, msg.getSerializedBuffer());
- } else {
- msg.getDocumentUpdate().serialize(buf);
- buf.putLong(null, msg.getOldTimestamp());
- buf.putLong(null, msg.getNewTimestamp());
- }
- return true;
- }
- }
-
- public static class UpdateDocumentReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- UpdateDocumentReply rep = new UpdateDocumentReply();
- byte flag = buf.getByte(null);
- rep.setWasFound(flag != 0);
- rep.setHighestModificationTimestamp(buf.getLong(null));
- return rep;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- UpdateDocumentReply rep = (UpdateDocumentReply)obj;
- buf.putByte(null, (byte)(rep.wasFound() ? 1 : 0));
- buf.putLong(null, rep.getHighestModificationTimestamp());
- return true;
- }
- }
-
- public static class VisitorInfoMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- VisitorInfoMessage msg = new VisitorInfoMessage();
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- long reversed = buf.getLong(null);
- long rawid = ((reversed >>> 56) & 0x00000000000000FFl) | ((reversed >>> 40) & 0x000000000000FF00l) |
- ((reversed >>> 24) & 0x0000000000FF0000l) | ((reversed >>> 8) & 0x00000000FF000000l) |
- ((reversed << 8) & 0x000000FF00000000l) | ((reversed << 24) & 0x0000FF0000000000l) |
- ((reversed << 40) & 0x00FF000000000000l) | ((reversed << 56) & 0xFF00000000000000l);
- msg.getFinishedBuckets().add(new BucketId(rawid));
- }
-
- msg.setErrorMessage(decodeString(buf));
- return msg;
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- VisitorInfoMessage msg = (VisitorInfoMessage)obj;
- buf.putInt(null, msg.getFinishedBuckets().size());
- for (BucketId id : msg.getFinishedBuckets()) {
- long rawid = id.getRawId();
- long reversed = ((rawid >>> 56) & 0x00000000000000FFl) | ((rawid >>> 40) & 0x000000000000FF00l) |
- ((rawid >>> 24) & 0x0000000000FF0000l) | ((rawid >>> 8) & 0x00000000FF000000l) |
- ((rawid << 8) & 0x000000FF00000000l) | ((rawid << 24) & 0x0000FF0000000000l) |
- ((rawid << 40) & 0x00FF000000000000l) | ((rawid << 56) & 0xFF00000000000000l);
- buf.putLong(null, reversed);
- }
- encodeString(msg.getErrorMessage(), buf);
- return true;
- }
- }
-
- public static class VisitorInfoReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new VisitorReply(DocumentProtocol.REPLY_VISITORINFO);
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-
- public static class WrongDistributionReplyFactory extends DocumentReplyFactory {
-
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- WrongDistributionReply reply = new WrongDistributionReply();
- reply.setSystemState(decodeString(buf));
- return reply;
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- WrongDistributionReply reply = (WrongDistributionReply)obj;
- encodeString(reply.getSystemState(), buf);
- return true;
- }
- }
-
-}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java
deleted file mode 100755
index 0ef5835008a..00000000000
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories51.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol;
-
-import com.yahoo.document.BucketId;
-import com.yahoo.document.DocumentId;
-import com.yahoo.document.FixedBucketSpaces;
-import com.yahoo.document.serialization.DocumentDeserializer;
-import com.yahoo.document.serialization.DocumentSerializer;
-import com.yahoo.vespa.objects.Deserializer;
-
-import java.util.Map;
-
-/**
- * This class encapsulates all the {@link RoutableFactory} classes needed to implement serialization for the document
- * protocol. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
- *
- */
-public abstract class RoutableFactories51 extends RoutableFactories50 {
-
- public static class CreateVisitorMessageFactory extends DocumentMessageFactory {
-
- protected String decodeBucketSpace(Deserializer deserializer) {
- return FixedBucketSpaces.defaultSpace();
- }
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- CreateVisitorMessage msg = new CreateVisitorMessage();
- msg.setLibraryName(decodeString(buf));
- msg.setInstanceId(decodeString(buf));
- msg.setControlDestination(decodeString(buf));
- msg.setDataDestination(decodeString(buf));
- msg.setDocumentSelection(decodeString(buf));
- msg.setMaxPendingReplyCount(buf.getInt(null));
-
- int size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- long reversed = buf.getLong(null);
- long rawid = ((reversed >>> 56) & 0x00000000000000FFl) | ((reversed >>> 40) & 0x000000000000FF00l) |
- ((reversed >>> 24) & 0x0000000000FF0000l) | ((reversed >>> 8) & 0x00000000FF000000l) |
- ((reversed << 8) & 0x000000FF00000000l) | ((reversed << 24) & 0x0000FF0000000000l) |
- ((reversed << 40) & 0x00FF000000000000l) | ((reversed << 56) & 0xFF00000000000000l);
- msg.getBuckets().add(new BucketId(rawid));
- }
-
- msg.setFromTimestamp(buf.getLong(null));
- msg.setToTimestamp(buf.getLong(null));
- msg.setVisitRemoves(buf.getByte(null) == (byte)1);
- msg.setFieldSet(decodeString(buf));
- msg.setVisitInconsistentBuckets(buf.getByte(null) == (byte)1);
-
- size = buf.getInt(null);
- for (int i = 0; i < size; i++) {
- String key = decodeString(buf);
- int sz = buf.getInt(null);
- msg.getParameters().put(key, buf.getBytes(null, sz));
- }
-
- msg.setVisitorOrdering(buf.getInt(null));
- msg.setMaxBucketsPerVisitor(buf.getInt(null));
- msg.setVisitorDispatcherVersion(50);
- msg.setBucketSpace(decodeBucketSpace(buf));
- return msg;
- }
-
- protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
- return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- CreateVisitorMessage msg = (CreateVisitorMessage)obj;
- encodeString(msg.getLibraryName(), buf);
- encodeString(msg.getInstanceId(), buf);
- encodeString(msg.getControlDestination(), buf);
- encodeString(msg.getDataDestination(), buf);
- encodeString(msg.getDocumentSelection(), buf);
- buf.putInt(null, msg.getMaxPendingReplyCount());
-
- buf.putInt(null, msg.getBuckets().size());
- for (BucketId id : msg.getBuckets()) {
- long rawid = id.getRawId();
- long reversed = ((rawid >>> 56) & 0x00000000000000FFl) | ((rawid >>> 40) & 0x000000000000FF00l) |
- ((rawid >>> 24) & 0x0000000000FF0000l) | ((rawid >>> 8) & 0x00000000FF000000l) |
- ((rawid << 8) & 0x000000FF00000000l) | ((rawid << 24) & 0x0000FF0000000000l) |
- ((rawid << 40) & 0x00FF000000000000l) | ((rawid << 56) & 0xFF00000000000000l);
- buf.putLong(null, reversed);
- }
-
- buf.putLong(null, msg.getFromTimestamp());
- buf.putLong(null, msg.getToTimestamp());
- buf.putByte(null, msg.getVisitRemoves() ? (byte)1 : (byte)0);
- encodeString(msg.getFieldSet(), buf);
- buf.putByte(null, msg.getVisitInconsistentBuckets() ? (byte)1 : (byte)0);
-
- buf.putInt(null, msg.getParameters().size());
- for (Map.Entry<String, byte[]> pairs : msg.getParameters().entrySet()) {
- encodeString(pairs.getKey(), buf);
- byte[] b = pairs.getValue();
- buf.putInt(null, b.length);
- buf.put(null, b);
- }
-
- buf.putInt(null, msg.getVisitorOrdering());
- buf.putInt(null, msg.getMaxBucketsPerVisitor());
- return encodeBucketSpace(msg.getBucketSpace(), buf);
- }
- }
-
- public static class GetDocumentMessageFactory extends DocumentMessageFactory {
-
- @Override
- protected DocumentMessage doDecode(DocumentDeserializer buf) {
- return new GetDocumentMessage(new DocumentId(buf), decodeString(buf));
- }
-
- @Override
- protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- GetDocumentMessage msg = (GetDocumentMessage)obj;
- msg.getDocumentId().serialize(buf);
- encodeString(msg.getFieldSet(), buf);
- return true;
- }
- }
-
- public static class DocumentIgnoredReplyFactory extends DocumentReplyFactory {
- @Override
- protected DocumentReply doDecode(DocumentDeserializer buf) {
- return new DocumentIgnoredReply();
- }
-
- @Override
- protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
- return true;
- }
- }
-}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories52.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories52.java
index 2e18c681c50..89a0aa22bb3 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories52.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories52.java
@@ -1,82 +1,948 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.documentapi.messagebus.protocol;
-import com.google.common.annotations.Beta;
+import com.yahoo.document.BucketId;
+import com.yahoo.document.Document;
+import com.yahoo.document.DocumentId;
+import com.yahoo.document.DocumentPut;
+import com.yahoo.document.DocumentUpdate;
+import com.yahoo.document.FixedBucketSpaces;
import com.yahoo.document.TestAndSetCondition;
import com.yahoo.document.serialization.DocumentDeserializer;
import com.yahoo.document.serialization.DocumentSerializer;
+import com.yahoo.document.serialization.DocumentSerializerFactory;
+import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet;
+import com.yahoo.log.LogLevel;
+import com.yahoo.messagebus.Routable;
+import com.yahoo.vdslib.DocumentList;
+import com.yahoo.vdslib.DocumentSummary;
+import com.yahoo.vdslib.SearchResult;
+import com.yahoo.vdslib.VisitorStatistics;
+import com.yahoo.vespa.objects.Deserializer;
+import com.yahoo.vespa.objects.Serializer;
+
+import java.util.Map;
+import java.util.logging.Logger;
import static com.yahoo.documentapi.messagebus.protocol.AbstractRoutableFactory.decodeString;
import static com.yahoo.documentapi.messagebus.protocol.AbstractRoutableFactory.encodeString;
+
/**
* @author Vegard Sjonfjell
+ * This class encapsulates all the {@link RoutableFactory} classes needed to implement serialization for the document
+ * protocol. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
*/
+public abstract class RoutableFactories52 {
+
+ /**
+ * Implements the shared factory logic required for {@link DocumentMessage} objects, and it offers a more convenient
+ * interface for implementing {@link RoutableFactory}.
+ *
+ * @author Simon Thoresen Hult
+ */
+ public static abstract class DocumentMessageFactory extends AbstractRoutableFactory {
+
+ /**
+ * This method encodes the given message using the given serializer. You are guaranteed to only receive messages
+ * of the type that this factory was registered for.
+ * <p>
+ * This method is NOT exception safe. Return false to
+ * signal failure.
+ *
+ * @param msg The message to encode.
+ * @param serializer The serializer to use for encoding.
+ * @return True if the message was encoded.
+ */
+ protected abstract boolean doEncode(DocumentMessage msg, DocumentSerializer serializer);
+
+ /**
+ * This method decodes a message from the given deserializer. You are guaranteed to only receive byte buffers
+ * generated by a previous call to {@link #doEncode(DocumentMessage, DocumentSerializer)}.
+ * <p>
+ * This method is NOT exception safe. Return null to signal failure.
+ *
+ * @param deserializer The deserializer to use for decoding.
+ * @return The decoded message.
+ */
+ protected abstract DocumentMessage doDecode(DocumentDeserializer deserializer);
+
+ public boolean encode(Routable obj, DocumentSerializer out) {
+ if (!(obj instanceof DocumentMessage)) {
+ throw new AssertionError(
+ "Document message factory (" + getClass().getName() + ") registered for incompatible " +
+ "routable type " + obj.getType() + "(" + obj.getClass().getName() + ").");
+ }
+ DocumentMessage msg = (DocumentMessage)obj;
+ out.putByte(null, (byte)(msg.getPriority().getValue()));
+ out.putInt(null, msg.getLoadType().getId());
+ return doEncode(msg, out);
+ }
+
+ public Routable decode(DocumentDeserializer in, LoadTypeSet loadTypes) {
+ byte pri = in.getByte(null);
+ int loadType = in.getInt(null);
+ DocumentMessage msg = doDecode(in);
+ if (msg != null) {
+ msg.setPriority(DocumentProtocol.getPriority(pri));
+ msg.setLoadType(loadTypes.getIdMap().get(loadType));
+ }
+ return msg;
+ }
+ }
+
+ /**
+ * Implements the shared factory logic required for {@link DocumentReply} objects, and it offers a more convenient
+ * interface for implementing {@link RoutableFactory}.
+ *
+ * @author Simon Thoresen Hult
+ */
+ public static abstract class DocumentReplyFactory extends AbstractRoutableFactory {
+
+ /**
+ * This method encodes the given reply into the given byte buffer. You are guaranteed to only receive replies of
+ * the type that this factory was registered for.
+ * <p>
+ * This method is NOT exception safe. Return false to signal
+ * failure.
+ *
+ * @param reply The reply to encode.
+ * @param buf The byte buffer to write to.
+ * @return True if the message was encoded.
+ */
+ protected abstract boolean doEncode(DocumentReply reply, DocumentSerializer buf);
+
+ /**
+ * This method decodes a reply from the given byte buffer. You are guaranteed to only receive byte buffers
+ * generated by a previous call to {@link #doEncode(DocumentReply, com.yahoo.document.serialization.DocumentSerializer)}.
+ *
+ * <p>
+ * This method is NOT exception safe. Return null to signal failure.
+ *
+ * @param buf The byte buffer to read from.
+ * @return The decoded reply.
+ */
+ protected abstract DocumentReply doDecode(DocumentDeserializer buf);
+
+ public boolean encode(Routable obj, DocumentSerializer out) {
+ if (!(obj instanceof DocumentReply)) {
+ throw new AssertionError(
+ "Document reply factory (" + getClass().getName() + ") registered for incompatible " +
+ "routable type " + obj.getType() + "(" + obj.getClass().getName() + ").");
+ }
+ DocumentReply reply = (DocumentReply)obj;
+ out.putByte(null, (byte)(reply.getPriority().getValue()));
+ return doEncode(reply, out);
+ }
+
+ public Routable decode(DocumentDeserializer in, LoadTypeSet loadTypes) {
+ byte pri = in.getByte(null);
+ DocumentReply reply = doDecode(in);
+ if (reply != null) {
+ reply.setPriority(DocumentProtocol.getPriority(pri));
+ }
+ return reply;
+ }
+ }
+
+ public static class CreateVisitorMessageFactory extends DocumentMessageFactory {
+
+ protected String decodeBucketSpace(Deserializer deserializer) {
+ return FixedBucketSpaces.defaultSpace();
+ }
-@Beta
-public abstract class RoutableFactories52 extends RoutableFactories51 {
- protected static class PutDocumentMessageFactory extends RoutableFactories51.PutDocumentMessageFactory {
@Override
- protected void decodeInto(PutDocumentMessage msg, DocumentDeserializer buf) {
- super.decodeInto(msg, buf);
- decodeTasCondition(msg, buf);
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ CreateVisitorMessage msg = new CreateVisitorMessage();
+ msg.setLibraryName(decodeString(buf));
+ msg.setInstanceId(decodeString(buf));
+ msg.setControlDestination(decodeString(buf));
+ msg.setDataDestination(decodeString(buf));
+ msg.setDocumentSelection(decodeString(buf));
+ msg.setMaxPendingReplyCount(buf.getInt(null));
+
+ int size = buf.getInt(null);
+ for (int i = 0; i < size; i++) {
+ long reversed = buf.getLong(null);
+ long rawid = ((reversed >>> 56) & 0x00000000000000FFl) | ((reversed >>> 40) & 0x000000000000FF00l) |
+ ((reversed >>> 24) & 0x0000000000FF0000l) | ((reversed >>> 8) & 0x00000000FF000000l) |
+ ((reversed << 8) & 0x000000FF00000000l) | ((reversed << 24) & 0x0000FF0000000000l) |
+ ((reversed << 40) & 0x00FF000000000000l) | ((reversed << 56) & 0xFF00000000000000l);
+ msg.getBuckets().add(new BucketId(rawid));
+ }
+
+ msg.setFromTimestamp(buf.getLong(null));
+ msg.setToTimestamp(buf.getLong(null));
+ msg.setVisitRemoves(buf.getByte(null) == (byte)1);
+ msg.setFieldSet(decodeString(buf));
+ msg.setVisitInconsistentBuckets(buf.getByte(null) == (byte)1);
+
+ size = buf.getInt(null);
+ for (int i = 0; i < size; i++) {
+ String key = decodeString(buf);
+ int sz = buf.getInt(null);
+ msg.getParameters().put(key, buf.getBytes(null, sz));
+ }
+
+ msg.setVisitorOrdering(buf.getInt(null));
+ msg.setMaxBucketsPerVisitor(buf.getInt(null));
+ msg.setVisitorDispatcherVersion(50);
+ msg.setBucketSpace(decodeBucketSpace(buf));
+ return msg;
+ }
+
+ protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
+ return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
}
@Override
protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- if (!super.doEncode(obj, buf)) {
- return false;
+ CreateVisitorMessage msg = (CreateVisitorMessage)obj;
+ encodeString(msg.getLibraryName(), buf);
+ encodeString(msg.getInstanceId(), buf);
+ encodeString(msg.getControlDestination(), buf);
+ encodeString(msg.getDataDestination(), buf);
+ encodeString(msg.getDocumentSelection(), buf);
+ buf.putInt(null, msg.getMaxPendingReplyCount());
+
+ buf.putInt(null, msg.getBuckets().size());
+ for (BucketId id : msg.getBuckets()) {
+ long rawid = id.getRawId();
+ long reversed = ((rawid >>> 56) & 0x00000000000000FFl) | ((rawid >>> 40) & 0x000000000000FF00l) |
+ ((rawid >>> 24) & 0x0000000000FF0000l) | ((rawid >>> 8) & 0x00000000FF000000l) |
+ ((rawid << 8) & 0x000000FF00000000l) | ((rawid << 24) & 0x0000FF0000000000l) |
+ ((rawid << 40) & 0x00FF000000000000l) | ((rawid << 56) & 0xFF00000000000000l);
+ buf.putLong(null, reversed);
}
- // If the serialized buffer exists, the test and set condition has already been encoded
- if (((PutDocumentMessage)obj).getSerializedBuffer() == null) {
- encodeTasCondition(buf, (TestAndSetMessage) obj);
+ buf.putLong(null, msg.getFromTimestamp());
+ buf.putLong(null, msg.getToTimestamp());
+ buf.putByte(null, msg.getVisitRemoves() ? (byte)1 : (byte)0);
+ encodeString(msg.getFieldSet(), buf);
+ buf.putByte(null, msg.getVisitInconsistentBuckets() ? (byte)1 : (byte)0);
+
+ buf.putInt(null, msg.getParameters().size());
+ for (Map.Entry<String, byte[]> pairs : msg.getParameters().entrySet()) {
+ encodeString(pairs.getKey(), buf);
+ byte[] b = pairs.getValue();
+ buf.putInt(null, b.length);
+ buf.put(null, b);
+ }
+
+ buf.putInt(null, msg.getVisitorOrdering());
+ buf.putInt(null, msg.getMaxBucketsPerVisitor());
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+ }
+ }
+
+ public static class CreateVisitorReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ CreateVisitorReply reply = new CreateVisitorReply(DocumentProtocol.REPLY_CREATEVISITOR);
+ reply.setLastBucket(new BucketId(buf.getLong(null)));
+
+ VisitorStatistics vs = new VisitorStatistics();
+ vs.setBucketsVisited(buf.getInt(null));
+ vs.setDocumentsVisited(buf.getLong(null));
+ vs.setBytesVisited(buf.getLong(null));
+ vs.setDocumentsReturned(buf.getLong(null));
+ vs.setBytesReturned(buf.getLong(null));
+ vs.setSecondPassDocumentsReturned(buf.getLong(null));
+ vs.setSecondPassBytesReturned(buf.getLong(null));
+ reply.setVisitorStatistics(vs);
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ CreateVisitorReply reply = (CreateVisitorReply)obj;
+ buf.putLong(null, reply.getLastBucket().getRawId());
+ buf.putInt(null, reply.getVisitorStatistics().getBucketsVisited());
+ buf.putLong(null, reply.getVisitorStatistics().getDocumentsVisited());
+ buf.putLong(null, reply.getVisitorStatistics().getBytesVisited());
+ buf.putLong(null, reply.getVisitorStatistics().getDocumentsReturned());
+ buf.putLong(null, reply.getVisitorStatistics().getBytesReturned());
+ buf.putLong(null, reply.getVisitorStatistics().getSecondPassDocumentsReturned());
+ buf.putLong(null, reply.getVisitorStatistics().getSecondPassBytesReturned());
+ return true;
+ }
+ }
+
+ public static class DestroyVisitorMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ DestroyVisitorMessage msg = new DestroyVisitorMessage();
+ msg.setInstanceId(decodeString(buf));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ DestroyVisitorMessage msg = (DestroyVisitorMessage)obj;
+ encodeString(msg.getInstanceId(), buf);
+ return true;
+ }
+ }
+
+ public static class DestroyVisitorReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_DESTROYVISITOR);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class DocumentIgnoredReplyFactory extends DocumentReplyFactory {
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new DocumentIgnoredReply();
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class DocumentListMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ DocumentListMessage msg = new DocumentListMessage();
+ msg.setBucketId(new BucketId(buf.getLong(null)));
+ int len = buf.getInt(null);
+ for (int i = 0; i < len; i++) {
+ msg.getDocuments().add(new DocumentListEntry(buf));
}
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ DocumentListMessage msg = (DocumentListMessage)obj;
+ buf.putLong(null, msg.getBucketId().getRawId());
+ buf.putInt(null, msg.getDocuments().size());
+ for (int i = 0; i < msg.getDocuments().size(); i++) {
+ msg.getDocuments().get(i).serialize(buf);
+ }
return true;
- }
+ }
}
- protected static class RemoveDocumentMessageFactory extends RoutableFactories51.RemoveDocumentMessageFactory {
+ public static class DocumentListReplyFactory extends DocumentReplyFactory {
+
@Override
- protected void decodeInto(RemoveDocumentMessage msg, DocumentDeserializer buf) {
- super.decodeInto(msg, buf);
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_DOCUMENTLIST);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class DocumentSummaryMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ DocumentSummaryMessage msg = new DocumentSummaryMessage();
+ msg.setDocumentSummary(new DocumentSummary(buf));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ return false; // not supported
+ }
+ }
+
+ public static class DocumentSummaryReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_DOCUMENTSUMMARY);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class EmptyBucketsMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ EmptyBucketsMessage msg = new EmptyBucketsMessage();
+ int size = buf.getInt(null);
+ for (int i = 0; i < size; ++i) {
+ msg.getBucketIds().add(new BucketId(buf.getLong(null)));
+ }
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ EmptyBucketsMessage msg = (EmptyBucketsMessage)obj;
+ buf.putInt(null, msg.getBucketIds().size());
+ for (BucketId bid : msg.getBucketIds()) {
+ buf.putLong(null, bid.getRawId());
+ }
+ return true;
+ }
+ }
+
+ public static class EmptyBucketsReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_EMPTYBUCKETS);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class GetBucketListMessageFactory extends DocumentMessageFactory {
+
+ protected String decodeBucketSpace(Deserializer deserializer) {
+ return FixedBucketSpaces.defaultSpace();
+ }
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ GetBucketListMessage msg = new GetBucketListMessage();
+ msg.setBucketId(new BucketId(buf.getLong(null)));
+ msg.setBucketSpace(decodeBucketSpace(buf));
+ return msg;
+ }
+
+ protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
+ return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ GetBucketListMessage msg = (GetBucketListMessage)obj;
+ buf.putLong(null, msg.getBucketId().getRawId());
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+ }
+ }
+
+ public static class GetBucketListReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ GetBucketListReply reply = new GetBucketListReply();
+ int len = buf.getInt(null);
+ for (int i = 0; i < len; i++) {
+ GetBucketListReply.BucketInfo info = new GetBucketListReply.BucketInfo();
+ info.bucket = new BucketId(buf.getLong(null));
+ info.bucketInformation = decodeString(buf);
+ reply.getBuckets().add(info);
+ }
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ GetBucketListReply reply = (GetBucketListReply)obj;
+ buf.putInt(null, reply.getBuckets().size());
+ for (GetBucketListReply.BucketInfo info : reply.getBuckets()) {
+ buf.putLong(null, info.bucket.getRawId());
+ encodeString(info.bucketInformation, buf);
+ }
+ return true;
+ }
+ }
+
+ public static class GetBucketStateMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ GetBucketStateMessage msg = new GetBucketStateMessage();
+ msg.setBucketId(new BucketId(buf.getLong(null)));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ GetBucketStateMessage msg = (GetBucketStateMessage)obj;
+ buf.putLong(null, msg.getBucketId().getRawId());
+ return true;
+ }
+ }
+
+ public static class GetBucketStateReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ GetBucketStateReply reply = new GetBucketStateReply();
+ int size = buf.getInt(null);
+ for (int i = 0; i < size; i++) {
+ reply.getBucketState().add(new DocumentState(buf));
+ }
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ GetBucketStateReply reply = (GetBucketStateReply)obj;
+ buf.putInt(null, reply.getBucketState().size());
+ for (DocumentState stat : reply.getBucketState()) {
+ stat.serialize(buf);
+ }
+ return true;
+ }
+ }
+
+ public static class GetDocumentMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ return new GetDocumentMessage(new DocumentId(buf), decodeString(buf));
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ GetDocumentMessage msg = (GetDocumentMessage)obj;
+ msg.getDocumentId().serialize(buf);
+ encodeString(msg.getFieldSet(), buf);
+ return true;
+ }
+ }
+
+ public static class GetDocumentReplyFactory extends DocumentReplyFactory {
+
+ private final LazyDecoder decoder = new LazyDecoder() {
+
+ public void decode(Routable obj, DocumentDeserializer buf) {
+ GetDocumentReply reply = (GetDocumentReply)obj;
+
+ Document doc = null;
+ byte flag = buf.getByte(null);
+ if (flag != 0) {
+ doc = Document.createDocument(buf);
+ reply.setDocument(doc);
+ }
+ long lastModified = buf.getLong(null);
+ reply.setLastModified(lastModified);
+ if (doc != null) {
+ doc.setLastModified(lastModified);
+ }
+ }
+ };
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ GetDocumentReply reply = new GetDocumentReply(decoder, buf);
+
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ GetDocumentReply reply = (GetDocumentReply)obj;
+ if (reply.getSerializedBuffer() != null) {
+ buf.put(null, reply.getSerializedBuffer());
+ } else {
+ Document document = reply.getDocument();
+ buf.putByte(null, (byte)(document == null ? 0 : 1));
+ if (document != null) {
+ document.serialize(buf);
+ }
+ buf.putLong(null, reply.getLastModified());
+ }
+ return true;
+ }
+ }
+
+ public static class MapVisitorMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ MapVisitorMessage msg = new MapVisitorMessage();
+ int size = buf.getInt(null);
+ for (int i = 0; i < size; i++) {
+ String key = decodeString(buf);
+ String value = decodeString(buf);
+ msg.getData().put(key, value);
+ }
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ MapVisitorMessage msg = (MapVisitorMessage)obj;
+ buf.putInt(null, msg.getData().size());
+ for (Map.Entry<String, String> pairs : msg.getData().entrySet()) {
+ encodeString(pairs.getKey(), buf);
+ encodeString(pairs.getValue(), buf);
+ }
+ return true;
+ }
+ }
+
+ public static class MapVisitorReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_MAPVISITOR);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class PutDocumentMessageFactory extends DocumentMessageFactory {
+ protected void decodeInto(PutDocumentMessage msg, DocumentDeserializer buf) {
+ msg.setDocumentPut(new DocumentPut(Document.createDocument(buf)));
+ msg.setTimestamp(buf.getLong(null));
decodeTasCondition(msg, buf);
}
@Override
+ protected DocumentMessage doDecode(DocumentDeserializer buffer) {
+ final LazyDecoder decoder = (obj, buf) -> {
+ decodeInto((PutDocumentMessage) obj, buf);
+ };
+
+ return new PutDocumentMessage(decoder, buffer);
+ }
+
+ @Override
protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- if (!super.doEncode(obj, buf)) {
- return false;
+ PutDocumentMessage msg = (PutDocumentMessage)obj;
+ if (msg.getSerializedBuffer() != null) {
+ buf.put(null, msg.getSerializedBuffer());
+ } else {
+ msg.getDocumentPut().getDocument().serialize(buf);
+ buf.putLong(null, msg.getTimestamp());
+ encodeTasCondition(buf, (TestAndSetMessage) obj);
}
+ return true;
+ }
+ }
+ public static class PutDocumentReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ WriteDocumentReply rep = new WriteDocumentReply(DocumentProtocol.REPLY_PUTDOCUMENT);
+ rep.setHighestModificationTimestamp(buf.getLong(null));
+ return rep;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ WriteDocumentReply rep = (WriteDocumentReply)obj;
+ buf.putLong(null, rep.getHighestModificationTimestamp());
+ return true;
+ }
+ }
+
+ public static class RemoveDocumentMessageFactory extends DocumentMessageFactory {
+ protected void decodeInto(RemoveDocumentMessage msg, DocumentDeserializer buf) {
+ msg.setDocumentId(new DocumentId(buf));
+ decodeTasCondition(msg, buf);
+ }
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ RemoveDocumentMessage msg = new RemoveDocumentMessage();
+ decodeInto(msg, buf);
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ RemoveDocumentMessage msg = (RemoveDocumentMessage)obj;
+ msg.getDocumentId().serialize(buf);
encodeTasCondition(buf, (TestAndSetMessage) obj);
return true;
}
}
- protected static class UpdateDocumentMessageFactory extends RoutableFactories51.UpdateDocumentMessageFactory {
+ public static class RemoveDocumentReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ RemoveDocumentReply reply = new RemoveDocumentReply();
+ byte flag = buf.getByte(null);
+ reply.setWasFound(flag != 0);
+ reply.setHighestModificationTimestamp(buf.getLong(null));
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ RemoveDocumentReply reply = (RemoveDocumentReply)obj;
+ buf.putByte(null, (byte)(reply.wasFound() ? 1 : 0));
+ buf.putLong(null, reply.getHighestModificationTimestamp());
+ return true;
+ }
+ }
+
+ public static class RemoveLocationMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ return new RemoveLocationMessage(decodeString(buf));
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ RemoveLocationMessage msg = (RemoveLocationMessage)obj;
+ encodeString(msg.getDocumentSelection(), buf);
+ return true;
+ }
+ }
+
+ public static class RemoveLocationReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new DocumentReply(DocumentProtocol.REPLY_REMOVELOCATION);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class SearchResultMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ SearchResultMessage msg = new SearchResultMessage();
+ msg.setSearchResult(new SearchResult(buf));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ return false; // not supported
+ }
+ }
+
+ public static class QueryResultMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ QueryResultMessage msg = new QueryResultMessage();
+ msg.setSearchResult(new SearchResult(buf));
+ msg.setSummary(new DocumentSummary(buf));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ return false; // not supported
+ }
+ }
+
+ public static class SearchResultReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_SEARCHRESULT);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class QueryResultReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_QUERYRESULT);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class StatBucketMessageFactory extends DocumentMessageFactory {
+
+ protected String decodeBucketSpace(Deserializer deserializer) {
+ return FixedBucketSpaces.defaultSpace();
+ }
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ StatBucketMessage msg = new StatBucketMessage();
+ msg.setBucketId(new BucketId(buf.getLong(null)));
+ msg.setDocumentSelection(decodeString(buf));
+ msg.setBucketSpace(decodeBucketSpace(buf));
+ return msg;
+ }
+
+ protected boolean encodeBucketSpace(String bucketSpace, DocumentSerializer buf) {
+ return FixedBucketSpaces.defaultSpace().equals(bucketSpace);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ StatBucketMessage msg = (StatBucketMessage)obj;
+ buf.putLong(null, msg.getBucketId().getRawId());
+ encodeString(msg.getDocumentSelection(), buf);
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+ }
+ }
+
+ public static class StatBucketReplyFactory extends DocumentReplyFactory {
+
@Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ StatBucketReply reply = new StatBucketReply();
+ reply.setResults(decodeString(buf));
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ StatBucketReply reply = (StatBucketReply)obj;
+ encodeString(reply.getResults(), buf);
+ return true;
+ }
+ }
+
+ public static class UpdateDocumentMessageFactory extends DocumentMessageFactory {
protected void decodeInto(UpdateDocumentMessage msg, DocumentDeserializer buf) {
- super.decodeInto(msg, buf);
+ msg.setDocumentUpdate(new DocumentUpdate(buf));
+ msg.setOldTimestamp(buf.getLong(null));
+ msg.setNewTimestamp(buf.getLong(null));
decodeTasCondition(msg, buf);
}
@Override
+ protected DocumentMessage doDecode(DocumentDeserializer buffer) {
+ final LazyDecoder decoder = (obj, buf) -> {
+ decodeInto((UpdateDocumentMessage) obj, buf);
+ };
+
+ return new UpdateDocumentMessage(decoder, buffer);
+ }
+
+ @Override
protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
- if (!super.doEncode(obj, buf)) {
- return false;
+ UpdateDocumentMessage msg = (UpdateDocumentMessage)obj;
+ if (msg.getSerializedBuffer() != null) {
+ buf.put(null, msg.getSerializedBuffer());
+ } else {
+ msg.getDocumentUpdate().serialize(buf);
+ buf.putLong(null, msg.getOldTimestamp());
+ buf.putLong(null, msg.getNewTimestamp());
+ encodeTasCondition(buf, (TestAndSetMessage) obj);
}
+ return true;
+ }
+ }
- // If the serialized buffer exists, the test and set condition has already been encoded
- if (((UpdateDocumentMessage)obj).getSerializedBuffer() == null) {
- encodeTasCondition(buf, (TestAndSetMessage) obj);
+ public static class UpdateDocumentReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ UpdateDocumentReply rep = new UpdateDocumentReply();
+ byte flag = buf.getByte(null);
+ rep.setWasFound(flag != 0);
+ rep.setHighestModificationTimestamp(buf.getLong(null));
+ return rep;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ UpdateDocumentReply rep = (UpdateDocumentReply)obj;
+ buf.putByte(null, (byte)(rep.wasFound() ? 1 : 0));
+ buf.putLong(null, rep.getHighestModificationTimestamp());
+ return true;
+ }
+ }
+
+ public static class VisitorInfoMessageFactory extends DocumentMessageFactory {
+
+ @Override
+ protected DocumentMessage doDecode(DocumentDeserializer buf) {
+ VisitorInfoMessage msg = new VisitorInfoMessage();
+ int size = buf.getInt(null);
+ for (int i = 0; i < size; i++) {
+ long reversed = buf.getLong(null);
+ long rawid = ((reversed >>> 56) & 0x00000000000000FFl) | ((reversed >>> 40) & 0x000000000000FF00l) |
+ ((reversed >>> 24) & 0x0000000000FF0000l) | ((reversed >>> 8) & 0x00000000FF000000l) |
+ ((reversed << 8) & 0x000000FF00000000l) | ((reversed << 24) & 0x0000FF0000000000l) |
+ ((reversed << 40) & 0x00FF000000000000l) | ((reversed << 56) & 0xFF00000000000000l);
+ msg.getFinishedBuckets().add(new BucketId(rawid));
}
+ msg.setErrorMessage(decodeString(buf));
+ return msg;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentMessage obj, DocumentSerializer buf) {
+ VisitorInfoMessage msg = (VisitorInfoMessage)obj;
+ buf.putInt(null, msg.getFinishedBuckets().size());
+ for (BucketId id : msg.getFinishedBuckets()) {
+ long rawid = id.getRawId();
+ long reversed = ((rawid >>> 56) & 0x00000000000000FFl) | ((rawid >>> 40) & 0x000000000000FF00l) |
+ ((rawid >>> 24) & 0x0000000000FF0000l) | ((rawid >>> 8) & 0x00000000FF000000l) |
+ ((rawid << 8) & 0x000000FF00000000l) | ((rawid << 24) & 0x0000FF0000000000l) |
+ ((rawid << 40) & 0x00FF000000000000l) | ((rawid << 56) & 0xFF00000000000000l);
+ buf.putLong(null, reversed);
+ }
+ encodeString(msg.getErrorMessage(), buf);
return true;
}
}
+ public static class VisitorInfoReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ return new VisitorReply(DocumentProtocol.REPLY_VISITORINFO);
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ return true;
+ }
+ }
+
+ public static class WrongDistributionReplyFactory extends DocumentReplyFactory {
+
+ @Override
+ protected DocumentReply doDecode(DocumentDeserializer buf) {
+ WrongDistributionReply reply = new WrongDistributionReply();
+ reply.setSystemState(decodeString(buf));
+ return reply;
+ }
+
+ @Override
+ protected boolean doEncode(DocumentReply obj, DocumentSerializer buf) {
+ WrongDistributionReply reply = (WrongDistributionReply)obj;
+ encodeString(reply.getSystemState(), buf);
+ return true;
+ }
+ }
static void decodeTasCondition(TestAndSetMessage msg, DocumentDeserializer buf) {
msg.setCondition(new TestAndSetCondition(decodeString(buf)));
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java
index 6a8c00cc1b1..22f7a491056 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java
@@ -252,7 +252,6 @@ public class StoragePolicy extends ExternalSlobrokPolicy {
case DocumentProtocol.MESSAGE_STATBUCKET: return ((StatBucketMessage)msg).getBucketId();
case DocumentProtocol.MESSAGE_CREATEVISITOR: return ((CreateVisitorMessage)msg).getBuckets().get(0);
case DocumentProtocol.MESSAGE_REMOVELOCATION: return ((RemoveLocationMessage)msg).getBucketId();
- case DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE: return ((BatchDocumentUpdateMessage)msg).getBucketId();
default:
log.log(LogLevel.ERROR, "Message type '" + msg.getType() + "' not supported.");
return null;
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolTest.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolTest.java
deleted file mode 100644
index 50778e00519..00000000000
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocolTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol;
-
-import com.yahoo.component.Version;
-import com.yahoo.document.DocumentId;
-import com.yahoo.document.DocumentTypeManager;
-import com.yahoo.document.DocumentTypeManagerConfigurer;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Simon Thoresen Hult
- */
-public class DocumentProtocolTest {
-
- private final DocumentTypeManager manager = new DocumentTypeManager();
-
- @Before
- public void setUp() {
- DocumentTypeManagerConfigurer.configure(manager, "file:./test/cfg/testdoc.cfg");
- }
-
- @SuppressWarnings("deprecation")
- @Test
- public void requireThat50SerializationPrecedes5xSerialization() {
- DocumentProtocol protocol = new DocumentProtocol(manager);
- GetDocumentMessage prev = new GetDocumentMessage(new DocumentId("doc:scheme:"), "foo");
- byte[] buf = protocol.encode(new Version(5, 0), prev);
-
- GetDocumentMessage next = (GetDocumentMessage)protocol.decode(new Version(5, 0), buf);
- assertEquals(GetDocumentMessage.DEFAULT_FIELD_SET, next.getFieldSet());
- }
-
-}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java
deleted file mode 100644
index 3d02aeee54d..00000000000
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages50TestCase.java
+++ /dev/null
@@ -1,978 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol.test;
-
-import com.yahoo.component.Version;
-import com.yahoo.document.*;
-import com.yahoo.document.fieldpathupdate.RemoveFieldPathUpdate;
-import com.yahoo.document.idstring.IdString;
-import com.yahoo.document.select.OrderingSpecification;
-import com.yahoo.documentapi.messagebus.protocol.*;
-import com.yahoo.messagebus.Routable;
-import com.yahoo.text.Utf8;
-import com.yahoo.vdslib.DocumentList;
-import com.yahoo.vdslib.Entry;
-import com.yahoo.vdslib.SearchResult;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-/**
- * @author Simon Thoresen Hult
- */
-public class Messages50TestCase extends MessagesTestBase {
-
- @Override
- protected void registerTests(Map<Integer, RunnableTest> out) {
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
- out.put(DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE, new testBatchDocumentUpdateMessage());
- out.put(DocumentProtocol.MESSAGE_CREATEVISITOR, new testCreateVisitorMessage());
- out.put(DocumentProtocol.MESSAGE_DESTROYVISITOR, new testDestroyVisitorMessage());
- out.put(DocumentProtocol.MESSAGE_DOCUMENTLIST, new testDocumentListMessage());
- out.put(DocumentProtocol.MESSAGE_DOCUMENTSUMMARY, new testDocumentSummaryMessage());
- out.put(DocumentProtocol.MESSAGE_EMPTYBUCKETS, new testEmptyBucketsMessage());
- out.put(DocumentProtocol.MESSAGE_GETBUCKETLIST, new testGetBucketListMessage());
- out.put(DocumentProtocol.MESSAGE_GETBUCKETSTATE, new testGetBucketStateMessage());
- out.put(DocumentProtocol.MESSAGE_GETDOCUMENT, new testGetDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_MAPVISITOR, new testMapVisitorMessage());
- out.put(DocumentProtocol.MESSAGE_PUTDOCUMENT, new testPutDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_QUERYRESULT, new testQueryResultMessage());
- out.put(DocumentProtocol.MESSAGE_REMOVEDOCUMENT, new testRemoveDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_REMOVELOCATION, new testRemoveLocationMessage());
- out.put(DocumentProtocol.MESSAGE_SEARCHRESULT, new testSearchResultMessage());
- out.put(DocumentProtocol.MESSAGE_STATBUCKET, new testStatBucketMessage());
- out.put(DocumentProtocol.MESSAGE_UPDATEDOCUMENT, new testUpdateDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_VISITORINFO, new testVisitorInfoMessage());
- out.put(DocumentProtocol.REPLY_BATCHDOCUMENTUPDATE, new testBatchDocumentUpdateReply());
- out.put(DocumentProtocol.REPLY_CREATEVISITOR, new testCreateVisitorReply());
- out.put(DocumentProtocol.REPLY_DESTROYVISITOR, new testDestroyVisitorReply());
- out.put(DocumentProtocol.REPLY_DOCUMENTLIST, new testDocumentListReply());
- out.put(DocumentProtocol.REPLY_DOCUMENTSUMMARY, new testDocumentSummaryReply());
- out.put(DocumentProtocol.REPLY_EMPTYBUCKETS, new testEmptyBucketsReply());
- out.put(DocumentProtocol.REPLY_GETBUCKETLIST, new testGetBucketListReply());
- out.put(DocumentProtocol.REPLY_GETBUCKETSTATE, new testGetBucketStateReply());
- out.put(DocumentProtocol.REPLY_GETDOCUMENT, new testGetDocumentReply());
- out.put(DocumentProtocol.REPLY_MAPVISITOR, new testMapVisitorReply());
- out.put(DocumentProtocol.REPLY_PUTDOCUMENT, new testPutDocumentReply());
- out.put(DocumentProtocol.REPLY_QUERYRESULT, new testQueryResultReply());
- out.put(DocumentProtocol.REPLY_REMOVEDOCUMENT, new testRemoveDocumentReply());
- out.put(DocumentProtocol.REPLY_REMOVELOCATION, new testRemoveLocationReply());
- out.put(DocumentProtocol.REPLY_SEARCHRESULT, new testSearchResultReply());
- out.put(DocumentProtocol.REPLY_STATBUCKET, new testStatBucketReply());
- out.put(DocumentProtocol.REPLY_UPDATEDOCUMENT, new testUpdateDocumentReply());
- out.put(DocumentProtocol.REPLY_VISITORINFO, new testVisitorInfoReply());
- out.put(DocumentProtocol.REPLY_WRONGDISTRIBUTION, new testWrongDistributionReply());
- }
-
- @Override
- protected Version version() {
- return new Version(5, 0);
- }
-
- @Override
- protected boolean shouldTestCoverage() {
- return false;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Tests
- //
- ////////////////////////////////////////////////////////////////////////////////
-
- private static int BASE_MESSAGE_LENGTH = 5;
-
- public class testRemoveLocationMessage implements RunnableTest {
-
- @Override
- public void run() {
- {
- RemoveLocationMessage msg = new RemoveLocationMessage("id.group == \"mygroup\"");
- assertEquals(BASE_MESSAGE_LENGTH + 29, serialize("RemoveLocationMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (RemoveLocationMessage)deserialize("RemoveLocationMessage", DocumentProtocol.MESSAGE_REMOVELOCATION, lang);
- assertEquals("id.group == \"mygroup\"", msg.getDocumentSelection());
- }
- }
- }
- }
-
- public class testGetBucketListMessage implements RunnableTest {
-
- @Override
- public void run() {
- GetBucketListMessage msg = new GetBucketListMessage(new BucketId(16, 123));
- msg.setLoadType(loadTypes.getNameMap().get("foo"));
- assertEquals(BASE_MESSAGE_LENGTH + 12, serialize("GetBucketListMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (GetBucketListMessage)deserialize("GetBucketListMessage", DocumentProtocol.MESSAGE_GETBUCKETLIST, lang);
- assertEquals(new BucketId(16, 123), msg.getBucketId());
- assertEquals("foo", msg.getLoadType().getName());
- }
- }
- }
-
-
- public class testStatBucketMessage implements RunnableTest {
-
- @Override
- public void run() {
- StatBucketMessage msg = new StatBucketMessage(new BucketId(16, 123), "id.user=123");
- msg.setLoadType(null);
- assertEquals(BASE_MESSAGE_LENGTH + 27, serialize("StatBucketMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (StatBucketMessage)deserialize("StatBucketMessage", DocumentProtocol.MESSAGE_STATBUCKET, lang);
- assertEquals(new BucketId(16, 123), msg.getBucketId());
- assertEquals("id.user=123", msg.getDocumentSelection());
- assertEquals("default", msg.getLoadType().getName());
- }
- }
- }
-
- public class testGetBucketStateMessage implements RunnableTest {
-
- @Override
- public void run() {
- GetBucketStateMessage msg = new GetBucketStateMessage(new BucketId(16, 666));
- assertEquals(BASE_MESSAGE_LENGTH + 12, serialize("GetBucketStateMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (GetBucketStateMessage)deserialize("GetBucketStateMessage", DocumentProtocol.MESSAGE_GETBUCKETSTATE, lang);
- assertEquals(16, msg.getBucketId().getUsedBits());
- assertEquals(4611686018427388570l, msg.getBucketId().getId());
- }
- }
- }
-
- public class testCreateVisitorMessage implements RunnableTest {
-
- @Override
- @SuppressWarnings("deprecation")
- public void run() {
- CreateVisitorMessage msg = new CreateVisitorMessage("SomeLibrary", "myvisitor", "newyork", "london");
- msg.setDocumentSelection("true and false or true");
- msg.getParameters().put("myvar", Utf8.toBytes("somevalue"));
- msg.getParameters().put("anothervar", Utf8.toBytes("34"));
- msg.getBuckets().add(new BucketId(16, 1234));
- msg.setVisitRemoves(true);
- msg.setVisitorOrdering(OrderingSpecification.DESCENDING);
- msg.setMaxBucketsPerVisitor(2);
- assertEquals(BASE_MESSAGE_LENGTH + 168, serialize("CreateVisitorMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (CreateVisitorMessage)deserialize("CreateVisitorMessage", DocumentProtocol.MESSAGE_CREATEVISITOR, lang);
- assertEquals("SomeLibrary", msg.getLibraryName());
- assertEquals("myvisitor", msg.getInstanceId());
- assertEquals("newyork", msg.getControlDestination());
- assertEquals("london", msg.getDataDestination());
- assertEquals("true and false or true", msg.getDocumentSelection());
- assertEquals(8, msg.getMaxPendingReplyCount());
- assertEquals(true, msg.getVisitRemoves());
- assertEquals(false, msg.getVisitInconsistentBuckets());
- assertEquals(1, msg.getBuckets().size());
- assertEquals(new BucketId(16, 1234), msg.getBuckets().iterator().next());
- assertEquals("somevalue", Utf8.toString(msg.getParameters().get("myvar")));
- assertEquals("34", Utf8.toString(msg.getParameters().get("anothervar")));
- assertEquals(OrderingSpecification.DESCENDING, msg.getVisitorOrdering());
- assertEquals(2, msg.getMaxBucketsPerVisitor());
- }
-
- msg.getBuckets().clear();
-
- assertEquals("CreateVisitorMessage(" +
- "No buckets, " +
- "selection 'true and false or true', " +
- "bucket space 'default', " +
- "library SomeLibrary, including removes, " +
- "get fields: [all]" +
- ")",
- msg.toString());
-
- msg.getBuckets().add(new BucketId(16, 1234));
-
- assertEquals("CreateVisitorMessage(" +
- "Bucket BucketId(0x40000000000004d2), " +
- "selection 'true and false or true', " +
- "bucket space 'default', " +
- "library SomeLibrary, including removes, " +
- "get fields: [all]" +
- ")",
- msg.toString());
-
- msg.getBuckets().add(new BucketId(16, 1235));
- msg.getBuckets().add(new BucketId(16, 1236));
- msg.getBuckets().add(new BucketId(16, 1237));
- msg.getBuckets().add(new BucketId(16, 1238));
- msg.setFromTimestamp(10001);
- msg.setToTimestamp(20002);
- msg.setVisitInconsistentBuckets(true);
- assertEquals("CreateVisitorMessage(" +
- "5 buckets: BucketId(0x40000000000004d2) BucketId(0x40000000000004d3) BucketId(0x40000000000004d4) ..., " +
- "time 10001-20002, " +
- "selection 'true and false or true', " +
- "bucket space 'default', " +
- "library SomeLibrary, including removes, " +
- "get fields: [all], " +
- "visit inconsistent buckets" +
- ")",
- msg.toString());
- }
- }
-
- public class testCreateVisitorReply implements RunnableTest {
-
- @Override
- public void run() {
- CreateVisitorReply reply = new CreateVisitorReply(DocumentProtocol.REPLY_CREATEVISITOR);
- reply.setLastBucket(new BucketId(16, 123));
- reply.getVisitorStatistics().setBucketsVisited(3);
- reply.getVisitorStatistics().setDocumentsVisited(1000);
- reply.getVisitorStatistics().setBytesVisited(1024000);
- reply.getVisitorStatistics().setDocumentsReturned(123);
- reply.getVisitorStatistics().setBytesReturned(512000);
- reply.getVisitorStatistics().setSecondPassDocumentsReturned(456);
- reply.getVisitorStatistics().setSecondPassBytesReturned(789100);
-
- assertEquals(65, serialize("CreateVisitorReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (CreateVisitorReply)deserialize("CreateVisitorReply", DocumentProtocol.REPLY_CREATEVISITOR, lang);
- assertNotNull(reply);
- assertEquals(new BucketId(16, 123), reply.getLastBucket());
- assertEquals(3, reply.getVisitorStatistics().getBucketsVisited());
- assertEquals(1000, reply.getVisitorStatistics().getDocumentsVisited());
- assertEquals(1024000, reply.getVisitorStatistics().getBytesVisited());
- assertEquals(123, reply.getVisitorStatistics().getDocumentsReturned());
- assertEquals(512000, reply.getVisitorStatistics().getBytesReturned());
- assertEquals(456, reply.getVisitorStatistics().getSecondPassDocumentsReturned());
- assertEquals(789100, reply.getVisitorStatistics().getSecondPassBytesReturned());
- }
- }
- }
-
- public class testDestroyVisitorReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("DestroyVisitorReply", DocumentProtocol.REPLY_DESTROYVISITOR);
- }
- }
-
- public class testDocumentListReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("DocumentListReply", DocumentProtocol.REPLY_DOCUMENTLIST);
- }
- }
-
- public class testDocumentSummaryReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("DocumentSummaryReply", DocumentProtocol.REPLY_DOCUMENTSUMMARY);
- }
- }
-
- public class testEmptyBucketsReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("EmptyBucketsReply", DocumentProtocol.REPLY_EMPTYBUCKETS);
- }
- }
-
- public class testDestroyVisitorMessage implements RunnableTest {
-
- @Override
- public void run() {
- DestroyVisitorMessage msg = new DestroyVisitorMessage("myvisitor");
- assertEquals(BASE_MESSAGE_LENGTH + 17, serialize("DestroyVisitorMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (DestroyVisitorMessage)deserialize("DestroyVisitorMessage", DocumentProtocol.MESSAGE_DESTROYVISITOR, lang);
- assertEquals("myvisitor", msg.getInstanceId());
- }
- }
- }
-
- public class testDocumentListMessage implements RunnableTest {
-
- @Override
- public void run() {
- DocumentListMessage msg = (DocumentListMessage)deserialize("DocumentListMessage", DocumentProtocol.MESSAGE_DOCUMENTLIST, Language.CPP);
- assertEquals("userdoc:scheme:1234:", msg.getDocuments().get(0).getDocument().getId().toString());
- assertEquals(1234, msg.getDocuments().get(0).getTimestamp());
- assertFalse(msg.getDocuments().get(0).isRemoveEntry());
-
- assertEquals(BASE_MESSAGE_LENGTH + 63, serialize("DocumentListMessage", msg));
- msg = (DocumentListMessage)deserialize("DocumentListMessage", DocumentProtocol.MESSAGE_DOCUMENTLIST, Language.JAVA);
- assertEquals("userdoc:scheme:1234:", msg.getDocuments().get(0).getDocument().getId().toString());
- assertEquals(1234, msg.getDocuments().get(0).getTimestamp());
- assertFalse(msg.getDocuments().get(0).isRemoveEntry());
-
- }
- }
-
- public class testEmptyBucketsMessage implements RunnableTest {
-
- @Override
- public void run() {
- List<BucketId> bids = new ArrayList<>();
- for (int i = 0; i < 13; ++i) {
- bids.add(new BucketId(16, i));
- }
-
- EmptyBucketsMessage ebm = new EmptyBucketsMessage(bids);
- assertEquals(BASE_MESSAGE_LENGTH + 112, serialize("EmptyBucketsMessage", ebm));
- for (Language lang : LANGUAGES) {
- ebm = (EmptyBucketsMessage)deserialize("EmptyBucketsMessage", DocumentProtocol.MESSAGE_EMPTYBUCKETS, lang);
- for (int i = 0; i < 13; ++i) {
- assertEquals(new BucketId(16, i), ebm.getBucketIds().get(i));
- }
- }
- }
- }
-
- public class testDocumentSummaryMessage implements RunnableTest {
-
- @Override
- public void run() {
- try {
- FileInputStream stream = new FileInputStream(getPath("5-cpp-DocumentSummaryMessage-1.dat"));
- byte[] data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- Routable routable = decode(data);
- assertTrue(routable instanceof DocumentSummaryMessage);
-
- DocumentSummaryMessage msg = (DocumentSummaryMessage)routable;
- assertEquals(0, msg.getResult().getSummaryCount());
-
- stream = new FileInputStream(getPath("5-cpp-DocumentSummaryMessage-2.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof DocumentSummaryMessage);
-
- msg = (DocumentSummaryMessage)routable;
- assertEquals(2, msg.getResult().getSummaryCount());
- com.yahoo.vdslib.DocumentSummary.Summary s = msg.getResult().getSummary(0);
- assertEquals("doc1", s.getDocId());
- byte[] b = s.getSummary();
- assertEquals(8, b.length);
- byte[] c = { 's', 'u', 'm', 'm', 'a', 'r', 'y', '1' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(c[i], b[i]);
- }
-
- s = msg.getResult().getSummary(1);
- assertEquals("aoc17", s.getDocId());
- b = s.getSummary();
- assertEquals(9, b.length);
- byte[] d = { 's', 'u', 'm', 'm', 'a', 'r', 'y', '4', '5' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(d[i], b[i]);
- }
-
- stream = new FileInputStream(getPath("5-cpp-DocumentSummaryMessage-3.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof DocumentSummaryMessage);
-
- msg = (DocumentSummaryMessage)routable;
- assertEquals(2, msg.getResult().getSummaryCount());
-
- s = msg.getResult().getSummary(0);
- assertEquals("aoc17", s.getDocId());
- b = s.getSummary();
- assertEquals(9, b.length);
- byte[] e = { 's', 'u', 'm', 'm', 'a', 'r', 'y', '4', '5' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(e[i], b[i]);
- }
-
- s = msg.getResult().getSummary(1);
- assertEquals("doc1", s.getDocId());
- b = s.getSummary();
- assertEquals(8, b.length);
- byte[] f = { 's', 'u', 'm', 'm', 'a', 'r', 'y', '1' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(f[i], b[i]);
- }
- } catch (IOException e) {
- fail(e.toString());
- }
- }
- }
-
-
- public class testGetDocumentMessage implements RunnableTest {
-
- @Override
- @SuppressWarnings("deprecation")
- public void run() {
- GetDocumentMessage msg = new GetDocumentMessage(new DocumentId("doc:scheme:"));
- assertEquals(BASE_MESSAGE_LENGTH + 20, serialize("GetDocumentMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (GetDocumentMessage)deserialize("GetDocumentMessage", DocumentProtocol.MESSAGE_GETDOCUMENT, lang);
- assertEquals("doc:scheme:", msg.getDocumentId().toString());
- }
- }
- }
-
-
- public class testRemoveDocumentMessage implements RunnableTest {
-
- @Override
- public void run() {
- RemoveDocumentMessage msg = new RemoveDocumentMessage(new DocumentId("doc:scheme:"));
- assertEquals(BASE_MESSAGE_LENGTH + 16, serialize("RemoveDocumentMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (RemoveDocumentMessage)deserialize("RemoveDocumentMessage", DocumentProtocol.MESSAGE_REMOVEDOCUMENT, lang);
- assertEquals("doc:scheme:", msg.getDocumentId().toString());
- }
- }
- }
-
- public class testMapVisitorMessage implements RunnableTest {
-
- @Override
- public void run() {
- MapVisitorMessage msg = (MapVisitorMessage)deserialize("MapVisitorMessage", DocumentProtocol.MESSAGE_MAPVISITOR, Language.CPP);
- assertEquals("3", msg.getData().get("foo"));
- assertEquals("5", msg.getData().get("bar"));
-
- assertEquals(BASE_MESSAGE_LENGTH + 32, serialize("MapVisitorMessage", msg));
-
- msg = (MapVisitorMessage)deserialize("MapVisitorMessage", DocumentProtocol.MESSAGE_MAPVISITOR, Language.JAVA);
- assertEquals("3", msg.getData().get("foo"));
- assertEquals("5", msg.getData().get("bar"));
- }
- }
-
-
- public class testVisitorInfoMessage implements RunnableTest {
-
- @Override
- public void run() {
- VisitorInfoMessage msg = new VisitorInfoMessage();
- msg.getFinishedBuckets().add(new BucketId(16, 1));
- msg.getFinishedBuckets().add(new BucketId(16, 2));
- msg.getFinishedBuckets().add(new BucketId(16, 4));
- msg.setErrorMessage("error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6");
- assertEquals(BASE_MESSAGE_LENGTH + 67, serialize("VisitorInfoMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (VisitorInfoMessage)deserialize("VisitorInfoMessage", DocumentProtocol.MESSAGE_VISITORINFO, lang);
- assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 1)));
- assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 2)));
- assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 4)));
- assertEquals("error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6", msg.getErrorMessage());
- }
- }
- }
-
- public class testSearchResultMessage implements RunnableTest {
-
- @Override
- public void run() throws Exception {
- FileInputStream stream = new FileInputStream(getPath("5-cpp-SearchResultMessage-1.dat"));
- byte[] data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- Routable routable = decode(data);
- assertTrue(routable instanceof SearchResultMessage);
-
- SearchResultMessage msg = (SearchResultMessage)routable;
- assertEquals(0, msg.getResult().getHitCount());
-
- stream = new FileInputStream(getPath("5-cpp-SearchResultMessage-2.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof SearchResultMessage);
-
- msg = (SearchResultMessage)routable;
- assertEquals(2, msg.getResult().getHitCount());
- com.yahoo.vdslib.SearchResult.Hit h = msg.getResult().getHit(0);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
- h = msg.getResult().getHit(1);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
-
- stream = new FileInputStream(getPath("5-cpp-SearchResultMessage-3.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof SearchResultMessage);
-
- msg = (SearchResultMessage)routable;
- assertEquals(2, msg.getResult().getHitCount());
- h = msg.getResult().getHit(0);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
- h = msg.getResult().getHit(1);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
-
- stream = new FileInputStream(getPath("5-cpp-SearchResultMessage-4.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof SearchResultMessage);
-
- msg = (SearchResultMessage)routable;
- assertEquals(3, msg.getResult().getHitCount());
- h = msg.getResult().getHit(0);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
- byte[] b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] e = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(e[i], b[i]);
- }
- h = msg.getResult().getHit(1);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
- b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] d = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(d[i], b[i]);
- }
- h = msg.getResult().getHit(2);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(90.0, h.getRank(), 1E-6);
- assertEquals("doc18", h.getDocId());
- b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] c = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(c[i], b[i]);
- }
- }
- }
-
- public class testPutDocumentMessage implements RunnableTest {
-
- @Override
- public void run() {
- PutDocumentMessage msg = new PutDocumentMessage(new DocumentPut(new Document(protocol.getDocumentTypeManager().getDocumentType("testdoc"), "doc:scheme:")));
- msg.setTimestamp(666);
- assertEquals(BASE_MESSAGE_LENGTH + 41, serialize("PutDocumentMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (PutDocumentMessage)deserialize("PutDocumentMessage", DocumentProtocol.MESSAGE_PUTDOCUMENT, lang);
- assertEquals("testdoc", msg.getDocumentPut().getDocument().getDataType().getName());
- assertEquals("doc:scheme:", msg.getDocumentPut().getDocument().getId().toString());
- assertEquals(666, msg.getTimestamp());
- }
- }
- }
-
- public class testPutDocumentReply implements RunnableTest {
-
- @Override
- public void run() {
- WriteDocumentReply reply = new WriteDocumentReply(DocumentProtocol.REPLY_PUTDOCUMENT);
- reply.setHighestModificationTimestamp(30);
-
- assertEquals(13, serialize("PutDocumentReply", reply));
-
- for (Language lang : LANGUAGES) {
- WriteDocumentReply obj = (WriteDocumentReply)deserialize("PutDocumentReply", DocumentProtocol.REPLY_PUTDOCUMENT, lang);
- assertNotNull(obj);
- assertEquals(30, obj.getHighestModificationTimestamp());
- }
- }
- }
-
- public class testUpdateDocumentMessage implements RunnableTest {
-
- @Override
- public void run() {
- DocumentType docType = protocol.getDocumentTypeManager().getDocumentType("testdoc");
- DocumentUpdate update = new DocumentUpdate(docType, new DocumentId("doc:scheme:"));
- update.addFieldPathUpdate(new RemoveFieldPathUpdate(docType, "intfield", "testdoc.intfield > 0"));
- UpdateDocumentMessage msg = new UpdateDocumentMessage(update);
- msg.setNewTimestamp(777);
- msg.setOldTimestamp(666);
-
- assertEquals(BASE_MESSAGE_LENGTH + 89, serialize("UpdateDocumentMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (UpdateDocumentMessage)deserialize("UpdateDocumentMessage", DocumentProtocol.MESSAGE_UPDATEDOCUMENT, lang);
- assertEquals(update, msg.getDocumentUpdate());
- assertEquals(777, msg.getNewTimestamp());
- assertEquals(666, msg.getOldTimestamp());
- }
- }
- }
-
- public class testUpdateDocumentReply implements RunnableTest {
-
- @Override
- public void run() {
- UpdateDocumentReply reply = new UpdateDocumentReply();
- reply.setHighestModificationTimestamp(30);
- reply.setWasFound(false);
-
- assertEquals(14, serialize("UpdateDocumentReply", reply));
-
- for (Language lang : LANGUAGES) {
- UpdateDocumentReply obj = (UpdateDocumentReply)deserialize("UpdateDocumentReply", DocumentProtocol.REPLY_UPDATEDOCUMENT, lang);
- assertNotNull(obj);
- assertEquals(30, reply.getHighestModificationTimestamp());
- assertEquals(false, obj.wasFound());
- }
- }
- }
-
- public class testVisitorInfoReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("VisitorInfoReply", DocumentProtocol.REPLY_VISITORINFO);
- }
- }
-
- public class testWrongDistributionReply implements RunnableTest {
-
- @Override
- public void run() {
- WrongDistributionReply reply = new WrongDistributionReply("distributor:3 storage:2");
- assertEquals(32, serialize("WrongDistributionReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (WrongDistributionReply)deserialize("WrongDistributionReply", DocumentProtocol.REPLY_WRONGDISTRIBUTION, lang);
- assertEquals("distributor:3 storage:2", reply.getSystemState());
- }
- }
- }
-
- public class testRemoveDocumentReply implements RunnableTest {
-
- @Override
- public void run() {
- RemoveDocumentReply reply = new RemoveDocumentReply();
- reply.setHighestModificationTimestamp(30);
- reply.setWasFound(false);
-
- assertEquals(14, serialize("RemoveDocumentReply", reply));
-
- for (Language lang : LANGUAGES) {
- RemoveDocumentReply obj = (RemoveDocumentReply)deserialize("RemoveDocumentReply", DocumentProtocol.REPLY_REMOVEDOCUMENT, lang);
- assertNotNull(obj);
- assertEquals(30, obj.getHighestModificationTimestamp());
- assertEquals(false, obj.wasFound());
- }
- }
- }
-
- public class testRemoveLocationReply implements RunnableTest {
-
- @Override
- public void run() {
- testDocumentReply("RemoveLocationReply", DocumentProtocol.REPLY_REMOVELOCATION);
- }
- }
-
- public class testSearchResultReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("SearchResultReply", DocumentProtocol.REPLY_SEARCHRESULT);
- }
- }
-
- public class testStatBucketReply implements RunnableTest {
-
- @Override
- public void run() {
- StatBucketReply msg = new StatBucketReply();
- msg.setResults("These are the votes of the Norwegian jury");
-
- assertEquals(50, serialize("StatBucketReply", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (StatBucketReply)deserialize("StatBucketReply", DocumentProtocol.REPLY_STATBUCKET, lang);
- assertEquals("These are the votes of the Norwegian jury", msg.getResults());
- }
- }
- }
-
- public class testBatchDocumentUpdateMessage implements RunnableTest {
-
- @Override
- public void run() {
- DocumentType docType = protocol.getDocumentTypeManager().getDocumentType("testdoc");
- BatchDocumentUpdateMessage msg = new BatchDocumentUpdateMessage(1234);
-
- {
- DocumentUpdate update = new DocumentUpdate(docType, new DocumentId("userdoc:footype:1234:foo"));
- update.addFieldPathUpdate(new RemoveFieldPathUpdate(docType, "intfield", "testdoc.intfield > 0"));
- msg.addUpdate(update);
- }
- {
- DocumentUpdate update = new DocumentUpdate(docType, new DocumentId("orderdoc(32,17):footype:1234:123456789:foo"));
- update.addFieldPathUpdate(new RemoveFieldPathUpdate(docType, "intfield", "testdoc.intfield > 0"));
- msg.addUpdate(update);
- }
-
- try {
- DocumentUpdate update = new DocumentUpdate(docType, new DocumentId("orderdoc:footype:5678:foo"));
- update.addFieldPathUpdate(new RemoveFieldPathUpdate(docType, "intfield", "testdoc.intfield > 0"));
- msg.addUpdate(update);
- fail();
- } catch (Exception e) {
-
- }
-
- try {
- DocumentUpdate update = new DocumentUpdate(docType, new DocumentId("groupdoc:footype:hable:foo"));
- update.addFieldPathUpdate(new RemoveFieldPathUpdate(docType, "intfield", "testdoc.intfield > 0"));
- msg.addUpdate(update);
- fail();
- } catch (Exception e) {
-
- }
-
- assertEquals(2, msg.getUpdates().size());
-
- assertEquals(BASE_MESSAGE_LENGTH + 202, serialize("BatchDocumentUpdateMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (BatchDocumentUpdateMessage)deserialize("BatchDocumentUpdateMessage", DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE, lang);
- assertEquals(2, msg.getUpdates().size());
- }
- }
- }
-
- public class testBatchDocumentUpdateReply implements RunnableTest {
-
- @Override
- public void run() {
- BatchDocumentUpdateReply reply = new BatchDocumentUpdateReply();
- reply.setHighestModificationTimestamp(30);
- reply.getDocumentsNotFound().add(false);
- reply.getDocumentsNotFound().add(true);
- reply.getDocumentsNotFound().add(true);
-
- assertEquals(20, serialize("BatchDocumentUpdateReply", reply));
-
- for (Language lang : LANGUAGES) {
- BatchDocumentUpdateReply obj = (BatchDocumentUpdateReply)deserialize("BatchDocumentUpdateReply", DocumentProtocol.REPLY_BATCHDOCUMENTUPDATE, lang);
- assertNotNull(obj);
- assertEquals(30, obj.getHighestModificationTimestamp());
- assertEquals(3, obj.getDocumentsNotFound().size());
- assertFalse(obj.getDocumentsNotFound().get(0));
- assertTrue(obj.getDocumentsNotFound().get(1));
- assertTrue(obj.getDocumentsNotFound().get(2));
- }
- }
- }
-
-
- public class testQueryResultReply implements RunnableTest {
-
- @Override
- public void run() {
- testVisitorReply("QueryResultReply", DocumentProtocol.REPLY_QUERYRESULT);
- }
- }
-
- public class testQueryResultMessage implements RunnableTest {
-
- @Override
- public void run() throws Exception {
- FileInputStream stream = new FileInputStream(getPath("5-cpp-QueryResultMessage-1.dat"));
- byte[] data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- Routable routable = decode(data);
- assertTrue(routable instanceof QueryResultMessage);
-
- QueryResultMessage msg = (QueryResultMessage)routable;
- assertEquals(0, msg.getResult().getHitCount());
-
- stream = new FileInputStream(getPath("5-cpp-QueryResultMessage-2.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof QueryResultMessage);
-
- msg = (QueryResultMessage)routable;
- assertEquals(2, msg.getResult().getHitCount());
- com.yahoo.vdslib.SearchResult.Hit h = msg.getResult().getHit(0);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
- h = msg.getResult().getHit(1);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
-
- stream = new FileInputStream(getPath("5-cpp-QueryResultMessage-3.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof QueryResultMessage);
-
- msg = (QueryResultMessage)routable;
- assertEquals(2, msg.getResult().getHitCount());
- h = msg.getResult().getHit(0);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
- h = msg.getResult().getHit(1);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
-
- stream = new FileInputStream(getPath("5-cpp-QueryResultMessage-4.dat"));
- data = new byte[stream.available()];
- assertEquals(data.length, stream.read(data));
-
- routable = decode(data);
- assertTrue(routable instanceof QueryResultMessage);
-
- msg = (QueryResultMessage)routable;
- assertEquals(3, msg.getResult().getHitCount());
- h = msg.getResult().getHit(0);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(89.0, h.getRank(), 1E-6);
- assertEquals("doc1", h.getDocId());
- byte[] b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] e = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(e[i], b[i]);
- }
- h = msg.getResult().getHit(1);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(109.0, h.getRank(), 1E-6);
- assertEquals("doc17", h.getDocId());
- b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] d = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(d[i], b[i]);
- }
- h = msg.getResult().getHit(2);
- assertTrue(h instanceof SearchResult.HitWithSortBlob);
- assertEquals(90.0, h.getRank(), 1E-6);
- assertEquals("doc18", h.getDocId());
- b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
- assertEquals(9, b.length);
- byte[] c = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' };
- for (int i = 0; i < b.length; i++) {
- assertEquals(c[i], b[i]);
- }
- }
- }
-
- public class testGetBucketListReply implements RunnableTest {
-
- public void run() {
- GetBucketListReply reply = new GetBucketListReply();
- reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(16, 123), "foo"));
- reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(17, 1123), "bar"));
- reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(18, 11123), "zoink"));
-
- assertEquals(56, serialize("GetBucketListReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (GetBucketListReply)deserialize("GetBucketListReply", DocumentProtocol.REPLY_GETBUCKETLIST, lang);
- assertEquals(reply.getBuckets().get(0), new GetBucketListReply.BucketInfo(new BucketId(16, 123), "foo"));
- assertEquals(reply.getBuckets().get(1), new GetBucketListReply.BucketInfo(new BucketId(17, 1123), "bar"));
- assertEquals(reply.getBuckets().get(2), new GetBucketListReply.BucketInfo(new BucketId(18, 11123), "zoink"));
- }
- }
- }
-
- public class testGetBucketStateReply implements RunnableTest {
-
- public void run() {
- GlobalId foo = new GlobalId(IdString.createIdString("doc:scheme:foo"));
- GlobalId bar = new GlobalId(IdString.createIdString("doc:scheme:bar"));
-
- GetBucketStateReply reply = new GetBucketStateReply();
- List<DocumentState> state = new ArrayList<>(2);
- state.add(new DocumentState(foo, 777, false));
- state.add(new DocumentState(bar, 888, true));
- reply.setBucketState(state);
- assertEquals(53, serialize("GetBucketStateReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (GetBucketStateReply)deserialize("GetBucketStateReply", DocumentProtocol.REPLY_GETBUCKETSTATE, lang);
- assertEquals(777, reply.getBucketState().get(0).getTimestamp());
- assertEquals(foo, reply.getBucketState().get(0).getGid());
- assertEquals(false, reply.getBucketState().get(0).isRemoveEntry());
- assertEquals(888, reply.getBucketState().get(1).getTimestamp());
- assertEquals(bar, reply.getBucketState().get(1).getGid());
- assertEquals(true, reply.getBucketState().get(1).isRemoveEntry());
- }
- }
- }
-
- public class testGetDocumentReply implements RunnableTest {
-
- public void run() {
- GetDocumentReply reply = new GetDocumentReply(new Document(protocol.getDocumentTypeManager().getDocumentType("testdoc"), "doc:scheme:"));
- assertEquals(43, serialize("GetDocumentReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (GetDocumentReply)deserialize("GetDocumentReply", DocumentProtocol.REPLY_GETDOCUMENT, lang);
- assertEquals("testdoc", reply.getDocument().getDataType().getName());
- assertEquals("doc:scheme:", reply.getDocument().getId().toString());
- }
- }
- }
-
- public class testMapVisitorReply implements RunnableTest {
-
- public void run() {
- testVisitorReply("MapVisitorReply", DocumentProtocol.REPLY_MAPVISITOR);
- }
- }
-
- protected void testDocumentReply(String filename, int type) {
- DocumentReply reply = new DocumentReply(type);
- assertEquals(5, serialize(filename, reply));
-
- for (Language lang : LANGUAGES) {
- reply = (DocumentReply)deserialize(filename, type, lang);
- assertNotNull(reply);
- }
- }
-
- protected void testVisitorReply(String filename, int type) {
- VisitorReply reply = new VisitorReply(type);
- assertEquals(5, serialize(filename, reply));
-
- for (Language lang : LANGUAGES) {
- reply = (VisitorReply)deserialize(filename, type, lang);
- assertNotNull(reply);
- }
- }
-
-}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java
deleted file mode 100644
index 862244236f8..00000000000
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages51TestCase.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.documentapi.messagebus.protocol.test;
-
-import com.yahoo.component.Version;
-import com.yahoo.document.BucketId;
-import com.yahoo.document.DocumentId;
-import com.yahoo.document.select.OrderingSpecification;
-import com.yahoo.documentapi.messagebus.protocol.CreateVisitorMessage;
-import com.yahoo.documentapi.messagebus.protocol.DocumentIgnoredReply;
-import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
-import com.yahoo.documentapi.messagebus.protocol.GetDocumentMessage;
-import com.yahoo.text.Utf8;
-
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Simon Thoresen Hult
- */
-public class Messages51TestCase extends Messages50TestCase {
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Setup
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- @Override
- protected void registerTests(Map<Integer, RunnableTest> out) {
- super.registerTests(out);
-
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
- out.put(DocumentProtocol.MESSAGE_CREATEVISITOR, new testCreateVisitorMessage());
- out.put(DocumentProtocol.MESSAGE_GETDOCUMENT, new testGetDocumentMessage());
- out.put(DocumentProtocol.REPLY_DOCUMENTIGNORED, new testDocumentIgnoredReply());
- }
-
- @Override
- protected Version version() {
- return new Version(5, 1);
- }
-
- @Override
- protected boolean shouldTestCoverage() {
- return true;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Tests
- //
- ////////////////////////////////////////////////////////////////////////////////
-
- protected static int BASE_MESSAGE_LENGTH = 5;
-
- public class testCreateVisitorMessage implements RunnableTest {
-
- @Override
- public void run() {
- CreateVisitorMessage msg = new CreateVisitorMessage("SomeLibrary", "myvisitor", "newyork", "london");
- msg.setDocumentSelection("true and false or true");
- msg.getParameters().put("myvar", Utf8.toBytes("somevalue"));
- msg.getParameters().put("anothervar", Utf8.toBytes("34"));
- msg.getBuckets().add(new BucketId(16, 1234));
- msg.setVisitRemoves(true);
- msg.setFieldSet("foo bar");
- msg.setVisitorOrdering(OrderingSpecification.DESCENDING);
- msg.setMaxBucketsPerVisitor(2);
- assertEquals(BASE_MESSAGE_LENGTH + 178, serialize("CreateVisitorMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (CreateVisitorMessage)deserialize("CreateVisitorMessage", DocumentProtocol.MESSAGE_CREATEVISITOR, lang);
- assertEquals("SomeLibrary", msg.getLibraryName());
- assertEquals("myvisitor", msg.getInstanceId());
- assertEquals("newyork", msg.getControlDestination());
- assertEquals("london", msg.getDataDestination());
- assertEquals("true and false or true", msg.getDocumentSelection());
- assertEquals(8, msg.getMaxPendingReplyCount());
- assertEquals(true, msg.getVisitRemoves());
- assertEquals("foo bar", msg.getFieldSet());
- assertEquals(false, msg.getVisitInconsistentBuckets());
- assertEquals(1, msg.getBuckets().size());
- assertEquals(new BucketId(16, 1234), msg.getBuckets().iterator().next());
- assertEquals("somevalue", Utf8.toString(msg.getParameters().get("myvar")));
- assertEquals("34", Utf8.toString(msg.getParameters().get("anothervar")));
- assertEquals(OrderingSpecification.DESCENDING, msg.getVisitorOrdering());
- assertEquals(2, msg.getMaxBucketsPerVisitor());
- }
- }
- }
-
- public class testGetDocumentMessage implements RunnableTest {
-
- @Override
- public void run() {
- GetDocumentMessage msg = new GetDocumentMessage(new DocumentId("doc:scheme:"), "foo bar");
- assertEquals(BASE_MESSAGE_LENGTH + 27, serialize("GetDocumentMessage", msg));
-
- for (Language lang : LANGUAGES) {
- msg = (GetDocumentMessage)deserialize("GetDocumentMessage", DocumentProtocol.MESSAGE_GETDOCUMENT, lang);
- assertEquals("doc:scheme:", msg.getDocumentId().toString());
- assertEquals("foo bar", msg.getFieldSet());
- }
- }
- }
-
- public class testDocumentIgnoredReply implements RunnableTest {
-
- @Override
- public void run() {
- DocumentIgnoredReply reply = new DocumentIgnoredReply();
- assertEquals(BASE_MESSAGE_LENGTH, serialize("DocumentIgnoredReply", reply));
-
- for (Language lang : LANGUAGES) {
- reply = (DocumentIgnoredReply)deserialize("DocumentIgnoredReply", DocumentProtocol.REPLY_DOCUMENTIGNORED, lang);
- }
- }
- }
-}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
index 1bda3ea3610..448c8fcb520 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages52TestCase.java
@@ -2,19 +2,108 @@
package com.yahoo.documentapi.messagebus.protocol.test;
import com.yahoo.component.Version;
-import com.yahoo.document.*;
+import com.yahoo.document.BucketId;
+import com.yahoo.document.Document;
+import com.yahoo.document.DocumentId;
+import com.yahoo.document.DocumentPut;
+import com.yahoo.document.DocumentType;
+import com.yahoo.document.DocumentUpdate;
+import com.yahoo.document.GlobalId;
+import com.yahoo.document.TestAndSetCondition;
import com.yahoo.document.fieldpathupdate.RemoveFieldPathUpdate;
-import com.yahoo.documentapi.messagebus.protocol.*;
+import com.yahoo.document.idstring.IdString;
+import com.yahoo.document.select.OrderingSpecification;
+import com.yahoo.documentapi.messagebus.protocol.CreateVisitorMessage;
+import com.yahoo.documentapi.messagebus.protocol.CreateVisitorReply;
+import com.yahoo.documentapi.messagebus.protocol.DestroyVisitorMessage;
+import com.yahoo.documentapi.messagebus.protocol.DocumentIgnoredReply;
+import com.yahoo.documentapi.messagebus.protocol.DocumentListMessage;
+import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
+import com.yahoo.documentapi.messagebus.protocol.DocumentReply;
+import com.yahoo.documentapi.messagebus.protocol.DocumentState;
+import com.yahoo.documentapi.messagebus.protocol.DocumentSummaryMessage;
+import com.yahoo.documentapi.messagebus.protocol.EmptyBucketsMessage;
+import com.yahoo.documentapi.messagebus.protocol.GetBucketListMessage;
+import com.yahoo.documentapi.messagebus.protocol.GetBucketListReply;
+import com.yahoo.documentapi.messagebus.protocol.GetBucketStateMessage;
+import com.yahoo.documentapi.messagebus.protocol.GetBucketStateReply;
+import com.yahoo.documentapi.messagebus.protocol.GetDocumentMessage;
+import com.yahoo.documentapi.messagebus.protocol.GetDocumentReply;
+import com.yahoo.documentapi.messagebus.protocol.MapVisitorMessage;
+import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage;
+import com.yahoo.documentapi.messagebus.protocol.QueryResultMessage;
+import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage;
+import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentReply;
+import com.yahoo.documentapi.messagebus.protocol.RemoveLocationMessage;
+import com.yahoo.documentapi.messagebus.protocol.SearchResultMessage;
+import com.yahoo.documentapi.messagebus.protocol.StatBucketMessage;
+import com.yahoo.documentapi.messagebus.protocol.StatBucketReply;
+import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentMessage;
+import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentReply;
+import com.yahoo.documentapi.messagebus.protocol.VisitorInfoMessage;
+import com.yahoo.documentapi.messagebus.protocol.VisitorReply;
+import com.yahoo.documentapi.messagebus.protocol.WriteDocumentReply;
+import com.yahoo.documentapi.messagebus.protocol.WrongDistributionReply;
+import com.yahoo.messagebus.Routable;
+import com.yahoo.text.Utf8;
+import com.yahoo.vdslib.SearchResult;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
/**
+ * @author Simon Thoresen Hult
* @author Vegard Sjonfjell
*/
-public class Messages52TestCase extends Messages51TestCase {
+public class Messages52TestCase extends MessagesTestBase {
+ @Override
+ protected void registerTests(Map<Integer, RunnableTest> out) {
+ // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
+ // version 5.2. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
+ out.put(DocumentProtocol.MESSAGE_CREATEVISITOR, new testCreateVisitorMessage());
+ out.put(DocumentProtocol.MESSAGE_DESTROYVISITOR, new testDestroyVisitorMessage());
+ out.put(DocumentProtocol.MESSAGE_DOCUMENTLIST, new testDocumentListMessage());
+ out.put(DocumentProtocol.MESSAGE_DOCUMENTSUMMARY, new testDocumentSummaryMessage());
+ out.put(DocumentProtocol.MESSAGE_EMPTYBUCKETS, new testEmptyBucketsMessage());
+ out.put(DocumentProtocol.MESSAGE_GETBUCKETLIST, new testGetBucketListMessage());
+ out.put(DocumentProtocol.MESSAGE_GETBUCKETSTATE, new testGetBucketStateMessage());
+ out.put(DocumentProtocol.MESSAGE_GETDOCUMENT, new testGetDocumentMessage());
+ out.put(DocumentProtocol.MESSAGE_MAPVISITOR, new testMapVisitorMessage());
+ out.put(DocumentProtocol.MESSAGE_PUTDOCUMENT, new testPutDocumentMessage());
+ out.put(DocumentProtocol.MESSAGE_QUERYRESULT, new testQueryResultMessage());
+ out.put(DocumentProtocol.MESSAGE_REMOVEDOCUMENT, new testRemoveDocumentMessage());
+ out.put(DocumentProtocol.MESSAGE_REMOVELOCATION, new testRemoveLocationMessage());
+ out.put(DocumentProtocol.MESSAGE_SEARCHRESULT, new testSearchResultMessage());
+ out.put(DocumentProtocol.MESSAGE_STATBUCKET, new testStatBucketMessage());
+ out.put(DocumentProtocol.MESSAGE_UPDATEDOCUMENT, new testUpdateDocumentMessage());
+ out.put(DocumentProtocol.MESSAGE_VISITORINFO, new testVisitorInfoMessage());
+ out.put(DocumentProtocol.REPLY_CREATEVISITOR, new testCreateVisitorReply());
+ out.put(DocumentProtocol.REPLY_DESTROYVISITOR, new testDestroyVisitorReply());
+ out.put(DocumentProtocol.REPLY_DOCUMENTIGNORED, new testDocumentIgnoredReply());
+ out.put(DocumentProtocol.REPLY_DOCUMENTLIST, new testDocumentListReply());
+ out.put(DocumentProtocol.REPLY_DOCUMENTSUMMARY, new testDocumentSummaryReply());
+ out.put(DocumentProtocol.REPLY_EMPTYBUCKETS, new testEmptyBucketsReply());
+ out.put(DocumentProtocol.REPLY_GETBUCKETLIST, new testGetBucketListReply());
+ out.put(DocumentProtocol.REPLY_GETBUCKETSTATE, new testGetBucketStateReply());
+ out.put(DocumentProtocol.REPLY_GETDOCUMENT, new testGetDocumentReply());
+ out.put(DocumentProtocol.REPLY_MAPVISITOR, new testMapVisitorReply());
+ out.put(DocumentProtocol.REPLY_PUTDOCUMENT, new testPutDocumentReply());
+ out.put(DocumentProtocol.REPLY_QUERYRESULT, new testQueryResultReply());
+ out.put(DocumentProtocol.REPLY_REMOVEDOCUMENT, new testRemoveDocumentReply());
+ out.put(DocumentProtocol.REPLY_REMOVELOCATION, new testRemoveLocationReply());
+ out.put(DocumentProtocol.REPLY_SEARCHRESULT, new testSearchResultReply());
+ out.put(DocumentProtocol.REPLY_STATBUCKET, new testStatBucketReply());
+ out.put(DocumentProtocol.REPLY_UPDATEDOCUMENT, new testUpdateDocumentReply());
+ out.put(DocumentProtocol.REPLY_VISITORINFO, new testVisitorInfoReply());
+ out.put(DocumentProtocol.REPLY_WRONGDISTRIBUTION, new testWrongDistributionReply());
+ }
@Override
protected Version version() {
@@ -26,21 +115,488 @@ public class Messages52TestCase extends Messages51TestCase {
return true;
}
- @Override
- protected void registerTests(Map<Integer, RunnableTest> out) {
- super.registerTests(out);
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ // Tests
+ //
+ ////////////////////////////////////////////////////////////////////////////////
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.2. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
+ protected static int BASE_MESSAGE_LENGTH = 5;
- out.put(DocumentProtocol.MESSAGE_PUTDOCUMENT, new testPutDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_UPDATEDOCUMENT, new testUpdateDocumentMessage());
- out.put(DocumentProtocol.MESSAGE_REMOVEDOCUMENT, new testRemoveDocumentMessage());
+ public class testRemoveLocationMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ {
+ RemoveLocationMessage msg = new RemoveLocationMessage("id.group == \"mygroup\"");
+ assertEquals(BASE_MESSAGE_LENGTH + 29, serialize("RemoveLocationMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (RemoveLocationMessage)deserialize("RemoveLocationMessage", DocumentProtocol.MESSAGE_REMOVELOCATION, lang);
+ assertEquals("id.group == \"mygroup\"", msg.getDocumentSelection());
+ }
+ }
+ }
+ }
+
+ public class testGetBucketListMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ GetBucketListMessage msg = new GetBucketListMessage(new BucketId(16, 123));
+ msg.setLoadType(loadTypes.getNameMap().get("foo"));
+ assertEquals(BASE_MESSAGE_LENGTH + 12, serialize("GetBucketListMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (GetBucketListMessage)deserialize("GetBucketListMessage", DocumentProtocol.MESSAGE_GETBUCKETLIST, lang);
+ assertEquals(new BucketId(16, 123), msg.getBucketId());
+ assertEquals("foo", msg.getLoadType().getName());
+ }
+ }
+ }
+
+
+ public class testStatBucketMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ StatBucketMessage msg = new StatBucketMessage(new BucketId(16, 123), "id.user=123");
+ msg.setLoadType(null);
+ assertEquals(BASE_MESSAGE_LENGTH + 27, serialize("StatBucketMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (StatBucketMessage)deserialize("StatBucketMessage", DocumentProtocol.MESSAGE_STATBUCKET, lang);
+ assertEquals(new BucketId(16, 123), msg.getBucketId());
+ assertEquals("id.user=123", msg.getDocumentSelection());
+ assertEquals("default", msg.getLoadType().getName());
+ }
+ }
+ }
+
+ public class testGetBucketStateMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ GetBucketStateMessage msg = new GetBucketStateMessage(new BucketId(16, 666));
+ assertEquals(BASE_MESSAGE_LENGTH + 12, serialize("GetBucketStateMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (GetBucketStateMessage)deserialize("GetBucketStateMessage", DocumentProtocol.MESSAGE_GETBUCKETSTATE, lang);
+ assertEquals(16, msg.getBucketId().getUsedBits());
+ assertEquals(4611686018427388570l, msg.getBucketId().getId());
+ }
+ }
+ }
+
+ public class testCreateVisitorMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ CreateVisitorMessage msg = new CreateVisitorMessage("SomeLibrary", "myvisitor", "newyork", "london");
+ msg.setDocumentSelection("true and false or true");
+ msg.getParameters().put("myvar", Utf8.toBytes("somevalue"));
+ msg.getParameters().put("anothervar", Utf8.toBytes("34"));
+ msg.getBuckets().add(new BucketId(16, 1234));
+ msg.setVisitRemoves(true);
+ msg.setFieldSet("foo bar");
+ msg.setVisitorOrdering(OrderingSpecification.DESCENDING);
+ msg.setMaxBucketsPerVisitor(2);
+ assertEquals(BASE_MESSAGE_LENGTH + 178, serialize("CreateVisitorMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (CreateVisitorMessage)deserialize("CreateVisitorMessage", DocumentProtocol.MESSAGE_CREATEVISITOR, lang);
+ assertEquals("SomeLibrary", msg.getLibraryName());
+ assertEquals("myvisitor", msg.getInstanceId());
+ assertEquals("newyork", msg.getControlDestination());
+ assertEquals("london", msg.getDataDestination());
+ assertEquals("true and false or true", msg.getDocumentSelection());
+ assertEquals(8, msg.getMaxPendingReplyCount());
+ assertEquals(true, msg.getVisitRemoves());
+ assertEquals("foo bar", msg.getFieldSet());
+ assertEquals(false, msg.getVisitInconsistentBuckets());
+ assertEquals(1, msg.getBuckets().size());
+ assertEquals(new BucketId(16, 1234), msg.getBuckets().iterator().next());
+ assertEquals("somevalue", Utf8.toString(msg.getParameters().get("myvar")));
+ assertEquals("34", Utf8.toString(msg.getParameters().get("anothervar")));
+ assertEquals(OrderingSpecification.DESCENDING, msg.getVisitorOrdering());
+ assertEquals(2, msg.getMaxBucketsPerVisitor());
+ }
+
+ msg.getBuckets().clear();
+
+ assertEquals("CreateVisitorMessage(" +
+ "No buckets, " +
+ "selection 'true and false or true', " +
+ "bucket space 'default', " +
+ "library SomeLibrary, including removes, " +
+ "get fields: foo bar" +
+ ")",
+ msg.toString());
+
+ msg.getBuckets().add(new BucketId(16, 1234));
+
+ assertEquals("CreateVisitorMessage(" +
+ "Bucket BucketId(0x40000000000004d2), " +
+ "selection 'true and false or true', " +
+ "bucket space 'default', " +
+ "library SomeLibrary, including removes, " +
+ "get fields: foo bar" +
+ ")",
+ msg.toString());
+
+ msg.getBuckets().add(new BucketId(16, 1235));
+ msg.getBuckets().add(new BucketId(16, 1236));
+ msg.getBuckets().add(new BucketId(16, 1237));
+ msg.getBuckets().add(new BucketId(16, 1238));
+ msg.setFromTimestamp(10001);
+ msg.setToTimestamp(20002);
+ msg.setVisitInconsistentBuckets(true);
+ assertEquals("CreateVisitorMessage(" +
+ "5 buckets: BucketId(0x40000000000004d2) BucketId(0x40000000000004d3) BucketId(0x40000000000004d4) ..., " +
+ "time 10001-20002, " +
+ "selection 'true and false or true', " +
+ "bucket space 'default', " +
+ "library SomeLibrary, including removes, " +
+ "get fields: foo bar, " +
+ "visit inconsistent buckets" +
+ ")",
+ msg.toString());
+ }
+ }
+
+ public class testCreateVisitorReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ CreateVisitorReply reply = new CreateVisitorReply(DocumentProtocol.REPLY_CREATEVISITOR);
+ reply.setLastBucket(new BucketId(16, 123));
+ reply.getVisitorStatistics().setBucketsVisited(3);
+ reply.getVisitorStatistics().setDocumentsVisited(1000);
+ reply.getVisitorStatistics().setBytesVisited(1024000);
+ reply.getVisitorStatistics().setDocumentsReturned(123);
+ reply.getVisitorStatistics().setBytesReturned(512000);
+ reply.getVisitorStatistics().setSecondPassDocumentsReturned(456);
+ reply.getVisitorStatistics().setSecondPassBytesReturned(789100);
+
+ assertEquals(65, serialize("CreateVisitorReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (CreateVisitorReply)deserialize("CreateVisitorReply", DocumentProtocol.REPLY_CREATEVISITOR, lang);
+ assertNotNull(reply);
+ assertEquals(new BucketId(16, 123), reply.getLastBucket());
+ assertEquals(3, reply.getVisitorStatistics().getBucketsVisited());
+ assertEquals(1000, reply.getVisitorStatistics().getDocumentsVisited());
+ assertEquals(1024000, reply.getVisitorStatistics().getBytesVisited());
+ assertEquals(123, reply.getVisitorStatistics().getDocumentsReturned());
+ assertEquals(512000, reply.getVisitorStatistics().getBytesReturned());
+ assertEquals(456, reply.getVisitorStatistics().getSecondPassDocumentsReturned());
+ assertEquals(789100, reply.getVisitorStatistics().getSecondPassBytesReturned());
+ }
+ }
+ }
+
+ public class testDestroyVisitorReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("DestroyVisitorReply", DocumentProtocol.REPLY_DESTROYVISITOR);
+ }
+ }
+
+ public class testDocumentIgnoredReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ DocumentIgnoredReply reply = new DocumentIgnoredReply();
+ assertEquals(BASE_MESSAGE_LENGTH, serialize("DocumentIgnoredReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (DocumentIgnoredReply)deserialize("DocumentIgnoredReply", DocumentProtocol.REPLY_DOCUMENTIGNORED, lang);
+ }
+ }
+ }
+
+ public class testDocumentListReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("DocumentListReply", DocumentProtocol.REPLY_DOCUMENTLIST);
+ }
+ }
+
+ public class testDocumentSummaryReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("DocumentSummaryReply", DocumentProtocol.REPLY_DOCUMENTSUMMARY);
+ }
+ }
+
+ public class testEmptyBucketsReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("EmptyBucketsReply", DocumentProtocol.REPLY_EMPTYBUCKETS);
+ }
+ }
+
+ public class testDestroyVisitorMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ DestroyVisitorMessage msg = new DestroyVisitorMessage("myvisitor");
+ assertEquals(BASE_MESSAGE_LENGTH + 17, serialize("DestroyVisitorMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (DestroyVisitorMessage)deserialize("DestroyVisitorMessage", DocumentProtocol.MESSAGE_DESTROYVISITOR, lang);
+ assertEquals("myvisitor", msg.getInstanceId());
+ }
+ }
+ }
+
+ public class testDocumentListMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ DocumentListMessage msg = (DocumentListMessage)deserialize("DocumentListMessage", DocumentProtocol.MESSAGE_DOCUMENTLIST, Language.CPP);
+ assertEquals("userdoc:scheme:1234:", msg.getDocuments().get(0).getDocument().getId().toString());
+ assertEquals(1234, msg.getDocuments().get(0).getTimestamp());
+ assertFalse(msg.getDocuments().get(0).isRemoveEntry());
+
+ assertEquals(BASE_MESSAGE_LENGTH + 63, serialize("DocumentListMessage", msg));
+ msg = (DocumentListMessage)deserialize("DocumentListMessage", DocumentProtocol.MESSAGE_DOCUMENTLIST, Language.JAVA);
+ assertEquals("userdoc:scheme:1234:", msg.getDocuments().get(0).getDocument().getId().toString());
+ assertEquals(1234, msg.getDocuments().get(0).getTimestamp());
+ assertFalse(msg.getDocuments().get(0).isRemoveEntry());
+
+ }
+ }
+
+ public class testEmptyBucketsMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ List<BucketId> bids = new ArrayList<>();
+ for (int i = 0; i < 13; ++i) {
+ bids.add(new BucketId(16, i));
+ }
+
+ EmptyBucketsMessage ebm = new EmptyBucketsMessage(bids);
+ assertEquals(BASE_MESSAGE_LENGTH + 112, serialize("EmptyBucketsMessage", ebm));
+ for (Language lang : LANGUAGES) {
+ ebm = (EmptyBucketsMessage)deserialize("EmptyBucketsMessage", DocumentProtocol.MESSAGE_EMPTYBUCKETS, lang);
+ for (int i = 0; i < 13; ++i) {
+ assertEquals(new BucketId(16, i), ebm.getBucketIds().get(i));
+ }
+ }
+ }
+ }
+
+ public class testDocumentSummaryMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ Routable routable = deserialize("DocumentSummaryMessage-1", DocumentProtocol.MESSAGE_DOCUMENTSUMMARY, Language.CPP);
+ assertTrue(routable instanceof DocumentSummaryMessage);
+
+ DocumentSummaryMessage msg = (DocumentSummaryMessage) routable;
+ assertEquals(0, msg.getResult().getSummaryCount());
+
+ routable = deserialize("DocumentSummaryMessage-2", DocumentProtocol.MESSAGE_DOCUMENTSUMMARY, Language.CPP);
+ assertTrue(routable instanceof DocumentSummaryMessage);
+
+ msg = (DocumentSummaryMessage) routable;
+ assertEquals(2, msg.getResult().getSummaryCount());
+ com.yahoo.vdslib.DocumentSummary.Summary s = msg.getResult().getSummary(0);
+ assertEquals("doc1", s.getDocId());
+ byte[] b = s.getSummary();
+ assertEquals(8, b.length);
+ byte[] c = {'s', 'u', 'm', 'm', 'a', 'r', 'y', '1'};
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(c[i], b[i]);
+ }
+
+ s = msg.getResult().getSummary(1);
+ assertEquals("aoc17", s.getDocId());
+ b = s.getSummary();
+ assertEquals(9, b.length);
+ byte[] d = {'s', 'u', 'm', 'm', 'a', 'r', 'y', '4', '5'};
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(d[i], b[i]);
+ }
+ routable = deserialize("DocumentSummaryMessage-3", DocumentProtocol.MESSAGE_DOCUMENTSUMMARY, Language.CPP);
+ assertTrue(routable instanceof DocumentSummaryMessage);
+
+ msg = (DocumentSummaryMessage) routable;
+ assertEquals(2, msg.getResult().getSummaryCount());
+
+ s = msg.getResult().getSummary(0);
+ assertEquals("aoc17", s.getDocId());
+ b = s.getSummary();
+ assertEquals(9, b.length);
+ byte[] e = {'s', 'u', 'm', 'm', 'a', 'r', 'y', '4', '5'};
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(e[i], b[i]);
+ }
+
+ s = msg.getResult().getSummary(1);
+ assertEquals("doc1", s.getDocId());
+ b = s.getSummary();
+ assertEquals(8, b.length);
+ byte[] f = {'s', 'u', 'm', 'm', 'a', 'r', 'y', '1'};
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(f[i], b[i]);
+ }
+ }
+ }
+
+
+ public class testGetDocumentMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ GetDocumentMessage msg = new GetDocumentMessage(new DocumentId("doc:scheme:"), "foo bar");
+ assertEquals(BASE_MESSAGE_LENGTH + 27, serialize("GetDocumentMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (GetDocumentMessage)deserialize("GetDocumentMessage", DocumentProtocol.MESSAGE_GETDOCUMENT, lang);
+ assertEquals("doc:scheme:", msg.getDocumentId().toString());
+ assertEquals("foo bar", msg.getFieldSet());
+ }
+ }
+ }
+
+
+ public class testRemoveDocumentMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ final RemoveDocumentMessage msg = new RemoveDocumentMessage(new DocumentId("doc:scheme:"));
+ msg.setCondition(new TestAndSetCondition(CONDITION_STRING));
+
+ assertEquals(BASE_MESSAGE_LENGTH + 16 + serializedLength(msg.getCondition().getSelection()), serialize("RemoveDocumentMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ final RemoveDocumentMessage deserializedMsg = (RemoveDocumentMessage)deserialize("RemoveDocumentMessage", DocumentProtocol.MESSAGE_REMOVEDOCUMENT, lang);
+ assertEquals(deserializedMsg.getDocumentId().toString(), msg.getDocumentId().toString());
+ }
+ }
+ }
+
+ public class testMapVisitorMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ MapVisitorMessage msg = (MapVisitorMessage)deserialize("MapVisitorMessage", DocumentProtocol.MESSAGE_MAPVISITOR, Language.CPP);
+ assertEquals("3", msg.getData().get("foo"));
+ assertEquals("5", msg.getData().get("bar"));
+
+ assertEquals(BASE_MESSAGE_LENGTH + 32, serialize("MapVisitorMessage", msg));
+
+ msg = (MapVisitorMessage)deserialize("MapVisitorMessage", DocumentProtocol.MESSAGE_MAPVISITOR, Language.JAVA);
+ assertEquals("3", msg.getData().get("foo"));
+ assertEquals("5", msg.getData().get("bar"));
+ }
+ }
+
+
+ public class testVisitorInfoMessage implements RunnableTest {
+
+ @Override
+ public void run() {
+ VisitorInfoMessage msg = new VisitorInfoMessage();
+ msg.getFinishedBuckets().add(new BucketId(16, 1));
+ msg.getFinishedBuckets().add(new BucketId(16, 2));
+ msg.getFinishedBuckets().add(new BucketId(16, 4));
+ msg.setErrorMessage("error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6");
+ assertEquals(BASE_MESSAGE_LENGTH + 67, serialize("VisitorInfoMessage", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (VisitorInfoMessage)deserialize("VisitorInfoMessage", DocumentProtocol.MESSAGE_VISITORINFO, lang);
+ assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 1)));
+ assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 2)));
+ assertTrue(msg.getFinishedBuckets().contains(new BucketId(16, 4)));
+ assertEquals("error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6", msg.getErrorMessage());
+ }
+ }
+ }
+
+ public class testSearchResultMessage implements RunnableTest {
+
+ @Override
+ public void run() throws Exception {
+ Routable routable = deserialize("SearchResultMessage-1", DocumentProtocol.MESSAGE_SEARCHRESULT, Language.CPP);
+ assertTrue(routable instanceof SearchResultMessage);
+
+ SearchResultMessage msg = (SearchResultMessage)routable;
+ assertEquals(0, msg.getResult().getHitCount());
+
+ routable = deserialize("SearchResultMessage-2", DocumentProtocol.MESSAGE_SEARCHRESULT, Language.CPP);
+ assertTrue(routable instanceof SearchResultMessage);
+
+ msg = (SearchResultMessage)routable;
+ assertEquals(2, msg.getResult().getHitCount());
+ com.yahoo.vdslib.SearchResult.Hit h = msg.getResult().getHit(0);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+ h = msg.getResult().getHit(1);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+
+ routable = deserialize("SearchResultMessage-3", DocumentProtocol.MESSAGE_SEARCHRESULT, Language.CPP);
+ assertTrue(routable instanceof SearchResultMessage);
+
+ msg = (SearchResultMessage)routable;
+ assertEquals(2, msg.getResult().getHitCount());
+ h = msg.getResult().getHit(0);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+ h = msg.getResult().getHit(1);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+
+ routable = deserialize("SearchResultMessage-4", DocumentProtocol.MESSAGE_SEARCHRESULT, Language.CPP);
+ assertTrue(routable instanceof SearchResultMessage);
+
+ msg = (SearchResultMessage)routable;
+ assertEquals(3, msg.getResult().getHitCount());
+ h = msg.getResult().getHit(0);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+ byte[] b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] e = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(e[i], b[i]);
+ }
+ h = msg.getResult().getHit(1);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+ b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] d = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(d[i], b[i]);
+ }
+ h = msg.getResult().getHit(2);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(90.0, h.getRank(), 1E-6);
+ assertEquals("doc18", h.getDocId());
+ b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] c = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(c[i], b[i]);
+ }
+ }
}
private static String CONDITION_STRING = "There's just one condition";
public class testPutDocumentMessage implements RunnableTest {
+
@Override
public void run() {
PutDocumentMessage msg = new PutDocumentMessage(new DocumentPut(new Document(protocol.getDocumentTypeManager().getDocumentType("testdoc"), "doc:scheme:")));
@@ -60,7 +616,25 @@ public class Messages52TestCase extends Messages51TestCase {
}
}
+ public class testPutDocumentReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ WriteDocumentReply reply = new WriteDocumentReply(DocumentProtocol.REPLY_PUTDOCUMENT);
+ reply.setHighestModificationTimestamp(30);
+
+ assertEquals(13, serialize("PutDocumentReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ WriteDocumentReply obj = (WriteDocumentReply)deserialize("PutDocumentReply", DocumentProtocol.REPLY_PUTDOCUMENT, lang);
+ assertNotNull(obj);
+ assertEquals(30, obj.getHighestModificationTimestamp());
+ }
+ }
+ }
+
public class testUpdateDocumentMessage implements RunnableTest {
+
@Override
public void run() {
DocumentType docType = protocol.getDocumentTypeManager().getDocumentType("testdoc");
@@ -84,21 +658,263 @@ public class Messages52TestCase extends Messages51TestCase {
}
}
- public class testRemoveDocumentMessage implements RunnableTest {
+ public class testUpdateDocumentReply implements RunnableTest {
+
@Override
public void run() {
- final RemoveDocumentMessage msg = new RemoveDocumentMessage(new DocumentId("doc:scheme:"));
- msg.setCondition(new TestAndSetCondition(CONDITION_STRING));
+ UpdateDocumentReply reply = new UpdateDocumentReply();
+ reply.setHighestModificationTimestamp(30);
+ reply.setWasFound(false);
- assertEquals(BASE_MESSAGE_LENGTH + 16 + serializedLength(msg.getCondition().getSelection()), serialize("RemoveDocumentMessage", msg));
+ assertEquals(14, serialize("UpdateDocumentReply", reply));
for (Language lang : LANGUAGES) {
- final RemoveDocumentMessage deserializedMsg = (RemoveDocumentMessage)deserialize("RemoveDocumentMessage", DocumentProtocol.MESSAGE_REMOVEDOCUMENT, lang);
- assertEquals(deserializedMsg.getDocumentId().toString(), msg.getDocumentId().toString());
+ UpdateDocumentReply obj = (UpdateDocumentReply)deserialize("UpdateDocumentReply", DocumentProtocol.REPLY_UPDATEDOCUMENT, lang);
+ assertNotNull(obj);
+ assertEquals(30, reply.getHighestModificationTimestamp());
+ assertEquals(false, obj.wasFound());
+ }
+ }
+ }
+
+ public class testVisitorInfoReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("VisitorInfoReply", DocumentProtocol.REPLY_VISITORINFO);
+ }
+ }
+
+ public class testWrongDistributionReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ WrongDistributionReply reply = new WrongDistributionReply("distributor:3 storage:2");
+ assertEquals(32, serialize("WrongDistributionReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (WrongDistributionReply)deserialize("WrongDistributionReply", DocumentProtocol.REPLY_WRONGDISTRIBUTION, lang);
+ assertEquals("distributor:3 storage:2", reply.getSystemState());
+ }
+ }
+ }
+
+ public class testRemoveDocumentReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ RemoveDocumentReply reply = new RemoveDocumentReply();
+ reply.setHighestModificationTimestamp(30);
+ reply.setWasFound(false);
+
+ assertEquals(14, serialize("RemoveDocumentReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ RemoveDocumentReply obj = (RemoveDocumentReply)deserialize("RemoveDocumentReply", DocumentProtocol.REPLY_REMOVEDOCUMENT, lang);
+ assertNotNull(obj);
+ assertEquals(30, obj.getHighestModificationTimestamp());
+ assertEquals(false, obj.wasFound());
+ }
+ }
+ }
+
+ public class testRemoveLocationReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testDocumentReply("RemoveLocationReply", DocumentProtocol.REPLY_REMOVELOCATION);
+ }
+ }
+
+ public class testSearchResultReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("SearchResultReply", DocumentProtocol.REPLY_SEARCHRESULT);
+ }
+ }
+
+ public class testStatBucketReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ StatBucketReply msg = new StatBucketReply();
+ msg.setResults("These are the votes of the Norwegian jury");
+
+ assertEquals(50, serialize("StatBucketReply", msg));
+
+ for (Language lang : LANGUAGES) {
+ msg = (StatBucketReply)deserialize("StatBucketReply", DocumentProtocol.REPLY_STATBUCKET, lang);
+ assertEquals("These are the votes of the Norwegian jury", msg.getResults());
+ }
+ }
+ }
+
+ public class testQueryResultReply implements RunnableTest {
+
+ @Override
+ public void run() {
+ testVisitorReply("QueryResultReply", DocumentProtocol.REPLY_QUERYRESULT);
+ }
+ }
+
+ public class testQueryResultMessage implements RunnableTest {
+
+ @Override
+ public void run() throws Exception {
+ Routable routable = deserialize("QueryResultMessage-1", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
+ assertTrue(routable instanceof QueryResultMessage);
+
+ QueryResultMessage msg = (QueryResultMessage)routable;
+ assertEquals(0, msg.getResult().getHitCount());
+
+ routable = deserialize("QueryResultMessage-2", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
+ assertTrue(routable instanceof QueryResultMessage);
+
+ msg = (QueryResultMessage)routable;
+ assertEquals(2, msg.getResult().getHitCount());
+ com.yahoo.vdslib.SearchResult.Hit h = msg.getResult().getHit(0);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+ h = msg.getResult().getHit(1);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+
+ routable = deserialize("QueryResultMessage-3", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
+ assertTrue(routable instanceof QueryResultMessage);
+
+ msg = (QueryResultMessage)routable;
+ assertEquals(2, msg.getResult().getHitCount());
+ h = msg.getResult().getHit(0);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+ h = msg.getResult().getHit(1);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+
+ routable = deserialize("QueryResultMessage-4", DocumentProtocol.MESSAGE_QUERYRESULT, Language.CPP);
+ assertTrue(routable instanceof QueryResultMessage);
+
+ msg = (QueryResultMessage)routable;
+ assertEquals(3, msg.getResult().getHitCount());
+ h = msg.getResult().getHit(0);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(89.0, h.getRank(), 1E-6);
+ assertEquals("doc1", h.getDocId());
+ byte[] b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] e = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '2' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(e[i], b[i]);
+ }
+ h = msg.getResult().getHit(1);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(109.0, h.getRank(), 1E-6);
+ assertEquals("doc17", h.getDocId());
+ b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] d = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '1' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(d[i], b[i]);
+ }
+ h = msg.getResult().getHit(2);
+ assertTrue(h instanceof SearchResult.HitWithSortBlob);
+ assertEquals(90.0, h.getRank(), 1E-6);
+ assertEquals("doc18", h.getDocId());
+ b = ((SearchResult.HitWithSortBlob)h).getSortBlob();
+ assertEquals(9, b.length);
+ byte[] c = { 's', 'o', 'r', 't', 'd', 'a', 't', 'a', '3' };
+ for (int i = 0; i < b.length; i++) {
+ assertEquals(c[i], b[i]);
+ }
+ }
+ }
+
+ public class testGetBucketListReply implements RunnableTest {
+
+ public void run() {
+ GetBucketListReply reply = new GetBucketListReply();
+ reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(16, 123), "foo"));
+ reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(17, 1123), "bar"));
+ reply.getBuckets().add(new GetBucketListReply.BucketInfo(new BucketId(18, 11123), "zoink"));
+
+ assertEquals(56, serialize("GetBucketListReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (GetBucketListReply)deserialize("GetBucketListReply", DocumentProtocol.REPLY_GETBUCKETLIST, lang);
+ assertEquals(reply.getBuckets().get(0), new GetBucketListReply.BucketInfo(new BucketId(16, 123), "foo"));
+ assertEquals(reply.getBuckets().get(1), new GetBucketListReply.BucketInfo(new BucketId(17, 1123), "bar"));
+ assertEquals(reply.getBuckets().get(2), new GetBucketListReply.BucketInfo(new BucketId(18, 11123), "zoink"));
+ }
+ }
+ }
+
+ public class testGetBucketStateReply implements RunnableTest {
+
+ public void run() {
+ GlobalId foo = new GlobalId(IdString.createIdString("doc:scheme:foo"));
+ GlobalId bar = new GlobalId(IdString.createIdString("doc:scheme:bar"));
+
+ GetBucketStateReply reply = new GetBucketStateReply();
+ List<DocumentState> state = new ArrayList<>(2);
+ state.add(new DocumentState(foo, 777, false));
+ state.add(new DocumentState(bar, 888, true));
+ reply.setBucketState(state);
+ assertEquals(53, serialize("GetBucketStateReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (GetBucketStateReply)deserialize("GetBucketStateReply", DocumentProtocol.REPLY_GETBUCKETSTATE, lang);
+ assertEquals(777, reply.getBucketState().get(0).getTimestamp());
+ assertEquals(foo, reply.getBucketState().get(0).getGid());
+ assertEquals(false, reply.getBucketState().get(0).isRemoveEntry());
+ assertEquals(888, reply.getBucketState().get(1).getTimestamp());
+ assertEquals(bar, reply.getBucketState().get(1).getGid());
+ assertEquals(true, reply.getBucketState().get(1).isRemoveEntry());
}
}
}
+ public class testGetDocumentReply implements RunnableTest {
+
+ public void run() {
+ GetDocumentReply reply = new GetDocumentReply(new Document(protocol.getDocumentTypeManager().getDocumentType("testdoc"), "doc:scheme:"));
+ assertEquals(43, serialize("GetDocumentReply", reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (GetDocumentReply)deserialize("GetDocumentReply", DocumentProtocol.REPLY_GETDOCUMENT, lang);
+ assertEquals("testdoc", reply.getDocument().getDataType().getName());
+ assertEquals("doc:scheme:", reply.getDocument().getId().toString());
+ }
+ }
+ }
+
+ public class testMapVisitorReply implements RunnableTest {
+
+ public void run() {
+ testVisitorReply("MapVisitorReply", DocumentProtocol.REPLY_MAPVISITOR);
+ }
+ }
+
+ protected void testDocumentReply(String filename, int type) {
+ DocumentReply reply = new DocumentReply(type);
+ assertEquals(5, serialize(filename, reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (DocumentReply)deserialize(filename, type, lang);
+ assertNotNull(reply);
+ }
+ }
+
+ protected void testVisitorReply(String filename, int type) {
+ VisitorReply reply = new VisitorReply(type);
+ assertEquals(5, serialize(filename, reply));
+
+ for (Language lang : LANGUAGES) {
+ reply = (VisitorReply)deserialize(filename, type, lang);
+ assertNotNull(reply);
+ }
+ }
+
static int serializedLength(String str) {
return 4 + str.length();
}
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/RoutableFactoryTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/RoutableFactoryTestCase.java
index 89698e44705..59cbf5b65ae 100755
--- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/RoutableFactoryTestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/RoutableFactoryTestCase.java
@@ -8,7 +8,7 @@ import com.yahoo.document.serialization.DocumentSerializer;
import com.yahoo.documentapi.messagebus.protocol.DocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.documentapi.messagebus.protocol.DocumentReply;
-import com.yahoo.documentapi.messagebus.protocol.RoutableFactories50;
+import com.yahoo.documentapi.messagebus.protocol.RoutableFactories52;
import com.yahoo.jrt.ListenFailedException;
import com.yahoo.jrt.slobrok.server.Slobrok;
import com.yahoo.messagebus.DestinationSession;
@@ -130,7 +130,7 @@ public class RoutableFactoryTestCase {
assertFalse(reply.hasErrors());
}
- private static class MyMessageFactory extends RoutableFactories50.DocumentMessageFactory {
+ private static class MyMessageFactory extends RoutableFactories52.DocumentMessageFactory {
@Override
protected DocumentMessage doDecode(DocumentDeserializer buf) {
@@ -143,7 +143,7 @@ public class RoutableFactoryTestCase {
}
}
- private static class MyReplyFactory extends RoutableFactories50.DocumentReplyFactory {
+ private static class MyReplyFactory extends RoutableFactories52.DocumentReplyFactory {
@Override
protected DocumentReply doDecode(DocumentDeserializer buf) {
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java
index ed862b75828..6160c9deca6 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java
@@ -33,7 +33,7 @@ public abstract class AbstractDocumentApiTestCase {
@Test
public void requireThatSyncSessionWorks() {
- SyncSession session = access().createSyncSession(new SyncParameters());
+ SyncSession session = access().createSyncSession(new SyncParameters.Builder().build());
DocumentType type = access().getDocumentTypeManager().getDocumentType("music");
Document doc1 = new Document(type, new DocumentId("doc:music:1"));
diff --git a/documentapi/src/tests/messagebus/messagebus_test.cpp b/documentapi/src/tests/messagebus/messagebus_test.cpp
index dff3f3f1bac..22a46951ecc 100644
--- a/documentapi/src/tests/messagebus/messagebus_test.cpp
+++ b/documentapi/src/tests/messagebus/messagebus_test.cpp
@@ -4,6 +4,7 @@
#include <vespa/document/datatype/documenttype.h>
#include <vespa/document/fieldvalue/document.h>
#include <vespa/document/repo/documenttyperepo.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/documentapi/documentapi.h>
#include <vespa/documentapi/loadtypes/loadtypeset.h>
#include <vespa/vdslib/state/clusterstate.h>
@@ -69,10 +70,10 @@ void Test::testMessage() {
LoadTypeSet set;
DocumentProtocol protocol(set, _repo);
- Blob blob = protocol.encode(vespalib::Version(5,0), upd1);
+ Blob blob = protocol.encode(vespalib::Version(5,115), upd1);
EXPECT_TRUE(blob.size() > 0);
- Routable::UP dec1 = protocol.decode(vespalib::Version(5,0), blob);
+ Routable::UP dec1 = protocol.decode(vespalib::Version(5,115), blob);
EXPECT_TRUE(dec1.get() != NULL);
EXPECT_TRUE(dec1->isReply() == false);
EXPECT_TRUE(dec1->getType() == DocumentProtocol::MESSAGE_UPDATEDOCUMENT);
diff --git a/documentapi/src/tests/messages/CMakeLists.txt b/documentapi/src/tests/messages/CMakeLists.txt
index b762eaca657..576557968e8 100644
--- a/documentapi/src/tests/messages/CMakeLists.txt
+++ b/documentapi/src/tests/messages/CMakeLists.txt
@@ -1,28 +1,7 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-vespa_add_executable(documentapi_messages50_test_app TEST
- SOURCES
- testbase.cpp
- messages50test.cpp
- messages50app.cpp
- DEPENDS
- documentapi
-)
-vespa_add_test(NAME documentapi_messages50_test_app COMMAND documentapi_messages50_test_app)
-vespa_add_executable(documentapi_messages51_test_app TEST
- SOURCES
- testbase.cpp
- messages50test.cpp
- messages51test.cpp
- messages51app.cpp
- DEPENDS
- documentapi
-)
-vespa_add_test(NAME documentapi_messages51_test_app COMMAND documentapi_messages51_test_app)
vespa_add_executable(documentapi_messages52_test_app TEST
SOURCES
testbase.cpp
- messages50test.cpp
- messages51test.cpp
messages52test.cpp
messages52app.cpp
DEPENDS
@@ -32,8 +11,6 @@ vespa_add_test(NAME documentapi_messages52_test_app COMMAND documentapi_messages
vespa_add_executable(documentapi_messages60_test_app TEST
SOURCES
testbase.cpp
- messages50test.cpp
- messages51test.cpp
messages52test.cpp
messages60test.cpp
messages60app.cpp
diff --git a/documentapi/src/tests/messages/messages50app.cpp b/documentapi/src/tests/messages/messages50app.cpp
deleted file mode 100644
index aa42302beba..00000000000
--- a/documentapi/src/tests/messages/messages50app.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "messages50test.h"
-
-TEST_APPHOOK(Messages50Test);
diff --git a/documentapi/src/tests/messages/messages50test.cpp b/documentapi/src/tests/messages/messages50test.cpp
deleted file mode 100644
index 6705277d5c3..00000000000
--- a/documentapi/src/tests/messages/messages50test.cpp
+++ /dev/null
@@ -1,1166 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "messages50test.h"
-#include <vespa/document/bucket/bucketidfactory.h>
-#include <vespa/document/datatype/documenttype.h>
-#include <vespa/document/select/parser.h>
-#include <vespa/document/repo/documenttyperepo.h>
-#include <vespa/document/update/fieldpathupdates.h>
-#include <vespa/documentapi/documentapi.h>
-#include <vespa/document/bucket/fixed_bucket_spaces.h>
-
-using document::DataType;
-using document::DocumentTypeRepo;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Setup
-//
-///////////////////////////////////////////////////////////////////////////////
-
-Messages50Test::Messages50Test()
-{
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
- putTest(DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE, TEST_METHOD(Messages50Test::testBatchDocumentUpdateMessage));
- putTest(DocumentProtocol::MESSAGE_CREATEVISITOR, TEST_METHOD(Messages50Test::testCreateVisitorMessage));
- putTest(DocumentProtocol::MESSAGE_DESTROYVISITOR, TEST_METHOD(Messages50Test::testDestroyVisitorMessage));
- putTest(DocumentProtocol::MESSAGE_DOCUMENTLIST, TEST_METHOD(Messages50Test::testDocumentListMessage));
- putTest(DocumentProtocol::MESSAGE_DOCUMENTSUMMARY, TEST_METHOD(Messages50Test::testDocumentSummaryMessage));
- putTest(DocumentProtocol::MESSAGE_EMPTYBUCKETS, TEST_METHOD(Messages50Test::testEmptyBucketsMessage));
- putTest(DocumentProtocol::MESSAGE_GETBUCKETLIST, TEST_METHOD(Messages50Test::testGetBucketListMessage));
- putTest(DocumentProtocol::MESSAGE_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateMessage));
- putTest(DocumentProtocol::MESSAGE_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorMessage));
- putTest(DocumentProtocol::MESSAGE_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultMessage));
- putTest(DocumentProtocol::MESSAGE_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_REMOVELOCATION, TEST_METHOD(Messages50Test::testRemoveLocationMessage));
- putTest(DocumentProtocol::MESSAGE_SEARCHRESULT, TEST_METHOD(Messages50Test::testSearchResultMessage));
- putTest(DocumentProtocol::MESSAGE_STATBUCKET, TEST_METHOD(Messages50Test::testStatBucketMessage));
- putTest(DocumentProtocol::MESSAGE_UPDATEDOCUMENT, TEST_METHOD(Messages50Test::testUpdateDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_VISITORINFO, TEST_METHOD(Messages50Test::testVisitorInfoMessage));
-
- putTest(DocumentProtocol::REPLY_BATCHDOCUMENTUPDATE, TEST_METHOD(Messages50Test::testBatchDocumentUpdateReply));
- putTest(DocumentProtocol::REPLY_CREATEVISITOR, TEST_METHOD(Messages50Test::testCreateVisitorReply));
- putTest(DocumentProtocol::REPLY_DESTROYVISITOR, TEST_METHOD(Messages50Test::testDestroyVisitorReply));
- putTest(DocumentProtocol::REPLY_DOCUMENTLIST, TEST_METHOD(Messages50Test::testDocumentListReply));
- putTest(DocumentProtocol::REPLY_DOCUMENTSUMMARY, TEST_METHOD(Messages50Test::testDocumentSummaryReply));
- putTest(DocumentProtocol::REPLY_EMPTYBUCKETS, TEST_METHOD(Messages50Test::testEmptyBucketsReply));
- putTest(DocumentProtocol::REPLY_GETBUCKETLIST, TEST_METHOD(Messages50Test::testGetBucketListReply));
- putTest(DocumentProtocol::REPLY_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateReply));
- putTest(DocumentProtocol::REPLY_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentReply));
- putTest(DocumentProtocol::REPLY_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorReply));
- putTest(DocumentProtocol::REPLY_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentReply));
- putTest(DocumentProtocol::REPLY_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultReply));
- putTest(DocumentProtocol::REPLY_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentReply));
- putTest(DocumentProtocol::REPLY_REMOVELOCATION, TEST_METHOD(Messages50Test::testRemoveLocationReply));
- putTest(DocumentProtocol::REPLY_SEARCHRESULT, TEST_METHOD(Messages50Test::testSearchResultReply));
- putTest(DocumentProtocol::REPLY_STATBUCKET, TEST_METHOD(Messages50Test::testStatBucketReply));
- putTest(DocumentProtocol::REPLY_UPDATEDOCUMENT, TEST_METHOD(Messages50Test::testUpdateDocumentReply));
- putTest(DocumentProtocol::REPLY_VISITORINFO, TEST_METHOD(Messages50Test::testVisitorInfoReply));
- putTest(DocumentProtocol::REPLY_WRONGDISTRIBUTION, TEST_METHOD(Messages50Test::testWrongDistributionReply));
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Tests
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static const int MESSAGE_BASE_LENGTH = 5;
-
-namespace {
-
-document::Document::SP
-createDoc(const DocumentTypeRepo &repo, const string &type_name, const string &id)
-{
- return document::Document::SP(new document::Document(
- *repo.getDocumentType(type_name),
- document::DocumentId(id)));
-}
-
-} // namespace
-
-bool
-Messages50Test::testGetBucketListMessage()
-{
- GetBucketListMessage msg(document::BucketId(16, 123));
- msg.setLoadType(_loadTypes["foo"]);
- EXPECT_EQUAL(string("foo"), msg.getLoadType().getName());
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 12u, serialize("GetBucketListMessage", msg));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetBucketListMessage", DocumentProtocol::MESSAGE_GETBUCKETLIST, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetBucketListMessage &ref = static_cast<GetBucketListMessage&>(*obj);
- EXPECT_EQUAL(string("foo"), ref.getLoadType().getName());
- EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testEmptyBucketsMessage()
-{
- std::vector<document::BucketId> bids;
- for (size_t i=0; i < 13; ++i) {
- bids.push_back(document::BucketId(16, i));
- }
-
- EmptyBucketsMessage msg(bids);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 112u, serialize("EmptyBucketsMessage", msg));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("EmptyBucketsMessage", DocumentProtocol::MESSAGE_EMPTYBUCKETS, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- EmptyBucketsMessage &ref = static_cast<EmptyBucketsMessage&>(*obj);
- for (size_t i=0; i < 13; ++i) {
- EXPECT_EQUAL(document::BucketId(16, i), ref.getBucketIds()[i]);
- }
- }
- }
- return true;
-}
-
-
-bool
-Messages50Test::testStatBucketMessage()
-{
- StatBucketMessage msg(document::BucketId(16, 123), "id.user=123");
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 27u, serialize("StatBucketMessage", msg));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("StatBucketMessage", DocumentProtocol::MESSAGE_STATBUCKET, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- StatBucketMessage &ref = static_cast<StatBucketMessage&>(*obj);
- EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId());
- EXPECT_EQUAL("id.user=123", ref.getDocumentSelection());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testCreateVisitorMessage() {
- CreateVisitorMessage tmp("SomeLibrary", "myvisitor", "newyork", "london");
- tmp.setDocumentSelection("true and false or true");
- tmp.getParameters().set("myvar", "somevalue");
- tmp.getParameters().set("anothervar", uint64_t(34));
- tmp.getBuckets().push_back(document::BucketId(16, 1234));
- tmp.setVisitRemoves(true);
- tmp.setVisitorOrdering(document::OrderingSpecification::DESCENDING);
- tmp.setMaxBucketsPerVisitor(2);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)168, serialize("CreateVisitorMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("CreateVisitorMessage", DocumentProtocol::MESSAGE_CREATEVISITOR, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- CreateVisitorMessage &ref = static_cast<CreateVisitorMessage&>(*obj);
-
- EXPECT_EQUAL(string("SomeLibrary"), ref.getLibraryName());
- EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId());
- EXPECT_EQUAL(string("newyork"), ref.getControlDestination());
- EXPECT_EQUAL(string("london"), ref.getDataDestination());
- EXPECT_EQUAL(string("true and false or true"), ref.getDocumentSelection());
- EXPECT_EQUAL(uint32_t(8), ref.getMaximumPendingReplyCount());
- EXPECT_EQUAL(true, ref.visitRemoves());
- EXPECT_EQUAL(false, ref.visitHeadersOnly());
- EXPECT_EQUAL(false, ref.visitInconsistentBuckets());
- EXPECT_EQUAL(size_t(1), ref.getBuckets().size());
- EXPECT_EQUAL(document::BucketId(16, 1234), ref.getBuckets()[0]);
- EXPECT_EQUAL(string("somevalue"), ref.getParameters().get("myvar"));
- EXPECT_EQUAL(uint64_t(34), ref.getParameters().get("anothervar", uint64_t(1)));
- EXPECT_EQUAL(document::OrderingSpecification::DESCENDING, ref.getVisitorOrdering());
- EXPECT_EQUAL(uint32_t(2), ref.getMaxBucketsPerVisitor());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testDestroyVisitorMessage()
-{
- DestroyVisitorMessage tmp("myvisitor");
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)17, serialize("DestroyVisitorMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("DestroyVisitorMessage", DocumentProtocol::MESSAGE_DESTROYVISITOR, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- DestroyVisitorMessage &ref = static_cast<DestroyVisitorMessage&>(*obj);
- EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testDocumentListMessage()
-{
- document::Document::SP doc =
- createDoc(getTypeRepo(), "testdoc", "userdoc:scheme:1234:");
- DocumentListMessage::Entry entry(1234, doc, false);
-
- DocumentListMessage tmp(document::BucketId(16, 1234));
- tmp.getDocuments().push_back(entry);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)63, serialize("DocumentListMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("DocumentListMessage", DocumentProtocol::MESSAGE_DOCUMENTLIST, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- DocumentListMessage &ref = static_cast<DocumentListMessage&>(*obj);
-
- EXPECT_EQUAL("userdoc:scheme:1234:", ref.getDocuments()[0].getDocument()->getId().toString());
- EXPECT_EQUAL(1234, ref.getDocuments()[0].getTimestamp());
- EXPECT_TRUE(!ref.getDocuments()[0].isRemoveEntry());
- }
- }
- return true;
-}
-
-
-bool
-Messages50Test::testRemoveLocationMessage()
-{
- {
- document::BucketIdFactory factory;
- document::select::Parser parser(getTypeRepo(), factory);
- RemoveLocationMessage msg(factory, parser, "id.group == \"mygroup\"");
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 29u, serialize("RemoveLocationMessage", msg));
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("RemoveLocationMessage", DocumentProtocol::MESSAGE_REMOVELOCATION, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- RemoveLocationMessage &ref = static_cast<RemoveLocationMessage&>(*obj);
- EXPECT_EQUAL(string("id.group == \"mygroup\""), ref.getDocumentSelection());
- // FIXME add to wire format, currently hardcoded.
- EXPECT_EQUAL(string(document::FixedBucketSpaces::default_space_name()), ref.getBucketSpace());
- }
- }
- }
-
- return true;
-}
-
-
-
-bool
-Messages50Test::testDocumentSummaryMessage()
-{
- DocumentSummaryMessage srm;
- EXPECT_EQUAL(srm.hasSequenceId(), false);
- EXPECT_EQUAL(srm.getSummaryCount(), size_t(0));
-
- mbus::Blob data = encode(srm);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(12), data.size());
-
- writeFile(getPath("5-cpp-DocumentSummaryMessage-1.dat"), data);
- // print(data);
-
- mbus::Routable::UP routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_DOCUMENTSUMMARY);
- DocumentSummaryMessage * dm = static_cast<DocumentSummaryMessage *>(routable.get());
- EXPECT_EQUAL(dm->getSummaryCount(), size_t(0));
-
- srm.addSummary("doc1", "summary1", 8);
- srm.addSummary("aoc17", "summary45", 9);
-
- data = encode(srm);
- //print(data);
-
- const void *summary(NULL);
- const char *docId(NULL);
- size_t sz(0);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 52u, data.size());
- writeFile(getPath("5-cpp-DocumentSummaryMessage-2.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_DOCUMENTSUMMARY);
- dm = static_cast<DocumentSummaryMessage *>(routable.get());
- EXPECT_EQUAL(dm->getSummaryCount(), size_t(2));
- dm->getSummary(0, docId, summary, sz);
- EXPECT_EQUAL(sz, 8u);
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- EXPECT_EQUAL(memcmp("summary1", summary, sz), 0);
- dm->getSummary(1, docId, summary, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(strcmp("aoc17", docId), 0);
- EXPECT_EQUAL(memcmp("summary45", summary, sz), 0);
-
- srm.sort();
-
- data = encode(srm);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 52u, data.size());
- writeFile(getPath("5-cpp-DocumentSummaryMessage-3.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_DOCUMENTSUMMARY);
- dm = static_cast<DocumentSummaryMessage *>(routable.get());
- EXPECT_EQUAL(dm->getSummaryCount(), size_t(2));
- dm->getSummary(0, docId, summary, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(strcmp("aoc17", docId), 0);
- EXPECT_EQUAL(memcmp("summary45", summary, sz), 0);
- dm->getSummary(1, docId, summary, sz);
- EXPECT_EQUAL(sz, 8u);
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- EXPECT_EQUAL(memcmp("summary1", summary, sz), 0);
- return true;
-}
-
-bool
-Messages50Test::testGetDocumentMessage()
-{
- GetDocumentMessage tmp(document::DocumentId("doc:scheme:"), 0);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)20, serialize("GetDocumentMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetDocumentMessage", DocumentProtocol::MESSAGE_GETDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetDocumentMessage &ref = static_cast<GetDocumentMessage&>(*obj);
- EXPECT_EQUAL(string("doc:scheme:"), ref.getDocumentId().toString());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testMapVisitorMessage()
-{
- MapVisitorMessage tmp;
- tmp.getData().set("foo", 3);
- tmp.getData().set("bar", 5);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)32, serialize("MapVisitorMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("MapVisitorMessage", DocumentProtocol::MESSAGE_MAPVISITOR, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- MapVisitorMessage &ref = static_cast<MapVisitorMessage&>(*obj);
- EXPECT_EQUAL(3, ref.getData().get("foo", 0));
- EXPECT_EQUAL(5, ref.getData().get("bar", 0));
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testCreateVisitorReply()
-{
- CreateVisitorReply reply(DocumentProtocol::REPLY_CREATEVISITOR);
- reply.setLastBucket(document::BucketId(16, 123));
- vdslib::VisitorStatistics vs;
- vs.setBucketsVisited(3);
- vs.setDocumentsVisited(1000);
- vs.setBytesVisited(1024000);
- vs.setDocumentsReturned(123);
- vs.setBytesReturned(512000);
- vs.setSecondPassDocumentsReturned(456);
- vs.setSecondPassBytesReturned(789100);
- reply.setVisitorStatistics(vs);
-
- EXPECT_EQUAL(65u, serialize("CreateVisitorReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("CreateVisitorReply", DocumentProtocol::REPLY_CREATEVISITOR, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- CreateVisitorReply &ref = static_cast<CreateVisitorReply&>(*obj);
-
- EXPECT_EQUAL(ref.getLastBucket(), document::BucketId(16, 123));
- EXPECT_EQUAL(ref.getVisitorStatistics().getBucketsVisited(), (uint32_t)3);
- EXPECT_EQUAL(ref.getVisitorStatistics().getDocumentsVisited(), (uint64_t)1000);
- EXPECT_EQUAL(ref.getVisitorStatistics().getBytesVisited(), (uint64_t)1024000);
- EXPECT_EQUAL(ref.getVisitorStatistics().getDocumentsReturned(), (uint64_t)123);
- EXPECT_EQUAL(ref.getVisitorStatistics().getBytesReturned(), (uint64_t)512000);
- EXPECT_EQUAL(ref.getVisitorStatistics().getSecondPassDocumentsReturned(), (uint64_t)456);
- EXPECT_EQUAL(ref.getVisitorStatistics().getSecondPassBytesReturned(), (uint64_t)789100);
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testPutDocumentMessage()
-{
- document::Document::SP doc =
- createDoc(getTypeRepo(), "testdoc", "doc:scheme:");
- PutDocumentMessage msg(doc);
-
- msg.setTimestamp(666);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 41u, serialize("PutDocumentMessage", msg));
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("PutDocumentMessage", DocumentProtocol::MESSAGE_PUTDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- PutDocumentMessage &ref = static_cast<PutDocumentMessage&>(*obj);
- EXPECT_TRUE(ref.getDocument().getType().getName() == "testdoc");
- EXPECT_TRUE(ref.getDocument().getId().toString() == "doc:scheme:");
- EXPECT_EQUAL(666u, ref.getTimestamp());
- EXPECT_EQUAL(37u, ref.getApproxSize());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testGetBucketStateMessage()
-{
- GetBucketStateMessage tmp;
- tmp.setBucketId(document::BucketId(16, 666));
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 12u, serialize("GetBucketStateMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetBucketStateMessage", DocumentProtocol::MESSAGE_GETBUCKETSTATE, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetBucketStateMessage &ref = static_cast<GetBucketStateMessage&>(*obj);
-
- EXPECT_EQUAL(16u, ref.getBucketId().getUsedBits());
- EXPECT_EQUAL(4611686018427388570ull, ref.getBucketId().getId());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testPutDocumentReply()
-{
- WriteDocumentReply reply(DocumentProtocol::REPLY_PUTDOCUMENT);
- reply.setHighestModificationTimestamp(30);
-
- EXPECT_EQUAL(13u, serialize("PutDocumentReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("PutDocumentReply", DocumentProtocol::REPLY_PUTDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- WriteDocumentReply &ref = static_cast<WriteDocumentReply&>(*obj);
- EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testUpdateDocumentReply()
-{
- UpdateDocumentReply reply;
- reply.setWasFound(false);
- reply.setHighestModificationTimestamp(30);
-
- EXPECT_EQUAL(14u, serialize("UpdateDocumentReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("UpdateDocumentReply", DocumentProtocol::REPLY_UPDATEDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- UpdateDocumentReply &ref = static_cast<UpdateDocumentReply&>(*obj);
- EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
- EXPECT_EQUAL(false, ref.wasFound());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testRemoveDocumentMessage()
-{
- RemoveDocumentMessage tmp(document::DocumentId("doc:scheme:"));
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)16, serialize("RemoveDocumentMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("RemoveDocumentMessage", DocumentProtocol::MESSAGE_REMOVEDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- RemoveDocumentMessage &ref = static_cast<RemoveDocumentMessage&>(*obj);
- EXPECT_EQUAL(string("doc:scheme:"), ref.getDocumentId().toString());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testRemoveDocumentReply()
-{
- RemoveDocumentReply reply;
- std::vector<uint64_t> ts;
- reply.setWasFound(false);
- reply.setHighestModificationTimestamp(30);
-
- EXPECT_EQUAL(14u, serialize("RemoveDocumentReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("RemoveDocumentReply", DocumentProtocol::REPLY_REMOVEDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- RemoveDocumentReply &ref = static_cast<RemoveDocumentReply&>(*obj);
- EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
- EXPECT_EQUAL(false, ref.wasFound());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testSearchResultMessage()
-{
- SearchResultMessage srm;
- EXPECT_EQUAL(srm.getSequenceId(), 0u);
- EXPECT_EQUAL(srm.getHitCount(), 0u);
- EXPECT_EQUAL(srm.getAggregatorList().getSerializedSize(), 4u);
- EXPECT_EQUAL(srm.vdslib::SearchResult::getSerializedSize(), 20u);
- EXPECT_EQUAL(srm.getSerializedSize(), 20u);
-
- mbus::Blob data = encode(srm);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(24), data.size());
-
- writeFile(getPath("5-cpp-SearchResultMessage-1.dat"), data);
- // print(data);
-
- mbus::Routable::UP routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_SEARCHRESULT);
- SearchResultMessage * dm = static_cast<SearchResultMessage *>(routable.get());
- EXPECT_EQUAL(dm->getSequenceId(), size_t(0));
- EXPECT_EQUAL(dm->getHitCount(), size_t(0));
-
- srm.addHit(0, "doc1", 89);
- srm.addHit(1, "doc17", 109);
- //srm.setSequenceId(567);
-
- data = encode(srm);
- //EXPECT_EQUAL(srm.getSequenceId(), size_t(567));
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 55u, data.size());
- writeFile(getPath("5-cpp-SearchResultMessage-2.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_SEARCHRESULT);
- dm = static_cast<SearchResultMessage *>(routable.get());
-// EXPECT_EQUAL(dm->getSequenceId(), size_t(567));
- EXPECT_EQUAL(dm->getHitCount(), size_t(2));
- const char *docId;
- SearchResultMessage::RankType rank;
- dm->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dm->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
-
- srm.sort();
-
- data = encode(srm);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 55u, data.size());
- writeFile(getPath("5-cpp-SearchResultMessage-3.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_SEARCHRESULT);
- dm = static_cast<SearchResultMessage *>(routable.get());
-// EXPECT_EQUAL(dm->getSequenceId(), size_t(567));
- EXPECT_EQUAL(dm->getHitCount(), size_t(2));
- dm->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dm->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
-
- SearchResultMessage srm2;
- srm2.addHit(0, "doc1", 89, "sortdata2", 9);
- srm2.addHit(1, "doc17", 109, "sortdata1", 9);
- srm2.addHit(2, "doc18", 90, "sortdata3", 9);
- //srm2.setSequenceId(567);
- data = encode(srm2);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 108u, data.size());
- writeFile(getPath("5-cpp-SearchResultMessage-4.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_SEARCHRESULT);
- dm = static_cast<SearchResultMessage *>(routable.get());
- //EXPECT_EQUAL(dm->getSequenceId(), size_t(567));
- EXPECT_EQUAL(dm->getHitCount(), size_t(3));
- dm->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dm->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dm->getHit(2, docId, rank);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
-
- srm2.sort();
- const void *buf;
- size_t sz;
- srm2.getHit(0, docId, rank);
- srm2.getSortBlob(0, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- srm2.getHit(1, docId, rank);
- srm2.getSortBlob(1, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- srm2.getHit(2, docId, rank);
- srm2.getSortBlob(2, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
-
- data = encode(srm2);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 108u, data.size());
- writeFile(getPath("5-cpp-SearchResultMessage-5.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_SEARCHRESULT);
- dm = static_cast<SearchResultMessage *>(routable.get());
-// EXPECT_EQUAL(dm->getSequenceId(), size_t(567));
- EXPECT_EQUAL(dm->getHitCount(), size_t(3));
- dm->getHit(0, docId, rank);
- dm->getSortBlob(0, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dm->getHit(1, docId, rank);
- dm->getSortBlob(1, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dm->getHit(2, docId, rank);
- dm->getSortBlob(2, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
- EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
- return true;
-}
-
-bool
-Messages50Test::testUpdateDocumentMessage()
-{
- const DocumentTypeRepo &repo = getTypeRepo();
- const document::DocumentType &docType = *repo.getDocumentType("testdoc");
- auto upd(std::make_shared<document::DocumentUpdate>(repo, docType, document::DocumentId("doc:scheme:")));
- upd->addFieldPathUpdate(document::FieldPathUpdate::CP(
- new document::RemoveFieldPathUpdate("intfield", "testdoc.intfield > 0")));
- UpdateDocumentMessage msg(upd);
- msg.setOldTimestamp(666u);
- msg.setNewTimestamp(777u);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 89u, serialize("UpdateDocumentMessage", msg));
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("UpdateDocumentMessage", DocumentProtocol::MESSAGE_UPDATEDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != nullptr)) {
- UpdateDocumentMessage &ref = static_cast<UpdateDocumentMessage&>(*obj);
- EXPECT_EQUAL(*upd, ref.getDocumentUpdate());
- EXPECT_EQUAL(666u, ref.getOldTimestamp());
- EXPECT_EQUAL(777u, ref.getNewTimestamp());
- EXPECT_EQUAL(85u, ref.getApproxSize());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testBatchDocumentUpdateMessage()
-{
- const DocumentTypeRepo &repo = getTypeRepo();
- const document::DocumentType &docType = *repo.getDocumentType("testdoc");
-
- BatchDocumentUpdateMessage msg(1234);
-
- {
- document::DocumentUpdate::SP upd;
- upd.reset(new document::DocumentUpdate(repo, docType, document::DocumentId("userdoc:footype:1234:foo")));
- upd->addFieldPathUpdate(document::FieldPathUpdate::CP(
- new document::RemoveFieldPathUpdate("intfield", "testdoc.intfield > 0")));
- msg.addUpdate(upd);
- }
- {
- document::DocumentUpdate::SP upd;
- upd.reset(new document::DocumentUpdate(repo, docType, document::DocumentId("orderdoc(32,17):footype:1234:123456789:foo")));
- upd->addFieldPathUpdate(document::FieldPathUpdate::CP(
- new document::RemoveFieldPathUpdate("intfield", "testdoc.intfield > 0")));
- msg.addUpdate(upd);
- }
- try {
- document::DocumentUpdate::SP upd;
- upd.reset(new document::DocumentUpdate(repo, docType, document::DocumentId("userdoc:footype:5678:foo")));
- upd->addFieldPathUpdate(document::FieldPathUpdate::CP(
- new document::RemoveFieldPathUpdate("intfield", "testdoc.intfield > 0")));
- msg.addUpdate(upd);
- EXPECT_TRUE(false);
- } catch (...) {
- }
- try {
- document::DocumentUpdate::SP upd;
- upd.reset(new document::DocumentUpdate(repo, docType, document::DocumentId("groupdoc:footype:hable:foo")));
- upd->addFieldPathUpdate(document::FieldPathUpdate::CP(
- new document::RemoveFieldPathUpdate("intfield", "testdoc.intfield > 0")));
- msg.addUpdate(upd);
- EXPECT_TRUE(false);
- } catch (...) {
- }
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 202u, serialize("BatchDocumentUpdateMessage", msg));
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("BatchDocumentUpdateMessage", DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- BatchDocumentUpdateMessage &ref = static_cast<BatchDocumentUpdateMessage&>(*obj);
- EXPECT_EQUAL(2u, ref.getUpdates().size());
- }
- }
-
- return true;
-}
-
-bool
-Messages50Test::testBatchDocumentUpdateReply()
-{
- BatchDocumentUpdateReply reply;
- reply.setHighestModificationTimestamp(30);
- {
- std::vector<bool> notFound(3);
- notFound[0] = false;
- notFound[1] = true;
- notFound[2] = true;
- reply.getDocumentsNotFound() = notFound;
- }
-
- EXPECT_EQUAL(20u, serialize("BatchDocumentUpdateReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("BatchDocumentUpdateReply", DocumentProtocol::REPLY_BATCHDOCUMENTUPDATE, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- BatchDocumentUpdateReply &ref = dynamic_cast<BatchDocumentUpdateReply&>(*obj);
- EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
- {
- const std::vector<bool>& notFound = ref.getDocumentsNotFound();
- EXPECT_TRUE(notFound[0] == false);
- EXPECT_TRUE(notFound[1] == true);
- EXPECT_TRUE(notFound[2] == true);
- }
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testQueryResultMessage()
-{
- QueryResultMessage srm;
- vdslib::SearchResult & sr(srm.getSearchResult());
- EXPECT_EQUAL(srm.getSequenceId(), 0u);
- EXPECT_EQUAL(sr.getHitCount(), 0u);
- EXPECT_EQUAL(sr.getAggregatorList().getSerializedSize(), 4u);
- EXPECT_EQUAL(sr.getSerializedSize(), 20u);
- EXPECT_EQUAL(srm.getApproxSize(), 28u);
-
- mbus::Blob data = encode(srm);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(32), data.size());
-
- writeFile(getPath("5-cpp-QueryResultMessage-1.dat"), data);
- // print(data);
-
- mbus::Routable::UP routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_QUERYRESULT);
- QueryResultMessage * dm = static_cast<QueryResultMessage *>(routable.get());
- vdslib::SearchResult * dr(&dm->getSearchResult());
- EXPECT_EQUAL(dm->getSequenceId(), size_t(0));
- EXPECT_EQUAL(dr->getHitCount(), size_t(0));
-
- sr.addHit(0, "doc1", 89);
- sr.addHit(1, "doc17", 109);
-
- data = encode(srm);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 63u, data.size());
- writeFile(getPath("5-cpp-QueryResultMessage-2.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_QUERYRESULT);
- dm = static_cast<QueryResultMessage *>(routable.get());
- dr = &dm->getSearchResult();
- EXPECT_EQUAL(dr->getHitCount(), size_t(2));
- const char *docId;
- vdslib::SearchResult::RankType rank;
- dr->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dr->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
-
- sr.sort();
-
- data = encode(srm);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 63u, data.size());
- writeFile(getPath("5-cpp-QueryResultMessage-3.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_QUERYRESULT);
- dm = static_cast<QueryResultMessage *>(routable.get());
- dr = &dm->getSearchResult();
- EXPECT_EQUAL(dr->getHitCount(), size_t(2));
- dr->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dr->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
-
- QueryResultMessage srm2;
- vdslib::SearchResult & sr2(srm2.getSearchResult());
- sr2.addHit(0, "doc1", 89, "sortdata2", 9);
- sr2.addHit(1, "doc17", 109, "sortdata1", 9);
- sr2.addHit(2, "doc18", 90, "sortdata3", 9);
- data = encode(srm2);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 116u, data.size());
- writeFile(getPath("5-cpp-QueryResultMessage-4.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_QUERYRESULT);
- dm = static_cast<QueryResultMessage *>(routable.get());
- dr = &dm->getSearchResult();
- EXPECT_EQUAL(dr->getHitCount(), size_t(3));
- dr->getHit(0, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dr->getHit(1, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dr->getHit(2, docId, rank);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
-
- sr2.sort();
- const void *buf;
- size_t sz;
- sr2.getHit(0, docId, rank);
- sr2.getSortBlob(0, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- sr2.getHit(1, docId, rank);
- sr2.getSortBlob(1, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- sr2.getHit(2, docId, rank);
- sr2.getSortBlob(2, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
-
- data = encode(srm2);
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 116u, data.size());
- writeFile(getPath("5-cpp-QueryResultMessage-5.dat"), data);
- routable = decode(data);
- if (!EXPECT_TRUE(routable.get() != NULL)) {
- return false;
- }
- EXPECT_EQUAL(routable->getType(), (uint32_t)DocumentProtocol::MESSAGE_QUERYRESULT);
- dm = static_cast<QueryResultMessage *>(routable.get());
- dr = &dm->getSearchResult();
- EXPECT_EQUAL(dr->getHitCount(), size_t(3));
- dr->getHit(0, docId, rank);
- dr->getSortBlob(0, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
- EXPECT_EQUAL(strcmp("doc17", docId), 0);
- dr->getHit(1, docId, rank);
- dr->getSortBlob(1, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
- EXPECT_EQUAL(strcmp("doc1", docId), 0);
- dr->getHit(2, docId, rank);
- dr->getSortBlob(2, buf, sz);
- EXPECT_EQUAL(sz, 9u);
- EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
- EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
- EXPECT_EQUAL(strcmp("doc18", docId), 0);
- return true;
-}
-
-bool
-Messages50Test::testQueryResultReply()
-{
- return tryVisitorReply("QueryResultReply", DocumentProtocol::REPLY_QUERYRESULT);
-}
-
-bool
-Messages50Test::testVisitorInfoMessage()
-{
-
- VisitorInfoMessage tmp;
- tmp.getFinishedBuckets().push_back(document::BucketId(16, 1));
- tmp.getFinishedBuckets().push_back(document::BucketId(16, 2));
- tmp.getFinishedBuckets().push_back(document::BucketId(16, 4));
- string utf8 = "error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6";
- tmp.setErrorMessage(utf8);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 67u, serialize("VisitorInfoMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("VisitorInfoMessage", DocumentProtocol::MESSAGE_VISITORINFO, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- VisitorInfoMessage &ref = static_cast<VisitorInfoMessage&>(*obj);
- EXPECT_EQUAL(document::BucketId(16, 1), ref.getFinishedBuckets()[0]);
- EXPECT_EQUAL(document::BucketId(16, 2), ref.getFinishedBuckets()[1]);
- EXPECT_EQUAL(document::BucketId(16, 4), ref.getFinishedBuckets()[2]);
- EXPECT_EQUAL(utf8, ref.getErrorMessage());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testDestroyVisitorReply()
-{
- return tryDocumentReply("DestroyVisitorReply", DocumentProtocol::REPLY_DESTROYVISITOR);
-}
-
-bool
-Messages50Test::testDocumentListReply()
-{
- return tryVisitorReply("DocumentListReply", DocumentProtocol::REPLY_DOCUMENTLIST);
-}
-
-bool
-Messages50Test::testDocumentSummaryReply()
-{
- return tryVisitorReply("DocumentSummaryReply", DocumentProtocol::REPLY_DOCUMENTSUMMARY);
-}
-
-bool
-Messages50Test::testGetDocumentReply()
-{
- document::Document::SP doc =
- createDoc(getTypeRepo(), "testdoc", "doc:scheme:");
- GetDocumentReply tmp(doc);
-
- EXPECT_EQUAL((size_t)43, serialize("GetDocumentReply", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetDocumentReply", DocumentProtocol::REPLY_GETDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetDocumentReply &ref = static_cast<GetDocumentReply&>(*obj);
-
- EXPECT_EQUAL(string("testdoc"), ref.getDocument().getType().getName());
- EXPECT_EQUAL(string("doc:scheme:"), ref.getDocument().getId().toString());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testMapVisitorReply()
-{
- return tryVisitorReply("MapVisitorReply", DocumentProtocol::REPLY_MAPVISITOR);
-}
-
-bool
-Messages50Test::testSearchResultReply()
-{
- return tryVisitorReply("SearchResultReply", DocumentProtocol::REPLY_SEARCHRESULT);
-}
-
-bool
-Messages50Test::testStatBucketReply()
-{
- StatBucketReply msg;
- msg.setResults("These are the votes of the Norwegian jury");
-
- EXPECT_EQUAL(50u, serialize("StatBucketReply", msg));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("StatBucketReply", DocumentProtocol::REPLY_STATBUCKET, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- StatBucketReply &ref = static_cast<StatBucketReply&>(*obj);
- EXPECT_EQUAL("These are the votes of the Norwegian jury", ref.getResults());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testVisitorInfoReply()
-{
- return tryVisitorReply("VisitorInfoReply", DocumentProtocol::REPLY_VISITORINFO);
-}
-
-bool
-Messages50Test::testWrongDistributionReply()
-{
- WrongDistributionReply tmp("distributor:3 storage:2");
-
- serialize("WrongDistributionReply", tmp);
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("WrongDistributionReply", DocumentProtocol::REPLY_WRONGDISTRIBUTION, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- WrongDistributionReply &ref = static_cast<WrongDistributionReply&>(*obj);
- EXPECT_EQUAL(string("distributor:3 storage:2"), ref.getSystemState());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testGetBucketListReply()
-{
- GetBucketListReply reply;
- reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(16, 123), "foo"));
- reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(17, 1123), "bar"));
- reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(18, 11123), "zoink"));
-
- EXPECT_EQUAL(56u, serialize("GetBucketListReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetBucketListReply", DocumentProtocol::REPLY_GETBUCKETLIST, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetBucketListReply &ref = static_cast<GetBucketListReply&>(*obj);
-
- EXPECT_EQUAL(ref.getBuckets()[0], GetBucketListReply::BucketInfo(document::BucketId(16, 123), "foo"));
- EXPECT_EQUAL(ref.getBuckets()[1], GetBucketListReply::BucketInfo(document::BucketId(17, 1123), "bar"));
- EXPECT_EQUAL(ref.getBuckets()[2], GetBucketListReply::BucketInfo(document::BucketId(18, 11123), "zoink"));
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testGetBucketStateReply()
-{
- document::GlobalId foo = document::DocumentId("doc:scheme:foo").getGlobalId();
- document::GlobalId bar = document::DocumentId("doc:scheme:bar").getGlobalId();
-
- GetBucketStateReply reply;
- reply.getBucketState().push_back(DocumentState(foo, 777, false));
- reply.getBucketState().push_back(DocumentState(bar, 888, true));
- EXPECT_EQUAL(53u, serialize("GetBucketStateReply", reply));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetBucketStateReply", DocumentProtocol::REPLY_GETBUCKETSTATE, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetBucketStateReply &ref = static_cast<GetBucketStateReply&>(*obj);
-
- EXPECT_EQUAL(777u, ref.getBucketState()[0].getTimestamp());
- EXPECT_EQUAL(foo, ref.getBucketState()[0].getGlobalId());
- EXPECT_EQUAL(false, ref.getBucketState()[0].isRemoveEntry());
- EXPECT_EQUAL(888u, ref.getBucketState()[1].getTimestamp());
- EXPECT_EQUAL(bar, ref.getBucketState()[1].getGlobalId());
- EXPECT_EQUAL(true, ref.getBucketState()[1].isRemoveEntry());
- }
- }
- return true;
-}
-
-bool
-Messages50Test::testEmptyBucketsReply()
-{
- return tryVisitorReply("EmptyBucketsReply", DocumentProtocol::REPLY_EMPTYBUCKETS);
-}
-
-bool
-Messages50Test::testRemoveLocationReply()
-{
- DocumentReply tmp(DocumentProtocol::REPLY_REMOVELOCATION);
-
- EXPECT_EQUAL((uint32_t)5, serialize("RemoveLocationReply", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("RemoveLocationReply", DocumentProtocol::REPLY_REMOVELOCATION, lang);
- EXPECT_TRUE(obj.get() != NULL);
- }
- return true;
-}
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Utilities
-//
-////////////////////////////////////////////////////////////////////////////////
-
-bool
-Messages50Test::tryDocumentReply(const string &filename, uint32_t type)
-{
- DocumentReply tmp(type);
-
- EXPECT_EQUAL((uint32_t)5, serialize(filename, tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize(filename, type, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- DocumentReply *ref = dynamic_cast<DocumentReply*>(obj.get());
- EXPECT_TRUE(ref != NULL);
- }
- }
- return true;
-}
-
-bool
-Messages50Test::tryVisitorReply(const string &filename, uint32_t type)
-{
- VisitorReply tmp(type);
-
- EXPECT_EQUAL((uint32_t)5, serialize(filename, tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize(filename, type, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- VisitorReply *ref = dynamic_cast<VisitorReply*>(obj.get());
- EXPECT_TRUE(ref != NULL);
- }
- }
- return true;
-}
diff --git a/documentapi/src/tests/messages/messages50test.h b/documentapi/src/tests/messages/messages50test.h
deleted file mode 100644
index c764f814a45..00000000000
--- a/documentapi/src/tests/messages/messages50test.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "testbase.h"
-
-class Messages50Test : public TestBase {
-protected:
- const vespalib::Version getVersion() const override { return vespalib::Version(5, 0); }
- bool shouldTestCoverage() const override { return false; }
- bool tryDocumentReply(const string &filename, uint32_t type);
- bool tryVisitorReply(const string &filename, uint32_t type);
-
-public:
- Messages50Test();
-
- bool testBatchDocumentUpdateMessage();
- bool testBatchDocumentUpdateReply();
- bool testCreateVisitorMessage();
- bool testCreateVisitorReply();
- bool testDestroyVisitorMessage();
- bool testDestroyVisitorReply();
- bool testDocumentListMessage();
- bool testDocumentListReply();
- bool testDocumentSummaryMessage();
- bool testDocumentSummaryReply();
- bool testEmptyBucketsMessage();
- bool testEmptyBucketsReply();
- bool testGetBucketListMessage();
- bool testGetBucketListReply();
- bool testGetBucketStateMessage();
- bool testGetBucketStateReply();
- bool testGetDocumentMessage();
- bool testGetDocumentReply();
- bool testMapVisitorMessage();
- bool testMapVisitorReply();
- bool testPutDocumentMessage();
- bool testPutDocumentReply();
- bool testQueryResultMessage();
- bool testQueryResultReply();
- bool testRemoveDocumentMessage();
- bool testRemoveDocumentReply();
- bool testRemoveLocationMessage();
- bool testRemoveLocationReply();
- bool testSearchResultMessage();
- bool testSearchResultReply();
- bool testStatBucketMessage();
- bool testStatBucketReply();
- bool testUpdateDocumentMessage();
- bool testUpdateDocumentReply();
- bool testVisitorInfoMessage();
- bool testVisitorInfoReply();
- bool testWrongDistributionReply();
-};
-
diff --git a/documentapi/src/tests/messages/messages51app.cpp b/documentapi/src/tests/messages/messages51app.cpp
deleted file mode 100644
index 654fb932568..00000000000
--- a/documentapi/src/tests/messages/messages51app.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "messages51test.h"
-
-TEST_APPHOOK(Messages51Test);
diff --git a/documentapi/src/tests/messages/messages51test.cpp b/documentapi/src/tests/messages/messages51test.cpp
deleted file mode 100644
index 1fca5b8c473..00000000000
--- a/documentapi/src/tests/messages/messages51test.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "messages51test.h"
-#include <vespa/documentapi/documentapi.h>
-#include <vespa/document/update/fieldpathupdates.h>
-
-using document::DataType;
-using document::DocumentTypeRepo;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Setup
-//
-///////////////////////////////////////////////////////////////////////////////
-
-Messages51Test::Messages51Test()
-{
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
- putTest(DocumentProtocol::MESSAGE_CREATEVISITOR, TEST_METHOD(Messages51Test::testCreateVisitorMessage));
- putTest(DocumentProtocol::MESSAGE_GETDOCUMENT, TEST_METHOD(Messages51Test::testGetDocumentMessage));
- putTest(DocumentProtocol::REPLY_DOCUMENTIGNORED, TEST_METHOD(Messages51Test::testDocumentIgnoredReply));
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Tests
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static const int MESSAGE_BASE_LENGTH = 5;
-
-bool
-Messages51Test::testCreateVisitorMessage() {
- CreateVisitorMessage tmp("SomeLibrary", "myvisitor", "newyork", "london");
- tmp.setDocumentSelection("true and false or true");
- tmp.getParameters().set("myvar", "somevalue");
- tmp.getParameters().set("anothervar", uint64_t(34));
- tmp.getBuckets().push_back(document::BucketId(16, 1234));
- tmp.setVisitRemoves(true);
- tmp.setFieldSet("foo bar");
- tmp.setVisitorOrdering(document::OrderingSpecification::DESCENDING);
- tmp.setMaxBucketsPerVisitor(2);
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)178, serialize("CreateVisitorMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("CreateVisitorMessage", DocumentProtocol::MESSAGE_CREATEVISITOR, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- CreateVisitorMessage &ref = static_cast<CreateVisitorMessage&>(*obj);
-
- EXPECT_EQUAL(string("SomeLibrary"), ref.getLibraryName());
- EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId());
- EXPECT_EQUAL(string("newyork"), ref.getControlDestination());
- EXPECT_EQUAL(string("london"), ref.getDataDestination());
- EXPECT_EQUAL(string("true and false or true"), ref.getDocumentSelection());
- EXPECT_EQUAL(string("foo bar"), ref.getFieldSet());
- EXPECT_EQUAL(uint32_t(8), ref.getMaximumPendingReplyCount());
- EXPECT_EQUAL(true, ref.visitRemoves());
- EXPECT_EQUAL(false, ref.visitHeadersOnly());
- EXPECT_EQUAL(false, ref.visitInconsistentBuckets());
- EXPECT_EQUAL(size_t(1), ref.getBuckets().size());
- EXPECT_EQUAL(document::BucketId(16, 1234), ref.getBuckets()[0]);
- EXPECT_EQUAL(string("somevalue"), ref.getParameters().get("myvar"));
- EXPECT_EQUAL(uint64_t(34), ref.getParameters().get("anothervar", uint64_t(1)));
- EXPECT_EQUAL(document::OrderingSpecification::DESCENDING, ref.getVisitorOrdering());
- EXPECT_EQUAL(uint32_t(2), ref.getMaxBucketsPerVisitor());
- }
- }
- return true;
-}
-
-bool
-Messages51Test::testGetDocumentMessage()
-{
- GetDocumentMessage tmp(document::DocumentId("doc:scheme:"), "foo bar");
-
- EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)27, serialize("GetDocumentMessage", tmp));
-
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj = deserialize("GetDocumentMessage", DocumentProtocol::MESSAGE_GETDOCUMENT, lang);
- if (EXPECT_TRUE(obj.get() != NULL)) {
- GetDocumentMessage &ref = static_cast<GetDocumentMessage&>(*obj);
- EXPECT_EQUAL(string("doc:scheme:"), ref.getDocumentId().toString());
- EXPECT_EQUAL(string("foo bar"), ref.getFieldSet());
- }
- }
- return true;
-}
-
-bool
-Messages51Test::testDocumentIgnoredReply()
-{
- DocumentIgnoredReply tmp;
- serialize("DocumentIgnoredReply", tmp);
- for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
- mbus::Routable::UP obj(
- deserialize("DocumentIgnoredReply",
- DocumentProtocol::REPLY_DOCUMENTIGNORED, lang));
- EXPECT_TRUE(obj.get() != NULL);
- }
- return true;
-}
diff --git a/documentapi/src/tests/messages/messages51test.h b/documentapi/src/tests/messages/messages51test.h
deleted file mode 100644
index 897491af892..00000000000
--- a/documentapi/src/tests/messages/messages51test.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "messages50test.h"
-
-class Messages51Test : public Messages50Test {
-protected:
- const vespalib::Version getVersion() const override { return vespalib::Version(5, 1); }
- bool shouldTestCoverage() const override { return true; }
-
-public:
- Messages51Test();
-
- bool testCreateVisitorMessage();
- bool testGetDocumentMessage();
- bool testDocumentIgnoredReply();
-};
-
diff --git a/documentapi/src/tests/messages/messages52test.cpp b/documentapi/src/tests/messages/messages52test.cpp
index 8f5d7381500..21307326a75 100644
--- a/documentapi/src/tests/messages/messages52test.cpp
+++ b/documentapi/src/tests/messages/messages52test.cpp
@@ -1,15 +1,78 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
// @author Vegard Sjonfjell
-
#include "messages52test.h"
-#include <vespa/documentapi/documentapi.h>
+#include <vespa/document/bucket/bucketidfactory.h>
+#include <vespa/document/datatype/documenttype.h>
+#include <vespa/document/select/parser.h>
#include <vespa/document/repo/documenttyperepo.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/document/update/fieldpathupdates.h>
-#include <vespa/document/datatype/documenttype.h>
+#include <vespa/documentapi/documentapi.h>
+#include <vespa/document/bucket/fixed_bucket_spaces.h>
+using document::DataType;
using document::DocumentTypeRepo;
+///////////////////////////////////////////////////////////////////////////////
+//
+// Setup
+//
+///////////////////////////////////////////////////////////////////////////////
+
+Messages52Test::Messages52Test()
+{
+ // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
+ // version 5.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
+ putTest(DocumentProtocol::MESSAGE_CREATEVISITOR, TEST_METHOD(Messages52Test::testCreateVisitorMessage));
+ putTest(DocumentProtocol::MESSAGE_DESTROYVISITOR, TEST_METHOD(Messages52Test::testDestroyVisitorMessage));
+ putTest(DocumentProtocol::MESSAGE_DOCUMENTLIST, TEST_METHOD(Messages52Test::testDocumentListMessage));
+ putTest(DocumentProtocol::MESSAGE_DOCUMENTSUMMARY, TEST_METHOD(Messages52Test::testDocumentSummaryMessage));
+ putTest(DocumentProtocol::MESSAGE_EMPTYBUCKETS, TEST_METHOD(Messages52Test::testEmptyBucketsMessage));
+ putTest(DocumentProtocol::MESSAGE_GETBUCKETLIST, TEST_METHOD(Messages52Test::testGetBucketListMessage));
+ putTest(DocumentProtocol::MESSAGE_GETBUCKETSTATE, TEST_METHOD(Messages52Test::testGetBucketStateMessage));
+ putTest(DocumentProtocol::MESSAGE_GETDOCUMENT, TEST_METHOD(Messages52Test::testGetDocumentMessage));
+ putTest(DocumentProtocol::MESSAGE_MAPVISITOR, TEST_METHOD(Messages52Test::testMapVisitorMessage));
+ putTest(DocumentProtocol::MESSAGE_PUTDOCUMENT, TEST_METHOD(Messages52Test::testPutDocumentMessage));
+ putTest(DocumentProtocol::MESSAGE_QUERYRESULT, TEST_METHOD(Messages52Test::testQueryResultMessage));
+ putTest(DocumentProtocol::MESSAGE_REMOVEDOCUMENT, TEST_METHOD(Messages52Test::testRemoveDocumentMessage));
+ putTest(DocumentProtocol::MESSAGE_REMOVELOCATION, TEST_METHOD(Messages52Test::testRemoveLocationMessage));
+ putTest(DocumentProtocol::MESSAGE_SEARCHRESULT, TEST_METHOD(Messages52Test::testSearchResultMessage));
+ putTest(DocumentProtocol::MESSAGE_STATBUCKET, TEST_METHOD(Messages52Test::testStatBucketMessage));
+ putTest(DocumentProtocol::MESSAGE_UPDATEDOCUMENT, TEST_METHOD(Messages52Test::testUpdateDocumentMessage));
+ putTest(DocumentProtocol::MESSAGE_VISITORINFO, TEST_METHOD(Messages52Test::testVisitorInfoMessage));
+
+ putTest(DocumentProtocol::REPLY_CREATEVISITOR, TEST_METHOD(Messages52Test::testCreateVisitorReply));
+ putTest(DocumentProtocol::REPLY_DESTROYVISITOR, TEST_METHOD(Messages52Test::testDestroyVisitorReply));
+ putTest(DocumentProtocol::REPLY_DOCUMENTIGNORED, TEST_METHOD(Messages52Test::testDocumentIgnoredReply));
+ putTest(DocumentProtocol::REPLY_DOCUMENTLIST, TEST_METHOD(Messages52Test::testDocumentListReply));
+ putTest(DocumentProtocol::REPLY_DOCUMENTSUMMARY, TEST_METHOD(Messages52Test::testDocumentSummaryReply));
+ putTest(DocumentProtocol::REPLY_EMPTYBUCKETS, TEST_METHOD(Messages52Test::testEmptyBucketsReply));
+ putTest(DocumentProtocol::REPLY_GETBUCKETLIST, TEST_METHOD(Messages52Test::testGetBucketListReply));
+ putTest(DocumentProtocol::REPLY_GETBUCKETSTATE, TEST_METHOD(Messages52Test::testGetBucketStateReply));
+ putTest(DocumentProtocol::REPLY_GETDOCUMENT, TEST_METHOD(Messages52Test::testGetDocumentReply));
+ putTest(DocumentProtocol::REPLY_MAPVISITOR, TEST_METHOD(Messages52Test::testMapVisitorReply));
+ putTest(DocumentProtocol::REPLY_PUTDOCUMENT, TEST_METHOD(Messages52Test::testPutDocumentReply));
+ putTest(DocumentProtocol::REPLY_QUERYRESULT, TEST_METHOD(Messages52Test::testQueryResultReply));
+ putTest(DocumentProtocol::REPLY_REMOVEDOCUMENT, TEST_METHOD(Messages52Test::testRemoveDocumentReply));
+ putTest(DocumentProtocol::REPLY_REMOVELOCATION, TEST_METHOD(Messages52Test::testRemoveLocationReply));
+ putTest(DocumentProtocol::REPLY_SEARCHRESULT, TEST_METHOD(Messages52Test::testSearchResultReply));
+ putTest(DocumentProtocol::REPLY_STATBUCKET, TEST_METHOD(Messages52Test::testStatBucketReply));
+ putTest(DocumentProtocol::REPLY_UPDATEDOCUMENT, TEST_METHOD(Messages52Test::testUpdateDocumentReply));
+ putTest(DocumentProtocol::REPLY_VISITORINFO, TEST_METHOD(Messages52Test::testVisitorInfoReply));
+ putTest(DocumentProtocol::REPLY_WRONGDISTRIBUTION, TEST_METHOD(Messages52Test::testWrongDistributionReply));
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Tests
+//
+///////////////////////////////////////////////////////////////////////////////
+
+static const int MESSAGE_BASE_LENGTH = 5;
+
namespace {
document::Document::SP
@@ -20,18 +83,308 @@ createDoc(const DocumentTypeRepo &repo, const string &type_name, const string &i
document::DocumentId(id)));
}
+} // namespace
+
+bool
+Messages52Test::testGetBucketListMessage()
+{
+ GetBucketListMessage msg(document::BucketId(16, 123));
+ msg.setLoadType(_loadTypes["foo"]);
+ EXPECT_EQUAL(string("foo"), msg.getLoadType().getName());
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 12u, serialize("GetBucketListMessage", msg));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetBucketListMessage", DocumentProtocol::MESSAGE_GETBUCKETLIST, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetBucketListMessage &ref = static_cast<GetBucketListMessage&>(*obj);
+ EXPECT_EQUAL(string("foo"), ref.getLoadType().getName());
+ EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId());
+ }
+ }
+ return true;
}
-static constexpr int MESSAGE_BASE_LENGTH = 5;
+bool
+Messages52Test::testEmptyBucketsMessage()
+{
+ std::vector<document::BucketId> bids;
+ for (size_t i=0; i < 13; ++i) {
+ bids.push_back(document::BucketId(16, i));
+ }
-Messages52Test::Messages52Test()
+ EmptyBucketsMessage msg(bids);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 112u, serialize("EmptyBucketsMessage", msg));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("EmptyBucketsMessage", DocumentProtocol::MESSAGE_EMPTYBUCKETS, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ EmptyBucketsMessage &ref = static_cast<EmptyBucketsMessage&>(*obj);
+ for (size_t i=0; i < 13; ++i) {
+ EXPECT_EQUAL(document::BucketId(16, i), ref.getBucketIds()[i]);
+ }
+ }
+ }
+ return true;
+}
+
+
+bool
+Messages52Test::testStatBucketMessage()
{
- // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support
- // version 5.2. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now.
+ StatBucketMessage msg(document::BucketId(16, 123), "id.user=123");
- putTest(DocumentProtocol::MESSAGE_PUTDOCUMENT, TEST_METHOD(Messages52Test::testPutDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_REMOVEDOCUMENT, TEST_METHOD(Messages52Test::testRemoveDocumentMessage));
- putTest(DocumentProtocol::MESSAGE_UPDATEDOCUMENT, TEST_METHOD(Messages52Test::testUpdateDocumentMessage));
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 27u, serialize("StatBucketMessage", msg));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("StatBucketMessage", DocumentProtocol::MESSAGE_STATBUCKET, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ StatBucketMessage &ref = static_cast<StatBucketMessage&>(*obj);
+ EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId());
+ EXPECT_EQUAL("id.user=123", ref.getDocumentSelection());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testCreateVisitorMessage() {
+ CreateVisitorMessage tmp("SomeLibrary", "myvisitor", "newyork", "london");
+ tmp.setDocumentSelection("true and false or true");
+ tmp.getParameters().set("myvar", "somevalue");
+ tmp.getParameters().set("anothervar", uint64_t(34));
+ tmp.getBuckets().push_back(document::BucketId(16, 1234));
+ tmp.setVisitRemoves(true);
+ tmp.setFieldSet("foo bar");
+ tmp.setVisitorOrdering(document::OrderingSpecification::DESCENDING);
+ tmp.setMaxBucketsPerVisitor(2);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)178, serialize("CreateVisitorMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("CreateVisitorMessage", DocumentProtocol::MESSAGE_CREATEVISITOR, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ CreateVisitorMessage &ref = static_cast<CreateVisitorMessage&>(*obj);
+
+ EXPECT_EQUAL(string("SomeLibrary"), ref.getLibraryName());
+ EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId());
+ EXPECT_EQUAL(string("newyork"), ref.getControlDestination());
+ EXPECT_EQUAL(string("london"), ref.getDataDestination());
+ EXPECT_EQUAL(string("true and false or true"), ref.getDocumentSelection());
+ EXPECT_EQUAL(string("foo bar"), ref.getFieldSet());
+ EXPECT_EQUAL(uint32_t(8), ref.getMaximumPendingReplyCount());
+ EXPECT_EQUAL(true, ref.visitRemoves());
+ EXPECT_EQUAL(false, ref.visitHeadersOnly());
+ EXPECT_EQUAL(false, ref.visitInconsistentBuckets());
+ EXPECT_EQUAL(size_t(1), ref.getBuckets().size());
+ EXPECT_EQUAL(document::BucketId(16, 1234), ref.getBuckets()[0]);
+ EXPECT_EQUAL(string("somevalue"), ref.getParameters().get("myvar"));
+ EXPECT_EQUAL(uint64_t(34), ref.getParameters().get("anothervar", uint64_t(1)));
+ EXPECT_EQUAL(document::OrderingSpecification::DESCENDING, ref.getVisitorOrdering());
+ EXPECT_EQUAL(uint32_t(2), ref.getMaxBucketsPerVisitor());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testDestroyVisitorMessage()
+{
+ DestroyVisitorMessage tmp("myvisitor");
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)17, serialize("DestroyVisitorMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("DestroyVisitorMessage", DocumentProtocol::MESSAGE_DESTROYVISITOR, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ DestroyVisitorMessage &ref = static_cast<DestroyVisitorMessage&>(*obj);
+ EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testDocumentListMessage()
+{
+ document::Document::SP doc =
+ createDoc(getTypeRepo(), "testdoc", "userdoc:scheme:1234:");
+ DocumentListMessage::Entry entry(1234, doc, false);
+
+ DocumentListMessage tmp(document::BucketId(16, 1234));
+ tmp.getDocuments().push_back(entry);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)63, serialize("DocumentListMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("DocumentListMessage", DocumentProtocol::MESSAGE_DOCUMENTLIST, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ DocumentListMessage &ref = static_cast<DocumentListMessage&>(*obj);
+
+ EXPECT_EQUAL("userdoc:scheme:1234:", ref.getDocuments()[0].getDocument()->getId().toString());
+ EXPECT_EQUAL(1234, ref.getDocuments()[0].getTimestamp());
+ EXPECT_TRUE(!ref.getDocuments()[0].isRemoveEntry());
+ }
+ }
+ return true;
+}
+
+
+bool
+Messages52Test::testRemoveLocationMessage()
+{
+ {
+ document::BucketIdFactory factory;
+ document::select::Parser parser(getTypeRepo(), factory);
+ RemoveLocationMessage msg(factory, parser, "id.group == \"mygroup\"");
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 29u, serialize("RemoveLocationMessage", msg));
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("RemoveLocationMessage", DocumentProtocol::MESSAGE_REMOVELOCATION, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ RemoveLocationMessage &ref = static_cast<RemoveLocationMessage&>(*obj);
+ EXPECT_EQUAL(string("id.group == \"mygroup\""), ref.getDocumentSelection());
+ // FIXME add to wire format, currently hardcoded.
+ EXPECT_EQUAL(string(document::FixedBucketSpaces::default_space_name()), ref.getBucketSpace());
+ }
+ }
+ }
+
+ return true;
+}
+
+
+
+bool
+Messages52Test::testDocumentSummaryMessage()
+{
+ DocumentSummaryMessage srm;
+ EXPECT_EQUAL(srm.hasSequenceId(), false);
+ EXPECT_EQUAL(srm.getSummaryCount(), size_t(0));
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(12), serialize("DocumentSummaryMessage-1", srm));
+
+ mbus::Routable::UP routable = deserialize("DocumentSummaryMessage-1", DocumentProtocol::MESSAGE_DOCUMENTSUMMARY, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ DocumentSummaryMessage * dm = static_cast<DocumentSummaryMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getSummaryCount(), size_t(0));
+
+ srm.addSummary("doc1", "summary1", 8);
+ srm.addSummary("aoc17", "summary45", 9);
+
+ const void *summary(NULL);
+ const char *docId(NULL);
+ size_t sz(0);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 52u, serialize("DocumentSummaryMessage-2", srm));
+ routable = deserialize("DocumentSummaryMessage-2", DocumentProtocol::MESSAGE_DOCUMENTSUMMARY, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<DocumentSummaryMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getSummaryCount(), size_t(2));
+ dm->getSummary(0, docId, summary, sz);
+ EXPECT_EQUAL(sz, 8u);
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ EXPECT_EQUAL(memcmp("summary1", summary, sz), 0);
+ dm->getSummary(1, docId, summary, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(strcmp("aoc17", docId), 0);
+ EXPECT_EQUAL(memcmp("summary45", summary, sz), 0);
+
+ srm.sort();
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 52u, serialize("DocumentSummaryMessage-3", srm));
+ routable = deserialize("DocumentSummaryMessage-3", DocumentProtocol::MESSAGE_DOCUMENTSUMMARY, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<DocumentSummaryMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getSummaryCount(), size_t(2));
+ dm->getSummary(0, docId, summary, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(strcmp("aoc17", docId), 0);
+ EXPECT_EQUAL(memcmp("summary45", summary, sz), 0);
+ dm->getSummary(1, docId, summary, sz);
+ EXPECT_EQUAL(sz, 8u);
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ EXPECT_EQUAL(memcmp("summary1", summary, sz), 0);
+ return true;
+}
+
+bool
+Messages52Test::testGetDocumentMessage()
+{
+ GetDocumentMessage tmp(document::DocumentId("doc:scheme:"), "foo bar");
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)27, serialize("GetDocumentMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetDocumentMessage", DocumentProtocol::MESSAGE_GETDOCUMENT, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetDocumentMessage &ref = static_cast<GetDocumentMessage&>(*obj);
+ EXPECT_EQUAL(string("doc:scheme:"), ref.getDocumentId().toString());
+ EXPECT_EQUAL(string("foo bar"), ref.getFieldSet());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testMapVisitorMessage()
+{
+ MapVisitorMessage tmp;
+ tmp.getData().set("foo", 3);
+ tmp.getData().set("bar", 5);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + (size_t)32, serialize("MapVisitorMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("MapVisitorMessage", DocumentProtocol::MESSAGE_MAPVISITOR, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ MapVisitorMessage &ref = static_cast<MapVisitorMessage&>(*obj);
+ EXPECT_EQUAL(3, ref.getData().get("foo", 0));
+ EXPECT_EQUAL(5, ref.getData().get("bar", 0));
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testCreateVisitorReply()
+{
+ CreateVisitorReply reply(DocumentProtocol::REPLY_CREATEVISITOR);
+ reply.setLastBucket(document::BucketId(16, 123));
+ vdslib::VisitorStatistics vs;
+ vs.setBucketsVisited(3);
+ vs.setDocumentsVisited(1000);
+ vs.setBytesVisited(1024000);
+ vs.setDocumentsReturned(123);
+ vs.setBytesReturned(512000);
+ vs.setSecondPassDocumentsReturned(456);
+ vs.setSecondPassBytesReturned(789100);
+ reply.setVisitorStatistics(vs);
+
+ EXPECT_EQUAL(65u, serialize("CreateVisitorReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("CreateVisitorReply", DocumentProtocol::REPLY_CREATEVISITOR, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ CreateVisitorReply &ref = static_cast<CreateVisitorReply&>(*obj);
+
+ EXPECT_EQUAL(ref.getLastBucket(), document::BucketId(16, 123));
+ EXPECT_EQUAL(ref.getVisitorStatistics().getBucketsVisited(), (uint32_t)3);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getDocumentsVisited(), (uint64_t)1000);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getBytesVisited(), (uint64_t)1024000);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getDocumentsReturned(), (uint64_t)123);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getBytesReturned(), (uint64_t)512000);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getSecondPassDocumentsReturned(), (uint64_t)456);
+ EXPECT_EQUAL(ref.getVisitorStatistics().getSecondPassBytesReturned(), (uint64_t)789100);
+ }
+ }
+ return true;
}
bool
@@ -65,6 +418,63 @@ Messages52Test::testPutDocumentMessage()
}
bool
+Messages52Test::testGetBucketStateMessage()
+{
+ GetBucketStateMessage tmp;
+ tmp.setBucketId(document::BucketId(16, 666));
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 12u, serialize("GetBucketStateMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetBucketStateMessage", DocumentProtocol::MESSAGE_GETBUCKETSTATE, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetBucketStateMessage &ref = static_cast<GetBucketStateMessage&>(*obj);
+
+ EXPECT_EQUAL(16u, ref.getBucketId().getUsedBits());
+ EXPECT_EQUAL(4611686018427388570ull, ref.getBucketId().getId());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testPutDocumentReply()
+{
+ WriteDocumentReply reply(DocumentProtocol::REPLY_PUTDOCUMENT);
+ reply.setHighestModificationTimestamp(30);
+
+ EXPECT_EQUAL(13u, serialize("PutDocumentReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("PutDocumentReply", DocumentProtocol::REPLY_PUTDOCUMENT, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ WriteDocumentReply &ref = static_cast<WriteDocumentReply&>(*obj);
+ EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testUpdateDocumentReply()
+{
+ UpdateDocumentReply reply;
+ reply.setWasFound(false);
+ reply.setHighestModificationTimestamp(30);
+
+ EXPECT_EQUAL(14u, serialize("UpdateDocumentReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("UpdateDocumentReply", DocumentProtocol::REPLY_UPDATEDOCUMENT, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ UpdateDocumentReply &ref = static_cast<UpdateDocumentReply&>(*obj);
+ EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
+ EXPECT_EQUAL(false, ref.wasFound());
+ }
+ }
+ return true;
+}
+
+bool
Messages52Test::testRemoveDocumentMessage()
{
RemoveDocumentMessage msg(document::DocumentId("doc:scheme:"));
@@ -86,6 +496,154 @@ Messages52Test::testRemoveDocumentMessage()
}
bool
+Messages52Test::testRemoveDocumentReply()
+{
+ RemoveDocumentReply reply;
+ std::vector<uint64_t> ts;
+ reply.setWasFound(false);
+ reply.setHighestModificationTimestamp(30);
+
+ EXPECT_EQUAL(14u, serialize("RemoveDocumentReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("RemoveDocumentReply", DocumentProtocol::REPLY_REMOVEDOCUMENT, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ RemoveDocumentReply &ref = static_cast<RemoveDocumentReply&>(*obj);
+ EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp());
+ EXPECT_EQUAL(false, ref.wasFound());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testSearchResultMessage()
+{
+ SearchResultMessage srm;
+ EXPECT_EQUAL(srm.getSequenceId(), 0u);
+ EXPECT_EQUAL(srm.getHitCount(), 0u);
+ EXPECT_EQUAL(srm.getAggregatorList().getSerializedSize(), 4u);
+ EXPECT_EQUAL(srm.vdslib::SearchResult::getSerializedSize(), 20u);
+ EXPECT_EQUAL(srm.getSerializedSize(), 20u);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(24), serialize("SearchResultMessage-1", srm));
+
+ mbus::Routable::UP routable = deserialize("SearchResultMessage-1", DocumentProtocol::MESSAGE_SEARCHRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ SearchResultMessage * dm = static_cast<SearchResultMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getSequenceId(), size_t(0));
+ EXPECT_EQUAL(dm->getHitCount(), size_t(0));
+
+ srm.addHit(0, "doc1", 89);
+ srm.addHit(1, "doc17", 109);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 55u, serialize("SearchResultMessage-2", srm));
+ routable = deserialize("SearchResultMessage-2", DocumentProtocol::MESSAGE_SEARCHRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<SearchResultMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getHitCount(), size_t(2));
+ const char *docId;
+ SearchResultMessage::RankType rank;
+ dm->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dm->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+
+ srm.sort();
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 55u, serialize("SearchResultMessage-3", srm));
+ routable = deserialize("SearchResultMessage-3", DocumentProtocol::MESSAGE_SEARCHRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<SearchResultMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getHitCount(), size_t(2));
+ dm->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dm->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+
+ SearchResultMessage srm2;
+ srm2.addHit(0, "doc1", 89, "sortdata2", 9);
+ srm2.addHit(1, "doc17", 109, "sortdata1", 9);
+ srm2.addHit(2, "doc18", 90, "sortdata3", 9);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 108u, serialize("SearchResultMessage-4", srm2));
+ routable = deserialize("SearchResultMessage-4", DocumentProtocol::MESSAGE_SEARCHRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<SearchResultMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getHitCount(), size_t(3));
+ dm->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dm->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dm->getHit(2, docId, rank);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+
+ srm2.sort();
+ const void *buf;
+ size_t sz;
+ srm2.getHit(0, docId, rank);
+ srm2.getSortBlob(0, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ srm2.getHit(1, docId, rank);
+ srm2.getSortBlob(1, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ srm2.getHit(2, docId, rank);
+ srm2.getSortBlob(2, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 108u, serialize("SearchResultMessage-5", srm2));
+ routable = deserialize("SearchResultMessage-5", DocumentProtocol::MESSAGE_SEARCHRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<SearchResultMessage *>(routable.get());
+ EXPECT_EQUAL(dm->getHitCount(), size_t(3));
+ dm->getHit(0, docId, rank);
+ dm->getSortBlob(0, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dm->getHit(1, docId, rank);
+ dm->getSortBlob(1, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dm->getHit(2, docId, rank);
+ dm->getSortBlob(2, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
+ EXPECT_EQUAL(rank, SearchResultMessage::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+ return true;
+}
+
+bool
Messages52Test::testUpdateDocumentMessage()
{
const DocumentTypeRepo & repo = getTypeRepo();
@@ -117,3 +675,387 @@ Messages52Test::testUpdateDocumentMessage()
}
return true;
}
+
+bool
+Messages52Test::testQueryResultMessage()
+{
+ QueryResultMessage srm;
+ vdslib::SearchResult & sr(srm.getSearchResult());
+ EXPECT_EQUAL(srm.getSequenceId(), 0u);
+ EXPECT_EQUAL(sr.getHitCount(), 0u);
+ EXPECT_EQUAL(sr.getAggregatorList().getSerializedSize(), 4u);
+ EXPECT_EQUAL(sr.getSerializedSize(), 20u);
+ EXPECT_EQUAL(srm.getApproxSize(), 28u);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + size_t(32), serialize("QueryResultMessage-1", srm));
+
+ mbus::Routable::UP routable = deserialize("QueryResultMessage-1", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ QueryResultMessage * dm = static_cast<QueryResultMessage *>(routable.get());
+ vdslib::SearchResult * dr(&dm->getSearchResult());
+ EXPECT_EQUAL(dm->getSequenceId(), size_t(0));
+ EXPECT_EQUAL(dr->getHitCount(), size_t(0));
+
+ sr.addHit(0, "doc1", 89);
+ sr.addHit(1, "doc17", 109);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 63u, serialize("QueryResultMessage-2", srm));
+ routable = deserialize("QueryResultMessage-2", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<QueryResultMessage *>(routable.get());
+ dr = &dm->getSearchResult();
+ EXPECT_EQUAL(dr->getHitCount(), size_t(2));
+ const char *docId;
+ vdslib::SearchResult::RankType rank;
+ dr->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dr->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+
+ sr.sort();
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 63u, serialize("QueryResultMessage-3", srm));
+ routable = deserialize("QueryResultMessage-3", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<QueryResultMessage *>(routable.get());
+ dr = &dm->getSearchResult();
+ EXPECT_EQUAL(dr->getHitCount(), size_t(2));
+ dr->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dr->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+
+ QueryResultMessage srm2;
+ vdslib::SearchResult & sr2(srm2.getSearchResult());
+ sr2.addHit(0, "doc1", 89, "sortdata2", 9);
+ sr2.addHit(1, "doc17", 109, "sortdata1", 9);
+ sr2.addHit(2, "doc18", 90, "sortdata3", 9);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 116u, serialize("QueryResultMessage-4", srm2));
+ routable = deserialize("QueryResultMessage-4", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<QueryResultMessage *>(routable.get());
+ dr = &dm->getSearchResult();
+ EXPECT_EQUAL(dr->getHitCount(), size_t(3));
+ dr->getHit(0, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dr->getHit(1, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dr->getHit(2, docId, rank);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+
+ sr2.sort();
+ const void *buf;
+ size_t sz;
+ sr2.getHit(0, docId, rank);
+ sr2.getSortBlob(0, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ sr2.getHit(1, docId, rank);
+ sr2.getSortBlob(1, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ sr2.getHit(2, docId, rank);
+ sr2.getSortBlob(2, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 116u, serialize("QueryResultMessage-5", srm2));
+ routable = deserialize("QueryResultMessage-5", DocumentProtocol::MESSAGE_QUERYRESULT, LANG_CPP);
+ if (!EXPECT_TRUE(routable.get() != NULL)) {
+ return false;
+ }
+ dm = static_cast<QueryResultMessage *>(routable.get());
+ dr = &dm->getSearchResult();
+ EXPECT_EQUAL(dr->getHitCount(), size_t(3));
+ dr->getHit(0, docId, rank);
+ dr->getSortBlob(0, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata1", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(109));
+ EXPECT_EQUAL(strcmp("doc17", docId), 0);
+ dr->getHit(1, docId, rank);
+ dr->getSortBlob(1, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata2", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(89));
+ EXPECT_EQUAL(strcmp("doc1", docId), 0);
+ dr->getHit(2, docId, rank);
+ dr->getSortBlob(2, buf, sz);
+ EXPECT_EQUAL(sz, 9u);
+ EXPECT_EQUAL(memcmp("sortdata3", buf, sz), 0);
+ EXPECT_EQUAL(rank, vdslib::SearchResult::RankType(90));
+ EXPECT_EQUAL(strcmp("doc18", docId), 0);
+ return true;
+}
+
+bool
+Messages52Test::testQueryResultReply()
+{
+ return tryVisitorReply("QueryResultReply", DocumentProtocol::REPLY_QUERYRESULT);
+}
+
+bool
+Messages52Test::testVisitorInfoMessage()
+{
+
+ VisitorInfoMessage tmp;
+ tmp.getFinishedBuckets().push_back(document::BucketId(16, 1));
+ tmp.getFinishedBuckets().push_back(document::BucketId(16, 2));
+ tmp.getFinishedBuckets().push_back(document::BucketId(16, 4));
+ string utf8 = "error message: \u00e6\u00c6\u00f8\u00d8\u00e5\u00c5\u00f6\u00d6";
+ tmp.setErrorMessage(utf8);
+
+ EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 67u, serialize("VisitorInfoMessage", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("VisitorInfoMessage", DocumentProtocol::MESSAGE_VISITORINFO, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ VisitorInfoMessage &ref = static_cast<VisitorInfoMessage&>(*obj);
+ EXPECT_EQUAL(document::BucketId(16, 1), ref.getFinishedBuckets()[0]);
+ EXPECT_EQUAL(document::BucketId(16, 2), ref.getFinishedBuckets()[1]);
+ EXPECT_EQUAL(document::BucketId(16, 4), ref.getFinishedBuckets()[2]);
+ EXPECT_EQUAL(utf8, ref.getErrorMessage());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testDestroyVisitorReply()
+{
+ return tryDocumentReply("DestroyVisitorReply", DocumentProtocol::REPLY_DESTROYVISITOR);
+}
+
+bool
+Messages52Test::testDocumentIgnoredReply()
+{
+ DocumentIgnoredReply tmp;
+ serialize("DocumentIgnoredReply", tmp);
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj(
+ deserialize("DocumentIgnoredReply",
+ DocumentProtocol::REPLY_DOCUMENTIGNORED, lang));
+ EXPECT_TRUE(obj.get() != NULL);
+ }
+ return true;
+}
+
+bool
+Messages52Test::testDocumentListReply()
+{
+ return tryVisitorReply("DocumentListReply", DocumentProtocol::REPLY_DOCUMENTLIST);
+}
+
+bool
+Messages52Test::testDocumentSummaryReply()
+{
+ return tryVisitorReply("DocumentSummaryReply", DocumentProtocol::REPLY_DOCUMENTSUMMARY);
+}
+
+bool
+Messages52Test::testGetDocumentReply()
+{
+ document::Document::SP doc =
+ createDoc(getTypeRepo(), "testdoc", "doc:scheme:");
+ GetDocumentReply tmp(doc);
+
+ EXPECT_EQUAL((size_t)43, serialize("GetDocumentReply", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetDocumentReply", DocumentProtocol::REPLY_GETDOCUMENT, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetDocumentReply &ref = static_cast<GetDocumentReply&>(*obj);
+
+ EXPECT_EQUAL(string("testdoc"), ref.getDocument().getType().getName());
+ EXPECT_EQUAL(string("doc:scheme:"), ref.getDocument().getId().toString());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testMapVisitorReply()
+{
+ return tryVisitorReply("MapVisitorReply", DocumentProtocol::REPLY_MAPVISITOR);
+}
+
+bool
+Messages52Test::testSearchResultReply()
+{
+ return tryVisitorReply("SearchResultReply", DocumentProtocol::REPLY_SEARCHRESULT);
+}
+
+bool
+Messages52Test::testStatBucketReply()
+{
+ StatBucketReply msg;
+ msg.setResults("These are the votes of the Norwegian jury");
+
+ EXPECT_EQUAL(50u, serialize("StatBucketReply", msg));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("StatBucketReply", DocumentProtocol::REPLY_STATBUCKET, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ StatBucketReply &ref = static_cast<StatBucketReply&>(*obj);
+ EXPECT_EQUAL("These are the votes of the Norwegian jury", ref.getResults());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testVisitorInfoReply()
+{
+ return tryVisitorReply("VisitorInfoReply", DocumentProtocol::REPLY_VISITORINFO);
+}
+
+bool
+Messages52Test::testWrongDistributionReply()
+{
+ WrongDistributionReply tmp("distributor:3 storage:2");
+
+ serialize("WrongDistributionReply", tmp);
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("WrongDistributionReply", DocumentProtocol::REPLY_WRONGDISTRIBUTION, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ WrongDistributionReply &ref = static_cast<WrongDistributionReply&>(*obj);
+ EXPECT_EQUAL(string("distributor:3 storage:2"), ref.getSystemState());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testGetBucketListReply()
+{
+ GetBucketListReply reply;
+ reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(16, 123), "foo"));
+ reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(17, 1123), "bar"));
+ reply.getBuckets().push_back(GetBucketListReply::BucketInfo(document::BucketId(18, 11123), "zoink"));
+
+ EXPECT_EQUAL(56u, serialize("GetBucketListReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetBucketListReply", DocumentProtocol::REPLY_GETBUCKETLIST, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetBucketListReply &ref = static_cast<GetBucketListReply&>(*obj);
+
+ EXPECT_EQUAL(ref.getBuckets()[0], GetBucketListReply::BucketInfo(document::BucketId(16, 123), "foo"));
+ EXPECT_EQUAL(ref.getBuckets()[1], GetBucketListReply::BucketInfo(document::BucketId(17, 1123), "bar"));
+ EXPECT_EQUAL(ref.getBuckets()[2], GetBucketListReply::BucketInfo(document::BucketId(18, 11123), "zoink"));
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testGetBucketStateReply()
+{
+ document::GlobalId foo = document::DocumentId("doc:scheme:foo").getGlobalId();
+ document::GlobalId bar = document::DocumentId("doc:scheme:bar").getGlobalId();
+
+ GetBucketStateReply reply;
+ reply.getBucketState().push_back(DocumentState(foo, 777, false));
+ reply.getBucketState().push_back(DocumentState(bar, 888, true));
+ EXPECT_EQUAL(53u, serialize("GetBucketStateReply", reply));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("GetBucketStateReply", DocumentProtocol::REPLY_GETBUCKETSTATE, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ GetBucketStateReply &ref = static_cast<GetBucketStateReply&>(*obj);
+
+ EXPECT_EQUAL(777u, ref.getBucketState()[0].getTimestamp());
+ EXPECT_EQUAL(foo, ref.getBucketState()[0].getGlobalId());
+ EXPECT_EQUAL(false, ref.getBucketState()[0].isRemoveEntry());
+ EXPECT_EQUAL(888u, ref.getBucketState()[1].getTimestamp());
+ EXPECT_EQUAL(bar, ref.getBucketState()[1].getGlobalId());
+ EXPECT_EQUAL(true, ref.getBucketState()[1].isRemoveEntry());
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::testEmptyBucketsReply()
+{
+ return tryVisitorReply("EmptyBucketsReply", DocumentProtocol::REPLY_EMPTYBUCKETS);
+}
+
+bool
+Messages52Test::testRemoveLocationReply()
+{
+ DocumentReply tmp(DocumentProtocol::REPLY_REMOVELOCATION);
+
+ EXPECT_EQUAL((uint32_t)5, serialize("RemoveLocationReply", tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize("RemoveLocationReply", DocumentProtocol::REPLY_REMOVELOCATION, lang);
+ EXPECT_TRUE(obj.get() != NULL);
+ }
+ return true;
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Utilities
+//
+////////////////////////////////////////////////////////////////////////////////
+
+bool
+Messages52Test::tryDocumentReply(const string &filename, uint32_t type)
+{
+ DocumentReply tmp(type);
+
+ EXPECT_EQUAL((uint32_t)5, serialize(filename, tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize(filename, type, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ DocumentReply *ref = dynamic_cast<DocumentReply*>(obj.get());
+ EXPECT_TRUE(ref != NULL);
+ }
+ }
+ return true;
+}
+
+bool
+Messages52Test::tryVisitorReply(const string &filename, uint32_t type)
+{
+ VisitorReply tmp(type);
+
+ EXPECT_EQUAL((uint32_t)5, serialize(filename, tmp));
+
+ for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) {
+ mbus::Routable::UP obj = deserialize(filename, type, lang);
+ if (EXPECT_TRUE(obj.get() != NULL)) {
+ VisitorReply *ref = dynamic_cast<VisitorReply*>(obj.get());
+ EXPECT_TRUE(ref != NULL);
+ }
+ }
+ return true;
+}
diff --git a/documentapi/src/tests/messages/messages52test.h b/documentapi/src/tests/messages/messages52test.h
index a663ae15fdc..6b019d77bde 100644
--- a/documentapi/src/tests/messages/messages52test.h
+++ b/documentapi/src/tests/messages/messages52test.h
@@ -2,22 +2,55 @@
// @author Vegard Sjonfjell
#pragma once
-#include "messages51test.h"
+#include "testbase.h"
-class Messages52Test : public Messages51Test {
+class Messages52Test : public TestBase {
protected:
- const vespalib::Version getVersion() const override { return vespalib::Version(5, 115, 0); }
+ const vespalib::Version getVersion() const override { return vespalib::Version(5, 115); }
+ bool shouldTestCoverage() const override { return true; }
+ bool tryDocumentReply(const string &filename, uint32_t type);
+ bool tryVisitorReply(const string &filename, uint32_t type);
+
+ static size_t serializedLength(const string & str) { return sizeof(int32_t) + str.size(); }
public:
Messages52Test();
+ bool testCreateVisitorMessage();
+ bool testCreateVisitorReply();
+ bool testDestroyVisitorMessage();
+ bool testDestroyVisitorReply();
+ bool testDocumentIgnoredReply();
+ bool testDocumentListMessage();
+ bool testDocumentListReply();
+ bool testDocumentSummaryMessage();
+ bool testDocumentSummaryReply();
+ bool testEmptyBucketsMessage();
+ bool testEmptyBucketsReply();
+ bool testGetBucketListMessage();
+ bool testGetBucketListReply();
+ bool testGetBucketStateMessage();
+ bool testGetBucketStateReply();
+ bool testGetDocumentMessage();
+ bool testGetDocumentReply();
+ bool testMapVisitorMessage();
+ bool testMapVisitorReply();
bool testPutDocumentMessage();
- bool testUpdateDocumentMessage();
+ bool testPutDocumentReply();
+ bool testQueryResultMessage();
+ bool testQueryResultReply();
bool testRemoveDocumentMessage();
-
-protected:
- static size_t serializedLength(const string & str) {
- return sizeof(int32_t) + str.size();
- }
+ bool testRemoveDocumentReply();
+ bool testRemoveLocationMessage();
+ bool testRemoveLocationReply();
+ bool testSearchResultMessage();
+ bool testSearchResultReply();
+ bool testStatBucketMessage();
+ bool testStatBucketReply();
+ bool testUpdateDocumentMessage();
+ bool testUpdateDocumentReply();
+ bool testVisitorInfoMessage();
+ bool testVisitorInfoReply();
+ bool testWrongDistributionReply();
};
diff --git a/documentapi/src/tests/policies/policies_test.cpp b/documentapi/src/tests/policies/policies_test.cpp
index 3e804c30415..c01cdfde30c 100644
--- a/documentapi/src/tests/policies/policies_test.cpp
+++ b/documentapi/src/tests/policies/policies_test.cpp
@@ -22,6 +22,7 @@
#include <vespa/document/fieldvalue/longfieldvalue.h>
#include <vespa/document/datatype/documenttype.h>
#include <vespa/document/repo/documenttyperepo.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/stringfmt.h>
diff --git a/documentapi/src/tests/routablefactory/routablefactory.cpp b/documentapi/src/tests/routablefactory/routablefactory.cpp
index 1abecdbf6c5..63d37de8c65 100644
--- a/documentapi/src/tests/routablefactory/routablefactory.cpp
+++ b/documentapi/src/tests/routablefactory/routablefactory.cpp
@@ -1,7 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/document/repo/documenttyperepo.h>
#include <vespa/documentapi/messagebus/documentprotocol.h>
-#include <vespa/documentapi/messagebus/routablefactories51.h>
+#include <vespa/documentapi/messagebus/routablefactories52.h>
#include <vespa/messagebus/testlib/receptor.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
@@ -48,7 +48,7 @@ public:
}
};
-class MyMessageFactory : public RoutableFactories51::DocumentMessageFactory {
+class MyMessageFactory : public RoutableFactories52::DocumentMessageFactory {
protected:
DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
(void)buf;
@@ -62,7 +62,7 @@ protected:
}
};
-class MyReplyFactory : public RoutableFactories51::DocumentReplyFactory {
+class MyReplyFactory : public RoutableFactories52::DocumentReplyFactory {
protected:
DocumentReply::UP doDecode(document::ByteBuffer &buf) const override {
(void)buf;
diff --git a/documentapi/src/vespa/documentapi/documentapi.h b/documentapi/src/vespa/documentapi/documentapi.h
index dff4125e624..0056dd2abdf 100644
--- a/documentapi/src/vespa/documentapi/documentapi.h
+++ b/documentapi/src/vespa/documentapi/documentapi.h
@@ -1,8 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include <vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h>
-#include <vespa/documentapi/messagebus/messages/batchdocumentupdatereply.h>
#include <vespa/documentapi/messagebus/messages/getbucketstatemessage.h>
#include <vespa/documentapi/messagebus/messages/getbucketstatereply.h>
#include <vespa/documentapi/messagebus/messages/getdocumentmessage.h>
diff --git a/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt b/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt
index 1df761b8af5..6f65b3c67a9 100644
--- a/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt
+++ b/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt
@@ -3,10 +3,6 @@ vespa_add_library(documentapi_documentapimessagebus OBJECT
SOURCES
documentprotocol.cpp
replymerger.cpp
- routablefactories41.cpp
- routablefactories42.cpp
- routablefactories50.cpp
- routablefactories51.cpp
routablefactories52.cpp
routablefactories60.cpp
routablerepository.cpp
diff --git a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp
index d2661d0fe6c..b70a76690f9 100644
--- a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp
@@ -1,7 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "routablefactories50.h"
-#include "routablefactories51.h"
#include "routablefactories52.h"
#include "routablefactories60.h"
#include "routingpolicyfactories.h"
@@ -46,64 +44,49 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes,
putRoutingPolicyFactory("LoadBalancer", IRoutingPolicyFactory::SP(new RoutingPolicyFactories::LoadBalancerPolicyFactory()));
// Prepare version specifications to use when adding routable factories.
- vespalib::VersionSpecification version50(5, 0);
- vespalib::VersionSpecification version51(5, 1);
vespalib::VersionSpecification version52(5, 115);
vespalib::VersionSpecification version6(6, 221);
- std::vector<vespalib::VersionSpecification> from50 = { version50, version51, version52, version6 };
- std::vector<vespalib::VersionSpecification> from51 = { version51, version52, version6 };
std::vector<vespalib::VersionSpecification> from52 = { version52, version6 };
std::vector<vespalib::VersionSpecification> from6 = { version6 };
- // Add 5.0 serialization
- putRoutableFactory(MESSAGE_BATCHDOCUMENTUPDATE, IRoutableFactory::SP(new RoutableFactories50::BatchDocumentUpdateMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories50::CreateVisitorMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_DESTROYVISITOR, IRoutableFactory::SP(new RoutableFactories50::DestroyVisitorMessageFactory()), from50);
- putRoutableFactory(MESSAGE_DOCUMENTLIST, IRoutableFactory::SP(new RoutableFactories50::DocumentListMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_DOCUMENTSUMMARY, IRoutableFactory::SP(new RoutableFactories50::DocumentSummaryMessageFactory()), from50);
- putRoutableFactory(MESSAGE_EMPTYBUCKETS, IRoutableFactory::SP(new RoutableFactories50::EmptyBucketsMessageFactory()), from50);
- putRoutableFactory(MESSAGE_GETBUCKETLIST, IRoutableFactory::SP(new RoutableFactories50::GetBucketListMessageFactory()), from50);
- putRoutableFactory(MESSAGE_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories50::GetBucketStateMessageFactory()), from50);
- putRoutableFactory(MESSAGE_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::GetDocumentMessageFactory()), from50);
- putRoutableFactory(MESSAGE_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories50::MapVisitorMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::PutDocumentMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories50::QueryResultMessageFactory()), from50);
- putRoutableFactory(MESSAGE_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::RemoveDocumentMessageFactory()), from50);
- putRoutableFactory(MESSAGE_REMOVELOCATION, IRoutableFactory::SP(new RoutableFactories50::RemoveLocationMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_SEARCHRESULT, IRoutableFactory::SP(new RoutableFactories50::SearchResultMessageFactory()), from50);
- putRoutableFactory(MESSAGE_STATBUCKET, IRoutableFactory::SP(new RoutableFactories50::StatBucketMessageFactory()), from50);
- putRoutableFactory(MESSAGE_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::UpdateDocumentMessageFactory(*_repo)), from50);
- putRoutableFactory(MESSAGE_VISITORINFO, IRoutableFactory::SP(new RoutableFactories50::VisitorInfoMessageFactory()), from50);
- putRoutableFactory(REPLY_BATCHDOCUMENTUPDATE, IRoutableFactory::SP(new RoutableFactories50::BatchDocumentUpdateReplyFactory()), from50);
- putRoutableFactory(REPLY_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories50::CreateVisitorReplyFactory()), from50);
- putRoutableFactory(REPLY_DESTROYVISITOR, IRoutableFactory::SP(new RoutableFactories50::DestroyVisitorReplyFactory()), from50);
- putRoutableFactory(REPLY_DOCUMENTLIST, IRoutableFactory::SP(new RoutableFactories50::DocumentListReplyFactory()), from50);
- putRoutableFactory(REPLY_DOCUMENTSUMMARY, IRoutableFactory::SP(new RoutableFactories50::DocumentSummaryReplyFactory()), from50);
- putRoutableFactory(REPLY_EMPTYBUCKETS, IRoutableFactory::SP(new RoutableFactories50::EmptyBucketsReplyFactory()), from50);
- putRoutableFactory(REPLY_GETBUCKETLIST, IRoutableFactory::SP(new RoutableFactories50::GetBucketListReplyFactory()), from50);
- putRoutableFactory(REPLY_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories50::GetBucketStateReplyFactory()), from50);
- putRoutableFactory(REPLY_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::GetDocumentReplyFactory(*_repo)), from50);
- putRoutableFactory(REPLY_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories50::MapVisitorReplyFactory()), from50);
- putRoutableFactory(REPLY_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::PutDocumentReplyFactory()), from50);
- putRoutableFactory(REPLY_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories50::QueryResultReplyFactory()), from50);
- putRoutableFactory(REPLY_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::RemoveDocumentReplyFactory()), from50);
- putRoutableFactory(REPLY_REMOVELOCATION, IRoutableFactory::SP(new RoutableFactories50::RemoveLocationReplyFactory()), from50);
- putRoutableFactory(REPLY_SEARCHRESULT, IRoutableFactory::SP(new RoutableFactories50::SearchResultReplyFactory()), from50);
- putRoutableFactory(REPLY_STATBUCKET, IRoutableFactory::SP(new RoutableFactories50::StatBucketReplyFactory()), from50);
- putRoutableFactory(REPLY_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::UpdateDocumentReplyFactory()), from50);
- putRoutableFactory(REPLY_VISITORINFO, IRoutableFactory::SP(new RoutableFactories50::VisitorInfoReplyFactory()), from50);
- putRoutableFactory(REPLY_WRONGDISTRIBUTION, IRoutableFactory::SP(new RoutableFactories50::WrongDistributionReplyFactory()), from50);
-
- // Add 5.1 serialization
- putRoutableFactory(MESSAGE_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories51::GetDocumentMessageFactory()), from51);
- putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories51::CreateVisitorMessageFactory(*_repo)), from51);
- putRoutableFactory(REPLY_DOCUMENTIGNORED, IRoutableFactory::SP(new RoutableFactories51::DocumentIgnoredReplyFactory()), from51);
-
// Add 5.2 serialization
+ putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories52::CreateVisitorMessageFactory(*_repo)), from52);
+ putRoutableFactory(MESSAGE_DESTROYVISITOR, IRoutableFactory::SP(new RoutableFactories52::DestroyVisitorMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_DOCUMENTLIST, IRoutableFactory::SP(new RoutableFactories52::DocumentListMessageFactory(*_repo)), from52);
+ putRoutableFactory(MESSAGE_DOCUMENTSUMMARY, IRoutableFactory::SP(new RoutableFactories52::DocumentSummaryMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_EMPTYBUCKETS, IRoutableFactory::SP(new RoutableFactories52::EmptyBucketsMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_GETBUCKETLIST, IRoutableFactory::SP(new RoutableFactories52::GetBucketListMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories52::GetBucketStateMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::GetDocumentMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories52::MapVisitorMessageFactory(*_repo)), from52);
putRoutableFactory(MESSAGE_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::PutDocumentMessageFactory(*_repo)), from52);
- putRoutableFactory(MESSAGE_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::UpdateDocumentMessageFactory(*_repo)), from52);
+ putRoutableFactory(MESSAGE_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories52::QueryResultMessageFactory()), from52);
putRoutableFactory(MESSAGE_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::RemoveDocumentMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_REMOVELOCATION, IRoutableFactory::SP(new RoutableFactories52::RemoveLocationMessageFactory(*_repo)), from52);
+ putRoutableFactory(MESSAGE_SEARCHRESULT, IRoutableFactory::SP(new RoutableFactories52::SearchResultMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_STATBUCKET, IRoutableFactory::SP(new RoutableFactories52::StatBucketMessageFactory()), from52);
+ putRoutableFactory(MESSAGE_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::UpdateDocumentMessageFactory(*_repo)), from52);
+ putRoutableFactory(MESSAGE_VISITORINFO, IRoutableFactory::SP(new RoutableFactories52::VisitorInfoMessageFactory()), from52);
+ putRoutableFactory(REPLY_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories52::CreateVisitorReplyFactory()), from52);
+ putRoutableFactory(REPLY_DESTROYVISITOR, IRoutableFactory::SP(new RoutableFactories52::DestroyVisitorReplyFactory()), from52);
+ putRoutableFactory(REPLY_DOCUMENTIGNORED, IRoutableFactory::SP(new RoutableFactories52::DocumentIgnoredReplyFactory()), from52);
+ putRoutableFactory(REPLY_DOCUMENTLIST, IRoutableFactory::SP(new RoutableFactories52::DocumentListReplyFactory()), from52);
+ putRoutableFactory(REPLY_DOCUMENTSUMMARY, IRoutableFactory::SP(new RoutableFactories52::DocumentSummaryReplyFactory()), from52);
+ putRoutableFactory(REPLY_EMPTYBUCKETS, IRoutableFactory::SP(new RoutableFactories52::EmptyBucketsReplyFactory()), from52);
+ putRoutableFactory(REPLY_GETBUCKETLIST, IRoutableFactory::SP(new RoutableFactories52::GetBucketListReplyFactory()), from52);
+ putRoutableFactory(REPLY_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories52::GetBucketStateReplyFactory()), from52);
+ putRoutableFactory(REPLY_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::GetDocumentReplyFactory(*_repo)), from52);
+ putRoutableFactory(REPLY_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories52::MapVisitorReplyFactory()), from52);
+ putRoutableFactory(REPLY_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::PutDocumentReplyFactory()), from52);
+ putRoutableFactory(REPLY_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories52::QueryResultReplyFactory()), from52);
+ putRoutableFactory(REPLY_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::RemoveDocumentReplyFactory()), from52);
+ putRoutableFactory(REPLY_REMOVELOCATION, IRoutableFactory::SP(new RoutableFactories52::RemoveLocationReplyFactory()), from52);
+ putRoutableFactory(REPLY_SEARCHRESULT, IRoutableFactory::SP(new RoutableFactories52::SearchResultReplyFactory()), from52);
+ putRoutableFactory(REPLY_STATBUCKET, IRoutableFactory::SP(new RoutableFactories52::StatBucketReplyFactory()), from52);
+ putRoutableFactory(REPLY_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::UpdateDocumentReplyFactory()), from52);
+ putRoutableFactory(REPLY_VISITORINFO, IRoutableFactory::SP(new RoutableFactories52::VisitorInfoReplyFactory()), from52);
+ putRoutableFactory(REPLY_WRONGDISTRIBUTION, IRoutableFactory::SP(new RoutableFactories52::WrongDistributionReplyFactory()), from52);
// Add 6.x serialization (TODO finalize version)
putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories60::CreateVisitorMessageFactory(*_repo)), from6);
diff --git a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.h b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.h
index 32e6dc1d95e..79f7d7c0ccc 100644
--- a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.h
+++ b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.h
@@ -68,7 +68,6 @@ public:
MESSAGE_EMPTYBUCKETS = DOCUMENT_MESSAGE + 23,
MESSAGE_REMOVELOCATION = DOCUMENT_MESSAGE + 24,
MESSAGE_QUERYRESULT = DOCUMENT_MESSAGE + 25,
- MESSAGE_BATCHDOCUMENTUPDATE = DOCUMENT_MESSAGE + 26,
// MESSAGE_GARBAGECOLLECT = DOCUMENT_MESSAGE + 27,
DOCUMENT_REPLY = 200000,
@@ -92,7 +91,6 @@ public:
REPLY_EMPTYBUCKETS = DOCUMENT_REPLY + 23,
REPLY_REMOVELOCATION = DOCUMENT_REPLY + 24,
REPLY_QUERYRESULT = DOCUMENT_REPLY + 25,
- REPLY_BATCHDOCUMENTUPDATE = DOCUMENT_REPLY + 26,
// REPLY_GARBAGECOLLECT = DOCUMENT_REPLY + 27,
REPLY_WRONGDISTRIBUTION = DOCUMENT_REPLY + 1000,
REPLY_DOCUMENTIGNORED = DOCUMENT_REPLY + 1001
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/CMakeLists.txt b/documentapi/src/vespa/documentapi/messagebus/messages/CMakeLists.txt
index 3fa7e6086e9..7bd18a14719 100644
--- a/documentapi/src/vespa/documentapi/messagebus/messages/CMakeLists.txt
+++ b/documentapi/src/vespa/documentapi/messagebus/messages/CMakeLists.txt
@@ -1,8 +1,6 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
vespa_add_library(documentapi_documentapimessages OBJECT
SOURCES
- batchdocumentupdatemessage.cpp
- batchdocumentupdatereply.cpp
documentignoredreply.cpp
documentmessage.cpp
documentreply.cpp
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.cpp
deleted file mode 100644
index 2b38f9b24ae..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "batchdocumentupdatemessage.h"
-#include "batchdocumentupdatereply.h"
-#include <vespa/documentapi/messagebus/documentprotocol.h>
-#include <vespa/document/bucket/bucketidfactory.h>
-#include <vespa/vespalib/util/exceptions.h>
-
-namespace documentapi {
-
-BatchDocumentUpdateMessage::BatchDocumentUpdateMessage(uint64_t userId)
- : _userId(userId)
-{
- setBucketId(document::UserDocIdString(vespalib::make_string("userdoc:foo:%lu:bar", _userId)));
-}
-
-BatchDocumentUpdateMessage::BatchDocumentUpdateMessage(const string& group)
- : _userId(0),
- _group(group)
-{
- setBucketId(document::GroupDocIdString("groupdoc:foo:" + _group + ":bar"));
-}
-
-BatchDocumentUpdateMessage::~BatchDocumentUpdateMessage() {}
-
-void
-BatchDocumentUpdateMessage::setBucketId(const document::IdString& idString)
-{
- document::BucketIdFactory factory;
- _bucketId = factory.getBucketId(document::DocumentId(idString));
-}
-
-void
-BatchDocumentUpdateMessage::addUpdate(document::DocumentUpdate::SP update)
-{
- verifyUpdate(*update);
- _updates.push_back(update);
-}
-
-void
-BatchDocumentUpdateMessage::verifyUpdate(const document::DocumentUpdate& update) {
- const document::IdString& idString = update.getId().getScheme();
-
- if (_group.length()) {
- string group;
-
- if (idString.hasGroup()) {
- group = idString.getGroup();
- } else {
- throw vespalib::IllegalArgumentException("Batch update message can only contain groupdoc or orderdoc items");
- }
-
- if (group != _group) {
- throw vespalib::IllegalArgumentException(vespalib::make_string("Batch update message can not contain messages from group %s, only group %s", group.c_str(), _group.c_str()));
- }
- } else {
- uint64_t userId;
-
- if (idString.hasNumber()) {
- userId = idString.getNumber();
- } else {
- throw vespalib::IllegalArgumentException("Batch update message can only contain userdoc or orderdoc items");
- }
-
- if (userId != _userId) {
- throw vespalib::IllegalArgumentException(vespalib::make_string("Batch update message can not contain messages from user %llu, only user %llu", (long long unsigned)userId, (long long unsigned)_userId));
- }
- }
-}
-
-DocumentReply::UP
-BatchDocumentUpdateMessage::doCreateReply() const
-{
- return DocumentReply::UP(new BatchDocumentUpdateReply());
-}
-
-uint32_t
-BatchDocumentUpdateMessage::getType() const {
- return DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE;
-}
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h
deleted file mode 100644
index 54599c2627b..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "documentmessage.h"
-#include "writedocumentreply.h"
-#include <vespa/document/update/documentupdate.h>
-#include <vespa/document/bucket/bucketid.h>
-#include <vespa/document/base/idstring.h>
-
-namespace documentapi {
-
-/**
- Message to use to send multiple updates for documents
- belonging to the same user or group to Vespa. Using this
- message improves performance in VDS mainly.
-*/
-class BatchDocumentUpdateMessage : public DocumentMessage
-{
-public:
- typedef std::vector<document::DocumentUpdate::SP > UpdateList;
-
- /**
- Creates a batch update message that can contain only updates
- for documents belonging to the given user.
- */
- BatchDocumentUpdateMessage(uint64_t userId);
-
- /**
- Creates a batch update message that can contain only updates
- for documents belonging to the given group.
- */
- BatchDocumentUpdateMessage(const string& group);
- ~BatchDocumentUpdateMessage();
-
- /**
- @return Returns a list of the updates to be performed.
- */
- const UpdateList& getUpdates() const { return _updates; };
-
- /**
- Adds an update to be performed.
- */
- void addUpdate(document::DocumentUpdate::SP update);
-
- /**
- Returns the user id that this batch can contain.
- Only valid if this object was created with the first constructor.
- */
- uint64_t getUserId() const { return _userId; };
-
- /**
- Returns the grouo that this batch can contain.
- Only valid if this object was created with the second constructor.
- */
- const string& getGroup() const { return _group; }
-
- uint32_t getType() const override;
-
- /**
- Returns a bucket id suitable for routing this message.
- */
- const document::BucketId& getBucketId() const { return _bucketId; }
-
- string toString() const override { return "batchdocumentupdatemessage"; }
-
-protected:
- DocumentReply::UP doCreateReply() const override;
-
-private:
- uint64_t _userId;
- string _group;
-
- UpdateList _updates;
- document::BucketId _bucketId;
-
- void verifyUpdate(const document::DocumentUpdate& update);
- void setBucketId(const document::IdString& idString);
-};
-
-}
-
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.cpp
deleted file mode 100644
index 483740233c0..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "batchdocumentupdatereply.h"
-#include <vespa/documentapi/messagebus/documentprotocol.h>
-
-namespace documentapi {
-
-BatchDocumentUpdateReply::BatchDocumentUpdateReply()
- : WriteDocumentReply(DocumentProtocol::REPLY_BATCHDOCUMENTUPDATE)
-{ }
-
-BatchDocumentUpdateReply::~BatchDocumentUpdateReply() {}
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.h b/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.h
deleted file mode 100644
index be1f5bc75d5..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/messages/batchdocumentupdatereply.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "writedocumentreply.h"
-
-namespace documentapi {
-
-class BatchDocumentUpdateReply : public WriteDocumentReply
-{
- /**
- * If all documents to update are found, this vector will be empty. If
- * one or more documents are not found, this vector will have the size of
- * the initial number of updates, with entries set to true where the
- * corresponding update was not found.
- */
- std::vector<bool> _documentsNotFound;
-public:
- typedef std::unique_ptr<BatchDocumentUpdateReply> UP;
- typedef std::shared_ptr<BatchDocumentUpdateReply> SP;
-
- BatchDocumentUpdateReply();
- ~BatchDocumentUpdateReply();
-
- const std::vector<bool>& getDocumentsNotFound() const { return _documentsNotFound; }
- std::vector<bool>& getDocumentsNotFound() { return _documentsNotFound; }
-
- string toString() const override { return "batchdocumentupdatereply"; }
-};
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/documentrouteselectorpolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/documentrouteselectorpolicy.cpp
index 42120b8052a..62135150d98 100644
--- a/documentapi/src/vespa/documentapi/messagebus/policies/documentrouteselectorpolicy.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/policies/documentrouteselectorpolicy.cpp
@@ -4,7 +4,6 @@
#include <vespa/document/bucket/bucketidfactory.h>
#include <vespa/document/select/parser.h>
#include <vespa/documentapi/messagebus/documentprotocol.h>
-#include <vespa/documentapi/messagebus/messages/batchdocumentupdatemessage.h>
#include <vespa/documentapi/messagebus/messages/putdocumentmessage.h>
#include <vespa/documentapi/messagebus/messages/updatedocumentmessage.h>
#include <vespa/documentapi/messagebus/messages/documentignoredreply.h>
@@ -138,17 +137,6 @@ DocumentRouteSelectorPolicy::select(mbus::RoutingContext &context, const vespali
return true;
}
}
-
- case DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE:
- {
- const BatchDocumentUpdateMessage& mom = static_cast<const BatchDocumentUpdateMessage&>(msg);
- for (uint32_t i = 0; i < mom.getUpdates().size(); i++) {
- if (it->second->contains(*mom.getUpdates()[i]) == Result::False) {
- return false;
- }
- }
- return true;
- }
default:
return true;
}
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/localservicepolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/localservicepolicy.cpp
index 4f54c0c5bac..42e1c07f3e8 100644
--- a/documentapi/src/vespa/documentapi/messagebus/policies/localservicepolicy.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/policies/localservicepolicy.cpp
@@ -4,7 +4,6 @@
#include <vespa/documentapi/messagebus/documentprotocol.h>
#include <vespa/messagebus/routing/verbatimdirective.h>
#include <vespa/messagebus/messagebus.h>
-#include <vespa/vespalib/util/hashmap.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/log/log.h>
LOG_SETUP(".localservicepolicy");
@@ -16,7 +15,6 @@ LocalServicePolicy::CacheEntry::CacheEntry() :
_generation(0),
_recipients()
{
- // empty
}
LocalServicePolicy::LocalServicePolicy(const string &param) :
@@ -24,13 +22,9 @@ LocalServicePolicy::LocalServicePolicy(const string &param) :
_address(param),
_cache()
{
- // empty
}
-LocalServicePolicy::~LocalServicePolicy()
-{
- // empty
-}
+LocalServicePolicy::~LocalServicePolicy() = default;
void
LocalServicePolicy::select(mbus::RoutingContext &ctx)
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/storagepolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/storagepolicy.cpp
index 723c6fc836a..472440d7863 100644
--- a/documentapi/src/vespa/documentapi/messagebus/policies/storagepolicy.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/policies/storagepolicy.cpp
@@ -2,6 +2,7 @@
#include "storagepolicy.h"
#include <vespa/document/base/documentid.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/messagebus/emptyreply.h>
#include <vespa/messagebus/routing/verbatimdirective.h>
#include <vespa/documentapi/documentapi.h>
@@ -150,10 +151,6 @@ StoragePolicy::doSelect(mbus::RoutingContext &context)
id = static_cast<const RemoveLocationMessage&>(msg).getBucketId();
break;
- case DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE:
- id = static_cast<const BatchDocumentUpdateMessage&>(msg).getBucketId();
- break;
-
default:
LOG(error, "Message type '%d' not supported.", msg.getType());
return;
diff --git a/documentapi/src/vespa/documentapi/messagebus/policies/subsetservicepolicy.cpp b/documentapi/src/vespa/documentapi/messagebus/policies/subsetservicepolicy.cpp
index af7e2e67661..7e2d54f318f 100644
--- a/documentapi/src/vespa/documentapi/messagebus/policies/subsetservicepolicy.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/policies/subsetservicepolicy.cpp
@@ -4,8 +4,8 @@
#include <vespa/documentapi/messagebus/documentprotocol.h>
#include <vespa/messagebus/routing/verbatimdirective.h>
#include <vespa/messagebus/messagebus.h>
-#include <vespa/vespalib/util/hashmap.h>
#include <vespa/vespalib/util/stringfmt.h>
+#include <vespa/vespalib/stllike/hash_fun.h>
#include <vespa/log/log.h>
LOG_SETUP(".subsetservicepolicy");
@@ -37,10 +37,7 @@ SubsetServicePolicy::SubsetServicePolicy(const string &param) :
}
}
-SubsetServicePolicy::~SubsetServicePolicy()
-{
- // empty
-}
+SubsetServicePolicy::~SubsetServicePolicy() = default;
void
SubsetServicePolicy::select(mbus::RoutingContext &context)
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories41.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories41.cpp
deleted file mode 100644
index a77f793ae89..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories41.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "routablefactories41.h"
-#include <vespa/document/document.h>
-#include <vespa/documentapi/documentapi.h>
-#include <vespa/vespalib/objects/nbostream.h>
-
-using vespalib::nbostream;
-
-namespace documentapi {
-
-string
-RoutableFactories41::decodeString(document::ByteBuffer &in)
-{
- int32_t len = decodeInt(in);
- string ret = string(in.getBufferAtPos(), len);
- in.incPos(len);
- return ret;
-}
-
-bool
-RoutableFactories41::decodeBoolean(document::ByteBuffer &in)
-{
- char ret;
- in.getBytes(&ret, 1);
- return (bool)ret;
-}
-
-int32_t
-RoutableFactories41::decodeInt(document::ByteBuffer &in)
-{
- int32_t ret;
- in.getIntNetwork(ret);
- return ret;
-}
-
-int64_t
-RoutableFactories41::decodeLong(document::ByteBuffer &in)
-{
- int64_t ret;
- in.getLongNetwork(ret);
- return ret;
-}
-
-document::DocumentId
-RoutableFactories41::decodeDocumentId(document::ByteBuffer &in)
-{
- nbostream stream(in.getBufferAtPos(), in.getRemaining());
- document::DocumentId ret(stream);
- in.incPos(stream.rp());
- return ret;
-}
-
-void
-RoutableFactories41::encodeDocumentId(const document::DocumentId &id, vespalib::GrowableByteBuffer &out)
-{
- string str = id.toString();
- out.putBytes(str.c_str(), str.size() + 1);
-}
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories41.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories41.h
deleted file mode 100644
index aecf0f73892..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories41.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include <vespa/documentapi/messagebus/messages/feedmessage.h>
-#include <vespa/documentapi/messagebus/messages/feedreply.h>
-#include <vespa/messagebus/routable.h>
-#include <vespa/messagebus/blob.h>
-#include <vespa/messagebus/blobref.h>
-#include <vespa/document/base/documentid.h>
-#include <vespa/document/util/bytebuffer.h>
-#include <vespa/vespalib/util/growablebytebuffer.h>
-
-namespace documentapi {
-
-/**
- * This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document
- * routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
- */
-class RoutableFactories41 {
-private:
- RoutableFactories41() { /* abstract */ }
-
-public:
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Utilities
- //
- ///////////////////////////////////////////////////////////////////////////
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putString() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded string.
- */
- static string decodeString(document::ByteBuffer &in);
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putBoolean() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded bool.
- */
- static bool decodeBoolean(document::ByteBuffer &in);
-
- /**
- * Convenience method to decode a 32-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int32_t decodeInt(document::ByteBuffer &in);
-
- /**
- * Convenience method to decode a 64-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int64_t decodeLong(document::ByteBuffer &in);
-
- /**
- * Convenience method to decode a document id from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded document id.
- */
- static document::DocumentId decodeDocumentId(document::ByteBuffer &in);
-
- /**
- * Convenience method to encode a document id to the given byte buffer.
- *
- * @param id The document id to encode.
- * @param out The byte buffer to write to.
- */
- static void encodeDocumentId(const document::DocumentId &id, vespalib::GrowableByteBuffer &out);
-};
-
-}
-
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories42.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories42.cpp
deleted file mode 100644
index 20f1f241900..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories42.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "routablefactories42.h"
-#include <vespa/document/document.h>
-#include <vespa/documentapi/documentapi.h>
-#include <vespa/vespalib/objects/nbostream.h>
-
-using vespalib::nbostream;
-
-namespace documentapi {
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories42.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories42.h
deleted file mode 100644
index ede108f5157..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories42.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "routablefactories41.h"
-
-namespace document { class DocumentTypeRepo; }
-
-namespace documentapi {
-/**
- * This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document
- * routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
- */
-class RoutableFactories42 {
-private:
- RoutableFactories42() { /* abstract */ }
- typedef RoutableFactories41 RF41;
-
-public:
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Utilities
- //
- ///////////////////////////////////////////////////////////////////////////
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putString() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded string.
- */
- static string decodeString(document::ByteBuffer &in)
- { return RF41::decodeString(in); }
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putBoolean() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded bool.
- */
- static bool decodeBoolean(document::ByteBuffer &in)
- { return RF41::decodeBoolean(in); }
-
- /**
- * Convenience method to decode a 32-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int32_t decodeInt(document::ByteBuffer &in)
- { return RF41::decodeInt(in); }
-
- /**
- * Convenience method to decode a 64-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int64_t decodeLong(document::ByteBuffer &in)
- { return RF41::decodeLong(in); }
-
-
- /**
- * Convenience method to decode a document id from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded document id.
- */
- static document::DocumentId decodeDocumentId(document::ByteBuffer &in)
- { return RF41::decodeDocumentId(in); }
-
- /**
- * Convenience method to encode a document id to the given byte buffer.
- *
- * @param id The document id to encode.
- * @param out The byte buffer to write to.
- */
- static void encodeDocumentId(const document::DocumentId &id,
- vespalib::GrowableByteBuffer &out)
- { return RF41::encodeDocumentId(id, out); }
-};
-
-}
-
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp
deleted file mode 100644
index 26d85b57522..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp
+++ /dev/null
@@ -1,965 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "routablefactories50.h"
-#include <vespa/document/bucket/bucketidfactory.h>
-#include <vespa/document/bucket/fixed_bucket_spaces.h>
-#include <vespa/document/select/parser.h>
-#include <vespa/documentapi/documentapi.h>
-#include <vespa/documentapi/loadtypes/loadtypeset.h>
-#include <vespa/vespalib/objects/nbostream.h>
-
-using document::FixedBucketSpaces;
-using vespalib::nbostream;
-using std::make_unique;
-using std::make_shared;
-
-namespace documentapi {
-
-bool
-RoutableFactories50::DocumentMessageFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
-{
- const DocumentMessage &msg = static_cast<const DocumentMessage&>(obj);
- out.putByte(msg.getPriority());
- out.putInt(msg.getLoadType().getId());
- return doEncode(msg, out);
-}
-
-mbus::Routable::UP
-RoutableFactories50::DocumentMessageFactory::decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const
-{
- uint8_t pri;
- in.getByte(pri);
- uint32_t loadClass = decodeInt(in);
-
- DocumentMessage::UP msg = doDecode(in);
- if (msg) {
- msg->setPriority((Priority::Value)pri);
- msg->setLoadType(loadTypes[loadClass]);
- }
-
- return mbus::Routable::UP(msg.release());
-}
-
-bool
-RoutableFactories50::DocumentReplyFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
-{
- const DocumentReply &msg = static_cast<const DocumentReply&>(obj);
- out.putByte(msg.getPriority());
- return doEncode(msg, out);
-}
-
-mbus::Routable::UP
-RoutableFactories50::DocumentReplyFactory::decode(document::ByteBuffer &in, const LoadTypeSet&) const
-{
- uint8_t pri;
- in.getByte(pri);
- DocumentReply::UP reply = doDecode(in);
- if (reply) {
- reply->setPriority((Priority::Value)pri);
- }
- return mbus::Routable::UP(reply.release());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Factories
-//
-////////////////////////////////////////////////////////////////////////////////
-
-DocumentMessage::UP
-RoutableFactories50::BatchDocumentUpdateMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- uint64_t userId = (uint64_t)decodeLong(buf);
- string group = decodeString(buf);
-
- auto msg = (group.length())
- ? std::make_unique<BatchDocumentUpdateMessage>(group)
- : std::make_unique<BatchDocumentUpdateMessage>(userId);
-
- uint32_t len = decodeInt(buf);
- for (uint32_t i = 0; i < len; i++) {
- document::DocumentUpdate::SP upd = document::DocumentUpdate::createHEAD(_repo, buf);
- msg->addUpdate(upd);
- }
-
- return msg;
-}
-
-bool
-RoutableFactories50::BatchDocumentUpdateMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const BatchDocumentUpdateMessage &msg = static_cast<const BatchDocumentUpdateMessage&>(obj);
-
- buf.putLong(msg.getUserId());
- buf.putString(msg.getGroup());
- buf.putInt(msg.getUpdates().size());
-
- vespalib::nbostream stream;
- for (const auto & update : msg.getUpdates()) {
- update->serializeHEAD(stream);
- }
- buf.putBytes(stream.c_str(), stream.size());
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::BatchDocumentUpdateReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<BatchDocumentUpdateReply>();
- reply->setHighestModificationTimestamp(decodeLong(buf));
- std::vector<bool>& notFound = reply->getDocumentsNotFound();
- notFound.resize(decodeInt(buf));
- for (std::size_t i = 0; i < notFound.size(); ++i) {
- notFound[i] = decodeBoolean(buf);
- }
- return reply;
-}
-
-bool
-RoutableFactories50::BatchDocumentUpdateReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const BatchDocumentUpdateReply& reply = static_cast<const BatchDocumentUpdateReply&>(obj);
- buf.putLong(reply.getHighestModificationTimestamp());
- const std::vector<bool>& notFoundV = reply.getDocumentsNotFound();
- buf.putInt(notFoundV.size());
- for (bool notFound : notFoundV) {
- buf.putBoolean(notFound);
- }
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::CreateVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<CreateVisitorMessage>();
-
- msg->setLibraryName(decodeString(buf));
- msg->setInstanceId(decodeString(buf));
- msg->setControlDestination(decodeString(buf));
- msg->setDataDestination(decodeString(buf));
- msg->setDocumentSelection(decodeString(buf));
- msg->setMaximumPendingReplyCount(decodeInt(buf));
-
- int32_t len = decodeInt(buf);
- for (int32_t i = 0; i < len; i++) {
- int64_t val;
- buf.getLong(val); // NOT using getLongNetwork
- msg->getBuckets().push_back(document::BucketId(val));
- }
-
- msg->setFromTimestamp(decodeLong(buf));
- msg->setToTimestamp(decodeLong(buf));
- msg->setVisitRemoves(decodeBoolean(buf));
- msg->setVisitHeadersOnly(decodeBoolean(buf));
- msg->setVisitInconsistentBuckets(decodeBoolean(buf));
- msg->getParameters().deserialize(_repo, buf);
- msg->setVisitorDispatcherVersion(50);
- msg->setVisitorOrdering((document::OrderingSpecification::Order)decodeInt(buf));
- msg->setMaxBucketsPerVisitor(decodeInt(buf));
-
- return msg;
-}
-
-bool
-RoutableFactories50::CreateVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const CreateVisitorMessage &msg = static_cast<const CreateVisitorMessage&>(obj);
-
- buf.putString(msg.getLibraryName());
- buf.putString(msg.getInstanceId());
- buf.putString(msg.getControlDestination());
- buf.putString(msg.getDataDestination());
- buf.putString(msg.getDocumentSelection());
- buf.putInt(msg.getMaximumPendingReplyCount());
- buf.putInt(msg.getBuckets().size());
-
- for (const auto & bucketId : msg.getBuckets()) {
- uint64_t val = bucketId.getRawId();
- buf.putBytes((const char*)&val, 8);
- }
-
- buf.putLong(msg.getFromTimestamp());
- buf.putLong(msg.getToTimestamp());
- buf.putBoolean(msg.visitRemoves());
- buf.putBoolean(msg.visitHeadersOnly());
- buf.putBoolean(msg.visitInconsistentBuckets());
-
- int len = msg.getParameters().getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- msg.getParameters().serialize(dbuf);
-
- buf.putInt(msg.getVisitorOrdering());
- buf.putInt(msg.getMaxBucketsPerVisitor());
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::CreateVisitorReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<CreateVisitorReply>(DocumentProtocol::REPLY_CREATEVISITOR);
- reply->setLastBucket(document::BucketId((uint64_t)decodeLong(buf)));
- vdslib::VisitorStatistics vs;
- vs.setBucketsVisited(decodeInt(buf));
- vs.setDocumentsVisited(decodeLong(buf));
- vs.setBytesVisited(decodeLong(buf));
- vs.setDocumentsReturned(decodeLong(buf));
- vs.setBytesReturned(decodeLong(buf));
- vs.setSecondPassDocumentsReturned(decodeLong(buf));
- vs.setSecondPassBytesReturned(decodeLong(buf));
- reply->setVisitorStatistics(vs);
-
- return reply;
-}
-
-bool
-RoutableFactories50::CreateVisitorReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const CreateVisitorReply &reply = static_cast<const CreateVisitorReply&>(obj);
- buf.putLong(reply.getLastBucket().getRawId());
- buf.putInt(reply.getVisitorStatistics().getBucketsVisited());
- buf.putLong(reply.getVisitorStatistics().getDocumentsVisited());
- buf.putLong(reply.getVisitorStatistics().getBytesVisited());
- buf.putLong(reply.getVisitorStatistics().getDocumentsReturned());
- buf.putLong(reply.getVisitorStatistics().getBytesReturned());
- buf.putLong(reply.getVisitorStatistics().getSecondPassDocumentsReturned());
- buf.putLong(reply.getVisitorStatistics().getSecondPassBytesReturned());
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::DestroyVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<DestroyVisitorMessage>();
- msg->setInstanceId(decodeString(buf));
- return msg;
-}
-
-bool
-RoutableFactories50::DestroyVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const DestroyVisitorMessage &msg = static_cast<const DestroyVisitorMessage&>(obj);
- buf.putString(msg.getInstanceId());
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::DestroyVisitorReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DESTROYVISITOR);
-}
-
-bool
-RoutableFactories50::DestroyVisitorReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::DocumentListMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<DocumentListMessage>();
- msg->setBucketId(document::BucketId(decodeLong(buf)));
-
- int32_t len = decodeInt(buf);
- for (int32_t i = 0; i < len; i++) {
- DocumentListMessage::Entry entry(_repo, buf);
- msg->getDocuments().push_back(entry);
- }
-
- return msg;
-}
-
-bool
-RoutableFactories50::DocumentListMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const DocumentListMessage &msg = static_cast<const DocumentListMessage&>(obj);
-
- buf.putLong(msg.getBucketId().getRawId());
- buf.putInt(msg.getDocuments().size());
- for (const auto & document : msg.getDocuments()) {
- int len = document.getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- document.serialize(dbuf);
- }
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::DocumentListReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DOCUMENTLIST);
-}
-
-bool
-RoutableFactories50::DocumentListReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::DocumentSummaryMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<DocumentSummaryMessage>();
-
- msg->deserialize(buf);
-
- return msg;
-}
-
-bool
-RoutableFactories50::DocumentSummaryMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const DocumentSummaryMessage &msg = static_cast<const DocumentSummaryMessage&>(obj);
-
- int32_t len = msg.getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- msg.serialize(dbuf);
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::DocumentSummaryReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DOCUMENTSUMMARY);
-}
-
-bool
-RoutableFactories50::DocumentSummaryReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::EmptyBucketsMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<EmptyBucketsMessage>();
-
- int32_t len = decodeInt(buf);
- std::vector<document::BucketId> buckets(len);
- for (int32_t i = 0; i < len; ++i) {
- buckets[i] = document::BucketId(decodeLong(buf));
- }
- msg->getBucketIds().swap(buckets);
-
- return msg;
-}
-
-bool
-RoutableFactories50::EmptyBucketsMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const EmptyBucketsMessage &msg = static_cast<const EmptyBucketsMessage&>(obj);
-
- buf.putInt(msg.getBucketIds().size());
- for (const auto & bucketId : msg.getBucketIds()) {
- buf.putLong(bucketId.getRawId());
- }
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::EmptyBucketsReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_EMPTYBUCKETS);
-}
-
-bool
-RoutableFactories50::EmptyBucketsReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-bool RoutableFactories50::GetBucketListMessageFactory::encodeBucketSpace(vespalib::stringref bucketSpace,
- vespalib::GrowableByteBuffer& ) const
-{
- return (bucketSpace == FixedBucketSpaces::default_space_name());
-}
-
-string RoutableFactories50::GetBucketListMessageFactory::decodeBucketSpace(document::ByteBuffer&) const {
- return FixedBucketSpaces::default_space_name();
-}
-
-DocumentMessage::UP
-RoutableFactories50::GetBucketListMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- document::BucketId bucketId(decodeLong(buf));
- auto msg = std::make_unique<GetBucketListMessage>(bucketId);
- msg->setBucketSpace(decodeBucketSpace(buf));
- return msg;
-}
-
-bool
-RoutableFactories50::GetBucketListMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetBucketListMessage &msg = static_cast<const GetBucketListMessage&>(obj);
- buf.putLong(msg.getBucketId().getRawId());
- return encodeBucketSpace(msg.getBucketSpace(), buf);
-}
-
-DocumentReply::UP
-RoutableFactories50::GetBucketListReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<GetBucketListReply>();
-
- int32_t len = decodeInt(buf);
- reply->getBuckets().reserve(len);
- for (int32_t i = 0; i < len; i++) {
- GetBucketListReply::BucketInfo info;
- info._bucket = document::BucketId((uint64_t)decodeLong(buf));
- info._bucketInformation = decodeString(buf);
- reply->getBuckets().push_back(info);
- }
-
- return reply;
-}
-
-bool
-RoutableFactories50::GetBucketListReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetBucketListReply &reply = static_cast<const GetBucketListReply&>(obj);
-
- const std::vector<GetBucketListReply::BucketInfo> &buckets = reply.getBuckets();
- buf.putInt(buckets.size());
- for (const auto & bucketInfo : buckets) {
- buf.putLong(bucketInfo._bucket.getRawId());
- buf.putString(bucketInfo._bucketInformation);
- }
-
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::GetBucketStateMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<GetBucketStateMessage>();
-
- msg->setBucketId(document::BucketId((uint64_t)decodeLong(buf)));
-
- return msg;
-}
-
-bool
-RoutableFactories50::GetBucketStateMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetBucketStateMessage &msg = static_cast<const GetBucketStateMessage&>(obj);
- buf.putLong(msg.getBucketId().getRawId());
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::GetBucketStateReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<GetBucketStateReply>();
-
- int32_t len = decodeInt(buf);
- reply->getBucketState().reserve(len);
- for (int32_t i = 0; i < len; i++) {
- reply->getBucketState().emplace_back(buf);
- }
-
- return reply;
-}
-
-bool
-RoutableFactories50::GetBucketStateReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetBucketStateReply &reply = static_cast<const GetBucketStateReply&>(obj);
-
- buf.putInt(reply.getBucketState().size());
- for (const auto & state : reply.getBucketState()) {
- state.serialize(buf);
- }
-
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::GetDocumentMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<GetDocumentMessage>();
- msg->setDocumentId(decodeDocumentId(buf));
- msg->setFlags(decodeInt(buf));
-
- return msg;
-}
-
-bool
-RoutableFactories50::GetDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetDocumentMessage &msg = static_cast<const GetDocumentMessage&>(obj);
-
- encodeDocumentId(msg.getDocumentId(), buf);
- buf.putInt(msg.getFlags());
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::GetDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<GetDocumentReply>();
-
- bool hasDocument = decodeBoolean(buf);
- document::Document * document = nullptr;
- if (hasDocument) {
- auto doc = std::make_shared<document::Document>(_repo, buf);
- document = doc.get();
- reply->setDocument(std::move(doc));
- }
- int64_t lastModified = decodeLong(buf);
- reply->setLastModified(lastModified);
- if (hasDocument) {
- document->setLastModified(lastModified);
- }
-
- return reply;
-}
-
-bool
-RoutableFactories50::GetDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const GetDocumentReply &reply = static_cast<const GetDocumentReply&>(obj);
-
- buf.putByte(reply.hasDocument() ? 1 : 0);
- if (reply.hasDocument()) {
- nbostream stream;
- reply.getDocument().serialize(stream);
- buf.putBytes(stream.peek(), stream.size());
- }
- buf.putLong(reply.getLastModified());
-
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::MapVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<MapVisitorMessage>();
- msg->getData().deserialize(_repo, buf);
- return msg;
-}
-
-bool
-RoutableFactories50::MapVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const MapVisitorMessage &msg = static_cast<const MapVisitorMessage&>(obj);
-
- int32_t len = msg.getData().getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- msg.getData().serialize(dbuf);
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::MapVisitorReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_MAPVISITOR);
-}
-
-bool
-RoutableFactories50::MapVisitorReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-void
-RoutableFactories50::PutDocumentMessageFactory::decodeInto(PutDocumentMessage & msg, document::ByteBuffer & buf) const {
- msg.setDocument(make_shared<document::Document>(_repo, buf));
- msg.setTimestamp(static_cast<uint64_t>(decodeLong(buf)));
-}
-
-bool
-RoutableFactories50::PutDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- auto & msg = static_cast<const PutDocumentMessage &>(obj);
- nbostream stream;
-
- msg.getDocument().serialize(stream);
- buf.putBytes(stream.peek(), stream.size());
- buf.putLong(static_cast<int64_t>(msg.getTimestamp()));
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::PutDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = make_unique<WriteDocumentReply>(DocumentProtocol::REPLY_PUTDOCUMENT);
- reply->setHighestModificationTimestamp(decodeLong(buf));
-
- // Doing an explicit move here to force converting result to an rvalue.
- // This is done automatically in GCC >= 5.
- return std::move(reply);
-}
-
-bool
-RoutableFactories50::PutDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const WriteDocumentReply& reply = (const WriteDocumentReply&)obj;
- buf.putLong(reply.getHighestModificationTimestamp());
- return true;
-}
-
-void
-RoutableFactories50::RemoveDocumentMessageFactory::decodeInto(RemoveDocumentMessage & msg, document::ByteBuffer & buf) const {
- msg.setDocumentId(decodeDocumentId(buf));
-}
-
-bool
-RoutableFactories50::RemoveDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const RemoveDocumentMessage &msg = static_cast<const RemoveDocumentMessage&>(obj);
- encodeDocumentId(msg.getDocumentId(), buf);
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::RemoveDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<RemoveDocumentReply>();
- reply->setWasFound(decodeBoolean(buf));
- reply->setHighestModificationTimestamp(decodeLong(buf));
- return reply;
-}
-
-bool
-RoutableFactories50::RemoveDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const RemoveDocumentReply &reply = static_cast<const RemoveDocumentReply&>(obj);
- buf.putBoolean(reply.getWasFound());
- buf.putLong(reply.getHighestModificationTimestamp());
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::RemoveLocationMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- string selection = decodeString(buf);
-
- document::BucketIdFactory factory;
- document::select::Parser parser(_repo, factory);
-
- auto msg = std::make_unique<RemoveLocationMessage>(factory, parser, selection);
- // FIXME bucket space not part of wire format, implicitly limiting to only default space for now.
- msg->setBucketSpace(document::FixedBucketSpaces::default_space_name());
- return msg;
-}
-
-bool
-RoutableFactories50::RemoveLocationMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const RemoveLocationMessage &msg = static_cast<const RemoveLocationMessage&>(obj);
- buf.putString(msg.getDocumentSelection());
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::RemoveLocationReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<DocumentReply>(DocumentProtocol::REPLY_REMOVELOCATION);
-}
-
-bool
-RoutableFactories50::RemoveLocationReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::SearchResultMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<SearchResultMessage>();
- msg->deserialize(buf);
- return msg;
-}
-
-bool
-RoutableFactories50::SearchResultMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const SearchResultMessage &msg = static_cast<const SearchResultMessage&>(obj);
-
- int len = msg.getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- msg.serialize(dbuf);
-
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::QueryResultMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<QueryResultMessage>();
- msg->getSearchResult().deserialize(buf);
- msg->getDocumentSummary().deserialize(buf);
-
- return msg;
-}
-
-bool
-RoutableFactories50::QueryResultMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const QueryResultMessage &msg = static_cast<const QueryResultMessage&>(obj);
-
- int len = msg.getSearchResult().getSerializedSize() + msg.getDocumentSummary().getSerializedSize();
- char *tmp = buf.allocate(len);
- document::ByteBuffer dbuf(tmp, len);
- msg.getSearchResult().serialize(dbuf);
- msg.getDocumentSummary().serialize(dbuf);
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::SearchResultReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_SEARCHRESULT);
-}
-
-bool
-RoutableFactories50::SearchResultReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::QueryResultReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_QUERYRESULT);
-}
-
-bool
-RoutableFactories50::QueryResultReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-bool RoutableFactories50::StatBucketMessageFactory::encodeBucketSpace(vespalib::stringref bucketSpace,
- vespalib::GrowableByteBuffer& ) const
-{
- return (bucketSpace == FixedBucketSpaces::default_space_name());
-}
-
-string RoutableFactories50::StatBucketMessageFactory::decodeBucketSpace(document::ByteBuffer&) const {
- return FixedBucketSpaces::default_space_name();
-}
-
-DocumentMessage::UP
-RoutableFactories50::StatBucketMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<StatBucketMessage>();
-
- msg->setBucketId(document::BucketId(decodeLong(buf)));
- msg->setDocumentSelection(decodeString(buf));
- msg->setBucketSpace(decodeBucketSpace(buf));
-
- return msg;
-}
-
-bool
-RoutableFactories50::StatBucketMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const StatBucketMessage &msg = static_cast<const StatBucketMessage&>(obj);
-
- buf.putLong(msg.getBucketId().getRawId());
- buf.putString(msg.getDocumentSelection());
- return encodeBucketSpace(msg.getBucketSpace(), buf);
-}
-
-DocumentReply::UP
-RoutableFactories50::StatBucketReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<StatBucketReply>();
- reply->setResults(decodeString(buf));
- return reply;
-}
-
-bool
-RoutableFactories50::StatBucketReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const StatBucketReply &reply = static_cast<const StatBucketReply&>(obj);
- buf.putString(reply.getResults());
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::StatDocumentMessageFactory::doDecode(document::ByteBuffer &) const
-{
- return DocumentMessage::UP(); // TODO: remove message type
-}
-
-bool
-RoutableFactories50::StatDocumentMessageFactory::doEncode(const DocumentMessage &, vespalib::GrowableByteBuffer &) const
-{
- return false;
-}
-
-DocumentReply::UP
-RoutableFactories50::StatDocumentReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return DocumentReply::UP(); // TODO: remove reply type
-}
-
-bool
-RoutableFactories50::StatDocumentReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return false;
-}
-
-void
-RoutableFactories50::UpdateDocumentMessageFactory::decodeInto(UpdateDocumentMessage & msg, document::ByteBuffer & buf) const {
- msg.setDocumentUpdate(document::DocumentUpdate::createHEAD(_repo, buf));
- msg.setOldTimestamp(static_cast<uint64_t>(decodeLong(buf)));
- msg.setNewTimestamp(static_cast<uint64_t>(decodeLong(buf)));
-}
-
-bool
-RoutableFactories50::UpdateDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const UpdateDocumentMessage &msg = static_cast<const UpdateDocumentMessage&>(obj);
-
- vespalib::nbostream stream;
- msg.getDocumentUpdate().serializeHEAD(stream);
- buf.putBytes(stream.peek(), stream.size());
- buf.putLong((int64_t)msg.getOldTimestamp());
- buf.putLong((int64_t)msg.getNewTimestamp());
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::UpdateDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<UpdateDocumentReply>();
- reply->setWasFound(decodeBoolean(buf));
- reply->setHighestModificationTimestamp(decodeLong(buf));
- return reply;
-}
-
-bool
-RoutableFactories50::UpdateDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const UpdateDocumentReply &reply = static_cast<const UpdateDocumentReply&>(obj);
- buf.putBoolean(reply.getWasFound());
- buf.putLong(reply.getHighestModificationTimestamp());
- return true;
-}
-
-DocumentMessage::UP
-RoutableFactories50::VisitorInfoMessageFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto msg = std::make_unique<VisitorInfoMessage>();
-
- int32_t len = decodeInt(buf);
- msg->getFinishedBuckets().reserve(len);
- for (int32_t i = 0; i < len; i++) {
- int64_t val;
- buf.getLong(val); // NOT using getLongNetwork
- msg->getFinishedBuckets().emplace_back(val);
- }
- msg->setErrorMessage(decodeString(buf));
-
- return msg;
-}
-
-bool
-RoutableFactories50::VisitorInfoMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const VisitorInfoMessage &msg = static_cast<const VisitorInfoMessage&>(obj);
-
- buf.putInt(msg.getFinishedBuckets().size());
- for (const auto & bucketId : msg.getFinishedBuckets()) {
- uint64_t val = bucketId.getRawId();
- buf.putBytes((const char*)&val, 8);
- }
- buf.putString(msg.getErrorMessage());
-
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::VisitorInfoReplyFactory::doDecode(document::ByteBuffer &) const
-{
- return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_VISITORINFO);
-}
-
-bool
-RoutableFactories50::VisitorInfoReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
-{
- return true;
-}
-
-DocumentReply::UP
-RoutableFactories50::WrongDistributionReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<WrongDistributionReply>();
- reply->setSystemState(decodeString(buf));
- return reply;
-}
-
-bool
-RoutableFactories50::WrongDistributionReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const WrongDistributionReply &reply = static_cast<const WrongDistributionReply&>(obj);
- buf.putString(reply.getSystemState());
- return true;
-}
-
-void
-RoutableFactories50::FeedMessageFactory::myDecode(FeedMessage &msg, document::ByteBuffer &buf) const
-{
- msg.setName(decodeString(buf));
- msg.setGeneration(decodeInt(buf));
- msg.setIncrement(decodeInt(buf));
-}
-
-void
-RoutableFactories50::FeedMessageFactory::myEncode(const FeedMessage &msg, vespalib::GrowableByteBuffer &buf) const
-{
- buf.putString(msg.getName());
- buf.putInt(msg.getGeneration());
- buf.putInt(msg.getIncrement());
-}
-
-DocumentReply::UP
-RoutableFactories50::FeedReplyFactory::doDecode(document::ByteBuffer &buf) const
-{
- auto reply = std::make_unique<FeedReply>(getType());
-
- std::vector<FeedAnswer> &answers = reply->getFeedAnswers();
- int32_t len = decodeInt(buf);
- answers.reserve(len);
- for (int32_t i = 0; i < len; ++i) {
- int32_t typeCode = decodeInt(buf);
- int32_t wantedIncrement = decodeInt(buf);
- string recipient = decodeString(buf);
- string moreInfo = decodeString(buf);
- answers.emplace_back(typeCode, wantedIncrement, recipient, moreInfo);
- }
- return reply;
-}
-
-bool
-RoutableFactories50::FeedReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
-{
- const FeedReply &reply = static_cast<const FeedReply&>(obj);
- buf.putInt(reply.getFeedAnswers().size());
- for (const auto & answer : reply.getFeedAnswers()) {
- buf.putInt(answer.getAnswerCode());
- buf.putInt(answer.getWantedIncrement());
- buf.putString(answer.getRecipient());
- buf.putString(answer.getMoreInfo());
- }
- return true;
-}
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h
deleted file mode 100644
index 12d5c560786..00000000000
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h
+++ /dev/null
@@ -1,458 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "routablefactories42.h"
-#include "iroutablefactory.h"
-#include <vespa/documentapi/messagebus/messages/putdocumentmessage.h>
-#include <vespa/documentapi/messagebus/messages/removedocumentmessage.h>
-#include <vespa/documentapi/messagebus/messages/updatedocumentmessage.h>
-
-namespace document { class DocumentTypeRepo; }
-
-/**
- * Utility class for invoking setApproxSize on a DocumentMessage with the delta
- * between the read position of a ByteBuffer at construction and destruction
- * time. The assumption being made is that the in-memory footprint of a message
- * is reasonably close to its wire-serialized form.
- */
-class ScopedApproxSizeSetter {
-public:
- ScopedApproxSizeSetter(documentapi::DocumentMessage& msg,
- const document::ByteBuffer& buf)
- : _msg(msg),
- _buf(buf),
- _posBefore(_buf.getPos())
- {
- }
-
- ~ScopedApproxSizeSetter() {
- _msg.setApproxSize(static_cast<uint32_t>(_buf.getPos() - _posBefore));
- }
-
-private:
- documentapi::DocumentMessage& _msg;
- const document::ByteBuffer& _buf;
- const size_t _posBefore;
-};
-
-namespace documentapi {
-
-template<typename MessageType, typename FactoryType>
-DocumentMessage::UP
-decodeMessage(const FactoryType * self, document::ByteBuffer & buf) {
- auto msg = std::make_unique<MessageType>();
- ScopedApproxSizeSetter sizeSetter(*msg, buf);
- self->decodeInto(*msg, buf);
- return msg;
-}
-
-/**
- * This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document
- * routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
- */
-class RoutableFactories50 {
-public:
- RoutableFactories50() = delete;
-
- /**
- * Implements the shared factory logic required for {@link DocumentMessage} objects, and it offers a more
- * convenient interface for implementing {@link RoutableFactory}.
- */
- class DocumentMessageFactory : public IRoutableFactory {
- protected:
- /**
- * This method encodes the given message into the given byte buffer. You are guaranteed to only receive messages of
- * the type that this factory was registered for.
- *
- * This method is NOT exception safe. Return false to signal failure.
- *
- * @param msg The message to encode.
- * @param buf The byte buffer to write to.
- * @return True if the message was encoded.
- */
- virtual bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const = 0;
-
- /**
- * This method decodes a message from the given byte buffer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentMessage, GrowableByteBuffer)}.
- *
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param buf The byte buffer to read from.
- * @return The decoded message.
- */
- virtual DocumentMessage::UP doDecode(document::ByteBuffer &buf) const = 0;
-
- public:
- /**
- * Convenience typedefs.
- */
- typedef std::unique_ptr<IRoutableFactory> UP;
- typedef std::shared_ptr<IRoutableFactory> SP;
- bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
- mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
- };
-
- /**
- * Implements the shared factory logic required for {@link DocumentReply} objects, and it offers a more
- * convenient interface for implementing {@link RoutableFactory}.
- */
- class DocumentReplyFactory : public IRoutableFactory {
- protected:
- /**
- * This method encodes the given reply into the given byte buffer. You are guaranteed to only receive
- * replies of the type that this factory was registered for.
- *
- * This method is NOT exception safe. Return false to signal failure.
- *
- * @param reply The reply to encode.
- * @param buf The byte buffer to write to.
- * @return True if the message was encoded.
- */
- virtual bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const = 0;
-
- /**
- * This method decodes a reply from the given byte buffer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentReply, GrowableByteBuffer)}.
- *
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param buf The byte buffer to read from.
- * @return The decoded reply.
- */
- virtual DocumentReply::UP doDecode(document::ByteBuffer &buf) const = 0;
-
- public:
- /**
- * Convenience typedefs.
- */
- typedef std::unique_ptr<IRoutableFactory> UP;
- typedef std::shared_ptr<IRoutableFactory> SP;
-
- bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
- mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
- };
-
- /**
- * Implements a helper class to do feed message factories.
- */
- class FeedMessageFactory : public DocumentMessageFactory {
- protected:
- void myDecode(FeedMessage &msg, document::ByteBuffer &buf) const;
- void myEncode(const FeedMessage &msg, vespalib::GrowableByteBuffer &buf) const;
- };
-
- /**
- * Implements a helper class to do feed reply factories.
- */
- class FeedReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- virtual uint32_t getType() const = 0;
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Factories
- //
- ////////////////////////////////////////////////////////////////////////////////
-
- class BatchDocumentUpdateMessageFactory : public DocumentMessageFactory {
- const document::DocumentTypeRepo &_repo;
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- BatchDocumentUpdateMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class BatchDocumentUpdateReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class CreateVisitorMessageFactory : public DocumentMessageFactory {
- const document::DocumentTypeRepo &_repo;
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- CreateVisitorMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class CreateVisitorReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class DestroyVisitorMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class DestroyVisitorReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class DocumentListMessageFactory : public DocumentMessageFactory {
- const document::DocumentTypeRepo &_repo;
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- DocumentListMessageFactory(const document::DocumentTypeRepo &r)
- : _repo(r) {}
- };
- class DocumentListReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class DocumentSummaryMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class DocumentSummaryReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class EmptyBucketsMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class EmptyBucketsReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetBucketListMessageFactory : public DocumentMessageFactory {
- virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const;
- virtual string decodeBucketSpace(document::ByteBuffer&) const;
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetBucketListReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetBucketStateMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetBucketStateReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetDocumentMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class GetDocumentReplyFactory : public DocumentReplyFactory {
- const document::DocumentTypeRepo &_repo;
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- GetDocumentReplyFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class MapVisitorMessageFactory : public DocumentMessageFactory {
- const document::DocumentTypeRepo &_repo;
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- MapVisitorMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class MapVisitorReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class PutDocumentMessageFactory : public DocumentMessageFactory {
- protected:
- const document::DocumentTypeRepo &_repo;
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
- return decodeMessage<PutDocumentMessage>(this, buf);
- }
-
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- void decodeInto(PutDocumentMessage & msg, document::ByteBuffer & buf) const;
- PutDocumentMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class PutDocumentReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class RemoveDocumentMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
- return decodeMessage<RemoveDocumentMessage>(this, buf);
- }
-
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- void decodeInto(RemoveDocumentMessage & msg, document::ByteBuffer & buf) const;
- };
- class RemoveDocumentReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class RemoveLocationMessageFactory : public DocumentMessageFactory {
- const document::DocumentTypeRepo &_repo;
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- RemoveLocationMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class RemoveLocationReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class SearchResultMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class SearchResultReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class StatBucketMessageFactory : public DocumentMessageFactory {
- virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const;
- virtual string decodeBucketSpace(document::ByteBuffer&) const;
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class StatBucketReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class StatDocumentMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class StatDocumentReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class UpdateDocumentMessageFactory : public DocumentMessageFactory {
- protected:
- const document::DocumentTypeRepo &_repo;
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
- return decodeMessage<UpdateDocumentMessage>(this, buf);
- }
-
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- public:
- void decodeInto(UpdateDocumentMessage & msg, document::ByteBuffer & buf) const;
- UpdateDocumentMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
- };
- class UpdateDocumentReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class VisitorInfoMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class VisitorInfoReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class WrongDistributionReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
- class QueryResultMessageFactory : public DocumentMessageFactory {
- protected:
- DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
- };
- class QueryResultReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Utilities
- //
- ///////////////////////////////////////////////////////////////////////////
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putString() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded string.
- */
- static string decodeString(document::ByteBuffer &in)
- { return RoutableFactories42::decodeString(in); }
-
- /**
- * This is a complement for the vespalib::GrowableByteBuffer.putBoolean() method.
- *
- * @param in The byte buffer to read from.
- * @return The decoded bool.
- */
- static bool decodeBoolean(document::ByteBuffer &in)
- { return RoutableFactories42::decodeBoolean(in); }
-
- /**
- * Convenience method to decode a 32-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int32_t decodeInt(document::ByteBuffer &in)
- { return RoutableFactories42::decodeInt(in); }
-
- /**
- * Convenience method to decode a 64-bit int from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded int.
- */
- static int64_t decodeLong(document::ByteBuffer &in)
- { return RoutableFactories42::decodeLong(in); }
-
-
- /**
- * Convenience method to decode a document id from the given byte buffer.
- *
- * @param in The byte buffer to read from.
- * @return The decoded document id.
- */
- static document::DocumentId decodeDocumentId(document::ByteBuffer &in)
- { return RoutableFactories42::decodeDocumentId(in); }
-
- /**
- * Convenience method to encode a document id to the given byte buffer.
- *
- * @param id The document id to encode.
- * @param out The byte buffer to write to.
- */
- static void encodeDocumentId(const document::DocumentId &id,
- vespalib::GrowableByteBuffer &out)
- { return RoutableFactories42::encodeDocumentId(id, out); }
-};
-
-}
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp
index ee51bd306a6..01d0c5b6c0e 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp
@@ -12,52 +12,6 @@ using vespalib::nbostream;
namespace documentapi {
-bool
-RoutableFactories51::DocumentMessageFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
-{
- const DocumentMessage &msg = static_cast<const DocumentMessage&>(obj);
- out.putByte(msg.getPriority());
- out.putInt(msg.getLoadType().getId());
- return doEncode(msg, out);
-}
-
-mbus::Routable::UP
-RoutableFactories51::DocumentMessageFactory::decode(document::ByteBuffer &in,
- const LoadTypeSet& loadTypes) const
-{
- uint8_t pri;
- in.getByte(pri);
- uint32_t loadClass = decodeInt(in);
-
- DocumentMessage::UP msg = doDecode(in);
- if (msg.get() != NULL) {
- msg->setPriority((Priority::Value)pri);
- msg->setLoadType(loadTypes[loadClass]);
- }
-
- return mbus::Routable::UP(msg.release());
-}
-
-bool
-RoutableFactories51::DocumentReplyFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
-{
- const DocumentReply &msg = static_cast<const DocumentReply&>(obj);
- out.putByte(msg.getPriority());
- return doEncode(msg, out);
-}
-
-mbus::Routable::UP
-RoutableFactories51::DocumentReplyFactory::decode(document::ByteBuffer &in, const LoadTypeSet&) const
-{
- uint8_t pri;
- in.getByte(pri);
- DocumentReply::UP reply = doDecode(in);
- if (reply.get() != NULL) {
- reply->setPriority((Priority::Value)pri);
- }
- return mbus::Routable::UP(reply.release());
-}
-
DocumentMessage::UP
RoutableFactories51::CreateVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
{
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h
index fc20324b418..913b05f109b 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h
@@ -10,115 +10,16 @@ namespace documentapi {
* This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document
* routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
*/
-class RoutableFactories51 {
+class RoutableFactories51 : public RoutableFactories50 {
public:
RoutableFactories51() = delete;
- /**
- * Implements the shared factory logic required for {@link DocumentMessage} objects, and it offers a more
- * convenient interface for implementing {@link RoutableFactory}.
- */
- class DocumentMessageFactory : public IRoutableFactory {
- protected:
- /**
- * This method encodes the given message into the given byte buffer. You are guaranteed to only receive messages of
- * the type that this factory was registered for.
- *
- * This method is NOT exception safe. Return false to signal failure.
- *
- * @param msg The message to encode.
- * @param buf The byte buffer to write to.
- * @return True if the message was encoded.
- */
- virtual bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const = 0;
-
- /**
- * This method decodes a message from the given byte buffer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentMessage, GrowableByteBuffer)}.
- *
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param buf The byte buffer to read from.
- * @return The decoded message.
- */
- virtual DocumentMessage::UP doDecode(document::ByteBuffer &buf) const = 0;
-
- public:
- /**
- * Convenience typedefs.
- */
- typedef std::unique_ptr<IRoutableFactory> UP;
- typedef std::shared_ptr<IRoutableFactory> SP;
-
- bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
- mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
- };
-
- /**
- * Implements the shared factory logic required for {@link DocumentReply} objects, and it offers a more
- * convenient interface for implementing {@link RoutableFactory}.
- */
- class DocumentReplyFactory : public IRoutableFactory {
- protected:
- /**
- * This method encodes the given reply into the given byte buffer. You are guaranteed to only receive
- * replies of the type that this factory was registered for.
- *
- * This method is NOT exception safe. Return false to signal failure.
- *
- * @param reply The reply to encode.
- * @param buf The byte buffer to write to.
- * @return True if the message was encoded.
- */
- virtual bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const = 0;
-
- /**
- * This method decodes a reply from the given byte buffer. You are guaranteed to only receive byte buffers
- * generated by a previous call to {@link #doEncode(DocumentReply, GrowableByteBuffer)}.
- *
- * This method is NOT exception safe. Return null to signal failure.
- *
- * @param buf The byte buffer to read from.
- * @return The decoded reply.
- */
- virtual DocumentReply::UP doDecode(document::ByteBuffer &buf) const = 0;
-
- public:
- /**
- * Convenience typedefs.
- */
- typedef std::unique_ptr<IRoutableFactory> UP;
- typedef std::shared_ptr<IRoutableFactory> SP;
-
- bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
- mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
- };
-
class DocumentIgnoredReplyFactory : public DocumentReplyFactory {
protected:
DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
};
- /**
- * Implements a helper class to do feed message factories.
- */
- class FeedMessageFactory : public DocumentMessageFactory {
- protected:
- void myDecode(FeedMessage &msg, document::ByteBuffer &buf) const;
- void myEncode(const FeedMessage &msg, vespalib::GrowableByteBuffer &buf) const;
- };
-
- /**
- * Implements a helper class to do feed reply factories.
- */
- class FeedReplyFactory : public DocumentReplyFactory {
- protected:
- DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
- bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
- virtual uint32_t getType() const = 0;
- };
-
////////////////////////////////////////////////////////////////////////////////
//
// Factories
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories52.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories52.cpp
index 89f6e9c1fe1..6a49d812957 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories52.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories52.cpp
@@ -2,67 +2,939 @@
// @author Vegard Sjonfjell
#include "routablefactories52.h"
+#include <vespa/document/bucket/bucketidfactory.h>
+#include <vespa/document/bucket/fixed_bucket_spaces.h>
+#include <vespa/document/select/parser.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/documentapi/documentapi.h>
+#include <vespa/documentapi/loadtypes/loadtypeset.h>
#include <vespa/vespalib/objects/nbostream.h>
+using document::FixedBucketSpaces;
using vespalib::nbostream;
using std::make_shared;
using std::make_unique;
namespace documentapi {
+bool
+RoutableFactories52::DocumentMessageFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
+{
+ const DocumentMessage &msg = static_cast<const DocumentMessage&>(obj);
+ out.putByte(msg.getPriority());
+ out.putInt(msg.getLoadType().getId());
+ return doEncode(msg, out);
+}
+
+mbus::Routable::UP
+RoutableFactories52::DocumentMessageFactory::decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const
+{
+ uint8_t pri;
+ in.getByte(pri);
+ uint32_t loadClass = decodeInt(in);
+
+ DocumentMessage::UP msg = doDecode(in);
+ if (msg) {
+ msg->setPriority((Priority::Value)pri);
+ msg->setLoadType(loadTypes[loadClass]);
+ }
+
+ return mbus::Routable::UP(msg.release());
+}
+
+bool
+RoutableFactories52::DocumentReplyFactory::encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const
+{
+ const DocumentReply &msg = static_cast<const DocumentReply&>(obj);
+ out.putByte(msg.getPriority());
+ return doEncode(msg, out);
+}
+
+mbus::Routable::UP
+RoutableFactories52::DocumentReplyFactory::decode(document::ByteBuffer &in, const LoadTypeSet&) const
+{
+ uint8_t pri;
+ in.getByte(pri);
+ DocumentReply::UP reply = doDecode(in);
+ if (reply) {
+ reply->setPriority((Priority::Value)pri);
+ }
+ return mbus::Routable::UP(reply.release());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Factories
+//
+////////////////////////////////////////////////////////////////////////////////
+
+DocumentMessage::UP
+RoutableFactories52::CreateVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<CreateVisitorMessage>();
+
+ msg->setLibraryName(decodeString(buf));
+ msg->setInstanceId(decodeString(buf));
+ msg->setControlDestination(decodeString(buf));
+ msg->setDataDestination(decodeString(buf));
+ msg->setDocumentSelection(decodeString(buf));
+ msg->setMaximumPendingReplyCount(decodeInt(buf));
+
+ int32_t len = decodeInt(buf);
+ msg->getBuckets().reserve(len);
+ for (int32_t i = 0; i < len; i++) {
+ int64_t val;
+ buf.getLong(val); // NOT using getLongNetwork
+ msg->getBuckets().push_back(document::BucketId(val));
+ }
+
+ msg->setFromTimestamp(decodeLong(buf));
+ msg->setToTimestamp(decodeLong(buf));
+ msg->setVisitRemoves(decodeBoolean(buf));
+ msg->setFieldSet(decodeString(buf));
+ msg->setVisitInconsistentBuckets(decodeBoolean(buf));
+ msg->getParameters().deserialize(_repo, buf);
+ msg->setVisitorDispatcherVersion(50);
+ msg->setVisitorOrdering((document::OrderingSpecification::Order)decodeInt(buf));
+ msg->setMaxBucketsPerVisitor(decodeInt(buf));
+ msg->setBucketSpace(decodeBucketSpace(buf));
+
+ return msg;
+}
+
+bool
+RoutableFactories52::CreateVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const CreateVisitorMessage &msg = static_cast<const CreateVisitorMessage&>(obj);
+
+ buf.putString(msg.getLibraryName());
+ buf.putString(msg.getInstanceId());
+ buf.putString(msg.getControlDestination());
+ buf.putString(msg.getDataDestination());
+ buf.putString(msg.getDocumentSelection());
+ buf.putInt(msg.getMaximumPendingReplyCount());
+ buf.putInt(msg.getBuckets().size());
+
+ for (const auto & bucketId : msg.getBuckets()) {
+ uint64_t val = bucketId.getRawId();
+ buf.putBytes((const char*)&val, 8);
+ }
+
+ buf.putLong(msg.getFromTimestamp());
+ buf.putLong(msg.getToTimestamp());
+ buf.putBoolean(msg.visitRemoves());
+ buf.putString(msg.getFieldSet());
+ buf.putBoolean(msg.visitInconsistentBuckets());
+
+ int len = msg.getParameters().getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ msg.getParameters().serialize(dbuf);
+
+ buf.putInt(msg.getVisitorOrdering());
+ buf.putInt(msg.getMaxBucketsPerVisitor());
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+}
+
+bool RoutableFactories52::CreateVisitorMessageFactory::encodeBucketSpace(
+ vespalib::stringref bucketSpace,
+ vespalib::GrowableByteBuffer& buf) const {
+ (void) buf;
+ return (bucketSpace == FixedBucketSpaces::default_space_name());
+}
+
+string RoutableFactories52::CreateVisitorMessageFactory::decodeBucketSpace(document::ByteBuffer&) const {
+ return FixedBucketSpaces::default_space_name();
+}
+
+DocumentMessage::UP
+RoutableFactories52::DestroyVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<DestroyVisitorMessage>();
+ msg->setInstanceId(decodeString(buf));
+ return msg;
+}
+
+bool
+RoutableFactories52::DestroyVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const DestroyVisitorMessage &msg = static_cast<const DestroyVisitorMessage&>(obj);
+ buf.putString(msg.getInstanceId());
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::CreateVisitorReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<CreateVisitorReply>(DocumentProtocol::REPLY_CREATEVISITOR);
+ reply->setLastBucket(document::BucketId((uint64_t)decodeLong(buf)));
+ vdslib::VisitorStatistics vs;
+ vs.setBucketsVisited(decodeInt(buf));
+ vs.setDocumentsVisited(decodeLong(buf));
+ vs.setBytesVisited(decodeLong(buf));
+ vs.setDocumentsReturned(decodeLong(buf));
+ vs.setBytesReturned(decodeLong(buf));
+ vs.setSecondPassDocumentsReturned(decodeLong(buf));
+ vs.setSecondPassBytesReturned(decodeLong(buf));
+ reply->setVisitorStatistics(vs);
+
+ return reply;
+}
+
+bool
+RoutableFactories52::CreateVisitorReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const CreateVisitorReply &reply = static_cast<const CreateVisitorReply&>(obj);
+ buf.putLong(reply.getLastBucket().getRawId());
+ buf.putInt(reply.getVisitorStatistics().getBucketsVisited());
+ buf.putLong(reply.getVisitorStatistics().getDocumentsVisited());
+ buf.putLong(reply.getVisitorStatistics().getBytesVisited());
+ buf.putLong(reply.getVisitorStatistics().getDocumentsReturned());
+ buf.putLong(reply.getVisitorStatistics().getBytesReturned());
+ buf.putLong(reply.getVisitorStatistics().getSecondPassDocumentsReturned());
+ buf.putLong(reply.getVisitorStatistics().getSecondPassBytesReturned());
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::DestroyVisitorReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DESTROYVISITOR);
+}
+
+bool
+RoutableFactories52::DestroyVisitorReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::DocumentIgnoredReplyFactory::doDecode(document::ByteBuffer& buf) const
+{
+ (void) buf;
+ return DocumentReply::UP(new DocumentIgnoredReply());
+}
+
+bool
+RoutableFactories52::DocumentIgnoredReplyFactory::doEncode(
+ const DocumentReply& obj,
+ vespalib::GrowableByteBuffer& buf) const
+{
+ (void) obj;
+ (void) buf;
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::DocumentListMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<DocumentListMessage>();
+ msg->setBucketId(document::BucketId(decodeLong(buf)));
+
+ int32_t len = decodeInt(buf);
+ for (int32_t i = 0; i < len; i++) {
+ DocumentListMessage::Entry entry(_repo, buf);
+ msg->getDocuments().push_back(entry);
+ }
+
+ return msg;
+}
+
+bool
+RoutableFactories52::DocumentListMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const DocumentListMessage &msg = static_cast<const DocumentListMessage&>(obj);
+
+ buf.putLong(msg.getBucketId().getRawId());
+ buf.putInt(msg.getDocuments().size());
+ for (const auto & document : msg.getDocuments()) {
+ int len = document.getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ document.serialize(dbuf);
+ }
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::DocumentListReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DOCUMENTLIST);
+}
+
+bool
+RoutableFactories52::DocumentListReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::DocumentSummaryMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<DocumentSummaryMessage>();
+
+ msg->deserialize(buf);
+
+ return msg;
+}
+
+bool
+RoutableFactories52::DocumentSummaryMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const DocumentSummaryMessage &msg = static_cast<const DocumentSummaryMessage&>(obj);
+
+ int32_t len = msg.getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ msg.serialize(dbuf);
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::DocumentSummaryReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_DOCUMENTSUMMARY);
+}
+
+bool
+RoutableFactories52::DocumentSummaryReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::EmptyBucketsMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<EmptyBucketsMessage>();
+
+ int32_t len = decodeInt(buf);
+ std::vector<document::BucketId> buckets(len);
+ for (int32_t i = 0; i < len; ++i) {
+ buckets[i] = document::BucketId(decodeLong(buf));
+ }
+ msg->getBucketIds().swap(buckets);
+
+ return msg;
+}
+
+bool
+RoutableFactories52::EmptyBucketsMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const EmptyBucketsMessage &msg = static_cast<const EmptyBucketsMessage&>(obj);
+
+ buf.putInt(msg.getBucketIds().size());
+ for (const auto & bucketId : msg.getBucketIds()) {
+ buf.putLong(bucketId.getRawId());
+ }
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::EmptyBucketsReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_EMPTYBUCKETS);
+}
+
+bool
+RoutableFactories52::EmptyBucketsReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+bool RoutableFactories52::GetBucketListMessageFactory::encodeBucketSpace(vespalib::stringref bucketSpace,
+ vespalib::GrowableByteBuffer& ) const
+{
+ return (bucketSpace == FixedBucketSpaces::default_space_name());
+}
+
+string RoutableFactories52::GetBucketListMessageFactory::decodeBucketSpace(document::ByteBuffer&) const {
+ return FixedBucketSpaces::default_space_name();
+}
+
+DocumentMessage::UP
+RoutableFactories52::GetBucketListMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ document::BucketId bucketId(decodeLong(buf));
+ auto msg = std::make_unique<GetBucketListMessage>(bucketId);
+ msg->setBucketSpace(decodeBucketSpace(buf));
+ return msg;
+}
+
+bool
+RoutableFactories52::GetBucketListMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const GetBucketListMessage &msg = static_cast<const GetBucketListMessage&>(obj);
+ buf.putLong(msg.getBucketId().getRawId());
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+}
+
+DocumentReply::UP
+RoutableFactories52::GetBucketListReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<GetBucketListReply>();
+
+ int32_t len = decodeInt(buf);
+ reply->getBuckets().reserve(len);
+ for (int32_t i = 0; i < len; i++) {
+ GetBucketListReply::BucketInfo info;
+ info._bucket = document::BucketId((uint64_t)decodeLong(buf));
+ info._bucketInformation = decodeString(buf);
+ reply->getBuckets().push_back(info);
+ }
+
+ return reply;
+}
+
+bool
+RoutableFactories52::GetBucketListReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const GetBucketListReply &reply = static_cast<const GetBucketListReply&>(obj);
+
+ const std::vector<GetBucketListReply::BucketInfo> &buckets = reply.getBuckets();
+ buf.putInt(buckets.size());
+ for (const auto & bucketInfo : buckets) {
+ buf.putLong(bucketInfo._bucket.getRawId());
+ buf.putString(bucketInfo._bucketInformation);
+ }
+
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::GetBucketStateMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<GetBucketStateMessage>();
+
+ msg->setBucketId(document::BucketId((uint64_t)decodeLong(buf)));
+
+ return msg;
+}
+
+bool
+RoutableFactories52::GetBucketStateMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const GetBucketStateMessage &msg = static_cast<const GetBucketStateMessage&>(obj);
+ buf.putLong(msg.getBucketId().getRawId());
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::GetBucketStateReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<GetBucketStateReply>();
+
+ int32_t len = decodeInt(buf);
+ reply->getBucketState().reserve(len);
+ for (int32_t i = 0; i < len; i++) {
+ reply->getBucketState().emplace_back(buf);
+ }
+
+ return reply;
+}
+
+bool
+RoutableFactories52::GetBucketStateReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const GetBucketStateReply &reply = static_cast<const GetBucketStateReply&>(obj);
+
+ buf.putInt(reply.getBucketState().size());
+ for (const auto & state : reply.getBucketState()) {
+ state.serialize(buf);
+ }
+
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::GetDocumentMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ return DocumentMessage::UP(
+ new GetDocumentMessage(decodeDocumentId(buf),
+ decodeString(buf)));
+}
+
+bool
+RoutableFactories52::GetDocumentMessageFactory::doEncode(const DocumentMessage &obj,
+ vespalib::GrowableByteBuffer &buf) const
+{
+ const GetDocumentMessage &msg = static_cast<const GetDocumentMessage&>(obj);
+
+ encodeDocumentId(msg.getDocumentId(), buf);
+ buf.putString(msg.getFieldSet());
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::GetDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<GetDocumentReply>();
+
+ bool hasDocument = decodeBoolean(buf);
+ document::Document * document = nullptr;
+ if (hasDocument) {
+ auto doc = std::make_shared<document::Document>(_repo, buf);
+ document = doc.get();
+ reply->setDocument(std::move(doc));
+ }
+ int64_t lastModified = decodeLong(buf);
+ reply->setLastModified(lastModified);
+ if (hasDocument) {
+ document->setLastModified(lastModified);
+ }
+
+ return reply;
+}
+
+bool
+RoutableFactories52::GetDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const GetDocumentReply &reply = static_cast<const GetDocumentReply&>(obj);
+
+ buf.putByte(reply.hasDocument() ? 1 : 0);
+ if (reply.hasDocument()) {
+ nbostream stream;
+ reply.getDocument().serialize(stream);
+ buf.putBytes(stream.peek(), stream.size());
+ }
+ buf.putLong(reply.getLastModified());
+
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::MapVisitorMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<MapVisitorMessage>();
+ msg->getData().deserialize(_repo, buf);
+ return msg;
+}
+
+bool
+RoutableFactories52::MapVisitorMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const MapVisitorMessage &msg = static_cast<const MapVisitorMessage&>(obj);
+
+ int32_t len = msg.getData().getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ msg.getData().serialize(dbuf);
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::MapVisitorReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_MAPVISITOR);
+}
+
+bool
+RoutableFactories52::MapVisitorReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
void
RoutableFactories52::PutDocumentMessageFactory::decodeInto(PutDocumentMessage & msg, document::ByteBuffer & buf) const {
- super::decodeInto(msg, buf);
+ msg.setDocument(make_shared<document::Document>(_repo, buf));
+ msg.setTimestamp(static_cast<uint64_t>(decodeLong(buf)));
decodeTasCondition(msg, buf);
}
bool
-RoutableFactories52::PutDocumentMessageFactory::doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const
+RoutableFactories52::PutDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
{
- if (! super::doEncode(msg, buf)) {
- return false;
- }
+ auto & msg = static_cast<const PutDocumentMessage &>(obj);
+ nbostream stream;
+ msg.getDocument().serialize(stream);
+ buf.putBytes(stream.peek(), stream.size());
+ buf.putLong(static_cast<int64_t>(msg.getTimestamp()));
encodeTasCondition(buf, msg);
+
return true;
}
+DocumentReply::UP
+RoutableFactories52::PutDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = make_unique<WriteDocumentReply>(DocumentProtocol::REPLY_PUTDOCUMENT);
+ reply->setHighestModificationTimestamp(decodeLong(buf));
+
+ // Doing an explicit move here to force converting result to an rvalue.
+ // This is done automatically in GCC >= 5.
+ return std::move(reply);
+}
+
+bool
+RoutableFactories52::PutDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const WriteDocumentReply& reply = (const WriteDocumentReply&)obj;
+ buf.putLong(reply.getHighestModificationTimestamp());
+ return true;
+}
+
void
RoutableFactories52::RemoveDocumentMessageFactory::decodeInto(RemoveDocumentMessage & msg, document::ByteBuffer & buf) const {
- super::decodeInto(msg, buf);
+ msg.setDocumentId(decodeDocumentId(buf));
decodeTasCondition(msg, buf);
}
+bool
+RoutableFactories52::RemoveDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const RemoveDocumentMessage &msg = static_cast<const RemoveDocumentMessage&>(obj);
+ encodeDocumentId(msg.getDocumentId(), buf);
+ encodeTasCondition(buf, msg);
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::RemoveDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<RemoveDocumentReply>();
+ reply->setWasFound(decodeBoolean(buf));
+ reply->setHighestModificationTimestamp(decodeLong(buf));
+ return reply;
+}
bool
-RoutableFactories52::RemoveDocumentMessageFactory::doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const
+RoutableFactories52::RemoveDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
{
- if (! super::doEncode(msg, buf)) {
- return false;
- }
+ const RemoveDocumentReply &reply = static_cast<const RemoveDocumentReply&>(obj);
+ buf.putBoolean(reply.getWasFound());
+ buf.putLong(reply.getHighestModificationTimestamp());
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::RemoveLocationMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ string selection = decodeString(buf);
+
+ document::BucketIdFactory factory;
+ document::select::Parser parser(_repo, factory);
+
+ auto msg = std::make_unique<RemoveLocationMessage>(factory, parser, selection);
+ // FIXME bucket space not part of wire format, implicitly limiting to only default space for now.
+ msg->setBucketSpace(document::FixedBucketSpaces::default_space_name());
+ return msg;
+}
+
+bool
+RoutableFactories52::RemoveLocationMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const RemoveLocationMessage &msg = static_cast<const RemoveLocationMessage&>(obj);
+ buf.putString(msg.getDocumentSelection());
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::RemoveLocationReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<DocumentReply>(DocumentProtocol::REPLY_REMOVELOCATION);
+}
+
+bool
+RoutableFactories52::RemoveLocationReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::SearchResultMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<SearchResultMessage>();
+ msg->deserialize(buf);
+ return msg;
+}
+
+bool
+RoutableFactories52::SearchResultMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const SearchResultMessage &msg = static_cast<const SearchResultMessage&>(obj);
+
+ int len = msg.getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ msg.serialize(dbuf);
- encodeTasCondition(buf, msg);
return true;
}
+DocumentMessage::UP
+RoutableFactories52::QueryResultMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<QueryResultMessage>();
+ msg->getSearchResult().deserialize(buf);
+ msg->getDocumentSummary().deserialize(buf);
+
+ return msg;
+}
+
+bool
+RoutableFactories52::QueryResultMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const QueryResultMessage &msg = static_cast<const QueryResultMessage&>(obj);
+
+ int len = msg.getSearchResult().getSerializedSize() + msg.getDocumentSummary().getSerializedSize();
+ char *tmp = buf.allocate(len);
+ document::ByteBuffer dbuf(tmp, len);
+ msg.getSearchResult().serialize(dbuf);
+ msg.getDocumentSummary().serialize(dbuf);
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::SearchResultReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_SEARCHRESULT);
+}
+
+bool
+RoutableFactories52::SearchResultReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::QueryResultReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_QUERYRESULT);
+}
+
+bool
+RoutableFactories52::QueryResultReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+bool RoutableFactories52::StatBucketMessageFactory::encodeBucketSpace(vespalib::stringref bucketSpace,
+ vespalib::GrowableByteBuffer& ) const
+{
+ return (bucketSpace == FixedBucketSpaces::default_space_name());
+}
+
+string RoutableFactories52::StatBucketMessageFactory::decodeBucketSpace(document::ByteBuffer&) const {
+ return FixedBucketSpaces::default_space_name();
+}
+
+DocumentMessage::UP
+RoutableFactories52::StatBucketMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<StatBucketMessage>();
+
+ msg->setBucketId(document::BucketId(decodeLong(buf)));
+ msg->setDocumentSelection(decodeString(buf));
+ msg->setBucketSpace(decodeBucketSpace(buf));
+
+ return msg;
+}
+
+bool
+RoutableFactories52::StatBucketMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const StatBucketMessage &msg = static_cast<const StatBucketMessage&>(obj);
+
+ buf.putLong(msg.getBucketId().getRawId());
+ buf.putString(msg.getDocumentSelection());
+ return encodeBucketSpace(msg.getBucketSpace(), buf);
+}
+
+DocumentReply::UP
+RoutableFactories52::StatBucketReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<StatBucketReply>();
+ reply->setResults(decodeString(buf));
+ return reply;
+}
+
+bool
+RoutableFactories52::StatBucketReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const StatBucketReply &reply = static_cast<const StatBucketReply&>(obj);
+ buf.putString(reply.getResults());
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::StatDocumentMessageFactory::doDecode(document::ByteBuffer &) const
+{
+ return DocumentMessage::UP(); // TODO: remove message type
+}
+
+bool
+RoutableFactories52::StatDocumentMessageFactory::doEncode(const DocumentMessage &, vespalib::GrowableByteBuffer &) const
+{
+ return false;
+}
+
+DocumentReply::UP
+RoutableFactories52::StatDocumentReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return DocumentReply::UP(); // TODO: remove reply type
+}
+
+bool
+RoutableFactories52::StatDocumentReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return false;
+}
+
void
RoutableFactories52::UpdateDocumentMessageFactory::decodeInto(UpdateDocumentMessage & msg, document::ByteBuffer & buf) const {
- super::decodeInto(msg, buf);
+ msg.setDocumentUpdate(document::DocumentUpdate::createHEAD(_repo, buf));
+ msg.setOldTimestamp(static_cast<uint64_t>(decodeLong(buf)));
+ msg.setNewTimestamp(static_cast<uint64_t>(decodeLong(buf)));
decodeTasCondition(msg, buf);
}
bool
-RoutableFactories52::UpdateDocumentMessageFactory::doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const
+RoutableFactories52::UpdateDocumentMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
{
- if (! super::doEncode(msg, buf)) {
- return false;
- }
+ const UpdateDocumentMessage &msg = static_cast<const UpdateDocumentMessage&>(obj);
+ vespalib::nbostream stream;
+ msg.getDocumentUpdate().serializeHEAD(stream);
+ buf.putBytes(stream.peek(), stream.size());
+ buf.putLong((int64_t)msg.getOldTimestamp());
+ buf.putLong((int64_t)msg.getNewTimestamp());
encodeTasCondition(buf, msg);
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::UpdateDocumentReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<UpdateDocumentReply>();
+ reply->setWasFound(decodeBoolean(buf));
+ reply->setHighestModificationTimestamp(decodeLong(buf));
+ return reply;
+}
+
+bool
+RoutableFactories52::UpdateDocumentReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const UpdateDocumentReply &reply = static_cast<const UpdateDocumentReply&>(obj);
+ buf.putBoolean(reply.getWasFound());
+ buf.putLong(reply.getHighestModificationTimestamp());
+ return true;
+}
+
+DocumentMessage::UP
+RoutableFactories52::VisitorInfoMessageFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto msg = std::make_unique<VisitorInfoMessage>();
+
+ int32_t len = decodeInt(buf);
+ msg->getFinishedBuckets().reserve(len);
+ for (int32_t i = 0; i < len; i++) {
+ int64_t val;
+ buf.getLong(val); // NOT using getLongNetwork
+ msg->getFinishedBuckets().emplace_back(val);
+ }
+ msg->setErrorMessage(decodeString(buf));
+
+ return msg;
+}
+
+bool
+RoutableFactories52::VisitorInfoMessageFactory::doEncode(const DocumentMessage &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const VisitorInfoMessage &msg = static_cast<const VisitorInfoMessage&>(obj);
+
+ buf.putInt(msg.getFinishedBuckets().size());
+ for (const auto & bucketId : msg.getFinishedBuckets()) {
+ uint64_t val = bucketId.getRawId();
+ buf.putBytes((const char*)&val, 8);
+ }
+ buf.putString(msg.getErrorMessage());
+
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::VisitorInfoReplyFactory::doDecode(document::ByteBuffer &) const
+{
+ return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_VISITORINFO);
+}
+
+bool
+RoutableFactories52::VisitorInfoReplyFactory::doEncode(const DocumentReply &, vespalib::GrowableByteBuffer &) const
+{
+ return true;
+}
+
+DocumentReply::UP
+RoutableFactories52::WrongDistributionReplyFactory::doDecode(document::ByteBuffer &buf) const
+{
+ auto reply = std::make_unique<WrongDistributionReply>();
+ reply->setSystemState(decodeString(buf));
+ return reply;
+}
+
+bool
+RoutableFactories52::WrongDistributionReplyFactory::doEncode(const DocumentReply &obj, vespalib::GrowableByteBuffer &buf) const
+{
+ const WrongDistributionReply &reply = static_cast<const WrongDistributionReply&>(obj);
+ buf.putString(reply.getSystemState());
return true;
}
+string
+RoutableFactories52::decodeString(document::ByteBuffer &in)
+{
+ int32_t len = decodeInt(in);
+ string ret = string(in.getBufferAtPos(), len);
+ in.incPos(len);
+ return ret;
+}
+
+bool
+RoutableFactories52::decodeBoolean(document::ByteBuffer &in)
+{
+ char ret;
+ in.getBytes(&ret, 1);
+ return (bool)ret;
+}
+
+int32_t
+RoutableFactories52::decodeInt(document::ByteBuffer &in)
+{
+ int32_t ret;
+ in.getIntNetwork(ret);
+ return ret;
+}
+
+int64_t
+RoutableFactories52::decodeLong(document::ByteBuffer &in)
+{
+ int64_t ret;
+ in.getLongNetwork(ret);
+ return ret;
+}
+
+document::DocumentId
+RoutableFactories52::decodeDocumentId(document::ByteBuffer &in)
+{
+ nbostream stream(in.getBufferAtPos(), in.getRemaining());
+ document::DocumentId ret(stream);
+ in.incPos(stream.rp());
+ return ret;
+}
+
+void
+RoutableFactories52::encodeDocumentId(const document::DocumentId &id, vespalib::GrowableByteBuffer &out)
+{
+ string str = id.toString();
+ out.putBytes(str.c_str(), str.size() + 1);
+}
+
void RoutableFactories52::decodeTasCondition(DocumentMessage & docMsg, document::ByteBuffer & buf) {
auto & msg = static_cast<TestAndSetMessage &>(docMsg);
msg.setCondition(TestAndSetCondition(decodeString(buf)));
@@ -73,4 +945,5 @@ void RoutableFactories52::encodeTasCondition(vespalib::GrowableByteBuffer & buf,
buf.putString(msg.getCondition().getSelection());
}
+
}
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories52.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories52.h
index ac56dea8467..9c614bde487 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories52.h
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories52.h
@@ -2,57 +2,417 @@
// @author Vegard Sjonfjell
#pragma once
-#include "routablefactories51.h"
-#include <vespa/documentapi/messagebus/messages/testandsetmessage.h>
+#include <vespa/document/util/bytebuffer.h>
+#include <vespa/vespalib/util/growablebytebuffer.h>
+#include "iroutablefactory.h"
+#include <vespa/documentapi/messagebus/messages/putdocumentmessage.h>
+#include <vespa/documentapi/messagebus/messages/removedocumentmessage.h>
+#include <vespa/documentapi/messagebus/messages/updatedocumentmessage.h>
namespace document { class DocumentTypeRepo; }
+/**
+ * Utility class for invoking setApproxSize on a DocumentMessage with the delta
+ * between the read position of a ByteBuffer at construction and destruction
+ * time. The assumption being made is that the in-memory footprint of a message
+ * is reasonably close to its wire-serialized form.
+ */
+class ScopedApproxSizeSetter {
+public:
+ ScopedApproxSizeSetter(documentapi::DocumentMessage& msg,
+ const document::ByteBuffer& buf)
+ : _msg(msg),
+ _buf(buf),
+ _posBefore(_buf.getPos())
+ {
+ }
+
+ ~ScopedApproxSizeSetter() {
+ _msg.setApproxSize(static_cast<uint32_t>(_buf.getPos() - _posBefore));
+ }
+
+private:
+ documentapi::DocumentMessage& _msg;
+ const document::ByteBuffer& _buf;
+ const size_t _posBefore;
+};
+
namespace documentapi {
+
+template<typename MessageType, typename FactoryType>
+DocumentMessage::UP
+decodeMessage(const FactoryType * self, document::ByteBuffer & buf) {
+ auto msg = std::make_unique<MessageType>();
+ ScopedApproxSizeSetter sizeSetter(*msg, buf);
+ self->decodeInto(*msg, buf);
+ return msg;
+}
+
/**
* This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document
* routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now.
*/
-class RoutableFactories52 : public RoutableFactories51 {
+class RoutableFactories52 {
public:
RoutableFactories52() = delete;
- class PutDocumentMessageFactory : public RoutableFactories50::PutDocumentMessageFactory {
- using super = RoutableFactories50::PutDocumentMessageFactory;
+ /**
+ * Implements the shared factory logic required for {@link DocumentMessage} objects, and it offers a more
+ * convenient interface for implementing {@link RoutableFactory}.
+ */
+ class DocumentMessageFactory : public IRoutableFactory {
+ protected:
+ /**
+ * This method encodes the given message into the given byte buffer. You are guaranteed to only receive messages of
+ * the type that this factory was registered for.
+ *
+ * This method is NOT exception safe. Return false to signal failure.
+ *
+ * @param msg The message to encode.
+ * @param buf The byte buffer to write to.
+ * @return True if the message was encoded.
+ */
+ virtual bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const = 0;
+
+ /**
+ * This method decodes a message from the given byte buffer. You are guaranteed to only receive byte buffers
+ * generated by a previous call to {@link #doEncode(DocumentMessage, GrowableByteBuffer)}.
+ *
+ * This method is NOT exception safe. Return null to signal failure.
+ *
+ * @param buf The byte buffer to read from.
+ * @return The decoded message.
+ */
+ virtual DocumentMessage::UP doDecode(document::ByteBuffer &buf) const = 0;
+
+ public:
+ bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
+ mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
+ };
+
+ /**
+ * Implements the shared factory logic required for {@link DocumentReply} objects, and it offers a more
+ * convenient interface for implementing {@link RoutableFactory}.
+ */
+ class DocumentReplyFactory : public IRoutableFactory {
+ protected:
+ /**
+ * This method encodes the given reply into the given byte buffer. You are guaranteed to only receive
+ * replies of the type that this factory was registered for.
+ *
+ * This method is NOT exception safe. Return false to signal failure.
+ *
+ * @param reply The reply to encode.
+ * @param buf The byte buffer to write to.
+ * @return True if the message was encoded.
+ */
+ virtual bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const = 0;
+
+ /**
+ * This method decodes a reply from the given byte buffer. You are guaranteed to only receive byte buffers
+ * generated by a previous call to {@link #doEncode(DocumentReply, GrowableByteBuffer)}.
+ *
+ * This method is NOT exception safe. Return null to signal failure.
+ *
+ * @param buf The byte buffer to read from.
+ * @return The decoded reply.
+ */
+ virtual DocumentReply::UP doDecode(document::ByteBuffer &buf) const = 0;
+
+ public:
+ bool encode(const mbus::Routable &obj, vespalib::GrowableByteBuffer &out) const override;
+ mbus::Routable::UP decode(document::ByteBuffer &in, const LoadTypeSet& loadTypes) const override;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ // Factories
+ //
+ ////////////////////////////////////////////////////////////////////////////////
+ class CreateVisitorMessageFactory : public DocumentMessageFactory {
+ const document::DocumentTypeRepo &_repo;
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+
+ virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const;
+ virtual string decodeBucketSpace(document::ByteBuffer&) const;
+ public:
+ CreateVisitorMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
+ };
+ class CreateVisitorReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DestroyVisitorMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DestroyVisitorReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DocumentIgnoredReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DocumentListMessageFactory : public DocumentMessageFactory {
+ const document::DocumentTypeRepo &_repo;
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ public:
+ DocumentListMessageFactory(const document::DocumentTypeRepo &r)
+ : _repo(r) {}
+ };
+ class DocumentListReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DocumentSummaryMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class DocumentSummaryReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class EmptyBucketsMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class EmptyBucketsReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetBucketListMessageFactory : public DocumentMessageFactory {
+ virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const;
+ virtual string decodeBucketSpace(document::ByteBuffer&) const;
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetBucketListReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetBucketStateMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetBucketStateReplyFactory : public DocumentReplyFactory {
protected:
- DocumentMessage::UP doDecode(document::ByteBuffer & buf) const override {
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetDocumentMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class GetDocumentReplyFactory : public DocumentReplyFactory {
+ const document::DocumentTypeRepo &_repo;
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &msg, vespalib::GrowableByteBuffer &buf) const override;
+ public:
+ GetDocumentReplyFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
+ };
+ class MapVisitorMessageFactory : public DocumentMessageFactory {
+ const document::DocumentTypeRepo &_repo;
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ public:
+ MapVisitorMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
+ };
+ class MapVisitorReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class PutDocumentMessageFactory : public DocumentMessageFactory {
+ protected:
+ const document::DocumentTypeRepo &_repo;
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
return decodeMessage<PutDocumentMessage>(this, buf);
}
- bool doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
public:
void decodeInto(PutDocumentMessage & msg, document::ByteBuffer & buf) const;
- PutDocumentMessageFactory(const document::DocumentTypeRepo & r) : super::PutDocumentMessageFactory(r) {}
+ PutDocumentMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
};
-
- class RemoveDocumentMessageFactory : public RoutableFactories50::RemoveDocumentMessageFactory {
- using super = RoutableFactories50::RemoveDocumentMessageFactory;
+ class PutDocumentReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class RemoveDocumentMessageFactory : public DocumentMessageFactory {
protected:
- DocumentMessage::UP doDecode(document::ByteBuffer & buf) const override {
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
return decodeMessage<RemoveDocumentMessage>(this, buf);
}
- bool doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
public:
void decodeInto(RemoveDocumentMessage & msg, document::ByteBuffer & buf) const;
};
-
- class UpdateDocumentMessageFactory : public RoutableFactories50::UpdateDocumentMessageFactory {
- using super = RoutableFactories50::UpdateDocumentMessageFactory;
+ class RemoveDocumentReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class RemoveLocationMessageFactory : public DocumentMessageFactory {
+ const document::DocumentTypeRepo &_repo;
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ public:
+ RemoveLocationMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
+ };
+ class RemoveLocationReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class SearchResultMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class SearchResultReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class StatBucketMessageFactory : public DocumentMessageFactory {
+ virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const;
+ virtual string decodeBucketSpace(document::ByteBuffer&) const;
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class StatBucketReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class StatDocumentMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class StatDocumentReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class UpdateDocumentMessageFactory : public DocumentMessageFactory {
protected:
- DocumentMessage::UP doDecode(document::ByteBuffer & buf) const override {
+ const document::DocumentTypeRepo &_repo;
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override {
return decodeMessage<UpdateDocumentMessage>(this, buf);
}
- bool doEncode(const DocumentMessage & msg, vespalib::GrowableByteBuffer & buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
public:
void decodeInto(UpdateDocumentMessage & msg, document::ByteBuffer & buf) const;
- UpdateDocumentMessageFactory(const document::DocumentTypeRepo & r) : super::UpdateDocumentMessageFactory(r) {}
+ UpdateDocumentMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {}
+ };
+ class UpdateDocumentReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class VisitorInfoMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class VisitorInfoReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
};
+ class WrongDistributionReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class QueryResultMessageFactory : public DocumentMessageFactory {
+ protected:
+ DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override;
+ };
+ class QueryResultReplyFactory : public DocumentReplyFactory {
+ protected:
+ DocumentReply::UP doDecode(document::ByteBuffer &buf) const override;
+ bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Utilities
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ /**
+ * This is a complement for the vespalib::GrowableByteBuffer.putString() method.
+ *
+ * @param in The byte buffer to read from.
+ * @return The decoded string.
+ */
+ static string decodeString(document::ByteBuffer &in);
+
+ /**
+ * This is a complement for the vespalib::GrowableByteBuffer.putBoolean() method.
+ *
+ * @param in The byte buffer to read from.
+ * @return The decoded bool.
+ */
+ static bool decodeBoolean(document::ByteBuffer &in);
+
+ /**
+ * Convenience method to decode a 32-bit int from the given byte buffer.
+ *
+ * @param in The byte buffer to read from.
+ * @return The decoded int.
+ */
+ static int32_t decodeInt(document::ByteBuffer &in);
+
+ /**
+ * Convenience method to decode a 64-bit int from the given byte buffer.
+ *
+ * @param in The byte buffer to read from.
+ * @return The decoded int.
+ */
+ static int64_t decodeLong(document::ByteBuffer &in);
+
+ /**
+ * Convenience method to decode a document id from the given byte buffer.
+ *
+ * @param in The byte buffer to read from.
+ * @return The decoded document id.
+ */
+ static document::DocumentId decodeDocumentId(document::ByteBuffer &in);
+
+ /**
+ * Convenience method to encode a document id to the given byte buffer.
+ *
+ * @param id The document id to encode.
+ * @param out The byte buffer to write to.
+ */
+ static void encodeDocumentId(const document::DocumentId &id,
+ vespalib::GrowableByteBuffer &out);
static void decodeTasCondition(DocumentMessage & docMsg, document::ByteBuffer & buf);
static void encodeTasCondition(vespalib::GrowableByteBuffer & buf, const DocumentMessage & docMsg);
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h
index 26a8f0cb6d5..e91c9a773f2 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h
@@ -22,14 +22,14 @@ public:
: RoutableFactories52::CreateVisitorMessageFactory(r) {}
};
- class StatBucketMessageFactory : public RoutableFactories50::StatBucketMessageFactory {
+ class StatBucketMessageFactory : public RoutableFactories52::StatBucketMessageFactory {
bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override;
string decodeBucketSpace(document::ByteBuffer&) const override;
public:
StatBucketMessageFactory() = default;
};
- class GetBucketListMessageFactory : public RoutableFactories50::GetBucketListMessageFactory {
+ class GetBucketListMessageFactory : public RoutableFactories52::GetBucketListMessageFactory {
bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override;
string decodeBucketSpace(document::ByteBuffer&) const override;
public:
@@ -40,4 +40,4 @@ public:
static string doDecodeBucketSpace(document::ByteBuffer&);
};
-} \ No newline at end of file
+}
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-BatchMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-BatchMessage.dat
deleted file mode 100644
index c1c43e8081b..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-BatchMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-BatchReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-BatchReply.dat
deleted file mode 100644
index be3a9ba1913..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-BatchReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorMessage.dat
deleted file mode 100644
index a506fc760bd..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorReply.dat
deleted file mode 100644
index e13917227d1..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-CreateVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorMessage.dat
deleted file mode 100644
index f39b31217e6..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorReply.dat
deleted file mode 100644
index 1468f027b15..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-DestroyVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentListMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-DocumentListMessage.dat
deleted file mode 100644
index 2d8d12d2704..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentListReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-DocumentListReply.dat
deleted file mode 100644
index c8a1cd888f0..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryReply.dat
deleted file mode 100644
index 16b1e4bc4ef..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsMessage.dat
deleted file mode 100644
index b9df278fd7a..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsReply.dat
deleted file mode 100644
index 05510dd8c1e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-EmptyBucketsReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListMessage.dat
deleted file mode 100644
index fa3de45ac5b..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListReply.dat
deleted file mode 100644
index 830994ed785..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateMessage.dat
deleted file mode 100644
index aa2d206ca3a..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateReply.dat
deleted file mode 100644
index 0f91e3759f8..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetBucketStateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentMessage.dat
deleted file mode 100644
index 1444d617c22..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentReply.dat
deleted file mode 100644
index c1ad7920a2e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-GetDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorMessage.dat
deleted file mode 100644
index 1a8a837ea16..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorReply.dat
deleted file mode 100644
index 541cd718a66..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-MapVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationMessage.dat
deleted file mode 100644
index 6efc54a6d09..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationReply.dat
deleted file mode 100644
index 8ad31a95bd5..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-MultiOperationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentMessage.dat
deleted file mode 100644
index 9e4a5c5f82f..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentReply.dat
deleted file mode 100644
index 480544045bb..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-PutDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-QueryResultReply.dat
deleted file mode 100644
index 003f35d63a7..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentMessage.dat
deleted file mode 100644
index 78b7972eb5c..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentReply.dat
deleted file mode 100644
index bf5db8761e2..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessage.dat
deleted file mode 100644
index 16850a6aff3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageGroup.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageGroup.dat
deleted file mode 100644
index abd648184d7..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageGroup.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageUser.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageUser.dat
deleted file mode 100644
index c2a63cb94c0..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationMessageUser.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationReply.dat
deleted file mode 100644
index 752c4dba399..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-RemoveLocationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-SearchResultReply.dat
deleted file mode 100644
index cce9c6f8d14..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-StatBucketMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-StatBucketMessage.dat
deleted file mode 100644
index 1fc2b1cf3c1..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-StatBucketMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-StatBucketReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-StatBucketReply.dat
deleted file mode 100644
index 0b98e240018..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-StatBucketReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentMessage.dat
deleted file mode 100644
index f1bca25ceca..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentReply.dat
deleted file mode 100644
index c7151299366..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-UpdateDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoMessage.dat b/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoMessage.dat
deleted file mode 100644
index 80b44e0c6fd..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoReply.dat
deleted file mode 100644
index 57a656c9b2d..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-VisitorInfoReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-WrongDistributionReply.dat b/documentapi/test/crosslanguagefiles/5-cpp-WrongDistributionReply.dat
deleted file mode 100644
index 0dbe13225ae..00000000000
--- a/documentapi/test/crosslanguagefiles/5-cpp-WrongDistributionReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-BatchMessage.dat b/documentapi/test/crosslanguagefiles/5-java-BatchMessage.dat
deleted file mode 100644
index c1c43e8081b..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-BatchMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-BatchReply.dat b/documentapi/test/crosslanguagefiles/5-java-BatchReply.dat
deleted file mode 100644
index be3a9ba1913..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-BatchReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-CreateVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-java-CreateVisitorMessage.dat
deleted file mode 100644
index a506fc760bd..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-CreateVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-CreateVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-java-CreateVisitorReply.dat
deleted file mode 100644
index e13917227d1..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-CreateVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorMessage.dat
deleted file mode 100644
index f39b31217e6..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorReply.dat
deleted file mode 100644
index 1468f027b15..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-DestroyVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-DocumentListMessage.dat b/documentapi/test/crosslanguagefiles/5-java-DocumentListMessage.dat
deleted file mode 100644
index 2d8d12d2704..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-DocumentListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-DocumentListReply.dat b/documentapi/test/crosslanguagefiles/5-java-DocumentListReply.dat
deleted file mode 100644
index c8a1cd888f0..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-DocumentListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-DocumentSummaryReply.dat b/documentapi/test/crosslanguagefiles/5-java-DocumentSummaryReply.dat
deleted file mode 100644
index 16b1e4bc4ef..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-DocumentSummaryReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsMessage.dat b/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsMessage.dat
deleted file mode 100644
index b9df278fd7a..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsReply.dat b/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsReply.dat
deleted file mode 100644
index 05510dd8c1e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-EmptyBucketsReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5-java-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5-java-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5-java-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetBucketListMessage.dat b/documentapi/test/crosslanguagefiles/5-java-GetBucketListMessage.dat
deleted file mode 100644
index fa3de45ac5b..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetBucketListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetBucketListReply.dat b/documentapi/test/crosslanguagefiles/5-java-GetBucketListReply.dat
deleted file mode 100644
index 830994ed785..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetBucketListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetBucketStateMessage.dat b/documentapi/test/crosslanguagefiles/5-java-GetBucketStateMessage.dat
deleted file mode 100644
index aa2d206ca3a..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetBucketStateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetBucketStateReply.dat b/documentapi/test/crosslanguagefiles/5-java-GetBucketStateReply.dat
deleted file mode 100644
index 0f91e3759f8..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetBucketStateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-java-GetDocumentMessage.dat
deleted file mode 100644
index 1444d617c22..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-GetDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-java-GetDocumentReply.dat
deleted file mode 100644
index c1ad7920a2e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-GetDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-MapVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5-java-MapVisitorMessage.dat
deleted file mode 100644
index 1a8a837ea16..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-MapVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-MapVisitorReply.dat b/documentapi/test/crosslanguagefiles/5-java-MapVisitorReply.dat
deleted file mode 100644
index 541cd718a66..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-MapVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-MultiOperationMessage.dat b/documentapi/test/crosslanguagefiles/5-java-MultiOperationMessage.dat
deleted file mode 100644
index 6efc54a6d09..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-MultiOperationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-MultiOperationReply.dat b/documentapi/test/crosslanguagefiles/5-java-MultiOperationReply.dat
deleted file mode 100644
index 8ad31a95bd5..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-MultiOperationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-PutDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-java-PutDocumentMessage.dat
deleted file mode 100644
index 9e4a5c5f82f..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-PutDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-PutDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-java-PutDocumentReply.dat
deleted file mode 100644
index 480544045bb..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-PutDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-QueryResultReply.dat b/documentapi/test/crosslanguagefiles/5-java-QueryResultReply.dat
deleted file mode 100644
index 003f35d63a7..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-QueryResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentMessage.dat
deleted file mode 100644
index 78b7972eb5c..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentReply.dat
deleted file mode 100644
index bf5db8761e2..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessage.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessage.dat
deleted file mode 100644
index 16850a6aff3..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageGroup.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageGroup.dat
deleted file mode 100644
index 9d7901a8b6e..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageGroup.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageUser.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageUser.dat
deleted file mode 100644
index c2a63cb94c0..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationMessageUser.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationReply.dat b/documentapi/test/crosslanguagefiles/5-java-RemoveLocationReply.dat
deleted file mode 100644
index 752c4dba399..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-RemoveLocationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-SearchResultReply.dat b/documentapi/test/crosslanguagefiles/5-java-SearchResultReply.dat
deleted file mode 100644
index cce9c6f8d14..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-SearchResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5-java-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5-java-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-StatBucketMessage.dat b/documentapi/test/crosslanguagefiles/5-java-StatBucketMessage.dat
deleted file mode 100644
index 1fc2b1cf3c1..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-StatBucketMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-StatBucketReply.dat b/documentapi/test/crosslanguagefiles/5-java-StatBucketReply.dat
deleted file mode 100644
index 0b98e240018..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-StatBucketReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentMessage.dat
deleted file mode 100644
index f1bca25ceca..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentReply.dat b/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentReply.dat
deleted file mode 100644
index c7151299366..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-UpdateDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-VisitorInfoMessage.dat b/documentapi/test/crosslanguagefiles/5-java-VisitorInfoMessage.dat
deleted file mode 100644
index 80b44e0c6fd..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-VisitorInfoMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-VisitorInfoReply.dat b/documentapi/test/crosslanguagefiles/5-java-VisitorInfoReply.dat
deleted file mode 100644
index 57a656c9b2d..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-VisitorInfoReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-java-WrongDistributionReply.dat b/documentapi/test/crosslanguagefiles/5-java-WrongDistributionReply.dat
deleted file mode 100644
index 0dbe13225ae..00000000000
--- a/documentapi/test/crosslanguagefiles/5-java-WrongDistributionReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-BatchMessage.dat
deleted file mode 100644
index c1c43e8081b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-BatchReply.dat
deleted file mode 100644
index be3a9ba1913..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-BatchReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorMessage.dat
deleted file mode 100644
index 4ca8648e702..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorReply.dat
deleted file mode 100644
index e13917227d1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-CreateVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorMessage.dat
deleted file mode 100644
index f39b31217e6..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorReply.dat
deleted file mode 100644
index 1468f027b15..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DestroyVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentIgnoredReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentIgnoredReply.dat
deleted file mode 100644
index 15a7afe2a59..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentIgnoredReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListMessage.dat
deleted file mode 100644
index 2d8d12d2704..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListReply.dat
deleted file mode 100644
index c8a1cd888f0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-1.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-1.dat
deleted file mode 100644
index 0107dd5f350..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-2.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-2.dat
deleted file mode 100644
index 57187093f28..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-3.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-3.dat
deleted file mode 100644
index 6a516d38d17..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryMessage-3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryReply.dat
deleted file mode 100644
index 16b1e4bc4ef..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-DocumentSummaryReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsMessage.dat
deleted file mode 100644
index b9df278fd7a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsReply.dat
deleted file mode 100644
index 05510dd8c1e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-EmptyBucketsReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListMessage.dat
deleted file mode 100644
index fa3de45ac5b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListReply.dat
deleted file mode 100644
index 830994ed785..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateMessage.dat
deleted file mode 100644
index aa2d206ca3a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateReply.dat
deleted file mode 100644
index 0f91e3759f8..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetBucketStateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentMessage.dat
deleted file mode 100644
index 3df64ed657f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentReply.dat
deleted file mode 100644
index c1ad7920a2e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-GetDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorMessage.dat
deleted file mode 100644
index 1a8a837ea16..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorReply.dat
deleted file mode 100644
index 541cd718a66..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-MapVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationMessage.dat
deleted file mode 100644
index 6efc54a6d09..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationReply.dat
deleted file mode 100644
index 8ad31a95bd5..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-MultiOperationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentMessage.dat
deleted file mode 100644
index 9e4a5c5f82f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentReply.dat
deleted file mode 100644
index 480544045bb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-PutDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-1.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-1.dat
deleted file mode 100644
index dbf830c9365..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-2.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-2.dat
deleted file mode 100644
index 094143cf78d..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-3.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-3.dat
deleted file mode 100644
index 3341d74052b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-4.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-4.dat
deleted file mode 100644
index 8aaaefff491..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-5.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-5.dat
deleted file mode 100644
index e66ed1f07d4..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultMessage-5.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultReply.dat
deleted file mode 100644
index 003f35d63a7..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-QueryResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentMessage.dat
deleted file mode 100644
index 78b7972eb5c..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentReply.dat
deleted file mode 100644
index bf5db8761e2..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessage.dat
deleted file mode 100644
index 16850a6aff3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageGroup.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageGroup.dat
deleted file mode 100644
index abd648184d7..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageGroup.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageUser.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageUser.dat
deleted file mode 100644
index c2a63cb94c0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationMessageUser.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationReply.dat
deleted file mode 100644
index 752c4dba399..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-RemoveLocationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-1.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-1.dat
deleted file mode 100644
index 988f9fdab1f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-2.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-2.dat
deleted file mode 100644
index ac277d09643..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-3.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-3.dat
deleted file mode 100644
index 03b49c8a0ac..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-4.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-4.dat
deleted file mode 100644
index d52e574ea44..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-5.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-5.dat
deleted file mode 100644
index e68654e9941..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultMessage-5.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultReply.dat
deleted file mode 100644
index cce9c6f8d14..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-SearchResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketMessage.dat
deleted file mode 100644
index 1fc2b1cf3c1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketReply.dat
deleted file mode 100644
index 0b98e240018..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-StatBucketReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentMessage.dat
deleted file mode 100644
index f1bca25ceca..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentReply.dat
deleted file mode 100644
index c7151299366..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-UpdateDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoMessage.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoMessage.dat
deleted file mode 100644
index 80b44e0c6fd..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoReply.dat
deleted file mode 100644
index 57a656c9b2d..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-VisitorInfoReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-cpp-WrongDistributionReply.dat b/documentapi/test/crosslanguagefiles/5.1-cpp-WrongDistributionReply.dat
deleted file mode 100644
index 0dbe13225ae..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-cpp-WrongDistributionReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-BatchMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-BatchMessage.dat
deleted file mode 100644
index c1c43e8081b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-BatchMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-BatchReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-BatchReply.dat
deleted file mode 100644
index be3a9ba1913..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-BatchReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorMessage.dat
deleted file mode 100644
index 4ca8648e702..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorReply.dat
deleted file mode 100644
index e13917227d1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-CreateVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorMessage.dat
deleted file mode 100644
index f39b31217e6..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorReply.dat
deleted file mode 100644
index 1468f027b15..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DestroyVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DocumentIgnoredReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-DocumentIgnoredReply.dat
deleted file mode 100644
index 15a7afe2a59..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DocumentIgnoredReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DocumentListMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-DocumentListMessage.dat
deleted file mode 100644
index 2d8d12d2704..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DocumentListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DocumentListReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-DocumentListReply.dat
deleted file mode 100644
index c8a1cd888f0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DocumentListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-DocumentSummaryReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-DocumentSummaryReply.dat
deleted file mode 100644
index 16b1e4bc4ef..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-DocumentSummaryReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsMessage.dat
deleted file mode 100644
index b9df278fd7a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsReply.dat
deleted file mode 100644
index 05510dd8c1e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-EmptyBucketsReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListMessage.dat
deleted file mode 100644
index fa3de45ac5b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListReply.dat
deleted file mode 100644
index 830994ed785..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateMessage.dat
deleted file mode 100644
index aa2d206ca3a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateReply.dat
deleted file mode 100644
index 0f91e3759f8..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetBucketStateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentMessage.dat
deleted file mode 100644
index 3df64ed657f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentReply.dat
deleted file mode 100644
index c1ad7920a2e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-GetDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorMessage.dat
deleted file mode 100644
index 1a8a837ea16..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorReply.dat
deleted file mode 100644
index 541cd718a66..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-MapVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationMessage.dat
deleted file mode 100644
index 6efc54a6d09..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationReply.dat
deleted file mode 100644
index 8ad31a95bd5..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-MultiOperationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentMessage.dat
deleted file mode 100644
index 9e4a5c5f82f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentReply.dat
deleted file mode 100644
index 480544045bb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-PutDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-QueryResultReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-QueryResultReply.dat
deleted file mode 100644
index 003f35d63a7..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-QueryResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentMessage.dat
deleted file mode 100644
index 78b7972eb5c..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentReply.dat
deleted file mode 100644
index bf5db8761e2..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessage.dat
deleted file mode 100644
index 16850a6aff3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageGroup.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageGroup.dat
deleted file mode 100644
index 9d7901a8b6e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageGroup.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageUser.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageUser.dat
deleted file mode 100644
index c2a63cb94c0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationMessageUser.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationReply.dat
deleted file mode 100644
index 752c4dba399..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-RemoveLocationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-SearchResultReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-SearchResultReply.dat
deleted file mode 100644
index cce9c6f8d14..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-SearchResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-StatBucketMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-StatBucketMessage.dat
deleted file mode 100644
index 1fc2b1cf3c1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-StatBucketMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-StatBucketReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-StatBucketReply.dat
deleted file mode 100644
index 0b98e240018..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-StatBucketReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentMessage.dat
deleted file mode 100644
index f1bca25ceca..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentReply.dat
deleted file mode 100644
index c7151299366..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-UpdateDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoMessage.dat b/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoMessage.dat
deleted file mode 100644
index 80b44e0c6fd..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoReply.dat
deleted file mode 100644
index 57a656c9b2d..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-VisitorInfoReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.1-java-WrongDistributionReply.dat b/documentapi/test/crosslanguagefiles/5.1-java-WrongDistributionReply.dat
deleted file mode 100644
index 0dbe13225ae..00000000000
--- a/documentapi/test/crosslanguagefiles/5.1-java-WrongDistributionReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-cpp-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5.115-java-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-Priority.txt b/documentapi/test/crosslanguagefiles/5.93.30-Priority.txt
deleted file mode 100644
index 5fda195ddaf..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-Priority.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-HIGHEST:0
-VERY_HIGH:1
-HIGH_1:2
-HIGH_2:3
-HIGH_3:4
-NORMAL_1:5
-NORMAL_2:6
-NORMAL_3:7
-NORMAL_4:8
-NORMAL_5:9
-NORMAL_6:10
-LOW_1:11
-LOW_2:12
-LOW_3:13
-VERY_LOW:14
-LOWEST:15
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 47a8da92bda..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-BatchMessage.dat
deleted file mode 100644
index c1c43e8081b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-BatchReply.dat
deleted file mode 100644
index be3a9ba1913..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-BatchReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorMessage.dat
deleted file mode 100644
index 4ca8648e702..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorReply.dat
deleted file mode 100644
index e13917227d1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-CreateVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorMessage.dat
deleted file mode 100644
index f39b31217e6..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorReply.dat
deleted file mode 100644
index 1468f027b15..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DestroyVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentIgnoredReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentIgnoredReply.dat
deleted file mode 100644
index 15a7afe2a59..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentIgnoredReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListMessage.dat
deleted file mode 100644
index 2d8d12d2704..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListReply.dat
deleted file mode 100644
index c8a1cd888f0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentSummaryReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentSummaryReply.dat
deleted file mode 100644
index 16b1e4bc4ef..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-DocumentSummaryReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsMessage.dat
deleted file mode 100644
index b9df278fd7a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsReply.dat
deleted file mode 100644
index 05510dd8c1e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-EmptyBucketsReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedMessage.dat
deleted file mode 100644
index 6f33a4a0bfb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedReply.dat
deleted file mode 100644
index 6927b7726ec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-EndOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage0.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage0.dat
deleted file mode 100644
index 7ebf108a292..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage0.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage1.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage1.dat
deleted file mode 100644
index 36a2cfd91c3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage1.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage2.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage2.dat
deleted file mode 100644
index 10514e98c37..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage2.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage3.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage3.dat
deleted file mode 100644
index 75135b8bb30..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage3.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage4.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage4.dat
deleted file mode 100644
index 5040584a275..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectMessage4.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectReply.dat
deleted file mode 100644
index 79c263cb2dc..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GarbageCollectReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListMessage.dat
deleted file mode 100644
index fa3de45ac5b..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListReply.dat
deleted file mode 100644
index 830994ed785..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketListReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateMessage.dat
deleted file mode 100644
index aa2d206ca3a..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateReply.dat
deleted file mode 100644
index 0f91e3759f8..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetBucketStateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentMessage.dat
deleted file mode 100644
index 3df64ed657f..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentReply.dat
deleted file mode 100644
index c1ad7920a2e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-GetDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorMessage.dat
deleted file mode 100644
index 1a8a837ea16..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorReply.dat
deleted file mode 100644
index 541cd718a66..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-MapVisitorReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationMessage.dat
deleted file mode 100644
index 6efc54a6d09..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationReply.dat
deleted file mode 100644
index 8ad31a95bd5..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-MultiOperationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentMessage.dat
deleted file mode 100644
index 13c25f0b729..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentReply.dat
deleted file mode 100644
index 480544045bb..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-PutDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-QueryResultReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-QueryResultReply.dat
deleted file mode 100644
index 003f35d63a7..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-QueryResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentMessage.dat
deleted file mode 100644
index 21f2c9b81c4..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentReply.dat
deleted file mode 100644
index bf5db8761e2..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessage.dat
deleted file mode 100644
index 16850a6aff3..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageGroup.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageGroup.dat
deleted file mode 100644
index 9d7901a8b6e..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageGroup.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageUser.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageUser.dat
deleted file mode 100644
index c2a63cb94c0..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationMessageUser.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationReply.dat
deleted file mode 100644
index 752c4dba399..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-RemoveLocationReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-SearchResultReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-SearchResultReply.dat
deleted file mode 100644
index cce9c6f8d14..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-SearchResultReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedMessage.dat
deleted file mode 100644
index 3c51c3c7eec..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedReply.dat
deleted file mode 100644
index ff881679155..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-StartOfFeedReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketMessage.dat
deleted file mode 100644
index 1fc2b1cf3c1..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketReply.dat
deleted file mode 100644
index 0b98e240018..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-StatBucketReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentMessage.dat
deleted file mode 100644
index 93274279f0d..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentReply.dat
deleted file mode 100644
index c7151299366..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-UpdateDocumentReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoMessage.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoMessage.dat
deleted file mode 100644
index 80b44e0c6fd..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoReply.dat
deleted file mode 100644
index 57a656c9b2d..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-VisitorInfoReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5.93.30-java-WrongDistributionReply.dat b/documentapi/test/crosslanguagefiles/5.93.30-java-WrongDistributionReply.dat
deleted file mode 100644
index 0dbe13225ae..00000000000
--- a/documentapi/test/crosslanguagefiles/5.93.30-java-WrongDistributionReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/6.221-cpp-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-1.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-1.dat
index 0107dd5f350..0107dd5f350 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-1.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-1.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-2.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-2.dat
index 57187093f28..57187093f28 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-2.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-2.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-3.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-3.dat
index 6a516d38d17..6a516d38d17 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-DocumentSummaryMessage-3.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-DocumentSummaryMessage-3.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-1.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-1.dat
index dbf830c9365..dbf830c9365 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-1.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-1.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-2.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-2.dat
index 094143cf78d..094143cf78d 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-2.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-2.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-3.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-3.dat
index 3341d74052b..3341d74052b 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-3.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-3.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-4.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-4.dat
index 8aaaefff491..8aaaefff491 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-4.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-4.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-5.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-5.dat
index e66ed1f07d4..e66ed1f07d4 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-QueryResultMessage-5.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-QueryResultMessage-5.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-1.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-1.dat
index 988f9fdab1f..988f9fdab1f 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-1.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-1.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-2.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-2.dat
index ac277d09643..ac277d09643 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-2.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-2.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-3.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-3.dat
index 03b49c8a0ac..03b49c8a0ac 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-3.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-3.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-4.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-4.dat
index d52e574ea44..d52e574ea44 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-4.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-4.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-5.dat b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-5.dat
index e68654e9941..e68654e9941 100644
--- a/documentapi/test/crosslanguagefiles/5-cpp-SearchResultMessage-5.dat
+++ b/documentapi/test/crosslanguagefiles/6.221-cpp-SearchResultMessage-5.dat
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateMessage.dat b/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateMessage.dat
deleted file mode 100644
index 95e663088c3..00000000000
--- a/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateMessage.dat
+++ /dev/null
Binary files differ
diff --git a/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateReply.dat b/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateReply.dat
deleted file mode 100644
index 216db17f80e..00000000000
--- a/documentapi/test/crosslanguagefiles/6.221-java-BatchDocumentUpdateReply.dat
+++ /dev/null
Binary files differ
diff --git a/fnet/src/tests/frt/rpc/CMakeLists.txt b/fnet/src/tests/frt/rpc/CMakeLists.txt
index 2bacd37686a..6aa2e073e4e 100644
--- a/fnet/src/tests/frt/rpc/CMakeLists.txt
+++ b/fnet/src/tests/frt/rpc/CMakeLists.txt
@@ -8,6 +8,8 @@ vespa_add_executable(fnet_invoke_test_app TEST
vespa_add_test(NAME fnet_invoke_test_app COMMAND fnet_invoke_test_app)
vespa_add_test(NAME fnet_invoke_test_app_xor COMMAND fnet_invoke_test_app ENVIRONMENT "CRYPTOENGINE=xor")
vespa_add_test(NAME fnet_invoke_test_app_tls COMMAND fnet_invoke_test_app ENVIRONMENT "CRYPTOENGINE=tls")
+vespa_add_test(NAME fnet_invoke_test_app_tls_maybe_yes COMMAND fnet_invoke_test_app ENVIRONMENT "CRYPTOENGINE=tls_maybe_yes")
+vespa_add_test(NAME fnet_invoke_test_app_tls_maybe_no COMMAND fnet_invoke_test_app ENVIRONMENT "CRYPTOENGINE=tls_maybe_no")
vespa_add_executable(fnet_detach_return_invoke_test_app TEST
SOURCES
detach_return_invoke.cpp
@@ -24,6 +26,8 @@ vespa_add_executable(fnet_session_test_app TEST
vespa_add_test(NAME fnet_session_test_app COMMAND fnet_session_test_app)
vespa_add_test(NAME fnet_session_test_app_xor COMMAND fnet_session_test_app ENVIRONMENT "CRYPTOENGINE=xor")
vespa_add_test(NAME fnet_session_test_app_tls COMMAND fnet_session_test_app ENVIRONMENT "CRYPTOENGINE=tls")
+vespa_add_test(NAME fnet_session_test_app_tls_maybe_yes COMMAND fnet_session_test_app ENVIRONMENT "CRYPTOENGINE=tls_maybe_yes")
+vespa_add_test(NAME fnet_session_test_app_tls_maybe_no COMMAND fnet_session_test_app ENVIRONMENT "CRYPTOENGINE=tls_maybe_no")
vespa_add_executable(fnet_sharedblob_test_app TEST
SOURCES
sharedblob.cpp
diff --git a/fnet/src/tests/frt/rpc/invoke.cpp b/fnet/src/tests/frt/rpc/invoke.cpp
index e3bd662214f..dd08f365d58 100644
--- a/fnet/src/tests/frt/rpc/invoke.cpp
+++ b/fnet/src/tests/frt/rpc/invoke.cpp
@@ -1,100 +1,92 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/vespalib/net/socket_spec.h>
+#include <vespa/vespalib/util/benchmark_timer.h>
#include <vespa/fnet/frt/frt.h>
#include <mutex>
#include <condition_variable>
-//-------------------------------------------------------------
+using vespalib::SocketSpec;
+using vespalib::BenchmarkTimer;
-#include "my_crypto_engine.hpp"
-vespalib::CryptoEngine::SP crypto;
+constexpr double timeout = 60.0;
+constexpr double short_timeout = 0.1;
//-------------------------------------------------------------
-std::mutex _delayedReturnCntLock;
-uint32_t _delayedReturnCnt = 0;
-
-uint32_t _phase_simple_cnt = 0;
-uint32_t _phase_void_cnt = 0;
-uint32_t _phase_speed_cnt = 0;
-uint32_t _phase_advanced_cnt = 0;
-uint32_t _phase_error_cnt = 0;
-uint32_t _phase_timeout_cnt = 0;
-uint32_t _phase_abort_cnt = 0;
-uint32_t _phase_echo_cnt = 0;
+#include "my_crypto_engine.hpp"
+vespalib::CryptoEngine::SP crypto;
//-------------------------------------------------------------
-struct LockedReqWait : public FRT_IRequestWait
-{
- std::mutex _condLock; // cond used to signal req done
- std::condition_variable _cond; // cond used to signal req done
- bool _done; // flag indicating req done
-
- std::mutex _lockLock; // lock protecting virtual lock
- bool _lock; // virtual lock
- bool _wasLocked; // was 'locked' when req done
-
- LockedReqWait() : _cond(), _done(false), _lockLock(), _lock(false), _wasLocked(false) {}
- ~LockedReqWait() {}
-
- void lock() {
- std::lock_guard<std::mutex> guard(_lockLock);
- _lock = true;
- }
-
- void unlock() {
- std::lock_guard<std::mutex> guard(_lockLock);
- _lock = false;
- }
-
- bool isLocked() {
- std::lock_guard<std::mutex> guard(_lockLock);
- return _lock;
+class RequestLatch : public FRT_IRequestWait {
+private:
+ FRT_RPCRequest *_req;
+ std::mutex _lock;
+ std::condition_variable _cond;
+public:
+ RequestLatch() : _req(nullptr), _lock(), _cond() {}
+ ~RequestLatch() { ASSERT_TRUE(_req == nullptr); }
+ bool has_req() {
+ std::lock_guard guard(_lock);
+ return (_req != nullptr);
}
-
- void RequestDone(FRT_RPCRequest *) override {
- _wasLocked = isLocked();
- std::lock_guard<std::mutex> guard(_condLock);
- _done = true;
- _cond.notify_one();
+ FRT_RPCRequest *read() {
+ std::unique_lock guard(_lock);
+ _cond.wait(guard, [&req = _req]{ return (req != nullptr); });
+ auto ret = _req;
+ _req = nullptr;
+ _cond.notify_all();
+ return ret;
}
-
- void waitReq() {
- std::unique_lock<std::mutex> guard(_condLock);
- while(!_done) {
- _cond.wait(guard);
- }
+ void write(FRT_RPCRequest *req) {
+ std::unique_lock guard(_lock);
+ _cond.wait(guard, [&req = _req]{ return (req == nullptr); });
+ _req = req;
+ _cond.notify_all();
}
+ void RequestDone(FRT_RPCRequest *req) override { write(req); }
};
//-------------------------------------------------------------
-class DelayedReturn : public FNET_Task
-{
+class MyReq {
private:
FRT_RPCRequest *_req;
-
- DelayedReturn(const DelayedReturn &);
- DelayedReturn &operator=(const DelayedReturn &);
-
public:
- DelayedReturn(FNET_Scheduler *sched, FRT_RPCRequest *req, double delay)
- : FNET_Task(sched),
- _req(req)
+ MyReq(FRT_RPCRequest *req) : _req(req) {}
+ MyReq(const char *method_name)
+ : _req(new FRT_RPCRequest())
{
- {
- std::lock_guard<std::mutex> guard(_delayedReturnCntLock);
- _delayedReturnCnt++;
- }
- Schedule(delay);
+ _req->SetMethodName(method_name);
}
-
- void PerformTask() override
+ MyReq(uint32_t value, bool async, uint32_t error, uint8_t extra)
+ : _req(new FRT_RPCRequest())
{
- _req->Return();
- std::lock_guard<std::mutex> guard(_delayedReturnCntLock);
- _delayedReturnCnt--;
+ _req->SetMethodName("test");
+ _req->GetParams()->AddInt32(value);
+ _req->GetParams()->AddInt32(error);
+ _req->GetParams()->AddInt8(extra);
+ _req->GetParams()->AddInt8((async) ? 1 : 0);
+ }
+ ~MyReq() {
+ if (_req != nullptr) {
+ _req->SubRef();
+ }
+ }
+ MyReq(const MyReq &rhs) = delete;
+ MyReq &operator=(const MyReq &rhs) = delete;
+ FRT_RPCRequest &get() { return *_req; }
+ FRT_RPCRequest *borrow() { return _req; }
+ FRT_RPCRequest *steal() {
+ auto ret = _req;
+ _req = nullptr;
+ return ret;
+ }
+ uint32_t get_int_ret() {
+ ASSERT_TRUE(_req != nullptr);
+ ASSERT_TRUE(_req->CheckReturnTypes("i"));
+ return _req->GetReturn()->GetValue(0)._intval32;
}
};
@@ -103,31 +95,22 @@ public:
class EchoTest : public FRT_Invokable
{
private:
- vespalib::Stash *_echo_stash;
- FRT_Values *_echo_args;
+ vespalib::Stash _echo_stash;
+ FRT_Values _echo_args;
EchoTest(const EchoTest &);
EchoTest &operator=(const EchoTest &);
public:
- EchoTest() : _echo_stash(nullptr), _echo_args(nullptr) {}
- ~EchoTest()
+ EchoTest(FRT_Supervisor *supervisor)
+ : _echo_stash(),
+ _echo_args(_echo_stash)
{
- delete _echo_args;
- delete _echo_stash;
- }
-
- void Init(FRT_Supervisor *supervisor)
- {
- _echo_stash = new vespalib::Stash();
- _echo_args = new FRT_Values(*_echo_stash);
- assert(_echo_stash != nullptr && _echo_args != nullptr);
-
FRT_ReflectionBuilder rb(supervisor);
rb.DefineMethod("echo", "*", "*",
FRT_METHOD(EchoTest::RPC_Echo), this);
- FRT_Values *args = _echo_args;
+ FRT_Values *args = &_echo_args;
args->EnsureFree(16);
args->AddInt8(8);
@@ -179,15 +162,14 @@ public:
args->SetData(&pt_data[2], "dat3", 4);
}
- bool PrepareEchoReq(FRT_RPCRequest *req)
+ bool prepare_params(FRT_RPCRequest &req)
{
FNET_DataBuffer buf;
- req->SetMethodName("echo");
- _echo_args->EncodeCopy(&buf);
- req->GetParams()->DecodeCopy(&buf, buf.GetDataLen());
- return (req->GetParams()->Equals(_echo_args) &&
- _echo_args->Equals(req->GetParams()));
+ _echo_args.EncodeCopy(&buf);
+ req.GetParams()->DecodeCopy(&buf, buf.GetDataLen());
+ return (req.GetParams()->Equals(&_echo_args) &&
+ _echo_args.Equals(req.GetParams()));
}
void RPC_Echo(FRT_RPCRequest *req)
@@ -196,7 +178,7 @@ public:
req->GetParams()->EncodeCopy(&buf);
req->GetReturn()->DecodeCopy(&buf, buf.GetDataLen());
- if (!req->GetReturn()->Equals(_echo_args) ||
+ if (!req->GetReturn()->Equals(&_echo_args) ||
!req->GetReturn()->Equals(req->GetParams()))
{
req->SetError(10000, "Streaming error");
@@ -209,19 +191,16 @@ public:
class TestRPC : public FRT_Invokable
{
private:
- FRT_Supervisor *_supervisor;
- FNET_Scheduler *_scheduler;
uint32_t _intValue;
+ RequestLatch _detached_req;
TestRPC(const TestRPC &);
TestRPC &operator=(const TestRPC &);
public:
- TestRPC(FRT_Supervisor *supervisor, // server supervisor
- FNET_Scheduler *scheduler) // client scheduler
- : _supervisor(supervisor),
- _scheduler(scheduler),
- _intValue(0)
+ TestRPC(FRT_Supervisor *supervisor)
+ : _intValue(0),
+ _detached_req()
{
FRT_ReflectionBuilder rb(supervisor);
@@ -233,7 +212,7 @@ public:
FRT_METHOD(TestRPC::RPC_IncValue), this);
rb.DefineMethod("getValue", "", "i",
FRT_METHOD(TestRPC::RPC_GetValue), this);
- rb.DefineMethod("testFast", "iiibb", "i",
+ rb.DefineMethod("test", "iibb", "i",
FRT_METHOD(TestRPC::RPC_Test), this);
}
@@ -241,10 +220,9 @@ public:
{
FRT_Values &param = *req->GetParams();
uint32_t value = param[0]._intval32;
- uint32_t delay = param[1]._intval32;
- uint32_t error = param[2]._intval32;
- uint8_t extra = param[3]._intval8;
- uint8_t async = param[4]._intval8;
+ uint32_t error = param[1]._intval32;
+ uint8_t extra = param[2]._intval8;
+ uint8_t async = param[3]._intval8;
req->GetReturn()->AddInt32(value);
if (extra != 0) {
@@ -254,49 +232,7 @@ public:
req->SetError(error);
}
if (async != 0) {
- req->Detach();
- if (delay == 0) {
- req->Return();
- } else {
- req->getStash().create<DelayedReturn>(_scheduler, req, ((double)delay) / 1000.0);
- }
- } else {
-
- if (delay > 0) {
-
- const char *suffix = "testFast";
- uint32_t suffix_len = strlen(suffix);
- uint32_t name_len = req->GetMethodNameLen();
- bool remote = req->GetContext()._value.VOIDP != nullptr;
- bool instant = name_len > suffix_len &&
- strcmp(req->GetMethodName() + name_len - suffix_len, suffix) == 0;
-
- if (remote && instant) {
-
- // block, but don't cripple server scheduler...
- // (NB: in 'real life', instant methods should never block)
-
- FastOS_TimeInterface *now = _supervisor->GetTransport()->GetTimeSampler();
- FNET_Scheduler *scheduler = _supervisor->GetScheduler();
- assert(scheduler->GetTimeSampler() == now);
-
- while (delay > 0) {
- if (delay > 20) {
- FastOS_Thread::Sleep(20);
- delay -= 20;
- } else {
- FastOS_Thread::Sleep(delay);
- delay = 0;
- }
- now->SetNow();
- scheduler->CheckTasks();
- }
-
- } else {
-
- FastOS_Thread::Sleep(delay);
- }
- }
+ _detached_req.write(req->Detach());
}
}
@@ -320,607 +256,188 @@ public:
{
req->GetReturn()->AddInt32(_intValue);
}
-};
-//-------------------------------------------------------------
-
-enum {
- OK_RET = 0,
- BOGUS_RET = 1
-};
-
-enum {
- PHASE_NULL = 0,
- PHASE_SETUP,
- PHASE_SIMPLE,
- PHASE_VOID,
- PHASE_SPEED,
- PHASE_ADVANCED,
- PHASE_ERROR,
- PHASE_TIMEOUT,
- PHASE_ABORT,
- PHASE_ECHO,
- PHASE_SHUTDOWN,
- PHASE_ZZZ
-};
-
-const char phase_names[PHASE_ZZZ][32] =
-{
- "nullptr",
- "SETUP",
- "SIMPLE",
- "VOID",
- "SPEED",
- "ADVANCED",
- "ERROR",
- "TIMEOUT",
- "ABORT",
- "ECHO",
- "SHUTDOWN"
-};
-
-enum {
- TIMING_NULL = 0,
- TIMING_INSTANT,
- TIMING_ZZZ
-};
-
-const char timing_names[TIMING_ZZZ][32] =
-{
- "nullptr",
- "INSTANT",
-};
-
-enum {
- HANDLING_NULL = 0,
- HANDLING_SYNC,
- HANDLING_ASYNC,
- HANDLING_ZZZ
-};
-
-const char handling_names[HANDLING_ZZZ][32] =
-{
- "nullptr",
- "SYNC",
- "ASYNC"
+ RequestLatch &detached_req() { return _detached_req; }
};
//-------------------------------------------------------------
-struct State {
+class Fixture
+{
+private:
FRT_Supervisor _client;
FRT_Supervisor _server;
- TestRPC _rpc;
- EchoTest _echo;
- std::string _peerSpec;
- uint32_t _testPhase;
- uint32_t _timing;
- uint32_t _handling;
- double _timeout;
+ vespalib::string _peerSpec;
FRT_Target *_target;
- FRT_RPCRequest *_req;
+ TestRPC _testRPC;
+ EchoTest _echoTest;
+
+public:
+ FRT_Target &target() { return *_target; }
+ FRT_Target *make_bad_target() { return _client.GetTarget("bogus address"); }
+ RequestLatch &detached_req() { return _testRPC.detached_req(); }
+ EchoTest &echo() { return _echoTest; }
- State()
+ Fixture()
: _client(crypto),
_server(crypto),
- _rpc(&_server, _client.GetScheduler()),
- _echo(),
_peerSpec(),
- _testPhase(PHASE_NULL),
- _timing(TIMING_NULL),
- _handling(HANDLING_NULL),
- _timeout(5.0),
_target(nullptr),
- _req(nullptr)
+ _testRPC(&_server),
+ _echoTest(&_server)
{
_client.GetTransport()->SetTCPNoDelay(true);
_server.GetTransport()->SetTCPNoDelay(true);
- _echo.Init(&_server);
+ ASSERT_TRUE(_server.Listen("tcp/0"));
+ ASSERT_TRUE(_server.Start());
+ ASSERT_TRUE(_client.Start());
+ _peerSpec = SocketSpec::from_host_port("localhost", _server.GetListenPort()).spec();
+ _target = _client.GetTarget(_peerSpec.c_str());
+ //---------------------------------------------------------------------
+ MyReq req("frt.rpc.ping");
+ target().InvokeSync(req.borrow(), timeout);
+ ASSERT_TRUE(!req.get().IsError());
}
- void SetTimeout(double timeout)
- {
- _timeout = timeout;
+ ~Fixture() {
+ _client.ShutDown(true);
+ _server.ShutDown(true);
+ _target->SubRef();
}
+};
- void NewReq()
- {
- if (_req != nullptr) {
- _req->SubRef();
- }
- _req = new FRT_RPCRequest();
- }
+//-------------------------------------------------------------
- void FreeReq()
+TEST_F("require that simple invocation works", Fixture()) {
+ MyReq req("inc");
+ req.get().GetParams()->AddInt32(502);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get_int_ret(), 503u);
+}
+
+TEST_F("require that void invocation works", Fixture()) {
{
- if (_req != nullptr) {
- _req->SubRef();
- }
- _req = nullptr;
+ MyReq req("setValue");
+ req.get().GetParams()->AddInt32(40);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_TRUE(req.get().CheckReturnTypes(""));
}
-
- void LostReq()
{
- _req = nullptr;
+ MyReq req("incValue");
+ f1.target().InvokeVoid(req.steal());
}
-
- void PrepareTestMethod()
{
- NewReq();
- if (_timing != TIMING_INSTANT) {
- ASSERT_TRUE(false); // consult your dealer...
- }
- _req->SetMethodName("testFast");
+ MyReq req("incValue");
+ f1.target().InvokeVoid(req.steal());
}
-
- void SetTestParams(uint32_t value, uint32_t delay,
- uint32_t error = FRTE_NO_ERROR,
- uint8_t extra = 0)
{
- _req->GetParams()->AddInt32(value);
- _req->GetParams()->AddInt32(delay);
- _req->GetParams()->AddInt32(error);
- _req->GetParams()->AddInt8(extra);
- bool async = (_handling == HANDLING_ASYNC);
- if (_handling != HANDLING_SYNC &&
- _handling != HANDLING_ASYNC)
- {
- ASSERT_TRUE(false); // consult your dealer...
- }
- _req->GetParams()->AddInt8((async) ? 1 : 0);
+ MyReq req("getValue");
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get_int_ret(), 42u);
}
-
- void InvokeSync();
- void InvokeVoid();
- void InvokeAsync(FRT_IRequestWait *w);
- void InvokeTest(uint32_t value,
- uint32_t delay = 0,
- uint32_t error = FRTE_NO_ERROR,
- uint8_t extra = 0);
- void InvokeTestAndAbort(uint32_t value,
- uint32_t delay = 0,
- uint32_t error = FRTE_NO_ERROR,
- uint8_t extra = 0);
- bool WaitForDelayedReturnCount(uint32_t wantedCount, double timeout);
-
-private:
- State(const State &);
- State &operator=(const State &);
-};
-
-
-void
-State::InvokeSync()
-{
- _target->InvokeSync(_req, _timeout);
-}
-
-
-void
-State::InvokeVoid()
-{
- _target->InvokeVoid(_req);
-}
-
-
-void
-State::InvokeAsync(FRT_IRequestWait *w)
-{
- _target->InvokeAsync(_req, _timeout, w);
-}
-
-
-void
-State::InvokeTest(uint32_t value, uint32_t delay,
- uint32_t error, uint8_t extra)
-{
- PrepareTestMethod();
- SetTestParams(value, delay, error, extra);
- InvokeSync();
-}
-
-
-void
-State::InvokeTestAndAbort(uint32_t value, uint32_t delay,
- uint32_t error, uint8_t extra)
-{
- PrepareTestMethod();
- SetTestParams(value, delay, error, extra);
- FRT_SingleReqWait w;
- InvokeAsync(&w);
- _req->Abort();
- w.WaitReq();
}
-bool
-State::WaitForDelayedReturnCount(uint32_t wantedCount, double timeout)
-{
- FastOS_Time timer;
- timer.SetNow();
- for (;;) {
- uint32_t delayedReturnCnt;
+TEST_F("measure minimal invocation latency", Fixture()) {
+ size_t cnt = 0;
+ uint32_t val = 0;
+ BenchmarkTimer timer(1.0);
+ while (timer.has_budget()) {
+ timer.before();
{
- std::lock_guard<std::mutex> guard(_delayedReturnCntLock);
- delayedReturnCnt = _delayedReturnCnt;
- }
- if (delayedReturnCnt == wantedCount) {
- return true;
- }
- if ((timer.MilliSecsToNow() / 1000.0) > timeout) {
- return false;
+ MyReq req("inc");
+ req.get().GetParams()->AddInt32(val);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ ASSERT_TRUE(!req.get().IsError());
+ val = req.get_int_ret();
+ ++cnt;
}
- FastOS_Thread::Sleep(10);
+ timer.after();
}
+ EXPECT_EQUAL(cnt, val);
+ double t = timer.min_time();
+ fprintf(stderr, "latency of invocation: %1.3f ms\n", t * 1000.0);
}
-//-------------------------------------------------------------
-
-bool CheckTypes(FRT_RPCRequest *req, const char *spec) {
- return FRT_Values::CheckTypes(spec, req->GetReturnSpec());
-}
-
-FRT_Value &Get(FRT_RPCRequest *req, uint32_t idx) {
- return req->GetReturn()->GetValue(idx);
-}
-
-//-------------------------------------------------------------
-
-void TestSetup(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_SETUP);
-
- bool listenOK = _state->_server.Listen("tcp/0");
-
- char spec[64];
- sprintf(spec, "tcp/localhost:%d", _state->_server.GetListenPort());
- _state->_peerSpec = spec;
-
- bool serverStartOK = _state->_server.Start();
- bool clientStartOK = _state->_client.Start();
-
- ASSERT_TRUE(listenOK);
- ASSERT_TRUE(serverStartOK);
- ASSERT_TRUE(clientStartOK);
-
- _state->_target = _state->_client.GetTarget(_state->_peerSpec.c_str());
- _state->NewReq();
- _state->_req->SetMethodName("frt.rpc.ping");
- _state->_target->InvokeSync(_state->_req, 5.0);
- ASSERT_TRUE(!_state->_req->IsError());
-}
-
-
-void TestSimple(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_SIMPLE);
- _phase_simple_cnt++;
- _state->NewReq();
- _state->_req->SetMethodName("inc");
- _state->_req->GetParams()->AddInt32(502);
- _state->InvokeSync();
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, "i") &&
- Get(_state->_req, 0)._intval32 == 503);
+TEST_F("require that abort has no effect on a completed request", Fixture()) {
+ MyReq req(42, false, FRTE_NO_ERROR, 0);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get_int_ret(), 42u);
+ req.get().Abort();
+ EXPECT_EQUAL(req.get_int_ret(), 42u);
}
-
-void TestVoid(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_VOID);
- _phase_void_cnt++;
-
- _state->NewReq();
- _state->_req->SetMethodName("setValue");
- _state->_req->GetParams()->AddInt32(40);
- _state->InvokeSync();
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, ""));
-
- _state->NewReq();
- _state->_req->SetMethodName("incValue");
- _state->InvokeVoid();
- _state->LostReq();
-
- _state->NewReq();
- _state->_req->SetMethodName("incValue");
- _state->InvokeVoid();
- _state->LostReq();
-
- _state->NewReq();
- _state->_req->SetMethodName("getValue");
- _state->InvokeSync();
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, "i") &&
- Get(_state->_req, 0)._intval32 == 42);
+TEST_F("require that a request can be responded to at a later time", Fixture()) {
+ RequestLatch result;
+ MyReq req(42, true, FRTE_NO_ERROR, 0);
+ f1.target().InvokeAsync(req.steal(), timeout, &result);
+ EXPECT_TRUE(!result.has_req());
+ f1.detached_req().read()->Return();
+ MyReq ret(result.read());
+ EXPECT_EQUAL(ret.get_int_ret(), 42u);
}
-
-void TestSpeed(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_SPEED);
- _phase_speed_cnt++;
-
- FastOS_Time start;
- FastOS_Time stop;
- uint32_t val = 0;
- uint32_t cnt = 0;
-
- _state->NewReq();
- FRT_RPCRequest *req = _state->_req;
- FRT_Target *target = _state->_target;
-
- // calibrate cnt to be used
- start.SetNow();
- for (cnt = 0; cnt < 1000000; cnt++) {
- req->SetMethodName("inc");
- req->GetParams()->AddInt32(0);
- target->InvokeSync(req, 5.0);
- if (req->IsError()) {
- break;
- }
- req->Reset(); // ok if no error
- if (start.MilliSecsToNow() > 20.0) {
- break;
- }
- }
- cnt = (cnt == 0) ? 1 : cnt * 10;
-
- fprintf(stderr, "checking invocation latency... (cnt = %d)\n", cnt);
-
- _state->NewReq();
- req = _state->_req;
-
- // actual benchmark
- start.SetNow();
- for (uint32_t i = 0; i < cnt; i++) {
- req->SetMethodName("inc");
- req->GetParams()->AddInt32(val);
- target->InvokeSync(req, 60.0);
- if (req->IsError()) {
- fprintf(stderr, "... rpc error(%d): %s\n",
- req->GetErrorCode(),
- req->GetErrorMessage());
- break;
- }
- val = req->GetReturn()->GetValue(0)._intval32;
- req->Reset(); // ok if no error
+TEST_F("require that a bad target gives connection error", Fixture()) {
+ MyReq req("frt.rpc.ping");
+ {
+ FRT_Target *bad_target = f1.make_bad_target();
+ bad_target->InvokeSync(req.borrow(), timeout);
+ bad_target->SubRef();
}
- stop.SetNow();
- stop -= start;
- double latency = stop.MilliSecs() / (double) cnt;
-
- EXPECT_EQUAL(val, cnt);
- fprintf(stderr, "latency of invocation: %1.3f ms\n", latency);
+ EXPECT_EQUAL(req.get().GetErrorCode(), FRTE_RPC_CONNECTION);
}
-
-void TestAdvanced(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_ADVANCED);
- _phase_advanced_cnt++;
-
- // Test invocation
- //----------------
- _state->InvokeTest(42);
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, "i") &&
- Get(_state->_req, 0)._intval32 == 42);
-
- // Abort has no effect after request is done
- //------------------------------------------
- _state->_req->Abort();
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, "i") &&
- Get(_state->_req, 0)._intval32 == 42);
-
- // Test invocation with delay
- //---------------------------
- _state->InvokeTest(58, 100);
- EXPECT_TRUE(!_state->_req->IsError() &&
- CheckTypes(_state->_req, "i") &&
- Get(_state->_req, 0)._intval32 == 58);
+TEST_F("require that non-existing method gives appropriate error", Fixture()) {
+ MyReq req("bogus");
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get().GetErrorCode(), FRTE_RPC_NO_SUCH_METHOD);
}
-
-void TestError(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_ERROR);
- _phase_error_cnt++;
-
- // bad target -> sync error -> avoid deadlock
- //-------------------------------------------
- if (_state->_handling == HANDLING_ASYNC)
- {
- // stash away valid target
- FRT_Target *stateTarget = _state->_target; // backup of valid target
-
- _state->_target = _state->_client.GetTarget("bogus address");
- _state->NewReq();
- _state->_req->SetMethodName("frt.rpc.ping");
- LockedReqWait lw;
- lw.lock();
- _state->InvokeAsync(&lw);
- lw.unlock();
- lw.waitReq();
- EXPECT_TRUE(!lw._wasLocked);
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_CONNECTION);
-
- // restore valid target
- _state->_target->SubRef();
- _state->_target = stateTarget;
- }
-
- // no such method
- //---------------
- if (_state->_timing == TIMING_INSTANT &&
- _state->_handling == HANDLING_SYNC)
- {
- _state->NewReq();
- _state->_req->SetMethodName("bogus");
- _state->InvokeSync();
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_NO_SUCH_METHOD);
- }
-
- // wrong params
- //-------------
- if (_state->_handling == HANDLING_SYNC) {
-
- _state->PrepareTestMethod();
- _state->InvokeSync();
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_WRONG_PARAMS);
-
- _state->PrepareTestMethod();
- _state->_req->GetParams()->AddInt32(42);
- _state->_req->GetParams()->AddInt32(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->InvokeSync();
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_WRONG_PARAMS);
-
- _state->PrepareTestMethod();
- _state->_req->GetParams()->AddInt32(42);
- _state->_req->GetParams()->AddInt32(0);
- _state->_req->GetParams()->AddInt32(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->_req->GetParams()->AddInt8(0);
- _state->InvokeSync();
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_WRONG_PARAMS);
- }
-
- // wrong return
- //-------------
- _state->InvokeTest(42, 0, 0, BOGUS_RET);
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_WRONG_RETURN);
-
- // method failed
- //--------------
- _state->InvokeTest(42, 0, 5000, BOGUS_RET);
- EXPECT_TRUE(_state->_req->GetErrorCode() == 5000);
+TEST_F("require that wrong parameter types give appropriate error", Fixture()) {
+ MyReq req("setValue");
+ req.get().GetParams()->AddString("40");
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get().GetErrorCode(), FRTE_RPC_WRONG_PARAMS);
}
-
-void TestTimeout(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_TIMEOUT);
- _phase_timeout_cnt++;
-
- _state->SetTimeout(0.1);
-
- // Test timeout
- //-------------
- _state->InvokeTest(123, 5000);
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_TIMEOUT);
- FastOS_Thread::Sleep(5500); // settle
-
- _state->SetTimeout(5.0);
+TEST_F("require that wrong return value types give appropriate error", Fixture()) {
+ MyReq req(42, false, FRTE_NO_ERROR, 1);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get().GetErrorCode(), FRTE_RPC_WRONG_RETURN);
}
-
-void TestAbort(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_ABORT);
- _phase_abort_cnt++;
-
- // Test abort
- //-----------
- _state->InvokeTestAndAbort(456, 1000);
- EXPECT_TRUE(_state->_req->GetErrorCode() == FRTE_RPC_ABORT);
- FastOS_Thread::Sleep(1500); // settle
+TEST_F("require that the method itself can signal failure", Fixture()) {
+ MyReq req(42, false, 5000, 1);
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_EQUAL(req.get().GetErrorCode(), 5000u);
}
-
-void TestEcho(State *_state) {
- ASSERT_TRUE(_state->_testPhase == PHASE_ECHO);
- _phase_echo_cnt++;
-
- // Test echo
- //----------
- _state->NewReq();
- EXPECT_TRUE(_state->_echo.PrepareEchoReq(_state->_req));
- _state->InvokeSync();
- EXPECT_TRUE(!_state->_req->IsError());
- EXPECT_TRUE(_state->_req->GetReturn()->Equals(_state->_req->GetParams()));
+TEST_F("require that invocation can time out", Fixture()) {
+ RequestLatch result;
+ MyReq req(42, true, FRTE_NO_ERROR, 0);
+ f1.target().InvokeAsync(req.steal(), short_timeout, &result);
+ MyReq ret(result.read());
+ f1.detached_req().read()->Return();
+ EXPECT_EQUAL(ret.get().GetErrorCode(), FRTE_RPC_TIMEOUT);
}
+TEST_F("require that invocation can be aborted", Fixture()) {
+ RequestLatch result;
+ MyReq req(42, true, FRTE_NO_ERROR, 0);
+ FRT_RPCRequest *will_be_mine_again_soon = req.steal();
+ f1.target().InvokeAsync(will_be_mine_again_soon, timeout, &result);
+ will_be_mine_again_soon->Abort();
+ MyReq ret(result.read());
+ f1.detached_req().read()->Return();
+ EXPECT_EQUAL(ret.get().GetErrorCode(), FRTE_RPC_ABORT);
+}
-TEST_F("invoke test", State()) {
- State *_state = &f1;
-
- _state->_testPhase = PHASE_SETUP;
- TestSetup(_state);
-
- for (_state->_testPhase = PHASE_SIMPLE;
- _state->_testPhase < PHASE_SHUTDOWN;
- _state->_testPhase++) {
-
- {
- for (_state->_timing = TIMING_INSTANT;
- _state->_timing < TIMING_ZZZ;
- _state->_timing++) {
-
- for (_state->_handling = HANDLING_SYNC;
- _state->_handling < HANDLING_ZZZ;
- _state->_handling++) {
-
- switch (_state->_testPhase) {
- case PHASE_SIMPLE:
- if (_state->_timing == TIMING_INSTANT &&
- _state->_handling == HANDLING_SYNC)
- {
- TestSimple(_state);
- }
- break;
- case PHASE_VOID:
- if (_state->_timing == TIMING_INSTANT &&
- _state->_handling == HANDLING_SYNC)
- {
- TestVoid(_state);
- }
- break;
- case PHASE_SPEED:
- if (_state->_timing == TIMING_INSTANT &&
- _state->_handling == HANDLING_SYNC)
- {
- TestSpeed(_state);
- }
- break;
- case PHASE_ADVANCED:
- TestAdvanced(_state);
- break;
- case PHASE_ERROR:
- TestError(_state);
- break;
- case PHASE_TIMEOUT:
- TestTimeout(_state);
- break;
- case PHASE_ABORT:
- TestAbort(_state);
- break;
- case PHASE_ECHO:
- if (_state->_timing == TIMING_INSTANT &&
- _state->_handling == HANDLING_SYNC)
- {
- TestEcho(_state);
- }
- break;
- default:
- ASSERT_TRUE(false); // consult your dealer...
- }
- }
- }
- }
- }
- _state->_testPhase = PHASE_SHUTDOWN;
- _state->_timing = TIMING_NULL;
- _state->_handling = HANDLING_NULL;
- EXPECT_TRUE(_state->WaitForDelayedReturnCount(0, 120.0));
- _state->FreeReq();
- _state->_client.ShutDown(true);
- _state->_server.ShutDown(true);
- _state->_target->SubRef();
- _state->_target = nullptr;
- EXPECT_TRUE(_delayedReturnCnt == 0);
- EXPECT_TRUE(_phase_simple_cnt == 1);
- EXPECT_TRUE(_phase_void_cnt == 1);
- EXPECT_TRUE(_phase_speed_cnt == 1);
- EXPECT_TRUE(_phase_advanced_cnt == 2);
- EXPECT_TRUE(_phase_error_cnt == 2);
- EXPECT_TRUE(_phase_abort_cnt == 2);
- EXPECT_TRUE(_phase_echo_cnt == 1);
+TEST_F("require that parameters can be echoed as return values", Fixture()) {
+ MyReq req("echo");
+ ASSERT_TRUE(f1.echo().prepare_params(req.get()));
+ f1.target().InvokeSync(req.borrow(), timeout);
+ EXPECT_TRUE(!req.get().IsError());
+ EXPECT_TRUE(req.get().GetReturn()->Equals(req.get().GetParams()));
+ EXPECT_TRUE(req.get().GetParams()->Equals(req.get().GetReturn()));
}
TEST_MAIN() {
diff --git a/fnet/src/tests/frt/rpc/my_crypto_engine.hpp b/fnet/src/tests/frt/rpc/my_crypto_engine.hpp
index 6cd8d47e917..51811f4f70c 100644
--- a/fnet/src/tests/frt/rpc/my_crypto_engine.hpp
+++ b/fnet/src/tests/frt/rpc/my_crypto_engine.hpp
@@ -1,6 +1,8 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/net/crypto_engine.h>
#include <vespa/vespalib/net/tls/tls_crypto_engine.h>
+#include <vespa/vespalib/net/tls/maybe_tls_crypto_engine.h>
#include <vespa/vespalib/test/make_tls_options_for_testing.h>
vespalib::CryptoEngine::SP my_crypto_engine() {
@@ -16,6 +18,14 @@ vespalib::CryptoEngine::SP my_crypto_engine() {
} else if (engine == "tls") {
fprintf(stderr, "crypto engine: tls\n");
return std::make_shared<vespalib::TlsCryptoEngine>(vespalib::test::make_tls_options_for_testing());
+ } else if (engine == "tls_maybe_yes") {
+ fprintf(stderr, "crypto engine: tls client, mixed server\n");
+ auto tls = std::make_shared<vespalib::TlsCryptoEngine>(vespalib::test::make_tls_options_for_testing());
+ return std::make_shared<vespalib::MaybeTlsCryptoEngine>(std::move(tls), true);
+ } else if (engine == "tls_maybe_no") {
+ fprintf(stderr, "crypto engine: null client, mixed server\n");
+ auto tls = std::make_shared<vespalib::TlsCryptoEngine>(vespalib::test::make_tls_options_for_testing());
+ return std::make_shared<vespalib::MaybeTlsCryptoEngine>(std::move(tls), false);
}
TEST_FATAL(("invalid crypto engine: " + engine).c_str());
abort();
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
index 252f6c5bd12..43ccd6d48a8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleAdapterFactory.java
@@ -48,23 +48,31 @@ public class SimpleAdapterFactory implements AdapterFactory {
DocumentId docId = upd.getId();
Document complete = new Document(docType, upd.getId());
for (FieldPathUpdate fieldUpd : upd) {
- if (FieldPathUpdateHelper.isComplete(fieldUpd)) {
- // A 'complete' field path update is basically a regular top-level field update
- // in wolf's clothing. Convert it to a regular field update to be friendlier
- // towards the search core backend.
- FieldPathUpdateHelper.applyUpdate(fieldUpd, complete);
- } else {
- ret.add(new IdentityFieldPathUpdateAdapter(fieldUpd, newDocumentAdapter(complete, true)));
+ try {
+ if (FieldPathUpdateHelper.isComplete(fieldUpd)) {
+ // A 'complete' field path update is basically a regular top-level field update
+ // in wolf's clothing. Convert it to a regular field update to be friendlier
+ // towards the search core backend.
+ FieldPathUpdateHelper.applyUpdate(fieldUpd, complete);
+ } else {
+ ret.add(new IdentityFieldPathUpdateAdapter(fieldUpd, newDocumentAdapter(complete, true)));
+ }
+ } catch (NullPointerException e) {
+ throw new IllegalArgumentException("Exception during handling of update '" + fieldUpd + "' to field '" + fieldUpd.getFieldPath() + "'", e);
}
}
for (FieldUpdate fieldUpd : upd.getFieldUpdates()) {
Field field = fieldUpd.getField();
for (ValueUpdate valueUpd : fieldUpd.getValueUpdates()) {
- if (FieldUpdateHelper.isComplete(field, valueUpd)) {
- FieldUpdateHelper.applyUpdate(field, valueUpd, complete);
- } else {
- Document partial = FieldUpdateHelper.newPartialDocument(docType, docId, field, valueUpd);
- ret.add(FieldUpdateAdapter.fromPartialUpdate(expressionSelector.selectExpression(docType, field.getName()),newDocumentAdapter(partial, true), valueUpd));
+ try {
+ if (FieldUpdateHelper.isComplete(field, valueUpd)) {
+ FieldUpdateHelper.applyUpdate(field, valueUpd, complete);
+ } else {
+ Document partial = FieldUpdateHelper.newPartialDocument(docType, docId, field, valueUpd);
+ ret.add(FieldUpdateAdapter.fromPartialUpdate(expressionSelector.selectExpression(docType, field.getName()), newDocumentAdapter(partial, true), valueUpd));
+ }
+ } catch (NullPointerException e) {
+ throw new IllegalArgumentException("Exception during handling of update '" + valueUpd + "' to field '" + field + "'", e);
}
}
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
index 483139f746a..30d4ff37587 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
@@ -32,7 +32,8 @@ public class GetFieldExpression extends Expression {
StructuredFieldValue struct = (StructuredFieldValue)input;
Field field = struct.getField(fieldName);
if (field == null) {
- throw new IllegalArgumentException("Field '" + fieldName + "' not found.");
+ throw new IllegalArgumentException("Field '" + fieldName + "' not found in struct type '" +
+ struct.getDataType().getName() + "'");
}
ctx.setValue(struct.getFieldValue(field));
}
@@ -45,7 +46,8 @@ public class GetFieldExpression extends Expression {
}
Field field = ((StructuredDataType)input).getField(fieldName);
if (field == null) {
- throw new VerificationException(this, "Field '" + fieldName + "' not found.");
+ throw new VerificationException(this, "Field '" + fieldName + "' not found in struct type '" +
+ input.getName() + "'");
}
context.setValue(field.getDataType());
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
index 7bb99a4506a..6079652174d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
@@ -64,4 +64,5 @@ public class GetVarExpression extends Expression {
public int hashCode() {
return getClass().hashCode() + varName.hashCode();
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
index 676bcd74a6c..e94b5df1d24 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
@@ -28,8 +28,7 @@ public class InputExpression extends Expression {
}
@Override
- protected void doExecute(ExecutionContext ctx)
- {
+ protected void doExecute(ExecutionContext ctx) {
if (fieldPath != null) {
ctx.setValue(ctx.getInputValue(fieldPath));
} else {
@@ -79,6 +78,7 @@ public class InputExpression extends Expression {
}
public static class FieldPathOptimizer implements ObjectOperation, ObjectPredicate {
+
private final DocumentType documentType;
public FieldPathOptimizer(DocumentType documentType) {
@@ -95,9 +95,11 @@ public class InputExpression extends Expression {
public boolean check(Object obj) {
return obj instanceof InputExpression;
}
+
}
public static class InputFieldNameExtractor implements ObjectOperation, ObjectPredicate {
+
private List<String> inputFieldNames = new ArrayList<>(1);
public List<String> getInputFieldNames() { return inputFieldNames; }
@@ -111,5 +113,7 @@ public class InputExpression extends Expression {
public boolean check(Object obj) {
return obj instanceof InputExpression;
}
+
}
+
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldTestCase.java
index 3b5569995e6..af1a58a1de6 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldTestCase.java
@@ -40,7 +40,7 @@ public class GetFieldTestCase {
assertVerify(type, exp, DataType.STRING);
assertVerifyThrows(null, exp, "Expected any input, got null.");
assertVerifyThrows(DataType.INT, exp, "Expected structured input, got int.");
- assertVerifyThrows(type, new GetFieldExpression("bar"), "Field 'bar' not found.");
+ assertVerifyThrows(type, new GetFieldExpression("bar"), "Field 'bar' not found in struct type 'my_struct'");
}
@Test
@@ -79,7 +79,7 @@ public class GetFieldTestCase {
new GetFieldExpression("foo").execute(new StructDataType("my_struct").createFieldValue());
fail();
} catch (IllegalArgumentException e) {
- assertEquals("Field 'foo' not found.", e.getMessage());
+ assertEquals("Field 'foo' not found in struct type 'my_struct'", e.getMessage());
}
}
}
diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java
index 5a3ccfed490..9321f8e290d 100644
--- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java
+++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java
@@ -8,6 +8,7 @@ import org.glassfish.jersey.client.proxy.WebResourceFactory;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.client.WebTarget;
@@ -16,17 +17,17 @@ import javax.ws.rs.core.UriBuilder;
import java.util.Collections;
/**
- * @author bakksjo
+ * Factory for creating Jersey clients from a JAX-RS resource interface.
+ *
+ * @author Oyvind Bakksjo
*/
public class JerseyJaxRsClientFactory implements JaxRsClientFactory {
+
private static final int DEFAULT_CONNECT_TIMEOUT_MS = 30000;
private static final int DEFAULT_READ_TIMEOUT_MS = 30000;
- private final int connectTimeoutMs;
- private final int readTimeoutMs;
- private final SSLContext sslContext;
- private final String userAgent;
- private final HostnameVerifier hostnameVerifier;
+ // Client is a heavy-weight object with a finalizer so we create only one and re-use it
+ private final Client client;
public JerseyJaxRsClientFactory() {
this(DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
@@ -36,33 +37,23 @@ public class JerseyJaxRsClientFactory implements JaxRsClientFactory {
this(DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS, sslContext, hostnameVerifier, userAgent);
}
- public JerseyJaxRsClientFactory(final int connectTimeoutMs, final int readTimeoutMs) {
+ public JerseyJaxRsClientFactory(int connectTimeoutMs, int readTimeoutMs) {
this(connectTimeoutMs, readTimeoutMs, null, null, null);
}
public JerseyJaxRsClientFactory(int connectTimeoutMs, int readTimeoutMs, SSLContext sslContext,
HostnameVerifier hostnameVerifier, String userAgent) {
- this.connectTimeoutMs = connectTimeoutMs;
- this.readTimeoutMs = readTimeoutMs;
- this.sslContext = sslContext;
- this.hostnameVerifier = hostnameVerifier;
- this.userAgent = userAgent;
- }
-
- /**
- * Contains some workarounds for HTTP/JAX-RS/Jersey issues. See:
- * https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/ClientProperties.html#SUPPRESS_HTTP_COMPLIANCE_VALIDATION
- * https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/HttpUrlConnectorProvider.html#SET_METHOD_WORKAROUND
- */
- @Override
- public <T> T createClient(final Class<T> apiClass, final HostName hostName, final int port, final String pathPrefix, String scheme) {
- final UriBuilder uriBuilder = UriBuilder.fromPath(pathPrefix).host(hostName.s()).port(port).scheme(scheme);
+ /*
+ * Configure client with some workarounds for HTTP/JAX-RS/Jersey issues. See:
+ * https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/ClientProperties.html#SUPPRESS_HTTP_COMPLIANCE_VALIDATION
+ * https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/HttpUrlConnectorProvider.html#SET_METHOD_WORKAROUND
+ */
ClientBuilder builder = ClientBuilder.newBuilder()
- .property(ClientProperties.CONNECT_TIMEOUT, connectTimeoutMs)
- .property(ClientProperties.READ_TIMEOUT, readTimeoutMs)
- .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true) // Allow empty PUT. TODO: Fix API.
- .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true) // Allow e.g. PATCH method.
- .property(ClientProperties.FOLLOW_REDIRECTS, true);
+ .property(ClientProperties.CONNECT_TIMEOUT, connectTimeoutMs)
+ .property(ClientProperties.READ_TIMEOUT, readTimeoutMs)
+ .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true) // Allow empty PUT. TODO: Fix API.
+ .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true) // Allow e.g. PATCH method.
+ .property(ClientProperties.FOLLOW_REDIRECTS, true);
if (sslContext != null) {
builder.sslContext(sslContext);
}
@@ -70,11 +61,16 @@ public class JerseyJaxRsClientFactory implements JaxRsClientFactory {
builder.hostnameVerifier(hostnameVerifier);
}
if (userAgent != null) {
- builder.register((ClientRequestFilter) context ->
- context.getHeaders().put(HttpHeaders.USER_AGENT, Collections.singletonList(userAgent)));
+ builder.register((ClientRequestFilter) context -> context.getHeaders().put(HttpHeaders.USER_AGENT, Collections.singletonList(userAgent)));
}
- final WebTarget target = builder.build().target(uriBuilder);
- // TODO: Check if this fills up non-heap memory with loaded classes.
+ this.client = builder.build();
+ }
+
+ @Override
+ public <T> T createClient(Class<T> apiClass, HostName hostName, int port, String pathPrefix, String scheme) {
+ UriBuilder uriBuilder = UriBuilder.fromPath(pathPrefix).host(hostName.s()).port(port).scheme(scheme);
+ WebTarget target = client.target(uriBuilder);
return WebResourceFactory.newResource(apiClass, target);
}
+
}
diff --git a/jdisc_core/pom.xml b/jdisc_core/pom.xml
index efa4e62affd..1a0c27c71a6 100644
--- a/jdisc_core/pom.xml
+++ b/jdisc_core/pom.xml
@@ -232,6 +232,7 @@
<configuration>
<mainClass>com.yahoo.jdisc.core.ExportPackages</mainClass>
<classpathScope>test</classpathScope>
+ <cleanupDaemonThreads>false</cleanupDaemonThreads>
<arguments>
<argument>${exportPackagesFile}</argument>
<argument>${project.build.directory}/dependency/commons-daemon.jar</argument>
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ExportPackages.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ExportPackages.java
index 86ab016bded..e8e6373f2ed 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ExportPackages.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ExportPackages.java
@@ -1,20 +1,31 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.core;
-import org.apache.felix.framework.util.Util;
+import com.yahoo.io.IOUtils;
+import com.yahoo.yolean.Exceptions;
+import org.apache.felix.framework.Felix;
+import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
+import org.osgi.framework.launch.Framework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import java.util.jar.JarInputStream;
+import java.util.logging.Logger;
/**
* @author Simon Thoresen Hult
+ * @author gjoranv
*/
public class ExportPackages {
+ private static final Logger log = Logger.getLogger(ExportPackages.class.getName());
public static final String PROPERTIES_FILE = "/exportPackages.properties";
public static final String EXPORT_PACKAGES = "exportPackages";
@@ -75,7 +86,38 @@ public class ExportPackages {
}
public static String getSystemPackages() {
- return Util.getDefaultProperty(null, "org.osgi.framework.system.packages");
+ File cache;
+ try {
+ cache = Files.createTempDirectory("felix-cache").toAbsolutePath().toFile();
+ } catch (IOException e) {
+ throw new RuntimeException("Could not create temp bundle-cache.", e);
+ }
+ Framework framework = new Felix(felixCacheParams(cache.getAbsolutePath()));
+ try {
+ framework.init();
+ framework.start();
+ return framework.getHeaders().get(Constants.EXPORT_PACKAGE);
+ } catch (BundleException e) {
+ throw new RuntimeException("Failed retrieving exported system packages. ", e);
+ } finally {
+ try {
+ framework.stop();
+ framework.waitForStop(10000);
+ } catch (BundleException | InterruptedException e) {
+ log.warning("Failed to stop Felix framework:\n" + Exceptions.toMessageString(e));
+ }
+ if (! IOUtils.recursiveDeleteDir(cache)) {
+ log.warning("Failed to delete temp dir, must be deleted manually: " + cache.getAbsolutePath());
+ }
+ }
+ }
+
+ private static Map<String, Object> felixCacheParams(String cache) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("felix.cache.profiledir", cache);
+ params.put("felix.cache.dir", cache);
+ params.put(Constants.FRAMEWORK_STORAGE, cache);
+ return params;
}
private static String getExportedPackages(String argument) throws IOException {
@@ -92,4 +134,5 @@ public class ExportPackages {
return jar.getManifest().getMainAttributes().getValue(Constants.EXPORT_PACKAGE);
}
}
+
}
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/FelixParamsTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/FelixParamsTestCase.java
index 55fca97841a..6836ebde496 100644
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/FelixParamsTestCase.java
+++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/FelixParamsTestCase.java
@@ -29,17 +29,19 @@ public class FelixParamsTestCase {
@Test
public void requireThatSystemPackagesAreNotReplaced() {
+ String systemPackages = ExportPackages.getSystemPackages();
+
FelixParams params = new FelixParams();
Map<String, String> config = params.toConfig();
assertNotNull(config);
String str = config.get(Constants.FRAMEWORK_SYSTEMPACKAGES);
assertNotNull(str);
- assertTrue(str.contains(ExportPackages.getSystemPackages()));
+ assertTrue(str.contains(systemPackages));
params.exportPackage("foo");
assertNotNull(config = params.toConfig());
assertNotNull(str = config.get(Constants.FRAMEWORK_SYSTEMPACKAGES));
- assertTrue(str.contains(ExportPackages.getSystemPackages()));
+ assertTrue(str.contains(systemPackages));
assertTrue(str.contains("foo"));
}
diff --git a/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/application/BundleActivatorIntegrationTest.java b/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/application/BundleActivatorIntegrationTest.java
index 6388643148c..03e56d7c26d 100644
--- a/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/application/BundleActivatorIntegrationTest.java
+++ b/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/application/BundleActivatorIntegrationTest.java
@@ -22,7 +22,7 @@ public class BundleActivatorIntegrationTest {
OsgiFramework osgi = driver.osgiFramework();
BundleInstaller installer = new BundleInstaller(driver.osgiFramework());
Bundle bundle = installer.installAndStart("my-bundle-activator.jar").get(0);
- Class<?> serviceClass = bundle.loadClass("com.yahoo.jdisc.bundle.MyService");
+ Class<?> serviceClass = bundle.loadClass("com.yahoo.jdisc.bundle.my_act.MyService");
assertNotNull(serviceClass);
BundleContext ctx = osgi.bundleContext();
ServiceReference<?> serviceRef = ctx.getServiceReference(serviceClass.getName());
@@ -37,7 +37,7 @@ public class BundleActivatorIntegrationTest {
public void requireThatApplicationBundleActivatorHasAccessToCurrentContainer() throws Exception {
TestDriver driver = TestDriver.newApplicationBundleInstance("app-g-act.jar", false);
OsgiFramework osgi = driver.osgiFramework();
- Class<?> serviceClass = osgi.bundles().get(1).loadClass("com.yahoo.jdisc.bundle.MyService");
+ Class<?> serviceClass = osgi.bundles().get(1).loadClass("com.yahoo.jdisc.bundle.g_act.MyService");
assertNotNull(serviceClass);
BundleContext ctx = osgi.bundleContext();
ServiceReference<?> serviceRef = ctx.getServiceReference(serviceClass.getName());
diff --git a/jdisc_core_test/test_bundles/app-g-act/pom.xml b/jdisc_core_test/test_bundles/app-g-act/pom.xml
index b91b95f9fdd..aaa740efade 100644
--- a/jdisc_core_test/test_bundles/app-g-act/pom.xml
+++ b/jdisc_core_test/test_bundles/app-g-act/pom.xml
@@ -23,13 +23,13 @@
<configuration>
<instructions>
<X-JDisc-Application>
- com.yahoo.jdisc.bundle.ApplicationG
+ com.yahoo.jdisc.bundle.g_act.ApplicationG
</X-JDisc-Application>
<Bundle-Activator>
- com.yahoo.jdisc.bundle.MyBundleActivator
+ com.yahoo.jdisc.bundle.g_act.MyBundleActivator
</Bundle-Activator>
<Export-Package>
- com.yahoo.jdisc.bundle
+ com.yahoo.jdisc.bundle.g_act
</Export-Package>
</instructions>
</configuration>
diff --git a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/ApplicationG.java b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/ApplicationG.java
index 9b4d7501ac0..02a9cd5a542 100644
--- a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/ApplicationG.java
+++ b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/ApplicationG.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.bundle;
+package com.yahoo.jdisc.bundle.g_act;
import com.yahoo.jdisc.application.Application;
diff --git a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyBundleActivator.java
index 51a95b8e3a9..c60f4939409 100644
--- a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java
+++ b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyBundleActivator.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.bundle;
+package com.yahoo.jdisc.bundle.g_act;
import com.yahoo.jdisc.service.CurrentContainer;
import org.osgi.framework.BundleActivator;
diff --git a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyService.java b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyService.java
index a5cb9be9a47..518f7304100 100644
--- a/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/MyService.java
+++ b/jdisc_core_test/test_bundles/app-g-act/src/main/java/com/yahoo/jdisc/bundle/g_act/MyService.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.bundle;
+package com.yahoo.jdisc.bundle.g_act;
import com.yahoo.jdisc.service.AbstractServerProvider;
import com.yahoo.jdisc.service.CurrentContainer;
diff --git a/jdisc_core_test/test_bundles/my-bundle-activator/pom.xml b/jdisc_core_test/test_bundles/my-bundle-activator/pom.xml
index 531af08b915..8931c26a73e 100644
--- a/jdisc_core_test/test_bundles/my-bundle-activator/pom.xml
+++ b/jdisc_core_test/test_bundles/my-bundle-activator/pom.xml
@@ -23,10 +23,10 @@
<configuration>
<instructions>
<Bundle-Activator>
- com.yahoo.jdisc.bundle.MyBundleActivator
+ com.yahoo.jdisc.bundle.my_act.MyBundleActivator
</Bundle-Activator>
<Export-Package>
- com.yahoo.jdisc.bundle
+ com.yahoo.jdisc.bundle.my_act
</Export-Package>
</instructions>
</configuration>
diff --git a/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java b/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyBundleActivator.java
index b4af03bdf60..4212fc2fd09 100644
--- a/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyBundleActivator.java
+++ b/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyBundleActivator.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.bundle;
+package com.yahoo.jdisc.bundle.my_act;
import com.yahoo.jdisc.service.CurrentContainer;
import org.osgi.framework.BundleActivator;
diff --git a/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyService.java b/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyService.java
index 8eb1543776d..b24ee137f59 100644
--- a/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/MyService.java
+++ b/jdisc_core_test/test_bundles/my-bundle-activator/src/main/java/com/yahoo/jdisc/bundle/my_act/MyService.java
@@ -1,5 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.bundle;
+package com.yahoo.jdisc.bundle.my_act;
/**
* @author Simon Thoresen Hult
diff --git a/jrt/src/com/yahoo/jrt/CryptoEngine.java b/jrt/src/com/yahoo/jrt/CryptoEngine.java
index 2ef936ec7ed..c27aba73873 100644
--- a/jrt/src/com/yahoo/jrt/CryptoEngine.java
+++ b/jrt/src/com/yahoo/jrt/CryptoEngine.java
@@ -2,10 +2,10 @@
package com.yahoo.jrt;
-import com.yahoo.security.tls.TransportSecurityOptions;
+import com.yahoo.security.tls.TransportSecurityUtils;
+import com.yahoo.security.tls.TransportSecurityUtils.MixedMode;
import java.nio.channels.SocketChannel;
-import java.nio.file.Paths;
/**
@@ -16,12 +16,22 @@ import java.nio.file.Paths;
**/
public interface CryptoEngine {
public CryptoSocket createCryptoSocket(SocketChannel channel, boolean isServer);
- static public CryptoEngine createDefault() { // TODO Move this logic to a dedicated factory class
- String tlsConfigParameter = System.getenv("VESPA_TLS_CONFIG_FILE");
- if (tlsConfigParameter != null && !tlsConfigParameter.isEmpty()) {
- return new TlsCryptoEngine(TransportSecurityOptions.fromJsonFile(Paths.get(tlsConfigParameter)));
- } else {
+ static public CryptoEngine createDefault() {
+ if (!TransportSecurityUtils.isTransportSecurityEnabled()) {
return new NullCryptoEngine();
}
+ TlsCryptoEngine tlsCryptoEngine = new TlsCryptoEngine(TransportSecurityUtils.getOptions().get());
+ if (!TransportSecurityUtils.isInsecureMixedModeEnabled()) {
+ return tlsCryptoEngine;
+ }
+ MixedMode mixedMode = TransportSecurityUtils.getInsecureMixedMode().get();
+ switch (mixedMode) {
+ case PLAINTEXT_CLIENT_MIXED_SERVER:
+ return new MaybeTlsCryptoEngine(tlsCryptoEngine, false);
+ case TLS_CLIENT_MIXED_SERVER:
+ return new MaybeTlsCryptoEngine(tlsCryptoEngine, true);
+ default:
+ throw new IllegalArgumentException(mixedMode.toString());
+ }
}
}
diff --git a/jrt/src/com/yahoo/jrt/MaybeTlsCryptoEngine.java b/jrt/src/com/yahoo/jrt/MaybeTlsCryptoEngine.java
new file mode 100644
index 00000000000..6664934799c
--- /dev/null
+++ b/jrt/src/com/yahoo/jrt/MaybeTlsCryptoEngine.java
@@ -0,0 +1,34 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.jrt;
+
+import java.nio.channels.SocketChannel;
+
+/**
+ * A crypto engine that supports both tls encrypted connections and
+ * unencrypted connections. The use of tls for incoming connections is
+ * auto-detected using clever heuristics. The use of tls for outgoing
+ * connections is controlled by the useTlsWhenClient flag given to the
+ * constructor.
+ **/
+public class MaybeTlsCryptoEngine implements CryptoEngine {
+
+ private final TlsCryptoEngine tlsEngine;
+ private final boolean useTlsWhenClient;
+
+ public MaybeTlsCryptoEngine(TlsCryptoEngine tlsEngine, boolean useTlsWhenClient) {
+ this.tlsEngine = tlsEngine;
+ this.useTlsWhenClient = useTlsWhenClient;
+ }
+
+ @Override public CryptoSocket createCryptoSocket(SocketChannel channel, boolean isServer) {
+ if (isServer) {
+ return new MaybeTlsCryptoSocket(channel, tlsEngine);
+ } else if (useTlsWhenClient) {
+ return tlsEngine.createCryptoSocket(channel, false);
+ } else {
+ return new NullCryptoSocket(channel);
+ }
+ }
+
+ @Override public String toString() { return "MaybeTlsCryptoEngine(useTlsWhenClient:" + useTlsWhenClient + ")"; }
+}
diff --git a/jrt/src/com/yahoo/jrt/MaybeTlsCryptoSocket.java b/jrt/src/com/yahoo/jrt/MaybeTlsCryptoSocket.java
new file mode 100644
index 00000000000..1cf3dfd1261
--- /dev/null
+++ b/jrt/src/com/yahoo/jrt/MaybeTlsCryptoSocket.java
@@ -0,0 +1,126 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.jrt;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+/**
+ * A crypto socket for the server side of a connection that
+ * auto-detects whether the connection is tls encrypted or unencrypted
+ * using clever heuristics. The assumption is that the client side
+ * will send at least one RPC request before expecting anything from
+ * the server. The first 9 bytes are inspected to see if they look
+ * like part of a tls handshake or not (RPC packet headers are 12
+ * bytes).
+ **/
+public class MaybeTlsCryptoSocket implements CryptoSocket {
+
+ private static final int SNOOP_SIZE = 9;
+
+ private CryptoSocket socket;
+
+ // 'data' is the first 9 bytes received from the client
+ public static boolean looksLikeTlsToMe(byte[] data) {
+ if (data.length != SNOOP_SIZE) {
+ return false; // wrong data size for tls detection
+ }
+ if (data[0] != 22) {
+ return false; // not tagged as tls handshake
+ }
+ if (data[1] != 3) {
+ return false; // unknown major version
+ }
+ if ((data[2] != 1) && (data[2] != 3)) {
+ return false; // unknown minor version
+ }
+ int frame_len = (data[3] & 0xff);
+ frame_len = ((frame_len << 8) | (data[4] & 0xff));
+ if (frame_len > (16384 + 2048)) {
+ return false; // frame too large
+ }
+ if (frame_len < 4) {
+ return false; // frame too small
+ }
+ if (data[5] != 0x1) {
+ return false; // not tagges as client hello
+ }
+ int hello_len = (data[6] & 0xff);
+ hello_len = ((hello_len << 8) | (data[7] & 0xff));
+ hello_len = ((hello_len << 8) | (data[8] & 0xff));
+ if ((frame_len - 4) != hello_len) {
+ return false; // inconsistent sizes; frame vs client hello
+ }
+ return true;
+ }
+
+ private class MyCryptoSocket extends NullCryptoSocket {
+
+ private TlsCryptoEngine factory;
+ private Buffer buffer;
+
+ MyCryptoSocket(SocketChannel channel, TlsCryptoEngine factory) {
+ super(channel);
+ this.factory = factory;
+ this.buffer = new Buffer(4096);
+ }
+
+ @Override public HandshakeResult handshake() throws IOException {
+ if (factory != null) {
+ channel().read(buffer.getWritable(SNOOP_SIZE));
+ if (buffer.bytes() < SNOOP_SIZE) {
+ return HandshakeResult.NEED_READ;
+ }
+ byte[] data = new byte[SNOOP_SIZE];
+ ByteBuffer src = buffer.getReadable();
+ for (int i = 0; i < SNOOP_SIZE; i++) {
+ data[i] = src.get(i);
+ }
+ if (looksLikeTlsToMe(data)) {
+ TlsCryptoSocket tlsSocket = factory.createCryptoSocket(channel(), true);
+ tlsSocket.injectReadData(buffer);
+ socket = tlsSocket;
+ return socket.handshake();
+ } else {
+ factory = null;
+ }
+ }
+ return HandshakeResult.DONE;
+ }
+
+ @Override public int read(ByteBuffer dst) throws IOException {
+ int drainResult = drain(dst);
+ if (drainResult != 0) {
+ return drainResult;
+ }
+ return super.read(dst);
+ }
+
+ @Override public int drain(ByteBuffer dst) throws IOException {
+ int cnt = 0;
+ if (buffer != null) {
+ ByteBuffer src = buffer.getReadable();
+ while (src.hasRemaining() && dst.hasRemaining()) {
+ dst.put(src.get());
+ cnt++;
+ }
+ if (buffer.bytes() == 0) {
+ buffer = null;
+ }
+ }
+ return cnt;
+ }
+ }
+
+ public MaybeTlsCryptoSocket(SocketChannel channel, TlsCryptoEngine factory) {
+ this.socket = new MyCryptoSocket(channel, factory);
+ }
+
+ @Override public SocketChannel channel() { return socket.channel(); }
+ @Override public HandshakeResult handshake() throws IOException { return socket.handshake(); }
+ @Override public int getMinimumReadBufferSize() { return socket.getMinimumReadBufferSize(); }
+ @Override public int read(ByteBuffer dst) throws IOException { return socket.read(dst); }
+ @Override public int drain(ByteBuffer dst) throws IOException { return socket.drain(dst); }
+ @Override public int write(ByteBuffer src) throws IOException { return socket.write(src); }
+ @Override public FlushResult flush() throws IOException { return socket.flush(); }
+}
diff --git a/jrt/src/com/yahoo/jrt/TlsCryptoSocket.java b/jrt/src/com/yahoo/jrt/TlsCryptoSocket.java
index 3db54811f9e..96aca622af4 100644
--- a/jrt/src/com/yahoo/jrt/TlsCryptoSocket.java
+++ b/jrt/src/com/yahoo/jrt/TlsCryptoSocket.java
@@ -46,6 +46,11 @@ public class TlsCryptoSocket implements CryptoSocket {
this.handshakeState = HandshakeState.NOT_STARTED;
}
+ // inject pre-read data into the read pipeline (typically called by MaybeTlsCryptoSocket)
+ public void injectReadData(Buffer data) {
+ unwrapBuffer.getWritable(data.bytes()).put(data.getReadable());
+ }
+
@Override
public SocketChannel channel() {
return channel;
diff --git a/jrt/tests/com/yahoo/jrt/EchoTest.java b/jrt/tests/com/yahoo/jrt/EchoTest.java
index a91ac117f41..ff036af183b 100644
--- a/jrt/tests/com/yahoo/jrt/EchoTest.java
+++ b/jrt/tests/com/yahoo/jrt/EchoTest.java
@@ -23,7 +23,9 @@ public class EchoTest {
@Parameter public CryptoEngine crypto;
@Parameters(name = "{0}") public static Object[] engines() {
- return new Object[] { CryptoEngine.createDefault(), new XorCryptoEngine(), new TlsCryptoEngine(createTestSslContext()) };
+ return new Object[] { new NullCryptoEngine(), new XorCryptoEngine(), new TlsCryptoEngine(createTestSslContext()),
+ new MaybeTlsCryptoEngine(new TlsCryptoEngine(createTestSslContext()), false),
+ new MaybeTlsCryptoEngine(new TlsCryptoEngine(createTestSslContext()), true) };
}
@Before
diff --git a/jrt/tests/com/yahoo/jrt/SessionTest.java b/jrt/tests/com/yahoo/jrt/SessionTest.java
index 63d14601b6e..2d8f9188623 100644
--- a/jrt/tests/com/yahoo/jrt/SessionTest.java
+++ b/jrt/tests/com/yahoo/jrt/SessionTest.java
@@ -19,7 +19,7 @@ public class SessionTest implements SessionHandler {
@Parameter public CryptoEngine crypto;
@Parameters(name = "{0}") public static Object[] engines() {
- return new Object[] { CryptoEngine.createDefault(), new XorCryptoEngine(), new TlsCryptoEngine(createTestSslContext()) };
+ return new Object[] { new NullCryptoEngine(), new XorCryptoEngine(), new TlsCryptoEngine(createTestSslContext()) };
}
private static class Session {
diff --git a/jrt/tests/com/yahoo/jrt/TlsDetectionTest.java b/jrt/tests/com/yahoo/jrt/TlsDetectionTest.java
new file mode 100644
index 00000000000..47a8a20deab
--- /dev/null
+++ b/jrt/tests/com/yahoo/jrt/TlsDetectionTest.java
@@ -0,0 +1,90 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.jrt;
+
+import static org.junit.Assert.assertEquals;
+
+public class TlsDetectionTest {
+
+ static private String message(byte[] data) {
+ String msg = "isTls([";
+ String delimiter = "";
+ for (byte b: data) {
+ msg += delimiter + (b & 0xff);
+ delimiter = ", ";
+ }
+ msg += "])";
+ return msg;
+ }
+
+ static private void checkTls(boolean expect, int ... values) {
+ byte[] data = new byte[values.length];
+ for (int i = 0; i < data.length; i++) {
+ data[i] = (byte) values[i];
+ }
+ assertEquals(message(data), expect, MaybeTlsCryptoSocket.looksLikeTlsToMe(data));
+ }
+
+ @org.junit.Test public void testValidHandshake() {
+ checkTls(true, 22, 3, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(true, 22, 3, 3, 10, 255, 1, 0, 10, 251);
+ }
+
+ @org.junit.Test public void testDataOfWrongSize() {
+ checkTls(false, 22, 3, 1, 10, 255, 1, 0, 10);
+ checkTls(false, 22, 3, 1, 10, 255, 1, 0, 10, 251, 0);
+ }
+
+ @org.junit.Test public void testDataNotTaggedAsHandshake() {
+ checkTls(false, 23, 3, 1, 10, 255, 1, 0, 10, 251);
+ }
+
+ @org.junit.Test public void testDataWithBadMajorVersion() {
+ checkTls(false, 22, 0, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 1, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 2, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 4, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 5, 1, 10, 255, 1, 0, 10, 251);
+ }
+
+ @org.junit.Test public void testDataWithBadMinorVersion() {
+ checkTls(false, 22, 3, 0, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 3, 2, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 3, 4, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 3, 5, 10, 255, 1, 0, 10, 251);
+ }
+
+ @org.junit.Test public void testDataNotTaggedAsClientHello() {
+ checkTls(false, 22, 3, 1, 10, 255, 0, 0, 10, 251);
+ checkTls(false, 22, 3, 1, 10, 255, 2, 0, 10, 251);
+ }
+
+ @org.junit.Test public void testFrameSizeLimits() {
+ checkTls(false, 22, 3, 1, 255, 255, 1, 0, 255, 251); // max
+ checkTls(false, 22, 3, 1, 72, 1, 1, 0, 71, 253); // 18k + 1
+ checkTls(true, 22, 3, 1, 72, 0, 1, 0, 71, 252); // 18k
+ checkTls(true, 22, 3, 1, 0, 4, 1, 0, 0, 0); // 4
+ checkTls(false, 22, 3, 1, 0, 3, 1, 0, 0, 0); // 3 - capped
+ checkTls(false, 22, 3, 1, 0, 3, 1, 255, 255, 255); // 3 - wrapped
+ }
+
+ @org.junit.Test public void testFrameAndClientHelloSizeRelationship() {
+ checkTls(true, 22, 3, 1, 10, 255, 1, 0, 10, 251);
+ checkTls(false, 22, 3, 1, 10, 255, 1, 1, 10, 251);
+ checkTls(false, 22, 3, 1, 10, 255, 1, 2, 10, 251);
+
+ checkTls(false, 22, 3, 1, 10, 5, 1, 0, 10, 0);
+ checkTls(true, 22, 3, 1, 10, 5, 1, 0, 10, 1);
+ checkTls(false, 22, 3, 1, 10, 5, 1, 0, 10, 2);
+
+ checkTls(false, 22, 3, 1, 10, 5, 1, 0, 9, 1);
+ checkTls(true, 22, 3, 1, 10, 5, 1, 0, 10, 1);
+ checkTls(false, 22, 3, 1, 10, 5, 1, 0, 11, 1);
+
+ checkTls(true, 22, 3, 1, 10, 5, 1, 0, 10, 1);
+ checkTls(true, 22, 3, 1, 10, 4, 1, 0, 10, 0);
+ checkTls(true, 22, 3, 1, 10, 3, 1, 0, 9, 255);
+ checkTls(true, 22, 3, 1, 10, 2, 1, 0, 9, 254);
+ checkTls(true, 22, 3, 1, 10, 1, 1, 0, 9, 253);
+ checkTls(true, 22, 3, 1, 10, 0, 1, 0, 9, 252);
+ }
+}
diff --git a/logd/src/apps/logd/main.cpp b/logd/src/apps/logd/main.cpp
index f9d760c4d18..62f1e48b233 100644
--- a/logd/src/apps/logd/main.cpp
+++ b/logd/src/apps/logd/main.cpp
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <logd/errhandle.h>
-#include <logd/service.h>
#include <logd/forward.h>
#include <logd/conf.h>
#include <logd/watch.h>
@@ -15,8 +14,6 @@
#include <vespa/log/log.h>
LOG_SETUP("logdemon");
-
-
using namespace logdemon;
using config::FileSpec;
diff --git a/logd/src/logd/cmdbuf.cpp b/logd/src/logd/cmdbuf.cpp
index 37915446f2d..b9836b5d8b0 100644
--- a/logd/src/logd/cmdbuf.cpp
+++ b/logd/src/logd/cmdbuf.cpp
@@ -1,22 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
+
+#include "cmdbuf.h"
+#include "errhandle.h"
+#include "perform.h"
#include <fcntl.h>
-#include <errno.h>
#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
#include <vespa/log/log.h>
LOG_SETUP("");
-LOG_RCSID("$Id$");
-
-#include "errhandle.h"
-#include "service.h"
-#include "forward.h"
-#include "perform.h"
-#include "cmdbuf.h"
namespace logdemon {
@@ -27,13 +18,11 @@ CmdBuf::CmdBuf()
_left(_size)
{ }
-
CmdBuf::~CmdBuf()
{
free(_buf);
}
-
bool
CmdBuf::hasCmd()
{
@@ -77,7 +66,7 @@ CmdBuf::extend()
_size *= 2;
int pos = _bp - _buf;
char *nbuf = (char *)realloc(_buf, _size);
- if (nbuf == NULL) {
+ if (nbuf == nullptr) {
free(_buf);
LOG(error, "could not allocate %d bytes", _size);
throw SomethingBad("realloc failed");
@@ -102,14 +91,13 @@ CmdBuf::maybeRead(int fd)
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
- while (select(fd + 1, &fdset, NULL, NULL, &notime) > 0) {
+ while (select(fd + 1, &fdset, nullptr, nullptr, &notime) > 0) {
// usually loops just once
int oflags = fcntl(fd, F_GETFL);
int nbflags = oflags | O_NONBLOCK;
if (fcntl(fd, F_SETFL, nbflags) != 0) {
- LOG(error, "could not fcntl logserver socket: %s",
- strerror(errno));
+ LOG(error, "could not fcntl logserver socket: %s", strerror(errno));
throw SomethingBad("fcntl failed");
}
@@ -121,8 +109,7 @@ CmdBuf::maybeRead(int fd)
extend();
}
} else if (len < 0) {
- LOG(warning, "error reading from logserver socket: %s",
- strerror(errno));
+ LOG(warning, "error reading from logserver socket: %s", strerror(errno));
throw ConnectionException("error reading");
}
fcntl(fd, F_SETFL, oflags);
@@ -149,8 +136,7 @@ CmdBuf::readFile(int fd)
return true;
}
if (len < 0) {
- LOG(error, "error reading file: %s",
- strerror(errno));
+ LOG(error, "error reading file: %s", strerror(errno));
throw SomethingBad("read failed");
}
return false;
diff --git a/logd/src/logd/cmdbuf.h b/logd/src/logd/cmdbuf.h
index 8a9bf8a1ec1..0c3fd75d07e 100644
--- a/logd/src/logd/cmdbuf.h
+++ b/logd/src/logd/cmdbuf.h
@@ -1,7 +1,10 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
namespace logdemon {
+class Performer;
+
class CmdBuf
{
private:
@@ -10,10 +13,9 @@ private:
char *_bp;
int _left;
void extend();
-
- CmdBuf(const CmdBuf& other);
- CmdBuf& operator= (const CmdBuf& other);
public:
+ CmdBuf(const CmdBuf& other) = delete;
+ CmdBuf& operator= (const CmdBuf& other) = delete;
CmdBuf();
~CmdBuf();
bool hasCmd();
diff --git a/logd/src/logd/conf.cpp b/logd/src/logd/conf.cpp
index ef1f6b73cbe..f01ee8141fc 100644
--- a/logd/src/logd/conf.cpp
+++ b/logd/src/logd/conf.cpp
@@ -1,22 +1,13 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
+
+#include "conf.h"
+#include "forward.h"
+#include "conn.h"
#include <fcntl.h>
-#include <errno.h>
#include <unistd.h>
-#include <time.h>
-#include <sys/stat.h>
#include <vespa/log/log.h>
LOG_SETUP("");
-LOG_RCSID("$Id$");
-
-#include "conn.h"
-#include "service.h"
-#include "forward.h"
-#include "conf.h"
-#include <vespa/config/common/exceptions.h>
using cloud::config::log::LogdConfig;
using ns_log::Logger;
@@ -27,18 +18,11 @@ void
ConfSub::configure(std::unique_ptr<LogdConfig> cfg)
{
const LogdConfig &newconf(*cfg);
- if (newconf.logserver.host != _logServer)
- {
- if (newconf.logserver.host.size() > 255) {
- LOG(warning, "too long logserver hostname: %s",
- newconf.logserver.host.c_str());
- return;
- }
- strcpy(_logServer, newconf.logserver.host.c_str());
+ if (newconf.logserver.host != _logServer) {
+ _logServer = newconf.logserver.host;
_needToConnect = true;
}
- if (newconf.logserver.use != _use_logserver)
- {
+ if (newconf.logserver.use != _use_logserver) {
_use_logserver = newconf.logserver.use;
_needToConnect = true;
}
@@ -62,26 +46,22 @@ ConfSub::configure(std::unique_ptr<LogdConfig> cfg)
if (newconf.rotate.size > 0) {
_rotate_size = newconf.rotate.size;
} else {
- LOG(config, "bad rotate.size=%d must be positive",
- newconf.rotate.size);
+ LOG(config, "bad rotate.size=%d must be positive", newconf.rotate.size);
}
if (newconf.rotate.age > 0) {
_rotate_age = newconf.rotate.age;
} else {
- LOG(config, "bad rotate.age=%d must be positive",
- newconf.rotate.age);
+ LOG(config, "bad rotate.age=%d must be positive", newconf.rotate.age);
}
if (newconf.remove.totalmegabytes > 0) {
_remove_meg = newconf.remove.totalmegabytes;
} else {
- LOG(config, "bad remove.totalmegabytes=%d must be positive",
- newconf.remove.totalmegabytes);
+ LOG(config, "bad remove.totalmegabytes=%d must be positive", newconf.remove.totalmegabytes);
}
if (newconf.remove.age > 0) {
_remove_age = newconf.remove.age;
} else {
- LOG(config, "bad remove.age=%d must be positive",
- newconf.remove.age);
+ LOG(config, "bad remove.age=%d must be positive", newconf.remove.age);
}
}
@@ -113,14 +93,12 @@ ConfSub::latch()
void
ConfSub::connectToLogserver()
{
- int newfd = makeconn(_logServer, _logPort);
+ int newfd = makeconn(_logServer.c_str(), _logPort);
if (newfd >= 0) {
resetFileDescriptor(newfd);
- LOG(debug, "connected to logserver at %s:%d",
- _logServer, _logPort);
+ LOG(debug, "connected to logserver at %s:%d", _logServer.c_str(), _logPort);
} else {
- LOG(debug, "could not connect to %s:%d",
- _logServer, _logPort);
+ LOG(debug, "could not connect to %s:%d", _logServer.c_str(), _logPort);
}
}
@@ -156,7 +134,8 @@ ConfSub::closeConn()
}
ConfSub::ConfSub(Forwarder &fw, const config::ConfigUri & configUri)
- : _logPort(0),
+ : _logServer(),
+ _logPort(0),
_logserverfd(-1),
_statePort(0),
_rotate_size(INT_MAX),
@@ -170,18 +149,17 @@ ConfSub::ConfSub(Forwarder &fw, const config::ConfigUri & configUri)
_hasAvailable(false),
_needToConnect(true)
{
- _logServer[0] = '\0';
_handle = _subscriber.subscribe<LogdConfig>(configUri.getConfigId());
_subscriber.nextConfig(0);
configure(_handle->getConfig());
- LOG(debug, "got logServer %s", _logServer);
+ LOG(debug, "got logServer %s", _logServer.c_str());
LOG(debug, "got handle %p", _handle.get());
}
ConfSub::~ConfSub()
{
- LOG(debug, "forget logServer %s", _logServer);
+ LOG(debug, "forget logServer %s", _logServer.c_str());
LOG(debug, "done ~ConfSub()");
}
diff --git a/logd/src/logd/conf.h b/logd/src/logd/conf.h
index a777470efc6..894070fff43 100644
--- a/logd/src/logd/conf.h
+++ b/logd/src/logd/conf.h
@@ -1,13 +1,16 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
#include <logd/config-logd.h>
#include <vespa/config/config.h>
namespace logdemon {
+class Forwarder;
+
class ConfSub {
private:
- char _logServer[256];
+ std::string _logServer;
int _logPort;
int _logserverfd;
int _statePort;
@@ -25,12 +28,12 @@ private:
void connectToLogserver();
void connectToDevNull();
void resetFileDescriptor(int newfd);
- ConfSub(const ConfSub& other);
- ConfSub& operator=(const ConfSub& other);
public:
bool checkAvailable();
void latch();
void closeConn();
+ ConfSub(const ConfSub& other) = delete;
+ ConfSub& operator=(const ConfSub& other) = delete;
ConfSub(Forwarder &fw, const config::ConfigUri & configUri);
~ConfSub();
diff --git a/logd/src/logd/conn.cpp b/logd/src/logd/conn.cpp
index 19de80545cf..2ad9093011a 100644
--- a/logd/src/logd/conn.cpp
+++ b/logd/src/logd/conn.cpp
@@ -1,26 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <vespa/log/log.h>
-LOG_SETUP("");
-LOG_RCSID("$Id$");
-
-#include "errhandle.h"
-#include <logd/config-logd.h>
#include "conn.h"
-#include <vespa/config/common/exceptions.h>
#include <vespa/vespalib/net/socket_address.h>
+#include <vespa/log/log.h>
+LOG_SETUP("");
+
namespace logdemon {
static int retryBeforeWarningCount = 20;
@@ -38,9 +23,7 @@ int makeconn(const char *logSrvHost, int logPort)
}
return -1;
}
- LOG(debug,
- "Made new connection to port %d. Connected to daemon.",
- logPort);
+ LOG(debug, "Made new connection to port %d. Connected to daemon.", logPort);
return handle.release();
}
diff --git a/logd/src/logd/errhandle.h b/logd/src/logd/errhandle.h
index 376005661fe..b2ff3516b69 100644
--- a/logd/src/logd/errhandle.h
+++ b/logd/src/logd/errhandle.h
@@ -1,16 +1,17 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
#include <stdexcept>
-#include <vespa/vespalib/stllike/string.h>
+#include <string>
namespace logdemon {
class MsgException : public std::exception {
private:
- vespalib::string _string;
+ std::string _string;
public:
- MsgException(const char *s) : _string(s) {}
- virtual ~MsgException() throw() {}
+ MsgException(const std::string & s) : _string(s) {}
+ ~MsgException() override {}
const char *what() const throw() override { return _string.c_str(); }
};
@@ -32,4 +33,4 @@ public:
SomethingBad(const char *s) : MsgException(s) {}
};
-} // namespace
+}
diff --git a/logd/src/logd/forward.cpp b/logd/src/logd/forward.cpp
index eba38dbcbd3..1abf6bffe58 100644
--- a/logd/src/logd/forward.cpp
+++ b/logd/src/logd/forward.cpp
@@ -2,6 +2,7 @@
#include "forward.h"
#include "errhandle.h"
+#include "metrics.h"
#include <vespa/vespalib/component/vtag.h>
#include <vespa/vespalib/locale/c.h>
#include <unistd.h>
@@ -19,7 +20,7 @@ Forwarder::Forwarder(Metrics &metrics)
knownServices(),
_badLines(0)
{}
-Forwarder::~Forwarder() {}
+Forwarder::~Forwarder() = default;
void
Forwarder::forwardText(const char *text, int len)
@@ -44,7 +45,7 @@ Forwarder::sendMode()
snprintf(buf, 1024, "mode logd %s\n", vespalib::VersionTag);
int len = strlen(buf);
if (len < 100) {
- forwardText(buf, len);
+ forwardText(buf, len);
} else {
LOG(warning, "too long mode line: %s", buf);
}
@@ -68,16 +69,13 @@ Forwarder::forwardLine(const char *line, const char *eol)
bool
Forwarder::parseline(const char *linestart, const char *lineend)
{
- using vespalib::string;
-
int llength = lineend - linestart;
const char *fieldstart = linestart;
// time
const char *tab = strchr(fieldstart, '\t');
- if (tab == NULL || tab == fieldstart) {
- LOG(spam, "bad logline no 1. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr || tab == fieldstart) {
+ LOG(spam, "bad logline no 1. tab: %.*s", llength, linestart);
++_badLines;
return false;
}
@@ -85,23 +83,20 @@ Forwarder::parseline(const char *linestart, const char *lineend)
double logtime = vespalib::locale::c::strtod(fieldstart, &eod);
if (eod != tab) {
int fflen = tab - linestart;
- LOG(spam, "bad logline first field not strtod parsable: %.*s",
- fflen, linestart);
+ LOG(spam, "bad logline first field not strtod parsable: %.*s", fflen, linestart);
++_badLines;
return false;
}
- time_t now = time(NULL);
+ time_t now = time(nullptr);
if (logtime - 864000 > now) {
int fflen = tab - linestart;
- LOG(warning, "bad logline, time %.*s > 10 days in the future",
- fflen, linestart);
+ LOG(warning, "bad logline, time %.*s > 10 days in the future", fflen, linestart);
++_badLines;
return false;
}
if (logtime + 8640000 < now) {
int fflen = tab - linestart;
- LOG(warning, "bad logline, time %.*s > 100 days in the past",
- fflen, linestart);
+ LOG(warning, "bad logline, time %.*s > 100 days in the past", fflen, linestart);
++_badLines;
return false;
}
@@ -109,9 +104,8 @@ Forwarder::parseline(const char *linestart, const char *lineend)
// hostname
fieldstart = tab + 1;
tab = strchr(fieldstart, '\t');
- if (tab == NULL) {
- LOG(spam, "bad logline no 2. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr) {
+ LOG(spam, "bad logline no 2. tab: %.*s", llength, linestart);
++_badLines;
return false;
}
@@ -119,9 +113,8 @@ Forwarder::parseline(const char *linestart, const char *lineend)
// pid
fieldstart = tab + 1;
tab = strchr(fieldstart, '\t');
- if (tab == NULL || tab == fieldstart) {
- LOG(spam, "bad logline no 3. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr || tab == fieldstart) {
+ LOG(spam, "bad logline no 3. tab: %.*s", llength, linestart);
return false;
}
int pid = strtol(fieldstart, &eod, 10);
@@ -130,45 +123,40 @@ Forwarder::parseline(const char *linestart, const char *lineend)
// service
fieldstart = tab + 1;
tab = strchr(fieldstart, '\t');
- if (tab == NULL) {
- LOG(spam, "bad logline no 4. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr) {
+ LOG(spam, "bad logline no 4. tab: %.*s", llength, linestart);
++_badLines;
return false;
}
if (tab == fieldstart) {
- LOG(spam, "empty service in logline: %.*s",
- llength, linestart);
+ LOG(spam, "empty service in logline: %.*s", llength, linestart);
}
- string service(fieldstart, tab-fieldstart);
+ std::string service(fieldstart, tab-fieldstart);
// component
fieldstart = tab + 1;
tab = strchr(fieldstart, '\t');
- if (tab == NULL || tab == fieldstart) {
- LOG(spam, "bad logline no 5. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr || tab == fieldstart) {
+ LOG(spam, "bad logline no 5. tab: %.*s", llength, linestart);
++_badLines;
return false;
}
- string component(fieldstart, tab-fieldstart);
+ std::string component(fieldstart, tab-fieldstart);
// level
fieldstart = tab + 1;
tab = strchr(fieldstart, '\t');
- if (tab == NULL || tab == fieldstart) {
- LOG(spam, "bad logline no 6. tab: %.*s",
- llength, linestart);
+ if (tab == nullptr || tab == fieldstart) {
+ LOG(spam, "bad logline no 6. tab: %.*s", llength, linestart);
++_badLines;
return false;
}
- string level(fieldstart, tab-fieldstart);
+ std::string level(fieldstart, tab-fieldstart);
LogLevel l = _levelparser.parseLevel(level.c_str());
// rest is freeform message, must be on this line:
if (tab > lineend) {
- LOG(spam, "bad logline last tab after end: %.*s",
- llength, linestart);
+ LOG(spam, "bad logline last tab after end: %.*s", llength, linestart);
++_badLines;
return false;
}
@@ -181,8 +169,8 @@ Forwarder::parseline(const char *linestart, const char *lineend)
return found->second;
}
- Service *svcp = knownServices.getService(service.c_str());
- Component *cp = svcp->getComponent(component.c_str());
+ Service *svcp = knownServices.getService(service);
+ Component *cp = svcp->getComponent(component);
cp->remember(logtime, pid);
bool retval = cp->shouldForward(l);
return retval;
@@ -197,9 +185,9 @@ LevelParser::parseLevel(const char *level)
if (l >= 0 && l <= Logger::NUM_LOGLEVELS) {
return l;
}
- if (! _seenLevelMap[level]) {
+ if (_seenLevelMap.find(level) == _seenLevelMap.end()) {
LOG(warning, "unknown level '%s'", level);
- _seenLevelMap.set(level, true);
+ _seenLevelMap.insert(level);
}
return Logger::fatal;
}
diff --git a/logd/src/logd/forward.h b/logd/src/logd/forward.h
index e012db205fe..78e63500295 100644
--- a/logd/src/logd/forward.h
+++ b/logd/src/logd/forward.h
@@ -1,15 +1,17 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
#include "service.h"
-#include "metrics.h"
-#include <vespa/vespalib/util/hashmap.h>
#include <map>
+#include <unordered_set>
namespace logdemon {
-typedef vespalib::HashMap<bool> SeenMap;
+using SeenMap = std::unordered_set<std::string>;
// Mapping saying if a level should be forwarded or not
-typedef std::map<ns_log::Logger::LogLevel, bool> ForwardMap;
+using ForwardMap = std::map<ns_log::Logger::LogLevel, bool>;
+
+class Metrics;
class LevelParser
{
@@ -17,7 +19,7 @@ private:
SeenMap _seenLevelMap;
public:
ns_log::Logger::LogLevel parseLevel(const char *level);
- LevelParser() : _seenLevelMap(false) {}
+ LevelParser() : _seenLevelMap() {}
};
class Forwarder
@@ -48,4 +50,4 @@ public:
void sendMode();
};
-} // namespace
+}
diff --git a/logd/src/logd/metrics.cpp b/logd/src/logd/metrics.cpp
index 1a70a2226e2..edfa44021d5 100644
--- a/logd/src/logd/metrics.cpp
+++ b/logd/src/logd/metrics.cpp
@@ -1,3 +1,26 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "metrics.h"
+
+namespace logdemon {
+
+Metrics::Metrics(std::shared_ptr<MetricsManager> m)
+ : metrics(std::move(m)),
+ loglevel(metrics->dimension("loglevel")),
+ servicename(metrics->dimension("service")),
+ loglines(metrics->counter("logd.processed.lines",
+ "how many log lines have been processed"))
+{}
+
+Metrics::~Metrics() = default;
+
+void
+Metrics::countLine(const vespalib::string &level, const vespalib::string &service) const
+{
+ Point p = metrics->pointBuilder()
+ .bind(loglevel, level)
+ .bind(servicename, service);
+ loglines.add(1, p);
+}
+
+}
diff --git a/logd/src/logd/metrics.h b/logd/src/logd/metrics.h
index b5bc5a7dcd7..5a1a577cbf7 100644
--- a/logd/src/logd/metrics.h
+++ b/logd/src/logd/metrics.h
@@ -16,24 +16,10 @@ struct Metrics {
const Dimension servicename;
const Counter loglines;
- Metrics(std::shared_ptr<MetricsManager> m)
- : metrics(m),
- loglevel(metrics->dimension("loglevel")),
- servicename(metrics->dimension("service")),
- loglines(metrics->counter("logd.processed.lines",
- "how many log lines have been processed"))
- {}
+ Metrics(std::shared_ptr<MetricsManager> m);
+ ~Metrics();
- ~Metrics() {}
-
- void countLine(const vespalib::string &level,
- const vespalib::string &service) const
- {
- Point p = metrics->pointBuilder()
- .bind(loglevel, level)
- .bind(servicename, service);
- loglines.add(1, p);
- }
+ void countLine(const vespalib::string &level, const vespalib::string &service) const;
};
} // namespace logdemon
diff --git a/logd/src/logd/perform.cpp b/logd/src/logd/perform.cpp
index fdda358a365..07afac88841 100644
--- a/logd/src/logd/perform.cpp
+++ b/logd/src/logd/perform.cpp
@@ -1,29 +1,17 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <vespa/log/log.h>
-LOG_SETUP("");
-LOG_RCSID("$Id$");
-
-#include "service.h"
-#include "forward.h"
#include "perform.h"
#include "cmdbuf.h"
+#include <cassert>
+
+#include <vespa/log/log.h>
+LOG_SETUP("");
namespace logdemon {
-Performer::~Performer()
-{
-}
+namespace {
-static bool
+bool
isPrefix(const char *prefix, const char *line)
{
while (*prefix) {
@@ -32,10 +20,11 @@ isPrefix(const char *prefix, const char *line)
return true;
}
-ExternalPerformer::~ExternalPerformer()
-{
}
+Performer::~Performer() = default;
+ExternalPerformer::~ExternalPerformer() = default;
+
void
ExternalPerformer::listStates(const char *service, const char *component)
{
@@ -56,16 +45,13 @@ ExternalPerformer::listStates(const char *service, const char *component)
levstate = "store";
}
}
- pos += snprintf(buf+pos, 1024-pos, "%s=%s,",
- Logger::logLevelNames[i],
- levstate);
+ pos += snprintf(buf+pos, 1024-pos, "%s=%s,", Logger::logLevelNames[i], levstate);
}
if (pos < 1000) {
buf[pos-1]='\n';
_forwarder.forwardText(buf, pos);
} else {
- LOG(warning, "buffer to small to list states[%s, %s]",
- service, component);
+ LOG(warning, "buffer to small to list states[%s, %s]", service, component);
}
}
@@ -73,42 +59,36 @@ void
ExternalPerformer::doCmd(char *line)
{
if (isPrefix("list services", line)) {
- ServIter it = _services._services.iterator();
- while (it.valid()) {
+ for (const auto & entry : _services._services) {
char buf[1024];
- snprintf(buf, 1024, "service %s\n", it.key());
+ snprintf(buf, 1024, "service %s\n", entry.first.c_str());
_forwarder.forwardText(buf, strlen(buf));
- it.next();
}
return;
}
if (isPrefix("list components ", line)) {
const char *servstr = line+5+11;
Service *svc = _services.getService(servstr);
- CompIter it = svc->_components.iterator();
- while (it.valid()) {
+ for (const auto & entry : svc->components()) {
+ const char * key = entry.first.c_str();
char buf[1024];
- snprintf(buf, 1024, "component %s %s\n", servstr, it.key());
+ snprintf(buf, 1024, "component %s %s\n", servstr, key);
int len = strlen(buf);
if (len < 1000) {
_forwarder.forwardText(buf, len);
} else {
- LOG(warning, "buffer too small to list component %s %s",
- servstr, it.key());
+ LOG(warning, "buffer too small to list component %s %s", servstr, key);
}
- it.next();
}
return;
}
if (isPrefix("list states ", line)) {
char *servstr = line+5+7;
char *compstr = strchr(servstr, ' ');
- if (compstr == NULL) {
+ if (compstr == nullptr) {
Service *svc = _services.getService(servstr);
- CompIter it = svc->_components.iterator();
- while (it.valid()) {
- listStates(servstr, it.key());
- it.next();
+ for (const auto & entry : svc->components()) {
+ listStates(servstr, entry.first.c_str());
}
return;
}
@@ -118,26 +98,25 @@ ExternalPerformer::doCmd(char *line)
}
if (isPrefix("setallstates", line)) {
char *levmods = strchr(line, ' ');
- if (levmods == NULL) {
+ if (levmods == nullptr) {
LOG(error, "bad command: %s", line);
} else {
- char *orig = strdup(line);
+ std::string orig(line);
*levmods++ = '\0';
- doSetAllStates(levmods, orig);
- free(orig);
+ doSetAllStates(levmods, orig.c_str());
}
return;
}
if (isPrefix("setstate ", line)) {
char *servstr = line + 9;
char *compstr = strchr(servstr, ' ');
- if (compstr == NULL) {
+ if (compstr == nullptr) {
LOG(error, "bad command: %s", line);
return;
}
*compstr++ = '\0';
char *levmods = strchr(compstr, ' ');
- if (levmods == NULL) {
+ if (levmods == nullptr) {
LOG(error, "bad command: %s %s", line, compstr);
return;
}
@@ -145,7 +124,7 @@ ExternalPerformer::doCmd(char *line)
Service *svc = _services.getService(servstr);
Component *cmp = svc->getComponent(compstr);
- if (doSetState(levmods, cmp, line) == NULL) return;
+ if (doSetState(levmods, cmp, line) == nullptr) return;
// maybe ???
listStates(servstr, compstr);
@@ -183,12 +162,11 @@ ExternalPerformer::doCmd(char *line)
}
void
-ExternalPerformer::doSetAllStates(char *levmods, char *origline) {
+ExternalPerformer::doSetAllStates(char *levmods, const char *origline) {
while (levmods) {
char *newval = strchr(levmods, '=');
if (!newval) {
- LOG(error, "bad command %s : expected level=value, got %s",
- origline, levmods);
+ LOG(error, "bad command %s : expected level=value, got %s", origline, levmods);
return;
}
*newval++ = '\0';
@@ -196,12 +174,10 @@ ExternalPerformer::doSetAllStates(char *levmods, char *origline) {
LogLevel level = _levelparser.parseLevel(levmods);
char *nextlev = strchr(newval, ',');
if (nextlev) *nextlev++ = '\0';
- ServIter it = _services._services.iterator();
- while (it.valid()) {
- Service *svc = _services.getService(it.key());
- CompIter cit = svc->_components.iterator();
- while (cit.valid()) {
- Component *cmp = svc->getComponent(cit.key());
+ for (const auto & serviceEntry : _services._services) {
+ Service *svc = _services.getService(serviceEntry.first);
+ for (const auto & entry : svc->components()) {
+ Component *cmp = svc->getComponent(entry.first);
assert(cmp != 0);
if (strcmp(newval, "forward") == 0) {
@@ -216,14 +192,10 @@ ExternalPerformer::doSetAllStates(char *levmods, char *origline) {
cmp->dontForward(level);
cmp->dontLogAtAll(level);
} else {
- LOG(error, "bad command %s: want forward/store/off, got %s",
- origline, newval);
+ LOG(error, "bad command %s: want forward/store/off, got %s", origline, newval);
return;
}
-
- cit.next();
}
- it.next();
}
levmods = nextlev;
@@ -235,9 +207,8 @@ ExternalPerformer::doSetState(char *levmods, Component *cmp, char * line) {
while (levmods) {
char *newval = strchr(levmods, '=');
if (!newval) {
- LOG(error, "bad command %s : expected level=value, got %s",
- line, levmods);
- return NULL;
+ LOG(error, "bad command %s : expected level=value, got %s", line, levmods);
+ return nullptr;
}
*newval++ = '\0';
@@ -256,9 +227,8 @@ ExternalPerformer::doSetState(char *levmods, Component *cmp, char * line) {
cmp->dontForward(level);
cmp->dontLogAtAll(level);
} else {
- LOG(error, "bad command %s %s=%s: want forward/store/off",
- line, levmods, newval);
- return NULL;
+ LOG(error, "bad command %s %s=%s: want forward/store/off", line, levmods, newval);
+ return nullptr;
}
levmods = nextlev;
}
@@ -271,20 +241,20 @@ InternalPerformer::doCmd(char *line)
if (isPrefix("setstate ", line)){
char *servstr = line + 9;
char *compstr = strchr(servstr, ' ');
- if (compstr == NULL) {
+ if (compstr == nullptr) {
LOG(error, "bad internal command: %s", line);
return;
}
*compstr++ = '\0';
char *levmods = strchr(compstr, ' ');
- if (levmods == NULL) {
+ if (levmods == nullptr) {
LOG(error, "bad internal command: %s %s", line, compstr);
return;
}
*levmods++ = '\0';
// ignore services with slash in the name, invalid
- if (strchr(servstr, '/') != NULL)
+ if (strchr(servstr, '/') != nullptr)
return;
Service *svc = _services.getService(servstr);
@@ -293,8 +263,7 @@ InternalPerformer::doCmd(char *line)
while (levmods) {
char *newval = strchr(levmods, '=');
if (!newval) {
- LOG(error, "bad internal %s %s: expected level=value, got %s",
- line, compstr, levmods);
+ LOG(error, "bad internal %s %s: expected level=value, got %s", line, compstr, levmods);
return;
}
*newval++ = '\0';
@@ -309,8 +278,7 @@ InternalPerformer::doCmd(char *line)
} else if (strcmp(newval, "off") == 0) {
cmp->dontForward(level);
} else {
- LOG(error, "bad internal %s %s %s=%s: want forward/store/off",
- line, compstr, levmods, newval);
+ LOG(error, "bad internal %s %s %s=%s: want forward/store/off", line, compstr, levmods, newval);
return;
}
levmods = nextlev;
diff --git a/logd/src/logd/perform.h b/logd/src/logd/perform.h
index 0b045c4c34e..0303360fe49 100644
--- a/logd/src/logd/perform.h
+++ b/logd/src/logd/perform.h
@@ -1,5 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
+#include "forward.h"
+
namespace logdemon {
class Performer
@@ -20,7 +23,7 @@ private:
void listStates(const char *service, const char *component);
public:
void doCmd(char *line) override;
- void doSetAllStates(char *levmods, char * line);
+ void doSetAllStates(char *levmods, const char * line);
char *doSetState(char *levmods, Component *cmp, char *line);
ExternalPerformer(Forwarder& fw, Services& s)
: _forwarder(fw), _services(s) {}
diff --git a/logd/src/logd/service.cpp b/logd/src/logd/service.cpp
index cd4304f5405..88d17a93b44 100644
--- a/logd/src/logd/service.cpp
+++ b/logd/src/logd/service.cpp
@@ -1,25 +1,26 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <sys/stat.h>
+#include "service.h"
#include <cassert>
+#include <unistd.h>
#include <vespa/log/log.h>
#include <vespa/log/control-file.h>
LOG_SETUP("logdemon");
-LOG_RCSID("$Id$");
-#include "service.h"
namespace logdemon {
unsigned long Component::defFwd = (unsigned long)-1;
+Component::Component(const std::string & servicename, const std::string & name)
+ : _isforwarding(defFwd), _lastseen(0.0), _lastpid(0),
+ _myservice(servicename), _myname(name),
+ _logctlname(name.substr(name.find('.')))
+{
+ assert(ns_log::Logger::NUM_LOGLEVELS < 32);
+}
+
+Component::~Component() = default;
void
Component::doLogAtAll(LogLevel level)
@@ -27,16 +28,16 @@ Component::doLogAtAll(LogLevel level)
using ns_log::ControlFile;
char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice, lcfn, FILENAME_MAX)) {
- LOG(debug, "no logcontrol file for service '%s'", _myservice);
+ if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
+ LOG(debug, "no logcontrol file for service '%s'", _myservice.c_str());
return;
}
try {
ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname);
+ unsigned int *lstring = foo.getLevels(_logctlname.c_str());
lstring[level] = CHARS_TO_UINT(' ', ' ', 'O', 'N');
} catch (...) {
- LOG(debug, "exception changing logcontrol for %s", _myservice);
+ LOG(debug, "exception changing logcontrol for %s", _myservice.c_str());
}
}
@@ -46,94 +47,96 @@ Component::dontLogAtAll(LogLevel level)
using ns_log::ControlFile;
char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice, lcfn, FILENAME_MAX)) {
- LOG(debug, "no logcontrol file for service '%s'", _myservice);
+ if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
+ LOG(debug, "no logcontrol file for service '%s'", _myservice.c_str());
return;
}
try {
ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname);
+ unsigned int *lstring = foo.getLevels(_logctlname.c_str());
lstring[level] = CHARS_TO_UINT(' ', 'O', 'F', 'F');
} catch (...) {
- LOG(debug, "exception changing logcontrol for %s", _myservice);
+ LOG(debug, "exception changing logcontrol for %s", _myservice.c_str());
}
}
bool
-Component::shouldLogAtAll(LogLevel level)
+Component::shouldLogAtAll(LogLevel level) const
{
using ns_log::ControlFile;
char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice, lcfn, FILENAME_MAX)) {
- LOG(spam, "no logcontrol file for service '%s'", _myservice);
+ if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
+ LOG(spam, "no logcontrol file for service '%s'", _myservice.c_str());
return true;
}
try {
ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname);
- if (lstring[level] == CHARS_TO_UINT(' ', ' ', 'O', 'N'))
- return true;
- else
- return false;
+ unsigned int *lstring = foo.getLevels(_logctlname.c_str());
+ return (lstring[level] == CHARS_TO_UINT(' ', ' ', 'O', 'N'));
} catch (...) {
- LOG(debug, "exception checking logcontrol for %s", _myservice);
+ LOG(debug, "exception checking logcontrol for %s", _myservice.c_str());
}
return true;
}
-
-Service::~Service()
+Service::Service(const std::string & name)
+ : _myname(name),
+ _components()
{
- CompIter it = _components.iterator();
- while (it.valid()) {
- delete it.value();
- it.next();
+}
+
+Service::~Service() = default;
+
+Component *
+Service::getComponent(const std::string & comp) {
+ auto found = _components.find(comp);
+ if (found == _components.end()) {
+ _components[comp] = std::make_unique<Component>(_myname, comp);
+ found = _components.find(comp);
}
- free(_myname);
+ return found->second.get();
}
-Services::~Services()
-{
- ServIter it = _services.iterator();
- while (it.valid()) {
- delete it.value();
- it.next();
+Service *
+Services::getService(const std::string & serv) {
+ auto found = _services.find(serv);
+ if (found == _services.end()) {
+ _services[serv] = std::make_unique<Service>(serv);
+ found = _services.find(serv);
}
+ return found->second.get();
}
+Services::Services() = default;
+Services::~Services() = default;
+
void
Services::dumpState(int fildesc)
{
using ns_log::Logger;
- ServIter sit = _services.iterator();
- while (sit.valid()) {
- Service *svc = sit.value();
- CompIter it = svc->_components.iterator();
- while (it.valid()) {
- Component *cmp = it.value();
+ for (const auto & serviceEntry : _services) {
+ const Service & svc = *serviceEntry.second;
+ const char * service = serviceEntry.first.c_str();
+ for (const auto & entry : svc.components()) {
+ const Component & cmp = *entry.second;
+ const char * key = entry.first.c_str();
char buf[1024];
- int pos = snprintf(buf, 1024, "setstate %s %s ",
- sit.key(), it.key());
+ int pos = snprintf(buf, 1024, "setstate %s %s ", service, key);
for (int i = 0; pos < 1000 && i < Logger::NUM_LOGLEVELS; i++) {
LogLevel l = static_cast<LogLevel>(i);
- pos += snprintf(buf+pos, 1024-pos, "%s=%s,",
- Logger::logLevelNames[i],
- cmp->shouldForward(l) ? "forward" : "store");
+ pos += snprintf(buf+pos, 1024-pos, "%s=%s,", Logger::logLevelNames[i],
+ cmp.shouldForward(l) ? "forward" : "store");
}
if (pos < 1000) {
buf[pos-1]='\n';
write(fildesc, buf, pos);
} else {
- LOG(warning, "buffer to small to dumpstate[%s, %s]",
- sit.key(), it.key());
+ LOG(warning, "buffer to small to dumpstate[%s, %s]", service, key);
}
- it.next();
}
- sit.next();
}
}
-
-} // namespace
+}
diff --git a/logd/src/logd/service.h b/logd/src/logd/service.h
index 09b4ca3fa4b..65f580ee54e 100644
--- a/logd/src/logd/service.h
+++ b/logd/src/logd/service.h
@@ -2,9 +2,8 @@
#pragma once
#include <logd/config-logd.h>
-#include <vespa/vespalib/util/hashmap.h>
#include <vespa/log/log.h>
-#include <cassert>
+#include <unordered_map>
namespace logdemon {
@@ -12,15 +11,12 @@ typedef ns_log::Logger::LogLevel LogLevel;
class Component
{
- unsigned long _isforwarding;
- double _lastseen;
- int _lastpid;
- const char *_myservice;
- char *_myname;
- char *_logctlname;
-
- Component(const Component& other);
- Component& operator= (const Component& other);
+ unsigned long _isforwarding;
+ double _lastseen;
+ int _lastpid;
+ std::string _myservice;
+ std::string _myname;
+ std::string _logctlname;
static unsigned long defFwd;
public:
@@ -29,67 +25,40 @@ public:
void doForward(LogLevel level) { _isforwarding |= (1 << level); }
void dontForward(LogLevel level) { _isforwarding &= ~(1 << level); }
- bool shouldForward(LogLevel level) {
+ bool shouldForward(LogLevel level) const {
return ((_isforwarding & (1 << level)) != 0);
}
void doLogAtAll(LogLevel level);
void dontLogAtAll(LogLevel level);
- bool shouldLogAtAll(LogLevel level);
- Component(const char *servicename, const char *name)
- : _isforwarding(defFwd), _lastseen(0.0), _lastpid(0),
- _myservice(servicename), _myname(strdup(name)),
- _logctlname(strdup(name))
- {
- assert(ns_log::Logger::NUM_LOGLEVELS < 32);
- const char *withoutprefix = strchr(name, '.');
- if (withoutprefix != NULL) {
- strcpy(_logctlname, withoutprefix);
- } else {
- strcpy(_logctlname, "");
- }
- }
- ~Component() { free(_myname); free(_logctlname); }
+ bool shouldLogAtAll(LogLevel level) const;
+ Component(const std::string & servicename, const std::string & name);
+ ~Component();
void remember(double t, int p) { _lastseen = t; _lastpid = p; }
double lastSeen() const { return _lastseen; }
double lastPid() const { return _lastpid; }
};
-typedef vespalib::HashMap<Component *> CompMap;
-typedef vespalib::HashMap<Component *>::Iterator CompIter;
-
class Service
{
-private:
- char *_myname;
- Service(const Service& other);
- Service& operator= (const Service& other);
public:
- CompMap _components;
- Component *getComponent(const char *comp) {
- if (! _components.isSet(comp)) {
- _components.set(comp, new Component(_myname, comp));
- }
- return _components[comp];
- }
- Service(const char *name)
- : _myname(strdup(name)), _components(NULL) {}
+ using ComponentMap = std::unordered_map<std::string, std::unique_ptr<Component>>;
+ Service(const Service& other) = delete;
+ Service& operator= (const Service& other) = delete;
+ Service(const std::string & name);
~Service();
+ Component *getComponent(const std::string & comp);
+ const ComponentMap & components() const { return _components; }
+private:
+ std::string _myname;
+ ComponentMap _components;
};
-typedef vespalib::HashMap<Service *> ServMap;
-typedef vespalib::HashMap<Service *>::Iterator ServIter;
-
class Services
{
public:
- ServMap _services;
- Service *getService(const char *serv) {
- if (! _services.isSet(serv)) {
- _services.set(serv, new Service(serv));
- }
- return _services[serv];
- }
- Services() : _services(NULL) {}
+ std::unordered_map<std::string, std::unique_ptr<Service>> _services;
+ Service *getService(const std::string & serv);
+ Services();
~Services();
void dumpState(int fildesc);
};
diff --git a/logd/src/logd/state.cpp b/logd/src/logd/state.cpp
index e1df1412215..edea951aca7 100644
--- a/logd/src/logd/state.cpp
+++ b/logd/src/logd/state.cpp
@@ -1,11 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/log/log.h>
-LOG_SETUP("");
-
#include "state.h"
#include <vespa/vespalib/metrics/simple_metrics_manager.h>
+#include <vespa/log/log.h>
+LOG_SETUP("");
+
namespace logdemon {
using vespalib::metrics::SimpleMetricsManager;
@@ -21,6 +21,8 @@ StateReporter::StateReporter()
{
}
+StateReporter::~StateReporter() = default;
+
void
StateReporter::setStatePort(int statePort)
{
diff --git a/logd/src/logd/state.h b/logd/src/logd/state.h
index 59c9741e68f..3bd6513dce7 100644
--- a/logd/src/logd/state.h
+++ b/logd/src/logd/state.h
@@ -19,7 +19,7 @@ class StateReporter {
vespalib::metrics::Producer _producer;
public:
StateReporter();
- ~StateReporter() {}
+ ~StateReporter();
void setStatePort(int statePort);
void gotConf(size_t generation);
std::shared_ptr<vespalib::metrics::MetricsManager> metrics() { return _metrics; }
diff --git a/logd/src/logd/watch.cpp b/logd/src/logd/watch.cpp
index 2adc1cbbdbb..ec27e0ad0e1 100644
--- a/logd/src/logd/watch.cpp
+++ b/logd/src/logd/watch.cpp
@@ -1,10 +1,10 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include "watch.h"
#include "errhandle.h"
#include "service.h"
#include "forward.h"
#include "conf.h"
-#include "watch.h"
#include "perform.h"
#include "cmdbuf.h"
#include <glob.h>
@@ -41,7 +41,7 @@ void snooze(const struct timeval &start)
tsp.tv_sec = (wait_usecs / 1000000);
tsp.tv_nsec = (wait_usecs % 1000000) * 1000;
- if (nanosleep(&tsp, NULL) != 0 && errno != EINTR) {
+ if (nanosleep(&tsp, nullptr) != 0 && errno != EINTR) {
LOG(error, "nanosleep %ld s %ld ns failed: %s",
(long)tsp.tv_sec, (long)tsp.tv_nsec, strerror(errno));
throw SomethingBad("nanosleep failed");
@@ -58,25 +58,20 @@ int elapsed(struct timeval &start) {
return diffsecs;
}
+constexpr size_t G_BUFSIZE = 1024*1024;
} // namespace logdemon::<unnamed>
-static const int bufsiz = 1024*1024;
Watcher::Watcher(ConfSub &cfs, Forwarder &fw)
- : _buffer(new char[bufsiz]),
+ : _buffer(G_BUFSIZE),
_confsubscriber(cfs),
_forwarder(fw),
_wfd(-1)
{
- if (_buffer == NULL) {
- LOG(error, "could not allocate 1MB memory");
- throw SomethingBad("out of memory");
- }
}
Watcher::~Watcher()
{
- delete[] _buffer;
if (_wfd >= 0) {
LOG(debug, "~Watcher closing %d", _wfd);
close(_wfd);
@@ -103,8 +98,7 @@ private:
int _cachecounter;
};
-void StateSaver::saveState(const donecache& already,
- Services& currentserv)
+void StateSaver::saveState(const donecache& already, Services& currentserv)
{
if (_savefd < 0) {
// cannot save state
@@ -125,8 +119,7 @@ void StateSaver::saveState(const donecache& already,
if (here == (off_t)-1) {
LOG(error, "lseek failed: %s", strerror(errno));
} else if (ftruncate(_savefd, here) < 0) {
- LOG(error, "ftruncate %d=%d failed: %s",
- _savefd, (int)here, strerror(errno));
+ LOG(error, "ftruncate %d=%d failed: %s", _savefd, (int)here, strerror(errno));
}
_cachecounter = 0;
}
@@ -155,8 +148,7 @@ StateSaver::StateSaver() : _savefd(-1), _cachecounter(300)
{
_savefd = open("var/db/vespa/logd.donestate", O_RDWR|O_CREAT, 0664);
if (_savefd < 0) {
- LOG(warning, "could not open var/db/vespa/logd.donestate: %s",
- strerror(errno));
+ LOG(warning, "could not open var/db/vespa/logd.donestate: %s", strerror(errno));
}
}
@@ -174,9 +166,8 @@ Watcher::watchfile()
struct donecache already;
char *target = getenv("VESPA_LOG_TARGET");
- if (target == NULL || strncmp(target, "file:", 5) != 0) {
- LOG(error, "expected VESPA_LOG_TARGET (%s) to be a file: target",
- target);
+ if (target == nullptr || strncmp(target, "file:", 5) != 0) {
+ LOG(error, "expected VESPA_LOG_TARGET (%s) to be a file: target", target);
throw SomethingBad("bad log target");
}
const char *filename = target+5;
@@ -204,8 +195,7 @@ Watcher::watchfile()
// XXX should close and/or check _wfd first ?
_wfd = open(filename, O_RDONLY|O_CREAT, 0664);
if (_wfd < 0) {
- LOG(error, "open(%s) failed: %s", filename,
- strerror(errno));
+ LOG(error, "open(%s) failed: %s", filename, strerror(errno));
throw SomethingBad("could not create or open logfile");
}
@@ -216,8 +206,7 @@ Watcher::watchfile()
while (1) {
struct stat sb;
if (fstat(_wfd, &sb) != 0) {
- LOG(error, "fstat(%s) failed: %s", filename,
- strerror(errno));
+ LOG(error, "fstat(%s) failed: %s", filename, strerror(errno));
throw SomethingBad("fstat failed");
}
if (created == 0) {
@@ -236,8 +225,7 @@ Watcher::watchfile()
if (sb.st_size < offset) {
// this is bad, maybe somebody else truncated the file
- LOG(error, "file mysteriously shrunk %d -> %d",
- (int)offset, (int)sb.st_size);
+ LOG(error, "file mysteriously shrunk %d -> %d", (int)offset, (int)sb.st_size);
return;
}
@@ -246,18 +234,17 @@ Watcher::watchfile()
if (sb.st_size > offset) {
lseek(_wfd, offset, SEEK_SET);
- ssize_t rsize = read(_wfd, _buffer, bufsiz - 1);
+ char *buffer = getBuf();
+ ssize_t rsize = read(_wfd, buffer, (getBufSize() - 1));
if (rsize > 0) {
- _buffer[rsize] = '\0';
- char *l = _buffer;
- char *nnl = (char *)memchr(_buffer, '\n', rsize);
- if (nnl == NULL && rsize == bufsiz - 1) {
- // incredibly long block without any newline ?
- LOG(error, "no newline in %ld bytes, skipping",
- static_cast<long>(rsize));
+ buffer[rsize] = '\0';
+ char *l = buffer;
+ char *nnl = (char *)memchr(buffer, '\n', rsize);
+ if (nnl == nullptr && rsize == (getBufSize() - 1)) {
+ LOG(error, "no newline in %ld bytes, skipping", static_cast<long>(rsize));
offset += rsize;
}
- while (nnl != NULL && elapsed(tickStart) < 1) {
+ while (nnl != nullptr && elapsed(tickStart) < 1) {
++nnl;
_forwarder.forwardLine(l, nnl);
ssize_t wsize = nnl - l;
@@ -266,8 +253,7 @@ Watcher::watchfile()
nnl = strchr(l, '\n');
}
} else {
- LOG(error, "could not read from %s: %s",
- filename, strerror(errno));
+ LOG(error, "could not read from %s: %s", filename, strerror(errno));
throw SomethingBad("read failed");
}
}
@@ -276,15 +262,13 @@ Watcher::watchfile()
already.st_dev = sb.st_dev;
already.st_ino = sb.st_ino;
- time_t now = time(NULL);
+ time_t now = time(nullptr);
bool wantrotate = (now > created + _confsubscriber.getRotateAge())
|| (sb.st_size > _confsubscriber.getRotateSize());
if (rotate) {
int rotTime = elapsed(rotStart);
- if (rotTime > 59 ||
- (sb.st_size == offset && rotTime > 4))
- {
+ if (rotTime > 59 || (sb.st_size == offset && rotTime > 4)) {
removeOldLogs(filename);
if (sb.st_size != offset) {
LOG(warning, "logfile rotation incomplete after %d s (dropping %lu bytes)",
@@ -314,16 +298,14 @@ Watcher::watchfile()
int l = strlen(filename);
strcpy(newfn, filename);
struct tm *nowtm = gmtime(&now);
- if (strftime(newfn+l, FILENAME_MAX-l-1,
- "-%Y-%m-%d.%H-%M-%S", nowtm) < 10)
+ if (strftime(newfn+l, FILENAME_MAX-l-1, "-%Y-%m-%d.%H-%M-%S", nowtm) < 10)
{
LOG(error, "could not strftime");
throw SomethingBad("strftime failed");
}
if (rename(filename, newfn) != 0) {
- LOG(error, "could not rename logfile %s -> %s: %s",
- filename, newfn, strerror(errno));
+ LOG(error, "could not rename logfile %s -> %s: %s", filename, newfn, strerror(errno));
throw SomethingBad("rename failed");
} else {
LOG(debug, "old logfile name: %s", newfn);
@@ -355,8 +337,7 @@ Watcher::watchfile()
}
if (++sleepcount > 99) {
if (_forwarder._badLines) {
- LOG(info, "seen %d bad loglines in %d iterations",
- _forwarder._badLines, sleepcount);
+ LOG(info, "seen %d bad loglines in %d iterations", _forwarder._badLines, sleepcount);
_forwarder._badLines = 0;
sleepcount=0;
}
@@ -388,7 +369,7 @@ Watcher::removeOldLogs(const char *prefix)
myglob.gl_pathc = 0;
myglob.gl_offs = 0;
myglob.gl_flags = 0;
- myglob.gl_pathv = NULL;
+ myglob.gl_pathv = nullptr;
off_t totalsize = 0;
@@ -404,10 +385,10 @@ Watcher::removeOldLogs(const char *prefix)
}
if (S_ISREG(sb.st_mode)) {
if (sb.st_mtime +
- _confsubscriber.getRemoveAge() * 86400 < time(NULL))
+ _confsubscriber.getRemoveAge() * 86400 < time(nullptr))
{
LOG(info, "removing %s, too old (%f days)", fname,
- (double)(time(NULL)-sb.st_mtime)/86400.0);
+ (double)(time(nullptr)-sb.st_mtime)/86400.0);
if (unlink(fname) != 0) {
LOG(warning, "cannot remove %s: %s",
@@ -416,14 +397,11 @@ Watcher::removeOldLogs(const char *prefix)
continue;
}
totalsize += sb.st_size;
- if (totalsize > (_confsubscriber.getRemoveMegabytes()
- * 1048576LL))
+ if (totalsize > (_confsubscriber.getRemoveMegabytes() * 1048576LL))
{
- LOG(info, "removing %s, total size (%ld) too big",
- fname, static_cast<int64_t>(totalsize));
+ LOG(info, "removing %s, total size (%ld) too big", fname, static_cast<int64_t>(totalsize));
if (unlink(fname) != 0) {
- LOG(warning, "cannot remove %s: %s",
- fname, strerror(errno));
+ LOG(warning, "cannot remove %s: %s", fname, strerror(errno));
}
}
} else {
diff --git a/logd/src/logd/watch.h b/logd/src/logd/watch.h
index 29523181303..bcac6046b6f 100644
--- a/logd/src/logd/watch.h
+++ b/logd/src/logd/watch.h
@@ -1,18 +1,25 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
+
+#include <vector>
+
namespace logdemon {
+class Forwarder;
+class ConfSub;
+
class Watcher
{
private:
- char *_buffer;
- ConfSub& _confsubscriber;
- Forwarder& _forwarder;
- int _wfd;
-
- Watcher(const Watcher& other);
- Watcher& operator=(const Watcher& other);
+ std::vector<char> _buffer;
+ ConfSub & _confsubscriber;
+ Forwarder & _forwarder;
+ int _wfd;
+ char * getBuf() { return &_buffer[0]; }
+ long getBufSize() const { return _buffer.size(); }
public:
+ Watcher(const Watcher& other) = delete;
+ Watcher& operator=(const Watcher& other) = delete;
Watcher(ConfSub &cfs, Forwarder &fw);
~Watcher();
@@ -20,4 +27,4 @@ public:
void removeOldLogs(const char *prefix);
};
-} // namespace
+}
diff --git a/logd/src/tests/forward/forward.cpp b/logd/src/tests/forward/forward.cpp
index db0a4e5de69..a2f1a8c8b7a 100644
--- a/logd/src/tests/forward/forward.cpp
+++ b/logd/src/tests/forward/forward.cpp
@@ -3,6 +3,7 @@
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/metrics/dummy_metrics_manager.h>
#include <logd/forward.h>
+#include <logd/metrics.h>
#include <sstream>
#include <fcntl.h>
#include <unistd.h>
diff --git a/metrics/src/vespa/metrics/countmetric.h b/metrics/src/vespa/metrics/countmetric.h
index dd4c9e6fc92..912fc52449b 100644
--- a/metrics/src/vespa/metrics/countmetric.h
+++ b/metrics/src/vespa/metrics/countmetric.h
@@ -78,11 +78,6 @@ public:
void set(T value);
void inc(T value = 1);
void dec(T value = 1);
- CountMetric & operator++() { inc(); return *this; }
- CountMetric & operator--() { dec(); return *this; }
-
- CountMetric operator++(int);
- CountMetric operator--(int);
CountMetric & operator+=(const CountMetric &);
CountMetric & operator-=(const CountMetric &);
diff --git a/metrics/src/vespa/metrics/countmetric.hpp b/metrics/src/vespa/metrics/countmetric.hpp
index 516f6c660b6..e150ce0d632 100644
--- a/metrics/src/vespa/metrics/countmetric.hpp
+++ b/metrics/src/vespa/metrics/countmetric.hpp
@@ -75,22 +75,6 @@ CountMetric<T, SumOnAdd>::operator-=(const CountMetric<T, SumOnAdd>& other)
}
template <typename T, bool SumOnAdd>
-CountMetric<T, SumOnAdd>
-CountMetric<T, SumOnAdd>:: operator++(int) {
- CountMetric tmp(*this);
- inc();
- return tmp;
-}
-
-template <typename T, bool SumOnAdd>
-CountMetric<T, SumOnAdd>
-CountMetric<T, SumOnAdd>::operator--(int) {
- CountMetric tmp(*this);
- inc();
- return tmp;
-}
-
-template <typename T, bool SumOnAdd>
void
CountMetric<T, SumOnAdd>::set(T value)
{
diff --git a/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java b/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java
index 1c995c255f5..683a1f345d8 100644
--- a/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java
+++ b/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.nio.charset.Charset;
+import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.Executor;
@@ -39,54 +40,37 @@ public class ModelsEvaluationHandler extends ThreadedHttpRequestHandler {
Optional<String> version = path.segment(1);
Optional<String> modelName = path.segment(2);
- if ( ! apiName.isPresent() || ! apiName.get().equalsIgnoreCase(API_ROOT)) {
- return new ErrorResponse(404, "unknown API");
- }
- if ( ! version.isPresent() || ! version.get().equalsIgnoreCase(VERSION_V1)) {
- return new ErrorResponse(404, "unknown API version");
- }
- if ( ! modelName.isPresent()) {
- return listAllModels(request);
- }
- if ( ! modelsEvaluator.models().containsKey(modelName.get())) {
- // TODO: Replace by catching IllegalArgumentException and passing that error message
- return new ErrorResponse(404, "no model with name '" + modelName.get() + "' found");
- }
-
- Model model = modelsEvaluator.models().get(modelName.get());
-
- // The following logic follows from the spec, in that signature and
- // output are optional if the model only has a single function.
- // TODO: Try to avoid recreating that logic here
-
- if (path.segments() == 3) {
- if (model.functions().size() > 1) {
- return listModelDetails(request, modelName.get());
- }
- return listTypeDetails(request, modelName.get());
- }
-
- if (path.segments() == 4) {
- if ( ! path.segment(3).get().equalsIgnoreCase(EVALUATE)) {
- return listTypeDetails(request, modelName.get(), path.segment(3).get());
+ try {
+ if ( ! apiName.isPresent() || ! apiName.get().equalsIgnoreCase(API_ROOT)) {
+ throw new IllegalArgumentException("unknown API");
}
- if (model.functions().stream().anyMatch(f -> f.getName().equalsIgnoreCase(EVALUATE))) {
- return listTypeDetails(request, modelName.get(), path.segment(3).get()); // model has a function "eval"
+ if ( ! version.isPresent() || ! version.get().equalsIgnoreCase(VERSION_V1)) {
+ throw new IllegalArgumentException("unknown API version");
}
- if (model.functions().size() <= 1) {
- return evaluateModel(request, modelName.get());
+ if ( ! modelName.isPresent()) {
+ return listAllModels(request);
}
- // TODO: Replace by catching IllegalArgumentException and passing that error message
- return new ErrorResponse(404, "attempt to evaluate model without specifying function");
- }
+ Model model = modelsEvaluator.requireModel(modelName.get());
- if (path.segments() == 5) {
- if (path.segment(4).get().equalsIgnoreCase(EVALUATE)) {
- return evaluateModel(request, modelName.get(), path.segment(3).get());
+ Optional<Integer> evalSegment = path.lastIndexOf(EVALUATE);
+ String[] function = path.range(3, evalSegment);
+ if (evalSegment.isPresent()) {
+ return evaluateModel(request, model, function);
}
+ return listModelInformation(request, model, function);
+
+ } catch (IllegalArgumentException e) {
+ return new ErrorResponse(404, e.getMessage());
}
+ }
- return new ErrorResponse(404, "unrecognized request");
+ private HttpResponse evaluateModel(HttpRequest request, Model model, String[] function) {
+ FunctionEvaluator evaluator = model.evaluatorOf(function);
+ for (String bindingName : evaluator.context().names()) {
+ property(request, bindingName).ifPresent(s -> evaluator.bind(bindingName, Tensor.from(s)));
+ }
+ Tensor result = evaluator.evaluate();
+ return new Response(200, JsonFormat.encode(result));
}
private HttpResponse listAllModels(HttpRequest request) {
@@ -98,28 +82,33 @@ public class ModelsEvaluationHandler extends ThreadedHttpRequestHandler {
return new Response(200, com.yahoo.slime.JsonFormat.toJsonBytes(slime));
}
- private HttpResponse listModelDetails(HttpRequest request, String modelName) {
- Model model = modelsEvaluator.models().get(modelName);
+ private HttpResponse listModelInformation(HttpRequest request, Model model, String[] function) {
Slime slime = new Slime();
Cursor root = slime.setObject();
- for (ExpressionFunction func : model.functions()) {
- root.setString(func.getName(), baseUrl(request) + modelName + "/" + func.getName());
+ root.setString("model", model.name());
+ if (function.length == 0) {
+ listFunctions(request, model, root);
+ } else {
+ listFunctionDetails(request, model, function, root);
}
return new Response(200, com.yahoo.slime.JsonFormat.toJsonBytes(slime));
}
- private HttpResponse listTypeDetails(HttpRequest request, String modelName) {
- return listTypeDetails(request, modelsEvaluator.evaluatorOf(modelName));
- }
-
- private HttpResponse listTypeDetails(HttpRequest request, String modelName, String signatureAndOutput) {
- return listTypeDetails(request, modelsEvaluator.evaluatorOf(modelName, signatureAndOutput));
+ private void listFunctions(HttpRequest request, Model model, Cursor cursor) {
+ Cursor functions = cursor.setArray("functions");
+ for (ExpressionFunction func : model.functions()) {
+ Cursor function = functions.addObject();
+ listFunctionDetails(request, model, new String[] { func.getName() }, function);
+ }
}
- private HttpResponse listTypeDetails(HttpRequest request, FunctionEvaluator evaluator) {
- Slime slime = new Slime();
- Cursor root = slime.setObject();
- Cursor bindings = root.setArray("bindings");
+ private void listFunctionDetails(HttpRequest request, Model model, String[] function, Cursor cursor) {
+ String compactedFunction = String.join(".", function);
+ FunctionEvaluator evaluator = model.evaluatorOf(function);
+ cursor.setString("function", compactedFunction);
+ cursor.setString("info", baseUrl(request) + model.name() + "/" + compactedFunction);
+ cursor.setString("eval", baseUrl(request) + model.name() + "/" + compactedFunction + "/" + EVALUATE);
+ Cursor bindings = cursor.setArray("bindings");
for (String bindingName : evaluator.context().names()) {
// TODO: Use an API which exposes only the external binding names instead of this
if (bindingName.startsWith("constant(")) {
@@ -129,26 +118,9 @@ public class ModelsEvaluationHandler extends ThreadedHttpRequestHandler {
continue;
}
Cursor binding = bindings.addObject();
- binding.setString("name", bindingName);
+ binding.setString("binding", bindingName);
binding.setString("type", ""); // TODO: implement type information when available
}
- return new Response(200, com.yahoo.slime.JsonFormat.toJsonBytes(slime));
- }
-
- private HttpResponse evaluateModel(HttpRequest request, String modelName) {
- return evaluateModel(request, modelsEvaluator.evaluatorOf(modelName));
- }
-
- private HttpResponse evaluateModel(HttpRequest request, String modelName, String signatureAndOutput) {
- return evaluateModel(request, modelsEvaluator.evaluatorOf(modelName, signatureAndOutput));
- }
-
- private HttpResponse evaluateModel(HttpRequest request, FunctionEvaluator evaluator) {
- for (String bindingName : evaluator.context().names()) {
- property(request, bindingName).ifPresent(s -> evaluator.bind(bindingName, Tensor.from(s)));
- }
- Tensor result = evaluator.evaluate();
- return new Response(200, JsonFormat.encode(result));
}
private Optional<String> property(HttpRequest request, String name) {
@@ -178,8 +150,17 @@ public class ModelsEvaluationHandler extends ThreadedHttpRequestHandler {
return (index < 0 || index >= segments.length) ? Optional.empty() : Optional.of(segments[index]);
}
- int segments() {
- return segments.length;
+ Optional<Integer> lastIndexOf(String segment) {
+ for (int i = segments.length - 1; i >= 0; --i) {
+ if (segments[i].equalsIgnoreCase(segment)) {
+ return Optional.of(i);
+ }
+ }
+ return Optional.empty();
+ }
+
+ public String[] range(int start, Optional<Integer> end) {
+ return Arrays.copyOfRange(segments, start, end.isPresent() ? end.get() : segments.length);
}
private static String[] splitPath(HttpRequest request) {
diff --git a/model-evaluation/src/main/java/ai/vespa/models/handler/package-info.java b/model-evaluation/src/main/java/ai/vespa/models/handler/package-info.java
deleted file mode 100644
index 7978abf2632..00000000000
--- a/model-evaluation/src/main/java/ai/vespa/models/handler/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@ExportPackage
-package ai.vespa.models.handler;
-
-import com.yahoo.osgi.annotation.ExportPackage; \ No newline at end of file
diff --git a/model-evaluation/src/test/java/ai/vespa/models/handler/ModelsEvaluationHandlerTest.java b/model-evaluation/src/test/java/ai/vespa/models/handler/ModelsEvaluationHandlerTest.java
index 5f045a2feb4..6726f117c05 100644
--- a/model-evaluation/src/test/java/ai/vespa/models/handler/ModelsEvaluationHandlerTest.java
+++ b/model-evaluation/src/test/java/ai/vespa/models/handler/ModelsEvaluationHandlerTest.java
@@ -80,14 +80,14 @@ public class ModelsEvaluationHandlerTest {
@Test
public void testMnistSoftmaxDetails() {
String url = "http://localhost:8080/model-evaluation/v1/mnist_softmax";
- String expected = "{\"bindings\":[{\"name\":\"Placeholder\",\"type\":\"\"}]}"; // only has a single function
+ String expected = "{\"model\":\"mnist_softmax\",\"functions\":[{\"function\":\"default.add\",\"info\":\"http://localhost:8080/model-evaluation/v1/mnist_softmax/default.add\",\"eval\":\"http://localhost:8080/model-evaluation/v1/mnist_softmax/default.add/eval\",\"bindings\":[{\"binding\":\"Placeholder\",\"type\":\"\"}]}]}";
assertResponse(url, 200, expected);
}
@Test
public void testMnistSoftmaxTypeDetails() {
String url = "http://localhost/model-evaluation/v1/mnist_softmax/default.add/";
- String expected = "{\"bindings\":[{\"name\":\"Placeholder\",\"type\":\"\"}]}";
+ String expected = "{\"model\":\"mnist_softmax\",\"function\":\"default.add\",\"info\":\"http://localhost/model-evaluation/v1/mnist_softmax/default.add\",\"eval\":\"http://localhost/model-evaluation/v1/mnist_softmax/default.add/eval\",\"bindings\":[{\"binding\":\"Placeholder\",\"type\":\"\"}]}";
assertResponse(url, 200, expected);
}
@@ -126,21 +126,21 @@ public class ModelsEvaluationHandlerTest {
@Test
public void testMnistSavedDetails() {
String url = "http://localhost:8080/model-evaluation/v1/mnist_saved";
- String expected = "{\"imported_ml_macro_mnist_saved_dnn_hidden1_add\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/imported_ml_macro_mnist_saved_dnn_hidden1_add\",\"serving_default.y\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/serving_default.y\"}";
+ String expected = "{\"model\":\"mnist_saved\",\"functions\":[{\"function\":\"imported_ml_macro_mnist_saved_dnn_hidden1_add\",\"info\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/imported_ml_macro_mnist_saved_dnn_hidden1_add\",\"eval\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/imported_ml_macro_mnist_saved_dnn_hidden1_add/eval\",\"bindings\":[{\"binding\":\"input\",\"type\":\"\"}]},{\"function\":\"serving_default.y\",\"info\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/serving_default.y\",\"eval\":\"http://localhost:8080/model-evaluation/v1/mnist_saved/serving_default.y/eval\",\"bindings\":[{\"binding\":\"input\",\"type\":\"\"}]}]}";
assertResponse(url, 200, expected);
}
@Test
public void testMnistSavedTypeDetails() {
String url = "http://localhost/model-evaluation/v1/mnist_saved/serving_default.y/";
- String expected = "{\"bindings\":[{\"name\":\"input\",\"type\":\"\"}]}";
+ String expected = "{\"model\":\"mnist_saved\",\"function\":\"serving_default.y\",\"info\":\"http://localhost/model-evaluation/v1/mnist_saved/serving_default.y\",\"eval\":\"http://localhost/model-evaluation/v1/mnist_saved/serving_default.y/eval\",\"bindings\":[{\"binding\":\"input\",\"type\":\"\"}]}";
assertResponse(url, 200, expected);
}
@Test
public void testMnistSavedEvaluateDefaultFunctionShouldFail() {
String url = "http://localhost/model-evaluation/v1/mnist_saved/eval";
- String expected = "{\"error\":\"attempt to evaluate model without specifying function\"}";
+ String expected = "{\"error\":\"More than one function is available in model 'mnist_saved', but no name is given. Available functions: imported_ml_macro_mnist_saved_dnn_hidden1_add, serving_default.y\"}";
assertResponse(url, 404, expected);
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java
index 3b47f99ba77..16d1fd28441 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java
@@ -1,16 +1,18 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
-import com.google.common.collect.ImmutableList;
import com.google.common.net.InetAddresses;
import com.yahoo.vespa.hosted.node.admin.task.util.network.IPVersion;
import java.net.InetAddress;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -21,16 +23,16 @@ import java.util.stream.Collectors;
*/
public class Acl {
- private final List<InetAddress> trustedNodes;
- private final List<Integer> trustedPorts;
+ private final Set<Node> trustedNodes;
+ private final Set<Integer> trustedPorts;
/**
* @param trustedPorts Ports that hostname should trust
- * @param trustedNodes Other hostnames that this hostname should trust
+ * @param trustedNodes Other nodes that this hostname should trust
*/
- public Acl(List<Integer> trustedPorts, List<InetAddress> trustedNodes) {
- this.trustedNodes = trustedNodes != null ? ImmutableList.copyOf(trustedNodes) : Collections.emptyList();
- this.trustedPorts = trustedPorts != null ? ImmutableList.copyOf(trustedPorts) : Collections.emptyList();
+ public Acl(Set<Integer> trustedPorts, Set<Node> trustedNodes) {
+ this.trustedNodes = trustedNodes != null ? Collections.unmodifiableSet(trustedNodes) : Collections.emptySet();
+ this.trustedPorts = trustedPorts != null ? Collections.unmodifiableSet(trustedPorts) : Collections.emptySet();
}
public List<String> toRules(IPVersion ipVersion) {
@@ -56,9 +58,8 @@ public class Acl {
rules.add("-A INPUT -p tcp -m multiport --dports " + commaSeparatedPorts + " -j ACCEPT");
// Allow traffic from trusted nodes
- trustedNodes.stream()
- .filter(ipVersion::match)
- .map(ipAddress -> "-A INPUT -s " + InetAddresses.toAddrString(ipAddress) + ipVersion.singleHostCidr() + " -j ACCEPT")
+ getTrustedNodes(ipVersion).stream()
+ .map(node -> "-A INPUT -s " + node.inetAddressString() + ipVersion.singleHostCidr() + " -j ACCEPT")
.sorted()
.forEach(rules::add);
@@ -68,6 +69,24 @@ public class Acl {
return Collections.unmodifiableList(rules);
}
+ public Set<Node> getTrustedNodes() {
+ return trustedNodes;
+ }
+
+ public Set<Node> getTrustedNodes(IPVersion ipVersion) {
+ return trustedNodes.stream()
+ .filter(node -> ipVersion.match(node.inetAddress()))
+ .collect(Collectors.toSet());
+ }
+
+ public Set<Integer> getTrustedPorts() {
+ return trustedPorts;
+ }
+
+ public Set<Integer> getTrustedPorts(IPVersion ipVersion) {
+ return trustedPorts;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -78,7 +97,97 @@ public class Acl {
}
@Override
+ public String toString() {
+ return "Acl{" +
+ "trustedNodes=" + trustedNodes +
+ ", trustedPorts=" + trustedPorts +
+ '}';
+ }
+
+ @Override
public int hashCode() {
return Objects.hash(trustedPorts, trustedNodes);
}
+
+ public static class Node {
+ private final String hostname;
+ private final InetAddress inetAddress;
+
+ public Node(String hostname, String ipAddress) {
+ this(hostname, InetAddresses.forString(ipAddress));
+ }
+
+ public Node(String hostname, InetAddress inetAddress) {
+ this.hostname = hostname;
+ this.inetAddress = inetAddress;
+ }
+
+ public String hostname() {
+ return hostname;
+ }
+
+ public InetAddress inetAddress() {
+ return inetAddress;
+ }
+
+ public String inetAddressString() {
+ return InetAddresses.toAddrString(inetAddress);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Node node = (Node) o;
+ return Objects.equals(hostname, node.hostname) &&
+ Objects.equals(inetAddress, node.inetAddress);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(hostname, inetAddress);
+ }
+
+ @Override
+ public String toString() {
+ return "Node{" +
+ "hostname='" + hostname + '\'' +
+ ", inetAddress=" + inetAddress +
+ '}';
+ }
+ }
+
+ public static class Builder {
+ private final Set<Node> trustedNodes = new HashSet<>();
+ private final Set<Integer> trustedPorts = new HashSet<>();
+
+ public Builder() { }
+
+ public Builder(Acl acl) {
+ trustedNodes.addAll(acl.trustedNodes);
+ trustedPorts.addAll(acl.trustedPorts);
+ }
+
+ public Builder withTrustedNode(String hostname, String ipAddress) {
+ return withTrustedNode(new Node(hostname, ipAddress));
+ }
+
+ public Builder withTrustedNode(String hostname, InetAddress inetAddress) {
+ return withTrustedNode(new Node(hostname, inetAddress));
+ }
+
+ public Builder withTrustedNode(Node node) {
+ trustedNodes.add(node);
+ return this;
+ }
+
+ public Builder withTrustedPorts(Integer... ports) {
+ trustedPorts.addAll(Arrays.asList(ports));
+ return this;
+ }
+
+ public Acl build() {
+ return new Acl(trustedPorts, trustedNodes);
+ }
+ }
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
index 7036f6852fe..071d4b549de 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/NodeSpec.java
@@ -45,6 +45,7 @@ public class NodeSpec {
private final double minDiskAvailableGb;
private final boolean fastDisk;
+ private final double bandwidth;
private final Set<String> ipAddresses;
private final Optional<String> hardwareDivergence;
@@ -75,6 +76,7 @@ public class NodeSpec {
final double minMainMemoryAvailableGb,
final double minDiskAvailableGb,
final boolean fastDisk,
+ final double bandwidth,
final Set<String> ipAddresses,
final Optional<String> hardwareDivergence,
final Optional<String> hardwareFailureDescription,
@@ -102,6 +104,7 @@ public class NodeSpec {
this.minMainMemoryAvailableGb = minMainMemoryAvailableGb;
this.minDiskAvailableGb = minDiskAvailableGb;
this.fastDisk = fastDisk;
+ this.bandwidth = bandwidth;
this.ipAddresses = Objects.requireNonNull(ipAddresses);
this.hardwareDivergence = Objects.requireNonNull(hardwareDivergence);
this.hardwareFailureDescription = Objects.requireNonNull(hardwareFailureDescription);
@@ -200,6 +203,10 @@ public class NodeSpec {
return fastDisk;
}
+ public double getBandwidth() {
+ return bandwidth;
+ }
+
public Set<String> getIpAddresses() {
return ipAddresses;
}
@@ -246,6 +253,7 @@ public class NodeSpec {
Objects.equals(minMainMemoryAvailableGb, that.minMainMemoryAvailableGb) &&
Objects.equals(minDiskAvailableGb, that.minDiskAvailableGb) &&
Objects.equals(fastDisk, that.fastDisk) &&
+ Objects.equals(bandwidth, that.bandwidth) &&
Objects.equals(ipAddresses, that.ipAddresses) &&
Objects.equals(hardwareDivergence, that.hardwareDivergence) &&
Objects.equals(hardwareFailureDescription, that.hardwareFailureDescription) &&
@@ -278,6 +286,7 @@ public class NodeSpec {
minMainMemoryAvailableGb,
minDiskAvailableGb,
fastDisk,
+ bandwidth,
ipAddresses,
hardwareDivergence,
hardwareFailureDescription,
@@ -310,6 +319,7 @@ public class NodeSpec {
+ " minMainMemoryAvailableGb=" + minMainMemoryAvailableGb
+ " minDiskAvailableGb=" + minDiskAvailableGb
+ " fastDisk=" + fastDisk
+ + " bandwidth=" + bandwidth
+ " ipAddresses=" + ipAddresses
+ " hardwareDivergence=" + hardwareDivergence
+ " hardwareFailureDescription=" + hardwareFailureDescription
@@ -466,6 +476,7 @@ public class NodeSpec {
private double minMainMemoryAvailableGb;
private double minDiskAvailableGb;
private boolean fastDisk = false;
+ private double bandwidth;
private Set<String> ipAddresses = Collections.emptySet();
private Optional<String> hardwareDivergence = Optional.empty();
private Optional<String> hardwareFailureDescription = Optional.empty();
@@ -483,6 +494,7 @@ public class NodeSpec {
minMainMemoryAvailableGb(node.minMainMemoryAvailableGb);
minDiskAvailableGb(node.minDiskAvailableGb);
fastDisk(node.fastDisk);
+ bandwidth(node.bandwidth);
ipAddresses(node.ipAddresses);
wantedRebootGeneration(node.wantedRebootGeneration);
currentRebootGeneration(node.currentRebootGeneration);
@@ -619,6 +631,11 @@ public class NodeSpec {
return this;
}
+ public Builder bandwidth(double bandwidth) {
+ this.bandwidth = bandwidth;
+ return this;
+ }
+
public Builder ipAddresses(Set<String> ipAddresses) {
this.ipAddresses = ipAddresses;
return this;
@@ -742,6 +759,10 @@ public class NodeSpec {
return fastDisk;
}
+ public double getBandwidth() {
+ return bandwidth;
+ }
+
public Set<String> getIpAddresses() {
return ipAddresses;
}
@@ -766,7 +787,7 @@ public class NodeSpec {
wantedRestartGeneration, currentRestartGeneration,
wantedRebootGeneration, currentRebootGeneration,
minCpuCores, minMainMemoryAvailableGb, minDiskAvailableGb,
- fastDisk, ipAddresses, hardwareDivergence, hardwareFailureDescription,
+ fastDisk, bandwidth, ipAddresses, hardwareDivergence, hardwareFailureDescription,
parentHostname);
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
index 7cee1730804..e8efe10e505 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
import com.google.common.base.Strings;
-import com.google.common.net.InetAddresses;
import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApi;
@@ -11,7 +10,6 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.bindings.*;
import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
import com.yahoo.vespa.hosted.provision.Node;
-import java.net.InetAddress;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -81,16 +79,18 @@ public class RealNodeRepository implements NodeRepository {
final GetAclResponse response = configServerApi.get(path, GetAclResponse.class);
// Group ports by container hostname that trusts them
- Map<String, List<Integer>> trustedPorts = response.trustedPorts.stream()
+ Map<String, Set<Integer>> trustedPorts = response.trustedPorts.stream()
.collect(Collectors.groupingBy(
GetAclResponse.Port::getTrustedBy,
- Collectors.mapping(port -> port.port, Collectors.toList())));
+ Collectors.mapping(port -> port.port, Collectors.toSet())));
// Group node ip-addresses by container hostname that trusts them
- Map<String, List<InetAddress>> trustedNodes = response.trustedNodes.stream()
+ Map<String, Set<Acl.Node>> trustedNodes = response.trustedNodes.stream()
.collect(Collectors.groupingBy(
GetAclResponse.Node::getTrustedBy,
- Collectors.mapping(node -> InetAddresses.forString(node.ipAddress), Collectors.toList())));
+ Collectors.mapping(
+ node -> new Acl.Node(node.hostname, node.ipAddress),
+ Collectors.toSet())));
// For each hostname create an ACL
@@ -194,6 +194,7 @@ public class RealNodeRepository implements NodeRepository {
node.minMainMemoryAvailableGb,
node.minDiskAvailableGb,
node.fastDisk,
+ node.bandwidth,
node.ipAddresses,
Optional.ofNullable(node.hardwareDivergence),
Optional.ofNullable(node.hardwareFailureDescription),
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java
index 8e41252144d..fcfd552875a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/NodeRepositoryNode.java
@@ -52,6 +52,8 @@ public class NodeRepositoryNode {
public Integer failCount;
@JsonProperty("fastDisk")
public Boolean fastDisk;
+ @JsonProperty("bandwidth")
+ public Double bandwidth;
@JsonProperty("hardwareFailure")
public Boolean hardwareFailure;
@JsonProperty("hardwareFailureDescription")
@@ -102,6 +104,8 @@ public class NodeRepositoryNode {
", currentOsVersion='" + currentOsVersion + '\'' +
", wantedOsVersion='" + wantedOsVersion + '\'' +
", failCount=" + failCount +
+ ", fastDisk=" + fastDisk +
+ ", bandwidth=" + bandwidth +
", hardwareFailure=" + hardwareFailure +
", hardwareFailureDescription='" + hardwareFailureDescription + '\'' +
", hardwareDivergence='" + hardwareDivergence + '\'' +
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerNetworking.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerNetworking.java
index 7678ad8169a..7f0ade2e500 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerNetworking.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerNetworking.java
@@ -28,7 +28,7 @@ public enum DockerNetworking {
}
public static DockerNetworking from(String cloud, NodeType nodeType, boolean hostAdmin) {
- if (cloud.equals("AWS")) {
+ if (cloud.equalsIgnoreCase("aws")) {
return DockerNetworking.NPT;
} else if (nodeType == NodeType.confighost || nodeType == NodeType.proxyhost) {
return DockerNetworking.HOST_NETWORK;
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
index 90d71c067bc..6d1d51ead43 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
@@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.docker;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
-import com.yahoo.vespa.hosted.dockerapi.Docker;
+import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
@@ -30,15 +30,23 @@ public interface DockerOperations {
ProcessResult executeCommandInNetworkNamespace(ContainerName containerName, String... command);
+
+ /** Resume node. Resuming a node means that it is ready to take on traffic. */
void resumeNode(ContainerName containerName);
- void restartVespaOnNode(ContainerName containerName);
+ /**
+ * Suspend node. Suspending a node means the node should be taken temporarly offline,
+ * such that maintenance of the node can be done (upgrading, rebooting, etc).
+ */
+ void suspendNode(ContainerName containerName);
+
+ void restartVespa(ContainerName containerName);
- void stopServicesOnNode(ContainerName containerName);
+ void startServices(ContainerName containerName);
- void trySuspendNode(ContainerName containerName);
+ void stopServices(ContainerName containerName);
- Optional<Docker.ContainerStats> getContainerStats(ContainerName containerName);
+ Optional<ContainerStats> getContainerStats(ContainerName containerName);
/**
* Returns the list of containers managed by node-admin
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
index a197eafe923..7809f263ad9 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
@@ -8,6 +8,7 @@ import com.yahoo.system.ProcessExecuter;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
+import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.DockerNetworkCreator;
@@ -23,6 +24,7 @@ import java.net.Inet6Address;
import java.net.InetAddress;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -87,13 +89,12 @@ public class DockerOperationsImpl implements DockerOperations {
.withAddCapability("SYS_PTRACE") // Needed for gcore, pstack etc.
.withAddCapability("SYS_ADMIN"); // Needed for perf
- if (environment.getNodeType() == NodeType.confighost ||
- environment.getNodeType() == NodeType.proxyhost) {
+ if (environment.getNodeType() == NodeType.confighost || environment.getNodeType() == NodeType.proxyhost) {
command.withVolume("/var/lib/sia", "/var/lib/sia");
}
if (environment.getNodeType() == NodeType.proxyhost) {
- command.withVolume("/opt/yahoo/share/ssl/certs/", "/opt/yahoo/share/ssl/certs/");
+ command.withVolume("/opt/yahoo/share/ssl/certs", "/opt/yahoo/share/ssl/certs");
}
if (environment.getNodeType() == NodeType.host) {
@@ -142,8 +143,6 @@ public class DockerOperationsImpl implements DockerOperations {
logger.info("Creating new container with args: " + command);
command.create();
-
- docker.createContainer(command);
}
void addEtcHosts(ContainerData containerData,
@@ -217,26 +216,6 @@ public class DockerOperationsImpl implements DockerOperations {
}
/**
- * Try to suspend node. Suspending a node means the node should be taken offline,
- * such that maintenance can be done of the node (upgrading, rebooting, etc),
- * and such that we will start serving again as soon as possible afterwards.
- * <p>
- * Any failures are logged and ignored.
- */
- @Override
- public void trySuspendNode(ContainerName containerName) {
- try {
- // TODO: Change to waiting w/o timeout (need separate thread that we can stop).
- executeCommandInContainer(containerName, nodeProgram, "suspend");
- } catch (RuntimeException e) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
- // It's bad to continue as-if nothing happened, but on the other hand if we do not proceed to
- // remove container, we will not be able to upgrade to fix any problems in the suspend logic!
- logger.warning("Failed trying to suspend container " + containerName.asString(), e);
- }
- }
-
- /**
* For macvlan:
* <p>
* Due to a bug in docker (https://github.com/docker/libnetwork/issues/1443), we need to manually set
@@ -304,7 +283,6 @@ public class DockerOperationsImpl implements DockerOperations {
Arrays.toString(wrappedCommand), containerName.asString(), containerPid), e);
throw new RuntimeException(e);
}
-
}
@Override
@@ -313,17 +291,28 @@ public class DockerOperationsImpl implements DockerOperations {
}
@Override
- public void restartVespaOnNode(ContainerName containerName) {
+ public void suspendNode(ContainerName containerName) {
+ executeCommandInContainer(containerName, nodeProgram, "suspend");
+ }
+
+ @Override
+ public void restartVespa(ContainerName containerName) {
executeCommandInContainer(containerName, nodeProgram, "restart-vespa");
}
@Override
- public void stopServicesOnNode(ContainerName containerName) {
+ public void startServices(ContainerName containerName) {
+ executeCommandInContainer(containerName, nodeProgram, "start");
+ }
+
+ @Override
+ public void stopServices(ContainerName containerName) {
executeCommandInContainer(containerName, nodeProgram, "stop");
}
+
@Override
- public Optional<Docker.ContainerStats> getContainerStats(ContainerName containerName) {
+ public Optional<ContainerStats> getContainerStats(ContainerName containerName) {
return docker.getContainerStats(containerName);
}
@@ -332,9 +321,11 @@ public class DockerOperationsImpl implements DockerOperations {
return docker.getAllContainersManagedBy(MANAGER_NAME);
}
+ // TODO: Remove after migrating to host-admin
@Override
public void deleteUnusedDockerImages() {
- docker.deleteUnusedDockerImages();
+ if (environment.isRunningOnHost()) return;
+ docker.deleteUnusedDockerImages(Collections.emptyList(), Duration.ofHours(1));
}
/**
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index cdfc8eef798..cbb05ace0d1 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -189,10 +189,8 @@ public class StorageMaintainer {
try {
FilebeatConfigProvider filebeatConfigProvider = new FilebeatConfigProvider(environment);
Optional<String> config = filebeatConfigProvider.getConfig(node);
- if (!config.isPresent()) {
- logger.error("Was not able to generate a config for filebeat, ignoring filebeat file creation." + node.toString());
- return;
- }
+ if (!config.isPresent()) return;
+
Path filebeatPath = environment.pathInNodeAdminFromPathInNode(
containerName, Paths.get("/etc/filebeat/filebeat.yml"));
Files.write(filebeatPath, config.get().getBytes());
@@ -423,6 +421,7 @@ public class StorageMaintainer {
"--memory", Double.toString(node.getMinMainMemoryAvailableGb()),
"--cpu_cores", Double.toString(node.getMinCpuCores()),
"--is_ssd", Boolean.toString(node.isFastDisk()),
+ "--bandwidth", Double.toString(node.getBandwidth()),
"--ips", String.join(",", node.getIpAddresses())));
node.getHardwareDivergence().ifPresent(hardwareDivergence -> {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
index 9259b522d17..a50cedb7160 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java
@@ -71,6 +71,10 @@ public class AclMaintainer implements Runnable {
}
private synchronized void configureAcls() {
+ if (environment.getDockerNetworking() == DockerNetworking.HOST_NETWORK) {
+ return;
+ }
+
log.info("Configuring ACLs"); // Needed to potentially nail down when ACL maintainer stopped working
Map<String, Container> runningContainers = dockerOperations
.getAllManagedContainers().stream()
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
index ba8a2e55587..12c1b9bcf11 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java
@@ -145,7 +145,10 @@ public class NodeAdminImpl implements NodeAdmin {
// Each container may spend 1-1:30 minutes stopping
nodeAgentsByHostname.values().parallelStream()
.filter(nodeAgent -> hostnames.contains(nodeAgent.getHostname()))
- .forEach(NodeAgent::stopServices);
+ .forEach(nodeAgent -> {
+ nodeAgent.suspend();
+ nodeAgent.stopServices();
+ });
}
public int getNumberOfNodeAgents() {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
index 5ab73788299..90e4b2e6c8b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImpl.java
@@ -208,11 +208,12 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater {
// We have spent too much time trying to freeze and node admin is still not frozen.
// To avoid node agents stalling for too long, we'll force unfrozen ticks now.
log.info("Timed out trying to freeze, will force unfreezed ticks");
+ fetchContainersToRunFromNodeRepository();
nodeAdmin.setFrozen(false);
}
+ } else if (currentState == RESUMED) {
+ fetchContainersToRunFromNodeRepository();
}
-
- fetchContainersToRunFromNodeRepository();
}
private void setLastConvergenceException(RuntimeException exception) {
@@ -277,20 +278,11 @@ public class NodeAdminStateUpdaterImpl implements NodeAdminStateUpdater {
}
private void fetchContainersToRunFromNodeRepository() {
- synchronized (monitor) {
- // Refresh containers to run even if we would like to suspend but have failed to do so yet,
- // because it may take a long time to get permission to suspend.
- if (currentState != RESUMED) {
- log.info("Frozen, skipping fetching info from node repository");
- return;
- }
-
- try {
- final List<NodeSpec> containersToRun = nodeRepository.getNodes(dockerHostHostName);
- nodeAdmin.refreshContainersToRun(containersToRun);
- } catch (Exception e) {
- log.log(LogLevel.WARNING, "Failed to update which containers should be running", e);
- }
+ try {
+ final List<NodeSpec> containersToRun = nodeRepository.getNodes(dockerHostHostName);
+ nodeAdmin.refreshContainersToRun(containersToRun);
+ } catch (Exception e) {
+ log.log(LogLevel.WARNING, "Failed to update which containers should be running", e);
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
index 92c44969d5e..9b759b208eb 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgent.java
@@ -18,9 +18,18 @@ public interface NodeAgent {
*/
boolean setFrozen(boolean frozen);
+ /**
+ * Stop services running on node. Depending on the state of the node, {@link #suspend()} might need to be
+ * called before calling this method.
+ */
void stopServices();
/**
+ * Suspend node. Take node offline (e.g. take node out of VIP, drain traffic, prepare for restart etc.)
+ */
+ void suspend();
+
+ /**
* Returns a map containing all relevant NodeAgent variables and their current values.
*/
Map<String, Object> debugInfo();
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index 7c84150009e..b2f04a3346c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -6,9 +6,10 @@ import com.yahoo.concurrent.ThreadFactoryFactory;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
-import com.yahoo.vespa.hosted.dockerapi.Docker;
-import com.yahoo.vespa.hosted.dockerapi.DockerException;
-import com.yahoo.vespa.hosted.dockerapi.DockerExecTimeoutException;
+import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
+import com.yahoo.vespa.hosted.dockerapi.exception.ContainerNotFoundException;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerExecTimeoutException;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import com.yahoo.vespa.hosted.dockerapi.metrics.DimensionMetrics;
@@ -87,7 +88,8 @@ public class NodeAgentImpl implements NodeAgent {
private Consumer<String> serviceRestarter;
private Optional<Future<?>> currentFilebeatRestarter = Optional.empty();
- private boolean resumeScriptRun = false;
+ private boolean hasResumedNode = false;
+ private boolean hasStartedServices = true;
/**
* ABSENT means container is definitely absent - A container that was absent will not suddenly appear without
@@ -209,17 +211,32 @@ public class NodeAgentImpl implements NodeAgent {
logger.info("Stopped");
}
- void runLocalResumeScriptIfNeeded(NodeSpec node) {
- if (! resumeScriptRun) {
- storageMaintainer.writeMetricsConfig(containerName, node);
- storageMaintainer.writeFilebeatConfig(containerName, node);
- stopFilebeatSchedulerIfNeeded();
- currentFilebeatRestarter = Optional.of(filebeatRestarter.scheduleWithFixedDelay(
- () -> serviceRestarter.accept("filebeat"), 1, 1, TimeUnit.DAYS));
+ /**
+ * Verifies that service is healthy, otherwise throws an exception. The default implementation does
+ * nothing, override if it's necessary to verify that a service is healthy before resuming.
+ */
+ protected void verifyHealth(NodeSpec node) { }
+
+ void startServicesIfNeeded() {
+ if (!hasStartedServices) {
+ logger.info("Starting services");
+ dockerOperations.startServices(containerName);
+ hasStartedServices = true;
+ }
+ }
+
+ void resumeNodeIfNeeded(NodeSpec node) {
+ if (!hasResumedNode) {
+ if (!currentFilebeatRestarter.isPresent()) {
+ storageMaintainer.writeMetricsConfig(containerName, node);
+ storageMaintainer.writeFilebeatConfig(containerName, node);
+ currentFilebeatRestarter = Optional.of(filebeatRestarter.scheduleWithFixedDelay(
+ () -> serviceRestarter.accept("filebeat"), 1, 1, TimeUnit.DAYS));
+ }
logger.debug("Starting optional node program resume command");
dockerOperations.resumeNode(containerName);
- resumeScriptRun = true;
+ hasResumedNode = true;
}
}
@@ -253,7 +270,8 @@ public class NodeAgentImpl implements NodeAgent {
dockerOperations.startContainer(containerName);
lastCpuMetric = new CpuUsageReporter();
- resumeScriptRun = false;
+ hasStartedServices = true; // Automatically started with the container
+ hasResumedNode = false;
logger.info("Container successfully started, new containerState is " + containerState);
}
@@ -262,7 +280,7 @@ public class NodeAgentImpl implements NodeAgent {
.flatMap(container -> removeContainerIfNeeded(node, container))
.map(container -> {
shouldRestartServices(node).ifPresent(restartReason -> {
- logger.info("Will restart services for container " + container + ": " + restartReason);
+ logger.info("Will restart services: " + restartReason);
restartServices(node, container);
});
return container;
@@ -283,18 +301,39 @@ public class NodeAgentImpl implements NodeAgent {
private void restartServices(NodeSpec node, Container existingContainer) {
if (existingContainer.state.isRunning() && node.getState() == Node.State.active) {
ContainerName containerName = existingContainer.name;
- logger.info("Restarting services for " + containerName);
+ logger.info("Restarting services");
// Since we are restarting the services we need to suspend the node.
orchestratorSuspendNode();
- dockerOperations.restartVespaOnNode(containerName);
+ dockerOperations.restartVespa(containerName);
}
}
@Override
public void stopServices() {
- logger.info("Stopping services for " + containerName);
- dockerOperations.trySuspendNode(containerName);
- dockerOperations.stopServicesOnNode(containerName);
+ logger.info("Stopping services");
+ if (containerState == ABSENT) return;
+ try {
+ hasStartedServices = hasResumedNode = false;
+ dockerOperations.stopServices(containerName);
+ } catch (ContainerNotFoundException e) {
+ containerState = ABSENT;
+ }
+ }
+
+ @Override
+ public void suspend() {
+ logger.info("Suspending services on node");
+ if (containerState == ABSENT) return;
+ try {
+ hasResumedNode = false;
+ dockerOperations.suspendNode(containerName);
+ } catch (ContainerNotFoundException e) {
+ containerState = ABSENT;
+ } catch (RuntimeException e) {
+ // It's bad to continue as-if nothing happened, but on the other hand if we do not proceed to
+ // remove container, we will not be able to upgrade to fix any problems in the suspend logic!
+ logger.warning("Failed trying to suspend container " + containerName.asString(), e);
+ }
}
private Optional<String> shouldRemoveContainer(NodeSpec node, Container existingContainer) {
@@ -324,7 +363,7 @@ public class NodeAgentImpl implements NodeAgent {
private Optional<Container> removeContainerIfNeeded(NodeSpec node, Container existingContainer) {
Optional<String> removeReason = shouldRemoveContainer(node, existingContainer);
if (removeReason.isPresent()) {
- logger.info("Will remove container " + existingContainer + ": " + removeReason.get());
+ logger.info("Will remove container: " + removeReason.get());
if (existingContainer.state.isRunning()) {
if (node.getState() == Node.State.active) {
@@ -332,6 +371,9 @@ public class NodeAgentImpl implements NodeAgent {
}
try {
+ if (node.getState() != Node.State.dirty) {
+ suspend();
+ }
stopServices();
} catch (Exception e) {
logger.info("Failed stopping services, ignoring", e);
@@ -378,7 +420,7 @@ public class NodeAgentImpl implements NodeAgent {
try {
monitor.wait(remainder);
} catch (InterruptedException e) {
- logger.error("Interrupted, but ignoring this: " + hostname);
+ logger.error("Interrupted while sleeping before tick, ignoring");
}
} else break;
}
@@ -403,9 +445,12 @@ public class NodeAgentImpl implements NodeAgent {
converged = true;
} catch (OrchestratorException e) {
logger.info(e.getMessage());
+ } catch (ContainerNotFoundException e) {
+ containerState = ABSENT;
+ logger.warning("Container unexpectedly gone, resetting containerState to " + containerState);
} catch (DockerException e) {
numberOfUnhandledException++;
- logger.error("Caught a DockerException, resetting containerState to " + containerState, e);
+ logger.error("Caught a DockerException", e);
} catch (Exception e) {
numberOfUnhandledException++;
logger.error("Unhandled exception, ignoring.", e);
@@ -468,7 +513,9 @@ public class NodeAgentImpl implements NodeAgent {
aclMaintainer.run();
}
- runLocalResumeScriptIfNeeded(node);
+ verifyHealth(node);
+ startServicesIfNeeded();
+ resumeNodeIfNeeded(node);
athenzCredentialsMaintainer.converge();
@@ -554,7 +601,7 @@ public class NodeAgentImpl implements NodeAgent {
final NodeSpec node = lastNode;
if (node == null || containerState != UNKNOWN) return;
- Optional<Docker.ContainerStats> containerStats = dockerOperations.getContainerStats(containerName);
+ Optional<ContainerStats> containerStats = dockerOperations.getContainerStats(containerName);
if (!containerStats.isPresent()) return;
Dimensions.Builder dimensionsBuilder = new Dimensions.Builder()
@@ -566,7 +613,7 @@ public class NodeAgentImpl implements NodeAgent {
dimensionsBuilder.add("orchestratorState", allowed ? "ALLOWED_TO_BE_DOWN" : "NO_REMARKS"));
Dimensions dimensions = dimensionsBuilder.build();
- Docker.ContainerStats stats = containerStats.get();
+ ContainerStats stats = containerStats.get();
final String APP = MetricReceiverWrapper.APPLICATION_NODE;
final int totalNumCpuCores = ((List<Number>) ((Map) stats.getCpuStats().get("cpu_usage")).get("percpu_usage")).size();
final long cpuContainerKernelTime = ((Number) ((Map) stats.getCpuStats().get("cpu_usage")).get("usage_in_kernelmode")).longValue();
@@ -631,7 +678,7 @@ public class NodeAgentImpl implements NodeAgent {
String[] command = {"vespa-rpc-invoke", "-t", "2", "tcp/localhost:19091", "setExtraMetrics", wrappedMetrics};
dockerOperations.executeCommandInContainerAsRoot(containerName, 5L, command);
} catch (DockerExecTimeoutException | JsonProcessingException e) {
- logger.warning("Unable to push metrics to container: " + containerName, e);
+ logger.warning("Failed to push metrics to container", e);
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java
index 04c7edac74e..9355388472c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/network/IPVersion.java
@@ -10,12 +10,13 @@ import java.net.InetAddress;
*/
public enum IPVersion {
- IPv6("ip6tables", "ip -6", "ipv6-icmp", "/128", "icmp6-port-unreachable", "ip6tables-restore"),
- IPv4("iptables", "ip", "icmp", "/32", "icmp-port-unreachable", "iptables-restore");
+ IPv6(6, "ip6tables", "ip -6", "ipv6-icmp", "/128", "icmp6-port-unreachable", "ip6tables-restore"),
+ IPv4(4, "iptables", "ip", "icmp", "/32", "icmp-port-unreachable", "iptables-restore");
- IPVersion(String iptablesCmd, String ipCmd,
+ IPVersion(int version, String iptablesCmd, String ipCmd,
String icmpProtocol, String singleHostCidr, String icmpPortUnreachable,
String iptablesRestore) {
+ this.version = version;
this.ipCmd = ipCmd;
this.iptablesCmd = iptablesCmd;
this.icmpProtocol = icmpProtocol;
@@ -24,6 +25,7 @@ public enum IPVersion {
this.iptablesRestore = iptablesRestore;
}
+ private final int version;
private final String iptablesCmd;
private final String ipCmd;
private final String icmpProtocol;
@@ -31,6 +33,12 @@ public enum IPVersion {
private final String icmpPortUnreachable;
private final String iptablesRestore;
+ public int version() {
+ return version;
+ }
+ public String versionString() {
+ return String.valueOf(version);
+ }
public String iptablesCmd() {
return iptablesCmd;
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java
index 77bc49ca596..c7aa79cca40 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java
@@ -1,24 +1,23 @@
package com.yahoo.vespa.hosted.node.admin.configserver.noderepository;
-import com.google.common.net.InetAddresses;
import com.yahoo.vespa.hosted.node.admin.task.util.network.IPVersion;
import org.junit.Assert;
import org.junit.Test;
-import java.net.InetAddress;
import java.util.Arrays;
import java.util.Collections;
-import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
public class AclTest {
private final Acl aclCommon = new Acl(
- createPortList(1234, 453),
+ createPortSet(1234, 453),
createTrustedNodes("192.1.2.2", "fb00::1", "fe80::2", "fe80::3"));
private final Acl aclNoPorts = new Acl(
- Collections.emptyList(),
+ Collections.emptySet(),
createTrustedNodes("192.1.2.2", "fb00::1", "fe80::2"));
@Test
@@ -72,7 +71,7 @@ public class AclTest {
@Test
public void ipv6_rules_stable() {
Acl aclCommonDifferentOrder = new Acl(
- createPortList(453, 1234),
+ createPortSet(453, 1234),
createTrustedNodes("fe80::2", "192.1.2.2", "fb00::1", "fe80::3"));
for (IPVersion ipVersion: IPVersion.values()) {
@@ -80,13 +79,13 @@ public class AclTest {
}
}
- private List<Integer> createPortList(Integer... ports) {
- return Arrays.asList(ports);
+ private Set<Integer> createPortSet(Integer... ports) {
+ return Stream.of(ports).collect(Collectors.toSet());
}
- private List<InetAddress> createTrustedNodes(String... addresses) {
+ private Set<Acl.Node> createTrustedNodes(String... addresses) {
return Arrays.stream(addresses)
- .map(InetAddresses::forString)
- .collect(Collectors.toList());
+ .map(ipAddress -> new Acl.Node("hostname", ipAddress))
+ .collect(Collectors.toSet());
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
index 4b4ef05593d..52e3987341c 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java
@@ -4,11 +4,13 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
+import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import java.net.InetAddress;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -69,13 +71,6 @@ public class DockerMock implements Docker {
}
@Override
- public void createContainer(CreateContainerCommand createContainerCommand) {
- synchronized (monitor) {
- callOrderVerifier.add("createContainer with " + createContainerCommand.toString());
- }
- }
-
- @Override
public void startContainer(ContainerName containerName) {
synchronized (monitor) {
callOrderVerifier.add("startContainer with " + containerName);
@@ -116,13 +111,8 @@ public class DockerMock implements Docker {
}
@Override
- public void deleteImage(DockerImage dockerImage) {
-
- }
-
- @Override
- public void deleteUnusedDockerImages() {
-
+ public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) {
+ return false;
}
@Override
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
index 319207f9e95..a46defc991b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RunInContainerTest.java
@@ -194,9 +194,9 @@ public class RunInContainerTest {
// Allow stopping services in active nodes
doNothing().when(dockerOperationsMock)
- .trySuspendNode(eq(new ContainerName("host1")));
+ .suspendNode(eq(new ContainerName("host1")));
doNothing().when(dockerOperationsMock)
- .stopServicesOnNode(eq(new ContainerName("host1")));
+ .stopServices(eq(new ContainerName("host1")));
assertTrue(verifyWithRetries("suspend", false));
assertTrue(verifyWithRetries("suspend", true));
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
index 56373dda2f8..bc9e5d380a3 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.maintenance.acl;
-import com.google.common.net.InetAddresses;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
@@ -16,13 +15,11 @@ import com.yahoo.vespa.hosted.node.admin.task.util.network.IPVersion;
import org.junit.Before;
import org.junit.Test;
-import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -49,13 +46,13 @@ public class AclMaintainerTest {
@Before
public void before() {
when(dockerOperations.getAllManagedContainers()).thenReturn(containerList);
- when(env.getCloud()).thenReturn("AWS");
+ when(env.getCloud()).thenReturn("aws");
when(env.getDockerNetworking()).thenReturn(DockerNetworking.NPT);
}
@Test
public void no_redirect_in_yahoo() {
- when(env.getCloud()).thenReturn("YAHOO");
+ when(env.getCloud()).thenReturn("yahoo");
when(env.getDockerNetworking()).thenReturn(DockerNetworking.MACVLAN);
Container container = addContainer("container1", "container1.host.com", Container.State.RUNNING);
@@ -249,19 +246,17 @@ public class AclMaintainerTest {
}
private Map<String, Acl> makeAcl(String containerHostname, String portsCommaSeparated, String... addresses) {
- Map<String, Acl> map = new HashMap<>();
+ Acl.Builder aclBuilder = new Acl.Builder();
- List<Integer> ports = Arrays.stream(portsCommaSeparated.split(","))
+ Arrays.stream(portsCommaSeparated.split(","))
.map(Integer::valueOf)
- .collect(Collectors.toList());
-
- List<InetAddress> hosts = Arrays.stream(addresses)
- .map(InetAddresses::forString)
- .collect(Collectors.toList());
+ .forEach(aclBuilder::withTrustedPorts);
- Acl acl = new Acl(ports, hosts);
- map.put(containerHostname, acl);
+ Arrays.stream(addresses)
+ .forEach(address -> aclBuilder.withTrustedNode("hostname", address));
+ Map<String, Acl> map = new HashMap<>();
+ map.put(containerHostname, aclBuilder.build());
return map;
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/IPTablesEditorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/IPTablesEditorTest.java
index c32d02a0bda..2cd942c1372 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/IPTablesEditorTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/IPTablesEditorTest.java
@@ -1,6 +1,5 @@
package com.yahoo.vespa.hosted.node.admin.maintenance.acl;
-import com.google.common.net.InetAddresses;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl;
@@ -9,8 +8,6 @@ import com.yahoo.vespa.hosted.node.admin.task.util.network.IPVersion;
import org.junit.Assert;
import org.junit.Test;
-import java.util.Collections;
-
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -24,8 +21,7 @@ public class IPTablesEditorTest {
@Test
public void filter_set_wanted_rules() {
-
- Acl acl = new Acl(Collections.singletonList(22), Collections.singletonList(InetAddresses.forString("3001::1")));
+ Acl acl = new Acl.Builder().withTrustedPorts(22).withTrustedNode("hostname", "3001::1").build();
FilterTableLineEditor filterLineEditor = FilterTableLineEditor.from(acl, IPVersion.IPv6);
String currentFilterTable = "-P INPUT ACCEPT\n" +
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java
index cfdb576fb34..fd54773910d 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterImplTest.java
@@ -22,6 +22,7 @@ import java.util.stream.IntStream;
import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdaterImpl.TRANSITION_EXCEPTION_MESSAGE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing;
@@ -172,19 +173,28 @@ public class NodeAdminStateUpdaterImplTest {
// Let's start suspending, we are able to freeze the nodes, but orchestrator denies suspension
when(nodeAdmin.subsystemFreezeDuration()).thenReturn(Duration.ofSeconds(1));
when(nodeAdmin.setFrozen(eq(true))).thenReturn(true);
- doThrow(new RuntimeException(exceptionMsg))
- .when(orchestrator).suspend(eq(parentHostname));
+ doThrow(new RuntimeException(exceptionMsg)).when(orchestrator).suspend(eq(parentHostname));
assertResumeStateError(NodeAdminStateUpdater.State.SUSPENDED_NODE_ADMIN, TRANSITION_EXCEPTION_MESSAGE);
- tickAfter(0);
+ tickAfter(30);
verify(nodeAdmin, times(1)).setFrozen(eq(true));
+ tickAfter(30);
+ verify(nodeAdmin, times(2)).setFrozen(eq(true));
+ verify(nodeAdmin, times(1)).setFrozen(eq(false)); // No new unfreezes during last 2 ticks
+ verify(nodeAdmin, times(1)).refreshContainersToRun(any());
assertResumeStateError(NodeAdminStateUpdater.State.SUSPENDED_NODE_ADMIN, exceptionMsg);
+ // Only resume and fetch containers when subsystem freeze duration expires
+ when(nodeAdmin.subsystemFreezeDuration()).thenReturn(Duration.ofHours(1));
+ tickAfter(30);
+ verify(nodeAdmin, times(2)).setFrozen(eq(false));
+ verify(nodeAdmin, times(2)).refreshContainersToRun(any());
+
// We change our mind, want to remain resumed
assertResumeStateError(NodeAdminStateUpdater.State.RESUMED, TRANSITION_EXCEPTION_MESSAGE);
- tickAfter(0);
+ tickAfter(30);
refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED);
- verify(nodeAdmin, times(2)).setFrozen(eq(false)); // Make sure that we unfreeze!
+ verify(nodeAdmin, times(3)).setFrozen(eq(false)); // Make sure that we unfreeze!
}
@Test
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index ebed20326a3..62f69aa12cf 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -8,9 +8,8 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.hosted.dockerapi.Container;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerResources;
-import com.yahoo.vespa.hosted.dockerapi.ContainerStatsImpl;
-import com.yahoo.vespa.hosted.dockerapi.Docker;
-import com.yahoo.vespa.hosted.dockerapi.DockerException;
+import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
+import com.yahoo.vespa.hosted.dockerapi.exception.DockerException;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
@@ -29,8 +28,8 @@ import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Test;
import org.mockito.InOrder;
-import java.io.File;
import java.io.IOException;
+import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -78,7 +77,7 @@ public class NodeAgentImplTest {
private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class);
private final MetricReceiverWrapper metricReceiver = new MetricReceiverWrapper(MetricReceiver.nullImplementation);
private final AclMaintainer aclMaintainer = mock(AclMaintainer.class);
- private final Docker.ContainerStats emptyContainerStats = new ContainerStatsImpl(Collections.emptyMap(),
+ private final ContainerStats emptyContainerStats = new ContainerStats(Collections.emptyMap(),
Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap());
private final AthenzCredentialsMaintainer athenzCredentialsMaintainer = mock(AthenzCredentialsMaintainer.class);
@@ -132,6 +131,7 @@ public class NodeAgentImplTest {
final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository);
// TODO: Verify this isn't run unless 1st time
+ inOrder.verify(dockerOperations, never()).startServices(eq(containerName));
inOrder.verify(dockerOperations, times(1)).resumeNode(eq(containerName));
inOrder.verify(orchestrator).resume(hostName);
}
@@ -160,6 +160,41 @@ public class NodeAgentImplTest {
verify(storageMaintainer, times(1)).removeOldFilesFromNode(eq(containerName));
}
+ @Test
+ public void startsAfterStoppingServices() {
+ final InOrder inOrder = inOrder(dockerOperations);
+ final NodeSpec node = nodeBuilder
+ .wantedDockerImage(dockerImage)
+ .currentDockerImage(dockerImage)
+ .state(Node.State.active)
+ .wantedVespaVersion(vespaVersion)
+ .vespaVersion(vespaVersion)
+ .build();
+
+ NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true);
+ when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node));
+ when(storageMaintainer.getDiskUsageFor(eq(containerName))).thenReturn(Optional.of(187500000000L));
+
+ nodeAgent.converge();
+ inOrder.verify(dockerOperations, never()).startServices(eq(containerName));
+ inOrder.verify(dockerOperations, times(1)).resumeNode(eq(containerName));
+
+ nodeAgent.suspend();
+ nodeAgent.converge();
+ inOrder.verify(dockerOperations, never()).startServices(eq(containerName));
+ inOrder.verify(dockerOperations, times(1)).resumeNode(eq(containerName)); // Expect a resume, but no start services
+
+ // No new suspends/stops, so no need to resume/start
+ nodeAgent.converge();
+ inOrder.verify(dockerOperations, never()).startServices(eq(containerName));
+ inOrder.verify(dockerOperations, never()).resumeNode(eq(containerName));
+
+ nodeAgent.suspend();
+ nodeAgent.stopServices();
+ nodeAgent.converge();
+ inOrder.verify(dockerOperations, times(1)).startServices(eq(containerName));
+ inOrder.verify(dockerOperations, times(1)).resumeNode(eq(containerName));
+ }
@Test
public void absentContainerCausesStart() throws Exception {
@@ -185,6 +220,7 @@ public class NodeAgentImplTest {
nodeAgent.converge();
verify(dockerOperations, never()).removeContainer(any());
+ verify(dockerOperations, never()).startServices(any());
verify(orchestrator, never()).suspend(any(String.class));
final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository, aclMaintainer);
@@ -427,6 +463,8 @@ public class NodeAgentImplTest {
verify(dockerOperations, never()).createContainer(eq(containerName), any(), any());
verify(dockerOperations, never()).startContainer(eq(containerName));
+ verify(dockerOperations, never()).suspendNode(eq(containerName));
+ verify(dockerOperations, times(1)).stopServices(eq(containerName));
verify(orchestrator, never()).resume(any(String.class));
verify(orchestrator, never()).suspend(any(String.class));
// current Docker image and vespa version should be cleared
@@ -580,7 +618,7 @@ public class NodeAgentImplTest {
verify(dockerOperations, never()).removeContainer(any());
verify(dockerOperations, times(1)).createContainer(eq(containerName), eq(node), any());
verify(dockerOperations, times(1)).startContainer(eq(containerName));
- verify(nodeAgent, never()).runLocalResumeScriptIfNeeded(any());
+ verify(nodeAgent, never()).resumeNodeIfNeeded(any());
// The docker container was actually started and is running, but subsequent exec calls to set up
// networking failed
@@ -590,7 +628,7 @@ public class NodeAgentImplTest {
verify(dockerOperations, times(1)).removeContainer(any());
verify(dockerOperations, times(2)).createContainer(eq(containerName), eq(node), any());
verify(dockerOperations, times(2)).startContainer(eq(containerName));
- verify(nodeAgent, times(1)).runLocalResumeScriptIfNeeded(any());
+ verify(nodeAgent, times(1)).resumeNodeIfNeeded(any());
}
@Test
@@ -598,7 +636,7 @@ public class NodeAgentImplTest {
public void testGetRelevantMetrics() throws Exception {
final ObjectMapper objectMapper = new ObjectMapper();
ClassLoader classLoader = getClass().getClassLoader();
- File statsFile = new File(classLoader.getResource("docker.stats.json").getFile());
+ URL statsFile = classLoader.getResource("docker.stats.json");
Map<String, Map<String, Object>> dockerStats = objectMapper.readValue(statsFile, Map.class);
Map<String, Object> networks = dockerStats.get("networks");
@@ -606,8 +644,8 @@ public class NodeAgentImplTest {
Map<String, Object> cpu_stats = dockerStats.get("cpu_stats");
Map<String, Object> memory_stats = dockerStats.get("memory_stats");
Map<String, Object> blkio_stats = dockerStats.get("blkio_stats");
- Docker.ContainerStats stats1 = new ContainerStatsImpl(networks, precpu_stats, memory_stats, blkio_stats);
- Docker.ContainerStats stats2 = new ContainerStatsImpl(networks, cpu_stats, memory_stats, blkio_stats);
+ ContainerStats stats1 = new ContainerStats(networks, precpu_stats, memory_stats, blkio_stats);
+ ContainerStats stats2 = new ContainerStats(networks, cpu_stats, memory_stats, blkio_stats);
NodeSpec.Owner owner = new NodeSpec.Owner("tester", "testapp", "testinstance");
NodeSpec.Membership membership = new NodeSpec.Membership("clustType", "clustId", "grp", 3, false);
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java
index bdc4ea0789c..622d46ca587 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeJsonConverter.java
@@ -11,8 +11,8 @@ import com.yahoo.vespa.hosted.node.verification.spec.retrievers.HardwareInfo;
*/
public class NodeJsonConverter {
- private static void addStandardSpecifications(HardwareInfo nodeRepoHardwareInfo) {
- nodeRepoHardwareInfo.setInterfaceSpeedMbs(1000);
+ private static void setInterfaceSpeed(NodeSpec nodeSpec, HardwareInfo nodeRepoHardwareInfo) {
+ nodeRepoHardwareInfo.setInterfaceSpeedMbs(nodeSpec.getBandwidth());
}
private static void setIpv6Interface(NodeSpec nodeSpec, HardwareInfo nodeRepoHardwareInfo) {
@@ -29,7 +29,7 @@ public class NodeJsonConverter {
public static HardwareInfo convertJsonModelToHardwareInfo(NodeSpec nodeSpec) {
HardwareInfo nodeRepoHardwareInfo = nodeSpec.copyToHardwareInfo();
- addStandardSpecifications(nodeRepoHardwareInfo);
+ setInterfaceSpeed(nodeSpec, nodeRepoHardwareInfo);
setIpv4Interface(nodeSpec, nodeRepoHardwareInfo);
setIpv6Interface(nodeSpec, nodeRepoHardwareInfo);
return nodeRepoHardwareInfo;
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java
index 68a8060a6ad..16be1c39a74 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/NodeSpec.java
@@ -20,14 +20,16 @@ public class NodeSpec {
private final double minMainMemoryAvailableGb;
private final double minCpuCores;
private final boolean fastDisk;
+ private final double bandwidth;
private final String[] ipAddresses;
public NodeSpec(double minDiskAvailableGb, double minMainMemoryAvailableGb, double minCpuCores, boolean fastDisk,
- String[] ipAddresses) {
+ double bandwidth, String[] ipAddresses) {
this.minDiskAvailableGb = minDiskAvailableGb;
this.minMainMemoryAvailableGb = minMainMemoryAvailableGb;
this.minCpuCores = minCpuCores;
this.fastDisk = fastDisk;
+ this.bandwidth = bandwidth;
this.ipAddresses = ipAddresses;
}
@@ -37,6 +39,7 @@ public class NodeSpec {
hardwareInfo.setMinDiskAvailableGb(this.minDiskAvailableGb);
hardwareInfo.setMinCpuCores((int) Math.round(this.minCpuCores));
hardwareInfo.setDiskType(this.fastDisk ? DiskType.FAST : DiskType.SLOW);
+ hardwareInfo.setInterfaceSpeedMbs(bandwidth);
hardwareInfo.setIpv6Connection(getIpv6Address() != null);
return hardwareInfo;
}
@@ -54,4 +57,6 @@ public class NodeSpec {
.filter(ip -> ip instanceof Inet4Address)
.findFirst().map(InetAddress::getHostAddress).orElse(null);
}
+
+ public double getBandwidth() { return bandwidth ; }
}
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java
index 88bd0539ccd..57d83694709 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/HardwareNodeComparator.java
@@ -35,7 +35,7 @@ public class HardwareNodeComparator {
private static void setMemoryMetrics(HardwareInfo nodeRepoHardwareInfo, HardwareInfo actualHardware, SpecVerificationReport specVerificationReport) {
double expectedMemory = nodeRepoHardwareInfo.getMinMainMemoryAvailableGb();
double actualMemory = actualHardware.getMinMainMemoryAvailableGb();
- if (outsideThreshold(expectedMemory, actualMemory, PERCENTAGE_THRESHOLD)) {
+ if (belowThreshold(expectedMemory, actualMemory, PERCENTAGE_THRESHOLD)) {
specVerificationReport.setActualMemoryAvailable(actualMemory);
}
}
@@ -59,7 +59,7 @@ public class HardwareNodeComparator {
private static void setDiskSpaceMetrics(HardwareInfo nodeRepoHardwareInfo, HardwareInfo actualHardware, SpecVerificationReport specVerificationReport) {
double expectedDiskSpace = nodeRepoHardwareInfo.getMinDiskAvailableGb();
double actualDiskSpace = actualHardware.getMinDiskAvailableGb();
- if (outsideThreshold(expectedDiskSpace, actualDiskSpace, PERCENTAGE_THRESHOLD)) {
+ if (belowThreshold(expectedDiskSpace, actualDiskSpace, PERCENTAGE_THRESHOLD)) {
specVerificationReport.setActualDiskSpaceAvailable(actualDiskSpace);
}
}
@@ -76,10 +76,9 @@ public class HardwareNodeComparator {
}
}
- private static boolean outsideThreshold(double value1, double value2, double thresholdPercentage) {
+ private static boolean belowThreshold(double expected, double actual, double thresholdPercentage) {
double lowerThresholdPercentage = 1 - thresholdPercentage;
- double upperThresholdPercentage = 1 + thresholdPercentage;
- return value1 < lowerThresholdPercentage * value2 || value1 > upperThresholdPercentage * value2;
+ return actual < expected * lowerThresholdPercentage;
}
}
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java
index 627477def0f..3a4a1697a75 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifier.java
@@ -39,6 +39,9 @@ public class SpecVerifier extends Main.VerifierCommand {
@Option(name = {"-s", "--is_ssd"}, required = true, description = "Set to true if disk is SSD", allowedValues = {"true", "false"})
private String fastDisk;
+ @Option(name = {"-b", "--bandwidth"}, required = true, description = "Expected network interface speed in Mbit/s")
+ private double bandwidth;
+
@Option(name = {"-i", "--ips"}, description = "Comma separated list of IP addresses assigned to this node")
private String ipAddresses;
@@ -49,14 +52,14 @@ public class SpecVerifier extends Main.VerifierCommand {
.map(s -> s.split(","))
.orElse(new String[0]);
- NodeSpec nodeSpec = new NodeSpec(diskAvailableGb, mainMemoryAvailableGb, cpuCores, Boolean.valueOf(fastDisk), ips);
+ NodeSpec nodeSpec = new NodeSpec(diskAvailableGb, mainMemoryAvailableGb, cpuCores, Boolean.valueOf(fastDisk), bandwidth, ips);
SpecVerificationReport specVerificationReport = verifySpec(nodeSpec, commandExecutor);
hardwareDivergenceReport.setSpecVerificationReport(specVerificationReport);
}
private SpecVerificationReport verifySpec(NodeSpec nodeSpec, CommandExecutor commandExecutor) {
- VerifierSettings verifierSettings = new VerifierSettings(nodeSpec);
+ VerifierSettings verifierSettings = new VerifierSettings(false);
HardwareInfo actualHardware = HardwareInfoRetriever.retrieve(commandExecutor, verifierSettings);
return makeVerificationReport(actualHardware, nodeSpec);
}
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java
index f2e78d672cb..3bc1a447ea8 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/VerifierSettings.java
@@ -17,6 +17,10 @@ public class VerifierSettings {
this.checkIPv6 = true;
}
+ public VerifierSettings(boolean checkIPv6) {
+ this.checkIPv6 = checkIPv6;
+ }
+
public VerifierSettings(NodeSpec nodeSpec) {
checkIPv6 = nodeSpec.getIpv6Address() != null;
}
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java
index 5afdbbb1c78..9f147f79934 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/verification/spec/retrievers/NetRetriever.java
@@ -60,6 +60,8 @@ public class NetRetriever implements HardwareRetriever {
findInterfaceSpeed(parseResults);
if (verifierSettings.isCheckIPv6()) {
testPingResponse(parseResults);
+ } else {
+ hardwareInfo.setIpv6Connection(true);
}
updateHardwareInfoWithNet(parseResults);
}
diff --git a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java
index 5762975ec9b..5216a8563d7 100644
--- a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java
+++ b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/commons/noderepo/IPAddressVerifierTest.java
@@ -17,7 +17,7 @@ public class IPAddressVerifierTest {
private final String ipv4Address = "10.2.4.8";
private final String ipv6Address = "fdab:0:0:0:0:0:0:1234";
- private final NodeSpec nodeSpec = new NodeSpec(1920, 256, 48, true, new String[]{ipv4Address, ipv6Address});
+ private final NodeSpec nodeSpec = new NodeSpec(1920, 256, 48, true, 10_000, new String[]{ipv4Address, ipv6Address});
private final String hostname = "test123.region.domain.tld";
private IPAddressVerifier ipAddressVerifier = spy(new IPAddressVerifier(hostname));
@@ -63,7 +63,7 @@ public class IPAddressVerifierTest {
@Test
public void getFaultyIpAddresses_should_return_empty_array_when_parameters_are_invalid() {
- final NodeSpec nodeWithNoIP = new NodeSpec(1920, 256, 48, true, new String[0]);
+ final NodeSpec nodeWithNoIP = new NodeSpec(1920, 256, 48, true, 10_000, new String[0]);
assertEquals(0, ipAddressVerifier.getFaultyIpAddresses(nodeWithNoIP).length);
}
diff --git a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java
index d819a9dd269..96af900095f 100644
--- a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java
+++ b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/verification/spec/SpecVerifierTest.java
@@ -35,10 +35,11 @@ public class SpecVerifierTest {
String result = Main.execute(new String[] {
"specification",
- "-d", "250",
+ "-d", "2500",
"-m", "64",
"-c", "1.5",
"-s", "true",
+ "-b", "10000.0",
"-i", "10.11.12.13,::1234"
}, commandExecutor);
@@ -46,6 +47,7 @@ public class SpecVerifierTest {
"{\"specVerificationReport\":{\"" +
"actualMemoryAvailable\":4.042128,\"" +
"actualDiskSpaceAvailable\":1760.0,\"" +
+ "actualInterfaceSpeed\":1000.0,\"" +
"actualcpuCores\":4,\"" +
"faultyIpAddresses\":[\"10.11.12.13\",\"0:0:0:0:0:0:0:1234\"]}}", result);
}
@@ -66,6 +68,7 @@ public class SpecVerifierTest {
"-m", "4",
"-c", "4",
"-s", "true",
+ "-b", "1000"
}, commandExecutor);
assertEquals("null", result);
@@ -90,6 +93,7 @@ public class SpecVerifierTest {
"-m", "4",
"-c", "4",
"-s", "true",
+ "-b", "1000",
"-h", previousResult
}, commandExecutor);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java
index b6955195dcf..f61d4158253 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.service.monitor.application.ConfigServerApplication;
import com.yahoo.vespa.service.monitor.application.ConfigServerHostApplication;
+import com.yahoo.vespa.service.monitor.application.ControllerApplication;
import com.yahoo.vespa.service.monitor.application.HostedVespaApplication;
import com.yahoo.vespa.service.monitor.application.ProxyHostApplication;
@@ -35,7 +36,8 @@ public class InfrastructureProvisioner extends Maintainer {
private static final List<HostedVespaApplication> HOSTED_VESPA_APPLICATIONS = Arrays.asList(
ConfigServerApplication.CONFIG_SERVER_APPLICATION,
ConfigServerHostApplication.CONFIG_SERVER_HOST_APPLICATION,
- ProxyHostApplication.PROXY_HOST_APPLICATION);
+ ProxyHostApplication.PROXY_HOST_APPLICATION,
+ ControllerApplication.CONTROLLER_APPLICATION);
private final Provisioner provisioner;
private final InfrastructureVersions infrastructureVersions;
@@ -101,4 +103,5 @@ public class InfrastructureProvisioner extends Maintainer {
}
return targetVersion;
}
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureVersions.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureVersions.java
index 61783bb4483..31dd5d74404 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureVersions.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureVersions.java
@@ -28,8 +28,14 @@ public class InfrastructureVersions {
}
public void setTargetVersion(NodeType nodeType, Version newTargetVersion, boolean force) {
- if (nodeType != NodeType.config && nodeType != NodeType.confighost && nodeType != NodeType.proxyhost) {
- throw new IllegalArgumentException("Cannot set version for type " + nodeType);
+ switch (nodeType) {
+ case config:
+ case confighost:
+ case proxyhost:
+ case controller:
+ break;
+ default:
+ throw new IllegalArgumentException("Cannot set version for type " + nodeType);
}
if (newTargetVersion.isEmpty()) {
throw new IllegalArgumentException("Invalid target version: " + newTargetVersion.toFullString());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
index 454ede61243..ded19a84f0d 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java
@@ -70,7 +70,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
jobControl = new JobControl(nodeRepository.database());
infrastructureVersions = new InfrastructureVersions(nodeRepository.database());
- nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, durationFromEnv("fail_grace").orElse(defaults.failGrace), clock, orchestrator, throttlePolicyFromEnv("throttle_policy").orElse(defaults.throttlePolicy), metric, jobControl, configserverConfig);
+ nodeFailer = new NodeFailer(deployer, hostLivenessTracker, serviceMonitor, nodeRepository, durationFromEnv("fail_grace").orElse(defaults.failGrace), clock, orchestrator, throttlePolicyFromEnv().orElse(defaults.throttlePolicy), metric, jobControl, configserverConfig);
periodicApplicationMaintainer = new PeriodicApplicationMaintainer(deployer, nodeRepository, defaults.redeployMaintainerInterval, durationFromEnv("periodic_redeploy_interval").orElse(defaults.periodicRedeployInterval), jobControl);
operatorChangeApplicationMaintainer = new OperatorChangeApplicationMaintainer(deployer, nodeRepository, clock, durationFromEnv("operator_change_redeploy_interval").orElse(defaults.operatorChangeRedeployInterval), jobControl);
reservationExpirer = new ReservationExpirer(nodeRepository, clock, durationFromEnv("reservation_expiry").orElse(defaults.reservationExpiry), jobControl);
@@ -117,8 +117,8 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
return Optional.ofNullable(System.getenv(envPrefix + envVariable)).map(Long::parseLong).map(Duration::ofSeconds);
}
- private static Optional<NodeFailer.ThrottlePolicy> throttlePolicyFromEnv(String envVariable) {
- String policyName = System.getenv(envPrefix + envVariable);
+ private static Optional<NodeFailer.ThrottlePolicy> throttlePolicyFromEnv() {
+ String policyName = System.getenv(envPrefix + "throttle_policy");
try {
return Optional.ofNullable(policyName).map(NodeFailer.ThrottlePolicy::valueOf);
} catch (IllegalArgumentException e) {
@@ -162,26 +162,24 @@ public class NodeRepositoryMaintenance extends AbstractComponent {
operatorChangeRedeployInterval = Duration.ofMinutes(1);
failedExpirerInterval = Duration.ofMinutes(10);
provisionedExpiry = Duration.ofHours(4);
- reservationExpiry = Duration.ofMinutes(20); // Need to be long enough for deployment to be finished for all config model versions
rebootInterval = Duration.ofDays(30);
nodeRetirerInterval = Duration.ofMinutes(30);
metricsInterval = Duration.ofMinutes(1);
infrastructureProvisionInterval = Duration.ofMinutes(3);
throttlePolicy = NodeFailer.ThrottlePolicy.hosted;
- if (zone.environment().isTest())
- retiredExpiry = Duration.ofMinutes(1); // fast turnaround as test envs don't have persistent data
- else
- retiredExpiry = Duration.ofDays(4); // give up migrating data after 4 days
-
- if (zone.environment().equals(Environment.prod) && zone.system() == SystemName.main) {
+ if (zone.environment().equals(Environment.prod) && zone.system() != SystemName.cd) {
inactiveExpiry = Duration.ofHours(4); // enough time for the application owner to discover and redeploy
retiredInterval = Duration.ofMinutes(29);
dirtyExpiry = Duration.ofHours(2); // enough time to clean the node
+ retiredExpiry = Duration.ofDays(4); // give up migrating data after 4 days
+ reservationExpiry = Duration.ofMinutes(20); // Need to be long enough for deployment to be finished for all config model versions
} else {
inactiveExpiry = Duration.ofSeconds(2); // support interactive wipe start over
- retiredInterval = Duration.ofMinutes(5);
+ retiredInterval = Duration.ofMinutes(1);
dirtyExpiry = Duration.ofMinutes(30);
+ retiredExpiry = Duration.ofMinutes(20);
+ reservationExpiry = Duration.ofMinutes(10);
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index dbe6589dd7f..db3db139044 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -320,12 +320,13 @@ public class NodeSerializer {
static NodeType nodeTypeFromString(String typeString) {
switch (typeString) {
- case "tenant" : return NodeType.tenant;
- case "host" : return NodeType.host;
- case "proxy" : return NodeType.proxy;
- case "proxyhost" : return NodeType.proxyhost;
- case "config" : return NodeType.config;
- case "confighost" : return NodeType.confighost;
+ case "tenant": return NodeType.tenant;
+ case "host": return NodeType.host;
+ case "proxy": return NodeType.proxy;
+ case "proxyhost": return NodeType.proxyhost;
+ case "config": return NodeType.config;
+ case "confighost": return NodeType.confighost;
+ case "controller": return NodeType.controller;
default : throw new IllegalArgumentException("Unknown node type '" + typeString + "'");
}
}
@@ -338,6 +339,7 @@ public class NodeSerializer {
case proxyhost: return "proxyhost";
case config: return "config";
case confighost: return "confighost";
+ case controller: return "controller";
}
throw new IllegalArgumentException("Serialized form of '" + type + "' not defined");
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
index 24e9682b01c..adffb17c808 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
@@ -230,12 +230,13 @@ public class NodesApiHandler extends LoggingRequestHandler {
private static NodeType nodeTypeFromSlime(Inspector object) {
if (! object.valid()) return NodeType.tenant; // default
switch (object.asString()) {
- case "tenant" : return NodeType.tenant;
- case "host" : return NodeType.host;
- case "proxy" : return NodeType.proxy;
- case "proxyhost" : return NodeType.proxyhost;
- case "config" : return NodeType.config;
- case "confighost" : return NodeType.confighost;
+ case "tenant": return NodeType.tenant;
+ case "host": return NodeType.host;
+ case "proxy": return NodeType.proxy;
+ case "proxyhost": return NodeType.proxyhost;
+ case "config": return NodeType.config;
+ case "confighost": return NodeType.confighost;
+ case "controller": return NodeType.controller;
default: throw new IllegalArgumentException("Unknown node type '" + object.asString() + "'");
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
index 970871a4d05..9364c5f5f80 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
@@ -153,6 +153,7 @@ class NodesResponse extends HttpResponse {
if (node.flavor().cost() > 0)
object.setLong("cost", node.flavor().cost());
object.setBool("fastDisk", node.flavor().hasFastDisk());
+ object.setDouble("bandwidth", node.flavor().getBandwidth());
object.setString("environment", node.flavor().getType().name());
if (node.allocation().isPresent()) {
toSlime(node.allocation().get().owner(), object.setObject("owner"));
@@ -196,6 +197,7 @@ class NodesResponse extends HttpResponse {
case proxyhost: return "proxyhost";
case config: return "config";
case confighost: return "confighost";
+ case controller: return "controller";
default:
throw new RuntimeException("New type added to enum, not implemented in NodesResponse: " + type.name());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java
index f0c4ad2ef2d..642e6adfc75 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java
@@ -2,8 +2,8 @@
package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.component.Version;
-import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.ClusterMembership;
+import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.Provisioner;
import com.yahoo.vespa.hosted.provision.Node;
@@ -13,11 +13,17 @@ import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.Allocation;
import com.yahoo.vespa.hosted.provision.node.Generation;
import com.yahoo.vespa.service.monitor.application.ConfigServerApplication;
+import com.yahoo.vespa.service.monitor.application.ControllerApplication;
+import com.yahoo.vespa.service.monitor.application.HostedVespaApplication;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
import java.time.Duration;
+import java.util.Arrays;
import java.util.Optional;
-import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
@@ -26,47 +32,63 @@ import static org.mockito.Mockito.when;
/**
* @author freva
*/
+@RunWith(Parameterized.class)
public class InfrastructureProvisionerTest {
- private final NodeRepositoryTester tester = new NodeRepositoryTester();
+ @Parameters(name = "application={0}")
+ public static Iterable<Object[]> parameters() {
+ return Arrays.asList(
+ new HostedVespaApplication[]{ConfigServerApplication.CONFIG_SERVER_APPLICATION},
+ new HostedVespaApplication[]{ControllerApplication.CONTROLLER_APPLICATION}
+ );
+ }
+ private final NodeRepositoryTester tester = new NodeRepositoryTester();
private final Provisioner provisioner = mock(Provisioner.class);
private final NodeRepository nodeRepository = tester.nodeRepository();
private final InfrastructureVersions infrastructureVersions = mock(InfrastructureVersions.class);
private final InfrastructureProvisioner infrastructureProvisioner = new InfrastructureProvisioner(
provisioner, nodeRepository, infrastructureVersions, Duration.ofDays(99), new JobControl(nodeRepository.database()));
+ private final HostedVespaApplication application;
+ private final NodeType nodeType;
+
+ public InfrastructureProvisionerTest(HostedVespaApplication application) {
+ this.application = application;
+ this.nodeType = application.getCapacity().type();
+ }
+
@Test
public void returns_version_if_usable_nodes_on_old_version() {
Version target = Version.fromString("6.123.456");
Version oldVersion = Version.fromString("6.122.333");
- when(infrastructureVersions.getTargetVersionFor(eq(NodeType.config))).thenReturn(Optional.of(target));
+ when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(target));
addNode(1, Node.State.failed, Optional.of(oldVersion));
addNode(2, Node.State.dirty, Optional.empty());
addNode(3, Node.State.active, Optional.of(oldVersion));
- assertEquals(Optional.of(target), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ assertEquals(Optional.of(target), infrastructureProvisioner.getTargetVersion(nodeType));
}
@Test
public void returns_version_if_has_usable_nodes_without_version() {
Version target = Version.fromString("6.123.456");
Version oldVersion = Version.fromString("6.122.333");
- when(infrastructureVersions.getTargetVersionFor(eq(NodeType.config))).thenReturn(Optional.of(target));
+ when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(target));
addNode(1, Node.State.failed, Optional.of(oldVersion));
addNode(2, Node.State.ready, Optional.empty());
addNode(3, Node.State.active, Optional.of(target));
- assertEquals(Optional.of(target), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ assertEquals(Optional.of(target), infrastructureProvisioner.getTargetVersion(nodeType));
}
@Test
public void returns_empty_if_usable_nodes_on_target_version() {
Version target = Version.fromString("6.123.456");
Version oldVersion = Version.fromString("6.122.333");
- when(infrastructureVersions.getTargetVersionFor(eq(NodeType.config))).thenReturn(Optional.of(target));
+ when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(target));
addNode(1, Node.State.failed, Optional.of(oldVersion));
addNode(2, Node.State.parked, Optional.of(target));
@@ -74,32 +96,31 @@ public class InfrastructureProvisionerTest {
addNode(4, Node.State.inactive, Optional.of(target));
addNode(5, Node.State.dirty, Optional.empty());
- assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(nodeType));
}
@Test
public void returns_empty_if_no_usable_nodes() {
- when(infrastructureVersions.getTargetVersionFor(eq(NodeType.config))).thenReturn(Optional.of(Version.fromString("6.123.456")));
+ when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(Version.fromString("6.123.456")));
// No nodes in node repo
- assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(nodeType));
// Add nodes in non-provisionable states
addNode(1, Node.State.dirty, Optional.empty());
addNode(2, Node.State.failed, Optional.empty());
- assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(nodeType));
}
@Test
public void returns_empty_if_target_version_not_set() {
- when(infrastructureVersions.getTargetVersionFor(eq(NodeType.config))).thenReturn(Optional.empty());
- assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(NodeType.config));
+ when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.empty());
+ assertEquals(Optional.empty(), infrastructureProvisioner.getTargetVersion(nodeType));
}
private Node addNode(int id, Node.State state, Optional<Version> wantedVespaVersion) {
- Node node = tester.addNode("id-" + id, "node-" + id, "default", NodeType.config);
+ Node node = tester.addNode("id-" + id, "node-" + id, "default", nodeType);
Optional<Node> nodeWithAllocation = wantedVespaVersion.map(version -> {
- ConfigServerApplication application = ConfigServerApplication.CONFIG_SERVER_APPLICATION;
ClusterSpec clusterSpec = ClusterSpec.from(application.getClusterType(), application.getClusterId(), ClusterSpec.Group.from(0), version, false);
ClusterMembership membership = ClusterMembership.from(clusterSpec, 1);
Allocation allocation = new Allocation(application.getApplicationId(), membership, new Generation(0, 0), false);
@@ -107,4 +128,5 @@ public class InfrastructureProvisionerTest {
});
return nodeRepository.database().writeTo(state, nodeWithAllocation.orElse(node), Agent.system, Optional.empty());
}
+
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index a838d5c7b64..ebcc46d5661 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -268,6 +268,19 @@ public class RestApiTest {
}
@Test
+ public void post_controller_node() throws Exception {
+ String data = "[{\"hostname\":\"controller1.yahoo.com\", \"openStackId\":\"fake-controller1.yahoo.com\"," +
+ createIpAddresses("127.0.0.1") +
+ "\"flavor\":\"default\"" +
+ ", \"type\":\"controller\"}]";
+ assertResponse(new Request("http://localhost:8080/nodes/v2/node", data.getBytes(StandardCharsets.UTF_8),
+ Request.Method.POST),
+ "{\"message\":\"Added 1 nodes to the provisioned state\"}");
+
+ assertFile(new Request("http://localhost:8080/nodes/v2/node/controller1.yahoo.com"), "controller1.json");
+ }
+
+ @Test
public void fails_to_deallocate_node_with_hardware_failure() throws Exception {
assertResponse(new Request("http://localhost:8080/nodes/v2/node",
("[" + asNodeJson("host12.yahoo.com", "default") + "]").
@@ -408,7 +421,6 @@ public class RestApiTest {
"{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not set host2.yahoo.com active. It has no allocation.\"}");
}
-
@Test
public void test_node_patching() throws Exception {
assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
@@ -508,7 +520,7 @@ public class RestApiTest {
// Initially, no versions are set
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"), "{\"versions\":{},\"osVersions\":{}}");
- // Set version for config and confighost
+ // Set version for config, confighost and controller
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/config",
Utf8.toBytes("{\"version\": \"6.123.456\"}"),
Request.Method.PATCH),
@@ -517,10 +529,15 @@ public class RestApiTest {
Utf8.toBytes("{\"version\": \"6.123.456\"}"),
Request.Method.PATCH),
"{\"message\":\"Set version to 6.123.456 for nodes of type confighost\"}");
+ assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/controller",
+ Utf8.toBytes("{\"version\": \"6.123.456\"}"),
+ Request.Method.PATCH),
+ "{\"message\":\"Set version to 6.123.456 for nodes of type controller\"}");
+
// Verify versions are set
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"),
- "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.456\"},\"osVersions\":{}}");
+ "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.456\",\"controller\":\"6.123.456\"},\"osVersions\":{}}");
// Setting empty version fails
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
@@ -529,6 +546,13 @@ public class RestApiTest {
400,
"{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid target version: 0.0.0\"}");
+ // Setting version for unsupported node type fails
+ assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/tenant",
+ Utf8.toBytes("{\"version\": \"6.123.456\"}"),
+ Request.Method.PATCH),
+ 400,
+ "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cannot set version for type tenant\"}");
+
// Omitting version field fails
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
Utf8.toBytes("{}"),
@@ -552,7 +576,7 @@ public class RestApiTest {
// Verify version has been updated
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"),
- "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.1\"},\"osVersions\":{}}");
+ "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.1\",\"controller\":\"6.123.456\"},\"osVersions\":{}}");
// Upgrade OS for confighost and host
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
@@ -566,7 +590,7 @@ public class RestApiTest {
// OS versions are set
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"),
- "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.1\"},\"osVersions\":{\"host\":\"7.5.2\",\"confighost\":\"7.5.2\"}}");
+ "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.123.1\",\"controller\":\"6.123.456\"},\"osVersions\":{\"host\":\"7.5.2\",\"confighost\":\"7.5.2\"}}");
// Upgrade OS and Vespa together
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
index 796b03e7e68..f57f40ea171 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
index 361459390f9..54cf3269b09 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json
new file mode 100644
index 00000000000..a5d2a7a37dd
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json
@@ -0,0 +1,34 @@
+{
+ "url": "http://localhost:8080/nodes/v2/node/controller1.yahoo.com",
+ "id": "controller1.yahoo.com",
+ "state": "provisioned",
+ "type": "controller",
+ "hostname": "controller1.yahoo.com",
+ "openStackId": "fake-controller1.yahoo.com",
+ "flavor": "default",
+ "canonicalFlavor": "default",
+ "minDiskAvailableGb": 400.0,
+ "minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
+ "minCpuCores": 2.0,
+ "fastDisk": true,
+ "bandwidth":0.0,
+ "environment": "BARE_METAL",
+ "rebootGeneration": 0,
+ "currentRebootGeneration": 0,
+ "failCount": 0,
+ "hardwareFailure": false,
+ "wantToRetire": false,
+ "wantToDeprovision": false,
+ "history": [
+ {
+ "event": "provisioned",
+ "at": 123,
+ "agent": "system"
+ }
+ ],
+ "ipAddresses": [
+ "127.0.0.1"
+ ],
+ "additionalIpAddresses": []
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
index 7823ed0431d..c98fbb46ff8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "DOCKER_CONTAINER",
"owner": {
"tenant": "tenant3",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
index 2e8092012fb..203220d1b84 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
index 88bda7544d9..eed164689f1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
index a13dfae927f..e92cf895a8a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
index f7a1d6ab9a9..b832fddf119 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
index f877d33672f..17729207c1e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
index 913cf9852aa..2c3d112c69a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
index 685b0a52b15..73c7f89ff0f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "zoneapp",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
index 08e4904e35c..794082db0c1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "tenant1",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
index fe65f34bae5..9b18c8ea52c 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "tenant1",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
index e0e899afbef..ae0354b4d27 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "DOCKER_CONTAINER",
"rebootGeneration": 0,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
index aa60cfae815..5835d718f50 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "tenant2",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
index eb13d077d7f..7a36c26f385 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
@@ -13,6 +13,7 @@
"minCpuCores": 6.0,
"cost": 200,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
index 86f31c5aa62..247099fcae7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-medium-disk",
"minCpuCores": 6.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "tenant3",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
index a2f72766d7f..87a4a355b57 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "DOCKER_CONTAINER",
"owner": {
"tenant": "tenant3",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
index 1e1ea1a2445..4c22b4397e0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "DOCKER_CONTAINER",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
index ceb393f4bf6..4e1032442b3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
@@ -13,6 +13,7 @@
"description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "DOCKER_CONTAINER",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
index f3f1306af1e..18d019c4b6e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
index 4f8b988ccbf..9d2c67ffcb7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
index a5043746749..3e33cfb7a8d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
@@ -12,6 +12,7 @@
"description":"Flavor-name-is-default",
"minCpuCores":2.0,
"fastDisk":true,
+ "bandwidth":0.0,
"environment":"BARE_METAL",
"owner": {
"tenant": "tenant2",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
index c5382dfd1a7..f0c63048dcc 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"owner": {
"tenant": "tenant2",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
index b1c654b4e00..53a6e5c8d77 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 0,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
index 0fa0bf6631d..a768cf73dda 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 0,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
index 43405f0aafc..8fb4372fb80 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large-variant",
"minCpuCores": 64.0,
"fastDisk": true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 0,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
index 190dbc41f34..10eaeba153a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk":true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
index c7f6344d974..74c65d30f34 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
@@ -12,6 +12,7 @@
"description": "Flavor-name-is-large-variant",
"minCpuCores": 64.0,
"fastDisk":true,
+ "bandwidth":0.0,
"environment": "BARE_METAL",
"rebootGeneration": 0,
"currentRebootGeneration": 0,
diff --git a/parent/pom.xml b/parent/pom.xml
index e6ad2b18df9..891eabd9c83 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -97,7 +97,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.7.0</version>
+ <version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
@@ -461,7 +461,7 @@
<artifactId>commons-pool</artifactId>
<version>1.5.6</version>
</dependency>
- <!-- Explicitly included to get Zookeeper version 3.4.12,
+ <!-- Explicitly included to get Zookeeper version 3.4.13,
can be excluded if you want the Zookeeper version
used by curator by default
-->
@@ -673,6 +673,11 @@
<artifactId>language-detector</artifactId>
<version>0.6</version>
</dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ <version>${jna.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
@@ -680,6 +685,7 @@
<antlr.version>3.5.2</antlr.version>
<antlr4.version>4.5</antlr4.version>
<asm.version>6.2</asm.version>
+ <jna.version>4.5.2</jna.version>
<!-- Athenz dependencies. Make sure these dependencies matches those in Vespa's internal repositories -->
<athenz.version>1.7.43</athenz.version>
<commons-lang.version>2.6</commons-lang.version>
diff --git a/processing/src/main/java/com/yahoo/processing/execution/AsyncExecution.java b/processing/src/main/java/com/yahoo/processing/execution/AsyncExecution.java
index eac96e9b408..2c40165f8e5 100644
--- a/processing/src/main/java/com/yahoo/processing/execution/AsyncExecution.java
+++ b/processing/src/main/java/com/yahoo/processing/execution/AsyncExecution.java
@@ -59,14 +59,14 @@ public class AsyncExecution {
/**
* Create an async execution of a single processor
*/
- public AsyncExecution(final Processor processor, Execution parent) {
+ public AsyncExecution(Processor processor, Execution parent) {
this(new Execution(processor, parent));
}
/**
* Create an async execution of a chain
*/
- public AsyncExecution(final Chain<? extends Processor> chain, Execution parent) {
+ public AsyncExecution(Chain<? extends Processor> chain, Execution parent) {
this(new Execution(chain, parent));
}
@@ -81,7 +81,7 @@ public class AsyncExecution {
*
* @param execution the execution from which the state of this is created
*/
- public AsyncExecution(final Execution execution) {
+ public AsyncExecution(Execution execution) {
this.execution = new Execution(execution);
}
@@ -89,7 +89,7 @@ public class AsyncExecution {
* Performs an async processing. Note that the given request cannot be simultaneously
* used in multiple such processings - a clone must be created for each.
*/
- public FutureResponse process(final Request request) {
+ public FutureResponse process(Request request) {
return getFutureResponse(new Callable<Response>() {
@Override
public Response call() {
@@ -99,13 +99,13 @@ public class AsyncExecution {
}
private static <T> Future<T> getFuture(final Callable<T> callable) {
- final FutureTask<T> future = new FutureTask<>(callable);
+ FutureTask<T> future = new FutureTask<>(callable);
executorMain.execute(future);
return future;
}
- private FutureResponse getFutureResponse(final Callable<Response> callable, final Request request) {
- final FutureResponse future = new FutureResponse(callable, execution, request);
+ private FutureResponse getFutureResponse(Callable<Response> callable, Request request) {
+ FutureResponse future = new FutureResponse(callable, execution, request);
executorMain.execute(future.delegate());
return future;
}
@@ -118,15 +118,15 @@ public class AsyncExecution {
* @return the list of responses in the same order as returned from the task collection
*/
// Note that this may also be achieved using guava Futures. Not sure if this should be deprecated because of it.
- public static List<Response> waitForAll(final Collection<FutureResponse> tasks, final long timeout) {
+ public static List<Response> waitForAll(Collection<FutureResponse> tasks, long timeout) {
// Copy the list in case it is modified while we are waiting
- final List<FutureResponse> workingTasks = new ArrayList<>(tasks);
+ List<FutureResponse> workingTasks = new ArrayList<>(tasks);
@SuppressWarnings({"rawtypes", "unchecked"})
- final Future task = getFuture(new Callable() {
+ Future task = getFuture(new Callable() {
@Override
public List<Future> call() {
- for (final FutureResponse task : workingTasks) {
+ for (FutureResponse task : workingTasks) {
task.get();
}
return null;
@@ -135,12 +135,12 @@ public class AsyncExecution {
try {
task.get(timeout, TimeUnit.MILLISECONDS);
- } catch (final TimeoutException | InterruptedException | ExecutionException e) {
+ } catch (TimeoutException | InterruptedException | ExecutionException e) {
// Handle timeouts below
}
- final List<Response> responses = new ArrayList<>(tasks.size());
- for (final FutureResponse future : workingTasks)
+ List<Response> responses = new ArrayList<>(tasks.size());
+ for (FutureResponse future : workingTasks)
responses.add(getTaskResponse(future));
return responses;
}
@@ -153,5 +153,4 @@ public class AsyncExecution {
}
}
-
}
diff --git a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp
index 8affe6e9cbf..2c9a2b300eb 100644
--- a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp
@@ -221,8 +221,8 @@ TEST_F("requireThatStateIsReported", Fixture)
" },\n"
" \"documents\": {\n"
" \"active\": 0,\n"
- " \"indexed\": 0,\n"
- " \"stored\": 0,\n"
+ " \"ready\": 0,\n"
+ " \"total\": 0,\n"
" \"removed\": 0\n"
" }\n"
"}\n",
diff --git a/searchcore/src/vespa/searchcore/config/proton.def b/searchcore/src/vespa/searchcore/config/proton.def
index ca1ea67d288..0ba42aad102 100644
--- a/searchcore/src/vespa/searchcore/config/proton.def
+++ b/searchcore/src/vespa/searchcore/config/proton.def
@@ -228,8 +228,8 @@ summary.cache.compression.type enum {NONE, LZ4, ZSTD} default=LZ4
## Control compression level of the summary while in cache.
## LZ4 has normal range 1..9 while ZSTD has range 1..19
-## 9 is a reasonable default for both
-summary.cache.compression.level int default=9
+## 6 is a default for lz4 to prioritize speed.
+summary.cache.compression.level int default=6
## Control if cache entry is updated or ivalidated when changed.
summary.cache.update_strategy enum {INVALIDATE, UPDATE} default=INVALIDATE
diff --git a/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.cpp b/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.cpp
index b85e706397d..9dd4e81f91a 100644
--- a/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.cpp
+++ b/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.cpp
@@ -297,7 +297,7 @@ Fdispatch::Init()
LOG(debug, "Creating FNET transport");
- _transport = std::make_unique<FNET_Transport>(std::make_shared<vespalib::NullCryptoEngine>(), _config->transportthreads); // disable encryption
+ _transport = std::make_unique<FNET_Transport>(_config->transportthreads);
// grab node slowness limit defaults
diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt b/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt
index b85258557ba..ec8b7d18143 100644
--- a/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/fdispatch/search/CMakeLists.txt
@@ -17,4 +17,5 @@ vespa_add_library(searchcore_fdispatch_search STATIC
search_path.cpp
DEPENDS
searchcore_fconfig
+ searchcore_util
)
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt
index 6972f6caa98..6e01bae1866 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt
@@ -16,6 +16,7 @@ vespa_add_library(searchcore_proton_metrics STATIC
legacy_attribute_metrics.cpp
legacy_documentdb_metrics.cpp
legacy_proton_metrics.cpp
+ legacy_sessionmanager_metrics.cpp
memory_usage_metrics.cpp
metrics_engine.cpp
resource_usage_metrics.cpp
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.cpp
index 661b5e34f34..c618614ea52 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.cpp
+++ b/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.cpp
@@ -23,18 +23,20 @@ DocumentDBTaggedMetrics::JobMetrics::JobMetrics(metrics::MetricSet* parent)
removedDocumentsPrune("removed_documents_prune", "",
"Pruning of removed documents in 'removed' sub database", this),
total("total", "", "The job load average total of all job metrics", this)
-{ }
+{
+}
-DocumentDBTaggedMetrics::JobMetrics::~JobMetrics() { }
+DocumentDBTaggedMetrics::JobMetrics::~JobMetrics() = default;
DocumentDBTaggedMetrics::SubDBMetrics::SubDBMetrics(const vespalib::string &name, MetricSet *parent)
: MetricSet(name, "", "Sub database metrics", parent),
lidSpace(this),
documentStore(this),
attributes(this)
-{ }
+{
+}
-DocumentDBTaggedMetrics::SubDBMetrics::~SubDBMetrics() { }
+DocumentDBTaggedMetrics::SubDBMetrics::~SubDBMetrics() = default;
DocumentDBTaggedMetrics::SubDBMetrics::LidSpaceMetrics::LidSpaceMetrics(MetricSet *parent)
: MetricSet("lid_space", "", "Local document id (lid) space metrics for this document sub DB", parent),
@@ -47,9 +49,10 @@ DocumentDBTaggedMetrics::SubDBMetrics::LidSpaceMetrics::LidSpaceMetrics(MetricSe
lidFragmentationFactor("lid_fragmentation_factor", "",
"The fragmentation factor of this lid space, indicating the amount of holes in the currently used part of the lid space "
"((highest_used_lid - used_lids) / highest_used_lid)", this)
-{ }
+{
+}
-DocumentDBTaggedMetrics::SubDBMetrics::LidSpaceMetrics::~LidSpaceMetrics() { }
+DocumentDBTaggedMetrics::SubDBMetrics::LidSpaceMetrics::~LidSpaceMetrics() = default;
DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::CacheMetrics::CacheMetrics(MetricSet *parent)
: MetricSet("cache", "", "Document store cache metrics", parent),
@@ -61,7 +64,7 @@ DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::CacheMetrics::Cache
{
}
-DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::CacheMetrics::~CacheMetrics() {}
+DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::CacheMetrics::~CacheMetrics() = default;
DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::DocumentStoreMetrics(MetricSet *parent)
: MetricSet("document_store", "", "Document store metrics for this document sub DB", parent),
@@ -70,16 +73,19 @@ DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::DocumentStoreMetric
maxBucketSpread("max_bucket_spread", "", "Max bucket spread in underlying files (sum(unique buckets in each chunk)/unique buckets in file)", this),
memoryUsage(this),
cache(this)
-{ }
+{
+}
-DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::~DocumentStoreMetrics() { }
+DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics::~DocumentStoreMetrics() = default;
DocumentDBTaggedMetrics::AttributeMetrics::AttributeMetrics(MetricSet *parent)
: MetricSet("attribute", "", "Attribute vector metrics for this document db", parent),
- resourceUsage(this)
-{ }
+ resourceUsage(this),
+ totalMemoryUsage(this)
+{
+}
-DocumentDBTaggedMetrics::AttributeMetrics::~AttributeMetrics() { }
+DocumentDBTaggedMetrics::AttributeMetrics::~AttributeMetrics() = default;
DocumentDBTaggedMetrics::AttributeMetrics::ResourceUsageMetrics::ResourceUsageMetrics(MetricSet *parent)
: MetricSet("resource_usage", "", "Usage metrics for various attribute vector resources", parent),
@@ -91,16 +97,17 @@ DocumentDBTaggedMetrics::AttributeMetrics::ResourceUsageMetrics::ResourceUsageMe
{
}
-DocumentDBTaggedMetrics::AttributeMetrics::ResourceUsageMetrics::~ResourceUsageMetrics() { }
+DocumentDBTaggedMetrics::AttributeMetrics::ResourceUsageMetrics::~ResourceUsageMetrics() = default;
DocumentDBTaggedMetrics::IndexMetrics::IndexMetrics(MetricSet *parent)
: MetricSet("index", "", "Index metrics (memory and disk) for this document db", parent),
diskUsage("disk_usage", "", "Disk space usage in bytes", this),
- memoryUsage(this)
-{ }
-
-DocumentDBTaggedMetrics::IndexMetrics::~IndexMetrics() { }
+ memoryUsage(this),
+ docsInMemory("docs_in_memory", "", "Number of documents in memory index", this)
+{
+}
+DocumentDBTaggedMetrics::IndexMetrics::~IndexMetrics() = default;
void
DocumentDBTaggedMetrics::MatchingMetrics::update(const MatchingStats &stats)
@@ -125,9 +132,10 @@ DocumentDBTaggedMetrics::MatchingMetrics::MatchingMetrics(MetricSet *parent)
softDoomFactor("soft_doom_factor", "", "Factor used to compute soft-timeout", this),
queryCollateralTime("query_collateral_time", "", "Average time (sec) spent setting up and tearing down queries", this),
queryLatency("query_latency", "", "Average latency (sec) when matching a query", this)
-{ }
+{
+}
-DocumentDBTaggedMetrics::MatchingMetrics::~MatchingMetrics() {}
+DocumentDBTaggedMetrics::MatchingMetrics::~MatchingMetrics() = default;
DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::RankProfileMetrics(const vespalib::string &name,
size_t numDocIdPartitions,
@@ -150,7 +158,7 @@ DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::RankProfileMetrics
}
}
-DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::~RankProfileMetrics() {}
+DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::~RankProfileMetrics() = default;
DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::DocIdPartition::DocIdPartition(const vespalib::string &name, MetricSet *parent) :
MetricSet("docid_partition", {{"docidPartition", name}}, "DocId Partition profile metrics", parent),
@@ -161,7 +169,7 @@ DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::DocIdPartition::Do
waitTime("wait_time", "", "Time (sec) spent waiting for other external threads and resources", this)
{ }
-DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::DocIdPartition::~DocIdPartition() {}
+DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::DocIdPartition::~DocIdPartition() = default;
void
DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::DocIdPartition::update(const MatchingStats::Partition &stats)
@@ -206,6 +214,26 @@ DocumentDBTaggedMetrics::MatchingMetrics::RankProfileMetrics::update(const Match
}
}
+DocumentDBTaggedMetrics::SessionCacheMetrics::SessionCacheMetrics(metrics::MetricSet *parent)
+ : metrics::MetricSet("session_cache", "", "Metrics for session caches (search / grouping requests)", parent),
+ search("search", this),
+ grouping("grouping", this)
+{
+}
+
+DocumentDBTaggedMetrics::SessionCacheMetrics::~SessionCacheMetrics() = default;
+
+DocumentDBTaggedMetrics::DocumentsMetrics::DocumentsMetrics(metrics::MetricSet *parent)
+ : metrics::MetricSet("documents", "", "Metrics for various document counts in this document db", parent),
+ active("active", "", "The number of active / searchable documents in this document db", this),
+ ready("ready", "", "The number of ready documents in this document db", this),
+ total("total", "", "The total number of documents in this documents db (ready + not-ready)", this),
+ removed("removed", "", "The number of removed documents in this document db", this)
+{
+}
+
+DocumentDBTaggedMetrics::DocumentsMetrics::~DocumentsMetrics() = default;
+
DocumentDBTaggedMetrics::DocumentDBTaggedMetrics(const vespalib::string &docTypeName)
: MetricSet("documentdb", {{"documenttype", docTypeName}}, "Document DB metrics", nullptr),
job(this),
@@ -215,9 +243,14 @@ DocumentDBTaggedMetrics::DocumentDBTaggedMetrics(const vespalib::string &docType
notReady("notready", this),
removed("removed", this),
threadingService("threading_service", this),
- matching(this)
-{ }
+ matching(this),
+ sessionCache(this),
+ documents(this),
+ totalMemoryUsage(this),
+ totalDiskUsage("disk_usage", "", "The total disk usage (in bytes) for this document db", this)
+{
+}
-DocumentDBTaggedMetrics::~DocumentDBTaggedMetrics() { }
+DocumentDBTaggedMetrics::~DocumentDBTaggedMetrics() = default;
-} // namespace proton
+}
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h
index 952fb0304f5..94a69be2c7f 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h
+++ b/searchcore/src/vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h
@@ -4,6 +4,7 @@
#include "attribute_metrics.h"
#include "memory_usage_metrics.h"
#include "executor_threading_service_metrics.h"
+#include "sessionmanager_metrics.h"
#include <vespa/metrics/metricset.h>
#include <vespa/metrics/valuemetric.h>
#include <vespa/searchcore/proton/matching/matching_stats.h>
@@ -92,6 +93,7 @@ struct DocumentDBTaggedMetrics : metrics::MetricSet
};
ResourceUsageMetrics resourceUsage;
+ MemoryUsageMetrics totalMemoryUsage;
AttributeMetrics(metrics::MetricSet *parent);
~AttributeMetrics();
@@ -101,6 +103,7 @@ struct DocumentDBTaggedMetrics : metrics::MetricSet
{
metrics::LongValueMetric diskUsage;
MemoryUsageMetrics memoryUsage;
+ metrics::LongValueMetric docsInMemory;
IndexMetrics(metrics::MetricSet *parent);
~IndexMetrics();
@@ -158,6 +161,24 @@ struct DocumentDBTaggedMetrics : metrics::MetricSet
~MatchingMetrics();
};
+ struct SessionCacheMetrics : metrics::MetricSet {
+ SessionManagerMetrics search;
+ SessionManagerMetrics grouping;
+
+ SessionCacheMetrics(metrics::MetricSet *parent);
+ ~SessionCacheMetrics();
+ };
+
+ struct DocumentsMetrics : metrics::MetricSet {
+ metrics::LongValueMetric active;
+ metrics::LongValueMetric ready;
+ metrics::LongValueMetric total;
+ metrics::LongValueMetric removed;
+
+ DocumentsMetrics(metrics::MetricSet *parent);
+ ~DocumentsMetrics();
+ };
+
JobMetrics job;
AttributeMetrics attribute;
IndexMetrics index;
@@ -166,6 +187,10 @@ struct DocumentDBTaggedMetrics : metrics::MetricSet
SubDBMetrics removed;
ExecutorThreadingServiceMetrics threadingService;
MatchingMetrics matching;
+ SessionCacheMetrics sessionCache;
+ DocumentsMetrics documents;
+ MemoryUsageMetrics totalMemoryUsage;
+ metrics::LongValueMetric totalDiskUsage;
DocumentDBTaggedMetrics(const vespalib::string &docTypeName);
~DocumentDBTaggedMetrics();
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h
index 7b01842103b..c61d371ae0b 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h
+++ b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h
@@ -2,9 +2,9 @@
#pragma once
-#include "legacy_attribute_metrics.h"
#include "executor_metrics.h"
-#include "sessionmanager_metrics.h"
+#include "legacy_attribute_metrics.h"
+#include "legacy_sessionmanager_metrics.h"
#include <vespa/metrics/summetric.h>
#include <vespa/searchcore/proton/matching/matching_stats.h>
@@ -16,6 +16,8 @@ namespace proton {
* All these metrics have the document type name as part of the metric name,
* which is not flexible for setting up default metric graph dashboards.
*
+ * TODO: Remove on Vespa 7
+ *
* @deprecated Use DocumentDBTaggedMetrics for all new metrics.
*/
struct LegacyDocumentDBMetrics : metrics::MetricSet
@@ -115,7 +117,7 @@ struct LegacyDocumentDBMetrics : metrics::MetricSet
ExecutorMetrics executor;
ExecutorMetrics indexExecutor;
ExecutorMetrics summaryExecutor;
- search::grouping::SessionManagerMetrics sessionManager;
+ LegacySessionManagerMetrics sessionManager;
SubDBMetrics ready;
SubDBMetrics notReady;
SubDBMetrics removed;
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.cpp
new file mode 100644
index 00000000000..097398f42ad
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.cpp
@@ -0,0 +1,29 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "legacy_sessionmanager_metrics.h"
+
+namespace proton {
+
+LegacySessionManagerMetrics::LegacySessionManagerMetrics(metrics::MetricSet *parent)
+ : metrics::MetricSet("sessionmanager", "", "Grouping session manager metrics", parent),
+ numInsert("numinsert", "", "Number of inserted sessions", this),
+ numPick("numpick", "", "Number if picked sessions", this),
+ numDropped("numdropped", "", "Number of dropped cached sessions", this),
+ numCached("numcached", "", "Number of currently cached sessions", this),
+ numTimedout("numtimedout", "", "Number of timed out sessions", this)
+{
+}
+
+LegacySessionManagerMetrics::~LegacySessionManagerMetrics() = default;
+
+void
+LegacySessionManagerMetrics::update(const proton::matching::SessionManager::Stats &stats)
+{
+ numInsert.inc(stats.numInsert);
+ numPick.inc(stats.numPick);
+ numDropped.inc(stats.numDropped);
+ numCached.set(stats.numCached);
+ numTimedout.inc(stats.numTimedout);
+}
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.h
new file mode 100644
index 00000000000..3e8e3f54c02
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/metrics/legacy_sessionmanager_metrics.h
@@ -0,0 +1,29 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/metrics/countmetric.h>
+#include <vespa/metrics/metricset.h>
+#include <vespa/metrics/valuemetric.h>
+#include <vespa/searchcore/proton/matching/sessionmanager.h>
+
+namespace proton {
+
+/**
+ * Legacy metrics for session manager cache.
+ * TODO: Remove on Vespa 7
+ */
+struct LegacySessionManagerMetrics : metrics::MetricSet
+{
+ metrics::LongCountMetric numInsert;
+ metrics::LongCountMetric numPick;
+ metrics::LongCountMetric numDropped;
+ metrics::LongValueMetric numCached;
+ metrics::LongCountMetric numTimedout;
+
+ void update(const proton::matching::SessionManager::Stats &stats);
+ LegacySessionManagerMetrics(metrics::MetricSet *parent);
+ ~LegacySessionManagerMetrics();
+};
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.cpp
index f609b850876..5fc41acf33c 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.cpp
+++ b/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.cpp
@@ -1,16 +1,17 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "sessionmanager_metrics.h"
+#include <vespa/vespalib/util/stringfmt.h>
-namespace search::grouping {
+namespace proton {
-SessionManagerMetrics::SessionManagerMetrics(metrics::MetricSet *parent)
- : metrics::MetricSet("sessionmanager", "", "Grouping session manager metrics", parent),
- numInsert("numinsert", "", "Number of inserted sessions", this),
- numPick("numpick", "", "Number if picked sessions", this),
- numDropped("numdropped", "", "Number of dropped cached sessions", this),
- numCached("numcached", "", "Number of currently cached sessions", this),
- numTimedout("numtimedout", "", "Number of timed out sessions", this)
+SessionManagerMetrics::SessionManagerMetrics(const vespalib::string &name, metrics::MetricSet *parent)
+ : metrics::MetricSet(name, "", vespalib::make_string("Session manager cache metrics for %s", name.c_str()), parent),
+ numInsert("num_insert", "", "Number of inserted sessions", this),
+ numPick("num_pick", "", "Number if picked sessions", this),
+ numDropped("num_dropped", "", "Number of dropped cached sessions", this),
+ numCached("num_cached", "", "Number of currently cached sessions", this),
+ numTimedout("num_timedout", "", "Number of timed out sessions", this)
{
}
@@ -26,5 +27,4 @@ SessionManagerMetrics::update(const proton::matching::SessionManager::Stats &sta
numTimedout.inc(stats.numTimedout);
}
-
}
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.h
index 37e070c9e04..a1a5dadd1f8 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.h
+++ b/searchcore/src/vespa/searchcore/proton/metrics/sessionmanager_metrics.h
@@ -2,13 +2,16 @@
#pragma once
-#include <vespa/searchcore/proton/matching/sessionmanager.h>
-#include <vespa/metrics/metricset.h>
#include <vespa/metrics/countmetric.h>
+#include <vespa/metrics/metricset.h>
#include <vespa/metrics/valuemetric.h>
+#include <vespa/searchcore/proton/matching/sessionmanager.h>
-namespace search::grouping {
+namespace proton {
+/**
+ * Metrics for session manager cache (search or grouping requests).
+ */
struct SessionManagerMetrics : metrics::MetricSet
{
metrics::LongCountMetric numInsert;
@@ -18,7 +21,7 @@ struct SessionManagerMetrics : metrics::MetricSet
metrics::LongCountMetric numTimedout;
void update(const proton::matching::SessionManager::Stats &stats);
- SessionManagerMetrics(metrics::MetricSet *parent);
+ SessionManagerMetrics(const vespalib::string &name, metrics::MetricSet *parent);
~SessionManagerMetrics();
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
index 2df34312b52..d47e87e9e03 100644
--- a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
@@ -28,6 +28,7 @@ vespa_add_library(searchcore_server STATIC
documentbucketmover.cpp
documentdb.cpp
documentdb_commit_job.cpp
+ documentdb_metrics_updater.cpp
documentdbconfig.cpp
documentdbconfigscout.cpp
documentdbconfigmanager.cpp
diff --git a/searchcore/src/vespa/searchcore/proton/server/document_db_explorer.cpp b/searchcore/src/vespa/searchcore/proton/server/document_db_explorer.cpp
index 32d7eb7e0f2..0c3772cab5b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/document_db_explorer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/document_db_explorer.cpp
@@ -32,14 +32,11 @@ DocumentDBExplorer::get_state(const Inserter &inserter, bool full) const
StateReporterUtils::convertToSlime(*_docDb->reportStatus(), ObjectInserter(object, "status"));
}
{
- // TODO(geirst): Avoid const cast by adding const interface to
- // IDocumentMetaStoreContext as seen from IDocumentSubDB.
- DocumentMetaStoreReadGuards dmss
- (const_cast<DocumentSubDBCollection &>(_docDb->getDocumentSubDBs()));
+ DocumentMetaStoreReadGuards dmss(_docDb->getDocumentSubDBs());
Cursor &documents = object.setObject("documents");
documents.setLong("active", dmss.numActiveDocs());
- documents.setLong("indexed", dmss.numIndexedDocs());
- documents.setLong("stored", dmss.numStoredDocs());
+ documents.setLong("ready", dmss.numReadyDocs());
+ documents.setLong("total", dmss.numTotalDocs());
documents.setLong("removed", dmss.numRemovedDocs());
}
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.cpp b/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.cpp
index 2335cd01ec8..952910970ae 100644
--- a/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.cpp
@@ -6,7 +6,7 @@
namespace proton {
-DocumentMetaStoreReadGuards::DocumentMetaStoreReadGuards(DocumentSubDBCollection &subDBs)
+DocumentMetaStoreReadGuards::DocumentMetaStoreReadGuards(const DocumentSubDBCollection &subDBs)
: readydms(subDBs.getReadySubDB()->getDocumentMetaStoreContext().getReadGuard()),
notreadydms(subDBs.getNotReadySubDB()->getDocumentMetaStoreContext().getReadGuard()),
remdms(subDBs.getRemSubDB()->getDocumentMetaStoreContext().getReadGuard())
diff --git a/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.h b/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.h
index 8dc39d1415d..7baa5576b3b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.h
+++ b/searchcore/src/vespa/searchcore/proton/server/document_meta_store_read_guards.h
@@ -18,17 +18,17 @@ struct DocumentMetaStoreReadGuards
IDocumentMetaStoreContext::IReadGuard::UP notreadydms;
IDocumentMetaStoreContext::IReadGuard::UP remdms;
- DocumentMetaStoreReadGuards(DocumentSubDBCollection &subDBs);
+ DocumentMetaStoreReadGuards(const DocumentSubDBCollection &subDBs);
~DocumentMetaStoreReadGuards();
uint32_t numActiveDocs() const {
return readydms ? readydms->get().getNumActiveLids() : 0;
}
- uint32_t numIndexedDocs() const {
+ uint32_t numReadyDocs() const {
return readydms ? readydms->get().getNumUsedLids() : 0;
}
- uint32_t numStoredDocs() const {
- return numIndexedDocs() + (notreadydms ? notreadydms->get().getNumUsedLids() : 0);
+ uint32_t numTotalDocs() const {
+ return numReadyDocs() + (notreadydms ? notreadydms->get().getNumUsedLids() : 0);
}
uint32_t numRemovedDocs() const {
return remdms ? remdms->get().getNumUsedLids() : 0;
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index c974f812acc..94ff5b43a3a 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -136,8 +136,13 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir,
_visibility(_feedHandler, _writeService, _feedView),
_lidSpaceCompactionHandlers(),
_jobTrackers(),
- _lastDocStoreCacheStats(),
- _calc()
+ _calc(),
+ _metricsUpdater(_subDBs,
+ _writeService,
+ _jobTrackers,
+ *_sessionManager,
+ _writeFilter,
+ _state)
{
assert(configSnapshot);
@@ -1010,314 +1015,13 @@ DocumentDB::notifyAllBucketsChanged()
_clusterStateHandler, "notready");
}
-namespace {
-
-void
-updateIndexMetrics(DocumentDBMetricsCollection &metrics, const search::SearchableStats &stats)
-{
- DocumentDBTaggedMetrics::IndexMetrics &indexMetrics = metrics.getTaggedMetrics().index;
- indexMetrics.diskUsage.set(stats.sizeOnDisk());
- indexMetrics.memoryUsage.update(stats.memoryUsage());
-
- LegacyDocumentDBMetrics::IndexMetrics &legacyIndexMetrics = metrics.getLegacyMetrics().index;
- legacyIndexMetrics.memoryUsage.set(stats.memoryUsage().allocatedBytes());
- legacyIndexMetrics.docsInMemory.set(stats.docsInMemory());
- legacyIndexMetrics.diskUsage.set(stats.sizeOnDisk());
-}
-
-struct TempAttributeMetric
-{
- MemoryUsage _memoryUsage;
- uint64_t _bitVectors;
-
- TempAttributeMetric()
- : _memoryUsage(),
- _bitVectors(0)
- {}
-};
-
-struct TempAttributeMetrics
-{
- typedef std::map<vespalib::string, TempAttributeMetric> AttrMap;
- TempAttributeMetric _total;
- AttrMap _attrs;
-};
-
-bool
-isReadySubDB(const IDocumentSubDB *subDb, const DocumentSubDBCollection &subDbs)
-{
- return subDb == subDbs.getReadySubDB();
-}
-
-bool
-isNotReadySubDB(const IDocumentSubDB *subDb, const DocumentSubDBCollection &subDbs)
-{
- return subDb == subDbs.getNotReadySubDB();
-}
-
-void
-fillTempAttributeMetrics(TempAttributeMetrics &metrics, const vespalib::string &attrName,
- const MemoryUsage &memoryUsage, uint32_t bitVectors)
-{
- metrics._total._memoryUsage.merge(memoryUsage);
- metrics._total._bitVectors += bitVectors;
- TempAttributeMetric &m = metrics._attrs[attrName];
- m._memoryUsage.merge(memoryUsage);
- m._bitVectors += bitVectors;
-}
-
-void
-fillTempAttributeMetrics(TempAttributeMetrics &totalMetrics,
- TempAttributeMetrics &readyMetrics,
- TempAttributeMetrics &notReadyMetrics,
- const DocumentSubDBCollection &subDbs)
-{
- for (const auto subDb : subDbs) {
- proton::IAttributeManager::SP attrMgr(subDb->getAttributeManager());
- if (attrMgr) {
- TempAttributeMetrics *subMetrics =
- (isReadySubDB(subDb, subDbs) ? &readyMetrics :
- (isNotReadySubDB(subDb, subDbs) ? &notReadyMetrics : nullptr));
- std::vector<search::AttributeGuard> list;
- attrMgr->getAttributeListAll(list);
- for (const auto &attr : list) {
- const search::attribute::Status &status = attr->getStatus();
- MemoryUsage memoryUsage(status.getAllocated(), status.getUsed(), status.getDead(), status.getOnHold());
- uint32_t bitVectors = status.getBitVectors();
- fillTempAttributeMetrics(totalMetrics, attr->getName(), memoryUsage, bitVectors);
- if (subMetrics != nullptr) {
- fillTempAttributeMetrics(*subMetrics, attr->getName(), memoryUsage, bitVectors);
- }
- }
- }
- }
-}
-
-void
-updateLegacyAttributeMetrics(LegacyAttributeMetrics &metrics, const TempAttributeMetrics &tmpMetrics)
-{
- for (const auto &attr : tmpMetrics._attrs) {
- LegacyAttributeMetrics::List::Entry *entry = metrics.list.get(attr.first);
- if (entry) {
- entry->memoryUsage.set(attr.second._memoryUsage.allocatedBytes());
- entry->bitVectors.set(attr.second._bitVectors);
- } else {
- LOG(debug, "Could not update metrics for attribute: '%s'", attr.first.c_str());
- }
- }
- metrics.memoryUsage.set(tmpMetrics._total._memoryUsage.allocatedBytes());
- metrics.bitVectors.set(tmpMetrics._total._bitVectors);
-}
-
-void
-updateAttributeMetrics(AttributeMetrics &metrics, const TempAttributeMetrics &tmpMetrics)
-{
- for (const auto &attr : tmpMetrics._attrs) {
- auto entry = metrics.get(attr.first);
- if (entry) {
- entry->memoryUsage.update(attr.second._memoryUsage);
- }
- }
-}
-
-void
-updateAttributeMetrics(DocumentDBMetricsCollection &metrics, const DocumentSubDBCollection &subDbs)
-{
- TempAttributeMetrics totalMetrics;
- TempAttributeMetrics readyMetrics;
- TempAttributeMetrics notReadyMetrics;
- fillTempAttributeMetrics(totalMetrics, readyMetrics, notReadyMetrics, subDbs);
-
- updateLegacyAttributeMetrics(metrics.getLegacyMetrics().attributes, totalMetrics);
- updateLegacyAttributeMetrics(metrics.getLegacyMetrics().ready.attributes, readyMetrics);
- updateLegacyAttributeMetrics(metrics.getLegacyMetrics().notReady.attributes, notReadyMetrics);
-
- updateAttributeMetrics(metrics.getTaggedMetrics().ready.attributes, readyMetrics);
- updateAttributeMetrics(metrics.getTaggedMetrics().notReady.attributes, notReadyMetrics);
-}
-
-namespace {
-
-void
-updateLegacyRankProfileMetrics(LegacyDocumentDBMetrics::MatchingMetrics &matchingMetrics,
- const vespalib::string &rankProfileName,
- const MatchingStats &stats)
-{
- auto itr = matchingMetrics.rank_profiles.find(rankProfileName);
- assert(itr != matchingMetrics.rank_profiles.end());
- itr->second->update(stats);
-}
-
-}
-
-void
-updateMatchingMetrics(DocumentDBMetricsCollection &metrics, const IDocumentSubDB &ready)
-{
- MatchingStats totalStats;
- for (const auto &rankProfile : metrics.getTaggedMetrics().matching.rank_profiles) {
- MatchingStats matchingStats = ready.getMatcherStats(rankProfile.first);
- rankProfile.second->update(matchingStats);
- updateLegacyRankProfileMetrics(metrics.getLegacyMetrics().matching, rankProfile.first, matchingStats);
-
- totalStats.add(matchingStats);
- }
- metrics.getTaggedMetrics().matching.update(totalStats);
- metrics.getLegacyMetrics().matching.update(totalStats);
-}
-
-void
-updateDocumentStoreCacheHitRate(const CacheStats &current, const CacheStats &last,
- metrics::LongAverageMetric &cacheHitRate)
-{
- if (current.lookups() < last.lookups() || current.hits < last.hits) {
- LOG(warning, "Not adding document store cache hit rate metrics as values calculated "
- "are corrupt. current.lookups=%" PRIu64 ", last.lookups=%" PRIu64 ", current.hits=%" PRIu64 ", last.hits=%" PRIu64 ".",
- current.lookups(), last.lookups(), current.hits, last.hits);
- } else {
- if ((current.lookups() - last.lookups()) > 0xffffffffull
- || (current.hits - last.hits) > 0xffffffffull)
- {
- LOG(warning, "Document store cache hit rate metrics to add are suspiciously high."
- " lookups diff=%" PRIu64 ", hits diff=%" PRIu64 ".",
- current.lookups() - last.lookups(), current.hits - last.hits);
- }
- cacheHitRate.addTotalValueWithCount(current.hits - last.hits, current.lookups() - last.lookups());
- }
-}
-
-void
-updateCountMetric(uint64_t currVal, uint64_t lastVal, metrics::LongCountMetric &metric)
-{
- uint64_t delta = (currVal >= lastVal) ? (currVal - lastVal) : 0;
- metric.inc(delta);
-}
-
-void
-updateDocstoreMetrics(LegacyDocumentDBMetrics::DocstoreMetrics &metrics,
- const DocumentSubDBCollection &sub_dbs,
- CacheStats &lastCacheStats)
-{
- size_t memoryUsage = 0;
- CacheStats cache_stats;
- for (const auto subDb : sub_dbs) {
- const ISummaryManager::SP &summaryMgr = subDb->getSummaryManager();
- if (summaryMgr) {
- cache_stats += summaryMgr->getBackingStore().getCacheStats();
- memoryUsage += summaryMgr->getBackingStore().memoryUsed();
- }
- }
- metrics.memoryUsage.set(memoryUsage);
- updateCountMetric(cache_stats.lookups(), lastCacheStats.lookups(), metrics.cacheLookups);
- updateDocumentStoreCacheHitRate(cache_stats, lastCacheStats, metrics.cacheHitRate);
- metrics.cacheElements.set(cache_stats.elements);
- metrics.cacheMemoryUsed.set(cache_stats.memory_used);
- lastCacheStats = cache_stats;
-}
-
-void
-updateDocumentStoreMetrics(DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics &metrics,
- IDocumentSubDB *subDb,
- CacheStats &lastCacheStats)
-{
- const ISummaryManager::SP &summaryMgr = subDb->getSummaryManager();
- search::IDocumentStore &backingStore = summaryMgr->getBackingStore();
- search::DataStoreStorageStats storageStats(backingStore.getStorageStats());
- metrics.diskUsage.set(storageStats.diskUsage());
- metrics.diskBloat.set(storageStats.diskBloat());
- metrics.maxBucketSpread.set(storageStats.maxBucketSpread());
- metrics.memoryUsage.update(backingStore.getMemoryUsage());
-
- search::CacheStats cacheStats = backingStore.getCacheStats();
- metrics.cache.memoryUsage.set(cacheStats.memory_used);
- metrics.cache.elements.set(cacheStats.elements);
- updateDocumentStoreCacheHitRate(cacheStats, lastCacheStats, metrics.cache.hitRate);
- updateCountMetric(cacheStats.lookups(), lastCacheStats.lookups(), metrics.cache.lookups);
- updateCountMetric(cacheStats.invalidations, lastCacheStats.invalidations, metrics.cache.invalidations);
- lastCacheStats = cacheStats;
-}
-
-template <typename MetricSetType>
-void
-updateLidSpaceMetrics(MetricSetType &metrics, const search::IDocumentMetaStore &metaStore)
-{
- LidUsageStats stats = metaStore.getLidUsageStats();
- metrics.lidLimit.set(stats.getLidLimit());
- metrics.usedLids.set(stats.getUsedLids());
- metrics.lowestFreeLid.set(stats.getLowestFreeLid());
- metrics.highestUsedLid.set(stats.getHighestUsedLid());
- metrics.lidBloatFactor.set(stats.getLidBloatFactor());
- metrics.lidFragmentationFactor.set(stats.getLidFragmentationFactor());
-}
-
-} // namespace
-
void
DocumentDB::updateMetrics(DocumentDBMetricsCollection &metrics)
{
if (_state.getState() < DDBState::State::REPLAY_TRANSACTION_LOG) {
return;
}
-
- ExecutorThreadingServiceStats threadingServiceStats = _writeService.getStats();
- updateLegacyMetrics(metrics.getLegacyMetrics(), threadingServiceStats);
- updateIndexMetrics(metrics, _subDBs.getReadySubDB()->getSearchableStats());
- updateAttributeMetrics(metrics, _subDBs);
- updateMatchingMetrics(metrics, *_subDBs.getReadySubDB());
- updateMetrics(metrics.getTaggedMetrics(), threadingServiceStats);
-}
-
-void
-DocumentDB::updateLegacyMetrics(LegacyDocumentDBMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats)
-{
- metrics.executor.update(threadingServiceStats.getMasterExecutorStats());
- metrics.summaryExecutor.update(threadingServiceStats.getSummaryExecutorStats());
- metrics.indexExecutor.update(threadingServiceStats.getIndexExecutorStats());
- metrics.sessionManager.update(_sessionManager->getGroupingStats());
- updateDocstoreMetrics(metrics.docstore, _subDBs, _lastDocStoreCacheStats.total);
- metrics.numDocs.set(getNumDocs());
-
- DocumentMetaStoreReadGuards dmss(_subDBs);
-
- metrics.numActiveDocs.set(dmss.numActiveDocs());
- metrics.numIndexedDocs.set(dmss.numIndexedDocs());
- metrics.numStoredDocs.set(dmss.numStoredDocs());
- metrics.numRemovedDocs.set(dmss.numRemovedDocs());
-
- updateLidSpaceMetrics(metrics.ready.docMetaStore, dmss.readydms->get());
- updateLidSpaceMetrics(metrics.notReady.docMetaStore, dmss.notreadydms->get());
- updateLidSpaceMetrics(metrics.removed.docMetaStore, dmss.remdms->get());
-
- metrics.numBadConfigs.set(_state.getDelayedConfig() ? 1u : 0u);
-}
-
-void
-DocumentDB::
-updateMetrics(DocumentDBTaggedMetrics::AttributeMetrics &metrics)
-{
- AttributeUsageFilter &writeFilter(_writeFilter);
- AttributeUsageStats attributeUsageStats = writeFilter.getAttributeUsageStats();
- bool feedBlocked = !writeFilter.acceptWriteOperation();
- double enumStoreUsed = attributeUsageStats.enumStoreUsage().getUsage().usage();
- double multiValueUsed = attributeUsageStats.multiValueUsage().getUsage().usage();
- metrics.resourceUsage.enumStore.set(enumStoreUsed);
- metrics.resourceUsage.multiValue.set(multiValueUsed);
- metrics.resourceUsage.feedingBlocked.set(feedBlocked ? 1 : 0);
-}
-
-void
-DocumentDB::updateMetrics(DocumentDBTaggedMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats)
-{
- metrics.threadingService.update(threadingServiceStats);
- _jobTrackers.updateMetrics(metrics.job);
-
- updateMetrics(metrics.attribute);
- updateDocumentStoreMetrics(metrics.ready.documentStore, _subDBs.getReadySubDB(), _lastDocStoreCacheStats.readySubDb);
- updateDocumentStoreMetrics(metrics.removed.documentStore, _subDBs.getRemSubDB(), _lastDocStoreCacheStats.removedSubDb);
- updateDocumentStoreMetrics(metrics.notReady.documentStore, _subDBs.getNotReadySubDB(), _lastDocStoreCacheStats.notReadySubDb);
- DocumentMetaStoreReadGuards dmss(_subDBs);
- updateLidSpaceMetrics(metrics.ready.lidSpace, dmss.readydms->get());
- updateLidSpaceMetrics(metrics.notReady.lidSpace, dmss.notreadydms->get());
- updateLidSpaceMetrics(metrics.removed.lidSpace, dmss.remdms->get());
+ _metricsUpdater.updateMetrics(metrics);
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index 996b365cb48..fb23b113f3b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -6,11 +6,12 @@
#include "configstore.h"
#include "ddbstate.h"
#include "disk_mem_usage_forwarder.h"
+#include "documentdb_metrics_updater.h"
+#include "document_db_config_owner.h"
#include "documentdbconfig.h"
#include "documentsubdbcollection.h"
#include "executorthreadingservice.h"
#include "feedhandler.h"
-#include "document_db_config_owner.h"
#include "i_document_subdb_owner.h"
#include "i_feed_handler_owner.h"
#include "i_lid_space_compaction_handler.h"
@@ -135,10 +136,8 @@ private:
VisibilityHandler _visibility;
ILidSpaceCompactionHandler::Vector _lidSpaceCompactionHandlers;
DocumentDBJobTrackers _jobTrackers;
-
- // Last updated document store cache statistics. Necessary due to metrics implementation is upside down.
- DocumentStoreCacheStats _lastDocStoreCacheStats;
IBucketStateCalculator::SP _calc;
+ DocumentDBMetricsUpdater _metricsUpdater;
void registerReference();
void setActiveConfig(const DocumentDBConfig::SP &config, SerialNum serialNum, int64_t generation);
@@ -206,10 +205,6 @@ private:
virtual void notifyClusterStateChanged(const IBucketStateCalculator::SP &newCalc) override;
void notifyAllBucketsChanged();
- void updateLegacyMetrics(LegacyDocumentDBMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats);
- void updateMetrics(DocumentDBTaggedMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats);
- void updateMetrics(DocumentDBTaggedMetrics::AttributeMetrics &metrics);
-
/*
* Tear down references to this document db (e.g. listeners for
* gid to lid changes) from other document dbs.
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.cpp
new file mode 100644
index 00000000000..71baabd9d6f
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.cpp
@@ -0,0 +1,415 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "ddbstate.h"
+#include "document_meta_store_read_guards.h"
+#include "documentdb_metrics_updater.h"
+#include "documentsubdbcollection.h"
+#include "executorthreadingservice.h"
+#include "idocumentsubdb.h"
+#include <vespa/searchcommon/attribute/status.h>
+#include <vespa/searchcore/proton/attribute/attribute_usage_filter.h>
+#include <vespa/searchcore/proton/attribute/i_attribute_manager.h>
+#include <vespa/searchcore/proton/docsummary/isummarymanager.h>
+#include <vespa/searchcore/proton/matching/matching_stats.h>
+#include <vespa/searchcore/proton/matching/matching_stats.h>
+#include <vespa/searchcore/proton/metrics/documentdb_job_trackers.h>
+#include <vespa/searchcore/proton/metrics/documentdb_metrics_collection.h>
+#include <vespa/searchcore/proton/metrics/executor_threading_service_stats.h>
+#include <vespa/searchlib/attribute/attributevector.h>
+#include <vespa/searchlib/docstore/cachestats.h>
+#include <vespa/searchlib/util/memoryusage.h>
+#include <vespa/searchlib/util/searchable_stats.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP(".proton.server.documentdb_metrics_updater");
+
+using search::LidUsageStats;
+using search::CacheStats;
+using search::MemoryUsage;
+
+namespace proton {
+
+using matching::MatchingStats;
+
+DocumentDBMetricsUpdater::DocumentDBMetricsUpdater(const DocumentSubDBCollection &subDBs,
+ ExecutorThreadingService &writeService,
+ DocumentDBJobTrackers &jobTrackers,
+ matching::SessionManager &sessionManager,
+ const AttributeUsageFilter &writeFilter,
+ const DDBState &state)
+ : _subDBs(subDBs),
+ _writeService(writeService),
+ _jobTrackers(jobTrackers),
+ _sessionManager(sessionManager),
+ _writeFilter(writeFilter),
+ _state(state)
+{
+}
+
+DocumentDBMetricsUpdater::~DocumentDBMetricsUpdater() = default;
+
+namespace {
+
+struct TotalStats {
+ search::MemoryUsage memoryUsage;
+ uint64_t diskUsage;
+ TotalStats() : memoryUsage(), diskUsage() {}
+};
+
+void
+updateMemoryUsageMetrics(MemoryUsageMetrics &metrics, const MemoryUsage &memoryUsage, TotalStats &totalStats)
+{
+ metrics.update(memoryUsage);
+ totalStats.memoryUsage.merge(memoryUsage);
+}
+
+void
+updateDiskUsageMetric(metrics::LongValueMetric &metric, uint64_t diskUsage, TotalStats &totalStats)
+{
+ metric.set(diskUsage);
+ totalStats.diskUsage += diskUsage;
+}
+
+void
+updateIndexMetrics(DocumentDBMetricsCollection &metrics, const search::SearchableStats &stats, TotalStats &totalStats)
+{
+ DocumentDBTaggedMetrics::IndexMetrics &indexMetrics = metrics.getTaggedMetrics().index;
+ updateDiskUsageMetric(indexMetrics.diskUsage, stats.sizeOnDisk(), totalStats);
+ updateMemoryUsageMetrics(indexMetrics.memoryUsage, stats.memoryUsage(), totalStats);
+ indexMetrics.docsInMemory.set(stats.docsInMemory());
+
+ LegacyDocumentDBMetrics::IndexMetrics &legacyIndexMetrics = metrics.getLegacyMetrics().index;
+ legacyIndexMetrics.memoryUsage.set(stats.memoryUsage().allocatedBytes());
+ legacyIndexMetrics.docsInMemory.set(stats.docsInMemory());
+ legacyIndexMetrics.diskUsage.set(stats.sizeOnDisk());
+}
+
+struct TempAttributeMetric
+{
+ MemoryUsage memoryUsage;
+ uint64_t bitVectors;
+
+ TempAttributeMetric()
+ : memoryUsage(),
+ bitVectors(0)
+ {}
+};
+
+struct TempAttributeMetrics
+{
+ typedef std::map<vespalib::string, TempAttributeMetric> AttrMap;
+ TempAttributeMetric total;
+ AttrMap attrs;
+};
+
+bool
+isReadySubDB(const IDocumentSubDB *subDb, const DocumentSubDBCollection &subDbs)
+{
+ return subDb == subDbs.getReadySubDB();
+}
+
+bool
+isNotReadySubDB(const IDocumentSubDB *subDb, const DocumentSubDBCollection &subDbs)
+{
+ return subDb == subDbs.getNotReadySubDB();
+}
+
+void
+fillTempAttributeMetrics(TempAttributeMetrics &metrics, const vespalib::string &attrName,
+ const MemoryUsage &memoryUsage, uint32_t bitVectors)
+{
+ metrics.total.memoryUsage.merge(memoryUsage);
+ metrics.total.bitVectors += bitVectors;
+ TempAttributeMetric &m = metrics.attrs[attrName];
+ m.memoryUsage.merge(memoryUsage);
+ m.bitVectors += bitVectors;
+}
+
+void
+fillTempAttributeMetrics(TempAttributeMetrics &totalMetrics,
+ TempAttributeMetrics &readyMetrics,
+ TempAttributeMetrics &notReadyMetrics,
+ const DocumentSubDBCollection &subDbs)
+{
+ for (const auto subDb : subDbs) {
+ proton::IAttributeManager::SP attrMgr(subDb->getAttributeManager());
+ if (attrMgr) {
+ TempAttributeMetrics *subMetrics =
+ (isReadySubDB(subDb, subDbs) ? &readyMetrics :
+ (isNotReadySubDB(subDb, subDbs) ? &notReadyMetrics : nullptr));
+ std::vector<search::AttributeGuard> list;
+ attrMgr->getAttributeListAll(list);
+ for (const auto &attr : list) {
+ const search::attribute::Status &status = attr->getStatus();
+ MemoryUsage memoryUsage(status.getAllocated(), status.getUsed(), status.getDead(), status.getOnHold());
+ uint32_t bitVectors = status.getBitVectors();
+ fillTempAttributeMetrics(totalMetrics, attr->getName(), memoryUsage, bitVectors);
+ if (subMetrics != nullptr) {
+ fillTempAttributeMetrics(*subMetrics, attr->getName(), memoryUsage, bitVectors);
+ }
+ }
+ }
+ }
+}
+
+void
+updateLegacyAttributeMetrics(LegacyAttributeMetrics &metrics, const TempAttributeMetrics &tmpMetrics)
+{
+ for (const auto &attr : tmpMetrics.attrs) {
+ LegacyAttributeMetrics::List::Entry *entry = metrics.list.get(attr.first);
+ if (entry) {
+ entry->memoryUsage.set(attr.second.memoryUsage.allocatedBytes());
+ entry->bitVectors.set(attr.second.bitVectors);
+ } else {
+ LOG(debug, "Could not update metrics for attribute: '%s'", attr.first.c_str());
+ }
+ }
+ metrics.memoryUsage.set(tmpMetrics.total.memoryUsage.allocatedBytes());
+ metrics.bitVectors.set(tmpMetrics.total.bitVectors);
+}
+
+void
+updateAttributeMetrics(AttributeMetrics &metrics, const TempAttributeMetrics &tmpMetrics)
+{
+ for (const auto &attr : tmpMetrics.attrs) {
+ auto entry = metrics.get(attr.first);
+ if (entry) {
+ entry->memoryUsage.update(attr.second.memoryUsage);
+ }
+ }
+}
+
+void
+updateAttributeMetrics(DocumentDBMetricsCollection &metrics, const DocumentSubDBCollection &subDbs, TotalStats &totalStats)
+{
+ TempAttributeMetrics totalMetrics;
+ TempAttributeMetrics readyMetrics;
+ TempAttributeMetrics notReadyMetrics;
+ fillTempAttributeMetrics(totalMetrics, readyMetrics, notReadyMetrics, subDbs);
+
+ updateLegacyAttributeMetrics(metrics.getLegacyMetrics().attributes, totalMetrics);
+ updateLegacyAttributeMetrics(metrics.getLegacyMetrics().ready.attributes, readyMetrics);
+ updateLegacyAttributeMetrics(metrics.getLegacyMetrics().notReady.attributes, notReadyMetrics);
+
+ updateAttributeMetrics(metrics.getTaggedMetrics().ready.attributes, readyMetrics);
+ updateAttributeMetrics(metrics.getTaggedMetrics().notReady.attributes, notReadyMetrics);
+ updateMemoryUsageMetrics(metrics.getTaggedMetrics().attribute.totalMemoryUsage, totalMetrics.total.memoryUsage, totalStats);
+}
+
+void
+updateLegacyRankProfileMetrics(LegacyDocumentDBMetrics::MatchingMetrics &matchingMetrics,
+ const vespalib::string &rankProfileName,
+ const MatchingStats &stats)
+{
+ auto itr = matchingMetrics.rank_profiles.find(rankProfileName);
+ assert(itr != matchingMetrics.rank_profiles.end());
+ itr->second->update(stats);
+}
+
+void
+updateMatchingMetrics(DocumentDBMetricsCollection &metrics, const IDocumentSubDB &ready)
+{
+ MatchingStats totalStats;
+ for (const auto &rankProfile : metrics.getTaggedMetrics().matching.rank_profiles) {
+ MatchingStats matchingStats = ready.getMatcherStats(rankProfile.first);
+ rankProfile.second->update(matchingStats);
+ updateLegacyRankProfileMetrics(metrics.getLegacyMetrics().matching, rankProfile.first, matchingStats);
+
+ totalStats.add(matchingStats);
+ }
+ metrics.getTaggedMetrics().matching.update(totalStats);
+ metrics.getLegacyMetrics().matching.update(totalStats);
+}
+
+void
+updateSessionCacheMetrics(DocumentDBMetricsCollection &metrics, proton::matching::SessionManager &sessionManager)
+{
+ auto searchStats = sessionManager.getSearchStats();
+ metrics.getTaggedMetrics().sessionCache.search.update(searchStats);
+
+ auto groupingStats = sessionManager.getGroupingStats();
+ metrics.getTaggedMetrics().sessionCache.grouping.update(groupingStats);
+ metrics.getLegacyMetrics().sessionManager.update(groupingStats);
+}
+
+void
+updateDocumentsMetrics(DocumentDBMetricsCollection &metrics, const DocumentSubDBCollection &subDbs)
+{
+ DocumentMetaStoreReadGuards dms(subDbs);
+ uint32_t active = dms.numActiveDocs();
+ uint32_t ready = dms.numReadyDocs();
+ uint32_t total = dms.numTotalDocs();
+ uint32_t removed = dms.numRemovedDocs();
+
+ auto &docsMetrics = metrics.getTaggedMetrics().documents;
+ docsMetrics.active.set(active);
+ docsMetrics.ready.set(ready);
+ docsMetrics.total.set(total);
+ docsMetrics.removed.set(removed);
+
+ auto &legacyMetrics = metrics.getLegacyMetrics();
+ legacyMetrics.numDocs.set(ready);
+ legacyMetrics.numActiveDocs.set(active);
+ legacyMetrics.numIndexedDocs.set(ready);
+ legacyMetrics.numStoredDocs.set(total);
+ legacyMetrics.numRemovedDocs.set(removed);
+}
+
+void
+updateDocumentStoreCacheHitRate(const CacheStats &current, const CacheStats &last,
+ metrics::LongAverageMetric &cacheHitRate)
+{
+ if (current.lookups() < last.lookups() || current.hits < last.hits) {
+ LOG(warning, "Not adding document store cache hit rate metrics as values calculated "
+ "are corrupt. current.lookups=%" PRIu64 ", last.lookups=%" PRIu64 ", current.hits=%" PRIu64 ", last.hits=%" PRIu64 ".",
+ current.lookups(), last.lookups(), current.hits, last.hits);
+ } else {
+ if ((current.lookups() - last.lookups()) > 0xffffffffull
+ || (current.hits - last.hits) > 0xffffffffull)
+ {
+ LOG(warning, "Document store cache hit rate metrics to add are suspiciously high."
+ " lookups diff=%" PRIu64 ", hits diff=%" PRIu64 ".",
+ current.lookups() - last.lookups(), current.hits - last.hits);
+ }
+ cacheHitRate.addTotalValueWithCount(current.hits - last.hits, current.lookups() - last.lookups());
+ }
+}
+
+void
+updateCountMetric(uint64_t currVal, uint64_t lastVal, metrics::LongCountMetric &metric)
+{
+ uint64_t delta = (currVal >= lastVal) ? (currVal - lastVal) : 0;
+ metric.inc(delta);
+}
+
+void
+updateLegacyDocstoreMetrics(LegacyDocumentDBMetrics::DocstoreMetrics &metrics,
+ const DocumentSubDBCollection &sub_dbs,
+ CacheStats &lastCacheStats)
+{
+ size_t memoryUsage = 0;
+ CacheStats cache_stats;
+ for (const auto subDb : sub_dbs) {
+ const ISummaryManager::SP &summaryMgr = subDb->getSummaryManager();
+ if (summaryMgr) {
+ cache_stats += summaryMgr->getBackingStore().getCacheStats();
+ memoryUsage += summaryMgr->getBackingStore().memoryUsed();
+ }
+ }
+ metrics.memoryUsage.set(memoryUsage);
+ updateCountMetric(cache_stats.lookups(), lastCacheStats.lookups(), metrics.cacheLookups);
+ updateDocumentStoreCacheHitRate(cache_stats, lastCacheStats, metrics.cacheHitRate);
+ metrics.cacheElements.set(cache_stats.elements);
+ metrics.cacheMemoryUsed.set(cache_stats.memory_used);
+ lastCacheStats = cache_stats;
+}
+
+void
+updateDocumentStoreMetrics(DocumentDBTaggedMetrics::SubDBMetrics::DocumentStoreMetrics &metrics,
+ const IDocumentSubDB *subDb,
+ CacheStats &lastCacheStats,
+ TotalStats &totalStats)
+{
+ const ISummaryManager::SP &summaryMgr = subDb->getSummaryManager();
+ search::IDocumentStore &backingStore = summaryMgr->getBackingStore();
+ search::DataStoreStorageStats storageStats(backingStore.getStorageStats());
+ updateDiskUsageMetric(metrics.diskUsage, storageStats.diskUsage(), totalStats);
+ metrics.diskBloat.set(storageStats.diskBloat());
+ metrics.maxBucketSpread.set(storageStats.maxBucketSpread());
+ updateMemoryUsageMetrics(metrics.memoryUsage, backingStore.getMemoryUsage(), totalStats);
+
+ search::CacheStats cacheStats = backingStore.getCacheStats();
+ totalStats.memoryUsage.incAllocatedBytes(cacheStats.memory_used);
+ metrics.cache.memoryUsage.set(cacheStats.memory_used);
+ metrics.cache.elements.set(cacheStats.elements);
+ updateDocumentStoreCacheHitRate(cacheStats, lastCacheStats, metrics.cache.hitRate);
+ updateCountMetric(cacheStats.lookups(), lastCacheStats.lookups(), metrics.cache.lookups);
+ updateCountMetric(cacheStats.invalidations, lastCacheStats.invalidations, metrics.cache.invalidations);
+ lastCacheStats = cacheStats;
+}
+
+void
+updateDocumentStoreMetrics(DocumentDBTaggedMetrics &metrics, const DocumentSubDBCollection &subDBs,
+ DocumentDBMetricsUpdater::DocumentStoreCacheStats &lastDocStoreCacheStats, TotalStats &totalStats)
+{
+ updateDocumentStoreMetrics(metrics.ready.documentStore, subDBs.getReadySubDB(), lastDocStoreCacheStats.readySubDb, totalStats);
+ updateDocumentStoreMetrics(metrics.removed.documentStore, subDBs.getRemSubDB(), lastDocStoreCacheStats.removedSubDb, totalStats);
+ updateDocumentStoreMetrics(metrics.notReady.documentStore, subDBs.getNotReadySubDB(), lastDocStoreCacheStats.notReadySubDb, totalStats);
+}
+
+template <typename MetricSetType>
+void
+updateLidSpaceMetrics(MetricSetType &metrics, const search::IDocumentMetaStore &metaStore)
+{
+ LidUsageStats stats = metaStore.getLidUsageStats();
+ metrics.lidLimit.set(stats.getLidLimit());
+ metrics.usedLids.set(stats.getUsedLids());
+ metrics.lowestFreeLid.set(stats.getLowestFreeLid());
+ metrics.highestUsedLid.set(stats.getHighestUsedLid());
+ metrics.lidBloatFactor.set(stats.getLidBloatFactor());
+ metrics.lidFragmentationFactor.set(stats.getLidFragmentationFactor());
+}
+
+}
+
+void
+DocumentDBMetricsUpdater::updateMetrics(DocumentDBMetricsCollection &metrics)
+{
+ TotalStats totalStats;
+ ExecutorThreadingServiceStats threadingServiceStats = _writeService.getStats();
+ updateLegacyMetrics(metrics.getLegacyMetrics(), threadingServiceStats);
+ updateIndexMetrics(metrics, _subDBs.getReadySubDB()->getSearchableStats(), totalStats);
+ updateAttributeMetrics(metrics, _subDBs, totalStats);
+ updateMatchingMetrics(metrics, *_subDBs.getReadySubDB());
+ updateSessionCacheMetrics(metrics, _sessionManager);
+ updateDocumentsMetrics(metrics, _subDBs);
+ updateDocumentStoreMetrics(metrics.getTaggedMetrics(), _subDBs, _lastDocStoreCacheStats, totalStats);
+ updateMiscMetrics(metrics.getTaggedMetrics(), threadingServiceStats);
+
+ metrics.getTaggedMetrics().totalMemoryUsage.update(totalStats.memoryUsage);
+ metrics.getTaggedMetrics().totalDiskUsage.set(totalStats.diskUsage);
+}
+
+void
+DocumentDBMetricsUpdater::updateLegacyMetrics(LegacyDocumentDBMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats)
+{
+ metrics.executor.update(threadingServiceStats.getMasterExecutorStats());
+ metrics.summaryExecutor.update(threadingServiceStats.getSummaryExecutorStats());
+ metrics.indexExecutor.update(threadingServiceStats.getIndexExecutorStats());
+ updateLegacyDocstoreMetrics(metrics.docstore, _subDBs, _lastDocStoreCacheStats.total);
+
+ DocumentMetaStoreReadGuards dmss(_subDBs);
+ updateLidSpaceMetrics(metrics.ready.docMetaStore, dmss.readydms->get());
+ updateLidSpaceMetrics(metrics.notReady.docMetaStore, dmss.notreadydms->get());
+ updateLidSpaceMetrics(metrics.removed.docMetaStore, dmss.remdms->get());
+
+ metrics.numBadConfigs.set(_state.getDelayedConfig() ? 1u : 0u);
+}
+
+void
+DocumentDBMetricsUpdater::updateAttributeResourceUsageMetrics(DocumentDBTaggedMetrics::AttributeMetrics &metrics)
+{
+ AttributeUsageStats attributeUsageStats = _writeFilter.getAttributeUsageStats();
+ bool feedBlocked = !_writeFilter.acceptWriteOperation();
+ double enumStoreUsed = attributeUsageStats.enumStoreUsage().getUsage().usage();
+ double multiValueUsed = attributeUsageStats.multiValueUsage().getUsage().usage();
+ metrics.resourceUsage.enumStore.set(enumStoreUsed);
+ metrics.resourceUsage.multiValue.set(multiValueUsed);
+ metrics.resourceUsage.feedingBlocked.set(feedBlocked ? 1 : 0);
+}
+
+void
+DocumentDBMetricsUpdater::updateMiscMetrics(DocumentDBTaggedMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats)
+{
+ metrics.threadingService.update(threadingServiceStats);
+ _jobTrackers.updateMetrics(metrics.job);
+
+ updateAttributeResourceUsageMetrics(metrics.attribute);
+
+ DocumentMetaStoreReadGuards dmss(_subDBs);
+ updateLidSpaceMetrics(metrics.ready.lidSpace, dmss.readydms->get());
+ updateLidSpaceMetrics(metrics.notReady.lidSpace, dmss.notreadydms->get());
+ updateLidSpaceMetrics(metrics.removed.lidSpace, dmss.remdms->get());
+}
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.h b/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.h
new file mode 100644
index 00000000000..e0042207060
--- /dev/null
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb_metrics_updater.h
@@ -0,0 +1,61 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include <vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h>
+#include <vespa/searchlib/docstore/cachestats.h>
+
+namespace proton {
+
+namespace matching { class SessionManager; }
+
+class AttributeUsageFilter;
+class DDBState;
+class DocumentDBJobTrackers;
+class DocumentDBMetricsCollection;
+class DocumentSubDBCollection;
+class ExecutorThreadingService;
+class ExecutorThreadingServiceStats;
+class LegacyDocumentDBMetrics;
+
+/**
+ * Class used to update metrics for a document db.
+ */
+class DocumentDBMetricsUpdater {
+public:
+
+ struct DocumentStoreCacheStats {
+ search::CacheStats total;
+ search::CacheStats readySubDb;
+ search::CacheStats notReadySubDb;
+ search::CacheStats removedSubDb;
+ DocumentStoreCacheStats() : total(), readySubDb(), notReadySubDb(), removedSubDb() {}
+ };
+
+private:
+ const DocumentSubDBCollection &_subDBs;
+ ExecutorThreadingService &_writeService;
+ DocumentDBJobTrackers &_jobTrackers;
+ matching::SessionManager &_sessionManager;
+ const AttributeUsageFilter &_writeFilter;
+ const DDBState &_state;
+ // Last updated document store cache statistics. Necessary due to metrics implementation is upside down.
+ DocumentStoreCacheStats _lastDocStoreCacheStats;
+
+ void updateLegacyMetrics(LegacyDocumentDBMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats);
+ void updateMiscMetrics(DocumentDBTaggedMetrics &metrics, const ExecutorThreadingServiceStats &threadingServiceStats);
+ void updateAttributeResourceUsageMetrics(DocumentDBTaggedMetrics::AttributeMetrics &metrics);
+
+public:
+ DocumentDBMetricsUpdater(const DocumentSubDBCollection &subDBs,
+ ExecutorThreadingService &writeService,
+ DocumentDBJobTrackers &jobTrackers,
+ matching::SessionManager &sessionManager,
+ const AttributeUsageFilter &writeFilter,
+ const DDBState &state);
+ ~DocumentDBMetricsUpdater();
+
+ void updateMetrics(DocumentDBMetricsCollection &metrics);
+
+};
+
+}
diff --git a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h
index d41c2088518..736edcf3c5e 100644
--- a/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/idocumentsubdb.h
@@ -84,6 +84,7 @@ public:
virtual const std::shared_ptr<ISummaryAdapter> &getSummaryAdapter() const = 0;
virtual const std::shared_ptr<IIndexWriter> &getIndexWriter() const = 0;
virtual IDocumentMetaStoreContext &getDocumentMetaStoreContext() = 0;
+ virtual const IDocumentMetaStoreContext &getDocumentMetaStoreContext() const = 0;
virtual IFlushTargetList getFlushTargets() = 0;
virtual size_t getNumDocs() const = 0;
virtual size_t getNumActiveDocs() const = 0;
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
index 4a21537f134..a54525377a9 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.h
@@ -228,6 +228,7 @@ public:
const ISummaryAdapter::SP & getSummaryAdapter() const override { return _summaryAdapter; }
const std::shared_ptr<IIndexWriter> & getIndexWriter() const override;
IDocumentMetaStoreContext & getDocumentMetaStoreContext() override { return *_metaStoreCtx; }
+ const IDocumentMetaStoreContext &getDocumentMetaStoreContext() const override { return *_metaStoreCtx; }
size_t getNumDocs() const override;
size_t getNumActiveDocs() const override;
bool hasDocument(const document::DocumentId &id) override;
diff --git a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h
index 66ae296566f..c2595a85fb7 100644
--- a/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h
+++ b/searchcore/src/vespa/searchcore/proton/test/dummy_document_sub_db.h
@@ -67,6 +67,7 @@ struct DummyDocumentSubDb : public IDocumentSubDB
const ISummaryAdapter::SP &getSummaryAdapter() const override { return _summaryAdapter; }
const IIndexWriter::SP &getIndexWriter() const override { return _indexWriter; }
IDocumentMetaStoreContext &getDocumentMetaStoreContext() override { return _metaStoreCtx; }
+ const IDocumentMetaStoreContext &getDocumentMetaStoreContext() const override { return _metaStoreCtx; }
IFlushTargetList getFlushTargets() override { return IFlushTargetList(); }
size_t getNumDocs() const override { return 0; }
size_t getNumActiveDocs() const override { return 0; }
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java
index da34ab8822d..f6502a9801d 100755
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java
@@ -2,8 +2,11 @@
package com.yahoo.searchlib.rankingexpression;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.yahoo.log.event.Collection;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
import com.yahoo.searchlib.rankingexpression.rule.SerializationContext;
+import com.yahoo.tensor.TensorType;
import com.yahoo.text.Utf8;
import java.security.MessageDigest;
@@ -13,9 +16,14 @@ import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
/**
- * A function defined by a ranking expression
+ * A function defined by a ranking expression, optionally containing type information
+ * for inputs and outputs.
+ *
+ * Immutable, but note that ranking expressions are *not* immutable.
*
* @author Simon Thoresen Hult
* @author bratseth
@@ -24,8 +32,13 @@ public class ExpressionFunction {
private final String name;
private final ImmutableList<String> arguments;
+
+ /** Types of the inputs, if known. The keys here is any subset (including empty and identity) of the argument list */
+ private final ImmutableMap<String, TensorType> argumentTypes;
private final RankingExpression body;
+ private final Optional<TensorType> returnType;
+
/**
* Constructs a new function with no arguments
*
@@ -44,9 +57,18 @@ public class ExpressionFunction {
* @param body the ranking expression that defines this function
*/
public ExpressionFunction(String name, List<String> arguments, RankingExpression body) {
- this.name = name;
+ this(name, arguments, body, ImmutableMap.of(), Optional.empty());
+ }
+
+ public ExpressionFunction(String name, List<String> arguments, RankingExpression body,
+ Map<String, TensorType> argumentTypes, Optional<TensorType> returnType) {
+ this.name = Objects.requireNonNull(name, "name cannot be null");
this.arguments = arguments==null ? ImmutableList.of() : ImmutableList.copyOf(arguments);
- this.body = body;
+ this.body = Objects.requireNonNull(body, "body cannot be null");
+ if ( ! this.arguments.containsAll(argumentTypes.keySet()))
+ throw new IllegalArgumentException("Argument type keys must be a subset of the argument keys");
+ this.argumentTypes = ImmutableMap.copyOf(argumentTypes);
+ this.returnType = Objects.requireNonNull(returnType, "returnType cannot be null");
}
public String getName() { return name; }
@@ -56,9 +78,27 @@ public class ExpressionFunction {
public RankingExpression getBody() { return body; }
+ /** Returns the types of the arguments of this, if specified. The keys of this may be any subset of the arguments */
+ public Map<String, TensorType> argumentTypes() { return argumentTypes; }
+
+ /** Returns the return type of this, or empty if not specified */
+ public Optional<TensorType> returnType() { return returnType; }
+
+ public ExpressionFunction withName(String name) {
+ return new ExpressionFunction(name, arguments, body, argumentTypes, returnType);
+ }
+
/** Returns a copy of this with the body changed to the given value */
public ExpressionFunction withBody(RankingExpression body) {
- return new ExpressionFunction(name, arguments, body);
+ return new ExpressionFunction(name, arguments, body, argumentTypes, returnType);
+ }
+
+ public ExpressionFunction withReturnType(TensorType returnType) {
+ return new ExpressionFunction(name, arguments, body, argumentTypes, Optional.of(returnType));
+ }
+
+ public ExpressionFunction withArgumentTypes(Map<String, TensorType> argumentTypes) {
+ return new ExpressionFunction(name, arguments, body, argumentTypes, returnType);
}
/**
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/ExpressionOptimizer.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/ExpressionOptimizer.java
index 7060cfc2132..84a90ee64c2 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/ExpressionOptimizer.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/ExpressionOptimizer.java
@@ -4,6 +4,7 @@ package com.yahoo.searchlib.rankingexpression.evaluation;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.evaluation.gbdtoptimization.GBDTForestOptimizer;
import com.yahoo.searchlib.rankingexpression.evaluation.gbdtoptimization.GBDTOptimizer;
+import com.yahoo.searchlib.rankingexpression.evaluation.tensoroptimization.TensorOptimizer;
/**
* This class will perform various optimizations on the ranking expressions. Clients using optimized expressions
@@ -32,8 +33,8 @@ import com.yahoo.searchlib.rankingexpression.evaluation.gbdtoptimization.GBDTOpt
public class ExpressionOptimizer {
private GBDTOptimizer gbdtOptimizer = new GBDTOptimizer();
-
private GBDTForestOptimizer gbdtForestOptimizer = new GBDTForestOptimizer();
+ private TensorOptimizer tensorOptimizer = new TensorOptimizer();
/** Gets an optimizer instance used by this by class name, or null if the optimizer is not known */
public Optimizer getOptimizer(Class<?> clazz) {
@@ -41,6 +42,8 @@ public class ExpressionOptimizer {
return gbdtOptimizer;
if (clazz == gbdtForestOptimizer.getClass())
return gbdtForestOptimizer;
+ if (clazz == tensorOptimizer.getClass())
+ return tensorOptimizer;
return null;
}
@@ -49,6 +52,7 @@ public class ExpressionOptimizer {
// Note: Order of optimizations matter
gbdtOptimizer.optimize(expression, contextIndex, report);
gbdtForestOptimizer.optimize(expression, contextIndex, report);
+ tensorOptimizer.optimize(expression, contextIndex, report);
return report;
}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizer.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizer.java
new file mode 100644
index 00000000000..63cea371d14
--- /dev/null
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizer.java
@@ -0,0 +1,85 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchlib.rankingexpression.evaluation.tensoroptimization;
+
+import com.yahoo.searchlib.rankingexpression.RankingExpression;
+import com.yahoo.searchlib.rankingexpression.evaluation.ContextIndex;
+import com.yahoo.searchlib.rankingexpression.evaluation.OptimizationReport;
+import com.yahoo.searchlib.rankingexpression.evaluation.Optimizer;
+import com.yahoo.searchlib.rankingexpression.rule.CompositeNode;
+import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
+import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
+import com.yahoo.tensor.functions.Join;
+import com.yahoo.tensor.functions.Reduce;
+import com.yahoo.tensor.functions.ReduceJoin;
+import com.yahoo.tensor.functions.TensorFunction;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Recognizes and optimizes tensor expressions.
+ *
+ * @author lesters
+ */
+public class TensorOptimizer extends Optimizer {
+
+ private OptimizationReport report;
+
+ @Override
+ public void optimize(RankingExpression expression, ContextIndex context, OptimizationReport report) {
+ if (!isEnabled()) return;
+ this.report = report;
+ expression.setRoot(optimize(expression.getRoot(), context));
+ report.note("Tensor expression optimization done");
+ }
+
+ private ExpressionNode optimize(ExpressionNode node, ContextIndex context) {
+ node = optimizeReduceJoin(node);
+ if (node instanceof CompositeNode) {
+ return optimizeChildren((CompositeNode)node, context);
+ }
+ return node;
+ }
+
+ private ExpressionNode optimizeChildren(CompositeNode node, ContextIndex context) {
+ List<ExpressionNode> children = node.children();
+ List<ExpressionNode> optimizedChildren = new ArrayList<>(children.size());
+ for (ExpressionNode child : children)
+ optimizedChildren.add(optimize(child, context));
+ return node.setChildren(optimizedChildren);
+ }
+
+ /**
+ * Recognized a reduce followed by a join. In many cases, chunking these
+ * two operations together is significantly more efficient than evaluating
+ * each on its own, avoiding the cost of a temporary tensor.
+ *
+ * Note that this does not guarantee that the optimization is performed.
+ * The ReduceJoin class determines whether or not the arguments are
+ * compatible with the optimization.
+ */
+ private ExpressionNode optimizeReduceJoin(ExpressionNode node) {
+ if ( ! (node instanceof TensorFunctionNode)) {
+ return node;
+ }
+ TensorFunction function = ((TensorFunctionNode) node).function();
+ if ( ! (function instanceof Reduce)) {
+ return node;
+ }
+ List<ExpressionNode> children = ((TensorFunctionNode) node).children();
+ if (children.size() != 1) {
+ return node;
+ }
+ ExpressionNode child = children.get(0);
+ if ( ! (child instanceof TensorFunctionNode)) {
+ return node;
+ }
+ TensorFunction argument = ((TensorFunctionNode) child).function();
+ if (argument instanceof Join) {
+ report.incMetric("Replaced reduce->join", 1);
+ return new TensorFunctionNode(new ReduceJoin((Reduce)function, (Join)argument));
+ }
+ return node;
+ }
+
+}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ImportedModel.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ImportedModel.java
index 282a4c5e0a9..9ff391a5cfe 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ImportedModel.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ImportedModel.java
@@ -1,15 +1,22 @@
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.yahoo.collections.Pair;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
import java.util.regex.Pattern;
/**
@@ -26,12 +33,11 @@ public class ImportedModel {
private final String source;
private final Map<String, Signature> signatures = new HashMap<>();
- private final Map<String, TensorType> arguments = new HashMap<>();
+ private final Map<String, TensorType> inputs = new HashMap<>();
private final Map<String, Tensor> smallConstants = new HashMap<>();
private final Map<String, Tensor> largeConstants = new HashMap<>();
private final Map<String, RankingExpression> expressions = new HashMap<>();
private final Map<String, RankingExpression> functions = new HashMap<>();
- private final Map<String, TensorType> requiredFunctions = new HashMap<>();
/**
* Creates a new imported model.
@@ -49,11 +55,11 @@ public class ImportedModel {
/** Returns the name of this model, which can only contain the characters in [A-Za-z0-9_] */
public String name() { return name; }
- /** Returns the source path (directiry or file) of this model */
+ /** Returns the source path (directory or file) of this model */
public String source() { return source; }
- /** Returns an immutable map of the arguments ("Placeholders") of this */
- public Map<String, TensorType> arguments() { return Collections.unmodifiableMap(arguments); }
+ /** Returns an immutable map of the inputs of this */
+ public Map<String, TensorType> inputs() { return Collections.unmodifiableMap(inputs); }
/**
* Returns an immutable map of the small constants of this.
@@ -71,7 +77,7 @@ public class ImportedModel {
/**
* Returns an immutable map of the expressions of this - corresponding to graph nodes
- * which are not Inputs/Placeholders or Variables (which instead become respectively arguments and constants).
+ * which are not Inputs/Placeholders or Variables (which instead become respectively inputs and constants).
* Note that only nodes recursively referenced by a placeholder/input are added.
*/
public Map<String, RankingExpression> expressions() { return Collections.unmodifiableMap(expressions); }
@@ -82,9 +88,6 @@ public class ImportedModel {
*/
public Map<String, RankingExpression> functions() { return Collections.unmodifiableMap(functions); }
- /** Returns an immutable map of the functions that must be provided by the environment running this model */
- public Map<String, TensorType> requiredFunctions() { return Collections.unmodifiableMap(requiredFunctions); }
-
/** Returns an immutable map of the signatures of this */
public Map<String, Signature> signatures() { return Collections.unmodifiableMap(signatures); }
@@ -96,12 +99,11 @@ public class ImportedModel {
/** Convenience method for returning a default signature */
Signature defaultSignature() { return signature(defaultSignatureName); }
- void argument(String name, TensorType argumentType) { arguments.put(name, argumentType); }
+ void input(String name, TensorType argumentType) { inputs.put(name, argumentType); }
void smallConstant(String name, Tensor constant) { smallConstants.put(name, constant); }
void largeConstant(String name, Tensor constant) { largeConstants.put(name, constant); }
void expression(String name, RankingExpression expression) { expressions.put(name, expression); }
void function(String name, RankingExpression expression) { functions.put(name, expression); }
- void requiredFunction(String name, TensorType type) { requiredFunctions.put(name, type); }
/**
* Returns all the output expressions of this indexed by name. The names consist of one or two parts
@@ -109,24 +111,39 @@ public class ImportedModel {
* if signatures are used, or the expression name if signatures are not used and there are multiple
* expressions, and the second is the output name if signature names are used.
*/
- public List<Pair<String, RankingExpression>> outputExpressions() {
- List<Pair<String, RankingExpression>> expressions = new ArrayList<>();
+ public List<Pair<String, ExpressionFunction>> outputExpressions() {
+ List<Pair<String, ExpressionFunction>> expressions = new ArrayList<>();
for (Map.Entry<String, Signature> signatureEntry : signatures().entrySet()) {
for (Map.Entry<String, String> outputEntry : signatureEntry.getValue().outputs().entrySet())
expressions.add(new Pair<>(signatureEntry.getKey() + "." + outputEntry.getKey(),
- expressions().get(outputEntry.getValue())));
+ signatureEntry.getValue().outputExpression(outputEntry.getKey())
+ .withName(signatureEntry.getKey() + "." + outputEntry.getKey())));
if (signatureEntry.getValue().outputs().isEmpty()) // fallback: Signature without outputs
expressions.add(new Pair<>(signatureEntry.getKey(),
- expressions().get(signatureEntry.getKey())));
+ new ExpressionFunction(signatureEntry.getKey(),
+ new ArrayList<>(signatureEntry.getValue().inputs().keySet()),
+ expressions().get(signatureEntry.getKey()),
+ signatureEntry.getValue().inputMap(),
+ Optional.empty())));
}
if (signatures().isEmpty()) { // fallback for models without signatures
if (expressions().size() == 1) {
Map.Entry<String, RankingExpression> singleEntry = this.expressions.entrySet().iterator().next();
- expressions.add(new Pair<>(singleEntry.getKey(), singleEntry.getValue()));
+ expressions.add(new Pair<>(singleEntry.getKey(),
+ new ExpressionFunction(singleEntry.getKey(),
+ new ArrayList<>(inputs.keySet()),
+ singleEntry.getValue(),
+ inputs,
+ Optional.empty())));
}
else {
for (Map.Entry<String, RankingExpression> expressionEntry : expressions().entrySet()) {
- expressions.add(new Pair<>(expressionEntry.getKey(), expressionEntry.getValue()));
+ expressions.add(new Pair<>(expressionEntry.getKey(),
+ new ExpressionFunction(expressionEntry.getKey(),
+ new ArrayList<>(inputs.keySet()),
+ expressionEntry.getValue(),
+ inputs,
+ Optional.empty())));
}
}
}
@@ -134,7 +151,7 @@ public class ImportedModel {
}
/**
- * A signature is a set of named inputs and outputs, where the inputs maps to argument
+ * A signature is a set of named inputs and outputs, where the inputs maps to input
* ("placeholder") names+types, and outputs maps to expressions nodes.
* Note that TensorFlow supports multiple signatures in their format, but ONNX has no explicit
* concept of signatures. For now, we handle ONNX models as having a single signature.
@@ -142,8 +159,8 @@ public class ImportedModel {
public class Signature {
private final String name;
- private final Map<String, String> inputs = new HashMap<>();
- private final Map<String, String> outputs = new HashMap<>();
+ private final Map<String, String> inputs = new LinkedHashMap<>();
+ private final Map<String, String> outputs = new LinkedHashMap<>();
private final Map<String, String> skippedOutputs = new HashMap<>();
private final List<String> importWarnings = new ArrayList<>();
@@ -158,12 +175,20 @@ public class ImportedModel {
/**
* Returns an immutable map of the inputs (evaluation context) of this. This is a map from input name
- * to argument (Placeholder) name in the owner of this
+ * in this signature to input name in the owning model
*/
public Map<String, String> inputs() { return Collections.unmodifiableMap(inputs); }
- /** Returns the type of the argument this input references */
- public TensorType inputArgument(String inputName) { return owner().arguments().get(inputs.get(inputName)); }
+ /** Returns the name and type of all inputs in this signature as an immutable map */
+ public Map<String, TensorType> inputMap() {
+ ImmutableMap.Builder<String, TensorType> inputs = new ImmutableMap.Builder<>();
+ for (Map.Entry<String, String> inputEntry : inputs().entrySet())
+ inputs.put(inputEntry.getKey(), owner().inputs().get(inputEntry.getValue()));
+ return inputs.build();
+ }
+
+ /** Returns the type of the input this input references */
+ public TensorType inputArgument(String inputName) { return owner().inputs().get(inputs.get(inputName)); }
/** Returns an immutable list of the expression names of this */
public Map<String, String> outputs() { return Collections.unmodifiableMap(outputs); }
@@ -180,7 +205,13 @@ public class ImportedModel {
public List<String> importWarnings() { return Collections.unmodifiableList(importWarnings); }
/** Returns the expression this output references */
- public RankingExpression outputExpression(String outputName) { return owner().expressions().get(outputs.get(outputName)); }
+ public ExpressionFunction outputExpression(String outputName) {
+ return new ExpressionFunction(outputName,
+ new ArrayList<>(inputs.keySet()),
+ owner().expressions().get(outputs.get(outputName)),
+ inputMap(),
+ Optional.empty());
+ }
@Override
public String toString() { return "signature '" + name + "'"; }
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ModelImporter.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ModelImporter.java
index d25502fd149..b7138ad87e3 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ModelImporter.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/ModelImporter.java
@@ -187,8 +187,7 @@ public abstract class ModelImporter {
if (operation.isInput()) {
// All inputs must have dimensions with standard naming convention: d0, d1, ...
OrderedTensorType standardNamingConvention = OrderedTensorType.standardType(operation.type().get());
- model.argument(operation.vespaName(), standardNamingConvention.type());
- model.requiredFunction(operation.vespaName(), standardNamingConvention.type());
+ model.input(operation.vespaName(), standardNamingConvention.type());
}
}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxImporter.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxImporter.java
index 917b0d6a389..e6bb5f40b3f 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxImporter.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxImporter.java
@@ -2,7 +2,6 @@
package com.yahoo.searchlib.rankingexpression.integration.ml;
-import com.yahoo.io.IOUtils;
import com.yahoo.searchlib.rankingexpression.integration.ml.importer.IntermediateGraph;
import com.yahoo.searchlib.rankingexpression.integration.ml.importer.onnx.GraphImporter;
import onnx.Onnx;
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/LambdaFunctionNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/LambdaFunctionNode.java
index de98b01287e..3a3410aeebb 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/LambdaFunctionNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/LambdaFunctionNode.java
@@ -12,6 +12,7 @@ import com.yahoo.tensor.evaluation.TypeContext;
import java.util.Collections;
import java.util.Deque;
import java.util.List;
+import java.util.Optional;
import java.util.function.DoubleBinaryOperator;
import java.util.function.DoubleUnaryOperator;
@@ -90,7 +91,47 @@ public class LambdaFunctionNode extends CompositeNode {
if (arguments.size() > 2)
throw new IllegalStateException("Cannot apply " + this + " as a DoubleBinaryOperator: " +
"Must have at most two argument " + " but has " + arguments);
- return new DoubleBinaryLambda();
+
+ // Optimization: if possible, calculate directly rather than creating a context and evaluating the expression
+ return getDirectEvaluator().orElseGet(DoubleBinaryLambda::new);
+ }
+
+ private Optional<DoubleBinaryOperator> getDirectEvaluator() {
+ if ( ! (functionExpression instanceof ArithmeticNode)) {
+ return Optional.empty();
+ }
+ ArithmeticNode node = (ArithmeticNode) functionExpression;
+ if ( ! (node.children().get(0) instanceof ReferenceNode) || ! (node.children().get(1) instanceof ReferenceNode)) {
+ return Optional.empty();
+ }
+ if (node.operators().size() != 1) {
+ return Optional.empty();
+ }
+ ArithmeticOperator operator = node.operators().get(0);
+ switch (operator) {
+ case OR: return asFunctionExpression((left, right) -> ((left != 0.0) || (right != 0.0)) ? 1.0 : 0.0);
+ case AND: return asFunctionExpression((left, right) -> ((left != 0.0) && (right != 0.0)) ? 1.0 : 0.0);
+ case PLUS: return asFunctionExpression((left, right) -> left + right);
+ case MINUS: return asFunctionExpression((left, right) -> left - right);
+ case MULTIPLY: return asFunctionExpression((left, right) -> left * right);
+ case DIVIDE: return asFunctionExpression((left, right) -> left / right);
+ case MODULO: return asFunctionExpression((left, right) -> left % right);
+ case POWER: return asFunctionExpression(Math::pow);
+ }
+ return Optional.empty();
+ }
+
+ private Optional<DoubleBinaryOperator> asFunctionExpression(DoubleBinaryOperator operator) {
+ return Optional.of(new DoubleBinaryOperator() {
+ @Override
+ public double applyAsDouble(double left, double right) {
+ return operator.applyAsDouble(left, right);
+ }
+ @Override
+ public String toString() {
+ return LambdaFunctionNode.this.toString();
+ }
+ });
}
private class DoubleUnaryLambda implements DoubleUnaryOperator {
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java
index 796c13a8669..0b68e71c21a 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java
@@ -3,6 +3,8 @@ package com.yahoo.searchlib.rankingexpression.rule;
import com.google.common.collect.ImmutableMap;
import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
+import com.yahoo.searchlib.rankingexpression.RankingExpression;
+import com.yahoo.tensor.TensorType;
import java.util.Collection;
import java.util.Collections;
@@ -80,9 +82,15 @@ public class SerializationContext extends FunctionReferenceContext {
serializedFunctions.put(name, expressionString);
}
- /** Returns the existing serialization of a function, or null if none */
- public String getFunctionSerialization(String name) {
- return serializedFunctions.get(name);
+ /** Adds the serialization of the an argument type to a function */
+ public void addArgumentTypeSerialization(String functionName, String argumentName, TensorType type) {
+ serializedFunctions.put("rankingExpression(" + functionName + ")." + argumentName + ".type", type.toString());
+ }
+
+ /** Adds the serialization of the return type of a function */
+ public void addFunctionTypeSerialization(String functionName, TensorType type) {
+ if (type.rank() == 0) return; // no explicit type implies scalar (aka rank 0 tensor)
+ serializedFunctions.put("rankingExpression(" + functionName + ").type", type.toString());
}
@Override
diff --git a/searchlib/src/test/files/integration/tensorflow/blog/saved/saved_model.pbtxt b/searchlib/src/test/files/integration/tensorflow/blog/saved/saved_model.pbtxt
new file mode 100644
index 00000000000..a669e69b709
--- /dev/null
+++ b/searchlib/src/test/files/integration/tensorflow/blog/saved/saved_model.pbtxt
@@ -0,0 +1,14726 @@
+saved_model_schema_version: 1
+meta_graphs {
+ meta_info_def {
+ stripped_op_list {
+ op {
+ name: "Add"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_STRING
+ }
+ }
+ }
+ }
+ op {
+ name: "AddN"
+ input_arg {
+ name: "inputs"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ output_arg {
+ name: "sum"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ type: DT_VARIANT
+ }
+ }
+ }
+ is_aggregate: true
+ is_commutative: true
+ }
+ op {
+ name: "ApplyAdagrad"
+ input_arg {
+ name: "var"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "accum"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "lr"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "grad"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "out"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ }
+ op {
+ name: "Assign"
+ input_arg {
+ name: "ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output_ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "validate_shape"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ allows_uninitialized_input: true
+ }
+ op {
+ name: "AssignAdd"
+ input_arg {
+ name: "ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output_ref"
+ type_attr: "T"
+ is_ref: true
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "use_locking"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ }
+ op {
+ name: "BroadcastGradientArgs"
+ input_arg {
+ name: "s0"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "s1"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r0"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "r1"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Cast"
+ input_arg {
+ name: "x"
+ type_attr: "SrcT"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "DstT"
+ }
+ attr {
+ name: "SrcT"
+ type: "type"
+ }
+ attr {
+ name: "DstT"
+ type: "type"
+ }
+ }
+ op {
+ name: "ConcatV2"
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ input_arg {
+ name: "axis"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 2
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Const"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "value"
+ type: "tensor"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ }
+ op {
+ name: "Equal"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_QUINT8
+ type: DT_QINT8
+ type: DT_QINT32
+ type: DT_STRING
+ type: DT_BOOL
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Fill"
+ input_arg {
+ name: "dims"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "value"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "FloorDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "GreaterEqual"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Identity"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "LessEqual"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type: DT_BOOL
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Log"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "MatMul"
+ input_arg {
+ name: "a"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "b"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "product"
+ type_attr: "T"
+ }
+ attr {
+ name: "transpose_a"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "transpose_b"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Maximum"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Mean"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "MergeSummary"
+ input_arg {
+ name: "inputs"
+ type: DT_STRING
+ number_attr: "N"
+ }
+ output_arg {
+ name: "summary"
+ type: DT_STRING
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ }
+ op {
+ name: "MergeV2Checkpoints"
+ input_arg {
+ name: "checkpoint_prefixes"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "destination_prefix"
+ type: DT_STRING
+ }
+ attr {
+ name: "delete_old_dirs"
+ type: "bool"
+ default_value {
+ b: true
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "Minimum"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Mul"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ is_commutative: true
+ }
+ op {
+ name: "Neg"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "NoOp"
+ }
+ op {
+ name: "Pack"
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "axis"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ }
+ op {
+ name: "Placeholder"
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ default_value {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ op {
+ name: "Prod"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RandomUniform"
+ input_arg {
+ name: "shape"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "seed"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "seed2"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "RealDiv"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Reciprocal"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Relu"
+ input_arg {
+ name: "features"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "activations"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "ReluGrad"
+ input_arg {
+ name: "gradients"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "features"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "backprops"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Reshape"
+ input_arg {
+ name: "tensor"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "shape"
+ type_attr: "Tshape"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tshape"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "RestoreV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ output_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "SaveV2"
+ input_arg {
+ name: "prefix"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensor_names"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shape_and_slices"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "tensors"
+ type_list_attr: "dtypes"
+ }
+ attr {
+ name: "dtypes"
+ type: "list(type)"
+ has_minimum: true
+ minimum: 1
+ }
+ is_stateful: true
+ }
+ op {
+ name: "ScalarSummary"
+ input_arg {
+ name: "tags"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "values"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "summary"
+ type: DT_STRING
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_UINT8
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_HALF
+ }
+ }
+ }
+ }
+ op {
+ name: "Select"
+ input_arg {
+ name: "condition"
+ type: DT_BOOL
+ }
+ input_arg {
+ name: "t"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "e"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ }
+ op {
+ name: "Shape"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "out_type"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "out_type"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "ShardedFilename"
+ input_arg {
+ name: "basename"
+ type: DT_STRING
+ }
+ input_arg {
+ name: "shard"
+ type: DT_INT32
+ }
+ input_arg {
+ name: "num_shards"
+ type: DT_INT32
+ }
+ output_arg {
+ name: "filename"
+ type: DT_STRING
+ }
+ }
+ op {
+ name: "Sigmoid"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "SigmoidGrad"
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "dy"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "StringJoin"
+ input_arg {
+ name: "inputs"
+ type: DT_STRING
+ number_attr: "N"
+ }
+ output_arg {
+ name: "output"
+ type: DT_STRING
+ }
+ attr {
+ name: "N"
+ type: "int"
+ has_minimum: true
+ minimum: 1
+ }
+ attr {
+ name: "separator"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ }
+ op {
+ name: "Sub"
+ input_arg {
+ name: "x"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "y"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "z"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_UINT8
+ type: DT_INT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT32
+ type: DT_INT64
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ }
+ }
+ }
+ }
+ op {
+ name: "Sum"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "reduction_indices"
+ type_attr: "Tidx"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "keep_dims"
+ type: "bool"
+ default_value {
+ b: false
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ type: DT_INT64
+ type: DT_INT32
+ type: DT_UINT8
+ type: DT_UINT16
+ type: DT_INT16
+ type: DT_INT8
+ type: DT_COMPLEX64
+ type: DT_COMPLEX128
+ type: DT_QINT8
+ type: DT_QUINT8
+ type: DT_QINT32
+ type: DT_HALF
+ }
+ }
+ }
+ attr {
+ name: "Tidx"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "Tile"
+ input_arg {
+ name: "input"
+ type_attr: "T"
+ }
+ input_arg {
+ name: "multiples"
+ type_attr: "Tmultiples"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "T"
+ }
+ attr {
+ name: "T"
+ type: "type"
+ }
+ attr {
+ name: "Tmultiples"
+ type: "type"
+ default_value {
+ type: DT_INT32
+ }
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ }
+ op {
+ name: "TruncatedNormal"
+ input_arg {
+ name: "shape"
+ type_attr: "T"
+ }
+ output_arg {
+ name: "output"
+ type_attr: "dtype"
+ }
+ attr {
+ name: "seed"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "seed2"
+ type: "int"
+ default_value {
+ i: 0
+ }
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_HALF
+ type: DT_FLOAT
+ type: DT_DOUBLE
+ }
+ }
+ }
+ attr {
+ name: "T"
+ type: "type"
+ allowed_values {
+ list {
+ type: DT_INT32
+ type: DT_INT64
+ }
+ }
+ }
+ is_stateful: true
+ }
+ op {
+ name: "VariableV2"
+ output_arg {
+ name: "ref"
+ type_attr: "dtype"
+ is_ref: true
+ }
+ attr {
+ name: "shape"
+ type: "shape"
+ }
+ attr {
+ name: "dtype"
+ type: "type"
+ }
+ attr {
+ name: "container"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ attr {
+ name: "shared_name"
+ type: "string"
+ default_value {
+ s: ""
+ }
+ }
+ is_stateful: true
+ }
+ }
+ tags: "serve"
+ tensorflow_version: "1.4.1"
+ tensorflow_git_version: "v1.4.0-19-ga52c8d9"
+ }
+ graph_def {
+ node {
+ name: "input_u"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "input_d"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "input_y"
+ op: "Placeholder"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "input_concat/axis"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "input_concat"
+ op: "ConcatV2"
+ input: "input_d"
+ input: "input_u"
+ input: "input_concat/axis"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 256
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\000\001\000\000\000\002\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal/mean"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal/stddev"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal/TruncatedNormal"
+ op: "TruncatedNormal"
+ input: "truncated_normal/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "truncated_normal/mul"
+ op: "Mul"
+ input: "truncated_normal/TruncatedNormal"
+ input: "truncated_normal/stddev"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal"
+ op: "Add"
+ input: "truncated_normal/mul"
+ input: "truncated_normal/mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_hidden/Assign"
+ op: "Assign"
+ input: "W_hidden"
+ input: "truncated_normal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_hidden/read"
+ op: "Identity"
+ input: "W_hidden"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 512
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_hidden/Assign"
+ op: "Assign"
+ input: "b_hidden"
+ input: "Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_hidden/read"
+ op: "Identity"
+ input: "b_hidden"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "MatMul"
+ op: "MatMul"
+ input: "input_concat"
+ input: "W_hidden/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "add"
+ op: "Add"
+ input: "MatMul"
+ input: "b_hidden/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "hidden_layer"
+ op: "Relu"
+ input: "add"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\000\002\000\000\200\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1/mean"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1/stddev"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1/TruncatedNormal"
+ op: "TruncatedNormal"
+ input: "truncated_normal_1/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1/mul"
+ op: "Mul"
+ input: "truncated_normal_1/TruncatedNormal"
+ input: "truncated_normal_1/stddev"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "truncated_normal_1"
+ op: "Add"
+ input: "truncated_normal_1/mul"
+ input: "truncated_normal_1/mean"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/Assign"
+ op: "Assign"
+ input: "W_hidden_2"
+ input: "truncated_normal_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/read"
+ op: "Identity"
+ input: "W_hidden_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 128
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/Assign"
+ op: "Assign"
+ input: "b_hidden_2"
+ input: "Const_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/read"
+ op: "Identity"
+ input: "b_hidden_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "MatMul_1"
+ op: "MatMul"
+ input: "hidden_layer"
+ input: "W_hidden_2/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "add_1"
+ op: "Add"
+ input: "MatMul_1"
+ input: "b_hidden_2/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "hidden_layer_2"
+ op: "Relu"
+ input: "add_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\200\000\000\000\001\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform/min"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: -0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform/max"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform/RandomUniform"
+ op: "RandomUniform"
+ input: "random_uniform/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "seed"
+ value {
+ i: 0
+ }
+ }
+ attr {
+ key: "seed2"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "random_uniform/sub"
+ op: "Sub"
+ input: "random_uniform/max"
+ input: "random_uniform/min"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform/mul"
+ op: "Mul"
+ input: "random_uniform/RandomUniform"
+ input: "random_uniform/sub"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "random_uniform"
+ op: "Add"
+ input: "random_uniform/mul"
+ input: "random_uniform/min"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_final"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_final/Assign"
+ op: "Assign"
+ input: "W_final"
+ input: "random_uniform"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_final/read"
+ op: "Identity"
+ input: "W_final"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "zeros"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "b_final"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_final/Assign"
+ op: "Assign"
+ input: "b_final"
+ input: "zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_final/read"
+ op: "Identity"
+ input: "b_final"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "MatMul_2"
+ op: "MatMul"
+ input: "hidden_layer_2"
+ input: "W_final/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "add_2"
+ op: "Add"
+ input: "MatMul_2"
+ input: "b_final/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "y"
+ op: "Sigmoid"
+ input: "add_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "GreaterEqual/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.5
+ }
+ }
+ }
+ }
+ node {
+ name: "GreaterEqual"
+ op: "GreaterEqual"
+ input: "y"
+ input: "GreaterEqual/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "prediction"
+ op: "Cast"
+ input: "GreaterEqual"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_BOOL
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "clip_by_value/Minimum/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.9999899864196777
+ }
+ }
+ }
+ }
+ node {
+ name: "clip_by_value/Minimum"
+ op: "Minimum"
+ input: "y"
+ input: "clip_by_value/Minimum/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "clip_by_value/y"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 9.999999747378752e-06
+ }
+ }
+ }
+ }
+ node {
+ name: "clip_by_value"
+ op: "Maximum"
+ input: "clip_by_value/Minimum"
+ input: "clip_by_value/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Neg"
+ op: "Neg"
+ input: "input_y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Log"
+ op: "Log"
+ input: "clip_by_value"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "mul"
+ op: "Mul"
+ input: "Neg"
+ input: "Log"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "sub/x"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 1.0
+ }
+ }
+ }
+ }
+ node {
+ name: "sub"
+ op: "Sub"
+ input: "sub/x"
+ input: "input_y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "sub_1/x"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 1.0
+ }
+ }
+ }
+ }
+ node {
+ name: "sub_1"
+ op: "Sub"
+ input: "sub_1/x"
+ input: "clip_by_value"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Log_1"
+ op: "Log"
+ input: "sub_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "mul_1"
+ op: "Mul"
+ input: "sub"
+ input: "Log_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "sub_2"
+ op: "Sub"
+ input: "mul"
+ input: "mul_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const_2"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\000\000\000\000\001\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "loss"
+ op: "Mean"
+ input: "sub_2"
+ input: "Const_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Equal"
+ op: "Equal"
+ input: "prediction"
+ input: "input_y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Cast"
+ op: "Cast"
+ input: "Equal"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_BOOL
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Const_3"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\000\000\000\000\001\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "accuracy"
+ op: "Mean"
+ input: "Cast"
+ input: "Const_3"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "global_step/initial_value"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "global_step"
+ op: "VariableV2"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "global_step/Assign"
+ op: "Assign"
+ input: "global_step"
+ input: "global_step/initial_value"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "global_step/read"
+ op: "Identity"
+ input: "global_step"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 1.0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Fill"
+ op: "Fill"
+ input: "gradients/Shape"
+ input: "gradients/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Reshape/shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 2
+ }
+ }
+ tensor_content: "\001\000\000\000\001\000\000\000"
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/Fill"
+ input: "gradients/loss_grad/Reshape/shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Shape"
+ op: "Shape"
+ input: "sub_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Tile"
+ op: "Tile"
+ input: "gradients/loss_grad/Reshape"
+ input: "gradients/loss_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tmultiples"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Shape_1"
+ op: "Shape"
+ input: "sub_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Shape_2"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Prod"
+ op: "Prod"
+ input: "gradients/loss_grad/Shape_1"
+ input: "gradients/loss_grad/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Const_1"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Prod_1"
+ op: "Prod"
+ input: "gradients/loss_grad/Shape_2"
+ input: "gradients/loss_grad/Const_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Maximum/y"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Maximum"
+ op: "Maximum"
+ input: "gradients/loss_grad/Prod_1"
+ input: "gradients/loss_grad/Maximum/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/floordiv"
+ op: "FloorDiv"
+ input: "gradients/loss_grad/Prod"
+ input: "gradients/loss_grad/Maximum"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/loss_grad/Shape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/Cast"
+ op: "Cast"
+ input: "gradients/loss_grad/floordiv"
+ attr {
+ key: "DstT"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "SrcT"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/loss_grad/truediv"
+ op: "RealDiv"
+ input: "gradients/loss_grad/Tile"
+ input: "gradients/loss_grad/Cast"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Shape"
+ op: "Shape"
+ input: "mul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Shape_1"
+ op: "Shape"
+ input: "mul_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/sub_2_grad/Shape"
+ input: "gradients/sub_2_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Sum"
+ op: "Sum"
+ input: "gradients/loss_grad/truediv"
+ input: "gradients/sub_2_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/sub_2_grad/Sum"
+ input: "gradients/sub_2_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/loss_grad/truediv"
+ input: "gradients/sub_2_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Neg"
+ op: "Neg"
+ input: "gradients/sub_2_grad/Sum_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/sub_2_grad/Neg"
+ input: "gradients/sub_2_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/sub_2_grad/Reshape"
+ input: "^gradients/sub_2_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/sub_2_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/sub_2_grad/Reshape"
+ input: "^gradients/sub_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/sub_2_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_2_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/sub_2_grad/Reshape_1"
+ input: "^gradients/sub_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/sub_2_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Shape"
+ op: "Shape"
+ input: "Neg"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Shape_1"
+ op: "Shape"
+ input: "Log"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/mul_grad/Shape"
+ input: "gradients/mul_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/mul"
+ op: "Mul"
+ input: "gradients/sub_2_grad/tuple/control_dependency"
+ input: "Log"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Sum"
+ op: "Sum"
+ input: "gradients/mul_grad/mul"
+ input: "gradients/mul_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/mul_grad/Sum"
+ input: "gradients/mul_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/mul_1"
+ op: "Mul"
+ input: "Neg"
+ input: "gradients/sub_2_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/mul_grad/mul_1"
+ input: "gradients/mul_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/mul_grad/Sum_1"
+ input: "gradients/mul_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/mul_grad/Reshape"
+ input: "^gradients/mul_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/mul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/mul_grad/Reshape"
+ input: "^gradients/mul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/mul_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/mul_grad/Reshape_1"
+ input: "^gradients/mul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/mul_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Shape"
+ op: "Shape"
+ input: "sub"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Shape_1"
+ op: "Shape"
+ input: "Log_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/mul_1_grad/Shape"
+ input: "gradients/mul_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/mul"
+ op: "Mul"
+ input: "gradients/sub_2_grad/tuple/control_dependency_1"
+ input: "Log_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Sum"
+ op: "Sum"
+ input: "gradients/mul_1_grad/mul"
+ input: "gradients/mul_1_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/mul_1_grad/Sum"
+ input: "gradients/mul_1_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/mul_1"
+ op: "Mul"
+ input: "sub"
+ input: "gradients/sub_2_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/mul_1_grad/mul_1"
+ input: "gradients/mul_1_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/mul_1_grad/Sum_1"
+ input: "gradients/mul_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/mul_1_grad/Reshape"
+ input: "^gradients/mul_1_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/mul_1_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/mul_1_grad/Reshape"
+ input: "^gradients/mul_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/mul_1_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/mul_1_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/mul_1_grad/Reshape_1"
+ input: "^gradients/mul_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/mul_1_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Log_grad/Reciprocal"
+ op: "Reciprocal"
+ input: "clip_by_value"
+ input: "^gradients/mul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Log_grad/mul"
+ op: "Mul"
+ input: "gradients/mul_grad/tuple/control_dependency_1"
+ input: "gradients/Log_grad/Reciprocal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Log_1_grad/Reciprocal"
+ op: "Reciprocal"
+ input: "sub_1"
+ input: "^gradients/mul_1_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/Log_1_grad/mul"
+ op: "Mul"
+ input: "gradients/mul_1_grad/tuple/control_dependency_1"
+ input: "gradients/Log_1_grad/Reciprocal"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Shape"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Shape_1"
+ op: "Shape"
+ input: "clip_by_value"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/sub_1_grad/Shape"
+ input: "gradients/sub_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Sum"
+ op: "Sum"
+ input: "gradients/Log_1_grad/mul"
+ input: "gradients/sub_1_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/sub_1_grad/Sum"
+ input: "gradients/sub_1_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/Log_1_grad/mul"
+ input: "gradients/sub_1_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Neg"
+ op: "Neg"
+ input: "gradients/sub_1_grad/Sum_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/sub_1_grad/Neg"
+ input: "gradients/sub_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/sub_1_grad/Reshape"
+ input: "^gradients/sub_1_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/sub_1_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/sub_1_grad/Reshape"
+ input: "^gradients/sub_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/sub_1_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/sub_1_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/sub_1_grad/Reshape_1"
+ input: "^gradients/sub_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/sub_1_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/AddN"
+ op: "AddN"
+ input: "gradients/Log_grad/mul"
+ input: "gradients/sub_1_grad/tuple/control_dependency_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/Log_grad/mul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Shape"
+ op: "Shape"
+ input: "clip_by_value/Minimum"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Shape_2"
+ op: "Shape"
+ input: "gradients/AddN"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/zeros/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/zeros"
+ op: "Fill"
+ input: "gradients/clip_by_value_grad/Shape_2"
+ input: "gradients/clip_by_value_grad/zeros/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/GreaterEqual"
+ op: "GreaterEqual"
+ input: "clip_by_value/Minimum"
+ input: "clip_by_value/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/clip_by_value_grad/Shape"
+ input: "gradients/clip_by_value_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Select"
+ op: "Select"
+ input: "gradients/clip_by_value_grad/GreaterEqual"
+ input: "gradients/AddN"
+ input: "gradients/clip_by_value_grad/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Select_1"
+ op: "Select"
+ input: "gradients/clip_by_value_grad/GreaterEqual"
+ input: "gradients/clip_by_value_grad/zeros"
+ input: "gradients/AddN"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Sum"
+ op: "Sum"
+ input: "gradients/clip_by_value_grad/Select"
+ input: "gradients/clip_by_value_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/clip_by_value_grad/Sum"
+ input: "gradients/clip_by_value_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/clip_by_value_grad/Select_1"
+ input: "gradients/clip_by_value_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/clip_by_value_grad/Sum_1"
+ input: "gradients/clip_by_value_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/clip_by_value_grad/Reshape"
+ input: "^gradients/clip_by_value_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/clip_by_value_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/clip_by_value_grad/Reshape"
+ input: "^gradients/clip_by_value_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/clip_by_value_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/clip_by_value_grad/Reshape_1"
+ input: "^gradients/clip_by_value_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/clip_by_value_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Shape"
+ op: "Shape"
+ input: "y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Shape_2"
+ op: "Shape"
+ input: "gradients/clip_by_value_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/zeros/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.0
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/zeros"
+ op: "Fill"
+ input: "gradients/clip_by_value/Minimum_grad/Shape_2"
+ input: "gradients/clip_by_value/Minimum_grad/zeros/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/LessEqual"
+ op: "LessEqual"
+ input: "y"
+ input: "clip_by_value/Minimum/y"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/clip_by_value/Minimum_grad/Shape"
+ input: "gradients/clip_by_value/Minimum_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Select"
+ op: "Select"
+ input: "gradients/clip_by_value/Minimum_grad/LessEqual"
+ input: "gradients/clip_by_value_grad/tuple/control_dependency"
+ input: "gradients/clip_by_value/Minimum_grad/zeros"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Select_1"
+ op: "Select"
+ input: "gradients/clip_by_value/Minimum_grad/LessEqual"
+ input: "gradients/clip_by_value/Minimum_grad/zeros"
+ input: "gradients/clip_by_value_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Sum"
+ op: "Sum"
+ input: "gradients/clip_by_value/Minimum_grad/Select"
+ input: "gradients/clip_by_value/Minimum_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/clip_by_value/Minimum_grad/Sum"
+ input: "gradients/clip_by_value/Minimum_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/clip_by_value/Minimum_grad/Select_1"
+ input: "gradients/clip_by_value/Minimum_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/clip_by_value/Minimum_grad/Sum_1"
+ input: "gradients/clip_by_value/Minimum_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/clip_by_value/Minimum_grad/Reshape"
+ input: "^gradients/clip_by_value/Minimum_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/clip_by_value/Minimum_grad/Reshape"
+ input: "^gradients/clip_by_value/Minimum_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/clip_by_value/Minimum_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/clip_by_value/Minimum_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/clip_by_value/Minimum_grad/Reshape_1"
+ input: "^gradients/clip_by_value/Minimum_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/clip_by_value/Minimum_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/y_grad/SigmoidGrad"
+ op: "SigmoidGrad"
+ input: "y"
+ input: "gradients/clip_by_value/Minimum_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Shape"
+ op: "Shape"
+ input: "MatMul_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/add_2_grad/Shape"
+ input: "gradients/add_2_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Sum"
+ op: "Sum"
+ input: "gradients/y_grad/SigmoidGrad"
+ input: "gradients/add_2_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/add_2_grad/Sum"
+ input: "gradients/add_2_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/y_grad/SigmoidGrad"
+ input: "gradients/add_2_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/add_2_grad/Sum_1"
+ input: "gradients/add_2_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/add_2_grad/Reshape"
+ input: "^gradients/add_2_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/add_2_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/add_2_grad/Reshape"
+ input: "^gradients/add_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_2_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_2_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/add_2_grad/Reshape_1"
+ input: "^gradients/add_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_2_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_2_grad/MatMul"
+ op: "MatMul"
+ input: "gradients/add_2_grad/tuple/control_dependency"
+ input: "W_final/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_2_grad/MatMul_1"
+ op: "MatMul"
+ input: "hidden_layer_2"
+ input: "gradients/add_2_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_2_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/MatMul_2_grad/MatMul"
+ input: "^gradients/MatMul_2_grad/MatMul_1"
+ }
+ node {
+ name: "gradients/MatMul_2_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/MatMul_2_grad/MatMul"
+ input: "^gradients/MatMul_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_2_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_2_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/MatMul_2_grad/MatMul_1"
+ input: "^gradients/MatMul_2_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_2_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/hidden_layer_2_grad/ReluGrad"
+ op: "ReluGrad"
+ input: "gradients/MatMul_2_grad/tuple/control_dependency"
+ input: "hidden_layer_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Shape"
+ op: "Shape"
+ input: "MatMul_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 128
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/add_1_grad/Shape"
+ input: "gradients/add_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Sum"
+ op: "Sum"
+ input: "gradients/hidden_layer_2_grad/ReluGrad"
+ input: "gradients/add_1_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/add_1_grad/Sum"
+ input: "gradients/add_1_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/hidden_layer_2_grad/ReluGrad"
+ input: "gradients/add_1_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/add_1_grad/Sum_1"
+ input: "gradients/add_1_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/add_1_grad/Reshape"
+ input: "^gradients/add_1_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/add_1_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/add_1_grad/Reshape"
+ input: "^gradients/add_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_1_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_1_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/add_1_grad/Reshape_1"
+ input: "^gradients/add_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_1_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_1_grad/MatMul"
+ op: "MatMul"
+ input: "gradients/add_1_grad/tuple/control_dependency"
+ input: "W_hidden_2/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_1_grad/MatMul_1"
+ op: "MatMul"
+ input: "hidden_layer"
+ input: "gradients/add_1_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_1_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/MatMul_1_grad/MatMul"
+ input: "^gradients/MatMul_1_grad/MatMul_1"
+ }
+ node {
+ name: "gradients/MatMul_1_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/MatMul_1_grad/MatMul"
+ input: "^gradients/MatMul_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_1_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_1_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/MatMul_1_grad/MatMul_1"
+ input: "^gradients/MatMul_1_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_1_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/hidden_layer_grad/ReluGrad"
+ op: "ReluGrad"
+ input: "gradients/MatMul_1_grad/tuple/control_dependency"
+ input: "hidden_layer"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Shape"
+ op: "Shape"
+ input: "MatMul"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 2
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "out_type"
+ value {
+ type: DT_INT32
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Shape_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ int_val: 512
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/BroadcastGradientArgs"
+ op: "BroadcastGradientArgs"
+ input: "gradients/add_grad/Shape"
+ input: "gradients/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ shape {
+ dim {
+ size: -1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Sum"
+ op: "Sum"
+ input: "gradients/hidden_layer_grad/ReluGrad"
+ input: "gradients/add_grad/BroadcastGradientArgs"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Reshape"
+ op: "Reshape"
+ input: "gradients/add_grad/Sum"
+ input: "gradients/add_grad/Shape"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Sum_1"
+ op: "Sum"
+ input: "gradients/hidden_layer_grad/ReluGrad"
+ input: "gradients/add_grad/BroadcastGradientArgs:1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tidx"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "keep_dims"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/Reshape_1"
+ op: "Reshape"
+ input: "gradients/add_grad/Sum_1"
+ input: "gradients/add_grad/Shape_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "Tshape"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/add_grad/Reshape"
+ input: "^gradients/add_grad/Reshape_1"
+ }
+ node {
+ name: "gradients/add_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/add_grad/Reshape"
+ input: "^gradients/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_grad/Reshape"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/add_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/add_grad/Reshape_1"
+ input: "^gradients/add_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/add_grad/Reshape_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_grad/MatMul"
+ op: "MatMul"
+ input: "gradients/add_grad/tuple/control_dependency"
+ input: "W_hidden/read"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 256
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: false
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_grad/MatMul_1"
+ op: "MatMul"
+ input: "input_concat"
+ input: "gradients/add_grad/tuple/control_dependency"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "transpose_a"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "transpose_b"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_grad/tuple/group_deps"
+ op: "NoOp"
+ input: "^gradients/MatMul_grad/MatMul"
+ input: "^gradients/MatMul_grad/MatMul_1"
+ }
+ node {
+ name: "gradients/MatMul_grad/tuple/control_dependency"
+ op: "Identity"
+ input: "gradients/MatMul_grad/MatMul"
+ input: "^gradients/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_grad/MatMul"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 256
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "gradients/MatMul_grad/tuple/control_dependency_1"
+ op: "Identity"
+ input: "gradients/MatMul_grad/MatMul_1"
+ input: "^gradients/MatMul_grad/tuple/group_deps"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@gradients/MatMul_grad/MatMul_1"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_hidden/Adagrad/Assign"
+ op: "Assign"
+ input: "W_hidden/Adagrad"
+ input: "W_hidden/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_hidden/Adagrad/read"
+ op: "Identity"
+ input: "W_hidden/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 512
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_hidden/Adagrad/Assign"
+ op: "Assign"
+ input: "b_hidden/Adagrad"
+ input: "b_hidden/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_hidden/Adagrad/read"
+ op: "Identity"
+ input: "b_hidden/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/Adagrad/Assign"
+ op: "Assign"
+ input: "W_hidden_2/Adagrad"
+ input: "W_hidden_2/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_hidden_2/Adagrad/read"
+ op: "Identity"
+ input: "W_hidden_2/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 128
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/Adagrad/Assign"
+ op: "Assign"
+ input: "b_hidden_2/Adagrad"
+ input: "b_hidden_2/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_hidden_2/Adagrad/read"
+ op: "Identity"
+ input: "b_hidden_2/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "W_final/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "W_final/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "W_final/Adagrad/Assign"
+ op: "Assign"
+ input: "W_final/Adagrad"
+ input: "W_final/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "W_final/Adagrad/read"
+ op: "Identity"
+ input: "W_final/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "b_final/Adagrad/Initializer/Const"
+ op: "Const"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "b_final/Adagrad"
+ op: "VariableV2"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "container"
+ value {
+ s: ""
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "shape"
+ value {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ attr {
+ key: "shared_name"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "b_final/Adagrad/Assign"
+ op: "Assign"
+ input: "b_final/Adagrad"
+ input: "b_final/Adagrad/Initializer/Const"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "b_final/Adagrad/read"
+ op: "Identity"
+ input: "b_final/Adagrad"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Adagrad/learning_rate"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_FLOAT
+ tensor_shape {
+ }
+ float_val: 0.10000000149011612
+ }
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_W_hidden/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "W_hidden"
+ input: "W_hidden/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/MatMul_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_b_hidden/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "b_hidden"
+ input: "b_hidden/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/add_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_W_hidden_2/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "W_hidden_2"
+ input: "W_hidden_2/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/MatMul_1_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_b_hidden_2/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "b_hidden_2"
+ input: "b_hidden_2/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/add_1_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_W_final/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "W_final"
+ input: "W_final/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/MatMul_2_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update_b_final/ApplyAdagrad"
+ op: "ApplyAdagrad"
+ input: "b_final"
+ input: "b_final/Adagrad"
+ input: "Adagrad/learning_rate"
+ input: "gradients/add_2_grad/tuple/control_dependency_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "Adagrad/update"
+ op: "NoOp"
+ input: "^Adagrad/update_W_hidden/ApplyAdagrad"
+ input: "^Adagrad/update_b_hidden/ApplyAdagrad"
+ input: "^Adagrad/update_W_hidden_2/ApplyAdagrad"
+ input: "^Adagrad/update_b_hidden_2/ApplyAdagrad"
+ input: "^Adagrad/update_W_final/ApplyAdagrad"
+ input: "^Adagrad/update_b_final/ApplyAdagrad"
+ }
+ node {
+ name: "Adagrad/value"
+ op: "Const"
+ input: "^Adagrad/update"
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "Adagrad"
+ op: "AssignAdd"
+ input: "global_step"
+ input: "Adagrad/value"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: false
+ }
+ }
+ }
+ node {
+ name: "loss_1/tags"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "loss_1"
+ }
+ }
+ }
+ }
+ node {
+ name: "loss_1"
+ op: "ScalarSummary"
+ input: "loss_1/tags"
+ input: "loss"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "accuracy_1/tags"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "accuracy_1"
+ }
+ }
+ }
+ }
+ node {
+ name: "accuracy_1"
+ op: "ScalarSummary"
+ input: "accuracy_1/tags"
+ input: "accuracy"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Merge/MergeSummary"
+ op: "MergeSummary"
+ input: "loss_1"
+ input: "accuracy_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "Merge_1/MergeSummary"
+ op: "MergeSummary"
+ input: "loss_1"
+ input: "accuracy_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "model"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 13
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 13
+ }
+ }
+ string_val: "W_final"
+ string_val: "W_final/Adagrad"
+ string_val: "W_hidden"
+ string_val: "W_hidden/Adagrad"
+ string_val: "W_hidden_2"
+ string_val: "W_hidden_2/Adagrad"
+ string_val: "b_final"
+ string_val: "b_final/Adagrad"
+ string_val: "b_hidden"
+ string_val: "b_hidden/Adagrad"
+ string_val: "b_hidden_2"
+ string_val: "b_hidden_2/Adagrad"
+ string_val: "global_step"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 13
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 13
+ }
+ }
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/SaveV2"
+ op: "SaveV2"
+ input: "save/Const"
+ input: "save/SaveV2/tensor_names"
+ input: "save/SaveV2/shape_and_slices"
+ input: "W_final"
+ input: "W_final/Adagrad"
+ input: "W_hidden"
+ input: "W_hidden/Adagrad"
+ input: "W_hidden_2"
+ input: "W_hidden_2/Adagrad"
+ input: "b_final"
+ input: "b_final/Adagrad"
+ input: "b_hidden"
+ input: "b_hidden/Adagrad"
+ input: "b_hidden_2"
+ input: "b_hidden_2/Adagrad"
+ input: "global_step"
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_INT32
+ }
+ }
+ }
+ }
+ node {
+ name: "save/control_dependency"
+ op: "Identity"
+ input: "save/Const"
+ input: "^save/SaveV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@save/Const"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_final"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2/tensor_names"
+ input: "save/RestoreV2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign"
+ op: "Assign"
+ input: "W_final"
+ input: "save/RestoreV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_final/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_1"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_1/tensor_names"
+ input: "save/RestoreV2_1/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_1"
+ op: "Assign"
+ input: "W_final/Adagrad"
+ input: "save/RestoreV2_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_2"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_2/tensor_names"
+ input: "save/RestoreV2_2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_2"
+ op: "Assign"
+ input: "W_hidden"
+ input: "save/RestoreV2_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_3"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_3/tensor_names"
+ input: "save/RestoreV2_3/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_3"
+ op: "Assign"
+ input: "W_hidden/Adagrad"
+ input: "save/RestoreV2_3"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden_2"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_4"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_4/tensor_names"
+ input: "save/RestoreV2_4/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_4"
+ op: "Assign"
+ input: "W_hidden_2"
+ input: "save/RestoreV2_4"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden_2/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_5"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_5/tensor_names"
+ input: "save/RestoreV2_5/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_5"
+ op: "Assign"
+ input: "W_hidden_2/Adagrad"
+ input: "save/RestoreV2_5"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_6/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_final"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_6/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_6"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_6/tensor_names"
+ input: "save/RestoreV2_6/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_6"
+ op: "Assign"
+ input: "b_final"
+ input: "save/RestoreV2_6"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_7/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_final/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_7/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_7"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_7/tensor_names"
+ input: "save/RestoreV2_7/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_7"
+ op: "Assign"
+ input: "b_final/Adagrad"
+ input: "save/RestoreV2_7"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_8/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_8/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_8"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_8/tensor_names"
+ input: "save/RestoreV2_8/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_8"
+ op: "Assign"
+ input: "b_hidden"
+ input: "save/RestoreV2_8"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_9/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_9/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_9"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_9/tensor_names"
+ input: "save/RestoreV2_9/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_9"
+ op: "Assign"
+ input: "b_hidden/Adagrad"
+ input: "save/RestoreV2_9"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_10/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden_2"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_10/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_10"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_10/tensor_names"
+ input: "save/RestoreV2_10/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_10"
+ op: "Assign"
+ input: "b_hidden_2"
+ input: "save/RestoreV2_10"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_11/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden_2/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_11/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_11"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_11/tensor_names"
+ input: "save/RestoreV2_11/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_11"
+ op: "Assign"
+ input: "b_hidden_2/Adagrad"
+ input: "save/RestoreV2_11"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_12/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "global_step"
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_12/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save/RestoreV2_12"
+ op: "RestoreV2"
+ input: "save/Const"
+ input: "save/RestoreV2_12/tensor_names"
+ input: "save/RestoreV2_12/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_INT32
+ }
+ }
+ }
+ }
+ node {
+ name: "save/Assign_12"
+ op: "Assign"
+ input: "global_step"
+ input: "save/RestoreV2_12"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save/restore_all"
+ op: "NoOp"
+ input: "^save/Assign"
+ input: "^save/Assign_1"
+ input: "^save/Assign_2"
+ input: "^save/Assign_3"
+ input: "^save/Assign_4"
+ input: "^save/Assign_5"
+ input: "^save/Assign_6"
+ input: "^save/Assign_7"
+ input: "^save/Assign_8"
+ input: "^save/Assign_9"
+ input: "^save/Assign_10"
+ input: "^save/Assign_11"
+ input: "^save/Assign_12"
+ }
+ node {
+ name: "init"
+ op: "NoOp"
+ input: "^W_hidden/Assign"
+ input: "^b_hidden/Assign"
+ input: "^W_hidden_2/Assign"
+ input: "^b_hidden_2/Assign"
+ input: "^W_final/Assign"
+ input: "^b_final/Assign"
+ input: "^global_step/Assign"
+ input: "^W_hidden/Adagrad/Assign"
+ input: "^b_hidden/Adagrad/Assign"
+ input: "^W_hidden_2/Adagrad/Assign"
+ input: "^b_hidden_2/Adagrad/Assign"
+ input: "^W_final/Adagrad/Assign"
+ input: "^b_final/Adagrad/Assign"
+ }
+ node {
+ name: "save_1/Const"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "model"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/StringJoin/inputs_1"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ }
+ string_val: "_temp_5848b591c8704c928f801621ecceb1c5/part"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/StringJoin"
+ op: "StringJoin"
+ input: "save_1/Const"
+ input: "save_1/StringJoin/inputs_1"
+ attr {
+ key: "N"
+ value {
+ i: 2
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "separator"
+ value {
+ s: ""
+ }
+ }
+ }
+ node {
+ name: "save_1/num_shards"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 1
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/ShardedFilename/shard"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_INT32
+ tensor_shape {
+ }
+ int_val: 0
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/ShardedFilename"
+ op: "ShardedFilename"
+ input: "save_1/StringJoin"
+ input: "save_1/ShardedFilename/shard"
+ input: "save_1/num_shards"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/SaveV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 13
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 13
+ }
+ }
+ string_val: "W_final"
+ string_val: "W_final/Adagrad"
+ string_val: "W_hidden"
+ string_val: "W_hidden/Adagrad"
+ string_val: "W_hidden_2"
+ string_val: "W_hidden_2/Adagrad"
+ string_val: "b_final"
+ string_val: "b_final/Adagrad"
+ string_val: "b_hidden"
+ string_val: "b_hidden/Adagrad"
+ string_val: "b_hidden_2"
+ string_val: "b_hidden_2/Adagrad"
+ string_val: "global_step"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/SaveV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 13
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 13
+ }
+ }
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/SaveV2"
+ op: "SaveV2"
+ input: "save_1/ShardedFilename"
+ input: "save_1/SaveV2/tensor_names"
+ input: "save_1/SaveV2/shape_and_slices"
+ input: "W_final"
+ input: "W_final/Adagrad"
+ input: "W_hidden"
+ input: "W_hidden/Adagrad"
+ input: "W_hidden_2"
+ input: "W_hidden_2/Adagrad"
+ input: "b_final"
+ input: "b_final/Adagrad"
+ input: "b_hidden"
+ input: "b_hidden/Adagrad"
+ input: "b_hidden_2"
+ input: "b_hidden_2/Adagrad"
+ input: "global_step"
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_FLOAT
+ type: DT_INT32
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/control_dependency"
+ op: "Identity"
+ input: "save_1/ShardedFilename"
+ input: "^save_1/SaveV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@save_1/ShardedFilename"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/MergeV2Checkpoints/checkpoint_prefixes"
+ op: "Pack"
+ input: "save_1/ShardedFilename"
+ input: "^save_1/control_dependency"
+ attr {
+ key: "N"
+ value {
+ i: 1
+ }
+ }
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "axis"
+ value {
+ i: 0
+ }
+ }
+ }
+ node {
+ name: "save_1/MergeV2Checkpoints"
+ op: "MergeV2Checkpoints"
+ input: "save_1/MergeV2Checkpoints/checkpoint_prefixes"
+ input: "save_1/Const"
+ attr {
+ key: "delete_old_dirs"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/Identity"
+ op: "Identity"
+ input: "save_1/Const"
+ input: "^save_1/control_dependency"
+ input: "^save_1/MergeV2Checkpoints"
+ attr {
+ key: "T"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_final"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2/tensor_names"
+ input: "save_1/RestoreV2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign"
+ op: "Assign"
+ input: "W_final"
+ input: "save_1/RestoreV2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_1/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_final/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_1/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_1"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_1/tensor_names"
+ input: "save_1/RestoreV2_1/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_1"
+ op: "Assign"
+ input: "W_final/Adagrad"
+ input: "save_1/RestoreV2_1"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_2/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_2/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_2"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_2/tensor_names"
+ input: "save_1/RestoreV2_2/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_2"
+ op: "Assign"
+ input: "W_hidden"
+ input: "save_1/RestoreV2_2"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_3/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_3/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_3"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_3/tensor_names"
+ input: "save_1/RestoreV2_3/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_3"
+ op: "Assign"
+ input: "W_hidden/Adagrad"
+ input: "save_1/RestoreV2_3"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 256
+ }
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_4/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden_2"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_4/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_4"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_4/tensor_names"
+ input: "save_1/RestoreV2_4/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_4"
+ op: "Assign"
+ input: "W_hidden_2"
+ input: "save_1/RestoreV2_4"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_5/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "W_hidden_2/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_5/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_5"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_5/tensor_names"
+ input: "save_1/RestoreV2_5/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_5"
+ op: "Assign"
+ input: "W_hidden_2/Adagrad"
+ input: "save_1/RestoreV2_5"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@W_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_6/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_final"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_6/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_6"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_6/tensor_names"
+ input: "save_1/RestoreV2_6/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_6"
+ op: "Assign"
+ input: "b_final"
+ input: "save_1/RestoreV2_6"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_7/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_final/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_7/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_7"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_7/tensor_names"
+ input: "save_1/RestoreV2_7/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_7"
+ op: "Assign"
+ input: "b_final/Adagrad"
+ input: "save_1/RestoreV2_7"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_final"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_8/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_8/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_8"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_8/tensor_names"
+ input: "save_1/RestoreV2_8/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_8"
+ op: "Assign"
+ input: "b_hidden"
+ input: "save_1/RestoreV2_8"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_9/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_9/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_9"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_9/tensor_names"
+ input: "save_1/RestoreV2_9/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_9"
+ op: "Assign"
+ input: "b_hidden/Adagrad"
+ input: "save_1/RestoreV2_9"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 512
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_10/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden_2"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_10/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_10"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_10/tensor_names"
+ input: "save_1/RestoreV2_10/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_10"
+ op: "Assign"
+ input: "b_hidden_2"
+ input: "save_1/RestoreV2_10"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_11/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "b_hidden_2/Adagrad"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_11/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_11"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_11/tensor_names"
+ input: "save_1/RestoreV2_11/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_FLOAT
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_11"
+ op: "Assign"
+ input: "b_hidden_2/Adagrad"
+ input: "save_1/RestoreV2_11"
+ attr {
+ key: "T"
+ value {
+ type: DT_FLOAT
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@b_hidden_2"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_12/tensor_names"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: "global_step"
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_12/shape_and_slices"
+ op: "Const"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtype"
+ value {
+ type: DT_STRING
+ }
+ }
+ attr {
+ key: "value"
+ value {
+ tensor {
+ dtype: DT_STRING
+ tensor_shape {
+ dim {
+ size: 1
+ }
+ }
+ string_val: ""
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/RestoreV2_12"
+ op: "RestoreV2"
+ input: "save_1/Const"
+ input: "save_1/RestoreV2_12/tensor_names"
+ input: "save_1/RestoreV2_12/shape_and_slices"
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ unknown_rank: true
+ }
+ }
+ }
+ }
+ attr {
+ key: "dtypes"
+ value {
+ list {
+ type: DT_INT32
+ }
+ }
+ }
+ }
+ node {
+ name: "save_1/Assign_12"
+ op: "Assign"
+ input: "global_step"
+ input: "save_1/RestoreV2_12"
+ attr {
+ key: "T"
+ value {
+ type: DT_INT32
+ }
+ }
+ attr {
+ key: "_class"
+ value {
+ list {
+ s: "loc:@global_step"
+ }
+ }
+ }
+ attr {
+ key: "_output_shapes"
+ value {
+ list {
+ shape {
+ }
+ }
+ }
+ }
+ attr {
+ key: "use_locking"
+ value {
+ b: true
+ }
+ }
+ attr {
+ key: "validate_shape"
+ value {
+ b: true
+ }
+ }
+ }
+ node {
+ name: "save_1/restore_shard"
+ op: "NoOp"
+ input: "^save_1/Assign"
+ input: "^save_1/Assign_1"
+ input: "^save_1/Assign_2"
+ input: "^save_1/Assign_3"
+ input: "^save_1/Assign_4"
+ input: "^save_1/Assign_5"
+ input: "^save_1/Assign_6"
+ input: "^save_1/Assign_7"
+ input: "^save_1/Assign_8"
+ input: "^save_1/Assign_9"
+ input: "^save_1/Assign_10"
+ input: "^save_1/Assign_11"
+ input: "^save_1/Assign_12"
+ }
+ node {
+ name: "save_1/restore_all"
+ op: "NoOp"
+ input: "^save_1/restore_shard"
+ }
+ versions {
+ producer: 24
+ }
+ }
+ saver_def {
+ filename_tensor_name: "save_1/Const:0"
+ save_tensor_name: "save_1/Identity:0"
+ restore_op_name: "save_1/restore_all"
+ max_to_keep: 5
+ sharded: true
+ keep_checkpoint_every_n_hours: 10000.0
+ version: V2
+ }
+ collection_def {
+ key: "summaries"
+ value {
+ node_list {
+ value: "loss_1:0"
+ value: "accuracy_1:0"
+ }
+ }
+ }
+ collection_def {
+ key: "train_op"
+ value {
+ node_list {
+ value: "Adagrad"
+ }
+ }
+ }
+ collection_def {
+ key: "trainable_variables"
+ value {
+ bytes_list {
+ value: "\n\nW_hidden:0\022\017W_hidden/Assign\032\017W_hidden/read:02\022truncated_normal:0"
+ value: "\n\nb_hidden:0\022\017b_hidden/Assign\032\017b_hidden/read:02\007Const:0"
+ value: "\n\014W_hidden_2:0\022\021W_hidden_2/Assign\032\021W_hidden_2/read:02\024truncated_normal_1:0"
+ value: "\n\014b_hidden_2:0\022\021b_hidden_2/Assign\032\021b_hidden_2/read:02\tConst_1:0"
+ value: "\n\tW_final:0\022\016W_final/Assign\032\016W_final/read:02\020random_uniform:0"
+ value: "\n\tb_final:0\022\016b_final/Assign\032\016b_final/read:02\007zeros:0"
+ }
+ }
+ }
+ collection_def {
+ key: "variables"
+ value {
+ bytes_list {
+ value: "\n\nW_hidden:0\022\017W_hidden/Assign\032\017W_hidden/read:02\022truncated_normal:0"
+ value: "\n\nb_hidden:0\022\017b_hidden/Assign\032\017b_hidden/read:02\007Const:0"
+ value: "\n\014W_hidden_2:0\022\021W_hidden_2/Assign\032\021W_hidden_2/read:02\024truncated_normal_1:0"
+ value: "\n\014b_hidden_2:0\022\021b_hidden_2/Assign\032\021b_hidden_2/read:02\tConst_1:0"
+ value: "\n\tW_final:0\022\016W_final/Assign\032\016W_final/read:02\020random_uniform:0"
+ value: "\n\tb_final:0\022\016b_final/Assign\032\016b_final/read:02\007zeros:0"
+ value: "\n\rglobal_step:0\022\022global_step/Assign\032\022global_step/read:02\033global_step/initial_value:0"
+ value: "\n\022W_hidden/Adagrad:0\022\027W_hidden/Adagrad/Assign\032\027W_hidden/Adagrad/read:02$W_hidden/Adagrad/Initializer/Const:0"
+ value: "\n\022b_hidden/Adagrad:0\022\027b_hidden/Adagrad/Assign\032\027b_hidden/Adagrad/read:02$b_hidden/Adagrad/Initializer/Const:0"
+ value: "\n\024W_hidden_2/Adagrad:0\022\031W_hidden_2/Adagrad/Assign\032\031W_hidden_2/Adagrad/read:02&W_hidden_2/Adagrad/Initializer/Const:0"
+ value: "\n\024b_hidden_2/Adagrad:0\022\031b_hidden_2/Adagrad/Assign\032\031b_hidden_2/Adagrad/read:02&b_hidden_2/Adagrad/Initializer/Const:0"
+ value: "\n\021W_final/Adagrad:0\022\026W_final/Adagrad/Assign\032\026W_final/Adagrad/read:02#W_final/Adagrad/Initializer/Const:0"
+ value: "\n\021b_final/Adagrad:0\022\026b_final/Adagrad/Assign\032\026b_final/Adagrad/read:02#b_final/Adagrad/Initializer/Const:0"
+ }
+ }
+ }
+ signature_def {
+ key: "serving_default"
+ value {
+ inputs {
+ key: "input_d"
+ value {
+ name: "input_d:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ inputs {
+ key: "input_u"
+ value {
+ name: "input_u:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 128
+ }
+ }
+ }
+ }
+ outputs {
+ key: "y"
+ value {
+ name: "y:0"
+ dtype: DT_FLOAT
+ tensor_shape {
+ dim {
+ size: -1
+ }
+ dim {
+ size: 1
+ }
+ }
+ }
+ }
+ method_name: "tensorflow/serving/predict"
+ }
+ }
+}
diff --git a/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.data-00000-of-00001 b/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.data-00000-of-00001
new file mode 100644
index 00000000000..1efd102aef9
--- /dev/null
+++ b/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.data-00000-of-00001
Binary files differ
diff --git a/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.index b/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.index
new file mode 100644
index 00000000000..56c60dbe529
--- /dev/null
+++ b/searchlib/src/test/files/integration/tensorflow/blog/saved/variables/variables.index
Binary files differ
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/aggregation/GroupingSerializationTest.java b/searchlib/src/test/java/com/yahoo/searchlib/aggregation/GroupingSerializationTest.java
index 118eba2cd96..969bc318391 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/aggregation/GroupingSerializationTest.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/aggregation/GroupingSerializationTest.java
@@ -15,6 +15,7 @@ import org.junit.Test;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import static org.junit.Assert.fail;
@@ -40,7 +41,8 @@ public class GroupingSerializationTest {
t.assertMatch(new FloatResultNode(7.3));
t.assertMatch(new StringResultNode("7.3"));
t.assertMatch(new StringResultNode(
- new String(new byte[]{(byte)0xe5, (byte)0xa6, (byte)0x82, (byte)0xe6, (byte)0x9e, (byte)0x9c})));
+ new String(new byte[]{(byte)0xe5, (byte)0xa6, (byte)0x82, (byte)0xe6, (byte)0x9e, (byte)0x9c},
+ StandardCharsets.UTF_8)));
t.assertMatch(new RawResultNode(new byte[]{'7', '.', '4'}));
t.assertMatch(new IntegerBucketResultNode());
t.assertMatch(new FloatBucketResultNode());
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizerTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizerTestCase.java
new file mode 100644
index 00000000000..f29083bddc9
--- /dev/null
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/tensoroptimization/TensorOptimizerTestCase.java
@@ -0,0 +1,116 @@
+package com.yahoo.searchlib.rankingexpression.evaluation.tensoroptimization;
+
+import com.yahoo.searchlib.rankingexpression.RankingExpression;
+import com.yahoo.searchlib.rankingexpression.evaluation.ArrayContext;
+import com.yahoo.searchlib.rankingexpression.evaluation.ExpressionOptimizer;
+import com.yahoo.searchlib.rankingexpression.evaluation.OptimizationReport;
+import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
+import com.yahoo.searchlib.rankingexpression.parser.ParseException;
+import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
+import com.yahoo.tensor.functions.Reduce;
+import com.yahoo.tensor.functions.ReduceJoin;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author lesters
+ */
+public class TensorOptimizerTestCase {
+
+ @Test
+ public void testReduceJoinOptimization() throws ParseException {
+ assertWillOptimize("d0[3]", "d0[3]");
+ assertWillOptimize("d0[1]", "d0[1]", "d0");
+ assertWillOptimize("d0[2]", "d0[2]", "d0");
+ assertWillOptimize("d0[1]", "d0[3]", "d0");
+ assertWillOptimize("d0[3]", "d0[3]", "d0");
+ assertWillOptimize("d0[3]", "d0[3],d1[2]", "d0");
+ assertWillOptimize("d0[3],d1[2]", "d0[3]", "d0");
+ assertWillOptimize("d1[3]", "d0[2],d1[3]", "d1");
+ assertWillOptimize("d0[2],d1[3]", "d1[3]", "d1");
+ assertWillOptimize("d0[2],d2[2]", "d1[3],d2[2]", "d2");
+ assertWillOptimize("d1[2],d2[2]", "d0[3],d2[2]", "d2");
+ assertWillOptimize("d0[1],d2[2]", "d1[3],d2[4]", "d2");
+ assertWillOptimize("d0[2],d2[2]", "d1[3],d2[4]", "d2");
+ assertWillOptimize("d0[1],d1[2]", "d0[2],d1[3]");
+ assertWillOptimize("d0[1],d1[2]", "d0[2],d1[3]", "d0,d1");
+ assertWillOptimize("d2[3],d3[4]", "d1[2],d2[3],d3[4]", "d2,d3");
+ assertWillOptimize("d0[1],d2[3],d3[4]", "d1[2],d2[3],d3[4]", "d2,d3");
+ assertWillOptimize("d0[1],d1[2],d2[3]", "d2[3],d3[4],d4[5]", "d2");
+ assertWillOptimize("d0[1],d1[2],d2[3]", "d1[2],d2[3],d4[4]", "d1,d2");
+ assertWillOptimize("d0[1],d1[2],d2[3]", "d0[1],d1[2],d2[3]");
+ assertWillOptimize("d0[1],d1[2],d2[3]", "d0[1],d1[2],d2[3]", "d0,d1,d2");
+
+ // Will not currently use reduce-join optimization
+ assertCantOptimize("d0[2],d1[3]", "d1[3]", "d0"); // reducing on a dimension not joining on
+ assertCantOptimize("d0[1],d1[2]", "d1[2],d2[3]", "d2"); // same
+ assertCantOptimize("d0[3]", "d0[3],d1[2]"); // reducing on more then we are combining
+ assertCantOptimize("d0[1],d2[3]", "d1[2],d2[3]"); // same
+ assertCantOptimize("d0[1],d1[2],d2[3]", "d0[1],d1[2],d2[3]", "d1,d2"); // reducing on less then joining on
+ }
+
+ private void assertWillOptimize(String aType, String bType) throws ParseException {
+ assertWillOptimize(aType, bType, "", "sum");
+ }
+
+ private void assertWillOptimize(String aType, String bType, String reduceDim) throws ParseException {
+ assertWillOptimize(aType, bType, reduceDim, "sum");
+ }
+
+ private void assertWillOptimize(String aType, String bType, String reduceDim, String aggregator) throws ParseException {
+ assertReduceJoin(aType, bType, reduceDim, aggregator, true);
+ }
+
+ private void assertCantOptimize(String aType, String bType) throws ParseException {
+ assertCantOptimize(aType, bType, "", "sum");
+ }
+
+ private void assertCantOptimize(String aType, String bType, String reduceDim) throws ParseException {
+ assertCantOptimize(aType, bType, reduceDim, "sum");
+ }
+
+ private void assertCantOptimize(String aType, String bType, String reduceDim, String aggregator) throws ParseException {
+ assertReduceJoin(aType, bType, reduceDim, aggregator, false);
+ }
+
+ private void assertReduceJoin(String aType, String bType, String reduceDim, String aggregator, boolean assertOptimize) throws ParseException {
+ Tensor a = generateRandomTensor(aType);
+ Tensor b = generateRandomTensor(bType);
+ RankingExpression expression = generateRankingExpression(reduceDim, aggregator);
+ assert ((TensorFunctionNode)expression.getRoot()).function() instanceof Reduce;
+
+ ArrayContext context = generateContext(a, b, expression);
+ Tensor result = expression.evaluate(context).asTensor();
+
+ ExpressionOptimizer optimizer = new ExpressionOptimizer();
+ OptimizationReport report = optimizer.optimize(expression, context);
+ assertEquals(1, report.getMetric("Replaced reduce->join"));
+ assert ((TensorFunctionNode)expression.getRoot()).function() instanceof ReduceJoin;
+
+ assertEquals(result, expression.evaluate(context).asTensor());
+ assertEquals(assertOptimize, ((ReduceJoin)((TensorFunctionNode)expression.getRoot()).function()).canOptimize(a, b));
+ }
+
+ private RankingExpression generateRankingExpression(String reduceDim, String aggregator) throws ParseException {
+ String dimensions = "";
+ if (reduceDim.length() > 0) {
+ dimensions = ", " + reduceDim;
+ }
+ return new RankingExpression("reduce(join(a, b, f(a,b)(a * b)), " + aggregator + dimensions + ")");
+ }
+
+ private ArrayContext generateContext(Tensor a, Tensor b, RankingExpression expression) {
+ ArrayContext context = new ArrayContext(expression);
+ context.put("a", new TensorValue(a));
+ context.put("b", new TensorValue(b));
+ return context;
+ }
+
+ private Tensor generateRandomTensor(String type) {
+ return Tensor.random(TensorType.fromSpec("tensor(" + type + ")"));
+ }
+
+}
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BatchNormImportTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BatchNormImportTestCase.java
index bf9684082f4..593e7b54c10 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BatchNormImportTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BatchNormImportTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import org.junit.Test;
@@ -20,10 +21,11 @@ public class BatchNormImportTestCase {
assertEquals("Has skipped outputs",
0, model.get().signature("serving_default").skippedOutputs().size());
- RankingExpression output = signature.outputExpression("y");
+ ExpressionFunction output = signature.outputExpression("y");
assertNotNull(output);
- assertEquals("dnn/batch_normalization_3/batchnorm/add_1", output.getName());
- model.assertEqualResult("X", output.getName());
+ assertEquals("dnn/batch_normalization_3/batchnorm/add_1", output.getBody().getName());
+ model.assertEqualResult("X", output.getBody().getName());
+ assertEquals("{x=tensor(d0[],d1[784])}", output.argumentTypes().toString());
}
}
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BlogEvaluationBenchmark.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BlogEvaluationBenchmark.java
new file mode 100644
index 00000000000..07634166060
--- /dev/null
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/BlogEvaluationBenchmark.java
@@ -0,0 +1,117 @@
+package com.yahoo.searchlib.rankingexpression.integration.ml;
+
+import com.yahoo.searchlib.rankingexpression.RankingExpression;
+import com.yahoo.searchlib.rankingexpression.evaluation.Context;
+import com.yahoo.searchlib.rankingexpression.evaluation.ContextIndex;
+import com.yahoo.searchlib.rankingexpression.evaluation.ExpressionOptimizer;
+import com.yahoo.searchlib.rankingexpression.evaluation.OptimizationReport;
+import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
+import com.yahoo.searchlib.rankingexpression.integration.ml.importer.tensorflow.TensorConverter;
+import com.yahoo.searchlib.rankingexpression.parser.ParseException;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
+import org.tensorflow.SavedModelBundle;
+import org.tensorflow.Session;
+
+import java.nio.FloatBuffer;
+import java.util.List;
+
+import static com.yahoo.searchlib.rankingexpression.integration.ml.TestableTensorFlowModel.contextFrom;
+
+/**
+ * Microbenchmark of imported ML model evaluation.
+ *
+ * @author lesters
+ */
+public class BlogEvaluationBenchmark {
+
+ static final String modelDir = "src/test/files/integration/tensorflow/blog/saved";
+
+ public static void main(String[] args) throws ParseException {
+ SavedModelBundle tensorFlowModel = SavedModelBundle.load(modelDir, "serve");
+ ImportedModel model = new TensorFlowImporter().importModel("blog", modelDir, tensorFlowModel);
+
+ Context context = contextFrom(model);
+ Tensor u = generateInputTensor();
+ Tensor d = generateInputTensor();
+ context.put("input_u", new TensorValue(u));
+ context.put("input_d", new TensorValue(d));
+
+ // Parse the ranking expression from imported string to force primitive tensor functions.
+ RankingExpression expression = new RankingExpression(model.expressions().get("y").getRoot().toString());
+ benchmarkJava(expression, context, 20, 200);
+
+ System.out.println("*** Optimizing expression ***");
+ ExpressionOptimizer optimizer = new ExpressionOptimizer();
+ OptimizationReport report = optimizer.optimize(expression, (ContextIndex)context);
+ System.out.println(report.toString());
+
+ benchmarkJava(expression, context, 2000, 20000);
+ benchmarkTensorFlow(tensorFlowModel, 2000, 20000);
+ }
+
+ private static void benchmarkJava(RankingExpression expression, Context context, int warmup, int iterations) {
+ System.out.println("*** Java evaluation - warmup ***");
+ evaluate(expression, context, warmup);
+ System.gc();
+ System.out.println("*** Java evaluation - " + iterations + " iterations ***");
+ double startTime = System.nanoTime();
+ evaluate(expression, context, iterations);
+ double endTime = System.nanoTime();
+ System.out.println("Model evaluation time is " + ((endTime-startTime) / (1000*1000)) + " ms");
+ System.out.println("Average model evaluation time is " + ((endTime-startTime) / (1000*1000)) / iterations + " ms");
+ }
+
+ private static double evaluate(RankingExpression expression, Context context, int iterations) {
+ double result = 0;
+ for (int i = 0 ; i < iterations; i++) {
+ result = expression.evaluate(context).asTensor().sum().asDouble();
+ }
+ return result;
+ }
+
+ private static Tensor generateInputTensor() {
+ Tensor.Builder b = Tensor.Builder.of(new TensorType.Builder().indexed("d0", 1).indexed("d1", 128).build());
+ for (int d0 = 0; d0 < 1; d0++)
+ for (int d1 = 0; d1 < 128; d1++)
+ b.cell(d1 * 1.0 / 128, d0, d1);
+ return b.build();
+ }
+
+ private static void benchmarkTensorFlow(SavedModelBundle tensorFlowModel, int warmup, int iterations) {
+ org.tensorflow.Tensor<?> u = generateInputTensorFlow();
+ org.tensorflow.Tensor<?> d = generateInputTensorFlow();
+
+ System.out.println("*** TensorFlow evaluation - warmup ***");
+ evaluateTensorflow(tensorFlowModel, u, d, warmup);
+
+ System.gc();
+ System.out.println("*** TensorFlow evaluation - " + iterations + " iterations ***");
+ double startTime = System.nanoTime();
+ evaluateTensorflow(tensorFlowModel, u, d, iterations);
+ double endTime = System.nanoTime();
+ System.out.println("Model evaluation time is " + ((endTime-startTime) / (1000*1000) + " ms"));
+ System.out.println("Average model evaluation time is " + ((endTime-startTime) / (1000*1000)) / iterations + " ms");
+ }
+
+ private static double evaluateTensorflow(SavedModelBundle tensorFlowModel, org.tensorflow.Tensor<?> u, org.tensorflow.Tensor<?> d, int iterations) {
+ double result = 0;
+ for (int i = 0 ; i < iterations; i++) {
+ Session.Runner runner = tensorFlowModel.session().runner();
+ runner.feed("input_u", u);
+ runner.feed("input_d", d);
+ List<org.tensorflow.Tensor<?>> results = runner.fetch("y").run();
+ result = TensorConverter.toVespaTensor(results.get(0)).sum().asDouble();
+ }
+ return result;
+ }
+
+ private static org.tensorflow.Tensor<?> generateInputTensorFlow() {
+ FloatBuffer fb = FloatBuffer.allocate(1 * 128);
+ for (int i = 0; i < 128; ++i) {
+ fb.put(i, (float)(i * 1.0 / 128));
+ }
+ return org.tensorflow.Tensor.create(new long[]{ 1, 128 }, fb);
+ }
+
+}
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/DropoutImportTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/DropoutImportTestCase.java
index a8f7542f3a4..59712c0152f 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/DropoutImportTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/DropoutImportTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.tensor.TensorType;
import org.junit.Test;
@@ -19,22 +20,23 @@ public class DropoutImportTestCase {
TestableTensorFlowModel model = new TestableTensorFlowModel("test", "src/test/files/integration/tensorflow/dropout/saved");
// Check required functions
- assertEquals(1, model.get().requiredFunctions().size());
- assertTrue(model.get().requiredFunctions().containsKey("X"));
+ assertEquals(1, model.get().inputs().size());
+ assertTrue(model.get().inputs().containsKey("X"));
assertEquals(new TensorType.Builder().indexed("d0").indexed("d1", 784).build(),
- model.get().requiredFunctions().get("X"));
+ model.get().inputs().get("X"));
ImportedModel.Signature signature = model.get().signature("serving_default");
assertEquals("Has skipped outputs",
0, model.get().signature("serving_default").skippedOutputs().size());
- RankingExpression output = signature.outputExpression("y");
+ ExpressionFunction output = signature.outputExpression("y");
assertNotNull(output);
- assertEquals("outputs/Maximum", output.getName());
+ assertEquals("outputs/Maximum", output.getBody().getName());
assertEquals("join(join(imported_ml_function_test_outputs_BiasAdd, reduce(constant(test_outputs_Const), sum, d1), f(a,b)(a * b)), imported_ml_function_test_outputs_BiasAdd, f(a,b)(max(a,b)))",
- output.getRoot().toString());
- model.assertEqualResult("X", output.getName());
+ output.getBody().getRoot().toString());
+ model.assertEqualResult("X", output.getBody().getName());
+ assertEquals("{x=tensor(d0[],d1[784])}", output.argumentTypes().toString());
}
}
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/MnistImportTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/MnistImportTestCase.java
index add66eece1a..3d8d5d5a570 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/MnistImportTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/MnistImportTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import org.junit.Test;
@@ -20,11 +21,10 @@ public class MnistImportTestCase {
assertEquals("Has skipped outputs",
0, model.get().signature("serving_default").skippedOutputs().size());
- RankingExpression output = signature.outputExpression("y");
+ ExpressionFunction output = signature.outputExpression("y");
assertNotNull(output);
- assertEquals("dnn/outputs/add", output.getName());
- model.assertEqualResultSum("input", output.getName(), 0.00001);
+ assertEquals("dnn/outputs/add", output.getBody().getName());
+ model.assertEqualResultSum("input", output.getBody().getName(), 0.00001);
}
-
}
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxMnistSoftmaxImportTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxMnistSoftmaxImportTestCase.java
index e20ac16a691..b6e83404ab1 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxMnistSoftmaxImportTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/OnnxMnistSoftmaxImportTestCase.java
@@ -1,5 +1,6 @@
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.evaluation.Context;
import com.yahoo.searchlib.rankingexpression.evaluation.MapContext;
@@ -27,27 +28,28 @@ public class OnnxMnistSoftmaxImportTestCase {
Tensor constant0 = model.largeConstants().get("test_Variable");
assertNotNull(constant0);
assertEquals(new TensorType.Builder().indexed("d2", 784).indexed("d1", 10).build(),
- constant0.type());
+ constant0.type());
assertEquals(7840, constant0.size());
Tensor constant1 = model.largeConstants().get("test_Variable_1");
assertNotNull(constant1);
- assertEquals(new TensorType.Builder().indexed("d1", 10).build(),
- constant1.type());
+ assertEquals(new TensorType.Builder().indexed("d1", 10).build(), constant1.type());
assertEquals(10, constant1.size());
- // Check required functions (inputs)
- assertEquals(1, model.requiredFunctions().size());
- assertTrue(model.requiredFunctions().containsKey("Placeholder"));
- assertEquals(new TensorType.Builder().indexed("d0").indexed("d1", 784).build(),
- model.requiredFunctions().get("Placeholder"));
+ // Check inputs
+ assertEquals(1, model.inputs().size());
+ assertTrue(model.inputs().containsKey("Placeholder"));
+ assertEquals(TensorType.fromSpec("tensor(d0[],d1[784])"), model.inputs().get("Placeholder"));
- // Check outputs
- RankingExpression output = model.defaultSignature().outputExpression("add");
+ // Check signature
+ ExpressionFunction output = model.defaultSignature().outputExpression("add");
assertNotNull(output);
- assertEquals("add", output.getName());
+ assertEquals("add", output.getBody().getName());
assertEquals("join(reduce(join(rename(Placeholder, (d0, d1), (d0, d2)), constant(test_Variable), f(a,b)(a * b)), sum, d2), constant(test_Variable_1), f(a,b)(a + b))",
- output.getRoot().toString());
+ output.getBody().getRoot().toString());
+ assertEquals(TensorType.fromSpec("tensor(d0[],d1[784])"),
+ model.inputs().get(model.defaultSignature().inputs().get("Placeholder")));
+ assertEquals("{Placeholder=tensor(d0[],d1[784])}", output.argumentTypes().toString());
}
@Test
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TensorFlowMnistSoftmaxImportTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TensorFlowMnistSoftmaxImportTestCase.java
index ef28eb4678f..0a48ecfce21 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TensorFlowMnistSoftmaxImportTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TensorFlowMnistSoftmaxImportTestCase.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchlib.rankingexpression.integration.ml;
+import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
@@ -38,10 +39,10 @@ public class TensorFlowMnistSoftmaxImportTestCase {
assertEquals(0, model.get().functions().size());
// Check required functions
- assertEquals(1, model.get().requiredFunctions().size());
- assertTrue(model.get().requiredFunctions().containsKey("Placeholder"));
+ assertEquals(1, model.get().inputs().size());
+ assertTrue(model.get().inputs().containsKey("Placeholder"));
assertEquals(new TensorType.Builder().indexed("d0").indexed("d1", 784).build(),
- model.get().requiredFunctions().get("Placeholder"));
+ model.get().inputs().get("Placeholder"));
// Check signatures
assertEquals(1, model.get().signatures().size());
@@ -56,11 +57,12 @@ public class TensorFlowMnistSoftmaxImportTestCase {
// ... signature outputs
assertEquals(1, signature.outputs().size());
- RankingExpression output = signature.outputExpression("y");
+ ExpressionFunction output = signature.outputExpression("y");
assertNotNull(output);
- assertEquals("add", output.getName());
+ assertEquals("add", output.getBody().getName());
assertEquals("join(reduce(join(rename(Placeholder, (d0, d1), (d0, d2)), constant(test_Variable_read), f(a,b)(a * b)), sum, d2), constant(test_Variable_1_read), f(a,b)(a + b))",
- output.getRoot().toString());
+ output.getBody().getRoot().toString());
+ assertEquals("{x=tensor(d0[],d1[784])}", output.argumentTypes().toString());
// Test execution
model.assertEqualResult("Placeholder", "MatMul");
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TestableTensorFlowModel.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TestableTensorFlowModel.java
index 5447e5240f7..fbe7c5fac63 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TestableTensorFlowModel.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/integration/ml/TestableTensorFlowModel.java
@@ -3,6 +3,8 @@ package com.yahoo.searchlib.rankingexpression.integration.ml;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.evaluation.Context;
+import com.yahoo.searchlib.rankingexpression.evaluation.ContextIndex;
+import com.yahoo.searchlib.rankingexpression.evaluation.ExpressionOptimizer;
import com.yahoo.searchlib.rankingexpression.evaluation.MapContext;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
import com.yahoo.searchlib.rankingexpression.integration.ml.importer.tensorflow.TensorConverter;
@@ -50,7 +52,11 @@ public class TestableTensorFlowModel {
model.functions().forEach((k, v) -> evaluateFunction(context, model, k));
- Tensor vespaResult = model.expressions().get(operationName).evaluate(context).asTensor();
+ RankingExpression expression = model.expressions().get(operationName);
+ ExpressionOptimizer optimizer = new ExpressionOptimizer();
+ optimizer.optimize(expression, (ContextIndex)context);
+
+ Tensor vespaResult = expression.evaluate(context).asTensor();
assertEquals("Operation '" + operationName + "' produces equal results",
tfResult.sum().asDouble(), vespaResult.sum().asDouble(), delta);
}
@@ -64,7 +70,11 @@ public class TestableTensorFlowModel {
model.functions().forEach((k, v) -> evaluateFunction(context, model, k));
- Tensor vespaResult = model.expressions().get(operationName).evaluate(context).asTensor();
+ RankingExpression expression = model.expressions().get(operationName);
+ ExpressionOptimizer optimizer = new ExpressionOptimizer();
+ optimizer.optimize(expression, (ContextIndex)context);
+
+ Tensor vespaResult = expression.evaluate(context).asTensor();
assertEquals("Operation '" + operationName + "' produces equal results", tfResult, vespaResult);
}
@@ -81,8 +91,8 @@ public class TestableTensorFlowModel {
return TensorConverter.toVespaTensor(results.get(0));
}
- private Context contextFrom(ImportedModel result) {
- MapContext context = new MapContext();
+ static Context contextFrom(ImportedModel result) {
+ TestableModelContext context = new TestableModelContext();
result.largeConstants().forEach((name, tensor) -> context.put("constant(" + name + ")", new TensorValue(tensor)));
result.smallConstants().forEach((name, tensor) -> context.put("constant(" + name + ")", new TensorValue(tensor)));
return context;
@@ -118,4 +128,15 @@ public class TestableTensorFlowModel {
}
}
+ private static class TestableModelContext extends MapContext implements ContextIndex {
+ @Override
+ public int size() {
+ return bindings().size();
+ }
+ @Override
+ public int getIndex(String name) {
+ throw new UnsupportedOperationException(this + " does not support index lookup by name");
+ }
+ }
+
}
diff --git a/searchlib/src/tests/docstore/document_store/document_store_test.cpp b/searchlib/src/tests/docstore/document_store/document_store_test.cpp
index 0ef04d0e722..649fb675dca 100644
--- a/searchlib/src/tests/docstore/document_store/document_store_test.cpp
+++ b/searchlib/src/tests/docstore/document_store/document_store_test.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/searchlib/docstore/logdocumentstore.h>
+#include <vespa/searchlib/docstore/value.h>
#include <vespa/searchlib/docstore/cachestats.h>
#include <vespa/document/repo/documenttyperepo.h>
#include <vespa/document/fieldvalue/document.h>
@@ -81,4 +82,70 @@ TEST("require that LogDocumentStore::Config equality operator detects inequality
EXPECT_FALSE(C(DC(), LC().setMaxBucketSpread(7)) == C());
}
+using search::docstore::Value;
+vespalib::stringref S1("this is a string long enough to be compressed and is just used for sanity checking of compression"
+ "Adding some repeatble sequences like aaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbb to ensure compression"
+ "xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz");
+
+Value createValue(vespalib::stringref s, const CompressionConfig & cfg) {
+ Value v(7);
+ vespalib::DataBuffer input;
+ input.writeBytes(s.data(), s.size());
+ v.set(std::move(input), s.size(), cfg);
+ return v;
+}
+void verifyValue(vespalib::stringref s, const Value & v) {
+ Value::Result result = v.decompressed();
+ ASSERT_TRUE(result.second);
+ EXPECT_EQUAL(s.size(), v.getUncompressedSize());
+ EXPECT_EQUAL(7u, v.getSyncToken());
+ EXPECT_EQUAL(0, memcmp(s.data(), result.first.getData(), result.first.getDataLen()));
+}
+
+TEST("require that Value and cache entries have expected size") {
+ using pair = std::pair<DocumentIdT, Value>;
+ using Node = vespalib::hash_node<pair>;
+ EXPECT_EQUAL(64ul, sizeof(Value));
+ EXPECT_EQUAL(72ul, sizeof(pair));
+ EXPECT_EQUAL(80ul, sizeof(Node));
+}
+
+TEST("require that Value can store uncompressed data") {
+ Value v = createValue(S1, CompressionConfig::NONE);
+ verifyValue(S1, v);
+}
+
+TEST("require that Value can be moved") {
+ Value v = createValue(S1, CompressionConfig::NONE);
+ Value m = std::move(v);
+ verifyValue(S1, m);
+}
+
+TEST("require that Value can be copied") {
+ Value v = createValue(S1, CompressionConfig::NONE);
+ Value copy(v);
+ verifyValue(S1, v);
+ verifyValue(S1, copy);
+}
+
+TEST("require that Value can store lz4 compressed data") {
+ Value v = createValue(S1, CompressionConfig::LZ4);
+ EXPECT_EQUAL(CompressionConfig::LZ4, v.getCompression());
+ EXPECT_EQUAL(164u, v.size());
+ verifyValue(S1, v);
+}
+
+TEST("require that Value can store zstd compressed data") {
+ Value v = createValue(S1, CompressionConfig::ZSTD);
+ EXPECT_EQUAL(CompressionConfig::ZSTD, v.getCompression());
+ EXPECT_EQUAL(128u, v.size());
+ verifyValue(S1, v);
+}
+
+TEST("require that Value can detect if output not equal to input") {
+ Value v = createValue(S1, CompressionConfig::NONE);
+ static_cast<uint8_t *>(v.get())[8] ^= 0xff;
+ EXPECT_FALSE(v.decompressed().second);
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp b/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp
index 34046f551d9..eb49a556bdc 100644
--- a/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp
+++ b/searchlib/src/tests/docstore/logdatastore/logdatastore_test.cpp
@@ -622,7 +622,7 @@ TEST("test that the integrated visit cache works.") {
for (size_t i(1); i <= 100; i++) {
vcs.verifyRead(i);
}
- constexpr size_t BASE_SZ = 21374;
+ constexpr size_t BASE_SZ = 22174;
TEST_DO(verifyCacheStats(ds.getCacheStats(), 0, 100, 100, BASE_SZ));
for (size_t i(1); i <= 100; i++) {
vcs.verifyRead(i);
@@ -642,22 +642,22 @@ TEST("test that the integrated visit cache works.") {
vcs.verifyVisit({7,9,17,19,67,88}, true);
TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 102, 99, BASE_SZ+130));
vcs.verifyVisit({7,9,17,19,67,88,89}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 103, 99, BASE_SZ+201));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 103, 99, BASE_SZ+180));
vcs.rewrite(17);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 103, 97, BASE_SZ-657));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 103, 97, BASE_SZ-680));
vcs.verifyVisit({7,9,17,19,67,88,89}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 104, 98, BASE_SZ-3));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 104, 98, BASE_SZ-20));
vcs.remove(17);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 104, 97, BASE_SZ-657));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 104, 97, BASE_SZ-680));
vcs.verifyVisit({7,9,17,19,67,88,89}, {7,9,19,67,88,89}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 105, 98, BASE_SZ-64));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 105, 98, BASE_SZ-90));
vcs.verifyVisit({41, 42}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 106, 99, BASE_SZ+238));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 106, 99, BASE_SZ+210));
vcs.verifyVisit({43, 44}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 107, 100, BASE_SZ+540));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 107, 100, BASE_SZ+520));
vcs.verifyVisit({41, 42, 43, 44}, true);
- TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 108, 99, BASE_SZ+362));
+ TEST_DO(verifyCacheStats(ds.getCacheStats(), 101, 108, 99, BASE_SZ+340));
}
TEST("testWriteRead") {
diff --git a/searchlib/src/vespa/searchlib/common/transport.h b/searchlib/src/vespa/searchlib/common/transport.h
index 55cb44a34d0..51098112476 100644
--- a/searchlib/src/vespa/searchlib/common/transport.h
+++ b/searchlib/src/vespa/searchlib/common/transport.h
@@ -106,8 +106,7 @@ enum getdocsums_features {
enum getdocsums_flags {
- GDFLAG_IGNORE_ROW = 0x00000001,
- GDFLAG_ALLOW_SLIME_NOTUSED = 0x00000002 // TODO: remove in Vespa 7
+ GDFLAG_IGNORE_ROW = 0x00000001
};
// docsum class for slime tunneling
diff --git a/searchlib/src/vespa/searchlib/common/tunefileinfo.hpp b/searchlib/src/vespa/searchlib/common/tunefileinfo.hpp
index 08acd2caa97..17d7949e9b9 100644
--- a/searchlib/src/vespa/searchlib/common/tunefileinfo.hpp
+++ b/searchlib/src/vespa/searchlib/common/tunefileinfo.hpp
@@ -1,4 +1,3 @@
-
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
diff --git a/searchlib/src/vespa/searchlib/docstore/CMakeLists.txt b/searchlib/src/vespa/searchlib/docstore/CMakeLists.txt
index 735b836cf17..2b82d9e5af7 100644
--- a/searchlib/src/vespa/searchlib/docstore/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/docstore/CMakeLists.txt
@@ -18,6 +18,7 @@ vespa_add_library(searchlib_docstore OBJECT
randreaders.cpp
storebybucket.cpp
summaryexceptions.cpp
+ value.cpp
visitcache.cpp
writeablefilechunk.cpp
DEPENDS
diff --git a/searchlib/src/vespa/searchlib/docstore/documentstore.cpp b/searchlib/src/vespa/searchlib/docstore/documentstore.cpp
index 95b6c3b1584..003f448ab07 100644
--- a/searchlib/src/vespa/searchlib/docstore/documentstore.cpp
+++ b/searchlib/src/vespa/searchlib/docstore/documentstore.cpp
@@ -4,15 +4,18 @@
#include "documentstore.h"
#include "visitcache.h"
#include "ibucketizer.h"
+#include "value.h"
#include <vespa/document/fieldvalue/document.h>
#include <vespa/vespalib/stllike/cache.hpp>
#include <vespa/vespalib/data/databuffer.h>
#include <vespa/vespalib/util/compressor.h>
+#include <vespa/log/log.h>
+
+LOG_SETUP(".searchlib.docstore.documentstore");
+
using document::DocumentTypeRepo;
using vespalib::compression::CompressionConfig;
-using vespalib::compression::compress;
-using vespalib::compression::decompress;
namespace search {
@@ -39,82 +42,18 @@ DocumentVisitorAdapter::visit(uint32_t lid, vespalib::ConstBufferRef buf) {
}
}
+document::Document::UP
+deserializeDocument(const vespalib::DataBuffer & uncompressed, const DocumentTypeRepo &repo) {
+ vespalib::nbostream is(uncompressed.getData(), uncompressed.getDataLen());
+ return std::make_unique<document::Document>(repo, is);
+}
+
}
using vespalib::nbostream;
namespace docstore {
-class Value {
-public:
- using Alloc = vespalib::alloc::Alloc;
- typedef std::unique_ptr<Value> UP;
-
- Value()
- : _syncToken(0),
- _compressedSize(0),
- _uncompressedSize(0),
- _compression(CompressionConfig::NONE)
- {}
-
- Value(uint64_t syncToken)
- : _syncToken(syncToken),
- _compressedSize(0),
- _uncompressedSize(0),
- _compression(CompressionConfig::NONE)
- {}
-
- Value(Value &&rhs) = default;
- Value &operator=(Value &&rhs) = default;
-
- Value(const Value &rhs)
- : _syncToken(rhs._syncToken),
- _compressedSize(rhs._compressedSize),
- _uncompressedSize(rhs._uncompressedSize),
- _compression(rhs._compression),
- _buf(Alloc::alloc(rhs.size()))
- {
- memcpy(get(), rhs.get(), size());
- }
-
- void setCompression(CompressionConfig::Type comp, size_t uncompressedSize) {
- _compression = comp;
- _uncompressedSize = uncompressedSize;
- }
- uint64_t getSyncToken() const { return _syncToken; }
-
- CompressionConfig::Type getCompression() const { return _compression; }
-
- size_t getUncompressedSize() const { return _uncompressedSize; }
-
- /**
- * Compress buffer into temporary buffer and copy temporary buffer to
- * value along with compression config.
- */
- void set(vespalib::DataBuffer &&buf, ssize_t len, const CompressionConfig &compression);
- // Keep buffer uncompressed
- void set(vespalib::DataBuffer &&buf, ssize_t len);
-
- /**
- * Decompress value into temporary buffer and deserialize document from
- * the temporary buffer.
- */
- document::Document::UP deserializeDocument(const DocumentTypeRepo &repo) const;
- vespalib::DataBuffer decompressed() const;
-
- size_t size() const { return _compressedSize; }
- bool empty() const { return size() == 0; }
- operator const void *() const { return _buf.get(); }
- const void *get() const { return _buf.get(); }
- void *get() { return _buf.get(); }
-private:
- uint64_t _syncToken;
- size_t _compressedSize;
- size_t _uncompressedSize;
- CompressionConfig::Type _compression;
- Alloc _buf;
-};
-
class BackingStore {
public:
BackingStore(IDataStore &store, const CompressionConfig &compression) :
@@ -133,45 +72,6 @@ private:
CompressionConfig _compression;
};
-
-void
-Value::set(vespalib::DataBuffer &&buf, ssize_t len) {
- set(std::move(buf), len, CompressionConfig());
-}
-
-void
-Value::set(vespalib::DataBuffer &&buf, ssize_t len, const CompressionConfig &compression) {
- //Underlying buffer must be identical to allow swap.
- vespalib::DataBuffer compressed(buf.getData(), 0u);
- CompressionConfig::Type type = compress(compression, vespalib::ConstBufferRef(buf.getData(), len), compressed, true);
- _compressedSize = compressed.getDataLen();
- if (buf.getData() == compressed.getData()) {
- // Uncompressed so we can just steal the underlying buffer.
- buf.stealBuffer().swap(_buf);
- } else {
- compressed.stealBuffer().swap(_buf);
- }
- assert(((type == CompressionConfig::NONE) &&
- (len == ssize_t(_compressedSize))) ||
- ((type != CompressionConfig::NONE) &&
- (len > ssize_t(_compressedSize))));
- setCompression(type, len);
-}
-
-vespalib::DataBuffer
-Value::decompressed() const {
- vespalib::DataBuffer uncompressed(_buf.get(), (size_t) 0);
- decompress(getCompression(), getUncompressedSize(), vespalib::ConstBufferRef(*this, size()), uncompressed, true);
- return uncompressed;
-}
-
-document::Document::UP
-Value::deserializeDocument(const DocumentTypeRepo &repo) const {
- vespalib::DataBuffer uncompressed(decompressed());
- vespalib::nbostream is(uncompressed.getData(), uncompressed.getDataLen());
- return std::make_unique<document::Document>(repo, is);
-}
-
void
BackingStore::visit(const IDocumentStore::LidVector &lids, const DocumentTypeRepo &repo,
IDocumentVisitor &visitor) const {
@@ -194,8 +94,9 @@ BackingStore::read(DocumentIdT key, Value &value) const {
void
BackingStore::write(DocumentIdT lid, const Value & value)
{
- vespalib::DataBuffer buf = value.decompressed();
- _backingStore.write(value.getSyncToken(), lid, buf.getData(), buf.getDataLen());
+ Value::Result buf = value.decompressed();
+ assert(buf.second);
+ _backingStore.write(value.getSyncToken(), lid, buf.first.getData(), buf.first.getDataLen());
}
void
@@ -203,8 +104,6 @@ BackingStore::reconfigure(const CompressionConfig &compression) {
_compression = compression;
}
-}
-
using CacheParams = vespalib::CacheParam<
vespalib::LruParam<DocumentIdT, docstore::Value>,
docstore::BackingStore,
@@ -216,12 +115,14 @@ public:
Cache(BackingStore & b, size_t maxBytes) : vespalib::cache<CacheParams>(b, maxBytes) { }
};
+}
+
using VisitCache = docstore::VisitCache;
using docstore::Value;
bool
DocumentStore::Config::operator == (const Config &rhs) const {
- return (_maxCacheBytes == rhs._maxCacheBytes) &&
+ return (_maxCacheBytes == rhs._maxCacheBytes) &&
(_allowVisitCaching == rhs._allowVisitCaching) &&
(_initialCacheEntries == rhs._initialCacheEntries) &&
(_updateStrategy == rhs._updateStrategy) &&
@@ -233,9 +134,9 @@ DocumentStore::DocumentStore(const Config & config, IDataStore & store)
: IDocumentStore(),
_config(config),
_backingStore(store),
- _store(new docstore::BackingStore(_backingStore, config.getCompression())),
- _cache(new Cache(*_store, config.getMaxCacheBytes())),
- _visitCache(new VisitCache(store, config.getMaxCacheBytes(), config.getCompression())),
+ _store(std::make_unique<docstore::BackingStore>(_backingStore, config.getCompression())),
+ _cache(std::make_unique<docstore::Cache>(*_store, config.getMaxCacheBytes())),
+ _visitCache(std::make_unique<docstore::VisitCache>(store, config.getMaxCacheBytes(), config.getCompression())),
_uncached_lookups(0)
{
_cache->reserveElements(config.getInitialCacheEntries());
@@ -271,21 +172,32 @@ DocumentStore::visit(const LidVector & lids, const DocumentTypeRepo &repo, IDocu
}
}
-document::Document::UP
+std::unique_ptr<document::Document>
DocumentStore::read(DocumentIdT lid, const DocumentTypeRepo &repo) const
{
- document::Document::UP retval;
Value value;
if (useCache()) {
value = _cache->read(lid);
- } else {
- _uncached_lookups.fetch_add(1);
- _store->read(lid, value);
+ if (value.empty()) {
+ return std::unique_ptr<document::Document>();
+ }
+ Value::Result result = value.decompressed();
+ if ( result.second ) {
+ return deserializeDocument(result.first, repo);
+ } else {
+ LOG(warning, "Summary cache for lid %u is corrupt. Invalidating and reading directly from backing store", lid);
+ _cache->invalidate(lid);
+ }
}
+
+ _uncached_lookups.fetch_add(1);
+ _store->read(lid, value);
if ( ! value.empty() ) {
- retval = value.deserializeDocument(repo);
+ Value::Result result = value.decompressed();
+ assert(result.second);
+ return deserializeDocument(result.first, repo);
}
- return retval;
+ return std::unique_ptr<document::Document>();
}
void
@@ -380,15 +292,12 @@ class DocumentStore::WrapVisitor : public IDataStoreVisitor
public:
void visit(uint32_t lid, const void *buffer, size_t sz) override;
- WrapVisitor(Visitor &visitor,
- const DocumentTypeRepo &repo,
- const CompressionConfig &compresion,
- IDocumentStore &ds,
- uint64_t syncToken);
+ WrapVisitor(Visitor &visitor, const DocumentTypeRepo &repo, const CompressionConfig &compresion,
+ IDocumentStore &ds, uint64_t syncToken);
- inline void rewrite(uint32_t lid, const document::Document &doc);
- inline void rewrite(uint32_t lid);
- inline void visitRemove(uint32_t lid);
+ void rewrite(uint32_t lid, const document::Document &doc);
+ void rewrite(uint32_t lid);
+ void visitRemove(uint32_t lid);
};
@@ -406,34 +315,26 @@ public:
}
};
-
template <>
void
DocumentStore::WrapVisitor<IDocumentStoreReadVisitor>::
-rewrite(uint32_t lid, const document::Document &doc)
+rewrite(uint32_t , const document::Document &)
{
- (void) lid;
- (void) doc;
}
template <>
void
-DocumentStore::WrapVisitor<IDocumentStoreReadVisitor>::
-rewrite(uint32_t lid)
+DocumentStore::WrapVisitor<IDocumentStoreReadVisitor>::rewrite(uint32_t )
{
- (void) lid;
}
-
template <>
void
-DocumentStore::WrapVisitor<IDocumentStoreReadVisitor>::
-visitRemove(uint32_t lid)
+DocumentStore::WrapVisitor<IDocumentStoreReadVisitor>::visitRemove(uint32_t lid)
{
_visitor.visit(lid);
}
-
template <>
void
DocumentStore::WrapVisitor<IDocumentStoreRewriteVisitor>::
@@ -444,33 +345,21 @@ rewrite(uint32_t lid, const document::Document &doc)
template <>
void
-DocumentStore::WrapVisitor<IDocumentStoreRewriteVisitor>::
-rewrite(uint32_t lid)
+DocumentStore::WrapVisitor<IDocumentStoreRewriteVisitor>::rewrite(uint32_t lid)
{
_ds.remove(_syncToken, lid);
}
-
template <>
void
-DocumentStore::WrapVisitor<IDocumentStoreRewriteVisitor>::
-visitRemove(uint32_t lid)
+DocumentStore::WrapVisitor<IDocumentStoreRewriteVisitor>::visitRemove(uint32_t )
{
- (void) lid;
}
-
-
template <class Visitor>
void
-DocumentStore::WrapVisitor<Visitor>::visit(uint32_t lid,
- const void *buffer,
- size_t sz)
+DocumentStore::WrapVisitor<Visitor>::visit(uint32_t lid, const void *buffer, size_t sz)
{
- (void) lid;
- (void) buffer;
- (void) sz;
-
Value value;
vespalib::DataBuffer buf(4096);
buf.clear();
@@ -480,7 +369,7 @@ DocumentStore::WrapVisitor<Visitor>::visit(uint32_t lid,
value.set(std::move(buf), len);
}
if (! value.empty()) {
- std::shared_ptr<document::Document> doc(value.deserializeDocument(_repo));
+ std::shared_ptr<document::Document> doc(deserializeDocument(value.decompressed().first, _repo));
_visitor.visit(lid, doc);
rewrite(lid, *doc);
} else {
@@ -489,14 +378,10 @@ DocumentStore::WrapVisitor<Visitor>::visit(uint32_t lid,
}
}
-
template <class Visitor>
DocumentStore::WrapVisitor<Visitor>::
-WrapVisitor(Visitor &visitor,
- const DocumentTypeRepo &repo,
- const CompressionConfig &compression,
- IDocumentStore &ds,
- uint64_t syncToken)
+WrapVisitor(Visitor &visitor, const DocumentTypeRepo &repo, const CompressionConfig &compression,
+ IDocumentStore &ds, uint64_t syncToken)
: _visitor(visitor),
_repo(repo),
_compression(compression),
@@ -505,7 +390,6 @@ WrapVisitor(Visitor &visitor,
{
}
-
void
DocumentStore::accept(IDocumentStoreReadVisitor &visitor, IDocumentStoreVisitorProgress &visitorProgress,
const DocumentTypeRepo &repo)
@@ -516,7 +400,6 @@ DocumentStore::accept(IDocumentStoreReadVisitor &visitor, IDocumentStoreVisitorP
_backingStore.accept(wrap, wrapVisitorProgress, false);
}
-
void
DocumentStore::accept(IDocumentStoreRewriteVisitor &visitor, IDocumentStoreVisitorProgress &visitorProgress,
const DocumentTypeRepo &repo)
@@ -527,7 +410,6 @@ DocumentStore::accept(IDocumentStoreRewriteVisitor &visitor, IDocumentStoreVisit
_backingStore.accept(wrap, wrapVisitorProgress, true);
}
-
double
DocumentStore::getVisitCost() const
{
@@ -584,5 +466,4 @@ DocumentStore::shrinkLidSpace()
_backingStore.shrinkLidSpace();
}
-} // namespace search
-
+}
diff --git a/searchlib/src/vespa/searchlib/docstore/documentstore.h b/searchlib/src/vespa/searchlib/docstore/documentstore.h
index 7bc3ab1c21d..baeed106531 100644
--- a/searchlib/src/vespa/searchlib/docstore/documentstore.h
+++ b/searchlib/src/vespa/searchlib/docstore/documentstore.h
@@ -5,17 +5,13 @@
#include "idocumentstore.h"
#include <vespa/vespalib/util/compressionconfig.h>
-
-namespace search {
-
-namespace docstore {
+namespace search::docstore {
class VisitCache;
class BackingStore;
class Cache;
}
-using docstore::VisitCache;
-using docstore::BackingStore;
-using docstore::Cache;
+
+namespace search {
/**
* Simple document store that contains serialized Document instances.
@@ -67,7 +63,7 @@ public:
* @param baseDir The path to a directory where "simpledocstore.dat" will exist.
**/
DocumentStore(const Config & config, IDataStore & store);
- ~DocumentStore();
+ ~DocumentStore() override;
DocumentUP read(DocumentIdT lid, const document::DocumentTypeRepo &repo) const override;
void visit(const LidVector & lids, const document::DocumentTypeRepo &repo, IDocumentVisitor & visitor) const override;
@@ -111,12 +107,12 @@ private:
template <class> class WrapVisitor;
class WrapVisitorProgress;
- Config _config;
- IDataStore & _backingStore;
- std::unique_ptr<BackingStore> _store;
- std::shared_ptr<Cache> _cache;
- std::shared_ptr<VisitCache> _visitCache;
- mutable std::atomic<uint64_t> _uncached_lookups;
+ Config _config;
+ IDataStore & _backingStore;
+ std::unique_ptr<docstore::BackingStore> _store;
+ std::unique_ptr<docstore::Cache> _cache;
+ std::unique_ptr<docstore::VisitCache> _visitCache;
+ mutable std::atomic<uint64_t> _uncached_lookups;
};
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/docstore/value.cpp b/searchlib/src/vespa/searchlib/docstore/value.cpp
new file mode 100644
index 00000000000..8750413e3bc
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/docstore/value.cpp
@@ -0,0 +1,75 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "value.h"
+#include <vespa/vespalib/data/databuffer.h>
+#include <vespa/vespalib/util/compressor.h>
+#include <vespa/vespalib/xxhash/xxhash.h>
+
+using vespalib::compression::compress;
+using vespalib::compression::decompress;
+
+namespace search::docstore {
+
+Value::Value()
+ : _syncToken(0),
+ _compressedSize(0),
+ _uncompressedSize(0),
+ _uncompressedCrc(0),
+ _compression(CompressionConfig::NONE)
+{}
+
+Value::Value(uint64_t syncToken)
+ : _syncToken(syncToken),
+ _compressedSize(0),
+ _uncompressedSize(0),
+ _uncompressedCrc(0),
+ _compression(CompressionConfig::NONE)
+{}
+
+Value::Value(const Value &rhs)
+ : _syncToken(rhs._syncToken),
+ _compressedSize(rhs._compressedSize),
+ _uncompressedSize(rhs._uncompressedSize),
+ _uncompressedCrc(rhs._uncompressedCrc),
+ _compression(rhs._compression),
+ _buf(Alloc::alloc(rhs.size()))
+{
+ memcpy(get(), rhs.get(), size());
+}
+
+void
+Value::set(vespalib::DataBuffer &&buf, ssize_t len) {
+ set(std::move(buf), len, CompressionConfig());
+}
+
+void
+Value::set(vespalib::DataBuffer &&buf, ssize_t len, const CompressionConfig &compression) {
+ //Underlying buffer must be identical to allow swap.
+ vespalib::DataBuffer compressed(buf.getData(), 0u);
+ vespalib::ConstBufferRef input(buf.getData(), len);
+ CompressionConfig::Type type = compress(compression, input, compressed, true);
+ _compressedSize = compressed.getDataLen();
+ if (buf.getData() == compressed.getData()) {
+ // Uncompressed so we can just steal the underlying buffer.
+ buf.stealBuffer().swap(_buf);
+ } else {
+ compressed.stealBuffer().swap(_buf);
+ }
+ assert(((type == CompressionConfig::NONE) &&
+ (len == ssize_t(_compressedSize))) ||
+ ((type != CompressionConfig::NONE) &&
+ (len > ssize_t(_compressedSize))));
+ _compression = type;
+ _uncompressedSize = len;
+ _uncompressedCrc = XXH64(input.c_str(), input.size(), 0);
+}
+
+Value::Result
+Value::decompressed() const {
+ vespalib::DataBuffer uncompressed(_buf.get(), (size_t) 0);
+ decompress(getCompression(), getUncompressedSize(), vespalib::ConstBufferRef(*this, size()), uncompressed, true);
+ uint64_t crc = XXH64(uncompressed.getData(), uncompressed.getDataLen(), 0);
+ return std::make_pair<vespalib::DataBuffer, bool>(std::move(uncompressed), crc == _uncompressedCrc);
+}
+
+}
diff --git a/searchlib/src/vespa/searchlib/docstore/value.h b/searchlib/src/vespa/searchlib/docstore/value.h
new file mode 100644
index 00000000000..426bcaf0e31
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/docstore/value.h
@@ -0,0 +1,57 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/vespalib/util/compressionconfig.h>
+#include <vespa/vespalib/data/databuffer.h>
+
+namespace search::docstore {
+
+/**
+ * This class is used to represent a serialized and optionally compressed blob.
+ * Has efficient move/copy operators for use in a cache/stl containers.
+ * Also has crc checks of uncompressed data.
+ */
+class Value {
+public:
+ using Alloc = vespalib::alloc::Alloc;
+ using CompressionConfig = vespalib::compression::CompressionConfig;
+ using Result = std::pair<vespalib::DataBuffer, bool>;
+
+ Value();
+ Value(uint64_t syncToken);
+
+ Value(Value &&rhs) = default;
+ Value &operator=(Value &&rhs) = default;
+
+ Value(const Value &rhs);
+
+ uint64_t getSyncToken() const { return _syncToken; }
+ CompressionConfig::Type getCompression() const { return _compression; }
+ size_t getUncompressedSize() const { return _uncompressedSize; }
+
+ /**
+ * Compress buffer into temporary buffer and copy temporary buffer to
+ * value along with compression config.
+ */
+ void set(vespalib::DataBuffer &&buf, ssize_t len, const CompressionConfig &compression);
+ // Keep buffer uncompressed
+ void set(vespalib::DataBuffer &&buf, ssize_t len);
+
+ Result decompressed() const;
+
+ size_t size() const { return _compressedSize; }
+ bool empty() const { return size() == 0; }
+ operator const void *() const { return _buf.get(); }
+ const void *get() const { return _buf.get(); }
+ void *get() { return _buf.get(); }
+private:
+ uint64_t _syncToken;
+ size_t _compressedSize;
+ size_t _uncompressedSize;
+ uint64_t _uncompressedCrc;
+ CompressionConfig::Type _compression;
+ Alloc _buf;
+};
+
+}
diff --git a/searchlib/src/vespa/searchlib/engine/transportserver.cpp b/searchlib/src/vespa/searchlib/engine/transportserver.cpp
index bc739a7bf48..0fa7d44bbad 100644
--- a/searchlib/src/vespa/searchlib/engine/transportserver.cpp
+++ b/searchlib/src/vespa/searchlib/engine/transportserver.cpp
@@ -359,7 +359,7 @@ TransportServer::TransportServer(SearchServer &searchServer,
: _searchServer(searchServer),
_docsumServer(docsumServer),
_monitorServer(monitorServer),
- _transport(std::make_shared<vespalib::NullCryptoEngine>(), 1), // disable encryption
+ _transport(),
_ready(false),
_failed(false),
_doListen(true),
diff --git a/searchlib/src/vespa/searchlib/memoryindex/featurestore.cpp b/searchlib/src/vespa/searchlib/memoryindex/featurestore.cpp
index 583fadae7a6..be8c71de7a9 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/featurestore.cpp
+++ b/searchlib/src/vespa/searchlib/memoryindex/featurestore.cpp
@@ -11,8 +11,7 @@ constexpr size_t MIN_CLUSTERS = 1024u;
using index::SchemaUtil;
uint64_t
-FeatureStore::writeFeatures(uint32_t packedIndex,
- const DocIdAndFeatures &features)
+FeatureStore::writeFeatures(uint32_t packedIndex, const DocIdAndFeatures &features)
{
_f._fieldsParams = &_fieldsParams[packedIndex];
uint64_t oldOffset = _f.getWriteOffset();
@@ -90,8 +89,7 @@ FeatureStore::FeatureStore(const Schema &schema)
_fieldsParams.resize(_schema.getNumIndexFields());
SchemaUtil::IndexIterator it(_schema);
for(; it.isValid(); ++it) {
- _fieldsParams[it.getIndex()].
- setSchemaParams(_schema, it.getIndex());
+ _fieldsParams[it.getIndex()].setSchemaParams(_schema, it.getIndex());
}
_store.addType(&_type);
_store.initActiveBuffers();
@@ -105,8 +103,7 @@ FeatureStore::~FeatureStore()
std::pair<datastore::EntryRef, uint64_t>
-FeatureStore::addFeatures(uint32_t packedIndex,
- const DocIdAndFeatures &features)
+FeatureStore::addFeatures(uint32_t packedIndex, const DocIdAndFeatures &features)
{
uint64_t oldOffset = writeFeatures(packedIndex, features);
uint64_t newOffset = _f.getWriteOffset();
@@ -117,8 +114,7 @@ FeatureStore::addFeatures(uint32_t packedIndex,
void
-FeatureStore::getFeatures(uint32_t packedIndex, datastore::EntryRef ref,
- DocIdAndFeatures &features)
+FeatureStore::getFeatures(uint32_t packedIndex, datastore::EntryRef ref, DocIdAndFeatures &features)
{
setupForField(packedIndex, _d);
setupForReadFeatures(ref, _d);
@@ -141,8 +137,7 @@ FeatureStore::bitSize(uint32_t packedIndex, datastore::EntryRef ref)
datastore::EntryRef
-FeatureStore::moveFeatures(uint32_t packedIndex,
- datastore::EntryRef ref)
+FeatureStore::moveFeatures(uint32_t packedIndex, datastore::EntryRef ref)
{
uint64_t bitLen = bitSize(packedIndex, ref);
return moveFeatures(ref, bitLen);
diff --git a/searchlib/src/vespa/searchlib/memoryindex/featurestore.h b/searchlib/src/vespa/searchlib/memoryindex/featurestore.h
index ecf21892f78..4ffdf2bc4e7 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/featurestore.h
+++ b/searchlib/src/vespa/searchlib/memoryindex/featurestore.h
@@ -7,9 +7,7 @@
#include <vespa/searchlib/bitcompression/compression.h>
#include <vespa/searchlib/bitcompression/posocccompression.h>
-namespace search {
-
-namespace memoryindex {
+namespace search::memoryindex {
class FeatureStore
{
@@ -54,8 +52,7 @@ private:
* @param features the features to be encoded
* @return the encode offset before writing
*/
- uint64_t
- writeFeatures(uint32_t packedIndex, const DocIdAndFeatures &features);
+ uint64_t writeFeatures(uint32_t packedIndex, const DocIdAndFeatures &features);
/**
* Adds the features from the given buffer to the data store.
@@ -64,8 +61,7 @@ private:
* @param byteLen the byte length of the buffer
* @return the entry ref for the added features
*/
- datastore::EntryRef
- addFeatures(const uint8_t * src, uint64_t byteLen);
+ datastore::EntryRef addFeatures(const uint8_t * src, uint64_t byteLen);
/**
* Adds the features currently in the underlying encode context to the data store.
@@ -74,8 +70,7 @@ private:
* @param endOffset the end offset into the encode context
* @return the entry ref and bit length of the features
*/
- std::pair<datastore::EntryRef, uint64_t>
- addFeatures(uint64_t beginOffset, uint64_t endOffset);
+ std::pair<datastore::EntryRef, uint64_t> addFeatures(uint64_t beginOffset, uint64_t endOffset);
/**
* Moves features to new location, as part of compaction.
@@ -107,9 +102,7 @@ public:
* @return pair with reference to stored features and
* size of encoded features in bits
*/
- std::pair<datastore::EntryRef, uint64_t>
- addFeatures(uint32_t packedIndex,
- const DocIdAndFeatures &features);
+ std::pair<datastore::EntryRef, uint64_t> addFeatures(uint32_t packedIndex, const DocIdAndFeatures &features);
/**
@@ -120,10 +113,7 @@ public:
* @param ref Reference to stored features
* @param features The features to be decoded
*/
- void
- getFeatures(uint32_t packedIndex,
- datastore::EntryRef ref,
- DocIdAndFeatures &features);
+ void getFeatures(uint32_t packedIndex, datastore::EntryRef ref, DocIdAndFeatures &features);
/**
@@ -189,9 +179,7 @@ public:
* @param ref Referennce to stored features
* @return byte address of stored features
*/
- const uint8_t *
- getBits(datastore::EntryRef ref) const
- {
+ const uint8_t *getBits(datastore::EntryRef ref) const {
RefType iRef(ref);
return _store.getBufferEntry<uint8_t>(iRef.bufferId(), iRef.offset());
}
@@ -203,72 +191,22 @@ public:
* @param ref Old reference to stored features
* @return New reference to stored features
*/
- datastore::EntryRef
- moveFeatures(uint32_t packedIndex,
- datastore::EntryRef ref);
+ datastore::EntryRef moveFeatures(uint32_t packedIndex, datastore::EntryRef ref);
/**
* Return a const view of the fields params used by this feature store.
*
* @return const view of fields params.
*/
- const std::vector<PosOccFieldsParams> &
- getFieldsParams() const
- {
- return _fieldsParams;
- }
-
- // Inherit doc from DataStoreBase
- void
- trimHoldLists(generation_t usedGen)
- {
- _store.trimHoldLists(usedGen);
- }
-
- // Inherit doc from DataStoreBase
- void
- transferHoldLists(generation_t generation)
- {
- _store.transferHoldLists(generation);
- }
-
- void
- clearHoldLists()
- {
- _store.clearHoldLists();
- }
-
- // Inherit doc from DataStoreBase
- std::vector<uint32_t>
- startCompact()
- {
- return _store.startCompact(_typeId);
- }
-
- // Inherit doc from DataStoreBase
- void
- finishCompact(const std::vector<uint32_t> & toHold)
- {
- _store.finishCompact(toHold);
- }
-
- // Inherit doc from DataStoreBase
- MemoryUsage
- getMemoryUsage() const
- {
- return _store.getMemoryUsage();
- }
-
- // Inherit doc from DataStoreBase
- datastore::DataStoreBase::MemStats
- getMemStats() const
- {
- return _store.getMemStats();
- }
+ const std::vector<PosOccFieldsParams> &getFieldsParams() const { return _fieldsParams; }
+
+ void trimHoldLists(generation_t usedGen) { _store.trimHoldLists(usedGen); }
+ void transferHoldLists(generation_t generation) { _store.transferHoldLists(generation); }
+ void clearHoldLists() { _store.clearHoldLists();}
+ std::vector<uint32_t> startCompact() { return _store.startCompact(_typeId); }
+ void finishCompact(const std::vector<uint32_t> & toHold) { _store.finishCompact(toHold); }
+ MemoryUsage getMemoryUsage() const { return _store.getMemoryUsage(); }
+ datastore::DataStoreBase::MemStats getMemStats() const { return _store.getMemStats(); }
};
-
-} // namespace search::memoryindex
-} // namespace search
-
-
+}
diff --git a/searchlib/src/vespa/searchlib/memoryindex/iordereddocumentinserter.h b/searchlib/src/vespa/searchlib/memoryindex/iordereddocumentinserter.h
index f36086bd49f..9edd1eb4d3b 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/iordereddocumentinserter.h
+++ b/searchlib/src/vespa/searchlib/memoryindex/iordereddocumentinserter.h
@@ -5,11 +5,9 @@
#include <vespa/vespalib/stllike/string.h>
#include <cstdint>
-namespace search {
+namespace search::index { class DocIdAndFeatures; }
-namespace index { class DocIdAndFeatures; }
-
-namespace memoryindex {
+namespace search::memoryindex {
/**
* Interface class for ordered document inserter.
@@ -49,4 +47,3 @@ public:
};
}
-}
diff --git a/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.cpp b/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.cpp
index b1e365c7fd7..1f15bcf1c75 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.cpp
+++ b/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.cpp
@@ -94,6 +94,7 @@ OrderedDocumentInserter::setNextWord(const vespalib::stringref word)
}
if (!_dItr.valid() || cmp(key, _dItr.getKey())) {
datastore::EntryRef wordRef = _fieldIndex.addWord(_word);
+
WordKey insertKey(wordRef);
DictionaryTree &dTree(_fieldIndex.getDictionaryTree());
dTree.insert(_dItr, insertKey, datastore::EntryRef().ref());
diff --git a/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.h b/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.h
index 941695b2707..9645c3890e2 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.h
+++ b/searchlib/src/vespa/searchlib/memoryindex/ordereddocumentinserter.h
@@ -6,11 +6,7 @@
#include "memoryfieldindex.h"
#include <limits>
-namespace search
-{
-
-namespace memoryindex
-{
+namespace search::memoryindex {
class IDocumentInsertListener;
@@ -52,11 +48,10 @@ class OrderedDocumentInserter : public IOrderedDocumentInserter
public:
OrderedDocumentInserter(MemoryFieldIndex &fieldIndex);
- virtual ~OrderedDocumentInserter();
- virtual void setNextWord(const vespalib::stringref word) override;
- virtual void add(uint32_t docId,
- const index::DocIdAndFeatures &features) override;
- virtual void remove(uint32_t docId) override;
+ ~OrderedDocumentInserter() override;
+ void setNextWord(const vespalib::stringref word) override;
+ void add(uint32_t docId, const index::DocIdAndFeatures &features) override;
+ void remove(uint32_t docId) override;
/*
* Flush pending changes to postinglist for (_word). Also flush
@@ -64,17 +59,15 @@ public:
*
* _dItr is located at correct position.
*/
- virtual void flush() override;
+ void flush() override;
/*
* Rewind iterator, to start new pass.
*/
- virtual void rewind() override;
+ void rewind() override;
// Used by unit test
datastore::EntryRef getWordRef() const;
};
}
-
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java
new file mode 100644
index 00000000000..c1bc303e792
--- /dev/null
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java
@@ -0,0 +1,18 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.service.monitor.application;
+
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.NodeType;
+
+/**
+ * @author mpolden
+ */
+public class ControllerApplication extends HostedVespaApplication {
+
+ public static final ControllerApplication CONTROLLER_APPLICATION = new ControllerApplication();
+
+ private ControllerApplication() {
+ super("controller", NodeType.controller, ClusterSpec.Type.container, ClusterSpec.Id.from("controller"));
+ }
+
+}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java
index d1111bdd5d7..23fafa701d9 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java
@@ -60,4 +60,10 @@ public abstract class HostedVespaApplication {
.applicationName(applicationName)
.build();
}
+
+ @Override
+ public String toString() {
+ return applicationId.toString();
+ }
+
}
diff --git a/slobrok/src/apps/check_slobrok/check_slobrok.cpp b/slobrok/src/apps/check_slobrok/check_slobrok.cpp
index 744a64b89cd..ed72c459e44 100644
--- a/slobrok/src/apps/check_slobrok/check_slobrok.cpp
+++ b/slobrok/src/apps/check_slobrok/check_slobrok.cpp
@@ -13,14 +13,14 @@ LOG_SETUP("check_slobrok");
class Slobrok_Checker : public FastOS_Application
{
private:
- FRT_Supervisor *_supervisor;
- FRT_Target *_target;
+ std::unique_ptr<FRT_Supervisor> _supervisor;
+ FRT_Target *_target;
Slobrok_Checker(const Slobrok_Checker &);
Slobrok_Checker &operator=(const Slobrok_Checker &);
public:
- Slobrok_Checker() : _supervisor(NULL), _target(NULL) {}
+ Slobrok_Checker() : _supervisor(), _target(nullptr) {}
virtual ~Slobrok_Checker();
int usage();
void initRPC(const char *spec);
@@ -30,8 +30,8 @@ public:
Slobrok_Checker::~Slobrok_Checker()
{
- LOG_ASSERT(_supervisor == NULL);
- LOG_ASSERT(_target == NULL);
+ LOG_ASSERT( !_supervisor);
+ LOG_ASSERT(_target == nullptr);
}
@@ -46,7 +46,7 @@ Slobrok_Checker::usage()
void
Slobrok_Checker::initRPC(const char *spec)
{
- _supervisor = new FRT_Supervisor();
+ _supervisor = std::make_unique<FRT_Supervisor>();
_target = _supervisor->GetTarget(spec);
_supervisor->Start();
}
@@ -55,14 +55,13 @@ Slobrok_Checker::initRPC(const char *spec)
void
Slobrok_Checker::finiRPC()
{
- if (_target != NULL) {
+ if (_target != nullptr) {
_target->SubRef();
- _target = NULL;
+ _target = nullptr;
}
- if (_supervisor != NULL) {
+ if (_supervisor) {
_supervisor->ShutDown(true);
- delete _supervisor;
- _supervisor = NULL;
+ _supervisor.reset();
}
}
diff --git a/slobrok/src/apps/sbcmd/sbcmd.cpp b/slobrok/src/apps/sbcmd/sbcmd.cpp
index 30aaa6a1406..c4b76bd7ed0 100644
--- a/slobrok/src/apps/sbcmd/sbcmd.cpp
+++ b/slobrok/src/apps/sbcmd/sbcmd.cpp
@@ -12,14 +12,14 @@ LOG_SETUP("vespa-slobrok-cmd");
class Slobrok_CMD : public FastOS_Application
{
private:
- FRT_Supervisor *_supervisor;
+ std::unique_ptr<FRT_Supervisor> _supervisor;
FRT_Target *_target;
Slobrok_CMD(const Slobrok_CMD &);
Slobrok_CMD &operator=(const Slobrok_CMD &);
public:
- Slobrok_CMD() : _supervisor(NULL), _target(NULL) {}
+ Slobrok_CMD() : _supervisor(), _target(nullptr) {}
virtual ~Slobrok_CMD();
int usage();
void initRPC(const char *spec);
@@ -29,8 +29,8 @@ public:
Slobrok_CMD::~Slobrok_CMD()
{
- LOG_ASSERT(_supervisor == NULL);
- LOG_ASSERT(_target == NULL);
+ LOG_ASSERT(! _supervisor);
+ LOG_ASSERT(_target == nullptr);
}
int
@@ -56,7 +56,7 @@ Slobrok_CMD::usage()
void
Slobrok_CMD::initRPC(const char *spec)
{
- _supervisor = new FRT_Supervisor();
+ _supervisor = std::make_unique<FRT_Supervisor>();
_target = _supervisor->GetTarget(spec);
_supervisor->Start();
}
@@ -65,14 +65,13 @@ Slobrok_CMD::initRPC(const char *spec)
void
Slobrok_CMD::finiRPC()
{
- if (_target != NULL) {
+ if (_target != nullptr) {
_target->SubRef();
- _target = NULL;
+ _target = nullptr;
}
- if (_supervisor != NULL) {
+ if (_supervisor) {
_supervisor->ShutDown(true);
- delete _supervisor;
- _supervisor = NULL;
+ _supervisor.reset();
}
}
@@ -165,7 +164,7 @@ Slobrok_CMD::Main()
} else {
fprintf(stderr, "vespa-slobrok-cmd OK, returntypes '%s'\n", atypes);
uint32_t idx = 0;
- while (atypes != NULL && *atypes != '\0') {
+ while (atypes != nullptr && *atypes != '\0') {
switch (*atypes) {
case 's':
printf(" string = '%s'\n", answer[idx]._string._str);
diff --git a/slobrok/src/vespa/slobrok/server/cmd.cpp b/slobrok/src/vespa/slobrok/server/cmd.cpp
index 6ba4f9a6e98..e728c8f80ad 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.cpp
+++ b/slobrok/src/vespa/slobrok/server/cmd.cpp
@@ -30,27 +30,33 @@ public:
const std::string spec;
FRT_RPCRequest * const registerRequest;
- RegRpcSrvData(SBEnv &e, const char *n, const char *s, FRT_RPCRequest *r)
+ RegRpcSrvData(SBEnv &e, const std::string &n, const std::string &s, FRT_RPCRequest *r)
: _state(RDC_INIT), env(e), name(n), spec(s), registerRequest(r)
{}
};
+RegRpcSrvCommand::RegRpcSrvCommand(std::unique_ptr<RegRpcSrvData> data)
+ : _data(std::move(data))
+{}
+
+RegRpcSrvCommand::RegRpcSrvCommand(RegRpcSrvCommand &&) = default;
+RegRpcSrvCommand & RegRpcSrvCommand::operator =(RegRpcSrvCommand &&) = default;
+RegRpcSrvCommand::~RegRpcSrvCommand() = default;
+
RegRpcSrvCommand
RegRpcSrvCommand::makeRegRpcSrvCmd(SBEnv &env,
- const char *name, const char *spec,
+ const std::string &name, const std::string &spec,
FRT_RPCRequest *req)
{
- RegRpcSrvData *data = new RegRpcSrvData(env, name, spec, req);
- return RegRpcSrvCommand(data);
+ return RegRpcSrvCommand(std::make_unique<RegRpcSrvData>(env, name, spec, req));
}
RegRpcSrvCommand
-RegRpcSrvCommand::makeRemRemCmd(SBEnv &env,
- const char *name, const char *spec)
+RegRpcSrvCommand::makeRemRemCmd(SBEnv &env, const std::string & name, const std::string &spec)
{
- RegRpcSrvData *data = new RegRpcSrvData(env, name, spec, NULL);
+ auto data = std::make_unique<RegRpcSrvData>(env, name, spec, nullptr);
data->_state = RegRpcSrvData::XCH_IGNORE;
- return RegRpcSrvCommand(data);
+ return RegRpcSrvCommand(std::move(data));
}
@@ -62,66 +68,61 @@ RegRpcSrvCommand::doRequest()
}
void
-RegRpcSrvCommand::cleanupReservation()
+RegRpcSrvCommand::cleanupReservation(RegRpcSrvData & data)
{
- RpcServerMap &map = _data->env._rpcsrvmap;
- ReservedName *rsvp = map.getReservation(_data->name.c_str());
- if (rsvp != NULL && rsvp->isLocal) {
- map.removeReservation(_data->name.c_str());
+ RpcServerMap &map = data.env._rpcsrvmap;
+ const ReservedName *rsvp = map.getReservation(data.name.c_str());
+ if (rsvp != nullptr && rsvp->isLocal) {
+ map.removeReservation(data.name.c_str());
}
}
void
RegRpcSrvCommand::doneHandler(OkState result)
{
- LOG_ASSERT(_data != NULL);
-
+ LOG_ASSERT(_data != nullptr);
+ std::unique_ptr<RegRpcSrvData> dataUP = std::move(_data);
+ RegRpcSrvData & data = *dataUP;
if (result.failed()) {
- LOG(warning, "failed in state %d: %s",
- _data->_state, result.errorMsg.c_str());
- cleanupReservation();
+ LOG(warning, "failed in state %d: %s", data._state, result.errorMsg.c_str());
+ cleanupReservation(data);
// XXX should handle different state errors differently?
- if (_data->registerRequest != NULL) {
- _data->registerRequest->SetError(FRTE_RPC_METHOD_FAILED,
- result.errorMsg.c_str());
- _data->registerRequest->Return();
+ if (data.registerRequest != nullptr) {
+ data.registerRequest->SetError(FRTE_RPC_METHOD_FAILED, result.errorMsg.c_str());
+ data.registerRequest->Return();
} else {
LOG(warning, "ignored: %s", result.errorMsg.c_str());
}
goto alldone;
}
- if (_data->_state == RegRpcSrvData::RDC_INIT) {
- LOG(spam, "phase wantAdd(%s,%s)",
- _data->name.c_str(), _data->spec.c_str());
- _data->_state = RegRpcSrvData::XCH_WANTADD;
- _data->env._exchanger.wantAdd(_data->name.c_str(), _data->spec.c_str(), *this);
+ if (data._state == RegRpcSrvData::RDC_INIT) {
+ LOG(spam, "phase wantAdd(%s,%s)", data.name.c_str(), data.spec.c_str());
+ data._state = RegRpcSrvData::XCH_WANTADD;
+ data.env._exchanger.wantAdd(data.name.c_str(), data.spec.c_str(), std::move(dataUP));
return;
- } else if (_data->_state == RegRpcSrvData::XCH_WANTADD) {
- LOG(spam, "phase addManaged(%s,%s)",
- _data->name.c_str(), _data->spec.c_str());
- _data->_state = RegRpcSrvData::CHK_RPCSRV;
- _data->env._rpcsrvmanager.addManaged(_data->name.c_str(), _data->spec.c_str(), *this);
+ } else if (data._state == RegRpcSrvData::XCH_WANTADD) {
+ LOG(spam, "phase addManaged(%s,%s)", data.name.c_str(), data.spec.c_str());
+ data._state = RegRpcSrvData::CHK_RPCSRV;
+ data.env._rpcsrvmanager.addManaged(data.name, data.spec.c_str(), std::move(dataUP));
return;
- } else if (_data->_state == RegRpcSrvData::CHK_RPCSRV) {
- LOG(spam, "phase doAdd(%s,%s)", _data->name.c_str(), _data->spec.c_str());
- _data->_state = RegRpcSrvData::XCH_DOADD;
- _data->env._exchanger.doAdd(_data->name.c_str(), _data->spec.c_str(), *this);
+ } else if (data._state == RegRpcSrvData::CHK_RPCSRV) {
+ LOG(spam, "phase doAdd(%s,%s)", data.name.c_str(), data.spec.c_str());
+ data._state = RegRpcSrvData::XCH_DOADD;
+ data.env._exchanger.doAdd(data.name.c_str(), data.spec.c_str(), std::move(dataUP));
return;
- } else if (_data->_state == RegRpcSrvData::XCH_DOADD) {
- LOG(debug, "done doAdd(%s,%s)", _data->name.c_str(), _data->spec.c_str());
- _data->_state = RegRpcSrvData::RDC_INVAL;
+ } else if (data._state == RegRpcSrvData::XCH_DOADD) {
+ LOG(debug, "done doAdd(%s,%s)", data.name.c_str(), data.spec.c_str());
+ data._state = RegRpcSrvData::RDC_INVAL;
// all OK
- _data->registerRequest->Return();
+ data.registerRequest->Return();
goto alldone;
- } else if (_data->_state == RegRpcSrvData::XCH_IGNORE) {
+ } else if (data._state == RegRpcSrvData::XCH_IGNORE) {
goto alldone;
}
// no other state should be possible
LOG_ABORT("should not be reached");
alldone:
- cleanupReservation();
- delete _data;
- _data = NULL;
+ cleanupReservation(data);
}
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/cmd.h b/slobrok/src/vespa/slobrok/server/cmd.h
index 744d874eed0..07b3d3ee0ba 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.h
+++ b/slobrok/src/vespa/slobrok/server/cmd.h
@@ -2,6 +2,7 @@
#pragma once
#include "ok_state.h"
+#include <memory>
class FRT_RPCRequest;
@@ -20,33 +21,19 @@ struct RegRpcSrvData;
class RegRpcSrvCommand
{
private:
- RegRpcSrvData *_data;
- RegRpcSrvCommand(RegRpcSrvData *data) : _data(data) {}
- void cleanupReservation();
+ std::unique_ptr<RegRpcSrvData> _data;
+ static void cleanupReservation(RegRpcSrvData &);
+ RegRpcSrvCommand(std::unique_ptr<RegRpcSrvData> data);
public:
virtual void doneHandler(OkState result);
void doRequest();
- RegRpcSrvCommand(const RegRpcSrvCommand &rhs)
- : _data(rhs._data)
- {
- }
-
- virtual ~RegRpcSrvCommand() {}
-
- RegRpcSrvCommand& operator=(const RegRpcSrvCommand &rhs)
- {
- _data = rhs._data;
- return *this;
- }
-
- static RegRpcSrvCommand makeRegRpcSrvCmd(SBEnv &env,
- const char *name,
- const char *spec,
- FRT_RPCRequest *req);
- static RegRpcSrvCommand makeRemRemCmd(SBEnv &env,
- const char *name,
- const char *spec);
+ RegRpcSrvCommand(RegRpcSrvCommand &&);
+ RegRpcSrvCommand & operator=(RegRpcSrvCommand &&);
+ virtual ~RegRpcSrvCommand();
+
+ static RegRpcSrvCommand makeRegRpcSrvCmd(SBEnv &env, const std::string &name, const std::string &spec, FRT_RPCRequest *req);
+ static RegRpcSrvCommand makeRemRemCmd(SBEnv &env, const std::string &name, const std::string &spec);
};
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
index f3e06d83282..e74724803e8 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
@@ -13,23 +13,23 @@ namespace slobrok {
//-----------------------------------------------------------------------------
ExchangeManager::ExchangeManager(SBEnv &env, RpcServerMap &rpcsrvmap)
- : _partners(NULL),
+ : _partners(),
_env(env),
_rpcsrvmanager(env._rpcsrvmanager),
_rpcsrvmap(rpcsrvmap)
{
}
+ExchangeManager::~ExchangeManager() = default;
OkState
-ExchangeManager::addPartner(const char *name, const char *spec)
+ExchangeManager::addPartner(const std::string & name, const std::string & spec)
{
- RemoteSlobrok *oldremote = _partners[name];
- if (oldremote != NULL) {
+ RemoteSlobrok *oldremote = lookupPartner(name);
+ if (oldremote != nullptr) {
// already a partner, should be OK
- if (strcmp(spec, oldremote->getSpec()) != 0) {
- return OkState(FRTE_RPC_METHOD_FAILED,
- "name already partner with different spec");
+ if (spec != oldremote->getSpec()) {
+ return OkState(FRTE_RPC_METHOD_FAILED, "name already partner with different spec");
}
// this is probably a good time to try connecting again
if (! oldremote->isConnected()) {
@@ -38,100 +38,81 @@ ExchangeManager::addPartner(const char *name, const char *spec)
return OkState();
}
- RemoteSlobrok *partner = new RemoteSlobrok(name, spec, *this);
- LOG_ASSERT(_partners.isSet(name) == false);
- _partners.set(name, partner);
- partner->tryConnect();
+ LOG_ASSERT(_partners.find(name) == _partners.end());
+ auto newPartner = std::make_unique<RemoteSlobrok>(name, spec, *this);
+ RemoteSlobrok & partner = *newPartner;
+ _partners.emplace(name, std::move(newPartner));
+ partner.tryConnect();
return OkState();
}
-
void
-ExchangeManager::removePartner(const char *name)
+ExchangeManager::removePartner(const std::string & name)
{
// assuming checks already done
- RemoteSlobrok *oldremote = _partners.remove(name);
- LOG_ASSERT(oldremote != NULL);
- delete oldremote;
+ auto oldremote = std::move(_partners[name]);
+ LOG_ASSERT(oldremote);
+ _partners.erase(name);
}
-
std::vector<std::string>
ExchangeManager::getPartnerList()
{
std::vector<std::string> partnerList;
- HashMap<RemoteSlobrok *>::Iterator itr = _partners.iterator();
- for (; itr.valid(); itr.next()) {
- partnerList.push_back(std::string(itr.value()->getSpec()));
+ for (const auto & entry : _partners) {
+ partnerList.push_back(entry.second->getSpec());
}
return partnerList;
}
void
-ExchangeManager::forwardRemove(const char *name, const char *spec)
+ExchangeManager::forwardRemove(const std::string & name, const std::string & spec)
{
- RegRpcSrvCommand remremhandler
- = RegRpcSrvCommand::makeRemRemCmd(_env, name, spec);
- WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE,
- name, spec, *this,
- remremhandler);
- HashMap<RemoteSlobrok *>::Iterator it = _partners.iterator();
- while (it.valid()) {
- RemoteSlobrok *partner = it.value();
- package->addItem(partner);
- it.next();
+ WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE, name, spec, *this,
+ RegRpcSrvCommand::makeRemRemCmd(_env, name, spec));
+ for (const auto & entry : _partners) {
+ package->addItem(entry.second.get());
}
package->expedite();
}
void
-ExchangeManager::doAdd(const char *name, const char *spec,
- RegRpcSrvCommand rdc)
+ExchangeManager::doAdd(const std::string &name, const std::string &spec, RegRpcSrvCommand rdc)
{
- HashMap<RemoteSlobrok *>::Iterator it =
- _partners.iterator();
+ WorkPackage *package = new WorkPackage(WorkPackage::OP_DOADD, name, spec, *this, std::move(rdc));
- WorkPackage *package =
- new WorkPackage(WorkPackage::OP_DOADD, name, spec, *this, rdc);
-
- while (it.valid()) {
- RemoteSlobrok *partner = it.value();
- package->addItem(partner);
- it.next();
+ for (const auto & entry : _partners) {
+ package->addItem(entry.second.get());
}
package->expedite();
}
void
-ExchangeManager::wantAdd(const char *name, const char *spec,
- RegRpcSrvCommand rdc)
+ExchangeManager::wantAdd(const std::string &name, const std::string &spec, RegRpcSrvCommand rdc)
{
- WorkPackage *package =
- new WorkPackage(WorkPackage::OP_WANTADD, name, spec, *this, rdc);
- HashMap<RemoteSlobrok *>::Iterator it = _partners.iterator();
- while (it.valid()) {
- RemoteSlobrok *partner = it.value();
- package->addItem(partner);
- it.next();
+ WorkPackage *package = new WorkPackage(WorkPackage::OP_WANTADD, name, spec, *this, std::move(rdc));
+ for (const auto & entry : _partners) {
+ package->addItem(entry.second.get());
}
package->expedite();
}
+RemoteSlobrok *
+ExchangeManager::lookupPartner(const std::string & name) const {
+ auto found = _partners.find(name);
+ return (found == _partners.end()) ? nullptr : found->second.get();
+}
void
ExchangeManager::healthCheck()
{
- int i=0;
- HashMap<RemoteSlobrok *>::Iterator it = _partners.iterator();
- while (it.valid()) {
- RemoteSlobrok *partner = it.value();
+ for (const auto & entry : _partners) {
+ RemoteSlobrok *partner = entry.second.get();
partner->healthCheck();
- it.next();
- i++;
}
- LOG(debug, "ExchangeManager::healthCheck for %d partners", i);
+ LOG(debug, "ExchangeManager::healthCheck for %ld partners", _partners.size());
}
//-----------------------------------------------------------------------------
@@ -152,8 +133,7 @@ ExchangeManager::WorkPackage::WorkItem::RequestDone(FRT_RPCRequest *req)
if (!req->IsError() && strcmp(answer.GetTypeString(), "is") == 0) {
if (answer[0]._intval32 != 0) {
- LOG(warning, "request denied: %s [%d]",
- answer[1]._string._str, answer[0]._intval32);
+ LOG(warning, "request denied: %s [%d]", answer[1]._string._str, answer[0]._intval32);
denied = true;
} else {
LOG(spam, "request approved");
@@ -163,7 +143,7 @@ ExchangeManager::WorkPackage::WorkItem::RequestDone(FRT_RPCRequest *req)
// XXX tell remslob?
}
req->SubRef();
- _pendingReq = NULL;
+ _pendingReq = nullptr;
_pkg.doneItem(denied);
}
@@ -175,21 +155,19 @@ ExchangeManager::WorkPackage::WorkItem::expedite()
ExchangeManager::WorkPackage::WorkItem::~WorkItem()
{
- if (_pendingReq != NULL) {
+ if (_pendingReq != nullptr) {
_pendingReq->Abort();
- LOG_ASSERT(_pendingReq == NULL);
+ LOG_ASSERT(_pendingReq == nullptr);
}
}
-ExchangeManager::WorkPackage::WorkPackage(op_type op,
- const char *name, const char *spec,
- ExchangeManager &exchanger,
- RegRpcSrvCommand donehandler)
+ExchangeManager::WorkPackage::WorkPackage(op_type op, const std::string & name, const std::string & spec,
+ ExchangeManager &exchanger, RegRpcSrvCommand donehandler)
: _work(),
_doneCnt(0),
_numDenied(0),
- _donehandler(donehandler),
+ _donehandler(std::move(donehandler)),
_exchanger(exchanger),
_optype(op),
_name(name),
@@ -197,13 +175,7 @@ ExchangeManager::WorkPackage::WorkPackage(op_type op,
{
}
-ExchangeManager::WorkPackage::~WorkPackage()
-{
- for (size_t i = 0; i < _work.size(); i++) {
- delete _work[i];
- _work[i] = NULL;
- }
-}
+ExchangeManager::WorkPackage::~WorkPackage() = default;
void
ExchangeManager::WorkPackage::doneItem(bool denied)
@@ -240,15 +212,14 @@ ExchangeManager::WorkPackage::addItem(RemoteSlobrok *partner)
} else if (_optype == OP_DOADD) {
r->SetMethodName("slobrok.internal.doAdd");
}
- r->GetParams()->AddString(_exchanger._env.mySpec());
+ r->GetParams()->AddString(_exchanger._env.mySpec().c_str());
r->GetParams()->AddString(_name.c_str());
r->GetParams()->AddString(_spec.c_str());
- WorkItem *item = new WorkItem(*this, partner, r);
- _work.push_back(item);
+ _work.push_back(std::make_unique<WorkItem>(*this, partner, r));
LOG(spam, "added %s(%s,%s,%s) for %s to workpackage",
- r->GetMethodName(), _exchanger._env.mySpec(),
- _name.c_str(), _spec.c_str(), partner->getName());
+ r->GetMethodName(), _exchanger._env.mySpec().c_str(),
+ _name.c_str(), _spec.c_str(), partner->getName().c_str());
}
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.h b/slobrok/src/vespa/slobrok/server/exchange_manager.h
index 4d7bf4cff15..ea335cbb3c0 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.h
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.h
@@ -1,14 +1,14 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include <deque>
-#include <string>
-
-#include <vespa/vespalib/util/hashmap.h>
#include "ok_state.h"
#include "cmd.h"
#include "remote_slobrok.h"
+#include <deque>
+#include <string>
+#include <unordered_map>
+
namespace slobrok {
//-----------------------------------------------------------------------------
@@ -17,8 +17,6 @@ class SBEnv;
class RpcServerMap;
class RpcServerManager;
-using vespalib::HashMap;
-
//-----------------------------------------------------------------------------
/**
@@ -31,10 +29,8 @@ using vespalib::HashMap;
class ExchangeManager
{
private:
- ExchangeManager(const ExchangeManager &); // Not used
- ExchangeManager &operator=(const ExchangeManager &); // Not used
-
- HashMap<RemoteSlobrok *> _partners;
+ using PartnerMap = std::unordered_map<std::string, std::unique_ptr<RemoteSlobrok>>;
+ PartnerMap _partners;
class WorkPackage;
@@ -48,27 +44,21 @@ private:
class WorkPackage
{
private:
- WorkPackage(const WorkPackage&); // not used
- WorkPackage& operator= (const WorkPackage&); // not used
-
class WorkItem: public FRT_IRequestWait
{
private:
WorkPackage &_pkg;
FRT_RPCRequest *_pendingReq;
RemoteSlobrok *_remslob;
-
- WorkItem(const WorkItem&); // not used
- WorkItem& operator= (const WorkItem&); // not used
public:
void expedite();
void RequestDone(FRT_RPCRequest *req) override;
- WorkItem(WorkPackage &pkg,
- RemoteSlobrok *rem,
- FRT_RPCRequest *req);
+ WorkItem(WorkPackage &pkg, RemoteSlobrok *rem, FRT_RPCRequest *req);
+ WorkItem(const WorkItem&) = delete;
+ WorkItem& operator= (const WorkItem&) = delete;
~WorkItem();
};
- std::vector<WorkItem *> _work;
+ std::vector<std::unique_ptr<WorkItem>> _work;
size_t _doneCnt;
size_t _numDenied;
RegRpcSrvCommand _donehandler;
@@ -81,41 +71,36 @@ private:
void addItem(RemoteSlobrok *partner);
void doneItem(bool denied);
void expedite();
- WorkPackage(op_type op,
- const char *name, const char *spec,
- ExchangeManager &exchanger,
- RegRpcSrvCommand donehandler);
+ WorkPackage(const WorkPackage&) = delete;
+ WorkPackage& operator= (const WorkPackage&) = delete;
+ WorkPackage(op_type op, const std::string & name, const std::string & spec,
+ ExchangeManager &exchanger, RegRpcSrvCommand donehandler);
~WorkPackage();
};
public:
+ ExchangeManager(const ExchangeManager &) = delete;
+ ExchangeManager &operator=(const ExchangeManager &) = delete;
ExchangeManager(SBEnv &env, RpcServerMap &rpcsrvmap);
- ~ExchangeManager() {}
+ ~ExchangeManager();
SBEnv &_env;
RpcServerManager &_rpcsrvmanager;
RpcServerMap &_rpcsrvmap;
- OkState addPartner(const char *name, const char *spec);
- void removePartner(const char *name);
+ OkState addPartner(const std::string & name, const std::string & spec);
+ void removePartner(const std::string & name);
std::vector<std::string> getPartnerList();
- void registerFrom(RemoteSlobrok *partner);
- void reregisterTo(RemoteSlobrok *partner);
+ void forwardRemove(const std::string & name, const std::string & spec);
- void forwardRemove(const char *name, const char *spec);
-
- void wantAdd(const char *name, const char *spec, RegRpcSrvCommand rdc);
- void doAdd(const char *name, const char *spec, RegRpcSrvCommand rdc);
-
- RemoteSlobrok *lookupPartner(const char *name) const {
- return _partners[name];
- }
+ void wantAdd(const std::string & name, const std::string & spec, RegRpcSrvCommand rdc);
+ void doAdd(const std::string & name, const std::string & spec, RegRpcSrvCommand rdc);
+ RemoteSlobrok *lookupPartner(const std::string & name) const;
void healthCheck();
};
//-----------------------------------------------------------------------------
} // namespace slobrok
-
diff --git a/slobrok/src/vespa/slobrok/server/history.cpp b/slobrok/src/vespa/slobrok/server/history.cpp
index 9b4fcedba8b..f23b0cbb757 100644
--- a/slobrok/src/vespa/slobrok/server/history.cpp
+++ b/slobrok/src/vespa/slobrok/server/history.cpp
@@ -22,7 +22,7 @@ History::verify() const
}
void
-History::add(const char *name, vespalib::GenCnt gen)
+History::add(const std::string &name, vespalib::GenCnt gen)
{
HistoryEntry h;
_entries.push_back(h);
diff --git a/slobrok/src/vespa/slobrok/server/history.h b/slobrok/src/vespa/slobrok/server/history.h
index 2790d467b1a..ca90c927dc0 100644
--- a/slobrok/src/vespa/slobrok/server/history.h
+++ b/slobrok/src/vespa/slobrok/server/history.h
@@ -18,12 +18,11 @@ private:
std::vector<HistoryEntry> _entries;
- typedef std::vector<HistoryEntry>::iterator iter_t;
typedef std::vector<HistoryEntry>::const_iterator citer_t;
void verify() const;
public:
- void add(const char *name, vespalib::GenCnt gen);
+ void add(const std::string &name, vespalib::GenCnt gen);
bool has(vespalib::GenCnt gen) const;
diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
index 925df0e9f57..065dac04304 100644
--- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
+++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
@@ -12,14 +12,14 @@ namespace slobrok {
//-----------------------------------------------------------------------------
-ManagedRpcServer::ManagedRpcServer(const char *name,
- const char *spec,
+ManagedRpcServer::ManagedRpcServer(const std::string & name,
+ const std::string & spec,
IRpcServerManager &manager)
: NamedService(name, spec),
_mmanager(manager),
_monitor(*this, *manager.getSupervisor()),
- _monitoredServer(NULL),
- _checkServerReq(NULL)
+ _monitoredServer(nullptr),
+ _checkServerReq(nullptr)
{
}
@@ -27,10 +27,10 @@ ManagedRpcServer::ManagedRpcServer(const char *name,
void
ManagedRpcServer::healthCheck()
{
- if (_monitoredServer == NULL) {
+ if (_monitoredServer == nullptr) {
_monitoredServer = _mmanager.getSupervisor()->GetTarget(_spec.c_str());
}
- if (_checkServerReq == NULL) {
+ if (_checkServerReq == nullptr) {
_checkServerReq = _mmanager.getSupervisor()->AllocRPCRequest();
_checkServerReq->SetMethodName("slobrok.callback.listNamesServed");
_monitoredServer->InvokeAsync(_checkServerReq, 25.0, this);
@@ -49,14 +49,14 @@ void
ManagedRpcServer::cleanupMonitor()
{
_monitor.disable();
- if (_monitoredServer != NULL) {
+ if (_monitoredServer != nullptr) {
_monitoredServer->SubRef();
- _monitoredServer = NULL;
+ _monitoredServer = nullptr;
}
- if (_checkServerReq != NULL) {
+ if (_checkServerReq != nullptr) {
_checkServerReq->Abort();
// _checkServerReq cleared by RequestDone Method
- LOG_ASSERT(_checkServerReq == NULL);
+ LOG_ASSERT(_checkServerReq == nullptr);
}
}
@@ -90,9 +90,9 @@ ManagedRpcServer::RequestDone(FRT_RPCRequest *req)
FRT_Values &answer = *(req->GetReturn());
if (req->GetErrorCode() == FRTE_RPC_ABORT) {
- LOG(debug, "rpcserver[%s].check aborted", getName());
+ LOG(debug, "rpcserver[%s].check aborted", getName().c_str());
req->SubRef();
- _checkServerReq = NULL;
+ _checkServerReq = nullptr;
return;
}
@@ -111,18 +111,18 @@ ManagedRpcServer::RequestDone(FRT_RPCRequest *req)
errmsg = "checkServer failed validation";
}
req->SubRef();
- _checkServerReq = NULL;
+ _checkServerReq = nullptr;
cleanupMonitor();
_mmanager.notifyFailedRpcSrv(this, errmsg);
return;
}
// start monitoring connection to server
- LOG_ASSERT(_monitoredServer != NULL);
+ LOG_ASSERT(_monitoredServer != nullptr);
_monitor.enable(_monitoredServer);
req->SubRef();
- _checkServerReq = NULL;
+ _checkServerReq = nullptr;
_mmanager.notifyOkRpcSrv(this);
}
diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.h b/slobrok/src/vespa/slobrok/server/managed_rpc_server.h
index e8bb8b6e2d8..072aebd7850 100644
--- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.h
+++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.h
@@ -25,14 +25,10 @@ class ManagedRpcServer: public NamedService,
public FRT_IRequestWait,
public IMonitoredServer
{
-private:
- ManagedRpcServer(const ManagedRpcServer&); // Not used
- ManagedRpcServer& operator=(const ManagedRpcServer&); // Not used
-
public:
- ManagedRpcServer(const char *name,
- const char *spec,
- IRpcServerManager &manager);
+ ManagedRpcServer(const ManagedRpcServer&) = delete;
+ ManagedRpcServer& operator=(const ManagedRpcServer&) = delete;
+ ManagedRpcServer(const std::string & name, const std::string & spec, IRpcServerManager &manager);
~ManagedRpcServer();
void healthCheck();
diff --git a/slobrok/src/vespa/slobrok/server/named_service.cpp b/slobrok/src/vespa/slobrok/server/named_service.cpp
index 59c2c31dbdc..c1aeb83a8a5 100644
--- a/slobrok/src/vespa/slobrok/server/named_service.cpp
+++ b/slobrok/src/vespa/slobrok/server/named_service.cpp
@@ -9,8 +9,7 @@ namespace slobrok {
//-----------------------------------------------------------------------------
-NamedService::NamedService(const char *name,
- const char *spec)
+NamedService::NamedService(const std::string & name, const std::string & spec)
: _name(name),
_spec(spec)
{
diff --git a/slobrok/src/vespa/slobrok/server/named_service.h b/slobrok/src/vespa/slobrok/server/named_service.h
index d08b5079ef2..712e340400c 100644
--- a/slobrok/src/vespa/slobrok/server/named_service.h
+++ b/slobrok/src/vespa/slobrok/server/named_service.h
@@ -25,11 +25,11 @@ public:
NamedService(const NamedService &) = delete;
NamedService &operator=(const NamedService &) = delete;
- NamedService(const char *name, const char *spec);
+ NamedService(const std::string & name, const std::string & spec);
virtual ~NamedService();
- const char *getName() const { return _name.c_str(); }
- const char *getSpec() const { return _spec.c_str(); }
+ const std::string & getName() const { return _name; }
+ const std::string & getSpec() const { return _spec; }
};
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp b/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp
index bc33fc900ec..e8569bbae28 100644
--- a/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp
+++ b/slobrok/src/vespa/slobrok/server/remote_slobrok.cpp
@@ -12,57 +12,45 @@
LOG_SETUP(".rpcserver");
namespace slobrok {
-namespace {
-
-class IgnoreReqDone: public FRT_IRequestWait
-{
- void RequestDone(FRT_RPCRequest *req) override {
- req->SubRef();
- }
-};
-
-} // namespace slobrok::<unnamed>
//-----------------------------------------------------------------------------
-RemoteSlobrok::RemoteSlobrok(const char *name, const char *spec,
+RemoteSlobrok::RemoteSlobrok(const std::string &name, const std::string &spec,
ExchangeManager &manager)
: _exchanger(manager),
_rpcsrvmanager(manager._rpcsrvmanager),
- _remote(NULL),
+ _remote(nullptr),
_rpcserver(name, spec, *this),
_reconnecter(getSupervisor()->GetScheduler(), *this),
_failCnt(0),
- _remAddPeerReq(NULL),
- _remListReq(NULL),
- _remAddReq(NULL),
- _remRemReq(NULL),
+ _remAddPeerReq(nullptr),
+ _remListReq(nullptr),
+ _remAddReq(nullptr),
+ _remRemReq(nullptr),
_pending()
{
_rpcserver.healthCheck();
}
-static IgnoreReqDone ignorer;
-
RemoteSlobrok::~RemoteSlobrok()
{
_reconnecter.disable();
- if (_remote != NULL) {
+ if (_remote != nullptr) {
_remote->SubRef();
- _remote = NULL;
+ _remote = nullptr;
}
- if (_remAddPeerReq != NULL) {
+ if (_remAddPeerReq != nullptr) {
_remAddPeerReq->Abort();
}
- if (_remListReq != NULL) {
+ if (_remListReq != nullptr) {
_remListReq->Abort();
}
- if (_remAddReq != NULL) {
+ if (_remAddReq != nullptr) {
_remAddReq->Abort();
}
- if (_remRemReq != NULL) {
+ if (_remRemReq != nullptr) {
_remRemReq->Abort();
}
// _rpcserver destructor called automatically
@@ -72,32 +60,31 @@ RemoteSlobrok::~RemoteSlobrok()
void
RemoteSlobrok::doPending()
{
- LOG_ASSERT(_remAddReq == NULL);
- LOG_ASSERT(_remRemReq == NULL);
+ LOG_ASSERT(_remAddReq == nullptr);
+ LOG_ASSERT(_remRemReq == nullptr);
- if (_pending.size() > 0) {
- NamedService *todo = _pending.front();
+ if ( ! _pending.empty() ) {
+ std::unique_ptr<NamedService> todo = std::move(_pending.front());
_pending.pop_front();
- NamedService *rpcsrv = _exchanger._rpcsrvmap.lookup(todo->getName());
+ const NamedService *rpcsrv = _exchanger._rpcsrvmap.lookup(todo->getName());
- if (rpcsrv == NULL) {
+ if (rpcsrv == nullptr) {
_remRemReq = getSupervisor()->AllocRPCRequest();
_remRemReq->SetMethodName("slobrok.internal.doRemove");
- _remRemReq->GetParams()->AddString(_exchanger._env.mySpec());
- _remRemReq->GetParams()->AddString(todo->getName());
- _remRemReq->GetParams()->AddString(todo->getSpec());
+ _remRemReq->GetParams()->AddString(_exchanger._env.mySpec().c_str());
+ _remRemReq->GetParams()->AddString(todo->getName().c_str());
+ _remRemReq->GetParams()->AddString(todo->getSpec().c_str());
_remote->InvokeAsync(_remRemReq, 2.0, this);
} else {
_remAddReq = getSupervisor()->AllocRPCRequest();
_remAddReq->SetMethodName("slobrok.internal.doAdd");
- _remAddReq->GetParams()->AddString(_exchanger._env.mySpec());
- _remAddReq->GetParams()->AddString(todo->getName());
- _remAddReq->GetParams()->AddString(rpcsrv->getSpec());
+ _remAddReq->GetParams()->AddString(_exchanger._env.mySpec().c_str());
+ _remAddReq->GetParams()->AddString(todo->getName().c_str());
+ _remAddReq->GetParams()->AddString(rpcsrv->getSpec().c_str());
_remote->InvokeAsync(_remAddReq, 2.0, this);
}
// XXX should save this and pick up on RequestDone()
- delete todo;
}
}
@@ -110,8 +97,7 @@ RemoteSlobrok::pushMine()
while (mine.size() > 0) {
const NamedService *now = mine.back();
mine.pop_back();
- NamedService *copy = new NamedService(now->getName(), now->getSpec());
- _pending.push_back(copy);
+ _pending.push_back(std::make_unique<NamedService>(now->getName(), now->getSpec()));
}
doPending();
}
@@ -127,19 +113,18 @@ RemoteSlobrok::RequestDone(FRT_RPCRequest *req)
const char *myname = args[0]._string._str;
const char *myspec = args[1]._string._str;
LOG(error, "addPeer(%s, %s) on remote slobrok %s at %s: %s",
- myname, myspec, getName(), getSpec(),
- req->GetErrorMessage());
+ myname, myspec, getName().c_str(), getSpec().c_str(), req->GetErrorMessage());
req->SubRef();
- _remAddPeerReq = NULL;
+ _remAddPeerReq = nullptr;
goto retrylater;
}
req->SubRef();
- _remAddPeerReq = NULL;
+ _remAddPeerReq = nullptr;
// next step is to ask the remote to send its list of managed names:
- LOG_ASSERT(_remListReq == NULL);
+ LOG_ASSERT(_remListReq == nullptr);
_remListReq = getSupervisor()->AllocRPCRequest();
_remListReq->SetMethodName("slobrok.internal.listManagedRpcServers");
- if (_remote != NULL) {
+ if (_remote != nullptr) {
_remote->InvokeAsync(_remListReq, 3.0, this);
}
// when _remListReq is returned, our managed list is added
@@ -149,19 +134,18 @@ RemoteSlobrok::RequestDone(FRT_RPCRequest *req)
|| strcmp(answer.GetTypeString(), "SS") != 0)
{
LOG(error, "error listing remote slobrok %s at %s: %s",
- getName(), getSpec(), req->GetErrorMessage());
+ getName().c_str(), getSpec().c_str(), req->GetErrorMessage());
req->SubRef();
- _remListReq = NULL;
+ _remListReq = nullptr;
goto retrylater;
}
uint32_t numNames = answer.GetValue(0)._string_array._len;
uint32_t numSpecs = answer.GetValue(1)._string_array._len;
if (numNames != numSpecs) {
- LOG(error, "inconsistent array lengths from %s at %s",
- getName(), getSpec());
+ LOG(error, "inconsistent array lengths from %s at %s", getName().c_str(), getSpec().c_str());
req->SubRef();
- _remListReq = NULL;
+ _remListReq = nullptr;
goto retrylater;
}
FRT_StringValue *names = answer.GetValue(0)._string_array._pt;
@@ -171,7 +155,7 @@ RemoteSlobrok::RequestDone(FRT_RPCRequest *req)
_rpcsrvmanager.addRemote(names[idx]._str, specs[idx]._str);
}
req->SubRef();
- _remListReq = NULL;
+ _remListReq = nullptr;
// next step is to push the ones I own:
pushMine();
@@ -180,10 +164,9 @@ RemoteSlobrok::RequestDone(FRT_RPCRequest *req)
if (req->IsError() && (req->GetErrorCode() == FRTE_RPC_CONNECTION ||
req->GetErrorCode() == FRTE_RPC_TIMEOUT))
{
- LOG(error, "connection error adding to remote slobrok: %s",
- req->GetErrorMessage());
+ LOG(error, "connection error adding to remote slobrok: %s", req->GetErrorMessage());
req->SubRef();
- _remAddReq = NULL;
+ _remAddReq = nullptr;
goto retrylater;
}
if (req->IsError()) {
@@ -195,29 +178,27 @@ RemoteSlobrok::RequestDone(FRT_RPCRequest *req)
_rpcsrvmanager.removeLocal(rpcsrvname, rpcsrvspec);
}
req->SubRef();
- _remAddReq = NULL;
+ _remAddReq = nullptr;
doPending();
} else if (req == _remRemReq) {
// handle response after pushing some remove we had pending:
if (req->IsError() && (req->GetErrorCode() == FRTE_RPC_CONNECTION ||
req->GetErrorCode() == FRTE_RPC_TIMEOUT))
{
- LOG(error, "connection error adding to remote slobrok: %s",
- req->GetErrorMessage());
+ LOG(error, "connection error adding to remote slobrok: %s", req->GetErrorMessage());
req->SubRef();
- _remRemReq = NULL;
+ _remRemReq = nullptr;
goto retrylater;
}
if (req->IsError()) {
- LOG(warning, "error removing on remote slobrok: %s",
- req->GetErrorMessage());
+ LOG(warning, "error removing on remote slobrok: %s", req->GetErrorMessage());
}
req->SubRef();
- _remRemReq = NULL;
+ _remRemReq = nullptr;
doPending();
} else {
LOG(error, "got unknown request back in RequestDone()");
- LOG_ASSERT(req == NULL);
+ LOG_ASSERT(req == nullptr);
}
return;
@@ -232,10 +213,10 @@ RemoteSlobrok::notifyFailedRpcSrv(ManagedRpcServer *rpcsrv, std::string errmsg)
{
if (++_failCnt > 10) {
LOG(warning, "remote location broker at %s failed: %s",
- rpcsrv->getSpec(), errmsg.c_str());
+ rpcsrv->getSpec().c_str(), errmsg.c_str());
} else {
LOG(debug, "remote location broker at %s failed: %s",
- rpcsrv->getSpec(), errmsg.c_str());
+ rpcsrv->getSpec().c_str(), errmsg.c_str());
}
LOG_ASSERT(rpcsrv == &_rpcserver);
fail();
@@ -246,9 +227,9 @@ void
RemoteSlobrok::fail()
{
// disconnect
- if (_remote != NULL) {
+ if (_remote != nullptr) {
_remote->SubRef();
- _remote = NULL;
+ _remote = nullptr;
}
// schedule reconnect attempt
_reconnecter.scheduleTryConnect();
@@ -258,13 +239,13 @@ RemoteSlobrok::fail()
void
RemoteSlobrok::healthCheck()
{
- if (_remote != NULL &&
- _remAddPeerReq == NULL &&
- _remListReq == NULL &&
- _remAddReq == NULL &&
- _remRemReq == NULL)
+ if (_remote != nullptr &&
+ _remAddPeerReq == nullptr &&
+ _remListReq == nullptr &&
+ _remAddReq == nullptr &&
+ _remRemReq == nullptr)
{
- LOG(debug, "spamming remote at %s with my names", getName());
+ LOG(debug, "spamming remote at %s with my names", getName().c_str());
pushMine();
} else {
LOG(debug, "not pushing mine, as we have: remote %p r.a.p.r=%p r.l.r=%p r.a.r=%p r.r.r=%p",
@@ -282,8 +263,8 @@ RemoteSlobrok::notifyOkRpcSrv(ManagedRpcServer *rpcsrv)
// connection was OK, so disable any pending reconnect
_reconnecter.disable();
- if (_remote == NULL) {
- _remote = getSupervisor()->GetTarget(getSpec());
+ if (_remote == nullptr) {
+ _remote = getSupervisor()->GetTarget(getSpec().c_str());
}
// at this point, we will do (in sequence):
@@ -294,8 +275,8 @@ RemoteSlobrok::notifyOkRpcSrv(ManagedRpcServer *rpcsrv)
_remAddPeerReq = getSupervisor()->AllocRPCRequest();
_remAddPeerReq->SetMethodName("slobrok.admin.addPeer");
- _remAddPeerReq->GetParams()->AddString(_exchanger._env.mySpec());
- _remAddPeerReq->GetParams()->AddString(_exchanger._env.mySpec());
+ _remAddPeerReq->GetParams()->AddString(_exchanger._env.mySpec().c_str());
+ _remAddPeerReq->GetParams()->AddString(_exchanger._env.mySpec().c_str());
_remote->InvokeAsync(_remAddPeerReq, 3.0, this);
// when _remAddPeerReq is returned, our managed list is added via doAdd()
}
diff --git a/slobrok/src/vespa/slobrok/server/remote_slobrok.h b/slobrok/src/vespa/slobrok/server/remote_slobrok.h
index 1851e57c93c..a5d17e0452b 100644
--- a/slobrok/src/vespa/slobrok/server/remote_slobrok.h
+++ b/slobrok/src/vespa/slobrok/server/remote_slobrok.h
@@ -26,9 +26,6 @@ class RemoteSlobrok: public IRpcServerManager,
public FRT_IRequestWait
{
private:
- RemoteSlobrok(const RemoteSlobrok&); // not used
- RemoteSlobrok& operator= (const RemoteSlobrok&); // not used
-
class Reconnecter : public FNET_Task
{
private:
@@ -38,13 +35,12 @@ private:
Reconnecter &operator=(const Reconnecter &); // not used
public:
explicit Reconnecter(FNET_Scheduler *sched, RemoteSlobrok &owner);
- ~Reconnecter();
+ ~Reconnecter() override;
void scheduleTryConnect();
void disable();
void PerformTask() override;
};
-private:
ExchangeManager &_exchanger;
RpcServerManager &_rpcsrvmanager;
FRT_Target *_remote;
@@ -57,24 +53,23 @@ private:
FRT_RPCRequest *_remAddReq;
FRT_RPCRequest *_remRemReq;
- std::deque<NamedService *> _pending;
+ std::deque<std::unique_ptr<NamedService>> _pending;
void pushMine();
void doPending();
public:
- RemoteSlobrok(const char *name, const char *spec,
- ExchangeManager &manager);
- ~RemoteSlobrok();
+ RemoteSlobrok(const RemoteSlobrok&) = delete;
+ RemoteSlobrok& operator= (const RemoteSlobrok&) = delete;
+ RemoteSlobrok(const std::string &name, const std::string &spec, ExchangeManager &manager);
+ ~RemoteSlobrok() override;
void fail();
- bool isConnected() const { return (_remote != NULL); }
+ bool isConnected() const { return (_remote != nullptr); }
void tryConnect();
void healthCheck();
- void invokeAsync(FRT_RPCRequest *req,
- double timeout,
- FRT_IRequestWait *rwaiter);
- const char *getName() const { return _rpcserver.getName(); }
- const char *getSpec() const { return _rpcserver.getSpec(); }
+ void invokeAsync(FRT_RPCRequest *req, double timeout, FRT_IRequestWait *rwaiter);
+ const std::string & getName() const { return _rpcserver.getName(); }
+ const std::string & getSpec() const { return _rpcserver.getSpec(); }
// interfaces implemented:
void notifyFailedRpcSrv(ManagedRpcServer *rpcsrv, std::string errmsg) override;
diff --git a/slobrok/src/vespa/slobrok/server/reserved_name.h b/slobrok/src/vespa/slobrok/server/reserved_name.h
index 7761dc37918..1ebed4b94dc 100644
--- a/slobrok/src/vespa/slobrok/server/reserved_name.h
+++ b/slobrok/src/vespa/slobrok/server/reserved_name.h
@@ -22,15 +22,15 @@ private:
public:
const bool isLocal;
- ReservedName(const char *name, const char *spec, bool local)
+ ReservedName(const std::string &name, const std::string &spec, bool local)
: NamedService(name, spec), _reservedTime(), isLocal(local)
{
_reservedTime.SetNow();
}
- bool stillReserved() {
+ bool stillReserved() const {
return (_reservedTime.MilliSecsToNow() < 15000);
}
- int seconds() { return _reservedTime.MilliSecsToNow() / 1000; }
+ int seconds() const { return _reservedTime.MilliSecsToNow() / 1000; }
};
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
index 293975cc82a..e63efd8089a 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
@@ -24,15 +24,15 @@ RpcServerManager::RpcServerManager(SBEnv &sbenv)
}
static OkState
-validateName(const char *rpcsrvname)
+validateName(const std::string & rpcsrvname)
{
- const char *p = rpcsrvname;
+ const char *p = rpcsrvname.c_str();
while (*p != '\0') {
// important: disallow '*'
if (strchr("+,-./:=@[]_{}~<>"
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz", *p) == NULL)
+ "abcdefghijklmnopqrstuvwxyz", *p) == nullptr)
{
std::ostringstream tmp;
tmp << "Illegal character '" << *p << "' (";
@@ -49,22 +49,20 @@ validateName(const char *rpcsrvname)
OkState
-RpcServerManager::checkPartner(const char *remslobrok)
+RpcServerManager::checkPartner(const std::string & remslobrok)
{
- if (strcmp(remslobrok, _env.mySpec()) == 0) {
+ if (remslobrok == _env.mySpec()) {
return OkState(13, "remote slobrok using my rpcserver name");
}
- RemoteSlobrok *partner = _exchanger.lookupPartner(remslobrok);
- if (partner == NULL) {
+ const RemoteSlobrok *partner = _exchanger.lookupPartner(remslobrok);
+ if (partner == nullptr) {
return OkState(13, "remote slobrok not a partner");
}
return OkState();
}
OkState
-RpcServerManager::addRemReservation(const char *remslobrok,
- const char *name,
- const char *spec)
+RpcServerManager::addRemReservation(const std::string & remslobrok, const std::string & name, const std::string &spec)
{
OkState state = checkPartner(remslobrok);
if (state.failed()) return state;
@@ -72,31 +70,28 @@ RpcServerManager::addRemReservation(const char *remslobrok,
OkState valid = validateName(name);
if (valid.failed()) return valid;
- NamedService *old = _rpcsrvmap.lookupManaged(name);
- if (old != NULL) {
- if (strcmp(old->getSpec(), spec) == 0) {
+ const NamedService *old = _rpcsrvmap.lookupManaged(name);
+ if (old != nullptr) {
+ if (old->getSpec() == spec) {
// was alright already
return OkState(0, "already registered");
}
LOG(warning, "remote %s tried to register [%s -> %s] but we already have [%s -> %s] registered!",
- remslobrok, name, spec, old->getName(), old->getSpec());
+ remslobrok.c_str(), name.c_str(), spec.c_str(), old->getName().c_str(), old->getSpec().c_str());
return OkState(FRTE_RPC_METHOD_FAILED, "already managed by me");
}
if (_rpcsrvmap.conflictingReservation(name, spec)) {
- return OkState(FRTE_RPC_METHOD_FAILED,
- "registration for name already in progress");
+ return OkState(FRTE_RPC_METHOD_FAILED, "registration for name already in progress");
}
- ReservedName *rpcsrv = new ReservedName(name, spec, false);
- _rpcsrvmap.addReservation(rpcsrv);
+ _rpcsrvmap.addReservation(std::make_unique<ReservedName>(name, spec, false));
return OkState(0, "done");
}
OkState
-RpcServerManager::addPeer(const char *remsbname,
- const char *remsbspec)
+RpcServerManager::addPeer(const std::string & remsbname, const std::string &remsbspec)
{
- if (strcmp(remsbname, _env.mySpec()) == 0) {
+ if (remsbname == _env.mySpec()) {
return OkState(13, "cannot add remote slobrok with my rpcserver name");
}
return _exchanger.addPartner(remsbname, remsbspec);
@@ -104,17 +99,16 @@ RpcServerManager::addPeer(const char *remsbname,
OkState
-RpcServerManager::removePeer(const char *remsbname,
- const char *remsbspec)
+RpcServerManager::removePeer(const std::string & remsbname, const std::string & remsbspec)
{
- if (strcmp(remsbname, _env.mySpec()) == 0) {
+ if (remsbname == _env.mySpec()) {
return OkState(13, "cannot remove my own rpcserver name");
}
- RemoteSlobrok *partner = _exchanger.lookupPartner(remsbname);
- if (partner == NULL) {
+ const RemoteSlobrok *partner = _exchanger.lookupPartner(remsbname);
+ if (partner == nullptr) {
return OkState(0, "remote slobrok not a partner");
}
- if (strcmp(partner->getSpec(), remsbspec) != 0) {
+ if (partner->getSpec() != remsbspec) {
return OkState(13, "peer registered with different spec");
}
_exchanger.removePartner(remsbname);
@@ -123,41 +117,39 @@ RpcServerManager::removePeer(const char *remsbname,
OkState
-RpcServerManager::addMyReservation(const char *name, const char *spec)
+RpcServerManager::addMyReservation(const std::string & name, const std::string & spec)
{
OkState valid = validateName(name);
if (valid.failed()) return valid;
- NamedService *old = _rpcsrvmap.lookupManaged(name);
- if (old != NULL) {
- if (strcmp(old->getSpec(), spec) == 0) {
+ const NamedService *old = _rpcsrvmap.lookupManaged(name);
+ if (old != nullptr) {
+ if (old->getSpec() == spec) {
// was alright already
return OkState(0, "already registered");
} else {
return OkState(FRTE_RPC_METHOD_FAILED, vespalib::make_string(
"name %s registered (to %s), cannot register %s",
- name, old->getSpec(), spec));
+ name.c_str(), old->getSpec().c_str(), spec.c_str()));
}
}
// check if we already are in the progress of adding this
if (_rpcsrvmap.conflictingReservation(name, spec)) {
- ReservedName * rsv = _rpcsrvmap.getReservation(name);
+ const ReservedName * rsv = _rpcsrvmap.getReservation(name);
LOG(warning, "conflicting registrations: wanted [%s -> %s] but [%s -> %s] already reserved",
- name, spec, rsv->getName(), rsv->getSpec());
+ name.c_str(), spec.c_str(), rsv->getName().c_str(), rsv->getSpec().c_str());
return OkState(FRTE_RPC_METHOD_FAILED,
"registration for name already in progress with a different spec");
}
_rpcsrvmap.removeReservation(name);
- ReservedName *rpcsrv = new ReservedName(name, spec, true);
- _rpcsrvmap.addReservation(rpcsrv);
+ _rpcsrvmap.addReservation(std::make_unique<ReservedName>(name, spec, true));
return OkState(0, "done");
}
OkState
-RpcServerManager::addRemote(const char *name,
- const char *spec)
+RpcServerManager::addRemote(const std::string & name, const std::string &spec)
{
OkState valid = validateName(name);
if (valid.failed()) return valid;
@@ -165,13 +157,12 @@ RpcServerManager::addRemote(const char *name,
if (alreadyManaged(name, spec)) {
return OkState(0, "already correct");
}
- NamedService *old = _rpcsrvmap.lookup(name);
- if (old != NULL) {
- if (strcmp(old->getSpec(), spec) != 0) {
- LOG(warning, "collision on remote add: "
- "name %s registered to %s locally, "
+ const NamedService *old = _rpcsrvmap.lookup(name);
+ if (old != nullptr) {
+ if (old->getSpec() != spec) {
+ LOG(warning, "collision on remote add: name %s registered to %s locally, "
"but another location broker wants it registered to %s",
- name, old->getSpec(), spec);
+ name.c_str(), old->getSpec().c_str(), spec.c_str());
removeRemote(name, old->getSpec());
return OkState(13, "registered, with different spec");
}
@@ -180,16 +171,17 @@ RpcServerManager::addRemote(const char *name,
return OkState(0, "already correct");
}
_rpcsrvmap.removeReservation(name);
- ManagedRpcServer *rpcsrv = new ManagedRpcServer(name, spec, *this);
- _rpcsrvmap.addNew(rpcsrv);
- rpcsrv->healthCheck();
+ auto rpcsrv = std::make_unique<ManagedRpcServer>(name, spec, *this);
+ ManagedRpcServer & rpcServer = *rpcsrv;
+ _rpcsrvmap.addNew(std::move(rpcsrv));
+ rpcServer.healthCheck();
return OkState(0, "done");
}
OkState
RpcServerManager::remove(ManagedRpcServer *rpcsrv)
{
- NamedService *td = _rpcsrvmap.lookup(rpcsrv->getName());
+ const NamedService *td = _rpcsrvmap.lookup(rpcsrv->getName());
if (td == rpcsrv) {
return removeLocal(rpcsrv->getName(), rpcsrv->getSpec());
} else {
@@ -199,84 +191,80 @@ RpcServerManager::remove(ManagedRpcServer *rpcsrv)
OkState
-RpcServerManager::removeRemote(const char *name,
- const char *spec)
+RpcServerManager::removeRemote(const std::string &name, const std::string &spec)
{
- NamedService *old = _rpcsrvmap.lookup(name);
- if (old == NULL) {
+ const NamedService *old = _rpcsrvmap.lookup(name);
+ if (old == nullptr) {
// was alright already, remove any reservation too
_rpcsrvmap.removeReservation(name);
return OkState(0, "already done");
}
- if (strcmp(old->getSpec(), spec) != 0) {
+ if (old->getSpec() != spec) {
return OkState(1, "name registered, but with different spec");
}
- NamedService *td = _rpcsrvmap.remove(name);
- LOG_ASSERT(td == old);
- delete td;
+ std::unique_ptr<NamedService> td = _rpcsrvmap.remove(name);
+ LOG_ASSERT(td.get() == old);
return OkState(0, "done");
}
OkState
-RpcServerManager::removeLocal(const char *name, const char *spec)
+RpcServerManager::removeLocal(const std::string & name, const std::string &spec)
{
- NamedService *td = _rpcsrvmap.lookup(name);
- if (td == NULL) {
+ const NamedService *td = _rpcsrvmap.lookup(name);
+ if (td == nullptr) {
// already removed, nop
return OkState();
}
- RemoteSlobrok *partner = _exchanger.lookupPartner(name);
- if (partner != NULL) {
+ const RemoteSlobrok *partner = _exchanger.lookupPartner(name);
+ if (partner != nullptr) {
return OkState(13, "cannot unregister partner slobrok");
}
- ManagedRpcServer *rpcsrv = _rpcsrvmap.lookupManaged(name);
- if (rpcsrv == NULL) {
+ const ManagedRpcServer *rpcsrv = _rpcsrvmap.lookupManaged(name);
+ if (rpcsrv == nullptr) {
return OkState(13, "not a local rpcserver");
}
- if (strcmp(rpcsrv->getSpec(), spec) != 0) {
+ if (rpcsrv->getSpec() != spec) {
// the client can probably ignore this "error"
// or log it on level INFO?
return OkState(1, "name registered, but with different spec");
}
- td = _rpcsrvmap.remove(name);
- LOG_ASSERT(td == rpcsrv);
- delete rpcsrv;
+ auto tdUP = _rpcsrvmap.remove(name);
+ LOG_ASSERT(tdUP.get() == rpcsrv);
_exchanger.forwardRemove(name, spec);
return OkState();
}
void
-RpcServerManager::addManaged(const char *name, const char *spec,
- RegRpcSrvCommand rdc)
+RpcServerManager::addManaged(const std::string &name, const std::string &spec, RegRpcSrvCommand rdc)
{
- ManagedRpcServer *rpcsrv = new ManagedRpcServer(name, spec, *this);
- _rpcsrvmap.addNew(rpcsrv);
+ auto newRpcServer = std::make_unique<ManagedRpcServer>(name, spec, *this);
+ ManagedRpcServer & rpcsrv = *newRpcServer;
+ _rpcsrvmap.addNew(std::move(newRpcServer));
for (size_t i = 0; i < _addManageds.size(); i++) {
- if (_addManageds[i].rpcsrv == NULL) {
- _addManageds[i].rpcsrv = rpcsrv;
- _addManageds[i].handler = rdc;
- rpcsrv->healthCheck();
+ if (_addManageds[i].rpcsrv == nullptr) {
+ _addManageds[i].rpcsrv = &rpcsrv;
+ _addManageds[i].handler = std::move(rdc);
+ rpcsrv.healthCheck();
return;
}
}
- MRSandRRSC pair(rpcsrv, rdc);
- _addManageds.push_back(pair);
- rpcsrv->healthCheck();
+ _addManageds.emplace_back(&rpcsrv, std::move(rdc));
+ rpcsrv.healthCheck();
return;
}
bool
-RpcServerManager::alreadyManaged(const char *name, const char *spec)
+RpcServerManager::alreadyManaged(const std::string &name, const std::string &spec)
{
- ManagedRpcServer *rpcsrv = _rpcsrvmap.lookupManaged(name);
- if (rpcsrv != NULL) {
- if (strcmp(rpcsrv->getSpec(), spec) == 0) {
+ const ManagedRpcServer *rpcsrv = _rpcsrvmap.lookupManaged(name);
+ if (rpcsrv != nullptr) {
+ if (rpcsrv->getSpec() == spec) {
return true;
}
}
@@ -294,11 +282,8 @@ RpcServerManager::~RpcServerManager()
void
RpcServerManager::PerformTask()
{
- std::vector<ManagedRpcServer *> dl;
- std::swap(dl, _deleteList);
- for (uint32_t i = 0; i < dl.size(); ++i) {
- delete dl[i];
- }
+ std::vector<std::unique_ptr<ManagedRpcServer>> deleteAfterSwap;
+ std::swap(deleteAfterSwap, _deleteList);
}
@@ -307,12 +292,12 @@ RpcServerManager::notifyFailedRpcSrv(ManagedRpcServer *rpcsrv, std::string errms
{
_env.countFailedHeartbeat();
bool logged = false;
- NamedService *old = _rpcsrvmap.lookup(rpcsrv->getName());
+ const NamedService *old = _rpcsrvmap.lookup(rpcsrv->getName());
if (old == rpcsrv) {
- old = _rpcsrvmap.remove(rpcsrv->getName());
+ old = _rpcsrvmap.remove(rpcsrv->getName()).release();
LOG_ASSERT(old == rpcsrv);
LOG(info, "managed server %s at %s failed: %s",
- rpcsrv->getName(), rpcsrv->getSpec(), errmsg.c_str());
+ rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str(), errmsg.c_str());
logged = true;
}
_exchanger.forwardRemove(rpcsrv->getName(), rpcsrv->getSpec());
@@ -322,15 +307,15 @@ RpcServerManager::notifyFailedRpcSrv(ManagedRpcServer *rpcsrv, std::string errms
.doneHandler(OkState(13, "failed check using listNames callback"));
_addManageds[i].rpcsrv = 0;
LOG(warning, "rpcserver %s at %s failed while trying to register",
- rpcsrv->getName(), rpcsrv->getSpec());
+ rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str());
logged = true;
}
}
if (!logged) {
LOG(warning, "unmanaged server %s at %s failed: %s",
- rpcsrv->getName(), rpcsrv->getSpec(), errmsg.c_str());
+ rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str(), errmsg.c_str());
}
- _deleteList.push_back(rpcsrv);
+ _deleteList.push_back(std::unique_ptr<ManagedRpcServer>(rpcsrv));
ScheduleNow();
}
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
index a01e1592690..70ca10e480d 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
@@ -7,6 +7,7 @@
#include "named_service.h"
#include <vespa/fnet/task.h>
#include <vector>
+#include <memory>
namespace slobrok {
@@ -39,60 +40,30 @@ private:
ManagedRpcServer *rpcsrv;
RegRpcSrvCommand handler;
MRSandRRSC(ManagedRpcServer *d, RegRpcSrvCommand h)
- : rpcsrv(d), handler(h) {}
-
- MRSandRRSC(const MRSandRRSC &rhs)
- : rpcsrv(rhs.rpcsrv),
- handler(rhs.handler)
- {
- }
-
- MRSandRRSC& operator=(const MRSandRRSC &rhs)
- {
- rpcsrv = rhs.rpcsrv;
- handler = rhs.handler;
- return *this;
- }
+ : rpcsrv(d), handler(std::move(h)) {}
};
std::vector<MRSandRRSC> _addManageds;
- std::vector<ManagedRpcServer *> _deleteList;
-
- RpcServerManager(const RpcServerManager &); // Not used
- RpcServerManager &operator=(const RpcServerManager &); // Not used
-
+ std::vector<std::unique_ptr<ManagedRpcServer>> _deleteList;
public:
- OkState checkPartner(const char *remslobrok);
-
- OkState addPeer(const char *remsbname,
- const char *remsbspec);
- OkState removePeer(const char *remsbname,
- const char *remsbspec);
+ OkState checkPartner(const std::string & remslobrok);
- OkState addLocal(const char *name,
- const char *spec,
- FRT_RPCRequest *req);
- OkState addRemote(const char *name,
- const char *spec);
+ OkState addPeer(const std::string & remsbname, const std::string & remsbspec);
+ OkState removePeer(const std::string & remsbname, const std::string & remsbspec);
+ OkState addRemote(const std::string & name, const std::string & spec);
- OkState addRemReservation(const char *remslobrok,
- const char *name,
- const char *spec);
- OkState addMyReservation(const char *name,
- const char *spec);
+ OkState addRemReservation(const std::string & remslobrok, const std::string & name, const std::string & spec);
+ OkState addMyReservation(const std::string & name, const std::string & spec);
- bool alreadyManaged(const char *name,
- const char *spec);
- void addManaged(const char *name,
- const char *spec,
- RegRpcSrvCommand rdc);
+ bool alreadyManaged(const std::string & name, const std::string & spec);
+ void addManaged(const std::string & name, const std::string & spec, RegRpcSrvCommand rdc);
OkState remove(ManagedRpcServer *rpcsrv);
- OkState removeLocal(const char *name, const char *spec);
-
- OkState removeRemote(const char *name,
- const char *spec);
+ OkState removeLocal(const std::string & name, const std::string & spec);
+ OkState removeRemote(const std::string & name, const std::string & spec);
+ RpcServerManager(const RpcServerManager &) = delete;
+ RpcServerManager &operator=(const RpcServerManager &) = delete;
RpcServerManager(SBEnv &sbenv);
~RpcServerManager();
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp
index 06c5698ec09..e19a91cd78d 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.cpp
@@ -12,33 +12,34 @@ namespace slobrok {
//-----------------------------------------------------------------------------
-NamedService *
-RpcServerMap::lookup(const char *name) const
-{
- NamedService *d = _myrpcsrv_map[name];
- return d;
+ManagedRpcServer *
+RpcServerMap::lookupManaged(const std::string & name) const {
+ auto found = _myrpcsrv_map.find(name);
+ return (found == _myrpcsrv_map.end()) ? nullptr : found->second.get();
}
+const NamedService *
+RpcServerMap::lookup(const std::string & name) const
+{
+ return lookupManaged(name);
+}
-NamedService *
-RpcServerMap::remove(const char *name)
+std::unique_ptr<NamedService>
+RpcServerMap::remove(const std::string & name)
{
_visible_map.remove(name);
- NamedService *d = _myrpcsrv_map.remove(name);
- return d;
+ auto service = std::move(_myrpcsrv_map[name]);
+ _myrpcsrv_map.erase(name);
+ return service;
}
-
-
std::vector<const NamedService *>
RpcServerMap::lookupPattern(const char *pattern) const
{
std::vector<const NamedService *> retval;
- for (HashMap<ManagedRpcServer *>::Iterator it = _myrpcsrv_map.iterator();
- it.valid(); it.next())
- {
- if (match(it.key(), pattern)) {
- retval.push_back(it.value());
+ for (const auto & entry : _myrpcsrv_map) {
+ if (match(entry.first.c_str(), pattern)) {
+ retval.push_back(entry.second.get());
}
}
return retval;
@@ -50,10 +51,8 @@ RpcServerMap::allManaged() const
{
std::vector<const NamedService *> retval;
// get list of all names in myrpcsrv_map
- for (HashMap<ManagedRpcServer *>::Iterator it = _myrpcsrv_map.iterator();
- it.valid(); it.next())
- {
- retval.push_back(it.value());
+ for (const auto & entry : _myrpcsrv_map) {
+ retval.push_back(entry.second.get());
}
return retval;
}
@@ -62,104 +61,98 @@ RpcServerMap::allManaged() const
void
RpcServerMap::add(NamedService *rpcsrv)
{
- const char *name = rpcsrv->getName();
+ const std::string &name = rpcsrv->getName();
- LOG_ASSERT(rpcsrv != NULL);
- LOG_ASSERT(_myrpcsrv_map.isSet(name) == false);
+ LOG_ASSERT(rpcsrv != nullptr);
+ LOG_ASSERT(_myrpcsrv_map.find(name) == _myrpcsrv_map.end());
removeReservation(name);
- LOG_ASSERT(_visible_map.lookup(name) == NULL);
+ LOG_ASSERT(_visible_map.lookup(name) == nullptr);
_visible_map.addNew(rpcsrv);
}
void
-RpcServerMap::addNew(ManagedRpcServer *rpcsrv)
+RpcServerMap::addNew(std::unique_ptr<ManagedRpcServer> rpcsrv)
{
- const char *name = rpcsrv->getName();
+ const std::string &name = rpcsrv->getName();
- ManagedRpcServer *oldman = _myrpcsrv_map.remove(name);
+ auto oldman = std::move(_myrpcsrv_map[name]);
+ _myrpcsrv_map.erase(name);
- if (oldman != NULL) {
- ReservedName *oldres = _reservations[name];
- NamedService *oldvis = _visible_map.remove(name);
+ if (oldman) {
+ const ReservedName *oldres = _reservations[name].get();
+ const NamedService *oldvis = _visible_map.remove(name);
- const char *spec = rpcsrv->getSpec();
- const char *oldname = oldman->getName();
- const char *oldspec = oldman->getSpec();
- if (strcmp(spec, oldspec) != 0) {
+ const std::string &spec = rpcsrv->getSpec();
+ const std::string &oldname = oldman->getName();
+ const std::string &oldspec = oldman->getSpec();
+ if (spec != oldspec) {
LOG(warning, "internal state problem: adding [%s at %s] but already had [%s at %s]",
- name, spec, oldname, oldspec);
- if (oldvis != oldman) {
- const char *n = oldvis->getName();
- const char *s = oldvis->getSpec();
- LOG(warning, "BAD: different old visible: [%s at %s]", n, s);
+ name.c_str(), spec.c_str(), oldname.c_str(), oldspec.c_str());
+ if (oldvis != oldman.get()) {
+ const std::string &n = oldvis->getName();
+ const std::string &s = oldvis->getSpec();
+ LOG(warning, "BAD: different old visible: [%s at %s]", n.c_str(), s.c_str());
}
- if (oldres != NULL) {
- const char *n = oldres->getName();
- const char *s = oldres->getSpec();
- LOG(warning, "old reservation: [%s at %s]", n, s);
+ if (oldres != nullptr) {
+ const std::string &n = oldres->getName();
+ const std::string &s = oldres->getSpec();
+ LOG(warning, "old reservation: [%s at %s]", n.c_str(), s.c_str());
}
}
- delete oldman;
}
- add(rpcsrv);
- _myrpcsrv_map.set(name, rpcsrv);
+ add(rpcsrv.get());
+ _myrpcsrv_map[name] = std::move(rpcsrv);
}
void
-RpcServerMap::addReservation(ReservedName *rpcsrv)
+RpcServerMap::addReservation(std::unique_ptr<ReservedName> rpcsrv)
{
- LOG_ASSERT(rpcsrv != NULL);
- LOG_ASSERT(_myrpcsrv_map.isSet(rpcsrv->getName()) == false);
+ LOG_ASSERT(rpcsrv != nullptr);
+ LOG_ASSERT(_myrpcsrv_map.find(rpcsrv->getName()) == _myrpcsrv_map.end());
// must not be reserved for something else already
// this should have been checked already, so assert
LOG_ASSERT(! conflictingReservation(rpcsrv->getName(), rpcsrv->getSpec()));
- ReservedName *old = _reservations.set(rpcsrv->getName(), rpcsrv);
- LOG_ASSERT(old == NULL
- || strcmp(old->getSpec(), rpcsrv->getSpec()) == 0
+ auto old = std::move(_reservations[rpcsrv->getName()]);
+ LOG_ASSERT(!old
+ || old->getSpec() == rpcsrv->getSpec()
|| ! old->stillReserved());
- delete old;
+ _reservations[rpcsrv->getName()] = std::move(rpcsrv);
}
/** check if there is a (different) registration for this name in progress */
bool
-RpcServerMap::conflictingReservation(const char *name, const char *spec)
+RpcServerMap::conflictingReservation(const std::string &name, const std::string &spec)
{
- ReservedName *resv = _reservations[name];
- return (resv != NULL &&
+ const ReservedName *resv = _reservations[name].get();
+ return (resv != nullptr &&
resv->stillReserved() &&
- strcmp(resv->getSpec(), spec) != 0);
+ resv->getSpec() != spec);
}
+const ReservedName *
+RpcServerMap::getReservation(const std::string &name) const {
+ auto found = _reservations.find(name);
+ return (found == _reservations.end()) ? nullptr : found->second.get();
+}
-RpcServerMap::~RpcServerMap()
+RpcServerMap::RpcServerMap()
+ : _myrpcsrv_map(),
+ _reservations()
{
- // get list of names in rpcsrv_map
- std::vector<const char *> names;
- for (HashMap<ManagedRpcServer *>::Iterator it = _myrpcsrv_map.iterator();
- it.valid(); it.next())
- {
- names.push_back(it.key());
- }
-
- for (uint32_t i = 0; i < names.size(); i++) {
- NamedService *rpcsrv = _myrpcsrv_map.remove(names[i]);
- LOG_ASSERT(rpcsrv != NULL);
- delete rpcsrv;
- }
- LOG_ASSERT(_myrpcsrv_map.size() == 0);
}
+RpcServerMap::~RpcServerMap() = default;
bool
RpcServerMap::match(const char *name, const char *pattern)
{
- LOG_ASSERT(name != NULL);
- LOG_ASSERT(pattern != NULL);
+ LOG_ASSERT(name != nullptr);
+ LOG_ASSERT(pattern != nullptr);
while (*pattern != '\0') {
if (*name == *pattern) {
++name;
@@ -177,10 +170,9 @@ RpcServerMap::match(const char *name, const char *pattern)
}
void
-RpcServerMap::removeReservation(const char *name)
+RpcServerMap::removeReservation(const std::string & name)
{
- delete _reservations.remove(name);
+ _reservations.erase(name);
}
-
} // namespace slobrok
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.h b/slobrok/src/vespa/slobrok/server/rpc_server_map.h
index f25b9989378..2c69c1b8cde 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_map.h
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.h
@@ -7,7 +7,6 @@ namespace slobrok {
class NamedService;
class ManagedRpcServer;
-class RemoteRpcServer;
class ReservedName;
/**
@@ -19,22 +18,17 @@ class ReservedName;
* three seperate hashmaps.
**/
-using vespalib::HashMap;
-
class RpcServerMap
{
private:
- VisibleMap _visible_map;
-
- HashMap<ManagedRpcServer *> _myrpcsrv_map;
-
- HashMap<ReservedName *> _reservations;
+ using ManagedRpcServerMap = std::unordered_map<std::string, std::unique_ptr<ManagedRpcServer>>;
+ using ReservedNameMap = std::unordered_map<std::string, std::unique_ptr<ReservedName>>;
+ VisibleMap _visible_map;
+ ManagedRpcServerMap _myrpcsrv_map;
+ ReservedNameMap _reservations;
static bool match(const char *name, const char *pattern);
- RpcServerMap(const RpcServerMap &); // Not used
- RpcServerMap &operator=(const RpcServerMap &); // Not use
-
void add(NamedService *rpcsrv);
public:
@@ -42,31 +36,24 @@ public:
VisibleMap& visibleMap() { return _visible_map; }
- ManagedRpcServer *lookupManaged(const char *name) const {
- return _myrpcsrv_map[name];
- }
+ ManagedRpcServer *lookupManaged(const std::string & name) const;
- NamedService * lookup(const char *name) const;
+ const NamedService * lookup(const std::string & name) const;
RpcSrvlist lookupPattern(const char *pattern) const;
- RpcSrvlist allVisible() const;
RpcSrvlist allManaged() const;
- void addNew(ManagedRpcServer *rpcsrv);
- NamedService * remove(const char *name);
+ void addNew(std::unique_ptr<ManagedRpcServer> rpcsrv);
+ std::unique_ptr<NamedService> remove(const std::string & name);
- void addReservation(ReservedName *rpcsrv);
- bool conflictingReservation(const char *name, const char *spec);
+ void addReservation(std::unique_ptr<ReservedName>rpcsrv);
+ bool conflictingReservation(const std::string & name, const std::string &spec);
- ReservedName *getReservation(const char *name) const {
- return _reservations[name];
- }
- void removeReservation(const char *name);
+ const ReservedName *getReservation(const std::string & name) const;
+ void removeReservation(const std::string & name);
- RpcServerMap()
- : _myrpcsrv_map(NULL),
- _reservations(NULL)
- {
- }
+ RpcServerMap(const RpcServerMap &) = delete;
+ RpcServerMap &operator=(const RpcServerMap &) = delete;
+ RpcServerMap();
~RpcServerMap();
};
diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.cpp b/slobrok/src/vespa/slobrok/server/rpchooks.cpp
index 82e30a309a1..460b060cb82 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp
@@ -18,8 +18,6 @@ namespace slobrok {
namespace {
-
-
class MetricsReport : public FNET_Task
{
RPCHooks &_owner;
@@ -29,35 +27,29 @@ class MetricsReport : public FNET_Task
Schedule(300.0);
}
public:
- MetricsReport(FRT_Supervisor *orb,
- RPCHooks &owner)
+ MetricsReport(FRT_Supervisor *orb, RPCHooks &owner)
: FNET_Task(orb->GetScheduler()),
_owner(owner)
{
Schedule(0.0);
}
- virtual ~MetricsReport() { Kill(); }
+ ~MetricsReport() override { Kill(); }
};
} // namespace <unnamed>
//-----------------------------------------------------------------------------
-RPCHooks::RPCHooks(SBEnv &env,
- RpcServerMap& rpcsrvmap,
- RpcServerManager& rpcsrvman)
+RPCHooks::RPCHooks(SBEnv &env, RpcServerMap& rpcsrvmap, RpcServerManager& rpcsrvman)
: _env(env), _rpcsrvmap(rpcsrvmap), _rpcsrvmanager(rpcsrvman),
_cnts(Metrics::zero()),
- _m_reporter(nullptr)
+ _m_reporter()
{
}
-RPCHooks::~RPCHooks()
-{
- delete _m_reporter;
-}
+RPCHooks::~RPCHooks() = default;
void
RPCHooks::reportMetrics()
@@ -76,7 +68,7 @@ RPCHooks::reportMetrics()
void
RPCHooks::initRPC(FRT_Supervisor *supervisor)
{
- _m_reporter = new MetricsReport(supervisor, *this);
+ _m_reporter = std::make_unique<MetricsReport>(supervisor, *this);
FRT_ReflectionBuilder rb(supervisor);
@@ -236,7 +228,7 @@ RPCHooks::rpc_listNamesServed(FRT_RPCRequest *req)
{
FRT_Values &dst = *req->GetReturn();
FRT_StringValue *names = dst.AddStringArray(1);
- dst.SetString(names, _env.mySpec());
+ dst.SetString(names, _env.mySpec().c_str());
_cnts.otherReqs++;
return;
}
@@ -422,8 +414,8 @@ RPCHooks::rpc_lookupRpcServer(FRT_RPCRequest *req)
FRT_StringValue *names = dst.AddStringArray(rpcsrvlist.size());
FRT_StringValue *specs = dst.AddStringArray(rpcsrvlist.size());
for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) {
- dst.SetString(&names[i], rpcsrvlist[i]->getName());
- dst.SetString(&specs[i], rpcsrvlist[i]->getSpec());
+ dst.SetString(&names[i], rpcsrvlist[i]->getName().c_str());
+ dst.SetString(&specs[i], rpcsrvlist[i]->getSpec().c_str());
}
if (rpcsrvlist.size() < 1) {
LOG(debug, "RPC: lookupRpcServers(%s) -> no match",
@@ -431,7 +423,7 @@ RPCHooks::rpc_lookupRpcServer(FRT_RPCRequest *req)
} else {
LOG(debug, "RPC: lookupRpcServers(%s) -> %u matches, first [%s,%s]",
rpcserverPattern, (unsigned int)rpcsrvlist.size(),
- rpcsrvlist[0]->getName(), rpcsrvlist[0]->getSpec());
+ rpcsrvlist[0]->getName().c_str(), rpcsrvlist[0]->getSpec().c_str());
}
return;
}
@@ -446,15 +438,15 @@ RPCHooks::rpc_listManagedRpcServers(FRT_RPCRequest *req)
FRT_StringValue *names = dst.AddStringArray(rpcsrvlist.size());
FRT_StringValue *specs = dst.AddStringArray(rpcsrvlist.size());
for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) {
- dst.SetString(&names[i], rpcsrvlist[i]->getName());
- dst.SetString(&specs[i], rpcsrvlist[i]->getSpec());
+ dst.SetString(&names[i], rpcsrvlist[i]->getName().c_str());
+ dst.SetString(&specs[i], rpcsrvlist[i]->getSpec().c_str());
}
if (rpcsrvlist.size() < 1) {
LOG(debug, "RPC: listManagedRpcServers() -> 0 managed");
} else {
LOG(debug, "RPC: listManagedRpcServers() -> %u managed, first [%s,%s]",
(unsigned int)rpcsrvlist.size(),
- rpcsrvlist[0]->getName(), rpcsrvlist[0]->getSpec());
+ rpcsrvlist[0]->getName().c_str(), rpcsrvlist[0]->getSpec().c_str());
}
return;
}
@@ -466,14 +458,14 @@ RPCHooks::rpc_lookupManaged(FRT_RPCRequest *req)
FRT_Values &args = *req->GetParams();
const char *name = args[0]._string._str;
LOG(debug, "RPC: lookupManaged(%s)", name);
- ManagedRpcServer *found = _rpcsrvmap.lookupManaged(name);
+ const ManagedRpcServer *found = _rpcsrvmap.lookupManaged(name);
if (found == nullptr) {
req->SetError(FRTE_RPC_METHOD_FAILED, "Not found");
} else {
FRT_Values &dst = *req->GetReturn();
- dst.AddString(found->getName());
- dst.AddString(found->getSpec());
+ dst.AddString(found->getName().c_str());
+ dst.AddString(found->getSpec().c_str());
}
return;
}
@@ -493,9 +485,9 @@ RPCHooks::rpc_listAllRpcServers(FRT_RPCRequest *req)
int j = 0;
for (uint32_t i = 0; i < mrpcsrvlist.size(); ++i, ++j) {
- dst.SetString(&names[j], mrpcsrvlist[i]->getName());
- dst.SetString(&specs[j], mrpcsrvlist[i]->getSpec());
- dst.SetString(&owner[j], _env.mySpec());
+ dst.SetString(&names[j], mrpcsrvlist[i]->getName().c_str());
+ dst.SetString(&specs[j], mrpcsrvlist[i]->getSpec().c_str());
+ dst.SetString(&owner[j], _env.mySpec().c_str());
}
if (sz > 0) {
diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.h b/slobrok/src/vespa/slobrok/server/rpchooks.h
index 1c1d6ebf411..2f7e55d8fce 100644
--- a/slobrok/src/vespa/slobrok/server/rpchooks.h
+++ b/slobrok/src/vespa/slobrok/server/rpchooks.h
@@ -2,6 +2,7 @@
#pragma once
#include <vespa/fnet/frt/invokable.h>
+#include <memory>
class FNET_Task;
class FRT_Supervisor;
@@ -41,17 +42,12 @@ private:
RpcServerMap &_rpcsrvmap;
RpcServerManager &_rpcsrvmanager;
- RPCHooks(const RPCHooks &); // Not used
- RPCHooks &operator=(const RPCHooks &); // Not used
-
Metrics _cnts;
- FNET_Task *_m_reporter;
+ std::unique_ptr<FNET_Task> _m_reporter;
public:
- explicit RPCHooks(SBEnv &env,
- RpcServerMap& rpcsrvmap,
- RpcServerManager& rpcsrvman);
- virtual ~RPCHooks();
+ RPCHooks(SBEnv &env, RpcServerMap& rpcsrvmap, RpcServerManager& rpcsrvman);
+ ~RPCHooks() override;
void initRPC(FRT_Supervisor *supervisor);
void reportMetrics();
diff --git a/slobrok/src/vespa/slobrok/server/rpcmirror.cpp b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp
index af5139f043c..46d7f70288b 100644
--- a/slobrok/src/vespa/slobrok/server/rpcmirror.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp
@@ -38,8 +38,8 @@ MirrorFetch::completeReq()
FRT_StringValue *names = dst.AddStringArray(sz);
FRT_StringValue *specs = dst.AddStringArray(sz);
for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) {
- dst.SetString(&names[i], rpcsrvlist[i]->getName());
- dst.SetString(&specs[i], rpcsrvlist[i]->getSpec());
+ dst.SetString(&names[i], rpcsrvlist[i]->getName().c_str());
+ dst.SetString(&specs[i], rpcsrvlist[i]->getSpec().c_str());
}
if (sz > 0) {
LOG(debug, "mirrorFetch %p -> %u, last [%s,%s]",
@@ -145,8 +145,8 @@ IncrementalFetch::completeReq()
FRT_StringValue *names = dst.AddStringArray(sz);
FRT_StringValue *specs = dst.AddStringArray(sz);
for (uint32_t i = 0; i < sz; ++i) {
- dst.SetString(&names[i], diff.updated[i]->getName());
- dst.SetString(&specs[i], diff.updated[i]->getSpec());
+ dst.SetString(&names[i], diff.updated[i]->getName().c_str());
+ dst.SetString(&specs[i], diff.updated[i]->getSpec().c_str());
}
dst.AddInt32(newgen.getAsInt());
diff --git a/slobrok/src/vespa/slobrok/server/sbenv.cpp b/slobrok/src/vespa/slobrok/server/sbenv.cpp
index 35af0daf24a..163113de7b9 100644
--- a/slobrok/src/vespa/slobrok/server/sbenv.cpp
+++ b/slobrok/src/vespa/slobrok/server/sbenv.cpp
@@ -212,20 +212,18 @@ SBEnv::setup(const std::vector<std::string> &cfg)
std::string slobrok = cfg[i];
discard(oldList, slobrok);
if (slobrok != mySpec()) {
- OkState res = _rpcsrvmanager.addPeer(slobrok.c_str(), slobrok.c_str());
+ OkState res = _rpcsrvmanager.addPeer(slobrok, slobrok.c_str());
if (!res.ok()) {
- LOG(warning, "could not add peer %s: %s", slobrok.c_str(),
- res.errorMsg.c_str());
+ LOG(warning, "could not add peer %s: %s", slobrok.c_str(), res.errorMsg.c_str());
} else {
LOG(config, "added peer %s", slobrok.c_str());
}
}
}
for (uint32_t i = 0; i < oldList.size(); ++i) {
- OkState res = _rpcsrvmanager.removePeer(oldList[i].c_str(), oldList[i].c_str());
+ OkState res = _rpcsrvmanager.removePeer(oldList[i], oldList[i].c_str());
if (!res.ok()) {
- LOG(warning, "could not remove peer %s: %s", oldList[i].c_str(),
- res.errorMsg.c_str());
+ LOG(warning, "could not remove peer %s: %s", oldList[i].c_str(), res.errorMsg.c_str());
} else {
LOG(config, "removed peer %s", oldList[i].c_str());
}
@@ -252,7 +250,7 @@ SBEnv::addPeer(const std::string &name, const std::string &spec)
spec.c_str(), peers.c_str());
return OkState(FRTE_RPC_METHOD_FAILED, "configured partner list does not contain peer. configured peers = " + peers);
}
- return _rpcsrvmanager.addPeer(name.c_str(), spec.c_str());
+ return _rpcsrvmanager.addPeer(name, spec.c_str());
}
OkState
@@ -266,7 +264,7 @@ SBEnv::removePeer(const std::string &name, const std::string &spec)
return OkState(FRTE_RPC_METHOD_FAILED, "configured partner list contains peer, cannot remove");
}
}
- return _rpcsrvmanager.removePeer(name.c_str(), spec.c_str());
+ return _rpcsrvmanager.removePeer(name, spec.c_str());
}
} // namespace slobrok
diff --git a/slobrok/src/vespa/slobrok/server/sbenv.h b/slobrok/src/vespa/slobrok/server/sbenv.h
index 8c897c9c999..223a8b7e9ee 100644
--- a/slobrok/src/vespa/slobrok/server/sbenv.h
+++ b/slobrok/src/vespa/slobrok/server/sbenv.h
@@ -73,7 +73,7 @@ public:
ExchangeManager _exchanger;
RpcServerMap _rpcsrvmap;
- const char *mySpec() const { return _me->getSpec(); }
+ const std::string & mySpec() const { return _me->getSpec(); }
bool isSuspended() const { return false; }
bool isShuttingDown() const { return _shuttingDown; }
diff --git a/slobrok/src/vespa/slobrok/server/selfcheck.cpp b/slobrok/src/vespa/slobrok/server/selfcheck.cpp
index 7d1ca23957a..7fc639ec028 100644
--- a/slobrok/src/vespa/slobrok/server/selfcheck.cpp
+++ b/slobrok/src/vespa/slobrok/server/selfcheck.cpp
@@ -42,7 +42,7 @@ SelfCheck::PerformTask()
const NamedService *r = mrpcsrvlist[i];
ManagedRpcServer *m = _rpcsrvmap.lookupManaged(r->getName());
LOG_ASSERT(r == m);
- LOG(debug, "managed: %s -> %s", m->getName(), m->getSpec());
+ LOG(debug, "managed: %s -> %s", m->getName().c_str(), m->getSpec().c_str());
m->healthCheck();
}
// reschedule in 1-2 seconds:
@@ -51,5 +51,4 @@ SelfCheck::PerformTask()
Schedule(seconds);
}
-
} // namespace slobrok
diff --git a/slobrok/src/vespa/slobrok/server/visible_map.cpp b/slobrok/src/vespa/slobrok/server/visible_map.cpp
index d4487fd0884..d26bb49d874 100644
--- a/slobrok/src/vespa/slobrok/server/visible_map.cpp
+++ b/slobrok/src/vespa/slobrok/server/visible_map.cpp
@@ -13,23 +13,21 @@ VisibleMap::updated()
_genCnt.add();
WaitList waitList;
std::swap(waitList, _waitList);
- for (uint32_t i = 0; i < waitList.size(); ++i) {
- waitList[i]->updated(*this);
+ for (auto & entry : waitList) {
+ entry->updated(*this);
}
}
-
void
VisibleMap::aborted()
{
WaitList waitList;
std::swap(waitList, _waitList);
- for (uint32_t i = 0; i < waitList.size(); ++i) {
- waitList[i]->aborted(*this);
+ for (auto & entry : waitList) {
+ entry->aborted(*this);
}
}
-
void
VisibleMap::addUpdateListener(IUpdateListener *l)
{
@@ -56,28 +54,19 @@ VisibleMap::removeUpdateListener(IUpdateListener *l)
//-----------------------------------------------------------------------------
-std::vector<const NamedService *>
-VisibleMap::lookupPattern(const char *pattern) const
-{
- std::vector<const NamedService *> retval;
- for (iter_t it = _map.iterator(); it.valid(); it.next())
- {
- if (match(it.key(), pattern)) {
- retval.push_back(it.value());
- }
- }
- return retval;
+const NamedService *
+VisibleMap::lookup(const std::string &name) const {
+ auto found = _map.find(name);
+ return (found == _map.end()) ? nullptr : found->second;
}
-
std::vector<const NamedService *>
VisibleMap::allVisible() const
{
std::vector<const NamedService *> retval;
// get list of all names in myrpcsrvmap
- for (iter_t it = _map.iterator(); it.valid(); it.next())
- {
- retval.push_back(it.value());
+ for (const auto & entry : _map) {
+ retval.push_back(entry.second);
}
return retval;
}
@@ -85,22 +74,23 @@ VisibleMap::allVisible() const
void
-VisibleMap::addNew(NamedService *rpcsrv)
+VisibleMap::addNew(const NamedService *rpcsrv)
{
- LOG_ASSERT(rpcsrv != NULL);
- LOG_ASSERT(_map.isSet(rpcsrv->getName()) == false);
- _map.set(rpcsrv->getName(), rpcsrv);
+ LOG_ASSERT(rpcsrv != nullptr);
+ LOG_ASSERT(_map.find(rpcsrv->getName()) == _map.end());
+ _map[rpcsrv->getName()] = rpcsrv;
_history.add(rpcsrv->getName(), _genCnt);
updated();
}
-NamedService *
-VisibleMap::remove(const char *name) {
+const NamedService *
+VisibleMap::remove(const std::string &name) {
- NamedService *d = _map.remove(name);
- if (d != NULL) {
+ const NamedService *d = _map[name];
+ _map.erase(name);
+ if (d != nullptr) {
_history.add(name, _genCnt);
updated();
}
@@ -108,14 +98,13 @@ VisibleMap::remove(const char *name) {
}
-NamedService *
-VisibleMap::update(NamedService *rpcsrv) {
- LOG_ASSERT(rpcsrv != NULL);
-
- NamedService *d = _map.remove(rpcsrv->getName());
- LOG_ASSERT(d != NULL);
+const NamedService *
+VisibleMap::update(const NamedService *rpcsrv) {
+ LOG_ASSERT(rpcsrv != nullptr);
- _map.set(rpcsrv->getName(), rpcsrv);
+ const NamedService *d = rpcsrv;
+ std::swap(d, _map[rpcsrv->getName()]);
+ LOG_ASSERT(d != nullptr);
_history.add(rpcsrv->getName(), _genCnt);
updated();
@@ -128,13 +117,11 @@ VisibleMap::history(const vespalib::GenCnt& gen) const
{
MapDiff retval;
std::set<std::string> names = _history.since(gen);
- for (std::set<std::string>::iterator it = names.begin();
- it != names.end();
- ++it)
+ for (const auto & name : names)
{
- const NamedService *val = lookup(it->c_str());
- if (val == NULL) {
- retval.removed.push_back(*it);
+ const NamedService *val = lookup(name.c_str());
+ if (val == nullptr) {
+ retval.removed.push_back(name);
} else {
retval.updated.push_back(val);
}
@@ -142,11 +129,11 @@ VisibleMap::history(const vespalib::GenCnt& gen) const
return retval;
}
-VisibleMap::MapDiff::MapDiff() {}
-VisibleMap::MapDiff::~MapDiff() {}
+VisibleMap::MapDiff::MapDiff() = default;
+VisibleMap::MapDiff::~MapDiff() = default;
VisibleMap::VisibleMap()
- : _map(NULL),
+ : _map(),
_waitList(),
_genCnt(1)
{
@@ -160,8 +147,8 @@ VisibleMap::~VisibleMap()
bool
VisibleMap::match(const char *name, const char *pattern)
{
- LOG_ASSERT(name != NULL);
- LOG_ASSERT(pattern != NULL);
+ LOG_ASSERT(name != nullptr);
+ LOG_ASSERT(pattern != nullptr);
while (*pattern != '\0') {
if (*name == *pattern) {
++name;
diff --git a/slobrok/src/vespa/slobrok/server/visible_map.h b/slobrok/src/vespa/slobrok/server/visible_map.h
index 9ad6c13872e..6ea2d5e2a46 100644
--- a/slobrok/src/vespa/slobrok/server/visible_map.h
+++ b/slobrok/src/vespa/slobrok/server/visible_map.h
@@ -3,7 +3,9 @@
#include "history.h"
#include "named_service.h"
-#include <vespa/vespalib/util/hashmap.h>
+#include <unordered_map>
+#include <string>
+#include <memory>
namespace slobrok {
@@ -13,9 +15,6 @@ namespace slobrok {
* name->spec mappings visible to the world
**/
-using vespalib::HashMap;
-
-
class VisibleMap
{
public:
@@ -46,19 +45,16 @@ public:
};
private:
- HashMap<NamedService *> _map;
- typedef HashMap<NamedService *>::Iterator iter_t;
+ using Map = std::unordered_map<std::string, const NamedService *>;
+ using WaitList = std::vector<IUpdateListener *>;
- typedef std::vector<IUpdateListener *> WaitList;
+ Map _map;
WaitList _waitList;
vespalib::GenCnt _genCnt;
History _history;
static bool match(const char *name, const char *pattern);
- VisibleMap(const VisibleMap &); // Not used
- VisibleMap &operator=(const VisibleMap &); // Not use
-
void updated();
void aborted();
@@ -66,12 +62,11 @@ public:
void addUpdateListener(IUpdateListener *l);
void removeUpdateListener(IUpdateListener *l);
- void addNew(NamedService *rpcsrv);
- NamedService *remove(const char *name);
- NamedService *update(NamedService *rpcsrv);
+ void addNew(const NamedService *rpcsrv);
+ const NamedService *remove(const std::string &name);
+ const NamedService *update(const NamedService *rpcsrv);
- NamedService *lookup(const char *name) const { return _map[name]; }
- RpcSrvlist lookupPattern(const char *pattern) const;
+ const NamedService *lookup(const std::string &name) const;
RpcSrvlist allVisible() const;
const vespalib::GenCnt& genCnt() { return _genCnt; }
@@ -80,6 +75,8 @@ public:
MapDiff history(const vespalib::GenCnt& gen) const;
+ VisibleMap(const VisibleMap &) = delete;
+ VisibleMap &operator=(const VisibleMap &) = delete;
VisibleMap();
~VisibleMap();
};
diff --git a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp
index ea2cc00c642..f4b80f7961c 100644
--- a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp
+++ b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp
@@ -11,7 +11,6 @@
#include <vespa/storage/distributor/externaloperationhandler.h>
#include <vespa/storageapi/message/persistence.h>
#include <vespa/storage/distributor/operations/external/twophaseupdateoperation.h>
-#include <vespa/storageapi/message/batch.h>
#include <tests/distributor/distributortestutil.h>
#include <vespa/document/test/make_document_bucket.h>
#include <vespa/storage/distributor/distributor.h>
diff --git a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
index 369e820f987..61c55248370 100644
--- a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
+++ b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
@@ -12,12 +12,12 @@
#include <vespa/storage/persistence/filestorage/filestormanager.h>
#include <vespa/storage/persistence/filestorage/modifiedbucketchecker.h>
#include <vespa/document/update/assignvalueupdate.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/document/select/parser.h>
#include <vespa/vdslib/state/random.h>
#include <vespa/storageapi/message/bucketsplitting.h>
#include <vespa/persistence/dummyimpl/dummypersistence.h>
#include <vespa/persistence/spi/test.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/config/common/exceptions.h>
#include <vespa/fastos/file.h>
diff --git a/storage/src/tests/storageserver/documentapiconvertertest.cpp b/storage/src/tests/storageserver/documentapiconvertertest.cpp
index 40d561bd589..7f8b1b8f34a 100644
--- a/storage/src/tests/storageserver/documentapiconvertertest.cpp
+++ b/storage/src/tests/storageserver/documentapiconvertertest.cpp
@@ -8,11 +8,11 @@
#include <vespa/document/repo/documenttyperepo.h>
#include <vespa/document/select/parser.h>
#include <vespa/document/test/make_document_bucket.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/documentapi/documentapi.h>
#include <vespa/messagebus/emptyreply.h>
#include <vespa/storage/common/bucket_resolver.h>
#include <vespa/storage/storageserver/documentapiconverter.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/message/datagram.h>
#include <vespa/storageapi/message/persistence.h>
#include <vespa/storageapi/message/removelocation.h>
@@ -115,7 +115,6 @@ struct DocumentApiConverterTest : public CppUnit::TestFixture
void testCreateVisitorReplyLastBucket();
void testDestroyVisitor();
void testVisitorInfo();
- void testBatchDocumentUpdate();
void testStatBucket();
void testGetBucketList();
void testRemoveLocation();
@@ -133,7 +132,6 @@ struct DocumentApiConverterTest : public CppUnit::TestFixture
CPPUNIT_TEST(testCreateVisitorReplyLastBucket);
CPPUNIT_TEST(testDestroyVisitor);
CPPUNIT_TEST(testVisitorInfo);
- CPPUNIT_TEST(testBatchDocumentUpdate);
CPPUNIT_TEST(testStatBucket);
CPPUNIT_TEST(testGetBucketList);
CPPUNIT_TEST(testRemoveLocation);
@@ -321,58 +319,6 @@ DocumentApiConverterTest::testVisitorInfo()
}
void
-DocumentApiConverterTest::testBatchDocumentUpdate()
-{
- std::vector<document::DocumentUpdate::SP > updates;
-
- {
- document::DocumentId docId(document::UserDocIdString("userdoc:test:1234:test1"));
- auto update = std::make_shared<document::DocumentUpdate>(*_repo, _html_type, docId);
- updates.push_back(update);
- }
-
- {
- document::DocumentId docId(document::UserDocIdString("userdoc:test:1234:test2"));
- auto update = std::make_shared<document::DocumentUpdate>(*_repo, _html_type, docId);
- updates.push_back(update);
- }
-
- {
- document::DocumentId docId(document::UserDocIdString("userdoc:test:1234:test3"));
- auto update = std::make_shared<document::DocumentUpdate>(*_repo, _html_type, docId);
- updates.push_back(update);
- }
-
- auto msg = std::make_shared<documentapi::BatchDocumentUpdateMessage>(1234);
- for (std::size_t i = 0; i < updates.size(); ++i) {
- msg->addUpdate(updates[i]);
- }
-
- auto batchCmd = toStorageAPI<api::BatchDocumentUpdateCommand>(*msg);
- CPPUNIT_ASSERT_EQUAL(updates.size(), batchCmd->getUpdates().size());
- for (std::size_t i = 0; i < updates.size(); ++i) {
- CPPUNIT_ASSERT_EQUAL(*updates[i], *batchCmd->getUpdates()[i]);
- }
-
- api::BatchDocumentUpdateReply batchReply(*batchCmd);
- batchReply.getDocumentsNotFound().resize(3);
- batchReply.getDocumentsNotFound()[0] = true;
- batchReply.getDocumentsNotFound()[2] = true;
-
- std::unique_ptr<mbus::Reply> mbusReply = msg->createReply();
- documentapi::BatchDocumentUpdateReply* mbusBatchReply(
- dynamic_cast<documentapi::BatchDocumentUpdateReply*>(mbusReply.get()));
- CPPUNIT_ASSERT(mbusBatchReply != 0);
-
- _converter->transferReplyState(batchReply, *mbusReply);
-
- CPPUNIT_ASSERT_EQUAL(std::size_t(3), mbusBatchReply->getDocumentsNotFound().size());
- CPPUNIT_ASSERT(mbusBatchReply->getDocumentsNotFound()[0] == true);
- CPPUNIT_ASSERT(mbusBatchReply->getDocumentsNotFound()[1] == false);
- CPPUNIT_ASSERT(mbusBatchReply->getDocumentsNotFound()[2] == true);
-}
-
-void
DocumentApiConverterTest::testStatBucket()
{
documentapi::StatBucketMessage msg(BucketId(123), "");
diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
index 0837b0d1463..d553b41de7c 100644
--- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
+++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
@@ -438,7 +438,7 @@ StorageBucketDBInitializer::registerBucket(const document::Bucket &bucket,
_system._nodeState, _system._nodeIndex, bucketId.stripUnused(),
lib::Distribution::IDEAL_DISK_EVEN_IF_DOWN));
if (disk != partition) {
- ++_metrics._wrongDisk;
+ _metrics._wrongDisk.inc();
}
_metrics._insertedCount.inc();
diff --git a/storage/src/vespa/storage/common/messagebucket.cpp b/storage/src/vespa/storage/common/messagebucket.cpp
index ecbad310a58..4a6f638262d 100644
--- a/storage/src/vespa/storage/common/messagebucket.cpp
+++ b/storage/src/vespa/storage/common/messagebucket.cpp
@@ -9,7 +9,6 @@
#include <vespa/storageapi/message/removelocation.h>
#include <vespa/storage/persistence/messages.h>
#include <vespa/storageapi/message/stat.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -31,8 +30,6 @@ getStorageMessageBucket(const api::StorageMessage& msg)
return static_cast<const api::RevertCommand&>(msg).getBucket();
case api::MessageType::STATBUCKET_ID:
return static_cast<const api::StatBucketCommand&>(msg).getBucket();
- case api::MessageType::BATCHPUTREMOVE_ID:
- return static_cast<const api::BatchPutRemoveCommand&>(msg).getBucket();
case api::MessageType::REMOVELOCATION_ID:
return static_cast<const api::RemoveLocationCommand&>(msg).getBucket();
case api::MessageType::CREATEBUCKET_ID:
diff --git a/storage/src/vespa/storage/distributor/distributor.cpp b/storage/src/vespa/storage/distributor/distributor.cpp
index 2d490ea9923..1664dd0d9a1 100644
--- a/storage/src/vespa/storage/distributor/distributor.cpp
+++ b/storage/src/vespa/storage/distributor/distributor.cpp
@@ -616,8 +616,6 @@ bool is_client_request(const api::StorageMessage& msg) noexcept {
case api::MessageType::STATBUCKET_ID:
case api::MessageType::UPDATE_ID:
case api::MessageType::REMOVELOCATION_ID:
- case api::MessageType::BATCHPUTREMOVE_ID: // Deprecated
- case api::MessageType::BATCHDOCUMENTUPDATE_ID: // Deprecated
return true;
default:
return false;
diff --git a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp
index bb8c2b0608a..b22592af327 100644
--- a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp
+++ b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp
@@ -15,7 +15,6 @@
#include <vespa/document/util/stringutil.h>
#include <vespa/storageapi/message/persistence.h>
#include <vespa/storageapi/message/removelocation.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/message/stat.h>
#include "distributor_bucket_space_repo.h"
#include "distributor_bucket_space.h"
@@ -79,11 +78,11 @@ ExternalOperationHandler::checkTimestampMutationPreconditions(api::StorageComman
LOG(debug, "Distributor manager received %s, bucket %s with wrong distribution",
cmd.toString().c_str(), bucket.toString().c_str());
- persistenceMetrics.failures.wrongdistributor++;
+ persistenceMetrics.failures.wrongdistributor.inc();
return false;
}
if (!checkSafeTimeReached(cmd)) {
- persistenceMetrics.failures.safe_time_not_reached++;
+ persistenceMetrics.failures.safe_time_not_reached.inc();
return false;
}
return true;
@@ -97,7 +96,7 @@ ExternalOperationHandler::makeConcurrentMutationRejectionReply(api::StorageComma
auto err_msg = vespalib::make_string("A mutating operation for document '%s' is already in progress",
docId.toString().c_str());
LOG(debug, "Aborting incoming %s operation: %s", cmd.getType().toString().c_str(), err_msg.c_str());
- persistenceMetrics.failures.concurrent_mutations++;
+ persistenceMetrics.failures.concurrent_mutations.inc();
api::StorageReply::UP reply(cmd.makeReply());
reply->setResult(api::ReturnCode(api::ReturnCode::BUSY, err_msg));
return std::shared_ptr<api::StorageMessage>(reply.release());
@@ -190,7 +189,7 @@ IMPL_MSG_COMMAND_H(ExternalOperationHandler, RemoveLocation)
if (!checkDistribution(*cmd, bucket)) {
LOG(debug, "Distributor manager received %s with wrong distribution", cmd->toString().c_str());
- getMetrics().removelocations[cmd->getLoadType()].failures.wrongdistributor++;
+ getMetrics().removelocations[cmd->getLoadType()].failures.wrongdistributor.inc();
return true;
}
@@ -206,7 +205,7 @@ IMPL_MSG_COMMAND_H(ExternalOperationHandler, Get)
LOG(debug, "Distributor manager received get for %s, bucket %s with wrong distribution",
cmd->getDocumentId().toString().c_str(), bucket.toString().c_str());
- getMetrics().gets[cmd->getLoadType()].failures.wrongdistributor++;
+ getMetrics().gets[cmd->getLoadType()].failures.wrongdistributor.inc();
return true;
}
diff --git a/storage/src/vespa/storage/distributor/operations/external/getoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/getoperation.cpp
index 5b1e585a6f8..04fcd4bd01c 100644
--- a/storage/src/vespa/storage/distributor/operations/external/getoperation.cpp
+++ b/storage/src/vespa/storage/distributor/operations/external/getoperation.cpp
@@ -193,19 +193,19 @@ GetOperation::sendReply(DistributorMessageSender& sender)
repl->setResult(_returnCode);
if (_returnCode.success()) {
- ++_metric.ok;
+ _metric.ok.inc();
} else if (_returnCode.getResult() == api::ReturnCode::TIMEOUT) {
- ++_metric.failures.timeout;
+ _metric.failures.timeout.inc();
} else if (_returnCode.isBusy()) {
- ++_metric.failures.busy;
+ _metric.failures.busy.inc();
} else if (_returnCode.isNodeDownOrNetwork()) {
- ++_metric.failures.notconnected;
+ _metric.failures.notconnected.inc();
} else {
- ++_metric.failures.storagefailure;
+ _metric.failures.storagefailure.inc();
}
if (!_doc.get()) {
- ++_metric.failures.notfound;
+ _metric.failures.notfound.inc();
}
_metric.latency.addValue(_operationTimer.getElapsedTimeAsDouble());
diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp
index 0b0fc05763f..c652f787b2e 100644
--- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp
+++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp
@@ -6,8 +6,8 @@
#include "updateoperation.h"
#include <vespa/storage/distributor/distributor_bucket_space.h>
#include <vespa/storageapi/message/persistence.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/document/datatype/documenttype.h>
+#include <vespa/document/fieldvalue/document.h>
#include <vespa/document/select/parser.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h
index e3fb6c93a3a..6efce913e70 100644
--- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h
+++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.h
@@ -15,7 +15,6 @@ namespace storage {
namespace api {
class UpdateCommand;
-class BatchDocumentUpdateCommand;
class CreateBucketReply;
}
diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp
index 3475e3e12ba..784ea7253b6 100644
--- a/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp
+++ b/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp
@@ -308,9 +308,7 @@ constexpr std::array<uint32_t, 7> WRITE_FEED_MESSAGE_TYPES {{
api::MessageType::PUT_ID,
api::MessageType::REMOVE_ID,
api::MessageType::UPDATE_ID,
- api::MessageType::REMOVELOCATION_ID,
- api::MessageType::BATCHPUTREMOVE_ID,
- api::MessageType::BATCHDOCUMENTUPDATE_ID
+ api::MessageType::REMOVELOCATION_ID
}};
}
diff --git a/storage/src/vespa/storage/distributor/persistence_operation_metric_set.cpp b/storage/src/vespa/storage/distributor/persistence_operation_metric_set.cpp
index 88b28941e65..d5f73a9e916 100644
--- a/storage/src/vespa/storage/distributor/persistence_operation_metric_set.cpp
+++ b/storage/src/vespa/storage/distributor/persistence_operation_metric_set.cpp
@@ -79,21 +79,21 @@ void
PersistenceOperationMetricSet::updateFromResult(const api::ReturnCode& result)
{
if (result.success()) {
- ++ok;
+ ok.inc();
} else if (result.getResult() == api::ReturnCode::WRONG_DISTRIBUTION) {
- ++failures.wrongdistributor;
+ failures.wrongdistributor.inc();
} else if (result.getResult() == api::ReturnCode::TIMEOUT) {
- ++failures.timeout;
+ failures.timeout.inc();
} else if (result.isBusy()) {
- ++failures.busy;
+ failures.busy.inc();
} else if (result.isBucketDisappearance()) {
// Bucket not found/deleted codes imply that replicas are transiently
// inconsistent in our DB or across replica nodes.
- ++failures.inconsistent_bucket;
+ failures.inconsistent_bucket.inc();
} else if (result.isNodeDownOrNetwork()) {
- ++failures.notconnected;
+ failures.notconnected.inc();
} else {
- ++failures.storagefailure;
+ failures.storagefailure.inc();
}
}
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
index f9571228ef9..3ccb35ef5a7 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestorhandlerimpl.cpp
@@ -12,7 +12,6 @@
#include <vespa/storage/common/messagebucket.h>
#include <vespa/storage/persistence/messages.h>
#include <vespa/storageapi/message/stat.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
#include <vespa/vespalib/util/exceptions.h>
@@ -249,8 +248,6 @@ FileStorHandlerImpl::messageMayBeAborted(const api::StorageMessage& msg)
case api::MessageType::JOINBUCKETS_ID:
case api::MessageType::UPDATE_ID:
case api::MessageType::REMOVELOCATION_ID:
- case api::MessageType::BATCHPUTREMOVE_ID:
- case api::MessageType::BATCHDOCUMENTUPDATE_ID:
case api::MessageType::SETBUCKETSTATE_ID:
return true;
default:
@@ -587,7 +584,6 @@ FileStorHandlerImpl::remapMessage(api::StorageMessage& msg, const document::Buck
break;
}
case api::MessageType::STAT_ID:
- case api::MessageType::BATCHPUTREMOVE_ID:
case api::MessageType::REVERT_ID:
case api::MessageType::REMOVELOCATION_ID:
case api::MessageType::SETBUCKETSTATE_ID:
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
index bf0244255c1..e7323d07480 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
@@ -11,7 +11,6 @@
#include <vespa/storage/config/config-stor-server.h>
#include <vespa/storage/persistence/bucketownershipnotifier.h>
#include <vespa/storage/persistence/persistencethread.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/message/bucketsplitting.h>
#include <vespa/storageapi/message/state.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
@@ -325,16 +324,6 @@ FileStorManager::onRevert(const shared_ptr<api::RevertCommand>& cmd)
}
bool
-FileStorManager::onBatchPutRemove(const std::shared_ptr<api::BatchPutRemoveCommand>& cmd)
-{
- StorBucketDatabase::WrappedEntry entry(mapOperationToBucketAndDisk(*cmd, 0));
- if (entry.exist()) {
- handlePersistenceMessage(cmd, entry->disk);
- }
- return true;
-}
-
-bool
FileStorManager::onRemoveLocation(const std::shared_ptr<api::RemoveLocationCommand>& cmd)
{
StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucket()));
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h
index 4bf2c1049cf..5c52e6c6a23 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h
+++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h
@@ -151,7 +151,6 @@ private:
bool onGet(const std::shared_ptr<api::GetCommand>&) override;
bool onRemove(const std::shared_ptr<api::RemoveCommand>&) override;
bool onRevert(const std::shared_ptr<api::RevertCommand>&) override;
- bool onBatchPutRemove(const std::shared_ptr<api::BatchPutRemoveCommand>&) override;
bool onStatBucket(const std::shared_ptr<api::StatBucketCommand>&) override;
// Bucket operations
diff --git a/storage/src/vespa/storage/persistence/mergehandler.cpp b/storage/src/vespa/storage/persistence/mergehandler.cpp
index c3dc7cba80a..26cfb0e6566 100644
--- a/storage/src/vespa/storage/persistence/mergehandler.cpp
+++ b/storage/src/vespa/storage/persistence/mergehandler.cpp
@@ -1301,7 +1301,7 @@ void
MergeHandler::handleGetBucketDiffReply(api::GetBucketDiffReply& reply,
MessageSender& sender)
{
- ++_env._metrics.getBucketDiffReply;
+ _env._metrics.getBucketDiffReply.inc();
spi::Bucket bucket(reply.getBucket(), spi::PartitionId(_env._partition));
LOG(debug, "GetBucketDiffReply(%s)", bucket.toString().c_str());
@@ -1479,7 +1479,7 @@ void
MergeHandler::handleApplyBucketDiffReply(api::ApplyBucketDiffReply& reply,
MessageSender& sender)
{
- ++_env._metrics.applyBucketDiffReply;
+ _env._metrics.applyBucketDiffReply.inc();
spi::Bucket bucket(reply.getBucket(), spi::PartitionId(_env._partition));
std::vector<api::ApplyBucketDiffCommand::Entry>& diff(reply.getDiff());
LOG(debug, "%s", reply.toString().c_str());
diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp
index 0eeb4eeb84d..1b221ea0b7c 100644
--- a/storage/src/vespa/storage/persistence/persistencethread.cpp
+++ b/storage/src/vespa/storage/persistence/persistencethread.cpp
@@ -137,7 +137,7 @@ PersistenceThread::handleRemove(api::RemoveCommand& cmd)
tracker->setReply(std::make_shared<api::RemoveReply>(cmd, response.wasFound() ? cmd.getTimestamp() : 0));
}
if (!response.wasFound()) {
- ++_env._metrics.remove[cmd.getLoadType()].notFound;
+ _env._metrics.remove[cmd.getLoadType()].notFound.inc();
}
return tracker;
}
@@ -177,7 +177,7 @@ PersistenceThread::handleGet(api::GetCommand& cmd)
if (checkForError(result, *tracker)) {
if (!result.hasDocument()) {
- ++_env._metrics.get[cmd.getLoadType()].notFound;
+ _env._metrics.get[cmd.getLoadType()].notFound.inc();
}
tracker->setReply(std::make_shared<api::GetReply>(cmd, result.getDocumentPtr(), result.getTimestamp()));
}
@@ -202,7 +202,7 @@ PersistenceThread::handleRepairBucket(RepairBucketCommand& cmd)
reply->setAltered(!(after == before));
if (reply->bucketAltered()) {
notifyGuard.notifyAlways(cmd.getBucket(), after);
- ++_env._metrics.repairFixed;
+ _env._metrics.repairFixed.inc();
}
_env.updateBucketDatabase(cmd.getBucket(), after);
@@ -810,7 +810,7 @@ PersistenceThread::processMessage(api::StorageMessage& msg)
{
MBUS_TRACE(msg.getTrace(), 5, "PersistenceThread: Processing message in persistence layer");
- ++_env._metrics.operations;
+ _env._metrics.operations.inc();
if (msg.getType().isReply()) {
try{
LOG(debug, "Handling reply: %s", msg.toString().c_str());
@@ -837,7 +837,7 @@ PersistenceThread::processMessage(api::StorageMessage& msg)
&& tracker->getReply()->getResult().failed())
|| tracker->getResult().failed())
{
- ++_env._metrics.failedOperations;
+ _env._metrics.failedOperations.inc();
}
}
diff --git a/storage/src/vespa/storage/persistence/persistenceutil.cpp b/storage/src/vespa/storage/persistence/persistenceutil.cpp
index 888dc93dd82..4bee5df4d04 100644
--- a/storage/src/vespa/storage/persistence/persistenceutil.cpp
+++ b/storage/src/vespa/storage/persistence/persistenceutil.cpp
@@ -23,7 +23,7 @@ MessageTracker::MessageTracker(FileStorThreadMetrics::Op& metric,
_result(api::ReturnCode::OK),
_timer(clock)
{
- ++_metric.count;
+ _metric.count.inc();
}
MessageTracker::~MessageTracker()
@@ -53,7 +53,7 @@ MessageTracker::generateReply(api::StorageCommand& cmd)
}
if (!_reply->getResult().success()) {
- ++_metric.failed;
+ _metric.failed.inc();
LOGBP(debug, "Failed to handle command %s: %s",
cmd.toString().c_str(),
_result.toString().c_str());
diff --git a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp
index 00bc395b536..b6ac2a4b219 100644
--- a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp
+++ b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp
@@ -3,9 +3,9 @@
#include "documentapiconverter.h"
#include "priorityconverter.h"
#include <vespa/document/bucket/bucketidfactory.h>
+#include <vespa/document/update/documentupdate.h>
#include <vespa/documentapi/documentapi.h>
#include <vespa/storage/common/bucket_resolver.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/message/datagram.h>
#include <vespa/storageapi/message/documentsummary.h>
#include <vespa/storageapi/message/persistence.h>
@@ -100,12 +100,6 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg)
toMsg = std::make_unique<api::DestroyVisitorCommand>(from.getInstanceId());
break;
}
- case DocumentProtocol::MESSAGE_BATCHDOCUMENTUPDATE:
- {
- documentapi::BatchDocumentUpdateMessage& from(static_cast<documentapi::BatchDocumentUpdateMessage&>(fromMsg));
- toMsg = std::make_unique<api::BatchDocumentUpdateCommand>(from.getUpdates());
- break;
- }
case DocumentProtocol::MESSAGE_STATBUCKET:
{
documentapi::StatBucketMessage& from(static_cast<documentapi::StatBucketMessage&>(fromMsg));
@@ -377,10 +371,6 @@ DocumentApiConverter::transferReplyState(api::StorageReply& fromMsg, mbus::Reply
documentapi::CreateVisitorReply& to(static_cast<documentapi::CreateVisitorReply&>(toMsg));
to.setLastBucket(from.getLastBucket());
to.setVisitorStatistics(from.getVisitorStatistics());
- } else if (toMsg.getType() == DocumentProtocol::REPLY_BATCHDOCUMENTUPDATE) {
- api::BatchDocumentUpdateReply& from(static_cast<api::BatchDocumentUpdateReply&>(fromMsg));
- documentapi::BatchDocumentUpdateReply& to(static_cast<documentapi::BatchDocumentUpdateReply&>(toMsg));
- to.getDocumentsNotFound() = from.getDocumentsNotFound();
}
}
diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.cpp b/storage/src/vespa/storage/storageserver/mergethrottler.cpp
index 22af1a73633..a9d54c196c9 100644
--- a/storage/src/vespa/storage/storageserver/mergethrottler.cpp
+++ b/storage/src/vespa/storage/storageserver/mergethrottler.cpp
@@ -471,33 +471,33 @@ MergeThrottler::updateOperationMetrics(
{
switch (result.getResult()) {
case api::ReturnCode::OK:
- ++metrics.ok;
+ metrics.ok.inc();
break;
case api::ReturnCode::NOT_READY:
- ++metrics.failures.notready;
+ metrics.failures.notready.inc();
break;
case api::ReturnCode::TIMEOUT:
- ++metrics.failures.timeout;
+ metrics.failures.timeout.inc();
break;
case api::ReturnCode::ABORTED:
- ++metrics.failures.aborted;
+ metrics.failures.aborted.inc();
break;
case api::ReturnCode::WRONG_DISTRIBUTION:
- ++metrics.failures.wrongdistribution;
+ metrics.failures.wrongdistribution.inc();
break;
case api::ReturnCode::EXISTS:
- ++metrics.failures.exists;
+ metrics.failures.exists.inc();
break;
case api::ReturnCode::REJECTED:
- ++metrics.failures.rejected;
+ metrics.failures.rejected.inc();
break;
default:
if (result.isBusy()) {
- ++metrics.failures.busy;
+ metrics.failures.busy.inc();
} else if (result.isBucketDisappearance()) {
- ++metrics.failures.bucketnotfound;
+ metrics.failures.bucketnotfound.inc();
} else {
- ++metrics.failures.other;
+ metrics.failures.other.inc();
}
}
}
diff --git a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
index cfc69bcde45..da7e8cb743e 100644
--- a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
+++ b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
@@ -5,7 +5,6 @@
#include <vespa/storageapi/message/bucketsplitting.h>
#include <vespa/storageapi/message/internal.h>
#include <vespa/storageapi/message/removelocation.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/mbusprot/storageprotocol.h>
#include <vespa/storageapi/mbusprot/storagecommand.h>
#include <vespa/storageapi/mbusprot/storagereply.h>
@@ -89,7 +88,6 @@ struct StorageProtocolTest : public CppUnit::TestFixture {
void testSplitBucket51();
void testSplitBucketChain51();
void testJoinBuckets51();
- void testBatchPutRemove51();
void testCreateVisitor51();
void testDestroyVisitor51();
void testRemoveLocation51();
@@ -133,7 +131,6 @@ struct StorageProtocolTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testCreateVisitor51);
CPPUNIT_TEST(testDestroyVisitor51);
CPPUNIT_TEST(testRemoveLocation51);
- CPPUNIT_TEST(testBatchPutRemove51);
CPPUNIT_TEST(testInternalMessage);
CPPUNIT_TEST(testSetBucketState51);
@@ -782,55 +779,6 @@ StorageProtocolTest::testApplyBucketDiff51()
recordSerialization50();
}
-void
-StorageProtocolTest::testBatchPutRemove51()
-{
- ScopedName test("testBatchPutRemove51");
-
- document::BucketId bucketId(20, 0xf1f1f1f1f1ull);
- document::Bucket bucket(makeDocumentBucket(bucketId));
- BatchPutRemoveCommand::SP cmd(new BatchPutRemoveCommand(bucket));
- cmd->addPut(_testDoc, 100);
- cmd->addHeaderUpdate(_testDoc, 101, 1234);
- cmd->addRemove(_testDoc->getId(), 102);
- cmd->forceMsgId(556677);
- BatchPutRemoveCommand::SP cmd2(copyCommand(cmd, _version5_1));
- CPPUNIT_ASSERT_EQUAL(bucketId, cmd2->getBucketId());
- CPPUNIT_ASSERT_EQUAL(3, (int)cmd2->getOperationCount());
- CPPUNIT_ASSERT_EQUAL(*_testDoc, *(dynamic_cast<const BatchPutRemoveCommand::PutOperation&>(cmd2->getOperation(0)).document));
- CPPUNIT_ASSERT_EQUAL((uint64_t)100, cmd2->getOperation(0).timestamp);
- {
- vespalib::nbostream header;
- _testDoc->serializeHeader(header);
- document::Document headerDoc(_docMan.getTypeRepo(), header);
- CPPUNIT_ASSERT_EQUAL(
- headerDoc,
- *(dynamic_cast<const BatchPutRemoveCommand::HeaderUpdateOperation&>(
- cmd2->getOperation(1)).document));
- }
- CPPUNIT_ASSERT_EQUAL((uint64_t)101, cmd2->getOperation(1).timestamp);
- CPPUNIT_ASSERT_EQUAL(1234, (int)dynamic_cast<const BatchPutRemoveCommand::HeaderUpdateOperation&>(cmd2->getOperation(1)).timestampToUpdate);
- CPPUNIT_ASSERT_EQUAL(_testDoc->getId(), dynamic_cast<const BatchPutRemoveCommand::RemoveOperation&>(cmd2->getOperation(2)).documentId);
- CPPUNIT_ASSERT_EQUAL((uint64_t)102, cmd2->getOperation(2).timestamp);
- CPPUNIT_ASSERT_EQUAL(uint64_t(556677), cmd2->getMsgId());
-
- BatchPutRemoveReply::SP reply(new BatchPutRemoveReply(*cmd2));
- reply->getDocumentsNotFound().push_back(document::DocumentId("userdoc:footype:1234:foo1"));
- reply->getDocumentsNotFound().push_back(document::DocumentId("userdoc:footype:1234:foo2"));
- reply->getDocumentsNotFound().push_back(document::DocumentId("userdoc:footype:1234:foo3"));
-
- BatchPutRemoveReply::SP reply2(copyReply(reply));
-
- CPPUNIT_ASSERT_EQUAL(3, (int)reply2->getDocumentsNotFound().size());
- CPPUNIT_ASSERT_EQUAL(document::DocumentId("userdoc:footype:1234:foo1"), reply2->getDocumentsNotFound()[0]);
- CPPUNIT_ASSERT_EQUAL(document::DocumentId("userdoc:footype:1234:foo2"), reply2->getDocumentsNotFound()[1]);
- CPPUNIT_ASSERT_EQUAL(document::DocumentId("userdoc:footype:1234:foo3"), reply2->getDocumentsNotFound()[2]);
-
- recordOutput(*cmd2);
- recordOutput(*reply2);
- recordSerialization50();
-}
-
namespace {
struct MyCommand : public api::InternalCommand {
MyCommand() : InternalCommand(101) {}
diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp
index d08464da715..172cd6c8de5 100644
--- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp
+++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp
@@ -7,7 +7,6 @@
#include <vespa/storageapi/message/bucketsplitting.h>
#include <vespa/storageapi/message/visitor.h>
#include <vespa/storageapi/message/removelocation.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -132,12 +131,6 @@ ProtocolSerialization::encode(const api::StorageMessage& msg) const
case api::MessageType::REMOVELOCATION_REPLY_ID:
onEncode(buf, static_cast<const api::RemoveLocationReply&>(msg));
break;
- case api::MessageType::BATCHPUTREMOVE_ID:
- onEncode(buf, static_cast<const api::BatchPutRemoveCommand&>(msg));
- break;
- case api::MessageType::BATCHPUTREMOVE_REPLY_ID:
- onEncode(buf, static_cast<const api::BatchPutRemoveReply&>(msg));
- break;
case api::MessageType::SETBUCKETSTATE_ID:
onEncode(buf, static_cast<const api::SetBucketStateCommand&>(msg));
break;
@@ -205,8 +198,6 @@ ProtocolSerialization::decodeCommand(mbus::BlobRef data) const
cmd = onDecodeDestroyVisitorCommand(buf); break;
case api::MessageType::REMOVELOCATION_ID:
cmd = onDecodeRemoveLocationCommand(buf); break;
- case api::MessageType::BATCHPUTREMOVE_ID:
- cmd = onDecodeBatchPutRemoveCommand(buf); break;
case api::MessageType::SETBUCKETSTATE_ID:
cmd = onDecodeSetBucketStateCommand(buf); break;
default:
@@ -269,8 +260,6 @@ ProtocolSerialization::decodeReply(mbus::BlobRef data, const api::StorageCommand
reply = onDecodeDestroyVisitorReply(cmd, buf); break;
case api::MessageType::REMOVELOCATION_REPLY_ID:
reply = onDecodeRemoveLocationReply(cmd, buf); break;
- case api::MessageType::BATCHPUTREMOVE_REPLY_ID:
- reply = onDecodeBatchPutRemoveReply(cmd, buf); break;
case api::MessageType::SETBUCKETSTATE_REPLY_ID:
reply = onDecodeSetBucketStateReply(cmd, buf); break;
default:
diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h
index e7d80a0614f..9c3ddb88bdf 100644
--- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h
+++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h
@@ -50,10 +50,6 @@ class SetBucketStateReply;
class CreateVisitorCommand;
class RemoveLocationCommand;
class RemoveLocationReply;
-class BatchPutRemoveCommand;
-class BatchPutRemoveReply;
-class BatchDocumentUpdateCommand;
-class BatchDocumentUpdateReply;
}
namespace storage::mbusprot {
@@ -125,8 +121,6 @@ protected:
virtual void onEncode(GBBuf&, const api::DestroyVisitorReply&) const = 0;
virtual void onEncode(GBBuf&, const api::RemoveLocationCommand&) const = 0;
virtual void onEncode(GBBuf&, const api::RemoveLocationReply&) const = 0;
- virtual void onEncode(GBBuf&, const api::BatchPutRemoveCommand&) const = 0;
- virtual void onEncode(GBBuf&, const api::BatchPutRemoveReply&) const = 0;
virtual SCmd::UP onDecodePutCommand(BBuf&) const = 0;
virtual SRep::UP onDecodePutReply(const SCmd&, BBuf&) const = 0;
@@ -166,8 +160,6 @@ protected:
virtual SRep::UP onDecodeDestroyVisitorReply(const SCmd&, BBuf&) const = 0;
virtual SCmd::UP onDecodeRemoveLocationCommand(BBuf&) const = 0;
virtual SRep::UP onDecodeRemoveLocationReply(const SCmd&, BBuf&) const = 0;
- virtual SCmd::UP onDecodeBatchPutRemoveCommand(BBuf&) const = 0;
- virtual SRep::UP onDecodeBatchPutRemoveReply(const SCmd&, BBuf&) const = 0;
virtual document::Bucket getBucket(document::ByteBuffer& buf) const = 0;
virtual void putBucket(const document::Bucket& bucket, vespalib::GrowableByteBuffer& buf) const = 0;
diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp
index 2532f76f3a0..74a0c964d19 100644
--- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp
+++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp
@@ -7,7 +7,6 @@
#include "storagereply.h"
#include <vespa/storageapi/message/bucketsplitting.h>
-#include <vespa/storageapi/message/batch.h>
#include <vespa/storageapi/message/visitor.h>
#include <vespa/storageapi/message/removelocation.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -25,104 +24,6 @@ ProtocolSerialization4_2::ProtocolSerialization4_2(
{
}
-void
-ProtocolSerialization4_2::onEncode(
- GBBuf& buf, const api::BatchPutRemoveCommand& msg) const
-{
- // Serialization format - allow different types of serialization depending on source.
- buf.putByte(0);
- putBucket(msg.getBucket(), buf);
- buf.putInt(msg.getOperationCount());
-
- for (uint32_t i = 0; i < msg.getOperationCount(); i++) {
- const api::BatchPutRemoveCommand::Operation& op = msg.getOperation(i);
- buf.putByte((uint8_t)op.type);
- buf.putLong(op.timestamp);
-
- switch (op.type) {
- case api::BatchPutRemoveCommand::Operation::REMOVE:
- buf.putString(static_cast<const api::BatchPutRemoveCommand::RemoveOperation&>(op).documentId.toString());
- break;
- case api::BatchPutRemoveCommand::Operation::HEADERUPDATE:
- {
- buf.putLong(static_cast<const api::BatchPutRemoveCommand::HeaderUpdateOperation&>(op).timestampToUpdate);
-
- vespalib::nbostream stream;
- static_cast<const api::BatchPutRemoveCommand::HeaderUpdateOperation&>(op).document->serializeHeader(stream);
- buf.putInt(stream.size());
- buf.putBytes(stream.peek(), stream.size());
- break;
- }
- case api::BatchPutRemoveCommand::Operation::PUT:
- SH::putDocument(static_cast<const api::BatchPutRemoveCommand::PutOperation&>(op).document.get(), buf);
- break;
- }
- }
- onEncodeBucketInfoCommand(buf, msg);
-}
-
-api::StorageCommand::UP
-ProtocolSerialization4_2::onDecodeBatchPutRemoveCommand(BBuf& buf) const
-{
- SH::getByte(buf);
- document::Bucket bucket = getBucket(buf);
- std::unique_ptr<api::BatchPutRemoveCommand> cmd(new api::BatchPutRemoveCommand(bucket));
- int length = SH::getInt(buf);
-
- for (int i = 0; i < length; i++) {
- int type = SH::getByte(buf);
- long timestamp = SH::getLong(buf);
-
- switch (type) {
- case api::BatchPutRemoveCommand::Operation::REMOVE:
- cmd->addRemove(document::DocumentId(SH::getString(buf)), timestamp);
- break;
- case api::BatchPutRemoveCommand::Operation::HEADERUPDATE:
- {
- long newTimestamp = SH::getLong(buf);
- cmd->addHeaderUpdate(document::Document::SP(
- SH::getDocument(buf, getTypeRepo())),
- timestamp, newTimestamp);
- break;
- }
- case api::BatchPutRemoveCommand::Operation::PUT:
- cmd->addPut(document::Document::SP(SH::getDocument(
- buf, getTypeRepo())), timestamp);
- break;
- }
- }
-
- onDecodeBucketInfoCommand(buf, *cmd);
-
- return api::StorageCommand::UP(cmd.release());
-}
-
-void ProtocolSerialization4_2::onEncode(
- GBBuf& buf, const api::BatchPutRemoveReply& msg) const
-{
- buf.putInt(msg.getDocumentsNotFound().size());
- for (uint32_t i = 0; i < msg.getDocumentsNotFound().size(); i++) {
- buf.putString(msg.getDocumentsNotFound()[i].toString());
- }
-
- onEncodeBucketInfoReply(buf, msg);
-}
-
-api::StorageReply::UP
-ProtocolSerialization4_2::onDecodeBatchPutRemoveReply(const SCmd& cmd,
- BBuf& buf) const
-{
- api::BatchPutRemoveReply::UP msg(new api::BatchPutRemoveReply(
- static_cast<const api::BatchPutRemoveCommand&>(cmd)));
- uint32_t count = SH::getInt(buf);
- for (uint32_t i = 0; i < count; i++) {
- msg->getDocumentsNotFound().push_back(document::DocumentId(SH::getString(buf)));
- }
-
- onDecodeBucketInfoReply(buf, *msg);
- return api::StorageReply::UP(msg.release());
-}
-
void ProtocolSerialization4_2::onEncode(
GBBuf& buf, const api::GetCommand& msg) const
{
diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h
index 3a6f77e46a3..56aa3d4ed30 100644
--- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h
+++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h
@@ -28,8 +28,6 @@ protected:
void onEncode(GBBuf&, const api::RemoveLocationReply&) const override;
// Not supported on 4.2, but implemented here for simplicity.
- void onEncode(GBBuf&, const api::BatchPutRemoveCommand&) const override;
- void onEncode(GBBuf&, const api::BatchPutRemoveReply&) const override;
void onEncode(GBBuf&, const api::SetBucketStateCommand&) const override;
void onEncode(GBBuf&, const api::SetBucketStateReply&) const override;
@@ -59,10 +57,6 @@ protected:
SCmd::UP onDecodeRemoveLocationCommand(BBuf&) const override;
SRep::UP onDecodeRemoveLocationReply(const SCmd&, BBuf&) const override;
- // Not supported on 4.2, but implemented here for simplicity.
- SCmd::UP onDecodeBatchPutRemoveCommand(BBuf&) const override;
- SRep::UP onDecodeBatchPutRemoveReply(const SCmd&, BBuf&) const override;
-
virtual void onDecodeBucketInfoCommand(BBuf&, api::BucketInfoCommand&) const;
virtual void onDecodeBucketInfoReply(BBuf&, api::BucketInfoReply&) const = 0;
virtual void onDecodeCommand(BBuf& buf, api::StorageCommand& msg) const = 0;
diff --git a/storageapi/src/vespa/storageapi/message/CMakeLists.txt b/storageapi/src/vespa/storageapi/message/CMakeLists.txt
index dbbaad8eed1..cde9183482f 100644
--- a/storageapi/src/vespa/storageapi/message/CMakeLists.txt
+++ b/storageapi/src/vespa/storageapi/message/CMakeLists.txt
@@ -12,7 +12,6 @@ vespa_add_library(storageapi_message OBJECT
stat.cpp
removelocation.cpp
queryresult.cpp
- batch.cpp
internal.cpp
DEPENDS
)
diff --git a/storageapi/src/vespa/storageapi/message/batch.cpp b/storageapi/src/vespa/storageapi/message/batch.cpp
deleted file mode 100644
index de8ac849dee..00000000000
--- a/storageapi/src/vespa/storageapi/message/batch.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-//
-#include "batch.h"
-#include <vespa/document/bucket/bucketidfactory.h>
-#include <ostream>
-
-using namespace storage::api;
-using document::BucketSpace;
-
-IMPLEMENT_COMMAND(BatchPutRemoveCommand, BatchPutRemoveReply)
-IMPLEMENT_REPLY(BatchPutRemoveReply)
-IMPLEMENT_COMMAND(BatchDocumentUpdateCommand, BatchDocumentUpdateReply)
-IMPLEMENT_REPLY(BatchDocumentUpdateReply)
-
-
-BatchPutRemoveCommand::Operation::Operation(uint64_t ts, Type tp)
- : timestamp(ts),
- type(tp)
-{
-}
-
-BatchPutRemoveCommand::PutOperation::PutOperation(document::Document::SP doc, uint64_t ts)
- : Operation(ts, PUT),
- document(doc)
-{
-}
-
-BatchPutRemoveCommand::HeaderUpdateOperation::HeaderUpdateOperation(document::Document::SP doc, uint64_t newTimestamp, uint64_t timestampToUpdate_)
- : Operation(newTimestamp, HEADERUPDATE),
- document(doc),
- timestampToUpdate(timestampToUpdate_)
-{
-}
-
-BatchPutRemoveCommand::RemoveOperation::RemoveOperation(const document::DocumentId& docId, uint64_t ts)
- : Operation(ts, REMOVE),
- documentId(docId)
-{
-}
-
-BatchPutRemoveCommand::BatchPutRemoveCommand(const document::Bucket &bucket)
- : BucketInfoCommand(MessageType::BATCHPUTREMOVE, bucket),
- _approxSize(0)
-{
-}
-
-void
-BatchPutRemoveCommand::addPut(document::Document::SP document, uint64_t ts)
-{
- _operations.push_back(std::unique_ptr<Operation>(new PutOperation(document, ts)));
- _approxSize += document->serialize()->getLength();
-}
-
-void
-BatchPutRemoveCommand::addHeaderUpdate(document::Document::SP document, uint64_t ts, uint64_t timestampToUpdate)
-{
- _operations.push_back(std::unique_ptr<Operation>(new HeaderUpdateOperation(document, ts, timestampToUpdate)));
- _approxSize += document->serialize()->getLength();
-}
-
-void
-BatchPutRemoveCommand::addRemove(const document::DocumentId& docId, uint64_t ts)
-{
- _operations.push_back(std::unique_ptr<Operation>(new RemoveOperation(docId, ts)));
- _approxSize += docId.toString().length();
-}
-
-void
-BatchPutRemoveCommand::addOperation(const Operation& op, bool cloneDocument)
-{
- switch (op.type) {
- case Operation::PUT:
- {
- document::Document::SP doc;
- if (!cloneDocument) {
- doc = static_cast<const PutOperation&>(op).document;
- } else {
- doc.reset(static_cast<const PutOperation&>(op).document->clone());
- }
- addPut(doc, op.timestamp);
- break;
- }
- case Operation::REMOVE:
- addRemove(static_cast<const RemoveOperation&>(op).documentId, op.timestamp);
- break;
- case Operation::HEADERUPDATE:
- {
- const HeaderUpdateOperation& hup = static_cast<const HeaderUpdateOperation&>(op);
- document::Document::SP doc;
- if (!cloneDocument) {
- doc = hup.document;
- } else {
- doc.reset(hup.document->clone());
- }
- addHeaderUpdate(doc, op.timestamp, hup.timestampToUpdate);
- break;
- }
- }
-}
-
-void
-BatchPutRemoveCommand::print(std::ostream& out, bool verbose,
- const std::string& indent) const {
- out << "BatchPutRemove(" << getBucketId() << ", " << _operations.size() << " operations)";
-
- if (verbose) {
- out << " : ";
- BucketInfoCommand::print(out, verbose, indent);
- }
-}
-
-BatchPutRemoveReply::BatchPutRemoveReply(const BatchPutRemoveCommand& cmd)
- : BucketInfoReply(cmd)
-{
-}
-
-void
-BatchPutRemoveReply::print(std::ostream& out, bool verbose,
- const std::string& indent) const {
- out << "BatchPutRemoveReply(";
- out << _documentsNotFound.size() << " documents not found)";
-
- if (verbose) {
- out << " {";
- for (std::vector<document::DocumentId>::const_iterator it =
- _documentsNotFound.begin();
- it != _documentsNotFound.end(); ++it)
- {
- out << "\n" << indent << " " << (*it);
- }
- out << "\n" << indent << "} : ";
- BucketInfoReply::print(out, verbose, indent);
- }
-}
-
-BatchDocumentUpdateCommand::BatchDocumentUpdateCommand(const UpdateList& updates)
- : StorageCommand(MessageType::BATCHDOCUMENTUPDATE),
- _updates(updates),
- _bucket(BucketSpace::placeHolder(), document::BucketId())
-{
- document::BucketIdFactory factory;
- _bucket = document::Bucket(BucketSpace::placeHolder(), factory.getBucketId(updates[0]->getId()));
-}
-
-void
-BatchDocumentUpdateCommand::print(std::ostream& out, bool verbose,
- const std::string& indent) const {
- out << "BatchDocumentUpdate(" << _updates.size() << " operations)";
-
- if (verbose) {
- out << " : ";
- StorageCommand::print(out, verbose, indent);
- }
-}
-
-BatchDocumentUpdateReply::BatchDocumentUpdateReply(const BatchDocumentUpdateCommand& cmd)
- : StorageReply(cmd),
- _documentsNotFound()
-{
-}
-
-void
-BatchDocumentUpdateReply::print(std::ostream& out, bool verbose,
- const std::string& indent) const {
- out << "BatchDocumentUpdateReply("
- << std::count(_documentsNotFound.begin(), _documentsNotFound.end(), true)
- << " not found)";
-
- if (verbose) {
- out << " : ";
- StorageReply::print(out, verbose, indent);
- }
-}
diff --git a/storageapi/src/vespa/storageapi/message/batch.h b/storageapi/src/vespa/storageapi/message/batch.h
deleted file mode 100644
index 56cca3cfe38..00000000000
--- a/storageapi/src/vespa/storageapi/message/batch.h
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include <vespa/document/fieldvalue/document.h>
-#include <vespa/document/update/documentupdate.h>
-#include <vespa/storageapi/messageapi/bucketinfocommand.h>
-#include <vespa/storageapi/messageapi/bucketinforeply.h>
-
-namespace storage::api {
-
-/**
- * @class BatchPutRemoveCommand
- * @ingroup message
- *
- * @brief Sends a batch of puts and removes
- */
-class BatchPutRemoveCommand : public BucketInfoCommand {
-public:
- class Operation {
- public:
- enum Type {
- REMOVE, // Removes a document
- HEADERUPDATE, // Updates the header of a document, if it already exists.
- PUT // Inserts a new document.
- };
-
- Operation(uint64_t ts, Type type);
- virtual ~Operation() {};
-
- uint64_t timestamp;
- Type type;
-
- virtual const document::DocumentId& getDocumentId() const = 0;
- };
-
- explicit BatchPutRemoveCommand(const document::Bucket &bucket);
-
- class PutOperation : public Operation {
- public:
- PutOperation(document::Document::SP document, uint64_t timestamp);
-
- document::Document::SP document;
-
- const document::DocumentId& getDocumentId() const override {
- return document->getId();
- }
- };
-
- class HeaderUpdateOperation : public Operation {
- public:
- HeaderUpdateOperation(document::Document::SP document, uint64_t newTimestamp, uint64_t timestampToUpdate);
-
- document::Document::SP document;
- uint64_t timestampToUpdate;
-
- const document::DocumentId& getDocumentId() const override {
- return document->getId();
- }
- };
-
- class RemoveOperation : public Operation {
- public:
- RemoveOperation(const document::DocumentId& docId, uint64_t timestamp);
-
- document::DocumentId documentId;
-
- const document::DocumentId& getDocumentId() const override {
- return documentId;
- }
- };
-
- /**
- Adds a PUT operation to be performed.
- */
- void addPut(document::Document::SP document, uint64_t timestamp);
-
- /**
- Adds a PUT operation to be performed.
- */
- void addHeaderUpdate(document::Document::SP document, uint64_t newTimestamp, uint64_t timestampToUpdate);
-
- /**
- Adds a REMOVE operation to be performed.
- */
- void addRemove(const document::DocumentId& docId, uint64_t timestamp);
-
- /**
- * Adds an operation to be performed. Optionally deep-clones the
- * operation's document.
- */
- void addOperation(const Operation& op, bool cloneDocument = false);
-
- /**
- Returns the number of operations in this batch.
- */
- uint32_t getOperationCount() const { return _operations.size(); }
-
- /**
- Returns the nth operation in this batch.
- */
- const Operation& getOperation(uint32_t index) const { return *_operations[index]; }
-
- /**
- Returns the nth operation in this batch.
- */
- Operation& getOperation(uint32_t index) { return *_operations[index]; }
-
- void print(std::ostream& out, bool verbose, const std::string& indent) const override;
-
- DECLARE_STORAGECOMMAND(BatchPutRemoveCommand, onBatchPutRemove)
-
-private:
- std::vector<std::unique_ptr<Operation> > _operations;
- uint32_t _approxSize;
-};
-
-/**
- * @class BatchPutRemoveReply
- * @ingroup message
- *
- * @brief Confirm that a given docoperations have been received.
- */
-class BatchPutRemoveReply : public BucketInfoReply {
-private:
- std::vector<document::DocumentId> _documentsNotFound;
-
-public:
- explicit BatchPutRemoveReply(const BatchPutRemoveCommand&);
-
- void print(std::ostream& out, bool verbose, const std::string& indent) const override;
-
- const std::vector<document::DocumentId>& getDocumentsNotFound() const { return _documentsNotFound; }
- std::vector<document::DocumentId>& getDocumentsNotFound() { return _documentsNotFound; }
-
- DECLARE_STORAGEREPLY(BatchPutRemoveReply, onBatchPutRemoveReply)
-};
-
-class BatchDocumentUpdateCommand : public StorageCommand
-{
-public:
- typedef std::vector<document::DocumentUpdate::SP > UpdateList;
-
- /**
- Creates a batch update message containing the given updates.
- */
- BatchDocumentUpdateCommand(const UpdateList& updates);
-
- /**
- @return Returns a list of the updates to be performed.
- */
- const UpdateList& getUpdates() const { return _updates; };
- void print(std::ostream& out, bool verbose, const std::string& indent) const override;
-
- /**
- Returns a bucket suitable for routing this message.
- */
- document::Bucket getBucket() const override { return _bucket; }
- bool hasSingleBucketId() const override { return true; }
-
- DECLARE_STORAGECOMMAND(BatchDocumentUpdateCommand, onBatchDocumentUpdate)
-
-private:
- UpdateList _updates;
- document::Bucket _bucket;
-};
-
-/**
- * @class BatchDocumentUpdateReply
- * @ingroup message
- *
- * @brief Confirm that a given docoperations have been received.
- */
-class BatchDocumentUpdateReply : public StorageReply {
- // 1-1 mapping of found/not found state for documents
- std::vector<bool> _documentsNotFound;
-public:
- explicit BatchDocumentUpdateReply(const BatchDocumentUpdateCommand&);
- void print(std::ostream& out, bool verbose, const std::string& indent) const override;
- const std::vector<bool>& getDocumentsNotFound() const { return _documentsNotFound; }
- std::vector<bool>& getDocumentsNotFound() { return _documentsNotFound; }
-
- DECLARE_STORAGEREPLY(BatchDocumentUpdateReply, onBatchDocumentUpdateReply)
-};
-
-}
diff --git a/storageapi/src/vespa/storageapi/messageapi/messagehandler.h b/storageapi/src/vespa/storageapi/messageapi/messagehandler.h
index e7bd2b5bf27..a9c1dfb8f26 100644
--- a/storageapi/src/vespa/storageapi/messageapi/messagehandler.h
+++ b/storageapi/src/vespa/storageapi/messageapi/messagehandler.h
@@ -25,8 +25,6 @@ class PutCommand; // Add document
class UpdateCommand; // Update document
class RemoveCommand; // Remove document
class RevertCommand; // Revert put/remove operation
-class BatchPutRemoveCommand;
-class BatchDocumentUpdateCommand;
class CreateVisitorCommand; // Create a new visitor
class DestroyVisitorCommand; // Destroy a running visitor
@@ -64,8 +62,6 @@ class PutReply;
class UpdateReply;
class RemoveReply;
class RevertReply;
-class BatchPutRemoveReply;
-class BatchDocumentUpdateReply;
class CreateVisitorReply;
class DestroyVisitorReply;
@@ -143,18 +139,6 @@ public:
{ return false; }
virtual bool onRevertReply(const std::shared_ptr<api::RevertReply>&)
{ return false; }
- virtual bool onBatchPutRemove(
- const std::shared_ptr<api::BatchPutRemoveCommand>&)
- { return false; }
- virtual bool onBatchPutRemoveReply(
- const std::shared_ptr<api::BatchPutRemoveReply>&)
- { return false; }
- virtual bool onBatchDocumentUpdate(
- const std::shared_ptr<api::BatchDocumentUpdateCommand>&)
- { return false; }
- virtual bool onBatchDocumentUpdateReply(
- const std::shared_ptr<api::BatchDocumentUpdateReply>&)
- { return false; }
// Visiting
virtual bool onCreateVisitor(
diff --git a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
index 563a2aab7c1..bab475eea32 100644
--- a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
+++ b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
@@ -105,10 +105,6 @@ const MessageType MessageType::REMOVELOCATION("Removelocation", REMOVELOCATION_I
const MessageType MessageType::REMOVELOCATION_REPLY("Removelocation Reply", REMOVELOCATION_REPLY_ID, &MessageType::REMOVELOCATION);
const MessageType MessageType::QUERYRESULT("QueryResult", QUERYRESULT_ID);
const MessageType MessageType::QUERYRESULT_REPLY("QueryResult reply", QUERYRESULT_REPLY_ID, &MessageType::QUERYRESULT);
-const MessageType MessageType::BATCHPUTREMOVE("BatchPutRemove", BATCHPUTREMOVE_ID);
-const MessageType MessageType::BATCHPUTREMOVE_REPLY("BatchPutRemove reply", BATCHPUTREMOVE_REPLY_ID, &MessageType::BATCHPUTREMOVE);
-const MessageType MessageType::BATCHDOCUMENTUPDATE("BatchDocumentUpdate", BATCHDOCUMENTUPDATE_ID);
-const MessageType MessageType::BATCHDOCUMENTUPDATE_REPLY("BatchDocumentUpdate reply", BATCHDOCUMENTUPDATE_REPLY_ID, &MessageType::BATCHDOCUMENTUPDATE);
const MessageType MessageType::SETBUCKETSTATE("SetBucketState", SETBUCKETSTATE_ID);
const MessageType MessageType::SETBUCKETSTATE_REPLY("SetBucketStateReply", SETBUCKETSTATE_REPLY_ID, &MessageType::SETBUCKETSTATE);
diff --git a/storageapi/src/vespa/storageapi/messageapi/storagemessage.h b/storageapi/src/vespa/storageapi/messageapi/storagemessage.h
index c81ee51ae22..c9f6e737a47 100644
--- a/storageapi/src/vespa/storageapi/messageapi/storagemessage.h
+++ b/storageapi/src/vespa/storageapi/messageapi/storagemessage.h
@@ -147,10 +147,6 @@ public:
REMOVELOCATION_REPLY_ID = 87,
QUERYRESULT_ID = 88,
QUERYRESULT_REPLY_ID = 89,
- BATCHPUTREMOVE_ID = 90,
- BATCHPUTREMOVE_REPLY_ID = 91,
- BATCHDOCUMENTUPDATE_ID = 92,
- BATCHDOCUMENTUPDATE_REPLY_ID = 93,
SETBUCKETSTATE_ID = 94,
SETBUCKETSTATE_REPLY_ID = 95,
MESSAGETYPE_MAX_ID
@@ -233,10 +229,6 @@ public:
static const MessageType REMOVELOCATION_REPLY;
static const MessageType QUERYRESULT;
static const MessageType QUERYRESULT_REPLY;
- static const MessageType BATCHPUTREMOVE;
- static const MessageType BATCHPUTREMOVE_REPLY;
- static const MessageType BATCHDOCUMENTUPDATE;
- static const MessageType BATCHDOCUMENTUPDATE_REPLY;
static const MessageType SETBUCKETSTATE;
static const MessageType SETBUCKETSTATE_REPLY;
diff --git a/vespabase/src/start-cbinaries.sh b/vespabase/src/start-cbinaries.sh
index e61a3d8c8b1..02eac2f42bc 100755
--- a/vespabase/src/start-cbinaries.sh
+++ b/vespabase/src/start-cbinaries.sh
@@ -92,7 +92,7 @@ check_bname_in_value () {
configure_valgrind () {
no_valgrind=true
- if which valgrind >/dev/null; then
+ if which valgrind >/dev/null 2>&1; then
if check_bname_in_value $VESPA_USE_VALGRIND; then
no_valgrind=false
valgrind_log=$VESPA_HOME/tmp/valgrind.$bname.log.$$
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerStatus.java b/vespaclient-container-plugin/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerStatus.java
index 8c07ea30312..77d8a6ed37c 100755
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerStatus.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/feedhandler/VespaFeedHandlerStatus.java
@@ -9,6 +9,7 @@ import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
import com.yahoo.document.config.DocumentmanagerConfig;
+import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.feedapi.FeedContext;
import com.yahoo.metrics.MetricManager;
@@ -28,9 +29,12 @@ public class VespaFeedHandlerStatus extends ThreadedHttpRequestHandler {
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
ClusterListConfig clusterListConfig,
- Executor executor) {
- this(FeedContext.getInstance(feederConfig, loadTypeConfig, documentmanagerConfig, slobroksConfig,
- clusterListConfig, new NullFeedMetric()), true, true, executor);
+ Executor executor,
+ Metric metric) {
+ this(FeedContext.getInstance(feederConfig, loadTypeConfig,
+ documentmanagerConfig, slobroksConfig,
+ clusterListConfig, metric),
+ true, true, executor);
}
VespaFeedHandlerStatus(FeedContext context, boolean doLog, boolean makeSnapshots, Executor executor) {
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/GetSearcher.java b/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/GetSearcher.java
index 1660ef19e7f..3a5bda776b1 100755
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/GetSearcher.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/GetSearcher.java
@@ -6,7 +6,7 @@ import com.yahoo.cloud.config.ClusterListConfig;
import com.yahoo.cloud.config.SlobroksConfig;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.document.config.DocumentmanagerConfig;
-import com.yahoo.feedhandler.NullFeedMetric;
+import com.yahoo.jdisc.Metric;
import com.yahoo.processing.request.CompoundName;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.document.DataType;
@@ -199,9 +199,14 @@ public class GetSearcher extends Searcher {
LoadTypeConfig loadTypeConfig,
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
- ClusterListConfig clusterListConfig) throws Exception {
- this(FeedContext.getInstance(feederConfig, loadTypeConfig, documentmanagerConfig, slobroksConfig,
- clusterListConfig, new NullFeedMetric()), (long)(feederConfig.timeout() * 1000));
+ ClusterListConfig clusterListConfig,
+ Metric metric)
+ throws Exception
+ {
+ this(FeedContext.getInstance(feederConfig, loadTypeConfig,
+ documentmanagerConfig, slobroksConfig,
+ clusterListConfig, metric),
+ (long)(feederConfig.timeout() * 1000));
}
GetSearcher(FeedContext context) throws Exception {
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/VisitSearcher.java b/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/VisitSearcher.java
index 2f2a10c53ed..a3ac64e78a4 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/VisitSearcher.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/storage/searcher/VisitSearcher.java
@@ -4,7 +4,6 @@ package com.yahoo.storage.searcher;
import com.yahoo.cloud.config.ClusterListConfig;
import com.yahoo.cloud.config.SlobroksConfig;
import com.yahoo.document.config.DocumentmanagerConfig;
-import com.yahoo.feedhandler.NullFeedMetric;
import com.yahoo.vespa.config.content.LoadTypeConfig;
import com.yahoo.component.ComponentId;
import com.yahoo.component.ComponentSpecification;
@@ -14,6 +13,7 @@ import com.yahoo.documentapi.*;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.feedapi.FeedContext;
import com.yahoo.feedapi.MessagePropertyProcessor;
+import com.yahoo.jdisc.Metric;
import com.yahoo.messagebus.StaticThrottlePolicy;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -37,9 +37,13 @@ public class VisitSearcher extends Searcher {
LoadTypeConfig loadTypeConfig,
DocumentmanagerConfig documentmanagerConfig,
SlobroksConfig slobroksConfig,
- ClusterListConfig clusterListConfig) throws Exception {
- this(FeedContext.getInstance(feederConfig, loadTypeConfig, documentmanagerConfig,
- slobroksConfig, clusterListConfig, new NullFeedMetric()));
+ ClusterListConfig clusterListConfig,
+ Metric metric)
+ throws Exception
+ {
+ this(FeedContext.getInstance(feederConfig, loadTypeConfig,
+ documentmanagerConfig, slobroksConfig,
+ clusterListConfig, metric));
}
VisitSearcher(FeedContext context) throws Exception {
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java
index fcc4e18d66e..2c99ec194c3 100755
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/VespaFeedHandlerTestCase.java
@@ -67,7 +67,7 @@ public class VespaFeedHandlerTestCase {
factory = DummySessionFactory.createDefault();
}
- context = new FeedContext(new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder()), loadTypeCfg), factory, docMan, new ClusterList(), new NullFeedMetric());
+ context = new FeedContext(new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder()), loadTypeCfg), factory, docMan, new ClusterList(), new NullFeedMetric(true));
Executor threadPool = Executors.newCachedThreadPool();
feedHandler = new VespaFeedHandler(context, threadPool);
@@ -918,7 +918,7 @@ public class VespaFeedHandlerTestCase {
new FeedContext(new MessagePropertyProcessor(
new FeederConfig(new FeederConfig.Builder()),
new LoadTypeConfig(new LoadTypeConfig.Builder())),
- factory, null, new ClusterList(), new NullFeedMetric()),
+ factory, null, new ClusterList(), new NullFeedMetric(true)),
true, true,
Executors.newCachedThreadPool());
}
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java
index b5c3998432c..3c758114ecf 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java
@@ -101,7 +101,7 @@ public class FeedTesterV3 {
Executor threadPool = Executors.newCachedThreadPool();
DocumentmanagerConfig docMan = new DocumentmanagerConfig(new DocumentmanagerConfig.Builder().enablecompression(true));
FeedHandlerV3 feedHandlerV3 = new FeedHandlerV3(
- new FeedHandlerV3.Context(threadPool, AccessLog.voidAccessLog(), new NullFeedMetric()),
+ new FeedHandlerV3.Context(threadPool, AccessLog.voidAccessLog(), new NullFeedMetric(true)),
docMan,
null /* session cache */,
null /* thread pool config */,
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/GetSearcherTestCase.java b/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/GetSearcherTestCase.java
index 9d6c8c2feac..14fe0dc857d 100755
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/GetSearcherTestCase.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/GetSearcherTestCase.java
@@ -78,7 +78,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType); // Needs auto-reply
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(newQuery("?id=userdoc:kittens:1:2"));
@@ -105,7 +105,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Query query = newQuery("?id[0]=userdoc:kittens:1:2&id[1]=userdoc:kittens:3:4");
@@ -141,7 +141,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
String data = "userdoc:kittens:5:6\nuserdoc:kittens:7:8\nuserdoc:kittens:9:10";
@@ -161,7 +161,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
String data = "userdoc:kittens:5:6\nuserdoc:kittens:7:8\nuserdoc:kittens:9:10";
@@ -184,7 +184,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
HitGroup hits = new HitGroup("mock");
hits.add(new Hit("blernsball"));
Chain<Searcher> searchChain = new Chain<>(searcher, new MockBackend(hits));
@@ -212,7 +212,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType, null, false, replies);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
DocumentHit backendHit = new DocumentHit(new Document(docType, new DocumentId("userdoc:kittens:5678:bar")), 5);
Chain<Searcher> searchChain = new Chain<>(searcher, new MockBackend(backendHit));
@@ -229,7 +229,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
HitGroup hits = new HitGroup("mock");
hits.add(new Hit("blernsball"));
Chain<Searcher> searchChain = new Chain<>(searcher, new MockBackend(hits));
@@ -257,7 +257,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder().timeout(58).route("route66").retryenabled(false)), defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(newQuery("?id=doc:batman:dahnahnahnah"));
@@ -283,7 +283,7 @@ public class GetSearcherTestCase {
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder().timeout(58).route("riksveg18").retryenabled(true)),
defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
new Execution(searchChain, Execution.Context.createContextStub()).search(newQuery("?id=doc:batman:dahnahnahnah"));
@@ -336,7 +336,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -376,7 +376,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -415,7 +415,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -441,7 +441,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
{
@@ -513,7 +513,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType); // Needs auto-reply
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -548,7 +548,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType, null, false, replies);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -570,7 +570,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType, err, true);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -618,7 +618,7 @@ public class GetSearcherTestCase {
factory.setNullReply(true);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -782,7 +782,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -831,7 +831,7 @@ public class GetSearcherTestCase {
factory.setNullReply(true);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(
@@ -978,7 +978,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType); // Needs auto-reply
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
Chain<Searcher> searchChain = new Chain<>(searcher);
Query query = newQuery("?id=userdoc:kittens:1:2&format=json");
@@ -994,7 +994,7 @@ public class GetSearcherTestCase {
DocumentSessionFactory factory = new DocumentSessionFactory(docType, null, false, replies);
GetSearcher searcher = new GetSearcher(new FeedContext(
new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg),
- factory, docMan, new ClusterList(), new NullFeedMetric()));
+ factory, docMan, new ClusterList(), new NullFeedMetric(true)));
return new Chain<>(searcher);
}
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/VisitorSearcherTestCase.java b/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/VisitorSearcherTestCase.java
index 0236887f8ff..e49d2ca4db3 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/VisitorSearcherTestCase.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/storage/searcher/VisitorSearcherTestCase.java
@@ -61,7 +61,7 @@ public class VisitorSearcherTestCase {
return new VisitSearcher(new FeedContext(
new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder().timeout(458).route("riksveg18").retryenabled(true)),
new LoadTypeConfig(new LoadTypeConfig.Builder())),
- factory, docMan, clusterList, new NullFeedMetric()));
+ factory, docMan, clusterList, new NullFeedMetric(true)));
}
@Test
@@ -139,7 +139,7 @@ public class VisitorSearcherTestCase {
VisitSearcher searcher = new VisitSearcher(new FeedContext(
new MessagePropertyProcessor(new FeederConfig(new FeederConfig.Builder().timeout(100).route("whatever").retryenabled(true)),
new LoadTypeConfig(new LoadTypeConfig.Builder())),
- factory, docMan, clusterList, new NullFeedMetric()));
+ factory, docMan, clusterList, new NullFeedMetric(true)));
searcher.getVisitorParameters(newQuery("visit?visit.selection=id.user=1234"), null);
}
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/DocprocMessageProcessor.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/DocprocMessageProcessor.java
index dca68c230f3..195604b067f 100755
--- a/vespaclient-core/src/main/java/com/yahoo/feedapi/DocprocMessageProcessor.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/DocprocMessageProcessor.java
@@ -7,7 +7,6 @@ import com.yahoo.docproc.DocprocService;
import com.yahoo.docproc.DocumentProcessor;
import com.yahoo.docproc.Processing;
import com.yahoo.document.*;
-import com.yahoo.documentapi.messagebus.protocol.BatchDocumentUpdateMessage;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.documentapi.messagebus.protocol.PutDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage;
@@ -40,10 +39,6 @@ public class DocprocMessageProcessor implements MessageProcessor {
documentBases.add(((UpdateDocumentMessage) m).getDocumentUpdate());
} else if (m.getType() == DocumentProtocol.MESSAGE_REMOVEDOCUMENT) {
documentBases.add(((RemoveDocumentMessage) m).getDocumentRemove());
- } else if (m.getType() == DocumentProtocol.MESSAGE_BATCHDOCUMENTUPDATE) {
- for (DocumentUpdate update : ((BatchDocumentUpdateMessage) m).getUpdates()) {
- documentBases.add(update);
- }
}
if (docproc != null) {
diff --git a/vespaclient-core/src/main/java/com/yahoo/feedhandler/NullFeedMetric.java b/vespaclient-core/src/main/java/com/yahoo/feedhandler/NullFeedMetric.java
index b8363ace62d..2940c0fcc44 100644
--- a/vespaclient-core/src/main/java/com/yahoo/feedhandler/NullFeedMetric.java
+++ b/vespaclient-core/src/main/java/com/yahoo/feedhandler/NullFeedMetric.java
@@ -9,6 +9,13 @@ import java.util.Map;
* @since 5.1.20
*/
public final class NullFeedMetric implements Metric {
+
+ public NullFeedMetric(boolean flag) {
+ if (!flag) {
+ throw new IllegalArgumentException("must set flag allowing to throw away metrics");
+ }
+ }
+
@Override
public void set(String key, Number val, Context ctx) {
}
diff --git a/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java
index 0d70f03014e..0a926f6aae2 100755
--- a/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java
+++ b/vespaclient-java/src/main/java/com/yahoo/vespafeeder/VespaFeeder.java
@@ -74,7 +74,7 @@ public class VespaFeeder {
args.getPropertyProcessor(),
args.getSessionFactory(),
manager,
- new ClusterList(), new NullFeedMetric());
+ new ClusterList(), new NullFeedMetric(true));
final BufferedInputStream input = new BufferedInputStream(stdin);
VespaFeedHandler handler = VespaFeedHandler.createFromContext(context, threadPool);
diff --git a/vespajlib/pom.xml b/vespajlib/pom.xml
index 5b9c143a447..741b4b58cc9 100644
--- a/vespajlib/pom.xml
+++ b/vespajlib/pom.xml
@@ -31,6 +31,10 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
</dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ </dependency>
<!-- provided scope -->
diff --git a/vespajlib/src/main/java/com/yahoo/io/NativeIO.java b/vespajlib/src/main/java/com/yahoo/io/NativeIO.java
new file mode 100644
index 00000000000..f08e01070d7
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/io/NativeIO.java
@@ -0,0 +1,104 @@
+package com.yahoo.io;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.SyncFailedException;
+import java.lang.reflect.Field;
+import java.util.logging.Logger;
+
+import com.sun.jna.LastErrorException;
+import com.sun.jna.Native;
+import com.sun.jna.Platform;
+
+/**
+ * Provides functionality only possible through native C library.
+ */
+public class NativeIO {
+ private final static Logger logger = Logger.getLogger(NativeIO.class.getName());
+ private static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h
+ private static boolean initialized = false;
+ private static Throwable initError = null;
+ static {
+ try {
+ if (Platform.isLinux()) {
+ Native.register(Platform.C_LIBRARY_NAME);
+ initialized = true;
+ }
+ } catch (Throwable throwable) {
+ initError = throwable;
+ }
+ }
+
+ private static final Field fieldFD = getField(FileDescriptor.class, "fd");
+
+
+ private static native int posix_fadvise(int fd, long offset, long len, int flag) throws LastErrorException;
+
+ public NativeIO() {
+ if (!initialized) {
+ logger.warning("native IO not possible due to " + getError().getMessage());
+ }
+ }
+
+ public boolean valid() { return initialized; }
+ public Throwable getError() {
+ if (initError != null) {
+ return initError;
+ } else {
+ return new RuntimeException("Platform is unsúpported. Only supported on linux.");
+ }
+ }
+
+ /**
+ * Will hint the OS that this is will not be accessed again and should hence be dropped from the buffer cache.
+ * @param fd The file descriptor to drop from buffer cache.
+ */
+ public void dropFileFromCache(FileDescriptor fd) {
+ try {
+ fd.sync();
+ } catch (SyncFailedException e) {
+ logger.warning("Sync failed while dropping cache: " + e.getMessage());
+ }
+ if (initialized) {
+ posix_fadvise(getNativeFD(fd), 0, 0, POSIX_FADV_DONTNEED);
+ }
+ }
+
+ /**
+ * Will hint the OS that this is will not be accessed again and should hence be dropped from the buffer cache.
+ * @param file File to drop from buffer cache
+ */
+ public void dropFileFromCache(File file) {
+ try {
+ dropFileFromCache(new FileInputStream(file).getFD());
+ } catch (FileNotFoundException e) {
+ logger.warning("No point in dropping a non-existing file from the buffer cache: " + e.getMessage());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private static Field getField(Class<?> clazz, String fieldName) {
+ Field field;
+ try {
+ field = clazz.getDeclaredField(fieldName);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ }
+ field.setAccessible(true);
+ return field;
+ }
+
+ private static int getNativeFD(FileDescriptor fd) {
+ try {
+ return fieldFD.getInt(fd);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java b/vespajlib/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java
new file mode 100644
index 00000000000..5595d33a9b5
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java
@@ -0,0 +1,66 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.security.tls;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * Utility class for retrieving {@link TransportSecurityOptions} from the system.
+ *
+ * @author bjorncs
+ */
+public class TransportSecurityUtils {
+
+ public static final String CONFIG_FILE_ENVIRONMENT_VARIABLE = "VESPA_TLS_CONFIG_FILE";
+ public static final String INSECURE_MIXED_MODE_ENVIRONMENT_VARIABLE = "VESPA_TLS_INSECURE_MIXED_MODE";
+
+ public enum MixedMode {
+ PLAINTEXT_CLIENT_MIXED_SERVER("plaintext_client_mixed_server"),
+ TLS_CLIENT_MIXED_SERVER("tls_client_mixed_server");
+
+ final String configValue;
+
+ MixedMode(String configValue) {
+ this.configValue = configValue;
+ }
+
+ static MixedMode fromConfigValue(String configValue) {
+ return Arrays.stream(values())
+ .filter(v -> v.configValue.equals(configValue))
+ .findFirst()
+ .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + configValue));
+ }
+ }
+
+ private TransportSecurityUtils() {}
+
+ public static boolean isTransportSecurityEnabled() {
+ return getConfigFile().isPresent();
+ }
+
+ public static boolean isInsecureMixedModeEnabled() {
+ return getInsecureMixedMode().isPresent();
+ }
+
+ public static Optional<MixedMode> getInsecureMixedMode() {
+ if (!isTransportSecurityEnabled()) return Optional.empty();
+ return getEnvironmentVariable(INSECURE_MIXED_MODE_ENVIRONMENT_VARIABLE)
+ .map(MixedMode::fromConfigValue);
+ }
+
+ public static Optional<Path> getConfigFile() {
+ return getEnvironmentVariable(CONFIG_FILE_ENVIRONMENT_VARIABLE).map(Paths::get);
+ }
+
+ public static Optional<TransportSecurityOptions> getOptions() {
+ return getConfigFile()
+ .map(TransportSecurityOptions::fromJsonFile);
+ }
+
+ private static Optional<String> getEnvironmentVariable(String environmentVariable) {
+ return Optional.ofNullable(System.getenv(environmentVariable))
+ .filter(var -> !var.isEmpty());
+ }
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/IndexedTensor.java b/vespajlib/src/main/java/com/yahoo/tensor/IndexedTensor.java
index 38979411313..2d127eb86cf 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/IndexedTensor.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/IndexedTensor.java
@@ -116,7 +116,14 @@ public class IndexedTensor implements Tensor {
}
}
- private double get(long valueIndex) { return values[(int)valueIndex]; }
+ /**
+ * Returns the value at the given index by direct lookup. Only use
+ * if you know the underlying data layout.
+ *
+ * @param valueIndex the direct index into the underlying data.
+ * @throws IndexOutOfBoundsException if index is out of bounds
+ */
+ public double get(long valueIndex) { return values[(int)valueIndex]; }
private static long toValueIndex(long[] indexes, DimensionSizes sizes) {
if (indexes.length == 1) return indexes[0]; // for speed
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java b/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
index c846364df29..1d447ed3eed 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/TensorType.java
@@ -462,7 +462,7 @@ public class TensorType {
return add(new MappedDimension(name));
}
- /** Adds the give dimension */
+ /** Adds the given dimension */
public Builder dimension(Dimension dimension) {
return add(dimension);
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
index 2a52df20108..5dd2cc442aa 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
@@ -22,7 +22,7 @@ public abstract class CompositeTensorFunction extends TensorFunction {
/** Evaluates this by first converting it to a primitive function */
@Override
- public final <NAMETYPE extends TypeContext.Name> Tensor evaluate(EvaluationContext<NAMETYPE> context) {
+ public <NAMETYPE extends TypeContext.Name> Tensor evaluate(EvaluationContext<NAMETYPE> context) {
return toPrimitive().evaluate(context);
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
index be323313369..62ee471fcf4 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
@@ -82,25 +82,29 @@ public class Join extends PrimitiveTensorFunction {
Tensor a = argumentA.evaluate(context);
Tensor b = argumentB.evaluate(context);
TensorType joinedType = new TensorType.Builder(a.type(), b.type()).build();
+ return evaluate(a, b, joinedType, combinator);
+ }
+ static Tensor evaluate(Tensor a, Tensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
// Choose join algorithm
if (hasSingleIndexedDimension(a) && hasSingleIndexedDimension(b) && a.type().dimensions().get(0).name().equals(b.type().dimensions().get(0).name()))
- return indexedVectorJoin((IndexedTensor)a, (IndexedTensor)b, joinedType);
+ return indexedVectorJoin((IndexedTensor)a, (IndexedTensor)b, joinedType, combinator);
else if (joinedType.dimensions().size() == a.type().dimensions().size() && joinedType.dimensions().size() == b.type().dimensions().size())
- return singleSpaceJoin(a, b, joinedType);
+ return singleSpaceJoin(a, b, joinedType, combinator);
else if (a.type().dimensions().containsAll(b.type().dimensions()))
- return subspaceJoin(b, a, joinedType, true);
+ return subspaceJoin(b, a, joinedType, true, combinator);
else if (b.type().dimensions().containsAll(a.type().dimensions()))
- return subspaceJoin(a, b, joinedType, false);
+ return subspaceJoin(a, b, joinedType, false, combinator);
else
- return generalJoin(a, b, joinedType);
+ return generalJoin(a, b, joinedType, combinator);
+
}
- private boolean hasSingleIndexedDimension(Tensor tensor) {
+ private static boolean hasSingleIndexedDimension(Tensor tensor) {
return tensor.type().dimensions().size() == 1 && tensor.type().dimensions().get(0).isIndexed();
}
- private Tensor indexedVectorJoin(IndexedTensor a, IndexedTensor b, TensorType type) {
+ private static Tensor indexedVectorJoin(IndexedTensor a, IndexedTensor b, TensorType type, DoubleBinaryOperator combinator) {
long joinedRank = Math.min(a.dimensionSizes().size(0), b.dimensionSizes().size(0));
Iterator<Double> aIterator = a.valueIterator();
Iterator<Double> bIterator = b.valueIterator();
@@ -111,7 +115,7 @@ public class Join extends PrimitiveTensorFunction {
}
/** When both tensors have the same dimensions, at most one cell matches a cell in the other tensor */
- private Tensor singleSpaceJoin(Tensor a, Tensor b, TensorType joinedType) {
+ private static Tensor singleSpaceJoin(Tensor a, Tensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
Tensor.Builder builder = Tensor.Builder.of(joinedType);
for (Iterator<Tensor.Cell> i = a.cellIterator(); i.hasNext(); ) {
Map.Entry<TensorAddress, Double> aCell = i.next();
@@ -123,14 +127,14 @@ public class Join extends PrimitiveTensorFunction {
}
/** Join a tensor into a superspace */
- private Tensor subspaceJoin(Tensor subspace, Tensor superspace, TensorType joinedType, boolean reversedArgumentOrder) {
+ private static Tensor subspaceJoin(Tensor subspace, Tensor superspace, TensorType joinedType, boolean reversedArgumentOrder, DoubleBinaryOperator combinator) {
if (subspace instanceof IndexedTensor && superspace instanceof IndexedTensor)
- return indexedSubspaceJoin((IndexedTensor) subspace, (IndexedTensor) superspace, joinedType, reversedArgumentOrder);
+ return indexedSubspaceJoin((IndexedTensor) subspace, (IndexedTensor) superspace, joinedType, reversedArgumentOrder, combinator);
else
- return generalSubspaceJoin(subspace, superspace, joinedType, reversedArgumentOrder);
+ return generalSubspaceJoin(subspace, superspace, joinedType, reversedArgumentOrder, combinator);
}
- private Tensor indexedSubspaceJoin(IndexedTensor subspace, IndexedTensor superspace, TensorType joinedType, boolean reversedArgumentOrder) {
+ private static Tensor indexedSubspaceJoin(IndexedTensor subspace, IndexedTensor superspace, TensorType joinedType, boolean reversedArgumentOrder, DoubleBinaryOperator combinator) {
if (subspace.size() == 0 || superspace.size() == 0) // special case empty here to avoid doing it when finding sizes
return Tensor.Builder.of(joinedType, new DimensionSizes.Builder(joinedType.dimensions().size()).build()).build();
@@ -145,16 +149,17 @@ public class Join extends PrimitiveTensorFunction {
for (Iterator<IndexedTensor.SubspaceIterator> i = superspace.subspaceIterator(superDimensionNames, joinedSizes); i.hasNext(); ) {
IndexedTensor.SubspaceIterator subspaceInSuper = i.next();
joinSubspaces(subspace.valueIterator(), subspace.size(),
- subspaceInSuper, subspaceInSuper.size(),
- reversedArgumentOrder, builder);
+ subspaceInSuper, subspaceInSuper.size(),
+ reversedArgumentOrder, builder, combinator);
}
return builder.build();
}
- private void joinSubspaces(Iterator<Double> subspace, long subspaceSize,
- Iterator<Tensor.Cell> superspace, long superspaceSize,
- boolean reversedArgumentOrder, IndexedTensor.Builder builder) {
+ private static void joinSubspaces(Iterator<Double> subspace, long subspaceSize,
+ Iterator<Tensor.Cell> superspace, long superspaceSize,
+ boolean reversedArgumentOrder, IndexedTensor.Builder builder,
+ DoubleBinaryOperator combinator) {
long joinedLength = Math.min(subspaceSize, superspaceSize);
if (reversedArgumentOrder) {
for (int i = 0; i < joinedLength; i++) {
@@ -169,7 +174,7 @@ public class Join extends PrimitiveTensorFunction {
}
}
- private DimensionSizes joinedSize(TensorType joinedType, IndexedTensor a, IndexedTensor b) {
+ private static DimensionSizes joinedSize(TensorType joinedType, IndexedTensor a, IndexedTensor b) {
DimensionSizes.Builder builder = new DimensionSizes.Builder(joinedType.dimensions().size());
for (int i = 0; i < builder.dimensions(); i++) {
String dimensionName = joinedType.dimensions().get(i).name();
@@ -185,7 +190,7 @@ public class Join extends PrimitiveTensorFunction {
return builder.build();
}
- private Tensor generalSubspaceJoin(Tensor subspace, Tensor superspace, TensorType joinedType, boolean reversedArgumentOrder) {
+ private static Tensor generalSubspaceJoin(Tensor subspace, Tensor superspace, TensorType joinedType, boolean reversedArgumentOrder, DoubleBinaryOperator combinator) {
int[] subspaceIndexes = subspaceIndexes(superspace.type(), subspace.type());
Tensor.Builder builder = Tensor.Builder.of(joinedType);
for (Iterator<Tensor.Cell> i = superspace.cellIterator(); i.hasNext(); ) {
@@ -194,21 +199,21 @@ public class Join extends PrimitiveTensorFunction {
double subspaceValue = subspace.get(subaddress);
if ( ! Double.isNaN(subspaceValue))
builder.cell(supercell.getKey(),
- reversedArgumentOrder ? combinator.applyAsDouble(supercell.getValue(), subspaceValue)
- : combinator.applyAsDouble(subspaceValue, supercell.getValue()));
+ reversedArgumentOrder ? combinator.applyAsDouble(supercell.getValue(), subspaceValue)
+ : combinator.applyAsDouble(subspaceValue, supercell.getValue()));
}
return builder.build();
}
/** Returns the indexes in the superspace type which should be retained to create the subspace type */
- private int[] subspaceIndexes(TensorType supertype, TensorType subtype) {
+ private static int[] subspaceIndexes(TensorType supertype, TensorType subtype) {
int[] subspaceIndexes = new int[subtype.dimensions().size()];
for (int i = 0; i < subtype.dimensions().size(); i++)
subspaceIndexes[i] = supertype.indexOfDimension(subtype.dimensions().get(i).name()).get();
return subspaceIndexes;
}
- private TensorAddress mapAddressToSubspace(TensorAddress superAddress, int[] subspaceIndexes) {
+ private static TensorAddress mapAddressToSubspace(TensorAddress superAddress, int[] subspaceIndexes) {
String[] subspaceLabels = new String[subspaceIndexes.length];
for (int i = 0; i < subspaceIndexes.length; i++)
subspaceLabels[i] = superAddress.label(subspaceIndexes[i]);
@@ -216,25 +221,25 @@ public class Join extends PrimitiveTensorFunction {
}
/** Slow join which works for any two tensors */
- private Tensor generalJoin(Tensor a, Tensor b, TensorType joinedType) {
+ private static Tensor generalJoin(Tensor a, Tensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
if (a instanceof IndexedTensor && b instanceof IndexedTensor)
- return indexedGeneralJoin((IndexedTensor) a, (IndexedTensor) b, joinedType);
+ return indexedGeneralJoin((IndexedTensor) a, (IndexedTensor) b, joinedType, combinator);
else
- return mappedHashJoin(a, b, joinedType);
+ return mappedHashJoin(a, b, joinedType, combinator);
}
- private Tensor indexedGeneralJoin(IndexedTensor a, IndexedTensor b, TensorType joinedType) {
+ private static Tensor indexedGeneralJoin(IndexedTensor a, IndexedTensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
DimensionSizes joinedSize = joinedSize(joinedType, a, b);
Tensor.Builder builder = Tensor.Builder.of(joinedType, joinedSize);
int[] aToIndexes = mapIndexes(a.type(), joinedType);
int[] bToIndexes = mapIndexes(b.type(), joinedType);
- joinTo(a, b, joinedType, joinedSize, aToIndexes, bToIndexes, false, builder);
-// joinTo(b, a, joinedType, joinedSize, bToIndexes, aToIndexes, true, builder);
+ joinTo(a, b, joinedType, joinedSize, aToIndexes, bToIndexes, builder, combinator);
return builder.build();
}
- private void joinTo(IndexedTensor a, IndexedTensor b, TensorType joinedType, DimensionSizes joinedSize,
- int[] aToIndexes, int[] bToIndexes, boolean reversedOrder, Tensor.Builder builder) {
+ private static void joinTo(IndexedTensor a, IndexedTensor b, TensorType joinedType, DimensionSizes joinedSize,
+ int[] aToIndexes, int[] bToIndexes, Tensor.Builder builder,
+ DoubleBinaryOperator combinator) {
Set<String> sharedDimensions = Sets.intersection(a.type().dimensionNames(), b.type().dimensionNames());
Set<String> dimensionsOnlyInA = Sets.difference(a.type().dimensionNames(), b.type().dimensionNames());
@@ -252,15 +257,14 @@ public class Join extends PrimitiveTensorFunction {
for (IndexedTensor.SubspaceIterator bSubspace = b.cellIterator(matchingBCells, bIterateSize); bSubspace.hasNext(); ) {
Tensor.Cell bCell = bSubspace.next();
TensorAddress joinedAddress = joinAddresses(aCell.getKey(), aToIndexes, bCell.getKey(), bToIndexes, joinedType);
- double joinedValue = reversedOrder ? combinator.applyAsDouble(bCell.getValue(), aCell.getValue())
- : combinator.applyAsDouble(aCell.getValue(), bCell.getValue());
+ double joinedValue = combinator.applyAsDouble(aCell.getValue(), bCell.getValue());
builder.cell(joinedAddress, joinedValue);
}
}
}
}
- private PartialAddress partialAddress(TensorType addressType, TensorAddress address, Set<String> retainDimensions) {
+ private static PartialAddress partialAddress(TensorType addressType, TensorAddress address, Set<String> retainDimensions) {
PartialAddress.Builder builder = new PartialAddress.Builder(retainDimensions.size());
for (int i = 0; i < addressType.dimensions().size(); i++)
if (retainDimensions.contains(addressType.dimensions().get(i).name()))
@@ -269,7 +273,7 @@ public class Join extends PrimitiveTensorFunction {
}
/** Returns the sizes from the joined sizes which are present in the type argument */
- private DimensionSizes joinedSizeOf(TensorType type, TensorType joinedType, DimensionSizes joinedSizes) {
+ private static DimensionSizes joinedSizeOf(TensorType type, TensorType joinedType, DimensionSizes joinedSizes) {
DimensionSizes.Builder builder = new DimensionSizes.Builder(type.dimensions().size());
int dimensionIndex = 0;
for (int i = 0; i < joinedType.dimensions().size(); i++) {
@@ -279,7 +283,7 @@ public class Join extends PrimitiveTensorFunction {
return builder.build();
}
- private Tensor mappedGeneralJoin(Tensor a, Tensor b, TensorType joinedType) {
+ private static Tensor mappedGeneralJoin(Tensor a, Tensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
int[] aToIndexes = mapIndexes(a.type(), joinedType);
int[] bToIndexes = mapIndexes(b.type(), joinedType);
Tensor.Builder builder = Tensor.Builder.of(joinedType);
@@ -288,7 +292,7 @@ public class Join extends PrimitiveTensorFunction {
for (Iterator<Tensor.Cell> bIterator = b.cellIterator(); bIterator.hasNext(); ) {
Map.Entry<TensorAddress, Double> bCell = bIterator.next();
TensorAddress combinedAddress = joinAddresses(aCell.getKey(), aToIndexes,
- bCell.getKey(), bToIndexes, joinedType);
+ bCell.getKey(), bToIndexes, joinedType);
if (combinedAddress == null) continue; // not combinable
builder.cell(combinedAddress, combinator.applyAsDouble(aCell.getValue(), bCell.getValue()));
}
@@ -296,10 +300,10 @@ public class Join extends PrimitiveTensorFunction {
return builder.build();
}
- private Tensor mappedHashJoin(Tensor a, Tensor b, TensorType joinedType) {
+ private static Tensor mappedHashJoin(Tensor a, Tensor b, TensorType joinedType, DoubleBinaryOperator combinator) {
TensorType commonDimensionType = commonDimensions(a, b);
if (commonDimensionType.dimensions().isEmpty()) {
- return mappedGeneralJoin(a, b, joinedType); // fallback
+ return mappedGeneralJoin(a, b, joinedType, combinator); // fallback
}
boolean swapTensors = a.size() > b.size();
@@ -351,15 +355,15 @@ public class Join extends PrimitiveTensorFunction {
* fromType.dimensions().get(i).name.equals(toType.dimensions().get(n).name())
* If some dimension in fromType is not present in toType, the corresponding index will be -1
*/
- private int[] mapIndexes(TensorType fromType, TensorType toType) {
+ static int[] mapIndexes(TensorType fromType, TensorType toType) {
int[] toIndexes = new int[fromType.dimensions().size()];
for (int i = 0; i < fromType.dimensions().size(); i++)
toIndexes[i] = toType.indexOfDimension(fromType.dimensions().get(i).name()).orElse(-1);
return toIndexes;
}
- private TensorAddress joinAddresses(TensorAddress a, int[] aToIndexes, TensorAddress b, int[] bToIndexes,
- TensorType joinedType) {
+ private static TensorAddress joinAddresses(TensorAddress a, int[] aToIndexes, TensorAddress b, int[] bToIndexes,
+ TensorType joinedType) {
String[] joinedLabels = new String[joinedType.dimensions().size()];
mapContent(a, joinedLabels, aToIndexes);
boolean compatible = mapContent(b, joinedLabels, bToIndexes);
@@ -373,7 +377,7 @@ public class Join extends PrimitiveTensorFunction {
* @return true if the mapping was successful, false if one of the destination positions was
* occupied by a different value
*/
- private boolean mapContent(TensorAddress from, String[] to, int[] indexMap) {
+ private static boolean mapContent(TensorAddress from, String[] to, int[] indexMap) {
for (int i = 0; i < from.size(); i++) {
int toIndex = indexMap[i];
if (to[toIndex] != null && ! to[toIndex].equals(from.label(i))) return false;
@@ -382,11 +386,10 @@ public class Join extends PrimitiveTensorFunction {
return true;
}
-
/**
* Returns common dimension of a and b as a new tensor type
*/
- private TensorType commonDimensions(Tensor a, Tensor b) {
+ private static TensorType commonDimensions(Tensor a, Tensor b) {
TensorType.Builder typeBuilder = new TensorType.Builder();
TensorType aType = a.type();
TensorType bType = b.type();
@@ -402,14 +405,14 @@ public class Join extends PrimitiveTensorFunction {
return typeBuilder.build();
}
- private TensorAddress partialCommonAddress(Tensor.Cell cell, int[] indexMap) {
+ private static TensorAddress partialCommonAddress(Tensor.Cell cell, int[] indexMap) {
TensorAddress address = cell.getKey();
String[] labels = new String[indexMap.length];
for (int i = 0; i < labels.length; ++i) {
labels[i] = address.label(indexMap[i]);
}
return TensorAddress.of(labels);
-
}
}
+
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
index 332150f957d..54d7710c9dc 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
@@ -32,7 +32,7 @@ public class Reduce extends PrimitiveTensorFunction {
private final List<String> dimensions;
private final Aggregator aggregator;
- /** Creates a reduce function reducing aLL dimensions */
+ /** Creates a reduce function reducing all dimensions */
public Reduce(TensorFunction argument, Aggregator aggregator) {
this(argument, aggregator, Collections.emptyList());
}
@@ -61,6 +61,7 @@ public class Reduce extends PrimitiveTensorFunction {
}
public static TensorType outputType(TensorType inputType, List<String> reduceDimensions) {
+ if (reduceDimensions.isEmpty()) return TensorType.empty; // means reduce all
TensorType.Builder b = new TensorType.Builder();
for (TensorType.Dimension dimension : inputType.dimensions()) {
if ( ! reduceDimensions.contains(dimension.name()))
@@ -71,6 +72,10 @@ public class Reduce extends PrimitiveTensorFunction {
public TensorFunction argument() { return argument; }
+ Aggregator aggregator() { return aggregator; }
+
+ List<String> dimensions() { return dimensions; }
+
@Override
public List<TensorFunction> arguments() { return Collections.singletonList(argument); }
@@ -91,7 +96,7 @@ public class Reduce extends PrimitiveTensorFunction {
return "reduce(" + argument.toString(context) + ", " + aggregator + commaSeparated(dimensions) + ")";
}
- private String commaSeparated(List<String> list) {
+ static String commaSeparated(List<String> list) {
StringBuilder b = new StringBuilder();
for (String element : list)
b.append(", ").append(element);
@@ -100,10 +105,10 @@ public class Reduce extends PrimitiveTensorFunction {
@Override
public <NAMETYPE extends TypeContext.Name> TensorType type(TypeContext<NAMETYPE> context) {
- return type(argument.type(context));
+ return type(argument.type(context), dimensions);
}
- private TensorType type(TensorType argumentType) {
+ private static TensorType type(TensorType argumentType, List<String> dimensions) {
if (dimensions.isEmpty()) return TensorType.empty; // means reduce all
TensorType.Builder builder = new TensorType.Builder();
for (TensorType.Dimension dimension : argumentType.dimensions())
@@ -114,7 +119,10 @@ public class Reduce extends PrimitiveTensorFunction {
@Override
public <NAMETYPE extends TypeContext.Name> Tensor evaluate(EvaluationContext<NAMETYPE> context) {
- Tensor argument = this.argument.evaluate(context);
+ return evaluate(this.argument.evaluate(context), dimensions, aggregator);
+ }
+
+ static Tensor evaluate(Tensor argument, List<String> dimensions, Aggregator aggregator) {
if ( ! dimensions.isEmpty() && ! argument.type().dimensionNames().containsAll(dimensions))
throw new IllegalArgumentException("Cannot reduce " + argument + " over dimensions " +
dimensions + ": Not all those dimensions are present in this tensor");
@@ -122,17 +130,17 @@ public class Reduce extends PrimitiveTensorFunction {
// Special case: Reduce all
if (dimensions.isEmpty() || dimensions.size() == argument.type().dimensions().size())
if (argument.type().dimensions().size() == 1 && argument instanceof IndexedTensor)
- return reduceIndexedVector((IndexedTensor)argument);
+ return reduceIndexedVector((IndexedTensor)argument, aggregator);
else
- return reduceAllGeneral(argument);
+ return reduceAllGeneral(argument, aggregator);
- TensorType reducedType = type(argument.type());
+ TensorType reducedType = type(argument.type(), dimensions);
// Reduce cells
Map<TensorAddress, ValueAggregator> aggregatingCells = new HashMap<>();
for (Iterator<Tensor.Cell> i = argument.cellIterator(); i.hasNext(); ) {
Map.Entry<TensorAddress, Double> cell = i.next();
- TensorAddress reducedAddress = reduceDimensions(cell.getKey(), argument.type(), reducedType);
+ TensorAddress reducedAddress = reduceDimensions(cell.getKey(), argument.type(), reducedType, dimensions);
aggregatingCells.putIfAbsent(reducedAddress, ValueAggregator.ofType(aggregator));
aggregatingCells.get(reducedAddress).aggregate(cell.getValue());
}
@@ -141,11 +149,12 @@ public class Reduce extends PrimitiveTensorFunction {
reducedBuilder.cell(aggregatingCell.getKey(), aggregatingCell.getValue().aggregatedValue());
return reducedBuilder.build();
+
}
- private TensorAddress reduceDimensions(TensorAddress address, TensorType argumentType, TensorType reducedType) {
+ private static TensorAddress reduceDimensions(TensorAddress address, TensorType argumentType, TensorType reducedType, List<String> dimensions) {
Set<Integer> indexesToRemove = new HashSet<>();
- for (String dimensionToRemove : this.dimensions)
+ for (String dimensionToRemove : dimensions)
indexesToRemove.add(argumentType.indexOfDimension(dimensionToRemove).get());
String[] reducedLabels = new String[reducedType.dimensions().size()];
@@ -156,23 +165,23 @@ public class Reduce extends PrimitiveTensorFunction {
return TensorAddress.of(reducedLabels);
}
- private Tensor reduceAllGeneral(Tensor argument) {
+ private static Tensor reduceAllGeneral(Tensor argument, Aggregator aggregator) {
ValueAggregator valueAggregator = ValueAggregator.ofType(aggregator);
for (Iterator<Double> i = argument.valueIterator(); i.hasNext(); )
valueAggregator.aggregate(i.next());
return Tensor.Builder.of(TensorType.empty).cell((valueAggregator.aggregatedValue())).build();
}
- private Tensor reduceIndexedVector(IndexedTensor argument) {
+ private static Tensor reduceIndexedVector(IndexedTensor argument, Aggregator aggregator) {
ValueAggregator valueAggregator = ValueAggregator.ofType(aggregator);
for (int i = 0; i < argument.dimensionSizes().size(0); i++)
valueAggregator.aggregate(argument.get(i));
return Tensor.Builder.of(TensorType.empty).cell((valueAggregator.aggregatedValue())).build();
}
- private static abstract class ValueAggregator {
+ static abstract class ValueAggregator {
- private static ValueAggregator ofType(Aggregator aggregator) {
+ static ValueAggregator ofType(Aggregator aggregator) {
switch (aggregator) {
case avg : return new AvgAggregator();
case count : return new CountAggregator();
@@ -191,6 +200,9 @@ public class Reduce extends PrimitiveTensorFunction {
/** Returns the value aggregated by this */
public abstract double aggregatedValue();
+ /** Resets the aggregator */
+ public abstract void reset();
+
}
private static class AvgAggregator extends ValueAggregator {
@@ -209,6 +221,11 @@ public class Reduce extends PrimitiveTensorFunction {
return valueSum / valueCount;
}
+ @Override
+ public void reset() {
+ valueCount = 0;
+ valueSum = 0.0;
+ }
}
private static class CountAggregator extends ValueAggregator {
@@ -225,6 +242,10 @@ public class Reduce extends PrimitiveTensorFunction {
return valueCount;
}
+ @Override
+ public void reset() {
+ valueCount = 0;
+ }
}
private static class ProdAggregator extends ValueAggregator {
@@ -241,6 +262,10 @@ public class Reduce extends PrimitiveTensorFunction {
return valueProd;
}
+ @Override
+ public void reset() {
+ valueProd = 1.0;
+ }
}
private static class SumAggregator extends ValueAggregator {
@@ -257,6 +282,10 @@ public class Reduce extends PrimitiveTensorFunction {
return valueSum;
}
+ @Override
+ public void reset() {
+ valueSum = 0.0;
+ }
}
private static class MaxAggregator extends ValueAggregator {
@@ -274,6 +303,10 @@ public class Reduce extends PrimitiveTensorFunction {
return maxValue;
}
+ @Override
+ public void reset() {
+ maxValue = Double.MIN_VALUE;
+ }
}
private static class MinAggregator extends ValueAggregator {
@@ -291,6 +324,11 @@ public class Reduce extends PrimitiveTensorFunction {
return minValue;
}
+ @Override
+ public void reset() {
+ minValue = Double.MAX_VALUE;
+ }
+
}
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/ReduceJoin.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/ReduceJoin.java
new file mode 100644
index 00000000000..b268e33b418
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/ReduceJoin.java
@@ -0,0 +1,372 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.tensor.functions;
+
+import com.google.common.collect.ImmutableList;
+import com.yahoo.tensor.DimensionSizes;
+import com.yahoo.tensor.IndexedTensor;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
+import com.yahoo.tensor.evaluation.EvaluationContext;
+import com.yahoo.tensor.evaluation.TypeContext;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.DoubleBinaryOperator;
+import java.util.stream.Collectors;
+
+/**
+ * An optimization for tensor expressions where a join immediately follows a
+ * reduce. Evaluating this as one operation is significantly more efficient
+ * than evaluating each separately.
+ *
+ * This implementation optimizes the case where the reduce is done on the same
+ * dimensions as the join. A particularly efficient evaluation is done if there
+ * is one common dimension that is joined and reduced on, which is a common
+ * case as it covers vector and matrix like multiplications.
+ *
+ * @author lesters
+ */
+public class ReduceJoin extends CompositeTensorFunction {
+
+ private final TensorFunction argumentA, argumentB;
+ private final DoubleBinaryOperator combinator;
+ private final Reduce.Aggregator aggregator;
+ private final List<String> dimensions;
+
+ public ReduceJoin(Reduce reduce, Join join) {
+ this(join.arguments().get(0), join.arguments().get(1), join.combinator(), reduce.aggregator(), reduce.dimensions());
+ }
+
+ public ReduceJoin(TensorFunction argumentA,
+ TensorFunction argumentB,
+ DoubleBinaryOperator combinator,
+ Reduce.Aggregator aggregator,
+ List<String> dimensions) {
+ this.argumentA = argumentA;
+ this.argumentB = argumentB;
+ this.combinator = combinator;
+ this.aggregator = aggregator;
+ this.dimensions = ImmutableList.copyOf(dimensions);
+ }
+
+ @Override
+ public List<TensorFunction> arguments() {
+ return ImmutableList.of(argumentA, argumentB);
+ }
+
+ @Override
+ public TensorFunction withArguments(List<TensorFunction> arguments) {
+ if ( arguments.size() != 2)
+ throw new IllegalArgumentException("ReduceJoin must have 2 arguments, got " + arguments.size());
+ return new ReduceJoin(arguments.get(0), arguments.get(1), combinator, aggregator, dimensions);
+ }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() {
+ Join join = new Join(argumentA.toPrimitive(), argumentB.toPrimitive(), combinator);
+ return new Reduce(join, aggregator, dimensions);
+ }
+
+ @Override
+ public final <NAMETYPE extends TypeContext.Name> Tensor evaluate(EvaluationContext<NAMETYPE> context) {
+ Tensor a = argumentA.evaluate(context);
+ Tensor b = argumentB.evaluate(context);
+ TensorType joinedType = new TensorType.Builder(a.type(), b.type()).build();
+
+ if (canOptimize(a, b)) {
+ return evaluate((IndexedTensor)a, (IndexedTensor)b, joinedType);
+ }
+ return Reduce.evaluate(Join.evaluate(a, b, joinedType, combinator), dimensions, aggregator);
+ }
+
+ /**
+ * Tests whether or not the reduce is over the join dimensions. The
+ * remaining logic in this class assumes this to be true.
+ *
+ * If no dimensions are given, the join must be on all tensor dimensions.
+ *
+ * @return {@code true} if the implementation can optimize evaluation
+ * given the two tensors.
+ */
+ public boolean canOptimize(Tensor a, Tensor b) {
+ if (a.type().dimensions().isEmpty() || b.type().dimensions().isEmpty()) // TODO: support scalars
+ return false;
+ if ( ! (a instanceof IndexedTensor))
+ return false;
+ if ( ! (a.type().dimensions().stream().allMatch(d -> d.type() == TensorType.Dimension.Type.indexedBound)))
+ return false;
+ if ( ! (b instanceof IndexedTensor))
+ return false;
+ if ( ! (b.type().dimensions().stream().allMatch(d -> d.type() == TensorType.Dimension.Type.indexedBound)))
+ return false;
+
+ TensorType commonDimensions = dimensionsInCommon((IndexedTensor)a, (IndexedTensor)b);
+ if (dimensions.isEmpty()) {
+ if (a.type().dimensions().size() != commonDimensions.dimensions().size())
+ return false;
+ if (b.type().dimensions().size() != commonDimensions.dimensions().size())
+ return false;
+ } else {
+ for (TensorType.Dimension dimension : commonDimensions.dimensions()) {
+ if (!dimensions.contains(dimension.name()))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Evaluates the reduce-join. Special handling for common cases where the
+ * reduce dimension is the innermost dimension in both tensors.
+ */
+ private Tensor evaluate(IndexedTensor a, IndexedTensor b, TensorType joinedType) {
+ TensorType reducedType = Reduce.outputType(joinedType, dimensions);
+
+ if (reduceDimensionIsInnermost(a, b)) {
+ if (a.type().dimensions().size() == 1 && b.type().dimensions().size() == 1) {
+ return vectorVectorProduct(a, b, reducedType);
+ }
+ if (a.type().dimensions().size() == 1 && b.type().dimensions().size() == 2) {
+ return vectorMatrixProduct(a, b, reducedType, false);
+ }
+ if (a.type().dimensions().size() == 2 && b.type().dimensions().size() == 1) {
+ return vectorMatrixProduct(b, a, reducedType, true);
+ }
+ if (a.type().dimensions().size() == 2 && b.type().dimensions().size() == 2) {
+ return matrixMatrixProduct(a, b, reducedType);
+ }
+ }
+ return evaluateGeneral(a, b, reducedType);
+ }
+
+ private Tensor vectorVectorProduct(IndexedTensor a, IndexedTensor b, TensorType reducedType) {
+ if ( a.type().dimensions().size() != 1 || b.type().dimensions().size() != 1) {
+ throw new IllegalArgumentException("Wrong dimension sizes for tensors for vector-vector product");
+ }
+ IndexedTensor.BoundBuilder builder = (IndexedTensor.BoundBuilder)IndexedTensor.Builder.of(reducedType);
+ long commonSize = Math.min(a.dimensionSizes().size(0), b.dimensionSizes().size(0));
+
+ Reduce.ValueAggregator agg = Reduce.ValueAggregator.ofType(aggregator);
+ for (int ic = 0; ic < commonSize; ++ic) {
+ double va = a.get(ic);
+ double vb = b.get(ic);
+ agg.aggregate(combinator.applyAsDouble(va, vb));
+ }
+ builder.cellByDirectIndex(0, agg.aggregatedValue());
+ return builder.build();
+ }
+
+ private Tensor vectorMatrixProduct(IndexedTensor a, IndexedTensor b, TensorType reducedType, boolean swapped) {
+ if ( a.type().dimensions().size() != 1 || b.type().dimensions().size() != 2) {
+ throw new IllegalArgumentException("Wrong dimension sizes for tensors for vector-matrix product");
+ }
+ IndexedTensor.BoundBuilder builder = (IndexedTensor.BoundBuilder)IndexedTensor.Builder.of(reducedType);
+ DimensionSizes sizesA = a.dimensionSizes();
+ DimensionSizes sizesB = b.dimensionSizes();
+
+ Reduce.ValueAggregator agg = Reduce.ValueAggregator.ofType(aggregator);
+ for (int ib = 0; ib < sizesB.size(0); ++ib) {
+ agg.reset();
+ for (int ic = 0; ic < Math.min(sizesA.size(0), sizesB.size(1)); ++ic) {
+ double va = a.get(ic);
+ double vb = b.get(ib * sizesB.size(1) + ic);
+ double result = swapped ? combinator.applyAsDouble(vb, va) : combinator.applyAsDouble(va, vb);
+ agg.aggregate(result);
+ }
+ builder.cellByDirectIndex(ib, agg.aggregatedValue());
+ }
+ return builder.build();
+ }
+
+ private Tensor matrixMatrixProduct(IndexedTensor a, IndexedTensor b, TensorType reducedType) {
+ if ( a.type().dimensions().size() != 2 || b.type().dimensions().size() != 2) {
+ throw new IllegalArgumentException("Wrong dimension sizes for tensors for matrix-matrix product");
+ }
+ IndexedTensor.BoundBuilder builder = (IndexedTensor.BoundBuilder)IndexedTensor.Builder.of(reducedType);
+ DimensionSizes sizesA = a.dimensionSizes();
+ DimensionSizes sizesB = b.dimensionSizes();
+ int iaToReduced = reducedType.indexOfDimension(a.type().dimensions().get(0).name()).get();
+ int ibToReduced = reducedType.indexOfDimension(b.type().dimensions().get(0).name()).get();
+ long strideA = iaToReduced < ibToReduced ? sizesB.size(0) : 1;
+ long strideB = ibToReduced < iaToReduced ? sizesA.size(0) : 1;
+
+ Reduce.ValueAggregator agg = Reduce.ValueAggregator.ofType(aggregator);
+ for (int ia = 0; ia < sizesA.size(0); ++ia) {
+ for (int ib = 0; ib < sizesB.size(0); ++ib) {
+ agg.reset();
+ for (int ic = 0; ic < Math.min(sizesA.size(1), sizesB.size(1)); ++ic) {
+ double va = a.get(ia * sizesA.size(1) + ic);
+ double vb = b.get(ib * sizesB.size(1) + ic);
+ agg.aggregate(combinator.applyAsDouble(va, vb));
+ }
+ builder.cellByDirectIndex(ia * strideA + ib * strideB, agg.aggregatedValue());
+ }
+ }
+ return builder.build();
+ }
+
+ private Tensor evaluateGeneral(IndexedTensor a, IndexedTensor b, TensorType reducedType) {
+ IndexedTensor.BoundBuilder builder = (IndexedTensor.BoundBuilder)IndexedTensor.Builder.of(reducedType);
+ TensorType onlyInA = Reduce.outputType(a.type(), dimensions);
+ TensorType onlyInB = Reduce.outputType(b.type(), dimensions);
+ TensorType common = dimensionsInCommon(a, b);
+
+ // pre-calculate strides for each index position
+ long[] stridesA = strides(a.type());
+ long[] stridesB = strides(b.type());
+ long[] stridesResult = strides(reducedType);
+
+ // mapping of dimension indexes
+ int[] mapOnlyAToA = Join.mapIndexes(onlyInA, a.type());
+ int[] mapCommonToA = Join.mapIndexes(common, a.type());
+ int[] mapOnlyBToB = Join.mapIndexes(onlyInB, b.type());
+ int[] mapCommonToB = Join.mapIndexes(common, b.type());
+ int[] mapOnlyAToResult = Join.mapIndexes(onlyInA, reducedType);
+ int[] mapOnlyBToResult = Join.mapIndexes(onlyInB, reducedType);
+
+ // TODO: refactor with code in IndexedTensor and Join
+
+ MultiDimensionIterator ic = new MultiDimensionIterator(common);
+ Reduce.ValueAggregator agg = Reduce.ValueAggregator.ofType(aggregator);
+ for (MultiDimensionIterator ia = new MultiDimensionIterator(onlyInA); ia.hasNext(); ia.next()) {
+ for (MultiDimensionIterator ib = new MultiDimensionIterator(onlyInB); ib.hasNext(); ib.next()) {
+ agg.reset();
+ for (ic.reset(); ic.hasNext(); ic.next()) {
+ double va = a.get(toDirectIndex(ia, ic, stridesA, mapOnlyAToA, mapCommonToA));
+ double vb = b.get(toDirectIndex(ib, ic, stridesB, mapOnlyBToB, mapCommonToB));
+ agg.aggregate(combinator.applyAsDouble(va, vb));
+ }
+ builder.cellByDirectIndex(toDirectIndex(ia, ib, stridesResult, mapOnlyAToResult, mapOnlyBToResult),
+ agg.aggregatedValue());
+ }
+ }
+ return builder.build();
+ }
+
+ private long toDirectIndex(MultiDimensionIterator iter, MultiDimensionIterator common, long[] strides, int[] map, int[] commonmap) {
+ long directIndex = 0;
+ for (int i = 0; i < iter.length(); ++i) {
+ directIndex += strides[map[i]] * iter.iterator[i];
+ }
+ for (int i = 0; i < common.length(); ++i) {
+ directIndex += strides[commonmap[i]] * common.iterator[i];
+ }
+ return directIndex;
+ }
+
+ private long[] strides(TensorType type) {
+ long[] strides = new long[type.dimensions().size()];
+ if (strides.length > 0) {
+ long previous = 1;
+ strides[strides.length - 1] = previous;
+ for (int i = strides.length - 2; i >= 0; --i) {
+ strides[i] = previous * type.dimensions().get(i + 1).size().get();
+ previous = strides[i];
+ }
+ }
+ return strides;
+ }
+
+ private TensorType dimensionsInCommon(IndexedTensor a, IndexedTensor b) {
+ TensorType.Builder builder = new TensorType.Builder();
+ for (TensorType.Dimension aDim : a.type().dimensions()) {
+ for (TensorType.Dimension bDim : b.type().dimensions()) {
+ if (aDim.name().equals(bDim.name())) {
+ if ( ! aDim.size().isPresent()) {
+ builder.set(aDim);
+ } else if ( ! bDim.size().isPresent()) {
+ builder.set(bDim);
+ } else {
+ builder.set(aDim.size().get() < bDim.size().get() ? aDim : bDim); // minimum size of dimension
+ }
+ }
+ }
+ }
+ return builder.build();
+ }
+
+ /**
+ * Tests if there is exactly one reduce dimension and it is the innermost
+ * dimension in both tensors.
+ */
+ private boolean reduceDimensionIsInnermost(Tensor a, Tensor b) {
+ List<String> reducingDimensions = dimensions;
+ if (reducingDimensions.isEmpty()) {
+ reducingDimensions = dimensionsInCommon((IndexedTensor)a, (IndexedTensor)b).dimensions().stream()
+ .map(TensorType.Dimension::name)
+ .collect(Collectors.toList());
+ }
+ if (reducingDimensions.size() != 1) {
+ return false;
+ }
+ String dimension = reducingDimensions.get(0);
+ int indexInA = a.type().indexOfDimension(dimension).orElseThrow(() ->
+ new IllegalArgumentException("Reduce-Join dimension '" + dimension + "' missing in tensor A."));
+ if (indexInA != (a.type().dimensions().size() - 1)) {
+ return false;
+ }
+ int indexInB = b.type().indexOfDimension(dimension).orElseThrow(() ->
+ new IllegalArgumentException("Reduce-Join dimension '" + dimension + "' missing in tensor B."));
+ if (indexInB < (b.type().dimensions().size() - 1)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString(ToStringContext context) {
+ return "reduce_join(" + argumentA.toString(context) + ", " +
+ argumentB.toString(context) + ", " +
+ combinator + ", " +
+ aggregator +
+ Reduce.commaSeparated(dimensions) + ")";
+ }
+
+ private static class MultiDimensionIterator {
+
+ private long[] bounds;
+ private long[] iterator;
+ private int remaining;
+
+ MultiDimensionIterator(TensorType type) {
+ bounds = new long[type.dimensions().size()];
+ iterator = new long[type.dimensions().size()];
+ for (int i = 0; i < bounds.length; ++i) {
+ bounds[i] = type.dimensions().get(i).size().get();
+ }
+ reset();
+ }
+
+ public int length() {
+ return iterator.length;
+ }
+
+ public boolean hasNext() {
+ return remaining > 0;
+ }
+
+ public void reset() {
+ remaining = 1;
+ for (int i = iterator.length - 1; i >= 0; --i) {
+ iterator[i] = 0;
+ remaining *= bounds[i];
+ }
+ }
+
+ public void next() {
+ for (int i = iterator.length - 1; i >= 0; --i) {
+ iterator[i] += 1;
+ if (iterator[i] < bounds[i]) {
+ break;
+ }
+ iterator[i] = 0;
+ }
+ remaining -= 1;
+ }
+
+ public String toString() {
+ return Arrays.toString(iterator);
+ }
+ }
+
+}
diff --git a/vespajlib/src/test/java/com/yahoo/io/NativeIOTestCase.java b/vespajlib/src/test/java/com/yahoo/io/NativeIOTestCase.java
new file mode 100644
index 00000000000..6018a195b6a
--- /dev/null
+++ b/vespajlib/src/test/java/com/yahoo/io/NativeIOTestCase.java
@@ -0,0 +1,35 @@
+package com.yahoo.io;
+
+import com.sun.jna.Platform;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+public class NativeIOTestCase {
+
+ @Test
+ public void requireThatDropFileFromCacheDoesNotThrow() throws IOException {
+ File testFile = new File("testfile");
+ FileOutputStream output = new FileOutputStream(testFile);
+ output.write('t');
+ output.flush();
+ output.close();
+ NativeIO nativeIO = new NativeIO();
+ if (Platform.isLinux()) {
+ assertTrue(nativeIO.valid());
+ } else {
+ assertFalse(nativeIO.valid());
+ assertEquals("Platform is unsúpported. Only supported on linux.", nativeIO.getError().getMessage());
+ }
+ nativeIO.dropFileFromCache(output.getFD());
+ nativeIO.dropFileFromCache(testFile);
+ testFile.delete();
+ nativeIO.dropFileFromCache(new File("file.that.does.not.exist"));
+ }
+}
diff --git a/vespalib/CMakeLists.txt b/vespalib/CMakeLists.txt
index fb3b08b325f..58f2cbc8891 100644
--- a/vespalib/CMakeLists.txt
+++ b/vespalib/CMakeLists.txt
@@ -12,6 +12,7 @@ vespa_define_module(
src/apps/make_fixture_macros
src/apps/vespa-detect-hostname
src/apps/vespa-validate-hostname
+ src/apps/vespa-drop-file-from-cache
TESTS
src/tests/alignedmemory
@@ -36,6 +37,7 @@ vespa_define_module(
src/tests/data/smart_buffer
src/tests/delegatelist
src/tests/dotproduct
+ src/tests/drop-file-from-cache
src/tests/dual_merge_director
src/tests/eventbarrier
src/tests/exception_classes
@@ -45,7 +47,6 @@ vespa_define_module(
src/tests/fiddle
src/tests/gencnt
src/tests/guard
- src/tests/hashmap
src/tests/host_name
src/tests/io/fileutil
src/tests/io/mapped_file_input
@@ -57,7 +58,9 @@ vespa_define_module(
src/tests/net/send_fd
src/tests/net/socket
src/tests/net/socket_spec
+ src/tests/net/tls/direct_buffer_bio
src/tests/net/tls/openssl_impl
+ src/tests/net/tls/protocol_snooping
src/tests/net/tls/transport_options
src/tests/objects/nbostream
src/tests/optimized
diff --git a/vespalib/src/apps/vespa-drop-file-from-cache/.gitignore b/vespalib/src/apps/vespa-drop-file-from-cache/.gitignore
new file mode 100644
index 00000000000..24dc558b6bc
--- /dev/null
+++ b/vespalib/src/apps/vespa-drop-file-from-cache/.gitignore
@@ -0,0 +1 @@
+vespa-drop-file-from-cache
diff --git a/vespalib/src/apps/vespa-drop-file-from-cache/CMakeLists.txt b/vespalib/src/apps/vespa-drop-file-from-cache/CMakeLists.txt
new file mode 100644
index 00000000000..409fd5bb725
--- /dev/null
+++ b/vespalib/src/apps/vespa-drop-file-from-cache/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(vespalib_vespa-drop-file-from-cache_app
+ SOURCES
+ drop_file_from_cache.cpp
+ OUTPUT_NAME vespa-drop-file-from-cache
+ INSTALL bin
+ DEPENDS
+ vespalib
+)
diff --git a/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp b/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp
new file mode 100644
index 00000000000..042681a90fe
--- /dev/null
+++ b/vespalib/src/apps/vespa-drop-file-from-cache/drop_file_from_cache.cpp
@@ -0,0 +1,32 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <cstdio>
+#include <cerrno>
+#include <cstring>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main(int argc, char **argv) {
+ char errorBuf[200];
+ if (argc != 2) {
+ fprintf(stderr, "%s <filename>\n", argv[0]);
+ return 1;
+ }
+ const char *fileName = argv[1];
+ int fh = open(fileName, O_RDONLY);
+ if (fh == -1) {
+ const char *errorString = strerror_r(errno, errorBuf, sizeof(errorBuf));
+ fprintf(stderr, "Failed opening file %s: %s\n", fileName, errorString);
+ return 2;
+ }
+
+ int retval = 0;
+ int err = posix_fadvise(fh, 0, 0, POSIX_FADV_DONTNEED);
+ if (err != 0) {
+ const char *errorString = strerror_r(errno, errorBuf, sizeof(errorBuf));
+ fprintf(stderr, "posix_fadvise failed: %s\n", errorString);
+ retval = 3;
+ }
+ close(fh);
+ return retval;
+}
diff --git a/vespalib/src/testlist.txt b/vespalib/src/testlist.txt
index d21a06654c8..9124c620e8b 100644
--- a/vespalib/src/testlist.txt
+++ b/vespalib/src/testlist.txt
@@ -31,7 +31,6 @@ tests/explore_modern_cpp
tests/fiddle
tests/gencnt
tests/guard
-tests/hashmap
tests/host_name
tests/io/fileutil
tests/left_right_heap
diff --git a/vespalib/src/tests/drop-file-from-cache/CMakeLists.txt b/vespalib/src/tests/drop-file-from-cache/CMakeLists.txt
new file mode 100644
index 00000000000..d6f4a51a4c5
--- /dev/null
+++ b/vespalib/src/tests/drop-file-from-cache/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(vespalib_drop_file_from_cache_test_app TEST
+ SOURCES
+ drop_file_from_cache_test.cpp
+ DEPENDS
+ vespalib
+)
+vespa_add_test(NAME vespalib_drop_file_from_cache_test_app COMMAND vespalib_drop_file_from_cache_test_app)
diff --git a/vespalib/src/tests/drop-file-from-cache/drop_file_from_cache_test.cpp b/vespalib/src/tests/drop-file-from-cache/drop_file_from_cache_test.cpp
new file mode 100644
index 00000000000..63defa58c41
--- /dev/null
+++ b/vespalib/src/tests/drop-file-from-cache/drop_file_from_cache_test.cpp
@@ -0,0 +1,25 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/vespalib/util/slaveproc.h>
+
+using vespalib::SlaveProc;
+
+TEST("no arguments") {
+ SlaveProc drop("../../apps/vespa-drop-file-from-cache/vespa-drop-file-from-cache");
+ drop.wait();
+ EXPECT_EQUAL(1, drop.getExitCode());
+}
+
+TEST("file does not exist") {
+ SlaveProc drop("../../apps/vespa-drop-file-from-cache/vespa-drop-file-from-cache not_exist");
+ drop.wait();
+ EXPECT_EQUAL(2, drop.getExitCode());
+}
+
+TEST("All is well") {
+ SlaveProc drop("../../apps/vespa-drop-file-from-cache/vespa-drop-file-from-cache vespalib_drop_file_from_cache_test_app");
+ drop.wait();
+ EXPECT_EQUAL(0, drop.getExitCode());
+}
+
+TEST_MAIN_WITH_PROCESS_PROXY() { TEST_RUN_ALL(); }
diff --git a/vespalib/src/tests/hashmap/.gitignore b/vespalib/src/tests/hashmap/.gitignore
deleted file mode 100644
index 0b79d6e1ede..00000000000
--- a/vespalib/src/tests/hashmap/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.depend
-Makefile
-hashmap_test
-keys.txt
-values.txt
-vespalib_hashmap_test_app
diff --git a/vespalib/src/tests/hashmap/CMakeLists.txt b/vespalib/src/tests/hashmap/CMakeLists.txt
deleted file mode 100644
index ac7abf47052..00000000000
--- a/vespalib/src/tests/hashmap/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-vespa_add_executable(vespalib_hashmap_test_app TEST
- SOURCES
- hashmap_test.cpp
- DEPENDS
- vespalib
-)
-vespa_add_test(NAME vespalib_hashmap_test_app COMMAND vespalib_hashmap_test_app)
diff --git a/vespalib/src/tests/hashmap/DESC b/vespalib/src/tests/hashmap/DESC
deleted file mode 100644
index 5e892024080..00000000000
--- a/vespalib/src/tests/hashmap/DESC
+++ /dev/null
@@ -1 +0,0 @@
-hashmap test. Take a look at hashmap.cpp for details.
diff --git a/vespalib/src/tests/hashmap/FILES b/vespalib/src/tests/hashmap/FILES
deleted file mode 100644
index 421534cb030..00000000000
--- a/vespalib/src/tests/hashmap/FILES
+++ /dev/null
@@ -1 +0,0 @@
-hashmap.cpp
diff --git a/vespalib/src/tests/hashmap/hashmap_test.cpp b/vespalib/src/tests/hashmap/hashmap_test.cpp
deleted file mode 100644
index 2932a5820d7..00000000000
--- a/vespalib/src/tests/hashmap/hashmap_test.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/vespalib/testkit/testapp.h>
-#include <vespa/vespalib/util/hashmap.h>
-
-class Test : public vespalib::TestApp
-{
-public:
- void testInt();
- void testString();
- void testHashValue();
- int Main() override;
-};
-
-
-
-int
-Test::Main()
-{
- TEST_INIT("hashmap_test");
- srandom(1);
- testInt();
- TEST_FLUSH();
- testString();
- TEST_FLUSH();
- testHashValue();
- TEST_DONE();
-}
-
-
-void
-Test::testHashValue()
-{
- const char * s("abcdefghi");
- EXPECT_EQUAL(7045194595191919248ul, vespalib::hashValue(s));
- EXPECT_EQUAL(vespalib::hashValue(s), vespalib::hashValue(s, strlen(s)));
- EXPECT_NOT_EQUAL(vespalib::hashValue(s), vespalib::hashValue(s, strlen(s)-1));
-}
-
-void
-Test::testInt()
-{
- vespalib::HashMap<int> map(-1, 5);
-
- {
- vespalib::HashMap<int>::Iterator it = map.iterator();
- EXPECT_TRUE(!it.valid());
- }
-
- EXPECT_TRUE(map.size() == 0);
- EXPECT_TRUE(map.isEmpty());
- EXPECT_TRUE(map.buckets() >= 5);
-
- EXPECT_TRUE(map.set("one", 1) == -1);
- EXPECT_TRUE(map.set("two", 2) == -1);
- EXPECT_TRUE(map.set("three", 3) == -1);
- EXPECT_TRUE(map.set("four", 4) == -1);
-
- {
- vespalib::HashMap<int>::Iterator it = map.iterator();
- EXPECT_TRUE(it.valid());
- EXPECT_TRUE(map[it.key()] == it.value());
- it.next();
- EXPECT_TRUE(it.valid());
- EXPECT_TRUE(map[it.key()] == it.value());
- it.next();
- EXPECT_TRUE(it.valid());
- EXPECT_TRUE(map[it.key()] == it.value());
- it.next();
- EXPECT_TRUE(it.valid());
- EXPECT_TRUE(map[it.key()] == it.value());
- it.next();
- EXPECT_TRUE(!it.valid());
- }
-
- EXPECT_TRUE(map.size() == 4);
- EXPECT_TRUE(!map.isEmpty());
- EXPECT_TRUE(map.get("one") == 1);
- EXPECT_TRUE(map.get("two") == 2);
- EXPECT_TRUE(map.get("three") == 3);
- EXPECT_TRUE(map.get("four") == 4);
- EXPECT_TRUE(map.get("five") == -1);
-
- EXPECT_TRUE(map.set("one", 11) == 1);
- EXPECT_TRUE(map.get("one") == 11);
- EXPECT_TRUE(map.size() == 4);
-
- EXPECT_TRUE(map["one"] == 11);
- EXPECT_TRUE(map["two"] == 2);
- EXPECT_TRUE(map["three"] == 3);
- EXPECT_TRUE(map["four"] == 4);
- EXPECT_TRUE(map["five"] == -1);
- EXPECT_TRUE(map.size() == 4);
-
- map.set("1", 1);
- map.set("2", 2);
- map.set("3", 3);
- map.set("4", 4);
- map.set("5", 5);
- map.set("6", 6);
- map.set("7", 7);
- map.set("8", 8);
- map.set("9", 9);
- map.set("10", 10);
- map.set("11", 11);
- map.set("12", 12);
- map.set("13", 13);
- map.set("14", 14);
- map.set("15", 15);
- map.set("16", 16);
- map.set("17", 17);
- map.set("18", 18);
- map.set("19", 19);
- map.set("20", 20);
- EXPECT_TRUE(map.size() == 24);
- EXPECT_TRUE(map.remove("5") == 5);
- EXPECT_TRUE(map.remove("10") == 10);
- EXPECT_TRUE(map.remove("15") == 15);
- EXPECT_TRUE(map.remove("20") == 20);
- EXPECT_TRUE(map.size() == 20);
-
- EXPECT_TRUE(map["1"] == 1);
- EXPECT_TRUE(map["2"] == 2);
- EXPECT_TRUE(map["3"] == 3);
- EXPECT_TRUE(map["4"] == 4);
- EXPECT_TRUE(map["5"] == -1);
- EXPECT_TRUE(map["6"] == 6);
- EXPECT_TRUE(map["7"] == 7);
- EXPECT_TRUE(map["8"] == 8);
- EXPECT_TRUE(map["9"] == 9);
- EXPECT_TRUE(map["10"] == -1);
- EXPECT_TRUE(map["11"] == 11);
- EXPECT_TRUE(map["12"] == 12);
- EXPECT_TRUE(map["13"] == 13);
- EXPECT_TRUE(map["14"] == 14);
- EXPECT_TRUE(map["15"] == -1);
- EXPECT_TRUE(map["16"] == 16);
- EXPECT_TRUE(map["17"] == 17);
- EXPECT_TRUE(map["18"] == 18);
- EXPECT_TRUE(map["19"] == 19);
- EXPECT_TRUE(map["20"] == -1);
-
- EXPECT_TRUE(map.remove("bogus1") == -1);
- EXPECT_TRUE(map.remove("bogus2") == -1);
- EXPECT_TRUE(map.remove("bogus3") == -1);
- EXPECT_TRUE(map.size() == 20);
-
- map.clear();
- {
- vespalib::HashMap<int>::Iterator it = map.iterator();
- EXPECT_TRUE(!it.valid());
- }
- EXPECT_TRUE(map.size() == 0);
- EXPECT_TRUE(map.isEmpty());
- EXPECT_TRUE(map.get("one") == -1);
- EXPECT_TRUE(map.get("two") == -1);
- EXPECT_TRUE(map.get("three") == -1);
-}
-
-void
-Test::testString()
-{
- using std::string;
- vespalib::HashMap<string> map("");
-
- map.set("a", "a");
- map.set("b", string("b"));
- const string c("c");
- map.set("c", c);
- string d = "d";
- map.set("d", d);
- string e;
- e = "e";
- map.set("e", e);
-
- EXPECT_TRUE(map.size() == 5);
- EXPECT_TRUE(map.isSet("a"));
- EXPECT_TRUE(map.isSet("b"));
- EXPECT_TRUE(map.isSet("c"));
- EXPECT_TRUE(map.isSet("d"));
- EXPECT_TRUE(map.isSet("e"));
- EXPECT_TRUE(map.get("a") != "");
- EXPECT_TRUE(map.get("b") != "");
- EXPECT_TRUE(map.get("c") != "");
- EXPECT_TRUE(map.get("d") != "");
- EXPECT_TRUE(map.get("e") != "");
- EXPECT_TRUE(map.get("a") == "a");
- EXPECT_TRUE(map.get("b") == "b");
- EXPECT_TRUE(map.get("c") == "c");
- EXPECT_TRUE(map.get("d") == "d");
- EXPECT_TRUE(map.get("e") == "e");
- EXPECT_TRUE(!map.isSet("x"));
- EXPECT_TRUE(map.get("x") == "");
-}
-
-TEST_APPHOOK(Test)
-
diff --git a/vespalib/src/tests/hashmap/in.txt b/vespalib/src/tests/hashmap/in.txt
deleted file mode 100644
index c25589de026..00000000000
--- a/vespalib/src/tests/hashmap/in.txt
+++ /dev/null
@@ -1,235882 +0,0 @@
-A
-a
-aa
-aal
-aalii
-aam
-Aani
-aardvark
-aardwolf
-Aaron
-Aaronic
-Aaronical
-Aaronite
-Aaronitic
-Aaru
-Ab
-aba
-Ababdeh
-Ababua
-abac
-abaca
-abacate
-abacay
-abacinate
-abacination
-abaciscus
-abacist
-aback
-abactinal
-abactinally
-abaction
-abactor
-abaculus
-abacus
-Abadite
-abaff
-abaft
-abaisance
-abaiser
-abaissed
-abalienate
-abalienation
-abalone
-Abama
-abampere
-abandon
-abandonable
-abandoned
-abandonedly
-abandonee
-abandoner
-abandonment
-Abanic
-Abantes
-abaptiston
-Abarambo
-Abaris
-abarthrosis
-abarticular
-abarticulation
-abas
-abase
-abased
-abasedly
-abasedness
-abasement
-abaser
-Abasgi
-abash
-abashed
-abashedly
-abashedness
-abashless
-abashlessly
-abashment
-abasia
-abasic
-abask
-Abassin
-abastardize
-abatable
-abate
-abatement
-abater
-abatis
-abatised
-abaton
-abator
-abattoir
-Abatua
-abature
-abave
-abaxial
-abaxile
-abaze
-abb
-Abba
-abbacomes
-abbacy
-Abbadide
-abbas
-abbasi
-abbassi
-Abbasside
-abbatial
-abbatical
-abbess
-abbey
-abbeystede
-Abbie
-abbot
-abbotcy
-abbotnullius
-abbotship
-abbreviate
-abbreviately
-abbreviation
-abbreviator
-abbreviatory
-abbreviature
-Abby
-abcoulomb
-abdal
-abdat
-Abderian
-Abderite
-abdest
-abdicable
-abdicant
-abdicate
-abdication
-abdicative
-abdicator
-Abdiel
-abditive
-abditory
-abdomen
-abdominal
-Abdominales
-abdominalian
-abdominally
-abdominoanterior
-abdominocardiac
-abdominocentesis
-abdominocystic
-abdominogenital
-abdominohysterectomy
-abdominohysterotomy
-abdominoposterior
-abdominoscope
-abdominoscopy
-abdominothoracic
-abdominous
-abdominovaginal
-abdominovesical
-abduce
-abducens
-abducent
-abduct
-abduction
-abductor
-Abe
-abeam
-abear
-abearance
-abecedarian
-abecedarium
-abecedary
-abed
-abeigh
-Abel
-abele
-Abelia
-Abelian
-Abelicea
-Abelite
-abelite
-Abelmoschus
-abelmosk
-Abelonian
-abeltree
-Abencerrages
-abenteric
-abepithymia
-Aberdeen
-aberdevine
-Aberdonian
-Aberia
-aberrance
-aberrancy
-aberrant
-aberrate
-aberration
-aberrational
-aberrator
-aberrometer
-aberroscope
-aberuncator
-abet
-abetment
-abettal
-abettor
-abevacuation
-abey
-abeyance
-abeyancy
-abeyant
-abfarad
-abhenry
-abhiseka
-abhominable
-abhor
-abhorrence
-abhorrency
-abhorrent
-abhorrently
-abhorrer
-abhorrible
-abhorring
-Abhorson
-abidal
-abidance
-abide
-abider
-abidi
-abiding
-abidingly
-abidingness
-Abie
-Abies
-abietate
-abietene
-abietic
-abietin
-Abietineae
-abietineous
-abietinic
-Abiezer
-Abigail
-abigail
-abigailship
-abigeat
-abigeus
-abilao
-ability
-abilla
-abilo
-abintestate
-abiogenesis
-abiogenesist
-abiogenetic
-abiogenetical
-abiogenetically
-abiogenist
-abiogenous
-abiogeny
-abiological
-abiologically
-abiology
-abiosis
-abiotic
-abiotrophic
-abiotrophy
-Abipon
-abir
-abirritant
-abirritate
-abirritation
-abirritative
-abiston
-Abitibi
-abiuret
-abject
-abjectedness
-abjection
-abjective
-abjectly
-abjectness
-abjoint
-abjudge
-abjudicate
-abjudication
-abjunction
-abjunctive
-abjuration
-abjuratory
-abjure
-abjurement
-abjurer
-abkar
-abkari
-Abkhas
-Abkhasian
-ablach
-ablactate
-ablactation
-ablare
-ablastemic
-ablastous
-ablate
-ablation
-ablatitious
-ablatival
-ablative
-ablator
-ablaut
-ablaze
-able
-ableeze
-ablegate
-ableness
-ablepharia
-ablepharon
-ablepharous
-Ablepharus
-ablepsia
-ableptical
-ableptically
-abler
-ablest
-ablewhackets
-ablins
-abloom
-ablow
-ablude
-abluent
-ablush
-ablution
-ablutionary
-abluvion
-ably
-abmho
-Abnaki
-abnegate
-abnegation
-abnegative
-abnegator
-Abner
-abnerval
-abnet
-abneural
-abnormal
-abnormalism
-abnormalist
-abnormality
-abnormalize
-abnormally
-abnormalness
-abnormity
-abnormous
-abnumerable
-Abo
-aboard
-Abobra
-abode
-abodement
-abody
-abohm
-aboil
-abolish
-abolisher
-abolishment
-abolition
-abolitionary
-abolitionism
-abolitionist
-abolitionize
-abolla
-aboma
-abomasum
-abomasus
-abominable
-abominableness
-abominably
-abominate
-abomination
-abominator
-abomine
-Abongo
-aboon
-aborad
-aboral
-aborally
-abord
-aboriginal
-aboriginality
-aboriginally
-aboriginary
-aborigine
-abort
-aborted
-aborticide
-abortient
-abortifacient
-abortin
-abortion
-abortional
-abortionist
-abortive
-abortively
-abortiveness
-abortus
-abouchement
-abound
-abounder
-abounding
-aboundingly
-about
-abouts
-above
-aboveboard
-abovedeck
-aboveground
-aboveproof
-abovestairs
-abox
-abracadabra
-abrachia
-abradant
-abrade
-abrader
-Abraham
-Abrahamic
-Abrahamidae
-Abrahamite
-Abrahamitic
-abraid
-Abram
-Abramis
-abranchial
-abranchialism
-abranchian
-Abranchiata
-abranchiate
-abranchious
-abrasax
-abrase
-abrash
-abrasiometer
-abrasion
-abrasive
-abrastol
-abraum
-abraxas
-abreact
-abreaction
-abreast
-abrenounce
-abret
-abrico
-abridge
-abridgeable
-abridged
-abridgedly
-abridger
-abridgment
-abrim
-abrin
-abristle
-abroach
-abroad
-Abrocoma
-abrocome
-abrogable
-abrogate
-abrogation
-abrogative
-abrogator
-Abroma
-Abronia
-abrook
-abrotanum
-abrotine
-abrupt
-abruptedly
-abruption
-abruptly
-abruptness
-Abrus
-Absalom
-absampere
-Absaroka
-absarokite
-abscess
-abscessed
-abscession
-abscessroot
-abscind
-abscise
-abscision
-absciss
-abscissa
-abscissae
-abscisse
-abscission
-absconce
-abscond
-absconded
-abscondedly
-abscondence
-absconder
-absconsa
-abscoulomb
-absence
-absent
-absentation
-absentee
-absenteeism
-absenteeship
-absenter
-absently
-absentment
-absentmindedly
-absentness
-absfarad
-abshenry
-Absi
-absinthe
-absinthial
-absinthian
-absinthiate
-absinthic
-absinthin
-absinthine
-absinthism
-absinthismic
-absinthium
-absinthol
-absit
-absmho
-absohm
-absolute
-absolutely
-absoluteness
-absolution
-absolutism
-absolutist
-absolutistic
-absolutistically
-absolutive
-absolutization
-absolutize
-absolutory
-absolvable
-absolvatory
-absolve
-absolvent
-absolver
-absolvitor
-absolvitory
-absonant
-absonous
-absorb
-absorbability
-absorbable
-absorbed
-absorbedly
-absorbedness
-absorbefacient
-absorbency
-absorbent
-absorber
-absorbing
-absorbingly
-absorbition
-absorpt
-absorptance
-absorptiometer
-absorptiometric
-absorption
-absorptive
-absorptively
-absorptiveness
-absorptivity
-absquatulate
-abstain
-abstainer
-abstainment
-abstemious
-abstemiously
-abstemiousness
-abstention
-abstentionist
-abstentious
-absterge
-abstergent
-abstersion
-abstersive
-abstersiveness
-abstinence
-abstinency
-abstinent
-abstinential
-abstinently
-abstract
-abstracted
-abstractedly
-abstractedness
-abstracter
-abstraction
-abstractional
-abstractionism
-abstractionist
-abstractitious
-abstractive
-abstractively
-abstractiveness
-abstractly
-abstractness
-abstractor
-abstrahent
-abstricted
-abstriction
-abstruse
-abstrusely
-abstruseness
-abstrusion
-abstrusity
-absume
-absumption
-absurd
-absurdity
-absurdly
-absurdness
-absvolt
-Absyrtus
-abterminal
-abthain
-abthainrie
-abthainry
-abthanage
-Abu
-abu
-abucco
-abulia
-abulic
-abulomania
-abuna
-abundance
-abundancy
-abundant
-Abundantia
-abundantly
-abura
-aburabozu
-aburban
-aburst
-aburton
-abusable
-abuse
-abusedly
-abusee
-abuseful
-abusefully
-abusefulness
-abuser
-abusion
-abusious
-abusive
-abusively
-abusiveness
-abut
-Abuta
-Abutilon
-abutment
-abuttal
-abutter
-abutting
-abuzz
-abvolt
-abwab
-aby
-abysm
-abysmal
-abysmally
-abyss
-abyssal
-Abyssinian
-abyssobenthonic
-abyssolith
-abyssopelagic
-acacatechin
-acacatechol
-acacetin
-Acacia
-Acacian
-acaciin
-acacin
-academe
-academial
-academian
-Academic
-academic
-academical
-academically
-academicals
-academician
-academicism
-academism
-academist
-academite
-academization
-academize
-Academus
-academy
-Acadia
-acadialite
-Acadian
-Acadie
-Acaena
-acajou
-acaleph
-Acalepha
-Acalephae
-acalephan
-acalephoid
-acalycal
-acalycine
-acalycinous
-acalyculate
-Acalypha
-Acalypterae
-Acalyptrata
-Acalyptratae
-acalyptrate
-Acamar
-acampsia
-acana
-acanaceous
-acanonical
-acanth
-acantha
-Acanthaceae
-acanthaceous
-acanthad
-Acantharia
-Acanthia
-acanthial
-acanthin
-acanthine
-acanthion
-acanthite
-acanthocarpous
-Acanthocephala
-acanthocephalan
-Acanthocephali
-acanthocephalous
-Acanthocereus
-acanthocladous
-Acanthodea
-acanthodean
-Acanthodei
-Acanthodes
-acanthodian
-Acanthodidae
-Acanthodii
-Acanthodini
-acanthoid
-Acantholimon
-acanthological
-acanthology
-acantholysis
-acanthoma
-Acanthomeridae
-acanthon
-Acanthopanax
-Acanthophis
-acanthophorous
-acanthopod
-acanthopodous
-acanthopomatous
-acanthopore
-acanthopteran
-Acanthopteri
-acanthopterous
-acanthopterygian
-Acanthopterygii
-acanthosis
-acanthous
-Acanthuridae
-Acanthurus
-acanthus
-acapnia
-acapnial
-acapsular
-acapu
-acapulco
-acara
-Acarapis
-acardia
-acardiac
-acari
-acarian
-acariasis
-acaricidal
-acaricide
-acarid
-Acarida
-Acaridea
-acaridean
-acaridomatium
-acariform
-Acarina
-acarine
-acarinosis
-acarocecidium
-acarodermatitis
-acaroid
-acarol
-acarologist
-acarology
-acarophilous
-acarophobia
-acarotoxic
-acarpelous
-acarpous
-Acarus
-Acastus
-acatalectic
-acatalepsia
-acatalepsy
-acataleptic
-acatallactic
-acatamathesia
-acataphasia
-acataposis
-acatastasia
-acatastatic
-acate
-acategorical
-acatery
-acatharsia
-acatharsy
-acatholic
-acaudal
-acaudate
-acaulescent
-acauline
-acaulose
-acaulous
-acca
-accede
-accedence
-acceder
-accelerable
-accelerando
-accelerant
-accelerate
-accelerated
-acceleratedly
-acceleration
-accelerative
-accelerator
-acceleratory
-accelerograph
-accelerometer
-accend
-accendibility
-accendible
-accension
-accensor
-accent
-accentless
-accentor
-accentuable
-accentual
-accentuality
-accentually
-accentuate
-accentuation
-accentuator
-accentus
-accept
-acceptability
-acceptable
-acceptableness
-acceptably
-acceptance
-acceptancy
-acceptant
-acceptation
-accepted
-acceptedly
-accepter
-acceptilate
-acceptilation
-acception
-acceptive
-acceptor
-acceptress
-accerse
-accersition
-accersitor
-access
-accessarily
-accessariness
-accessary
-accessaryship
-accessibility
-accessible
-accessibly
-accession
-accessional
-accessioner
-accessive
-accessively
-accessless
-accessorial
-accessorily
-accessoriness
-accessorius
-accessory
-accidence
-accidency
-accident
-accidental
-accidentalism
-accidentalist
-accidentality
-accidentally
-accidentalness
-accidented
-accidential
-accidentiality
-accidently
-accidia
-accidie
-accinge
-accipient
-Accipiter
-accipitral
-accipitrary
-Accipitres
-accipitrine
-accismus
-accite
-acclaim
-acclaimable
-acclaimer
-acclamation
-acclamator
-acclamatory
-acclimatable
-acclimatation
-acclimate
-acclimatement
-acclimation
-acclimatizable
-acclimatization
-acclimatize
-acclimatizer
-acclimature
-acclinal
-acclinate
-acclivitous
-acclivity
-acclivous
-accloy
-accoast
-accoil
-accolade
-accoladed
-accolated
-accolent
-accolle
-accombination
-accommodable
-accommodableness
-accommodate
-accommodately
-accommodateness
-accommodating
-accommodatingly
-accommodation
-accommodational
-accommodative
-accommodativeness
-accommodator
-accompanier
-accompaniment
-accompanimental
-accompanist
-accompany
-accompanyist
-accompletive
-accomplice
-accompliceship
-accomplicity
-accomplish
-accomplishable
-accomplished
-accomplisher
-accomplishment
-accomplisht
-accompt
-accord
-accordable
-accordance
-accordancy
-accordant
-accordantly
-accorder
-according
-accordingly
-accordion
-accordionist
-accorporate
-accorporation
-accost
-accostable
-accosted
-accouche
-accouchement
-accoucheur
-accoucheuse
-account
-accountability
-accountable
-accountableness
-accountably
-accountancy
-accountant
-accountantship
-accounting
-accountment
-accouple
-accouplement
-accouter
-accouterment
-accoy
-accredit
-accreditate
-accreditation
-accredited
-accreditment
-accrementitial
-accrementition
-accresce
-accrescence
-accrescent
-accretal
-accrete
-accretion
-accretionary
-accretive
-accroach
-accroides
-accrual
-accrue
-accruement
-accruer
-accubation
-accubitum
-accubitus
-accultural
-acculturate
-acculturation
-acculturize
-accumbency
-accumbent
-accumber
-accumulable
-accumulate
-accumulation
-accumulativ
-accumulative
-accumulatively
-accumulativeness
-accumulator
-accuracy
-accurate
-accurately
-accurateness
-accurse
-accursed
-accursedly
-accursedness
-accusable
-accusably
-accusal
-accusant
-accusation
-accusatival
-accusative
-accusatively
-accusatorial
-accusatorially
-accusatory
-accusatrix
-accuse
-accused
-accuser
-accusingly
-accusive
-accustom
-accustomed
-accustomedly
-accustomedness
-ace
-aceacenaphthene
-aceanthrene
-aceanthrenequinone
-acecaffine
-aceconitic
-acedia
-acediamine
-acediast
-acedy
-Aceldama
-Acemetae
-Acemetic
-acenaphthene
-acenaphthenyl
-acenaphthylene
-acentric
-acentrous
-aceologic
-aceology
-acephal
-Acephala
-acephalan
-Acephali
-acephalia
-Acephalina
-acephaline
-acephalism
-acephalist
-Acephalite
-acephalocyst
-acephalous
-acephalus
-Acer
-Aceraceae
-aceraceous
-Acerae
-Acerata
-acerate
-Acerates
-acerathere
-Aceratherium
-aceratosis
-acerb
-Acerbas
-acerbate
-acerbic
-acerbity
-acerdol
-acerin
-acerose
-acerous
-acerra
-acertannin
-acervate
-acervately
-acervation
-acervative
-acervose
-acervuline
-acervulus
-acescence
-acescency
-acescent
-aceship
-acesodyne
-Acestes
-acetabular
-Acetabularia
-acetabuliferous
-acetabuliform
-acetabulous
-acetabulum
-acetacetic
-acetal
-acetaldehydase
-acetaldehyde
-acetaldehydrase
-acetalization
-acetalize
-acetamide
-acetamidin
-acetamidine
-acetamido
-acetaminol
-acetanilid
-acetanilide
-acetanion
-acetaniside
-acetanisidide
-acetannin
-acetarious
-acetarsone
-acetate
-acetated
-acetation
-acetbromamide
-acetenyl
-acethydrazide
-acetic
-acetification
-acetifier
-acetify
-acetimeter
-acetimetry
-acetin
-acetize
-acetmethylanilide
-acetnaphthalide
-acetoacetanilide
-acetoacetate
-acetoacetic
-acetoamidophenol
-acetoarsenite
-Acetobacter
-acetobenzoic
-acetobromanilide
-acetochloral
-acetocinnamene
-acetoin
-acetol
-acetolysis
-acetolytic
-acetometer
-acetometrical
-acetometrically
-acetometry
-acetomorphine
-acetonaphthone
-acetonate
-acetonation
-acetone
-acetonemia
-acetonemic
-acetonic
-acetonitrile
-acetonization
-acetonize
-acetonuria
-acetonurometer
-acetonyl
-acetonylacetone
-acetonylidene
-acetophenetide
-acetophenin
-acetophenine
-acetophenone
-acetopiperone
-acetopyrin
-acetosalicylic
-acetose
-acetosity
-acetosoluble
-acetothienone
-acetotoluide
-acetotoluidine
-acetous
-acetoveratrone
-acetoxime
-acetoxyl
-acetoxyphthalide
-acetphenetid
-acetphenetidin
-acetract
-acettoluide
-acetum
-aceturic
-acetyl
-acetylacetonates
-acetylacetone
-acetylamine
-acetylate
-acetylation
-acetylator
-acetylbenzene
-acetylbenzoate
-acetylbenzoic
-acetylbiuret
-acetylcarbazole
-acetylcellulose
-acetylcholine
-acetylcyanide
-acetylenation
-acetylene
-acetylenediurein
-acetylenic
-acetylenyl
-acetylfluoride
-acetylglycine
-acetylhydrazine
-acetylic
-acetylide
-acetyliodide
-acetylizable
-acetylization
-acetylize
-acetylizer
-acetylmethylcarbinol
-acetylperoxide
-acetylphenol
-acetylphenylhydrazine
-acetylrosaniline
-acetylsalicylate
-acetylsalol
-acetyltannin
-acetylthymol
-acetyltropeine
-acetylurea
-ach
-Achaean
-Achaemenian
-Achaemenid
-Achaemenidae
-Achaemenidian
-Achaenodon
-Achaeta
-achaetous
-achage
-Achagua
-Achakzai
-achalasia
-Achamoth
-Achango
-achar
-Achariaceae
-Achariaceous
-achate
-Achates
-Achatina
-Achatinella
-Achatinidae
-ache
-acheilia
-acheilous
-acheiria
-acheirous
-acheirus
-Achen
-achene
-achenial
-achenium
-achenocarp
-achenodium
-acher
-Achernar
-Acheronian
-Acherontic
-Acherontical
-achete
-Achetidae
-Acheulean
-acheweed
-achievable
-achieve
-achievement
-achiever
-achigan
-achilary
-achill
-Achillea
-Achillean
-Achilleid
-achilleine
-Achillize
-achillobursitis
-achillodynia
-achime
-Achimenes
-Achinese
-aching
-achingly
-achira
-Achitophel
-achlamydate
-Achlamydeae
-achlamydeous
-achlorhydria
-achlorophyllous
-achloropsia
-Achmetha
-acholia
-acholic
-Acholoe
-acholous
-acholuria
-acholuric
-Achomawi
-achondrite
-achondritic
-achondroplasia
-achondroplastic
-achor
-achordal
-Achordata
-achordate
-Achorion
-Achras
-achree
-achroacyte
-Achroanthes
-achrodextrin
-achrodextrinase
-achroglobin
-achroiocythaemia
-achroiocythemia
-achroite
-achroma
-achromacyte
-achromasia
-achromat
-achromate
-Achromatiaceae
-achromatic
-achromatically
-achromaticity
-achromatin
-achromatinic
-achromatism
-Achromatium
-achromatizable
-achromatization
-achromatize
-achromatocyte
-achromatolysis
-achromatope
-achromatophile
-achromatopia
-achromatopsia
-achromatopsy
-achromatosis
-achromatous
-achromaturia
-achromia
-achromic
-Achromobacter
-Achromobacterieae
-achromoderma
-achromophilous
-achromotrichia
-achromous
-achronical
-achroodextrin
-achroodextrinase
-achroous
-achropsia
-achtehalber
-achtel
-achtelthaler
-Achuas
-achy
-achylia
-achylous
-achymia
-achymous
-Achyranthes
-Achyrodes
-acichloride
-acicula
-acicular
-acicularly
-aciculate
-aciculated
-aciculum
-acid
-Acidanthera
-Acidaspis
-acidemia
-acider
-acidic
-acidiferous
-acidifiable
-acidifiant
-acidific
-acidification
-acidifier
-acidify
-acidimeter
-acidimetric
-acidimetrical
-acidimetrically
-acidimetry
-acidite
-acidity
-acidize
-acidly
-acidness
-acidoid
-acidology
-acidometer
-acidometry
-acidophile
-acidophilic
-acidophilous
-acidoproteolytic
-acidosis
-acidosteophyte
-acidotic
-acidproof
-acidulate
-acidulent
-acidulous
-aciduric
-acidyl
-acier
-acierage
-Acieral
-acierate
-acieration
-aciform
-aciliate
-aciliated
-Acilius
-acinaceous
-acinaces
-acinacifolious
-acinaciform
-acinar
-acinarious
-acinary
-Acineta
-Acinetae
-acinetan
-Acinetaria
-acinetarian
-acinetic
-acinetiform
-Acinetina
-acinetinan
-acinic
-aciniform
-acinose
-acinotubular
-acinous
-acinus
-Acipenser
-Acipenseres
-acipenserid
-Acipenseridae
-acipenserine
-acipenseroid
-Acipenseroidei
-Acis
-aciurgy
-acker
-ackey
-ackman
-acknow
-acknowledge
-acknowledgeable
-acknowledged
-acknowledgedly
-acknowledger
-aclastic
-acle
-acleidian
-acleistous
-Aclemon
-aclidian
-aclinal
-aclinic
-acloud
-aclys
-Acmaea
-Acmaeidae
-acmatic
-acme
-acmesthesia
-acmic
-Acmispon
-acmite
-acne
-acneform
-acneiform
-acnemia
-Acnida
-acnodal
-acnode
-Acocanthera
-acocantherin
-acock
-acockbill
-acocotl
-Acoela
-Acoelomata
-acoelomate
-acoelomatous
-Acoelomi
-acoelomous
-acoelous
-Acoemetae
-Acoemeti
-Acoemetic
-acoin
-acoine
-Acolapissa
-acold
-Acolhua
-Acolhuan
-acologic
-acology
-acolous
-acoluthic
-acolyte
-acolythate
-Acoma
-acoma
-acomia
-acomous
-aconative
-acondylose
-acondylous
-acone
-aconic
-aconin
-aconine
-aconital
-aconite
-aconitia
-aconitic
-aconitin
-aconitine
-Aconitum
-Acontias
-acontium
-Acontius
-aconuresis
-acopic
-acopon
-acopyrin
-acopyrine
-acor
-acorea
-acoria
-acorn
-acorned
-Acorus
-acosmic
-acosmism
-acosmist
-acosmistic
-acotyledon
-acotyledonous
-acouasm
-acouchi
-acouchy
-acoumeter
-acoumetry
-acouometer
-acouophonia
-acoupa
-acousmata
-acousmatic
-acoustic
-acoustical
-acoustically
-acoustician
-acousticolateral
-Acousticon
-acoustics
-acquaint
-acquaintance
-acquaintanceship
-acquaintancy
-acquaintant
-acquainted
-acquaintedness
-acquest
-acquiesce
-acquiescement
-acquiescence
-acquiescency
-acquiescent
-acquiescently
-acquiescer
-acquiescingly
-acquirability
-acquirable
-acquire
-acquired
-acquirement
-acquirenda
-acquirer
-acquisible
-acquisite
-acquisited
-acquisition
-acquisitive
-acquisitively
-acquisitiveness
-acquisitor
-acquisitum
-acquist
-acquit
-acquitment
-acquittal
-acquittance
-acquitter
-Acrab
-acracy
-acraein
-Acraeinae
-acraldehyde
-Acrania
-acranial
-acraniate
-acrasia
-Acrasiaceae
-Acrasiales
-Acrasida
-Acrasieae
-Acraspeda
-acraspedote
-acratia
-acraturesis
-acrawl
-acraze
-acre
-acreable
-acreage
-acreak
-acream
-acred
-Acredula
-acreman
-acrestaff
-acrid
-acridan
-acridian
-acridic
-Acrididae
-Acridiidae
-acridine
-acridinic
-acridinium
-acridity
-Acridium
-acridly
-acridness
-acridone
-acridonium
-acridophagus
-acridyl
-acriflavin
-acriflavine
-acrimonious
-acrimoniously
-acrimoniousness
-acrimony
-acrindoline
-acrinyl
-acrisia
-Acrisius
-Acrita
-acritan
-acrite
-acritical
-acritol
-Acroa
-acroaesthesia
-acroama
-acroamatic
-acroamatics
-acroanesthesia
-acroarthritis
-acroasphyxia
-acroataxia
-acroatic
-acrobacy
-acrobat
-Acrobates
-acrobatholithic
-acrobatic
-acrobatical
-acrobatically
-acrobatics
-acrobatism
-acroblast
-acrobryous
-acrobystitis
-Acrocarpi
-acrocarpous
-acrocephalia
-acrocephalic
-acrocephalous
-acrocephaly
-Acrocera
-Acroceratidae
-Acroceraunian
-Acroceridae
-Acrochordidae
-Acrochordinae
-acrochordon
-Acroclinium
-Acrocomia
-acroconidium
-acrocontracture
-acrocoracoid
-acrocyanosis
-acrocyst
-acrodactylum
-acrodermatitis
-acrodont
-acrodontism
-acrodrome
-acrodromous
-Acrodus
-acrodynia
-acroesthesia
-acrogamous
-acrogamy
-acrogen
-acrogenic
-acrogenous
-acrogenously
-acrography
-Acrogynae
-acrogynae
-acrogynous
-acrolein
-acrolith
-acrolithan
-acrolithic
-acrologic
-acrologically
-acrologism
-acrologue
-acrology
-acromania
-acromastitis
-acromegalia
-acromegalic
-acromegaly
-acromelalgia
-acrometer
-acromial
-acromicria
-acromioclavicular
-acromiocoracoid
-acromiodeltoid
-acromiohumeral
-acromiohyoid
-acromion
-acromioscapular
-acromiosternal
-acromiothoracic
-acromonogrammatic
-acromphalus
-Acromyodi
-acromyodian
-acromyodic
-acromyodous
-acromyotonia
-acromyotonus
-acron
-acronarcotic
-acroneurosis
-acronical
-acronically
-acronyc
-acronych
-Acronycta
-acronyctous
-acronym
-acronymic
-acronymize
-acronymous
-acronyx
-acrook
-acroparalysis
-acroparesthesia
-acropathology
-acropathy
-acropetal
-acropetally
-acrophobia
-acrophonetic
-acrophonic
-acrophony
-acropodium
-acropoleis
-acropolis
-acropolitan
-Acropora
-acrorhagus
-acrorrheuma
-acrosarc
-acrosarcum
-acroscleriasis
-acroscleroderma
-acroscopic
-acrose
-acrosome
-acrosphacelus
-acrospire
-acrospore
-acrosporous
-across
-acrostic
-acrostical
-acrostically
-acrostichal
-Acrosticheae
-acrostichic
-acrostichoid
-Acrostichum
-acrosticism
-acrostolion
-acrostolium
-acrotarsial
-acrotarsium
-acroteleutic
-acroterial
-acroteric
-acroterium
-Acrothoracica
-acrotic
-acrotism
-acrotomous
-Acrotreta
-Acrotretidae
-acrotrophic
-acrotrophoneurosis
-Acrux
-Acrydium
-acryl
-acrylaldehyde
-acrylate
-acrylic
-acrylonitrile
-acrylyl
-act
-acta
-actability
-actable
-Actaea
-Actaeaceae
-Actaeon
-Actaeonidae
-Actiad
-Actian
-actification
-actifier
-actify
-actin
-actinal
-actinally
-actinautographic
-actinautography
-actine
-actinenchyma
-acting
-Actinia
-actinian
-Actiniaria
-actiniarian
-actinic
-actinically
-Actinidia
-Actinidiaceae
-actiniferous
-actiniform
-actinine
-actiniochrome
-actiniohematin
-Actiniomorpha
-actinism
-Actinistia
-actinium
-actinobacillosis
-Actinobacillus
-actinoblast
-actinobranch
-actinobranchia
-actinocarp
-actinocarpic
-actinocarpous
-actinochemistry
-actinocrinid
-Actinocrinidae
-actinocrinite
-Actinocrinus
-actinocutitis
-actinodermatitis
-actinodielectric
-actinodrome
-actinodromous
-actinoelectric
-actinoelectrically
-actinoelectricity
-actinogonidiate
-actinogram
-actinograph
-actinography
-actinoid
-Actinoida
-Actinoidea
-actinolite
-actinolitic
-actinologous
-actinologue
-actinology
-actinomere
-actinomeric
-actinometer
-actinometric
-actinometrical
-actinometry
-actinomorphic
-actinomorphous
-actinomorphy
-Actinomyces
-Actinomycetaceae
-Actinomycetales
-actinomycete
-actinomycetous
-actinomycin
-actinomycoma
-actinomycosis
-actinomycotic
-Actinomyxidia
-Actinomyxidiida
-actinon
-Actinonema
-actinoneuritis
-actinophone
-actinophonic
-actinophore
-actinophorous
-actinophryan
-Actinophrys
-Actinopoda
-actinopraxis
-actinopteran
-Actinopteri
-actinopterous
-actinopterygian
-Actinopterygii
-actinopterygious
-actinoscopy
-actinosoma
-actinosome
-Actinosphaerium
-actinost
-actinostereoscopy
-actinostomal
-actinostome
-actinotherapeutic
-actinotherapeutics
-actinotherapy
-actinotoxemia
-actinotrichium
-actinotrocha
-actinouranium
-Actinozoa
-actinozoal
-actinozoan
-actinozoon
-actinula
-action
-actionable
-actionably
-actional
-actionary
-actioner
-actionize
-actionless
-Actipylea
-Actium
-activable
-activate
-activation
-activator
-active
-actively
-activeness
-activin
-activism
-activist
-activital
-activity
-activize
-actless
-actomyosin
-acton
-actor
-actorship
-actress
-Acts
-actu
-actual
-actualism
-actualist
-actualistic
-actuality
-actualization
-actualize
-actually
-actualness
-actuarial
-actuarially
-actuarian
-actuary
-actuaryship
-actuation
-actuator
-acture
-acturience
-actutate
-acuaesthesia
-Acuan
-acuate
-acuation
-Acubens
-acuclosure
-acuductor
-acuesthesia
-acuity
-aculea
-Aculeata
-aculeate
-aculeated
-aculeiform
-aculeolate
-aculeolus
-aculeus
-acumen
-acuminate
-acumination
-acuminose
-acuminous
-acuminulate
-acupress
-acupressure
-acupunctuate
-acupunctuation
-acupuncturation
-acupuncturator
-acupuncture
-acurative
-acushla
-acutangular
-acutate
-acute
-acutely
-acutenaculum
-acuteness
-acutiator
-acutifoliate
-Acutilinguae
-acutilingual
-acutilobate
-acutiplantar
-acutish
-acutograve
-acutonodose
-acutorsion
-acyanoblepsia
-acyanopsia
-acyclic
-acyesis
-acyetic
-acyl
-acylamido
-acylamidobenzene
-acylamino
-acylate
-acylation
-acylogen
-acyloin
-acyloxy
-acyloxymethane
-acyrological
-acyrology
-acystia
-ad
-Ada
-adactyl
-adactylia
-adactylism
-adactylous
-Adad
-adad
-adage
-adagial
-adagietto
-adagio
-Adai
-Adaize
-Adam
-adamant
-adamantean
-adamantine
-adamantinoma
-adamantoblast
-adamantoblastoma
-adamantoid
-adamantoma
-adamas
-Adamastor
-adambulacral
-adamellite
-Adamhood
-Adamic
-Adamical
-Adamically
-adamine
-Adamite
-adamite
-Adamitic
-Adamitical
-Adamitism
-Adamsia
-adamsite
-adance
-adangle
-Adansonia
-Adapa
-adapid
-Adapis
-adapt
-adaptability
-adaptable
-adaptation
-adaptational
-adaptationally
-adaptative
-adaptedness
-adapter
-adaption
-adaptional
-adaptionism
-adaptitude
-adaptive
-adaptively
-adaptiveness
-adaptometer
-adaptor
-adaptorial
-Adar
-adarme
-adat
-adati
-adatom
-adaunt
-adaw
-adawe
-adawlut
-adawn
-adaxial
-aday
-adays
-adazzle
-adcraft
-add
-Adda
-adda
-addability
-addable
-addax
-addebted
-added
-addedly
-addend
-addenda
-addendum
-adder
-adderbolt
-adderfish
-adderspit
-adderwort
-addibility
-addible
-addicent
-addict
-addicted
-addictedness
-addiction
-Addie
-addiment
-Addisonian
-Addisoniana
-additament
-additamentary
-addition
-additional
-additionally
-additionary
-additionist
-addititious
-additive
-additively
-additivity
-additory
-addle
-addlebrain
-addlebrained
-addlehead
-addleheaded
-addleheadedly
-addleheadedness
-addlement
-addleness
-addlepate
-addlepated
-addlepatedness
-addleplot
-addlings
-addlins
-addorsed
-address
-addressee
-addresser
-addressful
-Addressograph
-addressor
-addrest
-Addu
-adduce
-adducent
-adducer
-adducible
-adduct
-adduction
-adductive
-adductor
-Addy
-Ade
-ade
-adead
-adeem
-adeep
-Adela
-Adelaide
-Adelarthra
-Adelarthrosomata
-adelarthrosomatous
-Adelbert
-Adelea
-Adeleidae
-Adelges
-Adelia
-Adelina
-Adeline
-adeling
-adelite
-Adeliza
-adelocerous
-Adelochorda
-adelocodonic
-adelomorphic
-adelomorphous
-adelopod
-Adelops
-Adelphi
-Adelphian
-adelphogamy
-Adelphoi
-adelpholite
-adelphophagy
-ademonist
-adempted
-ademption
-adenalgia
-adenalgy
-Adenanthera
-adenase
-adenasthenia
-adendric
-adendritic
-adenectomy
-adenectopia
-adenectopic
-adenemphractic
-adenemphraxis
-adenia
-adeniform
-adenine
-adenitis
-adenization
-adenoacanthoma
-adenoblast
-adenocancroid
-adenocarcinoma
-adenocarcinomatous
-adenocele
-adenocellulitis
-adenochondroma
-adenochondrosarcoma
-adenochrome
-adenocyst
-adenocystoma
-adenocystomatous
-adenodermia
-adenodiastasis
-adenodynia
-adenofibroma
-adenofibrosis
-adenogenesis
-adenogenous
-adenographer
-adenographic
-adenographical
-adenography
-adenohypersthenia
-adenoid
-adenoidal
-adenoidism
-adenoliomyofibroma
-adenolipoma
-adenolipomatosis
-adenologaditis
-adenological
-adenology
-adenolymphocele
-adenolymphoma
-adenoma
-adenomalacia
-adenomatome
-adenomatous
-adenomeningeal
-adenometritis
-adenomycosis
-adenomyofibroma
-adenomyoma
-adenomyxoma
-adenomyxosarcoma
-adenoncus
-adenoneural
-adenoneure
-adenopathy
-adenopharyngeal
-adenopharyngitis
-adenophlegmon
-Adenophora
-adenophore
-adenophorous
-adenophthalmia
-adenophyllous
-adenophyma
-adenopodous
-adenosarcoma
-adenosclerosis
-adenose
-adenosine
-adenosis
-adenostemonous
-Adenostoma
-adenotome
-adenotomic
-adenotomy
-adenotyphoid
-adenotyphus
-adenyl
-adenylic
-Adeodatus
-Adeona
-Adephaga
-adephagan
-adephagia
-adephagous
-adept
-adeptness
-adeptship
-adequacy
-adequate
-adequately
-adequateness
-adequation
-adequative
-adermia
-adermin
-Adessenarian
-adet
-adevism
-adfected
-adfix
-adfluxion
-adglutinate
-Adhafera
-adhaka
-adhamant
-Adhara
-adharma
-adhere
-adherence
-adherency
-adherent
-adherently
-adherer
-adherescence
-adherescent
-adhesion
-adhesional
-adhesive
-adhesively
-adhesivemeter
-adhesiveness
-adhibit
-adhibition
-adiabatic
-adiabatically
-adiabolist
-adiactinic
-adiadochokinesis
-adiagnostic
-adiantiform
-Adiantum
-adiaphon
-adiaphonon
-adiaphoral
-adiaphoresis
-adiaphoretic
-adiaphorism
-adiaphorist
-adiaphoristic
-adiaphorite
-adiaphoron
-adiaphorous
-adiate
-adiathermal
-adiathermancy
-adiathermanous
-adiathermic
-adiathetic
-adiation
-Adib
-Adicea
-adicity
-Adiel
-adieu
-adieux
-Adigei
-Adighe
-Adigranth
-adigranth
-Adin
-Adinida
-adinidan
-adinole
-adion
-adipate
-adipescent
-adipic
-adipinic
-adipocele
-adipocellulose
-adipocere
-adipoceriform
-adipocerous
-adipocyte
-adipofibroma
-adipogenic
-adipogenous
-adipoid
-adipolysis
-adipolytic
-adipoma
-adipomatous
-adipometer
-adipopexia
-adipopexis
-adipose
-adiposeness
-adiposis
-adiposity
-adiposogenital
-adiposuria
-adipous
-adipsia
-adipsic
-adipsous
-adipsy
-adipyl
-Adirondack
-adit
-adital
-aditus
-adjacency
-adjacent
-adjacently
-adjag
-adject
-adjection
-adjectional
-adjectival
-adjectivally
-adjective
-adjectively
-adjectivism
-adjectivitis
-adjiger
-adjoin
-adjoined
-adjoinedly
-adjoining
-adjoint
-adjourn
-adjournal
-adjournment
-adjudge
-adjudgeable
-adjudger
-adjudgment
-adjudicate
-adjudication
-adjudicative
-adjudicator
-adjudicature
-adjunct
-adjunction
-adjunctive
-adjunctively
-adjunctly
-adjuration
-adjuratory
-adjure
-adjurer
-adjust
-adjustable
-adjustably
-adjustage
-adjustation
-adjuster
-adjustive
-adjustment
-adjutage
-adjutancy
-adjutant
-adjutantship
-adjutorious
-adjutory
-adjutrice
-adjuvant
-Adlai
-adlay
-adless
-adlet
-Adlumia
-adlumidine
-adlumine
-adman
-admarginate
-admaxillary
-admeasure
-admeasurement
-admeasurer
-admedial
-admedian
-admensuration
-admi
-adminicle
-adminicula
-adminicular
-adminiculary
-adminiculate
-adminiculation
-adminiculum
-administer
-administerd
-administerial
-administrable
-administrant
-administrate
-administration
-administrational
-administrative
-administratively
-administrator
-administratorship
-administratress
-administratrices
-administratrix
-admirability
-admirable
-admirableness
-admirably
-admiral
-admiralship
-admiralty
-admiration
-admirative
-admirator
-admire
-admired
-admiredly
-admirer
-admiring
-admiringly
-admissibility
-admissible
-admissibleness
-admissibly
-admission
-admissive
-admissory
-admit
-admittable
-admittance
-admitted
-admittedly
-admittee
-admitter
-admittible
-admix
-admixtion
-admixture
-admonish
-admonisher
-admonishingly
-admonishment
-admonition
-admonitioner
-admonitionist
-admonitive
-admonitively
-admonitor
-admonitorial
-admonitorily
-admonitory
-admonitrix
-admortization
-adnascence
-adnascent
-adnate
-adnation
-adnephrine
-adnerval
-adneural
-adnex
-adnexal
-adnexed
-adnexitis
-adnexopexy
-adnominal
-adnominally
-adnomination
-adnoun
-ado
-adobe
-adolesce
-adolescence
-adolescency
-adolescent
-adolescently
-Adolph
-Adolphus
-Adonai
-Adonean
-Adonia
-Adoniad
-Adonian
-Adonic
-adonidin
-adonin
-Adoniram
-Adonis
-adonite
-adonitol
-adonize
-adoperate
-adoperation
-adopt
-adoptability
-adoptable
-adoptant
-adoptative
-adopted
-adoptedly
-adoptee
-adopter
-adoptian
-adoptianism
-adoptianist
-adoption
-adoptional
-adoptionism
-adoptionist
-adoptious
-adoptive
-adoptively
-adorability
-adorable
-adorableness
-adorably
-adoral
-adorally
-adorant
-Adorantes
-adoration
-adoratory
-adore
-adorer
-Adoretus
-adoringly
-adorn
-adorner
-adorningly
-adornment
-adosculation
-adossed
-adoulie
-adown
-Adoxa
-Adoxaceae
-adoxaceous
-adoxography
-adoxy
-adoze
-adpao
-adpress
-adpromission
-adradial
-adradially
-adradius
-Adramelech
-Adrammelech
-adread
-adream
-adreamed
-adreamt
-adrectal
-adrenal
-adrenalectomize
-adrenalectomy
-Adrenalin
-adrenaline
-adrenalize
-adrenalone
-adrenergic
-adrenin
-adrenine
-adrenochrome
-adrenocortical
-adrenocorticotropic
-adrenolysis
-adrenolytic
-adrenotropic
-Adrian
-Adriana
-Adriatic
-Adrienne
-adrift
-adrip
-adroit
-adroitly
-adroitness
-adroop
-adrop
-adrostral
-adrowse
-adrue
-adry
-adsbud
-adscendent
-adscititious
-adscititiously
-adscript
-adscripted
-adscription
-adscriptitious
-adscriptitius
-adscriptive
-adsessor
-adsheart
-adsignification
-adsignify
-adsmith
-adsmithing
-adsorb
-adsorbable
-adsorbate
-adsorbent
-adsorption
-adsorptive
-adstipulate
-adstipulation
-adstipulator
-adterminal
-adtevac
-adular
-adularescence
-adularia
-adulate
-adulation
-adulator
-adulatory
-adulatress
-Adullam
-Adullamite
-adult
-adulter
-adulterant
-adulterate
-adulterately
-adulterateness
-adulteration
-adulterator
-adulterer
-adulteress
-adulterine
-adulterize
-adulterous
-adulterously
-adultery
-adulthood
-adulticidal
-adulticide
-adultness
-adultoid
-adumbral
-adumbrant
-adumbrate
-adumbration
-adumbrative
-adumbratively
-adunc
-aduncate
-aduncated
-aduncity
-aduncous
-adusk
-adust
-adustion
-adustiosis
-Advaita
-advance
-advanceable
-advanced
-advancedness
-advancement
-advancer
-advancing
-advancingly
-advancive
-advantage
-advantageous
-advantageously
-advantageousness
-advection
-advectitious
-advective
-advehent
-advene
-advenience
-advenient
-Advent
-advential
-Adventism
-Adventist
-adventitia
-adventitious
-adventitiously
-adventitiousness
-adventive
-adventual
-adventure
-adventureful
-adventurement
-adventurer
-adventureship
-adventuresome
-adventuresomely
-adventuresomeness
-adventuress
-adventurish
-adventurous
-adventurously
-adventurousness
-adverb
-adverbial
-adverbiality
-adverbialize
-adverbially
-adverbiation
-adversant
-adversaria
-adversarious
-adversary
-adversative
-adversatively
-adverse
-adversely
-adverseness
-adversifoliate
-adversifolious
-adversity
-advert
-advertence
-advertency
-advertent
-advertently
-advertisable
-advertise
-advertisee
-advertisement
-advertiser
-advertising
-advice
-adviceful
-advisability
-advisable
-advisableness
-advisably
-advisal
-advisatory
-advise
-advised
-advisedly
-advisedness
-advisee
-advisement
-adviser
-advisership
-advisive
-advisiveness
-advisor
-advisorily
-advisory
-advocacy
-advocate
-advocateship
-advocatess
-advocation
-advocator
-advocatory
-advocatress
-advocatrice
-advocatrix
-advolution
-advowee
-advowson
-ady
-adynamia
-adynamic
-adynamy
-adyta
-adyton
-adytum
-adz
-adze
-adzer
-adzooks
-ae
-Aeacides
-Aeacus
-Aeaean
-Aechmophorus
-aecial
-Aecidiaceae
-aecidial
-aecidioform
-Aecidiomycetes
-aecidiospore
-aecidiostage
-aecidium
-aeciospore
-aeciostage
-aecioteliospore
-aeciotelium
-aecium
-aedeagus
-Aedes
-aedicula
-aedile
-aedileship
-aedilian
-aedilic
-aedilitian
-aedility
-aedoeagus
-aefald
-aefaldness
-aefaldy
-aefauld
-aegagropila
-aegagropile
-aegagrus
-Aegean
-aegerian
-aegeriid
-Aegeriidae
-Aegialitis
-aegicrania
-Aegina
-Aeginetan
-Aeginetic
-Aegipan
-aegirine
-aegirinolite
-aegirite
-aegis
-Aegisthus
-Aegithalos
-Aegithognathae
-aegithognathism
-aegithognathous
-Aegle
-Aegopodium
-aegrotant
-aegyptilla
-aegyrite
-aeluroid
-Aeluroidea
-aelurophobe
-aelurophobia
-aeluropodous
-aenach
-aenean
-aeneolithic
-aeneous
-aenigmatite
-aeolharmonica
-Aeolia
-Aeolian
-Aeolic
-Aeolicism
-aeolid
-Aeolidae
-Aeolididae
-aeolina
-aeoline
-aeolipile
-Aeolis
-Aeolism
-Aeolist
-aeolistic
-aeolodicon
-aeolodion
-aeolomelodicon
-aeolopantalon
-aeolotropic
-aeolotropism
-aeolotropy
-aeolsklavier
-aeon
-aeonial
-aeonian
-aeonist
-Aepyceros
-Aepyornis
-Aepyornithidae
-Aepyornithiformes
-Aequi
-Aequian
-Aequiculi
-Aequipalpia
-aequoreal
-aer
-aerage
-aerarian
-aerarium
-aerate
-aeration
-aerator
-aerenchyma
-aerenterectasia
-aerial
-aerialist
-aeriality
-aerially
-aerialness
-aeric
-aerical
-Aerides
-aerie
-aeried
-aerifaction
-aeriferous
-aerification
-aeriform
-aerify
-aero
-Aerobacter
-aerobate
-aerobatic
-aerobatics
-aerobe
-aerobian
-aerobic
-aerobically
-aerobiologic
-aerobiological
-aerobiologically
-aerobiologist
-aerobiology
-aerobion
-aerobiont
-aerobioscope
-aerobiosis
-aerobiotic
-aerobiotically
-aerobious
-aerobium
-aeroboat
-Aerobranchia
-aerobranchiate
-aerobus
-aerocamera
-aerocartograph
-Aerocharidae
-aerocolpos
-aerocraft
-aerocurve
-aerocyst
-aerodermectasia
-aerodone
-aerodonetic
-aerodonetics
-aerodrome
-aerodromics
-aerodynamic
-aerodynamical
-aerodynamicist
-aerodynamics
-aerodyne
-aeroembolism
-aeroenterectasia
-aerofoil
-aerogel
-aerogen
-aerogenes
-aerogenesis
-aerogenic
-aerogenically
-aerogenous
-aerogeologist
-aerogeology
-aerognosy
-aerogram
-aerograph
-aerographer
-aerographic
-aerographical
-aerographics
-aerography
-aerogun
-aerohydrodynamic
-aerohydropathy
-aerohydroplane
-aerohydrotherapy
-aerohydrous
-aeroides
-aerolite
-aerolith
-aerolithology
-aerolitic
-aerolitics
-aerologic
-aerological
-aerologist
-aerology
-aeromaechanic
-aeromancer
-aeromancy
-aeromantic
-aeromarine
-aeromechanical
-aeromechanics
-aerometeorograph
-aerometer
-aerometric
-aerometry
-aeromotor
-aeronat
-aeronaut
-aeronautic
-aeronautical
-aeronautically
-aeronautics
-aeronautism
-aeronef
-aeroneurosis
-aeropathy
-Aerope
-aeroperitoneum
-aeroperitonia
-aerophagia
-aerophagist
-aerophagy
-aerophane
-aerophilatelic
-aerophilatelist
-aerophilately
-aerophile
-aerophilic
-aerophilous
-aerophobia
-aerophobic
-aerophone
-aerophor
-aerophore
-aerophotography
-aerophysical
-aerophysics
-aerophyte
-aeroplane
-aeroplaner
-aeroplanist
-aeropleustic
-aeroporotomy
-aeroscepsis
-aeroscepsy
-aeroscope
-aeroscopic
-aeroscopically
-aeroscopy
-aerose
-aerosiderite
-aerosiderolite
-Aerosol
-aerosol
-aerosphere
-aerosporin
-aerostat
-aerostatic
-aerostatical
-aerostatics
-aerostation
-aerosteam
-aerotactic
-aerotaxis
-aerotechnical
-aerotherapeutics
-aerotherapy
-aerotonometer
-aerotonometric
-aerotonometry
-aerotropic
-aerotropism
-aeroyacht
-aeruginous
-aerugo
-aery
-aes
-Aeschylean
-Aeschynanthus
-Aeschynomene
-aeschynomenous
-Aesculaceae
-aesculaceous
-Aesculapian
-Aesculapius
-Aesculus
-Aesopian
-Aesopic
-aesthete
-aesthetic
-aesthetical
-aesthetically
-aesthetician
-aestheticism
-aestheticist
-aestheticize
-aesthetics
-aesthiology
-aesthophysiology
-Aestii
-aethalioid
-aethalium
-aetheogam
-aetheogamic
-aetheogamous
-aethered
-Aethionema
-aethogen
-aethrioscope
-Aethusa
-Aetian
-aetiogenic
-aetiotropic
-aetiotropically
-Aetobatidae
-Aetobatus
-Aetolian
-Aetomorphae
-aetosaur
-aetosaurian
-Aetosaurus
-aevia
-aface
-afaint
-Afar
-afar
-afara
-afear
-afeard
-afeared
-afebrile
-Afenil
-afernan
-afetal
-affa
-affability
-affable
-affableness
-affably
-affabrous
-affair
-affaite
-affect
-affectable
-affectate
-affectation
-affectationist
-affected
-affectedly
-affectedness
-affecter
-affectibility
-affectible
-affecting
-affectingly
-affection
-affectional
-affectionally
-affectionate
-affectionately
-affectionateness
-affectioned
-affectious
-affective
-affectively
-affectivity
-affeer
-affeerer
-affeerment
-affeir
-affenpinscher
-affenspalte
-afferent
-affettuoso
-affiance
-affiancer
-affiant
-affidation
-affidavit
-affidavy
-affiliable
-affiliate
-affiliation
-affinal
-affination
-affine
-affined
-affinely
-affinitative
-affinitatively
-affinite
-affinition
-affinitive
-affinity
-affirm
-affirmable
-affirmably
-affirmance
-affirmant
-affirmation
-affirmative
-affirmatively
-affirmatory
-affirmer
-affirmingly
-affix
-affixal
-affixation
-affixer
-affixion
-affixture
-afflation
-afflatus
-afflict
-afflicted
-afflictedness
-afflicter
-afflicting
-afflictingly
-affliction
-afflictionless
-afflictive
-afflictively
-affluence
-affluent
-affluently
-affluentness
-afflux
-affluxion
-afforce
-afforcement
-afford
-affordable
-afforest
-afforestable
-afforestation
-afforestment
-afformative
-affranchise
-affranchisement
-affray
-affrayer
-affreight
-affreighter
-affreightment
-affricate
-affricated
-affrication
-affricative
-affright
-affrighted
-affrightedly
-affrighter
-affrightful
-affrightfully
-affrightingly
-affrightment
-affront
-affronte
-affronted
-affrontedly
-affrontedness
-affronter
-affronting
-affrontingly
-affrontingness
-affrontive
-affrontiveness
-affrontment
-affuse
-affusion
-affy
-Afghan
-afghani
-afield
-Afifi
-afikomen
-afire
-aflagellar
-aflame
-aflare
-aflat
-aflaunt
-aflicker
-aflight
-afloat
-aflow
-aflower
-afluking
-aflush
-aflutter
-afoam
-afoot
-afore
-aforehand
-aforenamed
-aforesaid
-aforethought
-aforetime
-aforetimes
-afortiori
-afoul
-afraid
-afraidness
-Aframerican
-Afrasia
-Afrasian
-afreet
-afresh
-afret
-Afric
-African
-Africana
-Africanism
-Africanist
-Africanization
-Africanize
-Africanoid
-Africanthropus
-Afridi
-Afrikaans
-Afrikander
-Afrikanderdom
-Afrikanderism
-Afrikaner
-Afrogaea
-Afrogaean
-afront
-afrown
-Afshah
-Afshar
-aft
-aftaba
-after
-afteract
-afterage
-afterattack
-afterband
-afterbeat
-afterbirth
-afterblow
-afterbody
-afterbrain
-afterbreach
-afterbreast
-afterburner
-afterburning
-aftercare
-aftercareer
-aftercast
-aftercataract
-aftercause
-afterchance
-afterchrome
-afterchurch
-afterclap
-afterclause
-aftercome
-aftercomer
-aftercoming
-aftercooler
-aftercost
-aftercourse
-aftercrop
-aftercure
-afterdamp
-afterdate
-afterdays
-afterdeck
-afterdinner
-afterdrain
-afterdrops
-aftereffect
-afterend
-aftereye
-afterfall
-afterfame
-afterfeed
-afterfermentation
-afterform
-afterfriend
-afterfruits
-afterfuture
-aftergame
-aftergas
-afterglide
-afterglow
-aftergo
-aftergood
-aftergrass
-aftergrave
-aftergrief
-aftergrind
-aftergrowth
-afterguard
-afterguns
-afterhand
-afterharm
-afterhatch
-afterhelp
-afterhend
-afterhold
-afterhope
-afterhours
-afterimage
-afterimpression
-afterings
-afterking
-afterknowledge
-afterlife
-afterlifetime
-afterlight
-afterloss
-afterlove
-aftermark
-aftermarriage
-aftermass
-aftermast
-aftermath
-aftermatter
-aftermeal
-aftermilk
-aftermost
-afternight
-afternoon
-afternoons
-afternose
-afternote
-afteroar
-afterpain
-afterpart
-afterpast
-afterpeak
-afterpiece
-afterplanting
-afterplay
-afterpressure
-afterproof
-afterrake
-afterreckoning
-afterrider
-afterripening
-afterroll
-afterschool
-aftersend
-aftersensation
-aftershaft
-aftershafted
-aftershine
-aftership
-aftershock
-aftersong
-aftersound
-afterspeech
-afterspring
-afterstain
-afterstate
-afterstorm
-afterstrain
-afterstretch
-afterstudy
-afterswarm
-afterswarming
-afterswell
-aftertan
-aftertask
-aftertaste
-afterthinker
-afterthought
-afterthoughted
-afterthrift
-aftertime
-aftertimes
-aftertouch
-aftertreatment
-aftertrial
-afterturn
-aftervision
-afterwale
-afterwar
-afterward
-afterwards
-afterwash
-afterwhile
-afterwisdom
-afterwise
-afterwit
-afterwitted
-afterwork
-afterworking
-afterworld
-afterwrath
-afterwrist
-aftmost
-Aftonian
-aftosa
-aftward
-aftwards
-afunction
-afunctional
-afwillite
-Afzelia
-aga
-agabanee
-agacante
-agacella
-Agaces
-Agade
-Agag
-again
-against
-againstand
-agal
-agalactia
-agalactic
-agalactous
-agalawood
-agalaxia
-agalaxy
-Agalena
-Agalenidae
-Agalinis
-agalite
-agalloch
-agallochum
-agallop
-agalma
-agalmatolite
-agalwood
-Agama
-agama
-Agamae
-Agamemnon
-agamete
-agami
-agamian
-agamic
-agamically
-agamid
-Agamidae
-agamobium
-agamogenesis
-agamogenetic
-agamogenetically
-agamogony
-agamoid
-agamont
-agamospore
-agamous
-agamy
-aganglionic
-Aganice
-Aganippe
-Agao
-Agaonidae
-Agapanthus
-agape
-Agapemone
-Agapemonian
-Agapemonist
-Agapemonite
-agapetae
-agapeti
-agapetid
-Agapetidae
-Agapornis
-agar
-agaric
-agaricaceae
-agaricaceous
-Agaricales
-agaricic
-agariciform
-agaricin
-agaricine
-agaricoid
-Agaricus
-Agaristidae
-agarita
-Agarum
-agarwal
-agasp
-Agastache
-Agastreae
-agastric
-agastroneuria
-agate
-agateware
-Agatha
-Agathaea
-Agathaumas
-agathin
-Agathis
-agathism
-agathist
-agathodaemon
-agathodaemonic
-agathokakological
-agathology
-Agathosma
-agatiferous
-agatiform
-agatine
-agatize
-agatoid
-agaty
-Agau
-Agave
-agavose
-Agawam
-Agaz
-agaze
-agazed
-Agdistis
-age
-aged
-agedly
-agedness
-agee
-Agelacrinites
-Agelacrinitidae
-Agelaius
-Agelaus
-ageless
-agelessness
-agelong
-agen
-Agena
-agency
-agenda
-agendum
-agenesia
-agenesic
-agenesis
-agennetic
-agent
-agentess
-agential
-agentival
-agentive
-agentry
-agentship
-ageometrical
-ager
-Ageratum
-ageusia
-ageusic
-ageustia
-agger
-aggerate
-aggeration
-aggerose
-Aggie
-agglomerant
-agglomerate
-agglomerated
-agglomeratic
-agglomeration
-agglomerative
-agglomerator
-agglutinability
-agglutinable
-agglutinant
-agglutinate
-agglutination
-agglutinationist
-agglutinative
-agglutinator
-agglutinin
-agglutinize
-agglutinogen
-agglutinogenic
-agglutinoid
-agglutinoscope
-agglutogenic
-aggradation
-aggradational
-aggrade
-aggrandizable
-aggrandize
-aggrandizement
-aggrandizer
-aggrate
-aggravate
-aggravating
-aggravatingly
-aggravation
-aggravative
-aggravator
-aggregable
-aggregant
-Aggregata
-Aggregatae
-aggregate
-aggregately
-aggregateness
-aggregation
-aggregative
-aggregator
-aggregatory
-aggress
-aggressin
-aggression
-aggressionist
-aggressive
-aggressively
-aggressiveness
-aggressor
-aggrievance
-aggrieve
-aggrieved
-aggrievedly
-aggrievedness
-aggrievement
-aggroup
-aggroupment
-aggry
-aggur
-agha
-Aghan
-aghanee
-aghast
-aghastness
-Aghlabite
-Aghorapanthi
-Aghori
-Agialid
-Agib
-Agiel
-agilawood
-agile
-agilely
-agileness
-agility
-agillawood
-aging
-agio
-agiotage
-agist
-agistator
-agistment
-agistor
-agitable
-agitant
-agitate
-agitatedly
-agitation
-agitational
-agitationist
-agitative
-agitator
-agitatorial
-agitatrix
-agitprop
-Agkistrodon
-agla
-Aglaia
-aglance
-Aglaonema
-Aglaos
-aglaozonia
-aglare
-Aglaspis
-Aglauros
-agleaf
-agleam
-aglet
-aglethead
-agley
-aglimmer
-aglint
-Aglipayan
-Aglipayano
-aglitter
-aglobulia
-Aglossa
-aglossal
-aglossate
-aglossia
-aglow
-aglucon
-aglutition
-aglycosuric
-Aglypha
-aglyphodont
-Aglyphodonta
-Aglyphodontia
-aglyphous
-agmatine
-agmatology
-agminate
-agminated
-agnail
-agname
-agnamed
-agnate
-Agnatha
-agnathia
-agnathic
-Agnathostomata
-agnathostomatous
-agnathous
-agnatic
-agnatically
-agnation
-agnel
-Agnes
-agnification
-agnize
-Agnoetae
-Agnoete
-Agnoetism
-agnoiology
-Agnoite
-agnomen
-agnomical
-agnominal
-agnomination
-agnosia
-agnosis
-agnostic
-agnostically
-agnosticism
-Agnostus
-agnosy
-Agnotozoic
-agnus
-ago
-agog
-agoge
-agogic
-agogics
-agoho
-agoing
-agomensin
-agomphiasis
-agomphious
-agomphosis
-agon
-agonal
-agone
-agoniada
-agoniadin
-agoniatite
-Agoniatites
-agonic
-agonied
-agonist
-Agonista
-agonistarch
-agonistic
-agonistically
-agonistics
-agonium
-agonize
-agonizedly
-agonizer
-agonizingly
-Agonostomus
-agonothete
-agonothetic
-agony
-agora
-agoranome
-agoraphobia
-agouara
-agouta
-agouti
-agpaite
-agpaitic
-Agra
-agraffee
-agrah
-agral
-agrammatical
-agrammatism
-Agrania
-agranulocyte
-agranulocytosis
-agranuloplastic
-Agrapha
-agraphia
-agraphic
-agrarian
-agrarianism
-agrarianize
-agrarianly
-Agrauleum
-agre
-agree
-agreeability
-agreeable
-agreeableness
-agreeably
-agreed
-agreeing
-agreeingly
-agreement
-agreer
-agregation
-agrege
-agrestal
-agrestial
-agrestian
-agrestic
-agria
-agricere
-agricole
-agricolist
-agricolite
-agricolous
-agricultor
-agricultural
-agriculturalist
-agriculturally
-agriculture
-agriculturer
-agriculturist
-Agrilus
-Agrimonia
-agrimony
-agrimotor
-agrin
-Agriochoeridae
-Agriochoerus
-agriological
-agriologist
-agriology
-Agrionia
-agrionid
-Agrionidae
-Agriotes
-Agriotypidae
-Agriotypus
-agrise
-agrito
-agroan
-agrobiologic
-agrobiological
-agrobiologically
-agrobiologist
-agrobiology
-agrogeological
-agrogeologically
-agrogeology
-agrologic
-agrological
-agrologically
-agrology
-agrom
-Agromyza
-agromyzid
-Agromyzidae
-agronome
-agronomial
-agronomic
-agronomical
-agronomics
-agronomist
-agronomy
-agroof
-agrope
-Agropyron
-Agrostemma
-agrosteral
-Agrostis
-agrostographer
-agrostographic
-agrostographical
-agrostography
-agrostologic
-agrostological
-agrostologist
-agrostology
-agrotechny
-Agrotis
-aground
-agrufe
-agruif
-agrypnia
-agrypnotic
-agsam
-agua
-aguacate
-Aguacateca
-aguavina
-Agudist
-ague
-aguelike
-agueproof
-agueweed
-aguey
-aguilarite
-aguilawood
-aguinaldo
-aguirage
-aguish
-aguishly
-aguishness
-agunah
-agush
-agust
-agy
-Agyieus
-agynarious
-agynary
-agynous
-agyrate
-agyria
-Ah
-ah
-aha
-ahaaina
-ahankara
-Ahantchuyuk
-ahartalav
-ahaunch
-ahead
-aheap
-ahem
-Ahepatokla
-Ahet
-ahey
-ahimsa
-ahind
-ahint
-Ahir
-ahluwalia
-ahmadi
-Ahmadiya
-Ahmed
-Ahmet
-Ahnfeltia
-aho
-Ahom
-ahong
-ahorse
-ahorseback
-Ahousaht
-ahoy
-Ahrendahronon
-Ahriman
-Ahrimanian
-ahsan
-Aht
-Ahtena
-ahu
-ahuatle
-ahuehuete
-ahull
-ahum
-ahungered
-ahungry
-ahunt
-ahura
-ahush
-ahwal
-ahypnia
-ai
-Aias
-Aiawong
-aichmophobia
-aid
-aidable
-aidance
-aidant
-aide
-Aidenn
-aider
-Aides
-aidful
-aidless
-aiel
-aigialosaur
-Aigialosauridae
-Aigialosaurus
-aiglet
-aigremore
-aigrette
-aiguille
-aiguillesque
-aiguillette
-aiguilletted
-aikinite
-ail
-ailantery
-ailanthic
-Ailanthus
-ailantine
-ailanto
-aile
-Aileen
-aileron
-ailette
-Ailie
-ailing
-aillt
-ailment
-ailsyte
-Ailuridae
-ailuro
-ailuroid
-Ailuroidea
-Ailuropoda
-Ailuropus
-Ailurus
-ailweed
-aim
-Aimak
-aimara
-Aimee
-aimer
-aimful
-aimfully
-aiming
-aimless
-aimlessly
-aimlessness
-Aimore
-aimworthiness
-ainaleh
-ainhum
-ainoi
-ainsell
-aint
-Ainu
-aion
-aionial
-air
-Aira
-airable
-airampo
-airan
-airbound
-airbrained
-airbrush
-aircraft
-aircraftman
-aircraftsman
-aircraftswoman
-aircraftwoman
-aircrew
-aircrewman
-airdock
-airdrome
-airdrop
-aire
-Airedale
-airedale
-airer
-airfield
-airfoil
-airframe
-airfreight
-airfreighter
-airgraphics
-airhead
-airiferous
-airified
-airily
-airiness
-airing
-airish
-airless
-airlift
-airlike
-airliner
-airmail
-airman
-airmanship
-airmark
-airmarker
-airmonger
-airohydrogen
-airometer
-airpark
-airphobia
-airplane
-airplanist
-airport
-airproof
-airscape
-airscrew
-airship
-airsick
-airsickness
-airstrip
-airt
-airtight
-airtightly
-airtightness
-airward
-airwards
-airway
-airwayman
-airwoman
-airworthiness
-airworthy
-airy
-aischrolatreia
-aiseweed
-aisle
-aisled
-aisleless
-aisling
-Aissaoua
-Aissor
-aisteoir
-Aistopoda
-Aistopodes
-ait
-aitch
-aitchbone
-aitchless
-aitchpiece
-aitesis
-aithochroi
-aition
-aitiotropic
-Aitkenite
-Aitutakian
-aiwan
-Aix
-aizle
-Aizoaceae
-aizoaceous
-Aizoon
-Ajaja
-ajaja
-ajangle
-ajar
-ajari
-Ajatasatru
-ajava
-ajhar
-ajivika
-ajog
-ajoint
-ajowan
-Ajuga
-ajutment
-ak
-Aka
-aka
-Akal
-akala
-Akali
-akalimba
-akamatsu
-Akamnik
-Akan
-Akanekunik
-Akania
-Akaniaceae
-akaroa
-akasa
-Akawai
-akazga
-akazgine
-akcheh
-ake
-akeake
-akebi
-Akebia
-akee
-akeki
-akeley
-akenobeite
-akepiro
-akerite
-akey
-Akha
-Akhissar
-Akhlame
-Akhmimic
-akhoond
-akhrot
-akhyana
-akia
-Akim
-akimbo
-akin
-akindle
-akinesia
-akinesic
-akinesis
-akinete
-akinetic
-Akiskemikinik
-Akiyenik
-Akka
-Akkad
-Akkadian
-Akkadist
-akmudar
-akmuddar
-aknee
-ako
-akoasm
-akoasma
-akoluthia
-akonge
-Akontae
-Akoulalion
-akov
-akpek
-Akra
-akra
-Akrabattine
-akroasis
-akrochordite
-akroterion
-Aktistetae
-Aktistete
-Aktivismus
-Aktivist
-aku
-akuammine
-akule
-akund
-Akwapim
-Al
-al
-ala
-Alabama
-Alabaman
-Alabamian
-alabamide
-alabamine
-alabandite
-alabarch
-alabaster
-alabastos
-alabastrian
-alabastrine
-alabastrites
-alabastron
-alabastrum
-alacha
-alack
-alackaday
-alacreatine
-alacreatinine
-alacrify
-alacritous
-alacrity
-Alactaga
-alada
-Aladdin
-Aladdinize
-Aladfar
-Aladinist
-alaihi
-Alain
-alaite
-Alaki
-Alala
-alala
-alalite
-alalonga
-alalunga
-alalus
-Alamanni
-Alamannian
-Alamannic
-alameda
-alamo
-alamodality
-alamonti
-alamosite
-alamoth
-Alan
-alan
-aland
-Alangiaceae
-alangin
-alangine
-Alangium
-alani
-alanine
-alannah
-Alans
-alantic
-alantin
-alantol
-alantolactone
-alantolic
-alanyl
-alar
-Alarbus
-alares
-Alaria
-Alaric
-alarm
-alarmable
-alarmed
-alarmedly
-alarming
-alarmingly
-alarmism
-alarmist
-Alarodian
-alarum
-alary
-alas
-Alascan
-Alaska
-alaskaite
-Alaskan
-alaskite
-Alastair
-Alaster
-alastrim
-alate
-alated
-alatern
-alaternus
-alation
-Alauda
-Alaudidae
-alaudine
-Alaunian
-Alawi
-Alb
-alb
-alba
-albacore
-albahaca
-Albainn
-Alban
-alban
-Albanenses
-Albanensian
-Albania
-Albanian
-albanite
-Albany
-albarco
-albardine
-albarello
-albarium
-albaspidin
-albata
-Albatros
-albatross
-albe
-albedo
-albedograph
-albee
-albeit
-Alberene
-Albert
-Alberta
-albertin
-Albertina
-Albertine
-Albertinian
-Albertist
-albertite
-Alberto
-albertustaler
-albertype
-albescence
-albescent
-albespine
-albetad
-Albi
-Albian
-albicans
-albicant
-albication
-albiculi
-albification
-albificative
-albiflorous
-albify
-Albigenses
-Albigensian
-Albigensianism
-Albin
-albinal
-albiness
-albinic
-albinism
-albinistic
-albino
-albinoism
-albinotic
-albinuria
-Albion
-Albireo
-albite
-albitic
-albitite
-albitization
-albitophyre
-Albizzia
-albocarbon
-albocinereous
-Albococcus
-albocracy
-Alboin
-albolite
-albolith
-albopannin
-albopruinose
-alboranite
-Albrecht
-Albright
-albronze
-Albruna
-Albuca
-Albuginaceae
-albuginea
-albugineous
-albuginitis
-albugo
-album
-albumean
-albumen
-albumenization
-albumenize
-albumenizer
-albumimeter
-albumin
-albuminate
-albuminaturia
-albuminiferous
-albuminiform
-albuminimeter
-albuminimetry
-albuminiparous
-albuminization
-albuminize
-albuminocholia
-albuminofibrin
-albuminogenous
-albuminoid
-albuminoidal
-albuminolysis
-albuminometer
-albuminometry
-albuminone
-albuminorrhea
-albuminoscope
-albuminose
-albuminosis
-albuminous
-albuminousness
-albuminuria
-albuminuric
-albumoid
-albumoscope
-albumose
-albumosuria
-alburn
-alburnous
-alburnum
-albus
-albutannin
-Albyn
-Alca
-Alcaaba
-Alcae
-Alcaic
-alcaide
-alcalde
-alcaldeship
-alcaldia
-Alcaligenes
-alcalizate
-Alcalzar
-alcamine
-alcanna
-Alcantara
-Alcantarines
-alcarraza
-alcatras
-alcazar
-Alcedines
-Alcedinidae
-Alcedininae
-Alcedo
-alcelaphine
-Alcelaphus
-Alces
-alchemic
-alchemical
-alchemically
-Alchemilla
-alchemist
-alchemistic
-alchemistical
-alchemistry
-alchemize
-alchemy
-alchera
-alcheringa
-alchimy
-alchitran
-alchochoden
-Alchornea
-alchymy
-Alcibiadean
-Alcicornium
-Alcidae
-alcidine
-alcine
-Alcippe
-alclad
-alco
-alcoate
-alcogel
-alcogene
-alcohate
-alcohol
-alcoholate
-alcoholature
-alcoholdom
-alcoholemia
-alcoholic
-alcoholically
-alcoholicity
-alcoholimeter
-alcoholism
-alcoholist
-alcoholizable
-alcoholization
-alcoholize
-alcoholmeter
-alcoholmetric
-alcoholomania
-alcoholometer
-alcoholometric
-alcoholometrical
-alcoholometry
-alcoholophilia
-alcoholuria
-alcoholysis
-alcoholytic
-Alcor
-Alcoran
-Alcoranic
-Alcoranist
-alcornoco
-alcornoque
-alcosol
-Alcotate
-alcove
-alcovinometer
-Alcuinian
-alcyon
-Alcyonacea
-alcyonacean
-Alcyonaria
-alcyonarian
-Alcyone
-Alcyones
-Alcyoniaceae
-alcyonic
-alcyoniform
-Alcyonium
-alcyonoid
-aldamine
-aldane
-aldazin
-aldazine
-aldeament
-Aldebaran
-aldebaranium
-aldehol
-aldehydase
-aldehyde
-aldehydic
-aldehydine
-aldehydrol
-alder
-Alderamin
-alderman
-aldermanate
-aldermancy
-aldermaness
-aldermanic
-aldermanical
-aldermanity
-aldermanlike
-aldermanly
-aldermanry
-aldermanship
-aldern
-Alderney
-alderwoman
-Aldhafara
-Aldhafera
-aldim
-aldime
-aldimine
-Aldine
-aldine
-aldoheptose
-aldohexose
-aldoketene
-aldol
-aldolization
-aldolize
-aldononose
-aldopentose
-aldose
-aldoside
-aldoxime
-Aldrovanda
-Aldus
-ale
-Alea
-aleak
-aleatory
-alebench
-aleberry
-Alebion
-alec
-alecithal
-alecize
-Aleck
-aleconner
-alecost
-Alectoria
-alectoria
-Alectorides
-alectoridine
-alectorioid
-Alectoris
-alectoromachy
-alectoromancy
-Alectoromorphae
-alectoromorphous
-Alectoropodes
-alectoropodous
-Alectrion
-Alectrionidae
-alectryomachy
-alectryomancy
-Alectryon
-alecup
-alee
-alef
-alefnull
-aleft
-alefzero
-alegar
-alehoof
-alehouse
-Alejandro
-alem
-alemana
-Alemanni
-Alemannian
-Alemannic
-Alemannish
-alembic
-alembicate
-alembroth
-Alemite
-alemite
-alemmal
-alemonger
-alen
-Alencon
-Aleochara
-aleph
-alephs
-alephzero
-alepidote
-alepole
-alepot
-Aleppine
-Aleppo
-alerce
-alerse
-alert
-alertly
-alertness
-alesan
-alestake
-aletap
-aletaster
-Alethea
-alethiology
-alethopteis
-alethopteroid
-alethoscope
-aletocyte
-Aletris
-alette
-aleukemic
-Aleurites
-aleuritic
-Aleurobius
-Aleurodes
-Aleurodidae
-aleuromancy
-aleurometer
-aleuronat
-aleurone
-aleuronic
-aleuroscope
-Aleut
-Aleutian
-Aleutic
-aleutite
-alevin
-alewife
-Alex
-Alexander
-alexanders
-Alexandra
-Alexandreid
-Alexandrian
-Alexandrianism
-Alexandrina
-Alexandrine
-alexandrite
-Alexas
-Alexia
-alexia
-Alexian
-alexic
-alexin
-alexinic
-alexipharmacon
-alexipharmacum
-alexipharmic
-alexipharmical
-alexipyretic
-Alexis
-alexiteric
-alexiterical
-Alexius
-aleyard
-Aleyrodes
-aleyrodid
-Aleyrodidae
-Alf
-alf
-alfa
-alfaje
-alfalfa
-alfaqui
-alfaquin
-alfenide
-alfet
-alfilaria
-alfileria
-alfilerilla
-alfilerillo
-alfiona
-Alfirk
-alfonsin
-alfonso
-alforja
-Alfred
-Alfreda
-alfresco
-alfridaric
-alfridary
-Alfur
-Alfurese
-Alfuro
-alga
-algae
-algaecide
-algaeological
-algaeologist
-algaeology
-algaesthesia
-algaesthesis
-algal
-algalia
-Algaroth
-algarroba
-algarrobilla
-algarrobin
-Algarsife
-Algarsyf
-algate
-Algebar
-algebra
-algebraic
-algebraical
-algebraically
-algebraist
-algebraization
-algebraize
-Algedi
-algedo
-algedonic
-algedonics
-algefacient
-Algenib
-Algerian
-Algerine
-algerine
-Algernon
-algesia
-algesic
-algesis
-algesthesis
-algetic
-Algic
-algic
-algid
-algidity
-algidness
-Algieba
-algific
-algin
-alginate
-algine
-alginic
-alginuresis
-algiomuscular
-algist
-algivorous
-algocyan
-algodoncillo
-algodonite
-algoesthesiometer
-algogenic
-algoid
-Algol
-algolagnia
-algolagnic
-algolagnist
-algolagny
-algological
-algologist
-algology
-Algoman
-algometer
-algometric
-algometrical
-algometrically
-algometry
-Algomian
-Algomic
-Algonkian
-Algonquian
-Algonquin
-algophilia
-algophilist
-algophobia
-algor
-Algorab
-Algores
-algorism
-algorismic
-algorist
-algoristic
-algorithm
-algorithmic
-algosis
-algous
-algovite
-algraphic
-algraphy
-alguazil
-algum
-Algy
-Alhagi
-Alhambra
-Alhambraic
-Alhambresque
-Alhena
-alhenna
-alias
-Alibamu
-alibangbang
-alibi
-alibility
-alible
-Alicant
-Alice
-alichel
-Alichino
-Alicia
-Alick
-alicoche
-alictisal
-alicyclic
-Alida
-alidade
-Alids
-alien
-alienability
-alienable
-alienage
-alienate
-alienation
-alienator
-aliency
-alienee
-aliener
-alienicola
-alienigenate
-alienism
-alienist
-alienize
-alienor
-alienship
-aliethmoid
-aliethmoidal
-alif
-aliferous
-aliform
-aligerous
-alight
-align
-aligner
-alignment
-aligreek
-aliipoe
-alike
-alikeness
-alikewise
-Alikuluf
-Alikulufan
-alilonghi
-alima
-aliment
-alimental
-alimentally
-alimentariness
-alimentary
-alimentation
-alimentative
-alimentatively
-alimentativeness
-alimenter
-alimentic
-alimentive
-alimentiveness
-alimentotherapy
-alimentum
-alimonied
-alimony
-alin
-alinasal
-Aline
-alineation
-alintatao
-aliofar
-Alioth
-alipata
-aliped
-aliphatic
-alipterion
-aliptes
-aliptic
-aliquant
-aliquot
-aliseptal
-alish
-alisier
-Alisma
-Alismaceae
-alismaceous
-alismad
-alismal
-Alismales
-Alismataceae
-alismoid
-aliso
-Alison
-alison
-alisonite
-alisp
-alisphenoid
-alisphenoidal
-alist
-Alister
-alit
-alite
-alitrunk
-aliturgic
-aliturgical
-aliunde
-alive
-aliveness
-alivincular
-Alix
-aliyah
-alizarate
-alizari
-alizarin
-aljoba
-alk
-alkahest
-alkahestic
-alkahestica
-alkahestical
-Alkaid
-alkalamide
-alkalemia
-alkalescence
-alkalescency
-alkalescent
-alkali
-alkalic
-alkaliferous
-alkalifiable
-alkalify
-alkaligen
-alkaligenous
-alkalimeter
-alkalimetric
-alkalimetrical
-alkalimetrically
-alkalimetry
-alkaline
-alkalinity
-alkalinization
-alkalinize
-alkalinuria
-alkalizable
-alkalizate
-alkalization
-alkalize
-alkalizer
-alkaloid
-alkaloidal
-alkalometry
-alkalosis
-alkalous
-Alkalurops
-alkamin
-alkamine
-alkane
-alkanet
-Alkanna
-alkannin
-Alkaphrah
-alkapton
-alkaptonuria
-alkaptonuric
-alkargen
-alkarsin
-alkekengi
-alkene
-alkenna
-alkenyl
-alkermes
-Alkes
-alkide
-alkine
-alkool
-Alkoran
-Alkoranic
-alkoxide
-alkoxy
-alkoxyl
-alky
-alkyd
-alkyl
-alkylamine
-alkylate
-alkylation
-alkylene
-alkylic
-alkylidene
-alkylize
-alkylogen
-alkyloxy
-alkyne
-all
-allabuta
-allactite
-allaeanthus
-allagite
-allagophyllous
-allagostemonous
-Allah
-allalinite
-Allamanda
-allamotti
-Allan
-allan
-allanite
-allanitic
-allantiasis
-allantochorion
-allantoic
-allantoid
-allantoidal
-Allantoidea
-allantoidean
-allantoidian
-allantoin
-allantoinase
-allantoinuria
-allantois
-allantoxaidin
-allanturic
-Allasch
-allassotonic
-allative
-allatrate
-allay
-allayer
-allayment
-allbone
-Alle
-allecret
-allectory
-allegate
-allegation
-allegator
-allege
-allegeable
-allegedly
-allegement
-alleger
-Alleghenian
-Allegheny
-allegiance
-allegiancy
-allegiant
-allegoric
-allegorical
-allegorically
-allegoricalness
-allegorism
-allegorist
-allegorister
-allegoristic
-allegorization
-allegorize
-allegorizer
-allegory
-allegretto
-allegro
-allele
-allelic
-allelism
-allelocatalytic
-allelomorph
-allelomorphic
-allelomorphism
-allelotropic
-allelotropism
-allelotropy
-alleluia
-alleluiatic
-allemand
-allemande
-allemontite
-Allen
-allenarly
-allene
-Allentiac
-Allentiacan
-aller
-allergen
-allergenic
-allergia
-allergic
-allergin
-allergist
-allergy
-allerion
-allesthesia
-alleviate
-alleviatingly
-alleviation
-alleviative
-alleviator
-alleviatory
-alley
-alleyed
-alleyite
-alleyway
-allgood
-Allhallow
-Allhallowtide
-allheal
-alliable
-alliably
-Alliaceae
-alliaceous
-alliance
-alliancer
-Alliaria
-allicampane
-allice
-allicholly
-alliciency
-allicient
-Allie
-allied
-Allies
-allies
-alligate
-alligator
-alligatored
-allineate
-allineation
-Allionia
-Allioniaceae
-allision
-alliteral
-alliterate
-alliteration
-alliterational
-alliterationist
-alliterative
-alliteratively
-alliterativeness
-alliterator
-Allium
-allivalite
-allmouth
-allness
-Allobroges
-allocable
-allocaffeine
-allocatable
-allocate
-allocatee
-allocation
-allocator
-allochetia
-allochetite
-allochezia
-allochiral
-allochirally
-allochiria
-allochlorophyll
-allochroic
-allochroite
-allochromatic
-allochroous
-allochthonous
-allocinnamic
-alloclase
-alloclasite
-allocochick
-allocrotonic
-allocryptic
-allocute
-allocution
-allocutive
-allocyanine
-allodelphite
-allodesmism
-alloeosis
-alloeostropha
-alloeotic
-alloerotic
-alloerotism
-allogamous
-allogamy
-allogene
-allogeneity
-allogeneous
-allogenic
-allogenically
-allograph
-alloiogenesis
-alloisomer
-alloisomeric
-alloisomerism
-allokinesis
-allokinetic
-allokurtic
-allomerism
-allomerous
-allometric
-allometry
-allomorph
-allomorphic
-allomorphism
-allomorphite
-allomucic
-allonomous
-allonym
-allonymous
-allopalladium
-allopath
-allopathetic
-allopathetically
-allopathic
-allopathically
-allopathist
-allopathy
-allopatric
-allopatrically
-allopatry
-allopelagic
-allophanamide
-allophanates
-allophane
-allophanic
-allophone
-allophyle
-allophylian
-allophylic
-Allophylus
-allophytoid
-alloplasm
-alloplasmatic
-alloplasmic
-alloplast
-alloplastic
-alloplasty
-alloploidy
-allopolyploid
-allopsychic
-alloquial
-alloquialism
-alloquy
-allorhythmia
-allorrhyhmia
-allorrhythmic
-allosaur
-Allosaurus
-allose
-allosematic
-allosome
-allosyndesis
-allosyndetic
-allot
-allotee
-allotelluric
-allotheism
-Allotheria
-allothigene
-allothigenetic
-allothigenetically
-allothigenic
-allothigenous
-allothimorph
-allothimorphic
-allothogenic
-allothogenous
-allotment
-allotriodontia
-Allotriognathi
-allotriomorphic
-allotriophagia
-allotriophagy
-allotriuria
-allotrope
-allotrophic
-allotropic
-allotropical
-allotropically
-allotropicity
-allotropism
-allotropize
-allotropous
-allotropy
-allotrylic
-allottable
-allottee
-allotter
-allotype
-allotypical
-allover
-allow
-allowable
-allowableness
-allowably
-allowance
-allowedly
-allower
-alloxan
-alloxanate
-alloxanic
-alloxantin
-alloxuraemia
-alloxuremia
-alloxuric
-alloxyproteic
-alloy
-alloyage
-allozooid
-allseed
-allspice
-allthing
-allthorn
-alltud
-allude
-allure
-allurement
-allurer
-alluring
-alluringly
-alluringness
-allusion
-allusive
-allusively
-allusiveness
-alluvia
-alluvial
-alluviate
-alluviation
-alluvion
-alluvious
-alluvium
-allwhere
-allwhither
-allwork
-Allworthy
-Ally
-ally
-allyl
-allylamine
-allylate
-allylation
-allylene
-allylic
-allylthiourea
-Alma
-alma
-Almach
-almaciga
-almacigo
-almadia
-almadie
-almagest
-almagra
-Almain
-Alman
-almanac
-almandine
-almandite
-alme
-almeidina
-almemar
-Almerian
-almeriite
-Almida
-almightily
-almightiness
-almighty
-almique
-Almira
-almirah
-almochoden
-Almohad
-Almohade
-Almohades
-almoign
-Almon
-almon
-almond
-almondy
-almoner
-almonership
-almonry
-Almoravid
-Almoravide
-Almoravides
-almost
-almous
-alms
-almsdeed
-almsfolk
-almsful
-almsgiver
-almsgiving
-almshouse
-almsman
-almswoman
-almucantar
-almuce
-almud
-almude
-almug
-Almuredin
-almuten
-aln
-alnage
-alnager
-alnagership
-Alnaschar
-Alnascharism
-alnein
-alnico
-Alnilam
-alniresinol
-Alnitak
-Alnitham
-alniviridol
-alnoite
-alnuin
-Alnus
-alo
-Aloadae
-Alocasia
-alochia
-alod
-alodial
-alodialism
-alodialist
-alodiality
-alodially
-alodian
-alodiary
-alodification
-alodium
-alody
-aloe
-aloed
-aloelike
-aloemodin
-aloeroot
-aloesol
-aloeswood
-aloetic
-aloetical
-aloewood
-aloft
-alogia
-Alogian
-alogical
-alogically
-alogism
-alogy
-aloid
-aloin
-Alois
-aloisiite
-aloma
-alomancy
-alone
-aloneness
-along
-alongshore
-alongshoreman
-alongside
-alongst
-Alonso
-Alonsoa
-Alonzo
-aloof
-aloofly
-aloofness
-aloose
-alop
-alopecia
-Alopecias
-alopecist
-alopecoid
-Alopecurus
-alopeke
-Alopias
-Alopiidae
-Alosa
-alose
-Alouatta
-alouatte
-aloud
-alow
-alowe
-Aloxite
-Aloysia
-Aloysius
-alp
-alpaca
-alpasotes
-Alpax
-alpeen
-Alpen
-alpenglow
-alpenhorn
-alpenstock
-alpenstocker
-alpestral
-alpestrian
-alpestrine
-alpha
-alphabet
-alphabetarian
-alphabetic
-alphabetical
-alphabetically
-alphabetics
-alphabetiform
-alphabetism
-alphabetist
-alphabetization
-alphabetize
-alphabetizer
-Alphard
-alphatoluic
-Alphean
-Alphecca
-alphenic
-Alpheratz
-alphitomancy
-alphitomorphous
-alphol
-Alphonist
-Alphonse
-Alphonsine
-Alphonsism
-Alphonso
-alphorn
-alphos
-alphosis
-alphyl
-Alpian
-Alpid
-alpieu
-alpigene
-Alpine
-alpine
-alpinely
-alpinery
-alpinesque
-Alpinia
-Alpiniaceae
-Alpinism
-Alpinist
-alpist
-Alpujarra
-alqueire
-alquier
-alquifou
-alraun
-alreadiness
-already
-alright
-alrighty
-alroot
-alruna
-Alsatia
-Alsatian
-alsbachite
-Alshain
-Alsinaceae
-alsinaceous
-Alsine
-also
-alsoon
-Alsophila
-Alstonia
-alstonidine
-alstonine
-alstonite
-Alstroemeria
-alsweill
-alt
-Altaian
-Altaic
-Altaid
-Altair
-altaite
-Altamira
-altar
-altarage
-altared
-altarist
-altarlet
-altarpiece
-altarwise
-altazimuth
-alter
-alterability
-alterable
-alterableness
-alterably
-alterant
-alterate
-alteration
-alterative
-altercate
-altercation
-altercative
-alteregoism
-alteregoistic
-alterer
-alterity
-altern
-alternacy
-alternance
-alternant
-Alternanthera
-Alternaria
-alternariose
-alternate
-alternately
-alternateness
-alternating
-alternatingly
-alternation
-alternationist
-alternative
-alternatively
-alternativeness
-alternativity
-alternator
-alterne
-alternifoliate
-alternipetalous
-alternipinnate
-alternisepalous
-alternize
-alterocentric
-Althaea
-althaein
-Althea
-althea
-althein
-altheine
-althionic
-altho
-althorn
-although
-Altica
-Alticamelus
-altigraph
-altilik
-altiloquence
-altiloquent
-altimeter
-altimetrical
-altimetrically
-altimetry
-altin
-altincar
-Altingiaceae
-altingiaceous
-altininck
-altiplano
-altiscope
-altisonant
-altisonous
-altissimo
-altitude
-altitudinal
-altitudinarian
-alto
-altogether
-altogetherness
-altometer
-altoun
-altrices
-altricial
-altropathy
-altrose
-altruism
-altruist
-altruistic
-altruistically
-altschin
-altun
-Aluco
-Aluconidae
-Aluconinae
-aludel
-Aludra
-alula
-alular
-alulet
-Alulim
-alum
-alumbloom
-Alumel
-alumic
-alumiferous
-alumina
-aluminaphone
-aluminate
-alumine
-aluminic
-aluminide
-aluminiferous
-aluminiform
-aluminish
-aluminite
-aluminium
-aluminize
-aluminoferric
-aluminographic
-aluminography
-aluminose
-aluminosilicate
-aluminosis
-aluminosity
-aluminothermic
-aluminothermics
-aluminothermy
-aluminotype
-aluminous
-aluminum
-aluminyl
-alumish
-alumite
-alumium
-alumna
-alumnae
-alumnal
-alumni
-alumniate
-Alumnol
-alumnus
-alumohydrocalcite
-alumroot
-Alundum
-aluniferous
-alunite
-alunogen
-alupag
-Alur
-alure
-alurgite
-alushtite
-aluta
-alutaceous
-Alvah
-Alvan
-alvar
-alvearium
-alveary
-alveloz
-alveola
-alveolar
-alveolariform
-alveolary
-alveolate
-alveolated
-alveolation
-alveole
-alveolectomy
-alveoli
-alveoliform
-alveolite
-Alveolites
-alveolitis
-alveoloclasia
-alveolocondylean
-alveolodental
-alveololabial
-alveololingual
-alveolonasal
-alveolosubnasal
-alveolotomy
-alveolus
-alveus
-alviducous
-Alvin
-Alvina
-alvine
-Alvissmal
-alvite
-alvus
-alway
-always
-aly
-Alya
-alycompaine
-alymphia
-alymphopotent
-alypin
-alysson
-Alyssum
-alytarch
-Alytes
-am
-ama
-amaas
-Amabel
-amability
-amacratic
-amacrinal
-amacrine
-amadavat
-amadelphous
-Amadi
-Amadis
-amadou
-Amaethon
-Amafingo
-amaga
-amah
-Amahuaca
-amain
-amaister
-amakebe
-Amakosa
-amala
-amalaita
-amalaka
-Amalfian
-Amalfitan
-amalgam
-amalgamable
-amalgamate
-amalgamation
-amalgamationist
-amalgamative
-amalgamatize
-amalgamator
-amalgamist
-amalgamization
-amalgamize
-Amalings
-Amalrician
-amaltas
-amamau
-Amampondo
-Amanda
-amandin
-Amandus
-amang
-amani
-amania
-Amanist
-Amanita
-amanitin
-amanitine
-Amanitopsis
-amanori
-amanous
-amantillo
-amanuenses
-amanuensis
-amapa
-Amapondo
-amar
-Amara
-Amarantaceae
-amarantaceous
-amaranth
-Amaranthaceae
-amaranthaceous
-amaranthine
-amaranthoid
-Amaranthus
-amarantite
-Amarantus
-amarelle
-amarevole
-amargoso
-amarillo
-amarin
-amarine
-amaritude
-amarity
-amaroid
-amaroidal
-Amarth
-amarthritis
-amaryllid
-Amaryllidaceae
-amaryllidaceous
-amaryllideous
-Amaryllis
-amasesis
-amass
-amassable
-amasser
-amassment
-Amasta
-amasthenic
-amastia
-amasty
-Amatembu
-amaterialistic
-amateur
-amateurish
-amateurishly
-amateurishness
-amateurism
-amateurship
-Amati
-amative
-amatively
-amativeness
-amatol
-amatorial
-amatorially
-amatorian
-amatorious
-amatory
-amatrice
-amatungula
-amaurosis
-amaurotic
-amaze
-amazed
-amazedly
-amazedness
-amazeful
-amazement
-amazia
-Amazilia
-amazing
-amazingly
-Amazon
-Amazona
-Amazonian
-Amazonism
-amazonite
-Amazulu
-amba
-ambage
-ambagiosity
-ambagious
-ambagiously
-ambagiousness
-ambagitory
-ambalam
-amban
-ambar
-ambaree
-ambarella
-ambary
-ambash
-ambassade
-Ambassadeur
-ambassador
-ambassadorial
-ambassadorially
-ambassadorship
-ambassadress
-ambassage
-ambassy
-ambatch
-ambatoarinite
-ambay
-ambeer
-amber
-amberfish
-ambergris
-amberiferous
-amberite
-amberoid
-amberous
-ambery
-ambicolorate
-ambicoloration
-ambidexter
-ambidexterity
-ambidextral
-ambidextrous
-ambidextrously
-ambidextrousness
-ambience
-ambiency
-ambiens
-ambient
-ambier
-ambigenous
-ambiguity
-ambiguous
-ambiguously
-ambiguousness
-ambilateral
-ambilateralaterally
-ambilaterality
-ambilevous
-ambilian
-ambilogy
-ambiopia
-ambiparous
-ambisinister
-ambisinistrous
-ambisporangiate
-ambisyllabic
-ambit
-ambital
-ambitendency
-ambition
-ambitionist
-ambitionless
-ambitionlessly
-ambitious
-ambitiously
-ambitiousness
-ambitty
-ambitus
-ambivalence
-ambivalency
-ambivalent
-ambivert
-amble
-ambler
-ambling
-amblingly
-amblotic
-amblyacousia
-amblyaphia
-Amblycephalidae
-Amblycephalus
-amblychromatic
-Amblydactyla
-amblygeusia
-amblygon
-amblygonal
-amblygonite
-amblyocarpous
-Amblyomma
-amblyope
-amblyopia
-amblyopic
-Amblyopsidae
-Amblyopsis
-amblyoscope
-amblypod
-Amblypoda
-amblypodous
-Amblyrhynchus
-amblystegite
-Amblystoma
-ambo
-amboceptoid
-amboceptor
-Ambocoelia
-Amboina
-Amboinese
-ambomalleal
-ambon
-ambonite
-Ambonnay
-ambos
-ambosexous
-ambosexual
-ambrain
-ambrein
-ambrette
-Ambrica
-ambrite
-ambroid
-ambrology
-Ambrose
-ambrose
-ambrosia
-ambrosiac
-Ambrosiaceae
-ambrosiaceous
-ambrosial
-ambrosially
-Ambrosian
-ambrosian
-ambrosiate
-ambrosin
-ambrosine
-Ambrosio
-ambrosterol
-ambrotype
-ambry
-ambsace
-ambulacral
-ambulacriform
-ambulacrum
-ambulance
-ambulancer
-ambulant
-ambulate
-ambulatio
-ambulation
-ambulative
-ambulator
-Ambulatoria
-ambulatorial
-ambulatorium
-ambulatory
-ambuling
-ambulomancy
-amburbial
-ambury
-ambuscade
-ambuscader
-ambush
-ambusher
-ambushment
-Ambystoma
-Ambystomidae
-amchoor
-ame
-amebiform
-Amedeo
-ameed
-ameen
-Ameiuridae
-Ameiurus
-Ameiva
-Amelanchier
-amelcorn
-Amelia
-amelia
-amelification
-ameliorable
-ameliorableness
-ameliorant
-ameliorate
-amelioration
-ameliorativ
-ameliorative
-ameliorator
-amellus
-ameloblast
-ameloblastic
-amelu
-amelus
-Amen
-amen
-amenability
-amenable
-amenableness
-amenably
-amend
-amendable
-amendableness
-amendatory
-amende
-amender
-amendment
-amends
-amene
-amenia
-Amenism
-Amenite
-amenity
-amenorrhea
-amenorrheal
-amenorrheic
-amenorrhoea
-ament
-amentaceous
-amental
-amentia
-Amentiferae
-amentiferous
-amentiform
-amentulum
-amentum
-amerce
-amerceable
-amercement
-amercer
-amerciament
-America
-American
-Americana
-Americanese
-Americanism
-Americanist
-Americanistic
-Americanitis
-Americanization
-Americanize
-Americanizer
-Americanly
-Americanoid
-Americaward
-Americawards
-americium
-Americomania
-Americophobe
-Amerimnon
-Amerind
-Amerindian
-Amerindic
-amerism
-ameristic
-amesite
-Ametabola
-ametabole
-ametabolia
-ametabolian
-ametabolic
-ametabolism
-ametabolous
-ametaboly
-ametallous
-amethodical
-amethodically
-amethyst
-amethystine
-ametoecious
-ametria
-ametrometer
-ametrope
-ametropia
-ametropic
-ametrous
-Amex
-amgarn
-amhar
-amherstite
-amhran
-Ami
-ami
-Amia
-amiability
-amiable
-amiableness
-amiably
-amianth
-amianthiform
-amianthine
-Amianthium
-amianthoid
-amianthoidal
-amianthus
-amic
-amicability
-amicable
-amicableness
-amicably
-amical
-amice
-amiced
-amicicide
-amicrobic
-amicron
-amicronucleate
-amid
-amidase
-amidate
-amidation
-amide
-amidic
-amidid
-amidide
-amidin
-amidine
-Amidism
-Amidist
-amido
-amidoacetal
-amidoacetic
-amidoacetophenone
-amidoaldehyde
-amidoazo
-amidoazobenzene
-amidoazobenzol
-amidocaffeine
-amidocapric
-amidofluorid
-amidofluoride
-amidogen
-amidoguaiacol
-amidohexose
-amidoketone
-amidol
-amidomyelin
-amidon
-amidophenol
-amidophosphoric
-amidoplast
-amidoplastid
-amidopyrine
-amidosuccinamic
-amidosulphonal
-amidothiazole
-amidoxime
-amidoxy
-amidoxyl
-amidrazone
-amidship
-amidships
-amidst
-amidstream
-amidulin
-Amigo
-Amiidae
-amil
-Amiles
-Amiloun
-amimia
-amimide
-amin
-aminate
-amination
-amine
-amini
-aminic
-aminity
-aminization
-aminize
-amino
-aminoacetal
-aminoacetanilide
-aminoacetic
-aminoacetone
-aminoacetophenetidine
-aminoacetophenone
-aminoacidemia
-aminoaciduria
-aminoanthraquinone
-aminoazobenzene
-aminobarbituric
-aminobenzaldehyde
-aminobenzamide
-aminobenzene
-aminobenzoic
-aminocaproic
-aminodiphenyl
-aminoethionic
-aminoformic
-aminogen
-aminoglutaric
-aminoguanidine
-aminoid
-aminoketone
-aminolipin
-aminolysis
-aminolytic
-aminomalonic
-aminomyelin
-aminophenol
-aminoplast
-aminoplastic
-aminopropionic
-aminopurine
-aminopyrine
-aminoquinoline
-aminosis
-aminosuccinamic
-aminosulphonic
-aminothiophen
-aminovaleric
-aminoxylol
-Aminta
-Amintor
-Amioidei
-Amir
-amir
-Amiranha
-amiray
-amirship
-Amish
-Amishgo
-amiss
-amissibility
-amissible
-amissness
-Amita
-Amitabha
-amitosis
-amitotic
-amitotically
-amity
-amixia
-Amizilis
-amla
-amli
-amlikar
-amlong
-Amma
-amma
-amman
-Ammanite
-ammelide
-ammelin
-ammeline
-ammer
-ammeter
-Ammi
-Ammiaceae
-ammiaceous
-ammine
-amminochloride
-amminolysis
-amminolytic
-ammiolite
-ammo
-Ammobium
-ammochaeta
-ammochryse
-ammocoete
-ammocoetes
-ammocoetid
-Ammocoetidae
-ammocoetiform
-ammocoetoid
-Ammodytes
-Ammodytidae
-ammodytoid
-ammonal
-ammonate
-ammonation
-Ammonea
-ammonia
-ammoniacal
-ammoniacum
-ammoniate
-ammoniation
-ammonic
-ammonical
-ammoniemia
-ammonification
-ammonifier
-ammonify
-ammoniojarosite
-ammonion
-ammonionitrate
-Ammonite
-ammonite
-Ammonites
-Ammonitess
-ammonitic
-ammoniticone
-ammonitiferous
-Ammonitish
-ammonitoid
-Ammonitoidea
-ammonium
-ammoniuria
-ammonization
-ammono
-ammonobasic
-ammonocarbonic
-ammonocarbonous
-ammonoid
-Ammonoidea
-ammonoidean
-ammonolysis
-ammonolytic
-ammonolyze
-Ammophila
-ammophilous
-ammoresinol
-ammotherapy
-ammu
-ammunition
-amnemonic
-amnesia
-amnesic
-amnestic
-amnesty
-amnia
-amniac
-amniatic
-amnic
-Amnigenia
-amnioallantoic
-amniocentesis
-amniochorial
-amnioclepsis
-amniomancy
-amnion
-Amnionata
-amnionate
-amnionic
-amniorrhea
-Amniota
-amniote
-amniotic
-amniotitis
-amniotome
-amober
-amobyr
-amoeba
-amoebae
-Amoebaea
-amoebaean
-amoebaeum
-amoebalike
-amoeban
-amoebian
-amoebiasis
-amoebic
-amoebicide
-amoebid
-Amoebida
-Amoebidae
-amoebiform
-Amoebobacter
-Amoebobacterieae
-amoebocyte
-Amoebogeniae
-amoeboid
-amoeboidism
-amoebous
-amoebula
-amok
-amoke
-amole
-amolilla
-amomal
-Amomales
-Amomis
-amomum
-among
-amongst
-amontillado
-amor
-amorado
-amoraic
-amoraim
-amoral
-amoralism
-amoralist
-amorality
-amoralize
-Amores
-amoret
-amoretto
-Amoreuxia
-amorism
-amorist
-amoristic
-Amorite
-Amoritic
-Amoritish
-amorosity
-amoroso
-amorous
-amorously
-amorousness
-Amorpha
-amorphia
-amorphic
-amorphinism
-amorphism
-Amorphophallus
-amorphophyte
-amorphotae
-amorphous
-amorphously
-amorphousness
-amorphus
-amorphy
-amort
-amortisseur
-amortizable
-amortization
-amortize
-amortizement
-Amorua
-Amos
-Amoskeag
-amotion
-amotus
-amount
-amour
-amourette
-amovability
-amovable
-amove
-Amoy
-Amoyan
-Amoyese
-ampalaya
-ampalea
-ampangabeite
-ampasimenite
-Ampelidaceae
-ampelidaceous
-Ampelidae
-ampelideous
-Ampelis
-ampelite
-ampelitic
-ampelographist
-ampelography
-ampelopsidin
-ampelopsin
-Ampelopsis
-Ampelosicyos
-ampelotherapy
-amper
-amperage
-ampere
-amperemeter
-Amperian
-amperometer
-ampersand
-ampery
-amphanthium
-ampheclexis
-ampherotokous
-ampherotoky
-amphetamine
-amphiarthrodial
-amphiarthrosis
-amphiaster
-amphibalus
-Amphibia
-amphibial
-amphibian
-amphibichnite
-amphibiety
-amphibiological
-amphibiology
-amphibion
-amphibiotic
-Amphibiotica
-amphibious
-amphibiously
-amphibiousness
-amphibium
-amphiblastic
-amphiblastula
-amphiblestritis
-Amphibola
-amphibole
-amphibolia
-amphibolic
-amphiboliferous
-amphiboline
-amphibolite
-amphibolitic
-amphibological
-amphibologically
-amphibologism
-amphibology
-amphibolous
-amphiboly
-amphibrach
-amphibrachic
-amphibryous
-Amphicarpa
-Amphicarpaea
-amphicarpic
-amphicarpium
-amphicarpogenous
-amphicarpous
-amphicentric
-amphichroic
-amphichrom
-amphichromatic
-amphichrome
-amphicoelian
-amphicoelous
-Amphicondyla
-amphicondylous
-amphicrania
-amphicreatinine
-amphicribral
-amphictyon
-amphictyonian
-amphictyonic
-amphictyony
-Amphicyon
-Amphicyonidae
-amphicyrtic
-amphicyrtous
-amphicytula
-amphid
-amphide
-amphidesmous
-amphidetic
-amphidiarthrosis
-amphidiploid
-amphidiploidy
-amphidisc
-Amphidiscophora
-amphidiscophoran
-amphierotic
-amphierotism
-Amphigaea
-amphigam
-Amphigamae
-amphigamous
-amphigastrium
-amphigastrula
-amphigean
-amphigen
-amphigene
-amphigenesis
-amphigenetic
-amphigenous
-amphigenously
-amphigonic
-amphigonium
-amphigonous
-amphigony
-amphigoric
-amphigory
-amphigouri
-amphikaryon
-amphilogism
-amphilogy
-amphimacer
-amphimictic
-amphimictical
-amphimictically
-amphimixis
-amphimorula
-Amphinesian
-Amphineura
-amphineurous
-amphinucleus
-Amphion
-Amphionic
-Amphioxi
-Amphioxidae
-Amphioxides
-Amphioxididae
-amphioxus
-amphipeptone
-amphiphloic
-amphiplatyan
-Amphipleura
-amphiploid
-amphiploidy
-amphipneust
-Amphipneusta
-amphipneustic
-Amphipnous
-amphipod
-Amphipoda
-amphipodal
-amphipodan
-amphipodiform
-amphipodous
-amphiprostylar
-amphiprostyle
-amphiprotic
-amphipyrenin
-Amphirhina
-amphirhinal
-amphirhine
-amphisarca
-amphisbaena
-amphisbaenian
-amphisbaenic
-Amphisbaenidae
-amphisbaenoid
-amphisbaenous
-amphiscians
-amphiscii
-Amphisile
-Amphisilidae
-amphispermous
-amphisporangiate
-amphispore
-Amphistoma
-amphistomatic
-amphistome
-amphistomoid
-amphistomous
-Amphistomum
-amphistylar
-amphistylic
-amphistyly
-amphitene
-amphitheater
-amphitheatered
-amphitheatral
-amphitheatric
-amphitheatrical
-amphitheatrically
-amphithecial
-amphithecium
-amphithect
-amphithyron
-amphitokal
-amphitokous
-amphitoky
-amphitriaene
-amphitrichous
-Amphitrite
-amphitropal
-amphitropous
-Amphitruo
-Amphitryon
-Amphiuma
-Amphiumidae
-amphivasal
-amphivorous
-Amphizoidae
-amphodarch
-amphodelite
-amphodiplopia
-amphogenous
-ampholyte
-amphopeptone
-amphophil
-amphophile
-amphophilic
-amphophilous
-amphora
-amphoral
-amphore
-amphorette
-amphoric
-amphoricity
-amphoriloquy
-amphorophony
-amphorous
-amphoteric
-Amphrysian
-ample
-amplectant
-ampleness
-amplexation
-amplexicaudate
-amplexicaul
-amplexicauline
-amplexifoliate
-amplexus
-ampliate
-ampliation
-ampliative
-amplicative
-amplidyne
-amplification
-amplificative
-amplificator
-amplificatory
-amplifier
-amplify
-amplitude
-amply
-ampollosity
-ampongue
-ampoule
-ampul
-ampulla
-ampullaceous
-ampullar
-Ampullaria
-Ampullariidae
-ampullary
-ampullate
-ampullated
-ampulliform
-ampullitis
-ampullula
-amputate
-amputation
-amputational
-amputative
-amputator
-amputee
-ampyx
-amra
-amreeta
-amrita
-Amritsar
-amsath
-amsel
-Amsonia
-Amsterdamer
-amt
-amtman
-Amuchco
-amuck
-Amueixa
-amuguis
-amula
-amulet
-amuletic
-amulla
-amunam
-amurca
-amurcosity
-amurcous
-Amurru
-amusable
-amuse
-amused
-amusedly
-amusee
-amusement
-amuser
-amusette
-Amusgo
-amusia
-amusing
-amusingly
-amusingness
-amusive
-amusively
-amusiveness
-amutter
-amuyon
-amuyong
-amuze
-amvis
-Amy
-amy
-Amyclaean
-Amyclas
-amyelencephalia
-amyelencephalic
-amyelencephalous
-amyelia
-amyelic
-amyelinic
-amyelonic
-amyelous
-amygdal
-amygdala
-Amygdalaceae
-amygdalaceous
-amygdalase
-amygdalate
-amygdalectomy
-amygdalic
-amygdaliferous
-amygdaliform
-amygdalin
-amygdaline
-amygdalinic
-amygdalitis
-amygdaloid
-amygdaloidal
-amygdalolith
-amygdaloncus
-amygdalopathy
-amygdalothripsis
-amygdalotome
-amygdalotomy
-Amygdalus
-amygdonitrile
-amygdophenin
-amygdule
-amyl
-amylaceous
-amylamine
-amylan
-amylase
-amylate
-amylemia
-amylene
-amylenol
-amylic
-amylidene
-amyliferous
-amylin
-amylo
-amylocellulose
-amyloclastic
-amylocoagulase
-amylodextrin
-amylodyspepsia
-amylogen
-amylogenesis
-amylogenic
-amylohydrolysis
-amylohydrolytic
-amyloid
-amyloidal
-amyloidosis
-amyloleucite
-amylolysis
-amylolytic
-amylom
-amylometer
-amylon
-amylopectin
-amylophagia
-amylophosphate
-amylophosphoric
-amyloplast
-amyloplastic
-amyloplastid
-amylopsin
-amylose
-amylosis
-amylosynthesis
-amylum
-amyluria
-Amynodon
-amynodont
-amyosthenia
-amyosthenic
-amyotaxia
-amyotonia
-amyotrophia
-amyotrophic
-amyotrophy
-amyous
-Amyraldism
-Amyraldist
-Amyridaceae
-amyrin
-Amyris
-amyrol
-amyroot
-Amytal
-amyxorrhea
-amyxorrhoea
-an
-Ana
-ana
-Anabaena
-Anabantidae
-Anabaptism
-Anabaptist
-Anabaptistic
-Anabaptistical
-Anabaptistically
-Anabaptistry
-anabaptize
-Anabas
-anabasine
-anabasis
-anabasse
-anabata
-anabathmos
-anabatic
-anaberoga
-anabibazon
-anabiosis
-anabiotic
-Anablepidae
-Anableps
-anabo
-anabohitsite
-anabolic
-anabolin
-anabolism
-anabolite
-anabolize
-anabong
-anabranch
-anabrosis
-anabrotic
-anacahuita
-anacahuite
-anacalypsis
-anacampsis
-anacamptic
-anacamptically
-anacamptics
-anacamptometer
-anacanth
-anacanthine
-Anacanthini
-anacanthous
-anacara
-anacard
-Anacardiaceae
-anacardiaceous
-anacardic
-Anacardium
-anacatadidymus
-anacatharsis
-anacathartic
-anacephalaeosis
-anacephalize
-Anaces
-Anacharis
-anachorism
-anachromasis
-anachronic
-anachronical
-anachronically
-anachronism
-anachronismatical
-anachronist
-anachronistic
-anachronistical
-anachronistically
-anachronize
-anachronous
-anachronously
-anachueta
-anacid
-anacidity
-anaclasis
-anaclastic
-anaclastics
-Anaclete
-anacleticum
-anaclinal
-anaclisis
-anaclitic
-anacoenosis
-anacoluthia
-anacoluthic
-anacoluthically
-anacoluthon
-anaconda
-Anacreon
-Anacreontic
-Anacreontically
-anacrisis
-Anacrogynae
-anacrogynae
-anacrogynous
-anacromyodian
-anacrotic
-anacrotism
-anacrusis
-anacrustic
-anacrustically
-anaculture
-anacusia
-anacusic
-anacusis
-Anacyclus
-anadem
-anadenia
-anadicrotic
-anadicrotism
-anadidymus
-anadiplosis
-anadipsia
-anadipsic
-anadrom
-anadromous
-Anadyomene
-anaematosis
-anaemia
-anaemic
-anaeretic
-anaerobation
-anaerobe
-anaerobia
-anaerobian
-anaerobic
-anaerobically
-anaerobies
-anaerobion
-anaerobiont
-anaerobiosis
-anaerobiotic
-anaerobiotically
-anaerobious
-anaerobism
-anaerobium
-anaerophyte
-anaeroplastic
-anaeroplasty
-anaesthesia
-anaesthesiant
-anaesthetically
-anaesthetizer
-anaetiological
-anagalactic
-Anagallis
-anagap
-anagenesis
-anagenetic
-anagep
-anagignoskomena
-anaglyph
-anaglyphic
-anaglyphical
-anaglyphics
-anaglyphoscope
-anaglyphy
-anaglyptic
-anaglyptical
-anaglyptics
-anaglyptograph
-anaglyptographic
-anaglyptography
-anaglypton
-anagnorisis
-anagnost
-anagoge
-anagogic
-anagogical
-anagogically
-anagogics
-anagogy
-anagram
-anagrammatic
-anagrammatical
-anagrammatically
-anagrammatism
-anagrammatist
-anagrammatize
-anagrams
-anagraph
-anagua
-anagyrin
-anagyrine
-Anagyris
-anahau
-Anahita
-Anaitis
-Anakes
-anakinesis
-anakinetic
-anakinetomer
-anakinetomeric
-anakoluthia
-anakrousis
-anaktoron
-anal
-analabos
-analav
-analcime
-analcimite
-analcite
-analcitite
-analecta
-analectic
-analects
-analemma
-analemmatic
-analepsis
-analepsy
-analeptic
-analeptical
-analgen
-analgesia
-analgesic
-Analgesidae
-analgesis
-analgesist
-analgetic
-analgia
-analgic
-analgize
-analkalinity
-anallagmatic
-anallantoic
-Anallantoidea
-anallantoidean
-anallergic
-anally
-analogic
-analogical
-analogically
-analogicalness
-analogion
-analogism
-analogist
-analogistic
-analogize
-analogon
-analogous
-analogously
-analogousness
-analogue
-analogy
-analphabet
-analphabete
-analphabetic
-analphabetical
-analphabetism
-analysability
-analysable
-analysand
-analysation
-analyse
-analyser
-analyses
-analysis
-analyst
-analytic
-analytical
-analytically
-analytics
-analyzability
-analyzable
-analyzation
-analyze
-analyzer
-Anam
-anam
-anama
-anamesite
-anametadromous
-Anamirta
-anamirtin
-Anamite
-anamite
-anammonid
-anammonide
-anamnesis
-anamnestic
-anamnestically
-Anamnia
-Anamniata
-Anamnionata
-anamnionic
-Anamniota
-anamniote
-anamniotic
-anamorphic
-anamorphism
-anamorphoscope
-anamorphose
-anamorphosis
-anamorphote
-anamorphous
-anan
-anana
-ananaplas
-ananaples
-ananas
-ananda
-anandrarious
-anandria
-anandrous
-ananepionic
-anangioid
-anangular
-Ananias
-Ananism
-Ananite
-anankastic
-Anansi
-Ananta
-anantherate
-anantherous
-ananthous
-ananym
-anapaest
-anapaestic
-anapaestical
-anapaestically
-anapaganize
-anapaite
-anapanapa
-anapeiratic
-anaphalantiasis
-Anaphalis
-anaphase
-Anaphe
-anaphia
-anaphora
-anaphoral
-anaphoria
-anaphoric
-anaphorical
-anaphrodisia
-anaphrodisiac
-anaphroditic
-anaphroditous
-anaphylactic
-anaphylactin
-anaphylactogen
-anaphylactogenic
-anaphylactoid
-anaphylatoxin
-anaphylaxis
-anaphyte
-anaplasia
-anaplasis
-anaplasm
-Anaplasma
-anaplasmosis
-anaplastic
-anaplasty
-anaplerosis
-anaplerotic
-anapnea
-anapneic
-anapnoeic
-anapnograph
-anapnoic
-anapnometer
-anapodeictic
-anapophysial
-anapophysis
-anapsid
-Anapsida
-anapsidan
-Anapterygota
-anapterygote
-anapterygotism
-anapterygotous
-Anaptomorphidae
-Anaptomorphus
-anaptotic
-anaptychus
-anaptyctic
-anaptyctical
-anaptyxis
-anaqua
-anarcestean
-Anarcestes
-anarch
-anarchal
-anarchial
-anarchic
-anarchical
-anarchically
-anarchism
-anarchist
-anarchistic
-anarchize
-anarchoindividualist
-anarchosocialist
-anarchosyndicalism
-anarchosyndicalist
-anarchy
-anarcotin
-anareta
-anaretic
-anaretical
-anargyros
-anarthria
-anarthric
-anarthropod
-Anarthropoda
-anarthropodous
-anarthrosis
-anarthrous
-anarthrously
-anarthrousness
-anartismos
-anarya
-Anaryan
-Anas
-Anasa
-anasarca
-anasarcous
-Anasazi
-anaschistic
-anaseismic
-Anasitch
-anaspadias
-anaspalin
-Anaspida
-Anaspidacea
-Anaspides
-anastalsis
-anastaltic
-Anastasia
-Anastasian
-anastasimon
-anastasimos
-anastasis
-Anastasius
-anastate
-anastatic
-Anastatica
-Anastatus
-anastigmat
-anastigmatic
-anastomose
-anastomosis
-anastomotic
-Anastomus
-anastrophe
-Anastrophia
-Anat
-anatase
-anatexis
-anathema
-anathematic
-anathematical
-anathematically
-anathematism
-anathematization
-anathematize
-anathematizer
-anatheme
-anathemize
-Anatherum
-Anatidae
-anatifa
-Anatifae
-anatifer
-anatiferous
-Anatinacea
-Anatinae
-anatine
-anatocism
-Anatole
-Anatolian
-Anatolic
-Anatoly
-anatomic
-anatomical
-anatomically
-anatomicobiological
-anatomicochirurgical
-anatomicomedical
-anatomicopathologic
-anatomicopathological
-anatomicophysiologic
-anatomicophysiological
-anatomicosurgical
-anatomism
-anatomist
-anatomization
-anatomize
-anatomizer
-anatomopathologic
-anatomopathological
-anatomy
-anatopism
-anatox
-anatoxin
-anatreptic
-anatripsis
-anatripsology
-anatriptic
-anatron
-anatropal
-anatropia
-anatropous
-Anatum
-anaudia
-anaunter
-anaunters
-Anax
-Anaxagorean
-Anaxagorize
-anaxial
-Anaximandrian
-anaxon
-anaxone
-Anaxonia
-anay
-anazoturia
-anba
-anbury
-Ancerata
-ancestor
-ancestorial
-ancestorially
-ancestral
-ancestrally
-ancestress
-ancestrial
-ancestrian
-ancestry
-Ancha
-Anchat
-Anchietea
-anchietin
-anchietine
-anchieutectic
-anchimonomineral
-Anchisaurus
-Anchises
-Anchistea
-Anchistopoda
-anchithere
-anchitherioid
-anchor
-anchorable
-anchorage
-anchorate
-anchored
-anchorer
-anchoress
-anchoret
-anchoretic
-anchoretical
-anchoretish
-anchoretism
-anchorhold
-anchorite
-anchoritess
-anchoritic
-anchoritical
-anchoritish
-anchoritism
-anchorless
-anchorlike
-anchorwise
-anchovy
-Anchtherium
-Anchusa
-anchusin
-anchusine
-anchylose
-anchylosis
-ancience
-anciency
-ancient
-ancientism
-anciently
-ancientness
-ancientry
-ancienty
-ancile
-ancilla
-ancillary
-ancipital
-ancipitous
-Ancistrocladaceae
-ancistrocladaceous
-Ancistrocladus
-ancistroid
-ancon
-Ancona
-anconad
-anconagra
-anconal
-ancone
-anconeal
-anconeous
-anconeus
-anconitis
-anconoid
-ancony
-ancora
-ancoral
-Ancyloceras
-Ancylocladus
-Ancylodactyla
-ancylopod
-Ancylopoda
-Ancylostoma
-ancylostome
-ancylostomiasis
-Ancylostomum
-Ancylus
-Ancyrean
-Ancyrene
-and
-anda
-andabatarian
-Andalusian
-andalusite
-Andaman
-Andamanese
-andante
-andantino
-Andaqui
-Andaquian
-Andarko
-Andaste
-Ande
-Andean
-Anderson
-Andesic
-andesine
-andesinite
-andesite
-andesitic
-Andevo
-Andhra
-Andi
-Andian
-Andine
-Andira
-andirin
-andirine
-andiroba
-andiron
-Andoke
-andorite
-Andorobo
-Andorran
-andouillet
-andradite
-andranatomy
-andrarchy
-Andre
-Andrea
-Andreaea
-Andreaeaceae
-Andreaeales
-Andreas
-Andrena
-andrenid
-Andrenidae
-Andrew
-andrewsite
-Andria
-Andriana
-Andrias
-andric
-Andries
-androcentric
-androcephalous
-androcephalum
-androclinium
-Androclus
-androconium
-androcracy
-androcratic
-androcyte
-androdioecious
-androdioecism
-androdynamous
-androecial
-androecium
-androgametangium
-androgametophore
-androgen
-androgenesis
-androgenetic
-androgenic
-androgenous
-androginous
-androgone
-androgonia
-androgonial
-androgonidium
-androgonium
-Andrographis
-andrographolide
-androgynal
-androgynary
-androgyne
-androgyneity
-androgynia
-androgynism
-androgynous
-androgynus
-androgyny
-android
-androidal
-androkinin
-androl
-androlepsia
-androlepsy
-Andromache
-andromania
-Andromaque
-Andromeda
-Andromede
-andromedotoxin
-andromonoecious
-andromonoecism
-andromorphous
-andron
-Andronicus
-andronitis
-andropetalar
-andropetalous
-androphagous
-androphobia
-androphonomania
-androphore
-androphorous
-androphorum
-androphyll
-Andropogon
-Androsace
-Androscoggin
-androseme
-androsin
-androsphinx
-androsporangium
-androspore
-androsterone
-androtauric
-androtomy
-Andy
-anear
-aneath
-anecdota
-anecdotage
-anecdotal
-anecdotalism
-anecdote
-anecdotic
-anecdotical
-anecdotically
-anecdotist
-anele
-anelectric
-anelectrode
-anelectrotonic
-anelectrotonus
-anelytrous
-anematosis
-Anemia
-anemia
-anemic
-anemobiagraph
-anemochord
-anemoclastic
-anemogram
-anemograph
-anemographic
-anemographically
-anemography
-anemological
-anemology
-anemometer
-anemometric
-anemometrical
-anemometrically
-anemometrograph
-anemometrographic
-anemometrographically
-anemometry
-anemonal
-anemone
-Anemonella
-anemonin
-anemonol
-anemony
-anemopathy
-anemophile
-anemophilous
-anemophily
-Anemopsis
-anemoscope
-anemosis
-anemotaxis
-anemotropic
-anemotropism
-anencephalia
-anencephalic
-anencephalotrophia
-anencephalous
-anencephalus
-anencephaly
-anend
-anenergia
-anenst
-anent
-anenterous
-anepia
-anepigraphic
-anepigraphous
-anepiploic
-anepithymia
-anerethisia
-aneretic
-anergia
-anergic
-anergy
-anerly
-aneroid
-aneroidograph
-anerotic
-anerythroplasia
-anerythroplastic
-anes
-anesis
-anesthesia
-anesthesiant
-anesthesimeter
-anesthesiologist
-anesthesiology
-anesthesis
-anesthetic
-anesthetically
-anesthetist
-anesthetization
-anesthetize
-anesthetizer
-anesthyl
-anethole
-Anethum
-anetiological
-aneuploid
-aneuploidy
-aneuria
-aneuric
-aneurilemmic
-aneurin
-aneurism
-aneurismally
-aneurysm
-aneurysmal
-aneurysmally
-aneurysmatic
-anew
-Anezeh
-anfractuose
-anfractuosity
-anfractuous
-anfractuousness
-anfracture
-Angami
-Angara
-angaralite
-angaria
-angary
-Angdistis
-angekok
-angel
-Angela
-angelate
-angeldom
-Angeleno
-angelet
-angeleyes
-angelfish
-angelhood
-angelic
-Angelica
-angelica
-Angelical
-angelical
-angelically
-angelicalness
-Angelican
-angelicic
-angelicize
-angelico
-angelin
-Angelina
-angeline
-angelique
-angelize
-angellike
-Angelo
-angelocracy
-angelographer
-angelolater
-angelolatry
-angelologic
-angelological
-angelology
-angelomachy
-Angelonia
-angelophany
-angelot
-angelship
-Angelus
-anger
-angerly
-Angerona
-Angeronalia
-Angers
-Angetenar
-Angevin
-angeyok
-angiasthenia
-angico
-Angie
-angiectasis
-angiectopia
-angiemphraxis
-angiitis
-angild
-angili
-angina
-anginal
-anginiform
-anginoid
-anginose
-anginous
-angioasthenia
-angioataxia
-angioblast
-angioblastic
-angiocarditis
-angiocarp
-angiocarpian
-angiocarpic
-angiocarpous
-angiocavernous
-angiocholecystitis
-angiocholitis
-angiochondroma
-angioclast
-angiocyst
-angiodermatitis
-angiodiascopy
-angioelephantiasis
-angiofibroma
-angiogenesis
-angiogenic
-angiogeny
-angioglioma
-angiograph
-angiography
-angiohyalinosis
-angiohydrotomy
-angiohypertonia
-angiohypotonia
-angioid
-angiokeratoma
-angiokinesis
-angiokinetic
-angioleucitis
-angiolipoma
-angiolith
-angiology
-angiolymphitis
-angiolymphoma
-angioma
-angiomalacia
-angiomatosis
-angiomatous
-angiomegaly
-angiometer
-angiomyocardiac
-angiomyoma
-angiomyosarcoma
-angioneoplasm
-angioneurosis
-angioneurotic
-angionoma
-angionosis
-angioparalysis
-angioparalytic
-angioparesis
-angiopathy
-angiophorous
-angioplany
-angioplasty
-angioplerosis
-angiopoietic
-angiopressure
-angiorrhagia
-angiorrhaphy
-angiorrhea
-angiorrhexis
-angiosarcoma
-angiosclerosis
-angiosclerotic
-angioscope
-angiosis
-angiospasm
-angiospastic
-angiosperm
-Angiospermae
-angiospermal
-angiospermatous
-angiospermic
-angiospermous
-angiosporous
-angiostegnosis
-angiostenosis
-angiosteosis
-angiostomize
-angiostomy
-angiostrophy
-angiosymphysis
-angiotasis
-angiotelectasia
-angiothlipsis
-angiotome
-angiotomy
-angiotonic
-angiotonin
-angiotribe
-angiotripsy
-angiotrophic
-Angka
-anglaise
-angle
-angleberry
-angled
-anglehook
-anglepod
-angler
-Angles
-anglesite
-anglesmith
-angletouch
-angletwitch
-anglewing
-anglewise
-angleworm
-Anglian
-Anglic
-Anglican
-Anglicanism
-Anglicanize
-Anglicanly
-Anglicanum
-Anglicism
-Anglicist
-Anglicization
-anglicization
-Anglicize
-anglicize
-Anglification
-Anglify
-anglimaniac
-angling
-Anglish
-Anglist
-Anglistics
-Anglogaea
-Anglogaean
-angloid
-Angloman
-Anglomane
-Anglomania
-Anglomaniac
-Anglophile
-Anglophobe
-Anglophobia
-Anglophobiac
-Anglophobic
-Anglophobist
-ango
-Angola
-angolar
-Angolese
-angor
-Angora
-angostura
-Angouleme
-Angoumian
-Angraecum
-angrily
-angriness
-angrite
-angry
-angst
-angster
-Angstrom
-angstrom
-anguid
-Anguidae
-anguiform
-Anguilla
-Anguillaria
-Anguillidae
-anguilliform
-anguilloid
-Anguillula
-Anguillulidae
-Anguimorpha
-anguine
-anguineal
-anguineous
-Anguinidae
-anguiped
-Anguis
-anguis
-anguish
-anguished
-anguishful
-anguishous
-anguishously
-angula
-angular
-angulare
-angularity
-angularization
-angularize
-angularly
-angularness
-angulate
-angulated
-angulately
-angulateness
-angulation
-angulatogibbous
-angulatosinuous
-anguliferous
-angulinerved
-Anguloa
-angulodentate
-angulometer
-angulosity
-angulosplenial
-angulous
-anguria
-Angus
-angusticlave
-angustifoliate
-angustifolious
-angustirostrate
-angustisellate
-angustiseptal
-angustiseptate
-angwantibo
-anhalamine
-anhaline
-anhalonine
-Anhalonium
-anhalouidine
-anhang
-Anhanga
-anharmonic
-anhedonia
-anhedral
-anhedron
-anhelation
-anhelous
-anhematosis
-anhemolytic
-anhidrosis
-anhidrotic
-anhima
-Anhimae
-Anhimidae
-anhinga
-anhistic
-anhistous
-anhungered
-anhungry
-anhydrate
-anhydration
-anhydremia
-anhydremic
-anhydric
-anhydride
-anhydridization
-anhydridize
-anhydrite
-anhydrization
-anhydrize
-anhydroglocose
-anhydromyelia
-anhydrous
-anhydroxime
-anhysteretic
-ani
-Aniba
-Anice
-aniconic
-aniconism
-anicular
-anicut
-anidian
-anidiomatic
-anidiomatical
-anidrosis
-Aniellidae
-aniente
-anigh
-anight
-anights
-anil
-anilao
-anilau
-anile
-anileness
-anilic
-anilid
-anilide
-anilidic
-anilidoxime
-aniline
-anilinism
-anilinophile
-anilinophilous
-anility
-anilla
-anilopyrin
-anilopyrine
-anima
-animability
-animable
-animableness
-animadversion
-animadversional
-animadversive
-animadversiveness
-animadvert
-animadverter
-animal
-animalcula
-animalculae
-animalcular
-animalcule
-animalculine
-animalculism
-animalculist
-animalculous
-animalculum
-animalhood
-Animalia
-animalian
-animalic
-animalier
-animalish
-animalism
-animalist
-animalistic
-animality
-Animalivora
-animalivore
-animalivorous
-animalization
-animalize
-animally
-animastic
-animastical
-animate
-animated
-animatedly
-animately
-animateness
-animater
-animating
-animatingly
-animation
-animatism
-animatistic
-animative
-animatograph
-animator
-anime
-animi
-Animikean
-animikite
-animism
-animist
-animistic
-animize
-animosity
-animotheism
-animous
-animus
-anion
-anionic
-aniridia
-anis
-anisal
-anisalcohol
-anisaldehyde
-anisaldoxime
-anisamide
-anisandrous
-anisanilide
-anisate
-anischuria
-anise
-aniseed
-aniseikonia
-aniseikonic
-aniselike
-aniseroot
-anisette
-anisic
-anisidin
-anisidine
-anisil
-anisilic
-anisobranchiate
-anisocarpic
-anisocarpous
-anisocercal
-anisochromatic
-anisochromia
-anisocoria
-anisocotyledonous
-anisocotyly
-anisocratic
-anisocycle
-anisocytosis
-anisodactyl
-Anisodactyla
-Anisodactyli
-anisodactylic
-anisodactylous
-anisodont
-anisogamete
-anisogamous
-anisogamy
-anisogenous
-anisogeny
-anisognathism
-anisognathous
-anisogynous
-anisoin
-anisole
-anisoleucocytosis
-Anisomeles
-anisomelia
-anisomelus
-anisomeric
-anisomerous
-anisometric
-anisometrope
-anisometropia
-anisometropic
-anisomyarian
-Anisomyodi
-anisomyodian
-anisomyodous
-anisopetalous
-anisophyllous
-anisophylly
-anisopia
-anisopleural
-anisopleurous
-anisopod
-Anisopoda
-anisopodal
-anisopodous
-anisopogonous
-Anisoptera
-anisopterous
-anisosepalous
-anisospore
-anisostaminous
-anisostemonous
-anisosthenic
-anisostichous
-Anisostichus
-anisostomous
-anisotonic
-anisotropal
-anisotrope
-anisotropic
-anisotropical
-anisotropically
-anisotropism
-anisotropous
-anisotropy
-anisoyl
-anisum
-anisuria
-anisyl
-anisylidene
-Anita
-anither
-anitrogenous
-anjan
-Anjou
-ankaramite
-ankaratrite
-ankee
-anker
-ankerite
-ankh
-ankle
-anklebone
-anklejack
-anklet
-anklong
-Ankoli
-Ankou
-ankus
-ankusha
-ankylenteron
-ankyloblepharon
-ankylocheilia
-ankylodactylia
-ankylodontia
-ankyloglossia
-ankylomele
-ankylomerism
-ankylophobia
-ankylopodia
-ankylopoietic
-ankyloproctia
-ankylorrhinia
-Ankylosaurus
-ankylose
-ankylosis
-ankylostoma
-ankylotia
-ankylotic
-ankylotome
-ankylotomy
-ankylurethria
-ankyroid
-anlace
-anlaut
-Ann
-ann
-Anna
-anna
-Annabel
-annabergite
-annal
-annale
-annaline
-annalism
-annalist
-annalistic
-annalize
-annals
-Annam
-Annamese
-Annamite
-Annamitic
-Annapurna
-Annard
-annat
-annates
-annatto
-Anne
-anneal
-annealer
-annectent
-annection
-annelid
-Annelida
-annelidan
-Annelides
-annelidian
-annelidous
-annelism
-Annellata
-anneloid
-annerodite
-Anneslia
-annet
-Annette
-annex
-annexa
-annexable
-annexal
-annexation
-annexational
-annexationist
-annexer
-annexion
-annexionist
-annexitis
-annexive
-annexment
-annexure
-annidalin
-Annie
-Anniellidae
-annihilability
-annihilable
-annihilate
-annihilation
-annihilationism
-annihilationist
-annihilative
-annihilator
-annihilatory
-Annist
-annite
-anniversarily
-anniversariness
-anniversary
-anniverse
-annodated
-Annona
-annona
-Annonaceae
-annonaceous
-annotate
-annotater
-annotation
-annotative
-annotator
-annotatory
-annotine
-annotinous
-announce
-announceable
-announcement
-announcer
-annoy
-annoyance
-annoyancer
-annoyer
-annoyful
-annoying
-annoyingly
-annoyingness
-annoyment
-annual
-annualist
-annualize
-annually
-annuary
-annueler
-annuent
-annuitant
-annuity
-annul
-annular
-Annularia
-annularity
-annularly
-annulary
-Annulata
-annulate
-annulated
-annulation
-annulet
-annulettee
-annulism
-annullable
-annullate
-annullation
-annuller
-annulment
-annuloid
-Annuloida
-Annulosa
-annulosan
-annulose
-annulus
-annunciable
-annunciate
-annunciation
-annunciative
-annunciator
-annunciatory
-anoa
-Anobiidae
-anocarpous
-anociassociation
-anococcygeal
-anodal
-anode
-anodendron
-anodic
-anodically
-anodize
-Anodon
-Anodonta
-anodontia
-anodos
-anodyne
-anodynia
-anodynic
-anodynous
-anoegenetic
-anoesia
-anoesis
-anoestrous
-anoestrum
-anoestrus
-anoetic
-anogenic
-anogenital
-Anogra
-anoil
-anoine
-anoint
-anointer
-anointment
-anole
-anoli
-anolian
-Anolis
-Anolympiad
-anolyte
-Anomala
-anomaliflorous
-anomaliped
-anomalism
-anomalist
-anomalistic
-anomalistical
-anomalistically
-anomalocephalus
-anomaloflorous
-Anomalogonatae
-anomalogonatous
-Anomalon
-anomalonomy
-Anomalopteryx
-anomaloscope
-anomalotrophy
-anomalous
-anomalously
-anomalousness
-anomalure
-Anomaluridae
-Anomalurus
-anomaly
-Anomatheca
-Anomia
-Anomiacea
-Anomiidae
-anomite
-anomocarpous
-anomodont
-Anomodontia
-Anomoean
-Anomoeanism
-anomophyllous
-anomorhomboid
-anomorhomboidal
-anomphalous
-Anomura
-anomural
-anomuran
-anomurous
-anomy
-anon
-anonang
-anoncillo
-anonol
-anonychia
-anonym
-anonyma
-anonymity
-anonymous
-anonymously
-anonymousness
-anonymuncule
-anoopsia
-anoperineal
-anophele
-Anopheles
-Anophelinae
-anopheline
-anophoria
-anophthalmia
-anophthalmos
-Anophthalmus
-anophyte
-anopia
-anopisthographic
-Anopla
-Anoplanthus
-anoplocephalic
-anoplonemertean
-Anoplonemertini
-anoplothere
-Anoplotheriidae
-anoplotherioid
-Anoplotherium
-anoplotheroid
-Anoplura
-anopluriform
-anopsia
-anopubic
-anorak
-anorchia
-anorchism
-anorchous
-anorchus
-anorectal
-anorectic
-anorectous
-anorexia
-anorexy
-anorgana
-anorganic
-anorganism
-anorganology
-anormal
-anormality
-anorogenic
-anorth
-anorthic
-anorthite
-anorthitic
-anorthitite
-anorthoclase
-anorthographic
-anorthographical
-anorthographically
-anorthography
-anorthophyre
-anorthopia
-anorthoscope
-anorthose
-anorthosite
-anoscope
-anoscopy
-Anosia
-anosmatic
-anosmia
-anosmic
-anosphrasia
-anosphresia
-anospinal
-anostosis
-Anostraca
-anoterite
-another
-anotherkins
-anotia
-anotropia
-anotta
-anotto
-anotus
-anounou
-Anous
-anovesical
-anoxemia
-anoxemic
-anoxia
-anoxic
-anoxidative
-anoxybiosis
-anoxybiotic
-anoxyscope
-ansa
-ansar
-ansarian
-Ansarie
-ansate
-ansation
-Anseis
-Ansel
-Anselm
-Anselmian
-Anser
-anserated
-Anseres
-Anseriformes
-Anserinae
-anserine
-anserous
-anspessade
-ansu
-ansulate
-answer
-answerability
-answerable
-answerableness
-answerably
-answerer
-answeringly
-answerless
-answerlessly
-ant
-Anta
-anta
-antacid
-antacrid
-antadiform
-Antaean
-Antaeus
-antagonism
-antagonist
-antagonistic
-antagonistical
-antagonistically
-antagonization
-antagonize
-antagonizer
-antagony
-Antaimerina
-Antaios
-Antaiva
-antal
-antalgesic
-antalgol
-antalkali
-antalkaline
-antambulacral
-antanacathartic
-antanaclasis
-Antanandro
-antanemic
-antapex
-antaphrodisiac
-antaphroditic
-antapocha
-antapodosis
-antapology
-antapoplectic
-Antar
-Antara
-antarchism
-antarchist
-antarchistic
-antarchistical
-antarchy
-Antarctalia
-Antarctalian
-antarctic
-Antarctica
-antarctica
-antarctical
-antarctically
-Antarctogaea
-Antarctogaean
-Antares
-antarthritic
-antasphyctic
-antasthenic
-antasthmatic
-antatrophic
-antdom
-ante
-anteact
-anteal
-anteambulate
-anteambulation
-anteater
-antebaptismal
-antebath
-antebrachial
-antebrachium
-antebridal
-antecabinet
-antecaecal
-antecardium
-antecavern
-antecedaneous
-antecedaneously
-antecede
-antecedence
-antecedency
-antecedent
-antecedental
-antecedently
-antecessor
-antechamber
-antechapel
-Antechinomys
-antechoir
-antechurch
-anteclassical
-antecloset
-antecolic
-antecommunion
-anteconsonantal
-antecornu
-antecourt
-antecoxal
-antecubital
-antecurvature
-antedate
-antedawn
-antediluvial
-antediluvially
-antediluvian
-Antedon
-antedonin
-antedorsal
-antefebrile
-antefix
-antefixal
-anteflected
-anteflexed
-anteflexion
-antefurca
-antefurcal
-antefuture
-antegarden
-antegrade
-antehall
-antehistoric
-antehuman
-antehypophysis
-anteinitial
-antejentacular
-antejudiciary
-antejuramentum
-antelabium
-antelegal
-antelocation
-antelope
-antelopian
-antelucan
-antelude
-anteluminary
-antemarginal
-antemarital
-antemedial
-antemeridian
-antemetallic
-antemetic
-antemillennial
-antemingent
-antemortal
-antemundane
-antemural
-antenarial
-antenatal
-antenatalitial
-antenati
-antenave
-antenna
-antennae
-antennal
-Antennaria
-antennariid
-Antennariidae
-Antennarius
-antennary
-Antennata
-antennate
-antenniferous
-antenniform
-antennula
-antennular
-antennulary
-antennule
-antenodal
-antenoon
-Antenor
-antenumber
-anteoccupation
-anteocular
-anteopercle
-anteoperculum
-anteorbital
-antepagmenta
-antepagments
-antepalatal
-antepaschal
-antepast
-antepatriarchal
-antepectoral
-antepectus
-antependium
-antepenult
-antepenultima
-antepenultimate
-antephialtic
-antepileptic
-antepirrhema
-anteporch
-anteportico
-anteposition
-anteposthumous
-anteprandial
-antepredicament
-antepredicamental
-antepreterit
-antepretonic
-anteprohibition
-anteprostate
-anteprostatic
-antepyretic
-antequalm
-antereformation
-antereformational
-anteresurrection
-anterethic
-anterevolutional
-anterevolutionary
-anteriad
-anterior
-anteriority
-anteriorly
-anteriorness
-anteroclusion
-anterodorsal
-anteroexternal
-anterofixation
-anteroflexion
-anterofrontal
-anterograde
-anteroinferior
-anterointerior
-anterointernal
-anterolateral
-anterolaterally
-anteromedial
-anteromedian
-anteroom
-anteroparietal
-anteroposterior
-anteroposteriorly
-anteropygal
-anterospinal
-anterosuperior
-anteroventral
-anteroventrally
-antes
-antescript
-antesignanus
-antespring
-antestature
-antesternal
-antesternum
-antesunrise
-antesuperior
-antetemple
-antetype
-Anteva
-antevenient
-anteversion
-antevert
-antevocalic
-antewar
-anthecological
-anthecologist
-anthecology
-Antheia
-anthela
-anthelion
-anthelmintic
-anthem
-anthema
-anthemene
-anthemia
-Anthemideae
-anthemion
-Anthemis
-anthemwise
-anthemy
-anther
-Antheraea
-antheral
-Anthericum
-antherid
-antheridial
-antheridiophore
-antheridium
-antheriferous
-antheriform
-antherless
-antherogenous
-antheroid
-antherozoid
-antherozoidal
-antherozooid
-antherozooidal
-anthesis
-Anthesteria
-Anthesteriac
-anthesterin
-Anthesterion
-anthesterol
-antheximeter
-Anthicidae
-Anthidium
-anthill
-Anthinae
-anthine
-anthobiology
-anthocarp
-anthocarpous
-anthocephalous
-Anthoceros
-Anthocerotaceae
-Anthocerotales
-anthocerote
-anthochlor
-anthochlorine
-anthoclinium
-anthocyan
-anthocyanidin
-anthocyanin
-anthodium
-anthoecological
-anthoecologist
-anthoecology
-anthogenesis
-anthogenetic
-anthogenous
-anthography
-anthoid
-anthokyan
-antholite
-anthological
-anthologically
-anthologion
-anthologist
-anthologize
-anthology
-antholysis
-Antholyza
-anthomania
-anthomaniac
-Anthomedusae
-anthomedusan
-Anthomyia
-anthomyiid
-Anthomyiidae
-Anthonin
-Anthonomus
-Anthony
-anthood
-anthophagous
-Anthophila
-anthophile
-anthophilian
-anthophilous
-anthophobia
-Anthophora
-anthophore
-Anthophoridae
-anthophorous
-anthophyllite
-anthophyllitic
-Anthophyta
-anthophyte
-anthorine
-anthosiderite
-Anthospermum
-anthotaxis
-anthotaxy
-anthotropic
-anthotropism
-anthoxanthin
-Anthoxanthum
-Anthozoa
-anthozoan
-anthozoic
-anthozooid
-anthozoon
-anthracemia
-anthracene
-anthraceniferous
-anthrachrysone
-anthracia
-anthracic
-anthraciferous
-anthracin
-anthracite
-anthracitic
-anthracitiferous
-anthracitious
-anthracitism
-anthracitization
-anthracnose
-anthracnosis
-anthracocide
-anthracoid
-anthracolithic
-anthracomancy
-Anthracomarti
-anthracomartian
-Anthracomartus
-anthracometer
-anthracometric
-anthraconecrosis
-anthraconite
-Anthracosaurus
-anthracosis
-anthracothere
-Anthracotheriidae
-Anthracotherium
-anthracotic
-anthracyl
-anthradiol
-anthradiquinone
-anthraflavic
-anthragallol
-anthrahydroquinone
-anthramine
-anthranil
-anthranilate
-anthranilic
-anthranol
-anthranone
-anthranoyl
-anthranyl
-anthraphenone
-anthrapurpurin
-anthrapyridine
-anthraquinol
-anthraquinone
-anthraquinonyl
-anthrarufin
-anthratetrol
-anthrathiophene
-anthratriol
-anthrax
-anthraxolite
-anthraxylon
-Anthrenus
-anthribid
-Anthribidae
-Anthriscus
-anthrohopobiological
-anthroic
-anthrol
-anthrone
-anthropic
-anthropical
-Anthropidae
-anthropobiologist
-anthropobiology
-anthropocentric
-anthropocentrism
-anthropoclimatologist
-anthropoclimatology
-anthropocosmic
-anthropodeoxycholic
-Anthropodus
-anthropogenesis
-anthropogenetic
-anthropogenic
-anthropogenist
-anthropogenous
-anthropogeny
-anthropogeographer
-anthropogeographical
-anthropogeography
-anthropoglot
-anthropogony
-anthropography
-anthropoid
-anthropoidal
-Anthropoidea
-anthropoidean
-anthropolater
-anthropolatric
-anthropolatry
-anthropolite
-anthropolithic
-anthropolitic
-anthropological
-anthropologically
-anthropologist
-anthropology
-anthropomancy
-anthropomantic
-anthropomantist
-anthropometer
-anthropometric
-anthropometrical
-anthropometrically
-anthropometrist
-anthropometry
-anthropomorph
-Anthropomorpha
-anthropomorphic
-anthropomorphical
-anthropomorphically
-Anthropomorphidae
-anthropomorphism
-anthropomorphist
-anthropomorphite
-anthropomorphitic
-anthropomorphitical
-anthropomorphitism
-anthropomorphization
-anthropomorphize
-anthropomorphological
-anthropomorphologically
-anthropomorphology
-anthropomorphosis
-anthropomorphotheist
-anthropomorphous
-anthropomorphously
-anthroponomical
-anthroponomics
-anthroponomist
-anthroponomy
-anthropopathia
-anthropopathic
-anthropopathically
-anthropopathism
-anthropopathite
-anthropopathy
-anthropophagi
-anthropophagic
-anthropophagical
-anthropophaginian
-anthropophagism
-anthropophagist
-anthropophagistic
-anthropophagite
-anthropophagize
-anthropophagous
-anthropophagously
-anthropophagy
-anthropophilous
-anthropophobia
-anthropophuism
-anthropophuistic
-anthropophysiography
-anthropophysite
-Anthropopithecus
-anthropopsychic
-anthropopsychism
-Anthropos
-anthroposcopy
-anthroposociologist
-anthroposociology
-anthroposomatology
-anthroposophical
-anthroposophist
-anthroposophy
-anthropoteleoclogy
-anthropoteleological
-anthropotheism
-anthropotomical
-anthropotomist
-anthropotomy
-anthropotoxin
-Anthropozoic
-anthropurgic
-anthroropolith
-anthroxan
-anthroxanic
-anthryl
-anthrylene
-Anthurium
-Anthus
-Anthyllis
-anthypophora
-anthypophoretic
-Anti
-anti
-antiabolitionist
-antiabrasion
-antiabrin
-antiabsolutist
-antiacid
-antiadiaphorist
-antiaditis
-antiadministration
-antiae
-antiaesthetic
-antiager
-antiagglutinating
-antiagglutinin
-antiaggression
-antiaggressionist
-antiaggressive
-antiaircraft
-antialbumid
-antialbumin
-antialbumose
-antialcoholic
-antialcoholism
-antialcoholist
-antialdoxime
-antialexin
-antialien
-antiamboceptor
-antiamusement
-antiamylase
-antianaphylactogen
-antianaphylaxis
-antianarchic
-antianarchist
-antiangular
-antiannexation
-antiannexationist
-antianopheline
-antianthrax
-antianthropocentric
-antianthropomorphism
-antiantibody
-antiantidote
-antiantienzyme
-antiantitoxin
-antiaphrodisiac
-antiaphthic
-antiapoplectic
-antiapostle
-antiaquatic
-antiar
-Antiarcha
-Antiarchi
-antiarin
-Antiaris
-antiaristocrat
-antiarthritic
-antiascetic
-antiasthmatic
-antiastronomical
-antiatheism
-antiatheist
-antiatonement
-antiattrition
-antiautolysin
-antibacchic
-antibacchius
-antibacterial
-antibacteriolytic
-antiballooner
-antibalm
-antibank
-antibasilican
-antibenzaldoxime
-antiberiberin
-antibibliolatry
-antibigotry
-antibilious
-antibiont
-antibiosis
-antibiotic
-antibishop
-antiblastic
-antiblennorrhagic
-antiblock
-antiblue
-antibody
-antiboxing
-antibreakage
-antibridal
-antibromic
-antibubonic
-Antiburgher
-antic
-anticachectic
-antical
-anticalcimine
-anticalculous
-anticalligraphic
-anticancer
-anticapital
-anticapitalism
-anticapitalist
-anticardiac
-anticardium
-anticarious
-anticarnivorous
-anticaste
-anticatalase
-anticatalyst
-anticatalytic
-anticatalyzer
-anticatarrhal
-anticathexis
-anticathode
-anticaustic
-anticensorship
-anticentralization
-anticephalalgic
-anticeremonial
-anticeremonialism
-anticeremonialist
-anticheater
-antichlor
-antichlorine
-antichloristic
-antichlorotic
-anticholagogue
-anticholinergic
-antichoromanic
-antichorus
-antichresis
-antichretic
-antichrist
-antichristian
-antichristianity
-antichristianly
-antichrome
-antichronical
-antichronically
-antichthon
-antichurch
-antichurchian
-antichymosin
-anticipant
-anticipatable
-anticipate
-anticipation
-anticipative
-anticipatively
-anticipator
-anticipatorily
-anticipatory
-anticivic
-anticivism
-anticize
-anticker
-anticlactic
-anticlassical
-anticlassicist
-Anticlea
-anticlergy
-anticlerical
-anticlericalism
-anticlimactic
-anticlimax
-anticlinal
-anticline
-anticlinorium
-anticlockwise
-anticlogging
-anticly
-anticnemion
-anticness
-anticoagulant
-anticoagulating
-anticoagulative
-anticoagulin
-anticogitative
-anticolic
-anticombination
-anticomet
-anticomment
-anticommercial
-anticommunist
-anticomplement
-anticomplementary
-anticomplex
-anticonceptionist
-anticonductor
-anticonfederationist
-anticonformist
-anticonscience
-anticonscription
-anticonscriptive
-anticonstitutional
-anticonstitutionalist
-anticonstitutionally
-anticontagion
-anticontagionist
-anticontagious
-anticonventional
-anticonventionalism
-anticonvulsive
-anticor
-anticorn
-anticorrosion
-anticorrosive
-anticorset
-anticosine
-anticosmetic
-anticouncil
-anticourt
-anticourtier
-anticous
-anticovenanter
-anticovenanting
-anticreation
-anticreative
-anticreator
-anticreep
-anticreeper
-anticreeping
-anticrepuscular
-anticrepuscule
-anticrisis
-anticritic
-anticritique
-anticrochet
-anticrotalic
-anticryptic
-anticum
-anticyclic
-anticyclone
-anticyclonic
-anticyclonically
-anticynic
-anticytolysin
-anticytotoxin
-antidactyl
-antidancing
-antidecalogue
-antideflation
-antidemocrat
-antidemocratic
-antidemocratical
-antidemoniac
-antidetonant
-antidetonating
-antidiabetic
-antidiastase
-Antidicomarian
-Antidicomarianite
-antidictionary
-antidiffuser
-antidinic
-antidiphtheria
-antidiphtheric
-antidiphtherin
-antidiphtheritic
-antidisciplinarian
-antidivine
-antidivorce
-antidogmatic
-antidomestic
-antidominican
-Antidorcas
-antidoron
-antidotal
-antidotally
-antidotary
-antidote
-antidotical
-antidotically
-antidotism
-antidraft
-antidrag
-antidromal
-antidromic
-antidromically
-antidromous
-antidromy
-antidrug
-antiduke
-antidumping
-antidynamic
-antidynastic
-antidyscratic
-antidysenteric
-antidysuric
-antiecclesiastic
-antiecclesiastical
-antiedemic
-antieducation
-antieducational
-antiegotism
-antiejaculation
-antiemetic
-antiemperor
-antiempirical
-antiendotoxin
-antiendowment
-antienergistic
-antienthusiastic
-antienzyme
-antienzymic
-antiepicenter
-antiepileptic
-antiepiscopal
-antiepiscopist
-antiepithelial
-antierosion
-antierysipelas
-Antietam
-antiethnic
-antieugenic
-antievangelical
-antievolution
-antievolutionist
-antiexpansionist
-antiexporting
-antiextreme
-antieyestrain
-antiface
-antifaction
-antifame
-antifanatic
-antifat
-antifatigue
-antifebrile
-antifederal
-antifederalism
-antifederalist
-antifelon
-antifelony
-antifeminism
-antifeminist
-antiferment
-antifermentative
-antifertilizer
-antifeudal
-antifeudalism
-antifibrinolysin
-antifibrinolysis
-antifideism
-antifire
-antiflash
-antiflattering
-antiflatulent
-antiflux
-antifoam
-antifoaming
-antifogmatic
-antiforeign
-antiforeignism
-antiformin
-antifouler
-antifouling
-antifowl
-antifreeze
-antifreezing
-antifriction
-antifrictional
-antifrost
-antifundamentalist
-antifungin
-antigalactagogue
-antigalactic
-antigambling
-antiganting
-antigen
-antigenic
-antigenicity
-antighostism
-antigigmanic
-antiglare
-antiglyoxalase
-antigod
-Antigone
-antigonococcic
-Antigonon
-antigonorrheic
-Antigonus
-antigorite
-antigovernment
-antigraft
-antigrammatical
-antigraph
-antigravitate
-antigravitational
-antigropelos
-antigrowth
-Antiguan
-antiguggler
-antigyrous
-antihalation
-antiharmonist
-antihectic
-antihelix
-antihelminthic
-antihemagglutinin
-antihemisphere
-antihemoglobin
-antihemolysin
-antihemolytic
-antihemorrhagic
-antihemorrheidal
-antihero
-antiheroic
-antiheroism
-antiheterolysin
-antihidrotic
-antihierarchical
-antihierarchist
-antihistamine
-antihistaminic
-antiholiday
-antihormone
-antihuff
-antihum
-antihuman
-antihumbuggist
-antihunting
-antihydrophobic
-antihydropic
-antihydropin
-antihygienic
-antihylist
-antihypnotic
-antihypochondriac
-antihypophora
-antihysteric
-Antikamnia
-antikathode
-antikenotoxin
-antiketogen
-antiketogenesis
-antiketogenic
-antikinase
-antiking
-antiknock
-antilabor
-antilaborist
-antilacrosse
-antilacrosser
-antilactase
-antilapsarian
-antileague
-antilegalist
-antilegomena
-antilemic
-antilens
-antilepsis
-antileptic
-antilethargic
-antileveling
-Antilia
-antiliberal
-antilibration
-antilift
-antilipase
-antilipoid
-antiliquor
-antilithic
-antiliturgical
-antiliturgist
-Antillean
-antilobium
-Antilocapra
-Antilocapridae
-Antilochus
-antiloemic
-antilogarithm
-antilogic
-antilogical
-antilogism
-antilogous
-antilogy
-antiloimic
-Antilope
-Antilopinae
-antilottery
-antiluetin
-antilynching
-antilysin
-antilysis
-antilyssic
-antilytic
-antimacassar
-antimachine
-antimachinery
-antimagistratical
-antimalaria
-antimalarial
-antimallein
-antimaniac
-antimaniacal
-Antimarian
-antimark
-antimartyr
-antimask
-antimasker
-Antimason
-Antimasonic
-Antimasonry
-antimasque
-antimasquer
-antimasquerade
-antimaterialist
-antimaterialistic
-antimatrimonial
-antimatrimonialist
-antimedical
-antimedieval
-antimelancholic
-antimellin
-antimeningococcic
-antimension
-antimensium
-antimephitic
-antimere
-antimerger
-antimeric
-Antimerina
-antimerism
-antimeristem
-antimetabole
-antimetathesis
-antimetathetic
-antimeter
-antimethod
-antimetrical
-antimetropia
-antimetropic
-antimiasmatic
-antimicrobic
-antimilitarism
-antimilitarist
-antimilitary
-antiministerial
-antiministerialist
-antiminsion
-antimiscegenation
-antimission
-antimissionary
-antimissioner
-antimixing
-antimnemonic
-antimodel
-antimodern
-antimonarchial
-antimonarchic
-antimonarchical
-antimonarchically
-antimonarchicalness
-antimonarchist
-antimonate
-antimonial
-antimoniate
-antimoniated
-antimonic
-antimonid
-antimonide
-antimoniferous
-antimonious
-antimonite
-antimonium
-antimoniuret
-antimoniureted
-antimoniuretted
-antimonopolist
-antimonopoly
-antimonsoon
-antimony
-antimonyl
-antimoral
-antimoralism
-antimoralist
-antimosquito
-antimusical
-antimycotic
-antimythic
-antimythical
-antinarcotic
-antinarrative
-antinational
-antinationalist
-antinationalistic
-antinatural
-antinegro
-antinegroism
-antineologian
-antinephritic
-antinepotic
-antineuralgic
-antineuritic
-antineurotoxin
-antineutral
-antinial
-antinicotine
-antinion
-antinode
-antinoise
-antinome
-antinomian
-antinomianism
-antinomic
-antinomical
-antinomist
-antinomy
-antinormal
-antinosarian
-Antinous
-Antiochene
-Antiochian
-Antiochianism
-antiodont
-antiodontalgic
-Antiope
-antiopelmous
-antiophthalmic
-antiopium
-antiopiumist
-antiopiumite
-antioptimist
-antioptionist
-antiorgastic
-antiorthodox
-antioxidant
-antioxidase
-antioxidizer
-antioxidizing
-antioxygen
-antioxygenation
-antioxygenator
-antioxygenic
-antipacifist
-antipapacy
-antipapal
-antipapalist
-antipapism
-antipapist
-antipapistical
-antiparabema
-antiparagraphe
-antiparagraphic
-antiparallel
-antiparallelogram
-antiparalytic
-antiparalytical
-antiparasitic
-antiparastatitis
-antiparliament
-antiparliamental
-antiparliamentarist
-antiparliamentary
-antipart
-Antipasch
-Antipascha
-antipass
-antipastic
-Antipatharia
-antipatharian
-antipathetic
-antipathetical
-antipathetically
-antipatheticalness
-antipathic
-Antipathida
-antipathist
-antipathize
-antipathogen
-antipathy
-antipatriarch
-antipatriarchal
-antipatriot
-antipatriotic
-antipatriotism
-antipedal
-Antipedobaptism
-Antipedobaptist
-antipeduncular
-antipellagric
-antipepsin
-antipeptone
-antiperiodic
-antiperistalsis
-antiperistaltic
-antiperistasis
-antiperistatic
-antiperistatical
-antiperistatically
-antipersonnel
-antiperthite
-antipestilential
-antipetalous
-antipewism
-antiphagocytic
-antipharisaic
-antipharmic
-antiphase
-antiphilosophic
-antiphilosophical
-antiphlogistian
-antiphlogistic
-antiphon
-antiphonal
-antiphonally
-antiphonary
-antiphoner
-antiphonetic
-antiphonic
-antiphonical
-antiphonically
-antiphonon
-antiphony
-antiphrasis
-antiphrastic
-antiphrastical
-antiphrastically
-antiphthisic
-antiphthisical
-antiphylloxeric
-antiphysic
-antiphysical
-antiphysician
-antiplague
-antiplanet
-antiplastic
-antiplatelet
-antipleion
-antiplenist
-antiplethoric
-antipleuritic
-antiplurality
-antipneumococcic
-antipodagric
-antipodagron
-antipodal
-antipode
-antipodean
-antipodes
-antipodic
-antipodism
-antipodist
-antipoetic
-antipoints
-antipolar
-antipole
-antipolemist
-antipolitical
-antipollution
-antipolo
-antipolygamy
-antipolyneuritic
-antipool
-antipooling
-antipope
-antipopery
-antipopular
-antipopulationist
-antiportable
-antiposition
-antipoverty
-antipragmatic
-antipragmatist
-antiprecipitin
-antipredeterminant
-antiprelate
-antiprelatic
-antiprelatist
-antipreparedness
-antiprestidigitation
-antipriest
-antipriestcraft
-antiprime
-antiprimer
-antipriming
-antiprinciple
-antiprism
-antiproductionist
-antiprofiteering
-antiprohibition
-antiprohibitionist
-antiprojectivity
-antiprophet
-antiprostate
-antiprostatic
-antiprotease
-antiproteolysis
-antiprotozoal
-antiprudential
-antipruritic
-antipsalmist
-antipsoric
-antiptosis
-antipudic
-antipuritan
-antiputrefaction
-antiputrefactive
-antiputrescent
-antiputrid
-antipyic
-antipyonin
-antipyresis
-antipyretic
-Antipyrine
-antipyrotic
-antipyryl
-antiqua
-antiquarian
-antiquarianism
-antiquarianize
-antiquarianly
-antiquarism
-antiquartan
-antiquary
-antiquate
-antiquated
-antiquatedness
-antiquation
-antique
-antiquely
-antiqueness
-antiquer
-antiquing
-antiquist
-antiquitarian
-antiquity
-antirabic
-antirabies
-antiracemate
-antiracer
-antirachitic
-antirachitically
-antiracing
-antiradiating
-antiradiation
-antiradical
-antirailwayist
-antirational
-antirationalism
-antirationalist
-antirationalistic
-antirattler
-antireactive
-antirealism
-antirealistic
-antirebating
-antirecruiting
-antired
-antireducer
-antireform
-antireformer
-antireforming
-antireformist
-antireligion
-antireligious
-antiremonstrant
-antirennet
-antirennin
-antirent
-antirenter
-antirentism
-antirepublican
-antireservationist
-antirestoration
-antireticular
-antirevisionist
-antirevolutionary
-antirevolutionist
-antirheumatic
-antiricin
-antirickets
-antiritual
-antiritualistic
-antirobin
-antiromance
-antiromantic
-antiromanticism
-antiroyal
-antiroyalist
-Antirrhinum
-antirumor
-antirun
-antirust
-antisacerdotal
-antisacerdotalist
-antisaloon
-antisalooner
-antisavage
-antiscabious
-antiscale
-antischolastic
-antischool
-antiscians
-antiscientific
-antiscion
-antiscolic
-antiscorbutic
-antiscorbutical
-antiscrofulous
-antiseismic
-antiselene
-antisensitizer
-antisensuous
-antisensuousness
-antisepalous
-antisepsin
-antisepsis
-antiseptic
-antiseptical
-antiseptically
-antisepticism
-antisepticist
-antisepticize
-antiseption
-antiseptize
-antiserum
-antishipping
-Antisi
-antisialagogue
-antisialic
-antisiccative
-antisideric
-antisilverite
-antisimoniacal
-antisine
-antisiphon
-antisiphonal
-antiskeptical
-antiskid
-antiskidding
-antislavery
-antislaveryism
-antislickens
-antislip
-antismoking
-antisnapper
-antisocial
-antisocialist
-antisocialistic
-antisocialistically
-antisociality
-antisolar
-antisophist
-antisoporific
-antispace
-antispadix
-antispasis
-antispasmodic
-antispast
-antispastic
-antispectroscopic
-antispermotoxin
-antispiritual
-antispirochetic
-antisplasher
-antisplenetic
-antisplitting
-antispreader
-antispreading
-antisquama
-antisquatting
-antistadholder
-antistadholderian
-antistalling
-antistaphylococcic
-antistate
-antistatism
-antistatist
-antisteapsin
-antisterility
-antistes
-antistimulant
-antistock
-antistreptococcal
-antistreptococcic
-antistreptococcin
-antistreptococcus
-antistrike
-antistrophal
-antistrophe
-antistrophic
-antistrophically
-antistrophize
-antistrophon
-antistrumatic
-antistrumous
-antisubmarine
-antisubstance
-antisudoral
-antisudorific
-antisuffrage
-antisuffragist
-antisun
-antisupernaturalism
-antisupernaturalist
-antisurplician
-antisymmetrical
-antisyndicalism
-antisyndicalist
-antisynod
-antisyphilitic
-antitabetic
-antitabloid
-antitangent
-antitank
-antitarnish
-antitartaric
-antitax
-antiteetotalism
-antitegula
-antitemperance
-antitetanic
-antitetanolysin
-antithalian
-antitheft
-antitheism
-antitheist
-antitheistic
-antitheistical
-antitheistically
-antithenar
-antitheologian
-antitheological
-antithermic
-antithermin
-antitheses
-antithesis
-antithesism
-antithesize
-antithet
-antithetic
-antithetical
-antithetically
-antithetics
-antithrombic
-antithrombin
-antitintinnabularian
-antitobacco
-antitobacconal
-antitobacconist
-antitonic
-antitorpedo
-antitoxic
-antitoxin
-antitrade
-antitrades
-antitraditional
-antitragal
-antitragic
-antitragicus
-antitragus
-antitrismus
-antitrochanter
-antitropal
-antitrope
-antitropic
-antitropical
-antitropous
-antitropy
-antitrust
-antitrypsin
-antitryptic
-antituberculin
-antituberculosis
-antituberculotic
-antituberculous
-antiturnpikeism
-antitwilight
-antitypal
-antitype
-antityphoid
-antitypic
-antitypical
-antitypically
-antitypy
-antityrosinase
-antiunion
-antiunionist
-antiuratic
-antiurease
-antiusurious
-antiutilitarian
-antivaccination
-antivaccinationist
-antivaccinator
-antivaccinist
-antivariolous
-antivenefic
-antivenereal
-antivenin
-antivenom
-antivenomous
-antivermicular
-antivibrating
-antivibrator
-antivibratory
-antivice
-antiviral
-antivirus
-antivitalist
-antivitalistic
-antivitamin
-antivivisection
-antivivisectionist
-antivolition
-antiwar
-antiwarlike
-antiwaste
-antiwedge
-antiweed
-antiwit
-antixerophthalmic
-antizealot
-antizymic
-antizymotic
-antler
-antlered
-antlerite
-antlerless
-antlia
-antliate
-Antlid
-antling
-antluetic
-antodontalgic
-antoeci
-antoecian
-antoecians
-Antoinette
-Anton
-Antonella
-Antonia
-Antonina
-antoninianus
-Antonio
-antonomasia
-antonomastic
-antonomastical
-antonomastically
-antonomasy
-Antony
-antonym
-antonymous
-antonymy
-antorbital
-antproof
-antra
-antral
-antralgia
-antre
-antrectomy
-antrin
-antritis
-antrocele
-antronasal
-antrophore
-antrophose
-antrorse
-antrorsely
-antroscope
-antroscopy
-Antrostomus
-antrotome
-antrotomy
-antrotympanic
-antrotympanitis
-antrum
-antrustion
-antrustionship
-antship
-Antu
-antu
-Antum
-Antwerp
-antwise
-anubing
-Anubis
-anucleate
-anukabiet
-Anukit
-anuloma
-Anura
-anuran
-anuresis
-anuretic
-anuria
-anuric
-anurous
-anury
-anus
-anusim
-anusvara
-anutraminosa
-anvasser
-anvil
-anvilsmith
-anxietude
-anxiety
-anxious
-anxiously
-anxiousness
-any
-anybody
-Anychia
-anyhow
-anyone
-anyplace
-Anystidae
-anything
-anythingarian
-anythingarianism
-anyway
-anyways
-anywhen
-anywhere
-anywhereness
-anywheres
-anywhy
-anywise
-anywither
-Anzac
-Anzanian
-Ao
-aogiri
-Aoife
-aonach
-Aonian
-aorist
-aoristic
-aoristically
-aorta
-aortal
-aortarctia
-aortectasia
-aortectasis
-aortic
-aorticorenal
-aortism
-aortitis
-aortoclasia
-aortoclasis
-aortolith
-aortomalacia
-aortomalaxis
-aortopathy
-aortoptosia
-aortoptosis
-aortorrhaphy
-aortosclerosis
-aortostenosis
-aortotomy
-aosmic
-Aotea
-Aotearoa
-Aotes
-Aotus
-aoudad
-Aouellimiden
-Aoul
-apa
-apabhramsa
-apace
-Apache
-apache
-Apachette
-apachism
-apachite
-apadana
-apagoge
-apagogic
-apagogical
-apagogically
-apaid
-Apalachee
-apalit
-Apama
-apandry
-Apanteles
-Apantesis
-apanthropia
-apanthropy
-apar
-Aparai
-aparaphysate
-aparejo
-Apargia
-aparithmesis
-apart
-apartheid
-aparthrosis
-apartment
-apartmental
-apartness
-apasote
-apastron
-apatan
-Apatela
-apatetic
-apathetic
-apathetical
-apathetically
-apathic
-apathism
-apathist
-apathistical
-apathogenic
-Apathus
-apathy
-apatite
-Apatornis
-Apatosaurus
-Apaturia
-Apayao
-ape
-apeak
-apectomy
-apedom
-apehood
-apeiron
-apelet
-apelike
-apeling
-apellous
-Apemantus
-Apennine
-apenteric
-apepsia
-apepsinia
-apepsy
-apeptic
-aper
-aperch
-aperea
-aperient
-aperiodic
-aperiodically
-aperiodicity
-aperispermic
-aperistalsis
-aperitive
-apert
-apertly
-apertness
-apertometer
-apertural
-aperture
-apertured
-Aperu
-apery
-apesthesia
-apesthetic
-apesthetize
-Apetalae
-apetaloid
-apetalose
-apetalous
-apetalousness
-apetaly
-apex
-apexed
-aphaeresis
-aphaeretic
-aphagia
-aphakia
-aphakial
-aphakic
-Aphanapteryx
-Aphanes
-aphanesite
-Aphaniptera
-aphanipterous
-aphanite
-aphanitic
-aphanitism
-Aphanomyces
-aphanophyre
-aphanozygous
-Apharsathacites
-aphasia
-aphasiac
-aphasic
-Aphelandra
-Aphelenchus
-aphelian
-Aphelinus
-aphelion
-apheliotropic
-apheliotropically
-apheliotropism
-Aphelops
-aphemia
-aphemic
-aphengescope
-aphengoscope
-aphenoscope
-apheresis
-apheretic
-aphesis
-apheta
-aphetic
-aphetically
-aphetism
-aphetize
-aphicidal
-aphicide
-aphid
-aphides
-aphidian
-aphidicide
-aphidicolous
-aphidid
-Aphididae
-Aphidiinae
-aphidious
-Aphidius
-aphidivorous
-aphidolysin
-aphidophagous
-aphidozer
-aphilanthropy
-Aphis
-aphlaston
-aphlebia
-aphlogistic
-aphnology
-aphodal
-aphodian
-Aphodius
-aphodus
-aphonia
-aphonic
-aphonous
-aphony
-aphoria
-aphorism
-aphorismatic
-aphorismer
-aphorismic
-aphorismical
-aphorismos
-aphorist
-aphoristic
-aphoristically
-aphorize
-aphorizer
-Aphoruridae
-aphotic
-aphototactic
-aphototaxis
-aphototropic
-aphototropism
-Aphra
-aphrasia
-aphrite
-aphrizite
-aphrodisia
-aphrodisiac
-aphrodisiacal
-aphrodisian
-Aphrodision
-Aphrodistic
-Aphrodite
-Aphroditeum
-aphroditic
-Aphroditidae
-aphroditous
-aphrolite
-aphronia
-aphrosiderite
-aphtha
-Aphthartodocetae
-Aphthartodocetic
-Aphthartodocetism
-aphthic
-aphthitalite
-aphthoid
-aphthong
-aphthongal
-aphthongia
-aphthous
-aphydrotropic
-aphydrotropism
-aphyllose
-aphyllous
-aphylly
-aphyric
-Apiaca
-Apiaceae
-apiaceous
-Apiales
-apian
-apiarian
-apiarist
-apiary
-apiator
-apicad
-apical
-apically
-apices
-Apician
-apicifixed
-apicilar
-apicillary
-apicitis
-apickaback
-apicoectomy
-apicolysis
-apicula
-apicular
-apiculate
-apiculated
-apiculation
-apicultural
-apiculture
-apiculturist
-apiculus
-Apidae
-apiece
-apieces
-apigenin
-apii
-apiin
-apikoros
-apilary
-Apina
-Apinae
-Apinage
-apinch
-aping
-apinoid
-apio
-Apioceridae
-apioid
-apioidal
-apiole
-apiolin
-apiologist
-apiology
-apionol
-Apios
-apiose
-Apiosoma
-apiphobia
-Apis
-apish
-apishamore
-apishly
-apishness
-apism
-apitong
-apitpat
-Apium
-apivorous
-apjohnite
-aplacental
-Aplacentalia
-Aplacentaria
-Aplacophora
-aplacophoran
-aplacophorous
-aplanat
-aplanatic
-aplanatically
-aplanatism
-Aplanobacter
-aplanogamete
-aplanospore
-aplasia
-aplastic
-Aplectrum
-aplenty
-aplite
-aplitic
-aplobasalt
-aplodiorite
-Aplodontia
-Aplodontiidae
-aplomb
-aplome
-Aplopappus
-aploperistomatous
-aplostemonous
-aplotaxene
-aplotomy
-Apluda
-aplustre
-Aplysia
-apnea
-apneal
-apneic
-apneumatic
-apneumatosis
-Apneumona
-apneumonous
-apneustic
-apoaconitine
-apoatropine
-apobiotic
-apoblast
-apocaffeine
-apocalypse
-apocalypst
-apocalypt
-apocalyptic
-apocalyptical
-apocalyptically
-apocalypticism
-apocalyptism
-apocalyptist
-apocamphoric
-apocarp
-apocarpous
-apocarpy
-apocatastasis
-apocatastatic
-apocatharsis
-apocenter
-apocentric
-apocentricity
-apocha
-apocholic
-apochromat
-apochromatic
-apochromatism
-apocinchonine
-apocodeine
-apocopate
-apocopated
-apocopation
-apocope
-apocopic
-apocrenic
-apocrisiary
-Apocrita
-apocrustic
-apocryph
-Apocrypha
-apocryphal
-apocryphalist
-apocryphally
-apocryphalness
-apocryphate
-apocryphon
-Apocynaceae
-apocynaceous
-apocyneous
-Apocynum
-apod
-Apoda
-apodal
-apodan
-apodeipnon
-apodeixis
-apodema
-apodemal
-apodematal
-apodeme
-Apodes
-Apodia
-apodia
-apodictic
-apodictical
-apodictically
-apodictive
-Apodidae
-apodixis
-apodosis
-apodous
-apodyterium
-apoembryony
-apofenchene
-apogaeic
-apogalacteum
-apogamic
-apogamically
-apogamous
-apogamously
-apogamy
-apogeal
-apogean
-apogee
-apogeic
-apogenous
-apogeny
-apogeotropic
-apogeotropically
-apogeotropism
-Apogon
-Apogonidae
-apograph
-apographal
-apoharmine
-apohyal
-Apoidea
-apoise
-apojove
-apokrea
-apokreos
-apolar
-apolarity
-apolaustic
-apolegamic
-Apolista
-Apolistan
-Apollinarian
-Apollinarianism
-Apolline
-Apollo
-Apollonia
-Apollonian
-Apollonic
-apollonicon
-Apollonistic
-Apolloship
-Apollyon
-apologal
-apologete
-apologetic
-apologetical
-apologetically
-apologetics
-apologia
-apologist
-apologize
-apologizer
-apologue
-apology
-apolousis
-Apolysin
-apolysis
-apolytikion
-apomecometer
-apomecometry
-apometabolic
-apometabolism
-apometabolous
-apometaboly
-apomictic
-apomictical
-apomixis
-apomorphia
-apomorphine
-aponeurology
-aponeurorrhaphy
-aponeurosis
-aponeurositis
-aponeurotic
-aponeurotome
-aponeurotomy
-aponia
-aponic
-Aponogeton
-Aponogetonaceae
-aponogetonaceous
-apoop
-apopenptic
-apopetalous
-apophantic
-apophasis
-apophatic
-Apophis
-apophlegmatic
-apophonia
-apophony
-apophorometer
-apophthegm
-apophthegmatist
-apophyge
-apophylactic
-apophylaxis
-apophyllite
-apophyllous
-apophysary
-apophysate
-apophyseal
-apophysis
-apophysitis
-apoplasmodial
-apoplastogamous
-apoplectic
-apoplectical
-apoplectically
-apoplectiform
-apoplectoid
-apoplex
-apoplexy
-apopyle
-apoquinamine
-apoquinine
-aporetic
-aporetical
-aporhyolite
-aporia
-Aporobranchia
-aporobranchian
-Aporobranchiata
-Aporocactus
-Aporosa
-aporose
-aporphin
-aporphine
-Aporrhaidae
-Aporrhais
-aporrhaoid
-aporrhegma
-aport
-aportoise
-aposafranine
-aposaturn
-aposaturnium
-aposematic
-aposematically
-aposepalous
-aposia
-aposiopesis
-aposiopetic
-apositia
-apositic
-aposoro
-aposporogony
-aposporous
-apospory
-apostasis
-apostasy
-apostate
-apostatic
-apostatical
-apostatically
-apostatism
-apostatize
-apostaxis
-apostemate
-apostematic
-apostemation
-apostematous
-aposteme
-aposteriori
-aposthia
-apostil
-apostle
-apostlehood
-apostleship
-apostolate
-apostoless
-apostoli
-Apostolian
-Apostolic
-apostolic
-apostolical
-apostolically
-apostolicalness
-Apostolici
-apostolicism
-apostolicity
-apostolize
-Apostolos
-apostrophal
-apostrophation
-apostrophe
-apostrophic
-apostrophied
-apostrophize
-apostrophus
-Apotactic
-Apotactici
-apotelesm
-apotelesmatic
-apotelesmatical
-apothecal
-apothecary
-apothecaryship
-apothece
-apothecial
-apothecium
-apothegm
-apothegmatic
-apothegmatical
-apothegmatically
-apothegmatist
-apothegmatize
-apothem
-apotheose
-apotheoses
-apotheosis
-apotheosize
-apothesine
-apothesis
-apotome
-apotracheal
-apotropaic
-apotropaion
-apotropaism
-apotropous
-apoturmeric
-apotype
-apotypic
-apout
-apoxesis
-Apoxyomenos
-apozem
-apozema
-apozemical
-apozymase
-Appalachia
-Appalachian
-appall
-appalling
-appallingly
-appallment
-appalment
-appanage
-appanagist
-apparatus
-apparel
-apparelment
-apparence
-apparency
-apparent
-apparently
-apparentness
-apparition
-apparitional
-apparitor
-appassionata
-appassionato
-appay
-appeal
-appealability
-appealable
-appealer
-appealing
-appealingly
-appealingness
-appear
-appearance
-appearanced
-appearer
-appeasable
-appeasableness
-appeasably
-appease
-appeasement
-appeaser
-appeasing
-appeasingly
-appeasive
-appellability
-appellable
-appellancy
-appellant
-appellate
-appellation
-appellational
-appellative
-appellatived
-appellatively
-appellativeness
-appellatory
-appellee
-appellor
-append
-appendage
-appendaged
-appendalgia
-appendance
-appendancy
-appendant
-appendectomy
-appendical
-appendicalgia
-appendice
-appendicectasis
-appendicectomy
-appendices
-appendicial
-appendicious
-appendicitis
-appendicle
-appendicocaecostomy
-appendicostomy
-appendicular
-Appendicularia
-appendicularian
-Appendiculariidae
-Appendiculata
-appendiculate
-appendiculated
-appenditious
-appendix
-appendorontgenography
-appendotome
-appentice
-apperceive
-apperception
-apperceptionism
-apperceptionist
-apperceptionistic
-apperceptive
-apperceptively
-appercipient
-appersonation
-appertain
-appertainment
-appertinent
-appet
-appete
-appetence
-appetency
-appetent
-appetently
-appetibility
-appetible
-appetibleness
-appetite
-appetition
-appetitional
-appetitious
-appetitive
-appetize
-appetizement
-appetizer
-appetizingly
-appinite
-Appius
-applanate
-applanation
-applaud
-applaudable
-applaudably
-applauder
-applaudingly
-applause
-applausive
-applausively
-apple
-appleberry
-appleblossom
-applecart
-appledrane
-applegrower
-applejack
-applejohn
-applemonger
-applenut
-appleringy
-appleroot
-applesauce
-applewife
-applewoman
-appliable
-appliableness
-appliably
-appliance
-appliant
-applicability
-applicable
-applicableness
-applicably
-applicancy
-applicant
-applicate
-application
-applicative
-applicatively
-applicator
-applicatorily
-applicatory
-applied
-appliedly
-applier
-applique
-applosion
-applosive
-applot
-applotment
-apply
-applyingly
-applyment
-appoggiatura
-appoint
-appointable
-appointe
-appointee
-appointer
-appointive
-appointment
-appointor
-Appomatox
-Appomattoc
-apport
-apportion
-apportionable
-apportioner
-apportionment
-apposability
-apposable
-appose
-apposer
-apposiopestic
-apposite
-appositely
-appositeness
-apposition
-appositional
-appositionally
-appositive
-appositively
-appraisable
-appraisal
-appraise
-appraisement
-appraiser
-appraising
-appraisingly
-appraisive
-appreciable
-appreciably
-appreciant
-appreciate
-appreciatingly
-appreciation
-appreciational
-appreciativ
-appreciative
-appreciatively
-appreciativeness
-appreciator
-appreciatorily
-appreciatory
-appredicate
-apprehend
-apprehender
-apprehendingly
-apprehensibility
-apprehensible
-apprehensibly
-apprehension
-apprehensive
-apprehensively
-apprehensiveness
-apprend
-apprense
-apprentice
-apprenticehood
-apprenticement
-apprenticeship
-appressed
-appressor
-appressorial
-appressorium
-appreteur
-apprise
-apprize
-apprizement
-apprizer
-approach
-approachability
-approachabl
-approachable
-approachableness
-approacher
-approaching
-approachless
-approachment
-approbate
-approbation
-approbative
-approbativeness
-approbator
-approbatory
-approof
-appropinquate
-appropinquation
-appropinquity
-appropre
-appropriable
-appropriate
-appropriately
-appropriateness
-appropriation
-appropriative
-appropriativeness
-appropriator
-approvable
-approvableness
-approval
-approvance
-approve
-approvedly
-approvedness
-approvement
-approver
-approvingly
-approximal
-approximate
-approximately
-approximation
-approximative
-approximatively
-approximativeness
-approximator
-appulse
-appulsion
-appulsive
-appulsively
-appurtenance
-appurtenant
-apractic
-apraxia
-apraxic
-apricate
-aprication
-aprickle
-apricot
-April
-Aprilesque
-Apriline
-Aprilis
-apriori
-apriorism
-apriorist
-aprioristic
-apriority
-Aprocta
-aproctia
-aproctous
-apron
-aproneer
-apronful
-apronless
-apronlike
-apropos
-aprosexia
-aprosopia
-aprosopous
-aproterodont
-apse
-apselaphesia
-apselaphesis
-apsidal
-apsidally
-apsides
-apsidiole
-apsis
-apsychia
-apsychical
-apt
-Aptal
-Aptenodytes
-Aptera
-apteral
-apteran
-apterial
-apterium
-apteroid
-apterous
-Apteryges
-apterygial
-Apterygidae
-Apterygiformes
-Apterygogenea
-Apterygota
-apterygote
-apterygotous
-Apteryx
-Aptian
-Aptiana
-aptitude
-aptitudinal
-aptitudinally
-aptly
-aptness
-aptote
-aptotic
-aptyalia
-aptyalism
-aptychus
-Apulian
-apulmonic
-apulse
-apurpose
-Apus
-apyonin
-apyrene
-apyretic
-apyrexia
-apyrexial
-apyrexy
-apyrotype
-apyrous
-aqua
-aquabelle
-aquabib
-aquacade
-aquacultural
-aquaculture
-aquaemanale
-aquafortist
-aquage
-aquagreen
-aquamarine
-aquameter
-aquaplane
-aquapuncture
-aquarelle
-aquarellist
-aquaria
-aquarial
-Aquarian
-aquarian
-Aquarid
-Aquarii
-aquariist
-aquarium
-Aquarius
-aquarter
-aquascutum
-aquatic
-aquatical
-aquatically
-aquatile
-aquatint
-aquatinta
-aquatinter
-aquation
-aquativeness
-aquatone
-aquavalent
-aquavit
-aqueduct
-aqueoglacial
-aqueoigneous
-aqueomercurial
-aqueous
-aqueously
-aqueousness
-aquicolous
-aquicultural
-aquiculture
-aquiculturist
-aquifer
-aquiferous
-Aquifoliaceae
-aquifoliaceous
-aquiform
-Aquila
-Aquilaria
-aquilawood
-aquilege
-Aquilegia
-Aquilian
-Aquilid
-aquiline
-aquilino
-aquincubital
-aquincubitalism
-Aquinist
-aquintocubital
-aquintocubitalism
-aquiparous
-Aquitanian
-aquiver
-aquo
-aquocapsulitis
-aquocarbonic
-aquocellolitis
-aquopentamminecobaltic
-aquose
-aquosity
-aquotization
-aquotize
-ar
-ara
-Arab
-araba
-araban
-arabana
-Arabella
-arabesque
-arabesquely
-arabesquerie
-Arabian
-Arabianize
-Arabic
-Arabicism
-Arabicize
-Arabidopsis
-arability
-arabin
-arabinic
-arabinose
-arabinosic
-Arabis
-Arabism
-Arabist
-arabit
-arabitol
-arabiyeh
-Arabize
-arable
-Arabophil
-Araby
-araca
-Aracana
-aracanga
-aracari
-Araceae
-araceous
-arachic
-arachidonic
-arachin
-Arachis
-arachnactis
-Arachne
-arachnean
-arachnid
-Arachnida
-arachnidan
-arachnidial
-arachnidism
-arachnidium
-arachnism
-Arachnites
-arachnitis
-arachnoid
-arachnoidal
-Arachnoidea
-arachnoidea
-arachnoidean
-arachnoiditis
-arachnological
-arachnologist
-arachnology
-Arachnomorphae
-arachnophagous
-arachnopia
-arad
-Aradidae
-arado
-araeostyle
-araeosystyle
-Aragallus
-Aragonese
-Aragonian
-aragonite
-araguato
-arain
-Arains
-Arakanese
-arakawaite
-arake
-Arales
-Aralia
-Araliaceae
-araliaceous
-araliad
-Araliaephyllum
-aralie
-Araliophyllum
-aralkyl
-aralkylated
-Aramaean
-Aramaic
-Aramaicize
-Aramaism
-aramayoite
-Aramidae
-aramina
-Araminta
-Aramis
-Aramitess
-Aramu
-Aramus
-Aranea
-Araneae
-araneid
-Araneida
-araneidan
-araneiform
-Araneiformes
-Araneiformia
-aranein
-Araneina
-Araneoidea
-araneologist
-araneology
-araneous
-aranga
-arango
-Aranyaka
-aranzada
-arapahite
-Arapaho
-arapaima
-araphorostic
-arapunga
-Araquaju
-arar
-Arara
-arara
-araracanga
-ararao
-ararauna
-arariba
-araroba
-arati
-aration
-aratory
-Araua
-Arauan
-Araucan
-Araucanian
-Araucano
-Araucaria
-Araucariaceae
-araucarian
-Araucarioxylon
-Araujia
-Arauna
-Arawa
-Arawak
-Arawakan
-Arawakian
-arba
-Arbacia
-arbacin
-arbalest
-arbalester
-arbalestre
-arbalestrier
-arbalist
-arbalister
-arbalo
-Arbela
-arbiter
-arbitrable
-arbitrager
-arbitragist
-arbitral
-arbitrament
-arbitrarily
-arbitrariness
-arbitrary
-arbitrate
-arbitration
-arbitrational
-arbitrationist
-arbitrative
-arbitrator
-arbitratorship
-arbitratrix
-arbitrement
-arbitrer
-arbitress
-arboloco
-arbor
-arboraceous
-arboral
-arborary
-arborator
-arboreal
-arboreally
-arborean
-arbored
-arboreous
-arborescence
-arborescent
-arborescently
-arboresque
-arboret
-arboreta
-arboretum
-arborical
-arboricole
-arboricoline
-arboricolous
-arboricultural
-arboriculture
-arboriculturist
-arboriform
-arborist
-arborization
-arborize
-arboroid
-arborolatry
-arborous
-arborvitae
-arborway
-arbuscle
-arbuscula
-arbuscular
-arbuscule
-arbusterol
-arbustum
-arbutase
-arbute
-arbutean
-arbutin
-arbutinase
-arbutus
-arc
-arca
-Arcacea
-arcade
-Arcadia
-Arcadian
-arcadian
-Arcadianism
-Arcadianly
-Arcadic
-Arcady
-arcana
-arcanal
-arcane
-arcanite
-arcanum
-arcate
-arcature
-Arcella
-Arceuthobium
-arch
-archabomination
-archae
-archaecraniate
-Archaeoceti
-Archaeocyathidae
-Archaeocyathus
-archaeogeology
-archaeographic
-archaeographical
-archaeography
-archaeolatry
-archaeolith
-archaeolithic
-archaeologer
-archaeologian
-archaeologic
-archaeological
-archaeologically
-archaeologist
-archaeology
-Archaeopithecus
-Archaeopteris
-Archaeopterygiformes
-Archaeopteryx
-Archaeornis
-Archaeornithes
-archaeostoma
-Archaeostomata
-archaeostomatous
-archagitator
-archaic
-archaical
-archaically
-archaicism
-archaism
-archaist
-archaistic
-archaize
-archaizer
-archangel
-archangelic
-Archangelica
-archangelical
-archangelship
-archantagonist
-archantiquary
-archapostate
-archapostle
-archarchitect
-archarios
-archartist
-archband
-archbeacon
-archbeadle
-archbishop
-archbishopess
-archbishopric
-archbishopry
-archbotcher
-archboutefeu
-archbuffoon
-archbuilder
-archchampion
-archchaplain
-archcharlatan
-archcheater
-archchemic
-archchief
-archchronicler
-archcity
-archconfraternity
-archconsoler
-archconspirator
-archcorrupter
-archcorsair
-archcount
-archcozener
-archcriminal
-archcritic
-archcrown
-archcupbearer
-archdapifer
-archdapifership
-archdeacon
-archdeaconate
-archdeaconess
-archdeaconry
-archdeaconship
-archdean
-archdeanery
-archdeceiver
-archdefender
-archdemon
-archdepredator
-archdespot
-archdetective
-archdevil
-archdiocesan
-archdiocese
-archdiplomatist
-archdissembler
-archdisturber
-archdivine
-archdogmatist
-archdolt
-archdruid
-archducal
-archduchess
-archduchy
-archduke
-archdukedom
-arche
-archeal
-Archean
-archearl
-archebiosis
-archecclesiastic
-archecentric
-arched
-archegone
-archegonial
-Archegoniata
-Archegoniatae
-archegoniate
-archegoniophore
-archegonium
-archegony
-Archegosaurus
-archeion
-Archelaus
-Archelenis
-archelogy
-Archelon
-archemperor
-Archencephala
-archencephalic
-archenemy
-archengineer
-archenteric
-archenteron
-archeocyte
-Archeozoic
-Archer
-archer
-archeress
-archerfish
-archership
-archery
-arches
-archespore
-archesporial
-archesporium
-archetypal
-archetypally
-archetype
-archetypic
-archetypical
-archetypically
-archetypist
-archeunuch
-archeus
-archexorcist
-archfelon
-archfiend
-archfire
-archflamen
-archflatterer
-archfoe
-archfool
-archform
-archfounder
-archfriend
-archgenethliac
-archgod
-archgomeral
-archgovernor
-archgunner
-archhead
-archheart
-archheresy
-archheretic
-archhost
-archhouse
-archhumbug
-archhypocrisy
-archhypocrite
-Archiannelida
-archiater
-Archibald
-archibenthal
-archibenthic
-archibenthos
-archiblast
-archiblastic
-archiblastoma
-archiblastula
-Archibuteo
-archicantor
-archicarp
-archicerebrum
-Archichlamydeae
-archichlamydeous
-archicleistogamous
-archicleistogamy
-archicoele
-archicontinent
-archicyte
-archicytula
-Archidamus
-Archidiaceae
-archidiaconal
-archidiaconate
-archididascalian
-archididascalos
-Archidiskodon
-Archidium
-archidome
-Archie
-archiepiscopacy
-archiepiscopal
-archiepiscopally
-archiepiscopate
-archiereus
-archigaster
-archigastrula
-archigenesis
-archigonic
-archigonocyte
-archigony
-archiheretical
-archikaryon
-archil
-archilithic
-Archilochian
-archilowe
-archimage
-Archimago
-archimagus
-archimandrite
-Archimedean
-Archimedes
-archimime
-archimorphic
-archimorula
-archimperial
-archimperialism
-archimperialist
-archimperialistic
-archimpressionist
-Archimycetes
-archineuron
-archinfamy
-archinformer
-arching
-archipallial
-archipallium
-archipelagian
-archipelagic
-archipelago
-archipin
-archiplasm
-archiplasmic
-Archiplata
-archiprelatical
-archipresbyter
-archipterygial
-archipterygium
-archisperm
-Archispermae
-archisphere
-archispore
-archistome
-archisupreme
-archisymbolical
-architect
-architective
-architectonic
-Architectonica
-architectonically
-architectonics
-architectress
-architectural
-architecturalist
-architecturally
-architecture
-architecturesque
-Architeuthis
-architis
-architraval
-architrave
-architraved
-architypographer
-archival
-archive
-archivist
-archivolt
-archizoic
-archjockey
-archking
-archknave
-archleader
-archlecher
-archleveler
-archlexicographer
-archliar
-archlute
-archly
-archmachine
-archmagician
-archmagirist
-archmarshal
-archmediocrity
-archmessenger
-archmilitarist
-archmime
-archminister
-archmock
-archmocker
-archmockery
-archmonarch
-archmonarchist
-archmonarchy
-archmugwump
-archmurderer
-archmystagogue
-archness
-archocele
-archocystosyrinx
-archology
-archon
-archonship
-archont
-archontate
-Archontia
-archontic
-archoplasm
-archoplasmic
-archoptoma
-archoptosis
-archorrhagia
-archorrhea
-archostegnosis
-archostenosis
-archosyrinx
-archoverseer
-archpall
-archpapist
-archpastor
-archpatriarch
-archpatron
-archphilosopher
-archphylarch
-archpiece
-archpilferer
-archpillar
-archpirate
-archplagiarist
-archplagiary
-archplayer
-archplotter
-archplunderer
-archplutocrat
-archpoet
-archpolitician
-archpontiff
-archpractice
-archprelate
-archprelatic
-archprelatical
-archpresbyter
-archpresbyterate
-archpresbytery
-archpretender
-archpriest
-archpriesthood
-archpriestship
-archprimate
-archprince
-archprophet
-archprotopope
-archprototype
-archpublican
-archpuritan
-archradical
-archrascal
-archreactionary
-archrebel
-archregent
-archrepresentative
-archrobber
-archrogue
-archruler
-archsacrificator
-archsacrificer
-archsaint
-archsatrap
-archscoundrel
-archseducer
-archsee
-archsewer
-archshepherd
-archsin
-archsnob
-archspirit
-archspy
-archsteward
-archswindler
-archsynagogue
-archtempter
-archthief
-archtraitor
-archtreasurer
-archtreasurership
-archturncoat
-archtyrant
-archurger
-archvagabond
-archvampire
-archvestryman
-archvillain
-archvillainy
-archvisitor
-archwag
-archway
-archwench
-archwise
-archworker
-archworkmaster
-Archy
-archy
-Arcidae
-Arcifera
-arciferous
-arcifinious
-arciform
-arcing
-Arcite
-arcked
-arcking
-arcocentrous
-arcocentrum
-arcograph
-Arcos
-Arctalia
-Arctalian
-Arctamerican
-arctation
-Arctia
-arctian
-arctic
-arctically
-arctician
-arcticize
-arcticward
-arcticwards
-arctiid
-Arctiidae
-Arctisca
-Arctium
-Arctocephalus
-Arctogaea
-Arctogaeal
-Arctogaean
-arctoid
-Arctoidea
-arctoidean
-Arctomys
-Arctos
-Arctosis
-Arctostaphylos
-Arcturia
-Arcturus
-arcual
-arcuale
-arcuate
-arcuated
-arcuately
-arcuation
-arcubalist
-arcubalister
-arcula
-arculite
-ardassine
-Ardea
-Ardeae
-ardeb
-Ardeidae
-Ardelia
-ardella
-ardency
-ardennite
-ardent
-ardently
-ardentness
-Ardhamagadhi
-Ardhanari
-ardish
-Ardisia
-Ardisiaceae
-ardoise
-ardor
-ardri
-ardu
-arduinite
-arduous
-arduously
-arduousness
-ardurous
-are
-area
-areach
-aread
-areal
-areality
-Arean
-arear
-areasoner
-areaway
-Areca
-Arecaceae
-arecaceous
-arecaidin
-arecaidine
-arecain
-arecaine
-Arecales
-arecolidin
-arecolidine
-arecolin
-arecoline
-Arecuna
-ared
-areek
-areel
-arefact
-arefaction
-aregenerative
-aregeneratory
-areito
-arena
-arenaceous
-arenae
-Arenaria
-arenariae
-arenarious
-arenation
-arend
-arendalite
-areng
-Arenga
-Arenicola
-arenicole
-arenicolite
-arenicolous
-Arenig
-arenilitic
-arenoid
-arenose
-arenosity
-arent
-areocentric
-areographer
-areographic
-areographical
-areographically
-areography
-areola
-areolar
-areolate
-areolated
-areolation
-areole
-areolet
-areologic
-areological
-areologically
-areologist
-areology
-areometer
-areometric
-areometrical
-areometry
-Areopagist
-Areopagite
-Areopagitic
-Areopagitica
-Areopagus
-areotectonics
-areroscope
-aretaics
-arete
-Arethusa
-Arethuse
-Aretinian
-arfvedsonite
-argal
-argala
-argali
-argans
-Argante
-Argas
-argasid
-Argasidae
-Argean
-argeers
-argel
-Argemone
-argemony
-argenol
-argent
-argental
-argentamid
-argentamide
-argentamin
-argentamine
-argentate
-argentation
-argenteous
-argenter
-argenteum
-argentic
-argenticyanide
-argentide
-argentiferous
-Argentina
-Argentine
-argentine
-Argentinean
-Argentinian
-Argentinidae
-argentinitrate
-Argentinize
-Argentino
-argention
-argentite
-argentojarosite
-argentol
-argentometric
-argentometrically
-argentometry
-argenton
-argentoproteinum
-argentose
-argentous
-argentum
-Argestes
-arghan
-arghel
-arghool
-Argid
-argil
-argillaceous
-argilliferous
-argillite
-argillitic
-argilloarenaceous
-argillocalcareous
-argillocalcite
-argilloferruginous
-argilloid
-argillomagnesian
-argillous
-arginine
-argininephosphoric
-Argiope
-Argiopidae
-Argiopoidea
-Argive
-Argo
-argo
-Argoan
-argol
-argolet
-Argolian
-Argolic
-Argolid
-argon
-Argonaut
-Argonauta
-Argonautic
-Argonne
-argosy
-argot
-argotic
-Argovian
-arguable
-argue
-arguer
-argufier
-argufy
-Argulus
-argument
-argumental
-argumentation
-argumentatious
-argumentative
-argumentatively
-argumentativeness
-argumentator
-argumentatory
-Argus
-argusfish
-Argusianus
-Arguslike
-argute
-argutely
-arguteness
-Argyle
-Argyll
-Argynnis
-argyranthemous
-argyranthous
-Argyraspides
-argyria
-argyric
-argyrite
-argyrocephalous
-argyrodite
-Argyrol
-Argyroneta
-Argyropelecus
-argyrose
-argyrosis
-Argyrosomus
-argyrythrose
-arhar
-arhat
-arhatship
-Arhauaco
-arhythmic
-aria
-Ariadne
-Arian
-Ariana
-Arianism
-Arianistic
-Arianistical
-Arianize
-Arianizer
-Arianrhod
-aribine
-Arician
-aricine
-arid
-Arided
-aridge
-aridian
-aridity
-aridly
-aridness
-ariegite
-Ariel
-ariel
-arienzo
-Aries
-arietation
-Arietid
-arietinous
-arietta
-aright
-arightly
-arigue
-Ariidae
-Arikara
-aril
-ariled
-arillary
-arillate
-arillated
-arilliform
-arillode
-arillodium
-arilloid
-arillus
-Arimasp
-Arimaspian
-Arimathaean
-Ariocarpus
-Arioi
-Arioian
-Arion
-ariose
-arioso
-ariot
-aripple
-Arisaema
-arisard
-arise
-arisen
-arist
-arista
-Aristarch
-Aristarchian
-aristarchy
-aristate
-Aristeas
-Aristida
-Aristides
-Aristippus
-aristocracy
-aristocrat
-aristocratic
-aristocratical
-aristocratically
-aristocraticalness
-aristocraticism
-aristocraticness
-aristocratism
-aristodemocracy
-aristodemocratical
-aristogenesis
-aristogenetic
-aristogenic
-aristogenics
-Aristol
-Aristolochia
-Aristolochiaceae
-aristolochiaceous
-Aristolochiales
-aristolochin
-aristolochine
-aristological
-aristologist
-aristology
-aristomonarchy
-Aristophanic
-aristorepublicanism
-Aristotelian
-Aristotelianism
-Aristotelic
-Aristotelism
-aristotype
-aristulate
-arite
-arithmetic
-arithmetical
-arithmetically
-arithmetician
-arithmetization
-arithmetize
-arithmic
-arithmocracy
-arithmocratic
-arithmogram
-arithmograph
-arithmography
-arithmomania
-arithmometer
-Arius
-Arivaipa
-Arizona
-Arizonan
-Arizonian
-arizonite
-arjun
-ark
-Arkab
-Arkansan
-Arkansas
-Arkansawyer
-arkansite
-Arkite
-arkite
-arkose
-arkosic
-arksutite
-Arlene
-Arleng
-arles
-Arline
-arm
-armada
-armadilla
-Armadillididae
-Armadillidium
-armadillo
-Armado
-Armageddon
-Armageddonist
-armagnac
-armament
-armamentarium
-armamentary
-armangite
-armariolum
-armarium
-Armata
-Armatoles
-Armatoli
-armature
-armbone
-armchair
-armchaired
-armed
-armeniaceous
-Armenian
-Armenic
-Armenize
-Armenoid
-armer
-Armeria
-Armeriaceae
-armet
-armful
-armgaunt
-armhole
-armhoop
-Armida
-armied
-armiferous
-armiger
-armigeral
-armigerous
-armil
-armilla
-Armillaria
-armillary
-armillate
-armillated
-arming
-Arminian
-Arminianism
-Arminianize
-Arminianizer
-armipotence
-armipotent
-armisonant
-armisonous
-armistice
-armless
-armlet
-armload
-armoire
-armonica
-armor
-Armoracia
-armored
-armorer
-armorial
-Armoric
-Armorican
-Armorician
-armoried
-armorist
-armorproof
-armorwise
-armory
-Armouchiquois
-armozeen
-armpiece
-armpit
-armplate
-armrack
-armrest
-arms
-armscye
-armure
-army
-arn
-arna
-Arnaut
-arnberry
-Arne
-Arneb
-Arnebia
-arnee
-arni
-arnica
-Arnold
-Arnoldist
-Arnoseris
-arnotta
-arnotto
-Arnusian
-arnut
-Aro
-aroar
-aroast
-arock
-aroeira
-aroid
-aroideous
-Aroides
-aroint
-arolium
-arolla
-aroma
-aromacity
-aromadendrin
-aromatic
-aromatically
-aromaticness
-aromatite
-aromatites
-aromatization
-aromatize
-aromatizer
-aromatophor
-aromatophore
-Aronia
-aroon
-Aroras
-Arosaguntacook
-arose
-around
-arousal
-arouse
-arousement
-arouser
-arow
-aroxyl
-arpeggiando
-arpeggiated
-arpeggiation
-arpeggio
-arpeggioed
-arpen
-arpent
-arquerite
-arquifoux
-arracach
-arracacha
-Arracacia
-arrack
-arrah
-arraign
-arraigner
-arraignment
-arrame
-arrange
-arrangeable
-arrangement
-arranger
-arrant
-arrantly
-Arras
-arras
-arrased
-arrasene
-arrastra
-arrastre
-arratel
-arrau
-array
-arrayal
-arrayer
-arrayment
-arrear
-arrearage
-arrect
-arrector
-arrendation
-arrenotokous
-arrenotoky
-arrent
-arrentable
-arrentation
-arreptitious
-arrest
-arrestable
-arrestation
-arrestee
-arrester
-arresting
-arrestingly
-arrestive
-arrestment
-arrestor
-Arretine
-arrhenal
-Arrhenatherum
-arrhenoid
-arrhenotokous
-arrhenotoky
-arrhinia
-arrhizal
-arrhizous
-arrhythmia
-arrhythmic
-arrhythmical
-arrhythmically
-arrhythmous
-arrhythmy
-arriage
-arriba
-arride
-arridge
-arrie
-arriere
-Arriet
-arrimby
-arris
-arrish
-arrisways
-arriswise
-arrival
-arrive
-arriver
-arroba
-arrogance
-arrogancy
-arrogant
-arrogantly
-arrogantness
-arrogate
-arrogatingly
-arrogation
-arrogative
-arrogator
-arrojadite
-arrope
-arrosive
-arrow
-arrowbush
-arrowed
-arrowhead
-arrowheaded
-arrowleaf
-arrowless
-arrowlet
-arrowlike
-arrowplate
-arrowroot
-arrowsmith
-arrowstone
-arrowweed
-arrowwood
-arrowworm
-arrowy
-arroyo
-Arruague
-Arry
-Arryish
-Arsacid
-Arsacidan
-arsanilic
-arse
-arsedine
-arsenal
-arsenate
-arsenation
-arseneted
-arsenetted
-arsenfast
-arsenferratose
-arsenhemol
-arseniasis
-arseniate
-arsenic
-arsenical
-arsenicalism
-arsenicate
-arsenicism
-arsenicize
-arsenicophagy
-arsenide
-arseniferous
-arsenillo
-arseniopleite
-arseniosiderite
-arsenious
-arsenism
-arsenite
-arsenium
-arseniuret
-arseniureted
-arsenization
-arseno
-arsenobenzene
-arsenobenzol
-arsenobismite
-arsenoferratin
-arsenofuran
-arsenohemol
-arsenolite
-arsenophagy
-arsenophen
-arsenophenol
-arsenophenylglycin
-arsenopyrite
-arsenostyracol
-arsenotherapy
-arsenotungstates
-arsenotungstic
-arsenous
-arsenoxide
-arsenyl
-arses
-arsesmart
-arsheen
-arshin
-arshine
-arsine
-arsinic
-arsino
-Arsinoitherium
-arsis
-arsle
-arsmetrik
-arsmetrike
-arsnicker
-arsoite
-arson
-arsonate
-arsonation
-arsonic
-arsonist
-arsonite
-arsonium
-arsono
-arsonvalization
-arsphenamine
-arsyl
-arsylene
-Art
-art
-artaba
-artabe
-artal
-Artamidae
-Artamus
-artar
-artarine
-artcraft
-artefact
-artel
-Artemas
-Artemia
-Artemis
-Artemisia
-artemisic
-artemisin
-Artemision
-Artemisium
-arteriagra
-arterial
-arterialization
-arterialize
-arterially
-arteriarctia
-arteriasis
-arteriectasia
-arteriectasis
-arteriectopia
-arterin
-arterioarctia
-arteriocapillary
-arteriococcygeal
-arteriodialysis
-arteriodiastasis
-arteriofibrosis
-arteriogenesis
-arteriogram
-arteriograph
-arteriography
-arteriole
-arteriolith
-arteriology
-arteriolosclerosis
-arteriomalacia
-arteriometer
-arteriomotor
-arterionecrosis
-arteriopalmus
-arteriopathy
-arteriophlebotomy
-arterioplania
-arterioplasty
-arteriopressor
-arteriorenal
-arteriorrhagia
-arteriorrhaphy
-arteriorrhexis
-arteriosclerosis
-arteriosclerotic
-arteriospasm
-arteriostenosis
-arteriostosis
-arteriostrepsis
-arteriosympathectomy
-arteriotome
-arteriotomy
-arteriotrepsis
-arterious
-arteriovenous
-arterioversion
-arterioverter
-arteritis
-artery
-Artesian
-artesian
-artful
-artfully
-artfulness
-Artgum
-artha
-arthel
-arthemis
-arthragra
-arthral
-arthralgia
-arthralgic
-arthrectomy
-arthredema
-arthrempyesis
-arthresthesia
-arthritic
-arthritical
-arthriticine
-arthritis
-arthritism
-arthrobacterium
-arthrobranch
-arthrobranchia
-arthrocace
-arthrocarcinoma
-arthrocele
-arthrochondritis
-arthroclasia
-arthrocleisis
-arthroclisis
-arthroderm
-arthrodesis
-arthrodia
-arthrodial
-arthrodic
-Arthrodira
-arthrodiran
-arthrodire
-arthrodirous
-Arthrodonteae
-arthrodynia
-arthrodynic
-arthroempyema
-arthroempyesis
-arthroendoscopy
-Arthrogastra
-arthrogastran
-arthrogenous
-arthrography
-arthrogryposis
-arthrolite
-arthrolith
-arthrolithiasis
-arthrology
-arthromeningitis
-arthromere
-arthromeric
-arthrometer
-arthrometry
-arthroncus
-arthroneuralgia
-arthropathic
-arthropathology
-arthropathy
-arthrophlogosis
-arthrophyma
-arthroplastic
-arthroplasty
-arthropleura
-arthropleure
-arthropod
-Arthropoda
-arthropodal
-arthropodan
-arthropodous
-Arthropomata
-arthropomatous
-arthropterous
-arthropyosis
-arthrorheumatism
-arthrorrhagia
-arthrosclerosis
-arthrosia
-arthrosis
-arthrospore
-arthrosporic
-arthrosporous
-arthrosteitis
-arthrosterigma
-arthrostome
-arthrostomy
-Arthrostraca
-arthrosynovitis
-arthrosyrinx
-arthrotome
-arthrotomy
-arthrotrauma
-arthrotropic
-arthrotyphoid
-arthrous
-arthroxerosis
-Arthrozoa
-arthrozoan
-arthrozoic
-Arthur
-Arthurian
-Arthuriana
-artiad
-artichoke
-article
-articled
-articulability
-articulable
-articulacy
-articulant
-articular
-articulare
-articularly
-articulary
-Articulata
-articulate
-articulated
-articulately
-articulateness
-articulation
-articulationist
-articulative
-articulator
-articulatory
-articulite
-articulus
-Artie
-artifact
-artifactitious
-artifice
-artificer
-artificership
-artificial
-artificialism
-artificiality
-artificialize
-artificially
-artificialness
-artiller
-artillerist
-artillery
-artilleryman
-artilleryship
-artiness
-artinite
-Artinskian
-artiodactyl
-Artiodactyla
-artiodactylous
-artiphyllous
-artisan
-artisanship
-artist
-artistdom
-artiste
-artistic
-artistical
-artistically
-artistry
-artless
-artlessly
-artlessness
-artlet
-artlike
-Artocarpaceae
-artocarpad
-artocarpeous
-artocarpous
-Artocarpus
-artolater
-artophagous
-artophorion
-artotype
-artotypy
-Artotyrite
-artware
-arty
-aru
-Aruac
-arui
-aruke
-Arulo
-Arum
-arumin
-Aruncus
-arundiferous
-arundinaceous
-Arundinaria
-arundineous
-Arundo
-Arunta
-arupa
-arusa
-arusha
-arustle
-arval
-arvel
-Arverni
-Arvicola
-arvicole
-Arvicolinae
-arvicoline
-arvicolous
-arviculture
-arx
-ary
-Arya
-Aryan
-Aryanism
-Aryanization
-Aryanize
-aryballoid
-aryballus
-aryepiglottic
-aryl
-arylamine
-arylamino
-arylate
-arytenoid
-arytenoidal
-arzan
-Arzava
-Arzawa
-arzrunite
-arzun
-As
-as
-Asa
-asaddle
-asafetida
-Asahel
-asak
-asale
-asana
-Asaph
-asaphia
-Asaphic
-asaphid
-Asaphidae
-Asaphus
-asaprol
-asarabacca
-Asaraceae
-Asarh
-asarite
-asaron
-asarone
-asarotum
-Asarum
-asbest
-asbestic
-asbestiform
-asbestine
-asbestinize
-asbestoid
-asbestoidal
-asbestos
-asbestosis
-asbestous
-asbestus
-asbolin
-asbolite
-Ascabart
-Ascalabota
-ascan
-Ascanian
-Ascanius
-ascare
-ascariasis
-ascaricidal
-ascaricide
-ascarid
-Ascaridae
-ascarides
-Ascaridia
-ascaridiasis
-ascaridole
-Ascaris
-ascaron
-Ascella
-ascellus
-ascend
-ascendable
-ascendance
-ascendancy
-ascendant
-ascendence
-ascendency
-ascendent
-ascender
-ascendible
-ascending
-ascendingly
-ascension
-ascensional
-ascensionist
-Ascensiontide
-ascensive
-ascent
-ascertain
-ascertainable
-ascertainableness
-ascertainably
-ascertainer
-ascertainment
-ascescency
-ascescent
-ascetic
-ascetical
-ascetically
-asceticism
-Ascetta
-aschaffite
-ascham
-aschistic
-asci
-ascian
-Ascidia
-Ascidiacea
-Ascidiae
-ascidian
-ascidiate
-ascidicolous
-ascidiferous
-ascidiform
-ascidioid
-Ascidioida
-Ascidioidea
-Ascidiozoa
-ascidiozooid
-ascidium
-asciferous
-ascigerous
-ascii
-ascites
-ascitic
-ascitical
-ascititious
-asclent
-Asclepiad
-asclepiad
-Asclepiadaceae
-asclepiadaceous
-Asclepiadae
-Asclepiadean
-asclepiadeous
-Asclepiadic
-Asclepian
-Asclepias
-asclepidin
-asclepidoid
-Asclepieion
-asclepin
-Asclepius
-ascocarp
-ascocarpous
-Ascochyta
-ascogenous
-ascogone
-ascogonial
-ascogonidium
-ascogonium
-ascolichen
-Ascolichenes
-ascoma
-ascomycetal
-ascomycete
-Ascomycetes
-ascomycetous
-ascon
-Ascones
-ascophore
-ascophorous
-Ascophyllum
-ascorbic
-ascospore
-ascosporic
-ascosporous
-Ascot
-ascot
-Ascothoracica
-ascribable
-ascribe
-ascript
-ascription
-ascriptitii
-ascriptitious
-ascriptitius
-ascry
-ascula
-Ascupart
-ascus
-ascyphous
-Ascyrum
-asdic
-ase
-asearch
-asecretory
-aseethe
-aseismatic
-aseismic
-aseismicity
-aseity
-aselgeia
-asellate
-Aselli
-Asellidae
-Aselline
-Asellus
-asem
-asemasia
-asemia
-asepsis
-aseptate
-aseptic
-aseptically
-asepticism
-asepticize
-aseptify
-aseptol
-aseptolin
-asexual
-asexuality
-asexualization
-asexualize
-asexually
-asfetida
-ash
-Asha
-ashake
-ashame
-ashamed
-ashamedly
-ashamedness
-ashamnu
-Ashangos
-Ashantee
-Ashanti
-Asharasi
-ashberry
-ashcake
-ashen
-Asher
-asherah
-Asherites
-ashery
-ashes
-ashet
-ashily
-ashimmer
-ashine
-ashiness
-ashipboard
-Ashir
-ashiver
-Ashkenazic
-Ashkenazim
-ashkoko
-ashlar
-ashlared
-ashlaring
-ashless
-ashling
-Ashluslay
-ashman
-Ashmolean
-Ashochimi
-ashore
-ashpan
-ashpit
-ashplant
-ashraf
-ashrafi
-ashthroat
-Ashur
-ashur
-ashweed
-ashwort
-ashy
-asialia
-Asian
-Asianic
-Asianism
-Asiarch
-Asiarchate
-Asiatic
-Asiatical
-Asiatically
-Asiatican
-Asiaticism
-Asiaticization
-Asiaticize
-Asiatize
-aside
-asidehand
-asideness
-asiderite
-asideu
-asiento
-asilid
-Asilidae
-Asilus
-asimen
-Asimina
-asimmer
-asinego
-asinine
-asininely
-asininity
-asiphonate
-asiphonogama
-asitia
-ask
-askable
-askance
-askant
-askar
-askari
-asker
-askew
-askingly
-askip
-asklent
-Asklepios
-askos
-Askr
-aslant
-aslantwise
-aslaver
-asleep
-aslop
-aslope
-aslumber
-asmack
-asmalte
-asmear
-asmile
-asmoke
-asmolder
-asniffle
-asnort
-asoak
-asocial
-asok
-asoka
-asomatophyte
-asomatous
-asonant
-asonia
-asop
-asor
-asouth
-asp
-aspace
-aspalathus
-Aspalax
-asparagic
-asparagine
-asparaginic
-asparaginous
-asparagus
-asparagyl
-asparkle
-aspartate
-aspartic
-aspartyl
-Aspasia
-Aspatia
-aspect
-aspectable
-aspectant
-aspection
-aspectual
-aspen
-asper
-asperate
-asperation
-aspergation
-asperge
-asperger
-Asperges
-aspergil
-aspergill
-Aspergillaceae
-Aspergillales
-aspergilliform
-aspergillin
-aspergillosis
-aspergillum
-aspergillus
-Asperifoliae
-asperifoliate
-asperifolious
-asperite
-asperity
-aspermatic
-aspermatism
-aspermatous
-aspermia
-aspermic
-aspermous
-asperous
-asperously
-asperse
-aspersed
-asperser
-aspersion
-aspersive
-aspersively
-aspersor
-aspersorium
-aspersory
-Asperugo
-Asperula
-asperuloside
-asperulous
-asphalt
-asphaltene
-asphalter
-asphaltic
-asphaltite
-asphaltum
-aspheterism
-aspheterize
-asphodel
-Asphodelaceae
-Asphodeline
-Asphodelus
-asphyctic
-asphyctous
-asphyxia
-asphyxial
-asphyxiant
-asphyxiate
-asphyxiation
-asphyxiative
-asphyxiator
-asphyxied
-asphyxy
-aspic
-aspiculate
-aspiculous
-aspidate
-aspidiaria
-aspidinol
-Aspidiotus
-Aspidiske
-Aspidistra
-aspidium
-Aspidobranchia
-Aspidobranchiata
-aspidobranchiate
-Aspidocephali
-Aspidochirota
-Aspidoganoidei
-aspidomancy
-Aspidosperma
-aspidospermine
-aspirant
-aspirata
-aspirate
-aspiration
-aspirator
-aspiratory
-aspire
-aspirer
-aspirin
-aspiring
-aspiringly
-aspiringness
-aspish
-asplanchnic
-Asplenieae
-asplenioid
-Asplenium
-asporogenic
-asporogenous
-asporous
-asport
-asportation
-asporulate
-aspout
-asprawl
-aspread
-Aspredinidae
-Aspredo
-aspring
-asprout
-asquare
-asquat
-asqueal
-asquint
-asquirm
-ass
-assacu
-assagai
-assai
-assail
-assailable
-assailableness
-assailant
-assailer
-assailment
-Assam
-Assamese
-Assamites
-assapan
-assapanic
-assarion
-assart
-assary
-assassin
-assassinate
-assassination
-assassinative
-assassinator
-assassinatress
-assassinist
-assate
-assation
-assault
-assaultable
-assaulter
-assaut
-assay
-assayable
-assayer
-assaying
-assbaa
-asse
-assecuration
-assecurator
-assedation
-assegai
-asself
-assemblable
-assemblage
-assemble
-assembler
-assembly
-assemblyman
-assent
-assentaneous
-assentation
-assentatious
-assentator
-assentatorily
-assentatory
-assented
-assenter
-assentient
-assenting
-assentingly
-assentive
-assentiveness
-assentor
-assert
-assertable
-assertative
-asserter
-assertible
-assertion
-assertional
-assertive
-assertively
-assertiveness
-assertor
-assertorial
-assertorially
-assertoric
-assertorical
-assertorically
-assertorily
-assertory
-assertress
-assertrix
-assertum
-assess
-assessable
-assessably
-assessed
-assessee
-assession
-assessionary
-assessment
-assessor
-assessorial
-assessorship
-assessory
-asset
-assets
-assever
-asseverate
-asseveratingly
-asseveration
-asseverative
-asseveratively
-asseveratory
-asshead
-assi
-assibilate
-assibilation
-Assidean
-assident
-assidual
-assidually
-assiduity
-assiduous
-assiduously
-assiduousness
-assientist
-assiento
-assify
-assign
-assignability
-assignable
-assignably
-assignat
-assignation
-assigned
-assignee
-assigneeship
-assigner
-assignment
-assignor
-assilag
-assimilability
-assimilable
-assimilate
-assimilation
-assimilationist
-assimilative
-assimilativeness
-assimilator
-assimilatory
-Assiniboin
-assis
-Assisan
-assise
-assish
-assishly
-assishness
-assist
-assistance
-assistant
-assistanted
-assistantship
-assistency
-assister
-assistful
-assistive
-assistless
-assistor
-assize
-assizement
-assizer
-assizes
-asslike
-assman
-Assmannshauser
-assmanship
-associability
-associable
-associableness
-associate
-associated
-associatedness
-associateship
-association
-associational
-associationalism
-associationalist
-associationism
-associationist
-associationistic
-associative
-associatively
-associativeness
-associator
-associatory
-assoil
-assoilment
-assoilzie
-assonance
-assonanced
-assonant
-assonantal
-assonantic
-assonate
-Assonia
-assort
-assortative
-assorted
-assortedness
-assorter
-assortive
-assortment
-assuade
-assuage
-assuagement
-assuager
-assuasive
-assubjugate
-assuetude
-assumable
-assumably
-assume
-assumed
-assumedly
-assumer
-assuming
-assumingly
-assumingness
-assumpsit
-assumption
-Assumptionist
-assumptious
-assumptiousness
-assumptive
-assumptively
-assurable
-assurance
-assurant
-assure
-assured
-assuredly
-assuredness
-assurer
-assurge
-assurgency
-assurgent
-assuring
-assuringly
-assyntite
-Assyrian
-Assyrianize
-Assyriological
-Assyriologist
-Assyriologue
-Assyriology
-Assyroid
-assythment
-ast
-asta
-Astacidae
-Astacus
-Astakiwi
-astalk
-astarboard
-astare
-astart
-Astarte
-Astartian
-Astartidae
-astasia
-astatic
-astatically
-astaticism
-astatine
-astatize
-astatizer
-astay
-asteam
-asteatosis
-asteep
-asteer
-asteism
-astelic
-astely
-aster
-Asteraceae
-asteraceous
-Asterales
-Asterella
-astereognosis
-asteria
-asterial
-Asterias
-asteriated
-Asteriidae
-asterikos
-asterin
-Asterina
-Asterinidae
-asterioid
-Asterion
-asterion
-Asterionella
-asterisk
-asterism
-asterismal
-astern
-asternal
-Asternata
-asternia
-Asterochiton
-asteroid
-asteroidal
-Asteroidea
-asteroidean
-Asterolepidae
-Asterolepis
-Asterope
-asterophyllite
-Asterophyllites
-Asterospondyli
-asterospondylic
-asterospondylous
-Asteroxylaceae
-Asteroxylon
-Asterozoa
-asterwort
-asthenia
-asthenic
-asthenical
-asthenobiosis
-asthenobiotic
-asthenolith
-asthenology
-asthenopia
-asthenopic
-asthenosphere
-astheny
-asthma
-asthmatic
-asthmatical
-asthmatically
-asthmatoid
-asthmogenic
-asthore
-asthorin
-Astian
-astichous
-astigmatic
-astigmatical
-astigmatically
-astigmatism
-astigmatizer
-astigmatometer
-astigmatoscope
-astigmatoscopy
-astigmia
-astigmism
-astigmometer
-astigmometry
-Astilbe
-astilbe
-astint
-astipulate
-astir
-astite
-astomatal
-astomatous
-astomia
-astomous
-astonied
-astonish
-astonishedly
-astonisher
-astonishing
-astonishingly
-astonishingness
-astonishment
-astony
-astoop
-astor
-astound
-astoundable
-astounding
-astoundingly
-astoundment
-Astrachan
-astraddle
-Astraea
-Astraean
-astraean
-astraeid
-Astraeidae
-astraeiform
-astragal
-astragalar
-astragalectomy
-astragali
-astragalocalcaneal
-astragalocentral
-astragalomancy
-astragalonavicular
-astragaloscaphoid
-astragalotibial
-Astragalus
-astragalus
-astrain
-astrakanite
-astrakhan
-astral
-astrally
-astrand
-Astrantia
-astraphobia
-astrapophobia
-astray
-astream
-astrer
-astrict
-astriction
-astrictive
-astrictively
-astrictiveness
-Astrid
-astride
-astrier
-astriferous
-astrild
-astringe
-astringency
-astringent
-astringently
-astringer
-astroalchemist
-astroblast
-Astrocaryum
-astrochemist
-astrochemistry
-astrochronological
-astrocyte
-astrocytoma
-astrocytomata
-astrodiagnosis
-astrodome
-astrofel
-astrogeny
-astroglia
-astrognosy
-astrogonic
-astrogony
-astrograph
-astrographic
-astrography
-astroid
-astroite
-astrolabe
-astrolabical
-astrolater
-astrolatry
-astrolithology
-astrologaster
-astrologer
-astrologian
-astrologic
-astrological
-astrologically
-astrologistic
-astrologize
-astrologous
-astrology
-astromancer
-astromancy
-astromantic
-astrometeorological
-astrometeorologist
-astrometeorology
-astrometer
-astrometrical
-astrometry
-astronaut
-astronautics
-astronomer
-astronomic
-astronomical
-astronomically
-astronomics
-astronomize
-astronomy
-Astropecten
-Astropectinidae
-astrophil
-astrophobia
-astrophotographic
-astrophotography
-astrophotometer
-astrophotometrical
-astrophotometry
-astrophyllite
-astrophysical
-astrophysicist
-astrophysics
-Astrophyton
-astroscope
-Astroscopus
-astroscopy
-astrospectral
-astrospectroscopic
-astrosphere
-astrotheology
-astrut
-astucious
-astuciously
-astucity
-Astur
-Asturian
-astute
-astutely
-astuteness
-astylar
-Astylospongia
-Astylosternus
-asudden
-asunder
-Asuri
-aswail
-aswarm
-asway
-asweat
-aswell
-aswim
-aswing
-aswirl
-aswoon
-aswooned
-asyla
-asyllabia
-asyllabic
-asyllabical
-asylum
-asymbiotic
-asymbolia
-asymbolic
-asymbolical
-asymmetric
-asymmetrical
-asymmetrically
-Asymmetron
-asymmetry
-asymptomatic
-asymptote
-asymptotic
-asymptotical
-asymptotically
-asynapsis
-asynaptic
-asynartete
-asynartetic
-asynchronism
-asynchronous
-asyndesis
-asyndetic
-asyndetically
-asyndeton
-asynergia
-asynergy
-asyngamic
-asyngamy
-asyntactic
-asyntrophy
-asystole
-asystolic
-asystolism
-asyzygetic
-at
-Ata
-atabal
-atabeg
-atabek
-Atabrine
-Atacaman
-Atacamenan
-Atacamenian
-Atacameno
-atacamite
-atactic
-atactiform
-Ataentsic
-atafter
-Ataigal
-Ataiyal
-Atalan
-ataman
-atamasco
-Atamosco
-atangle
-atap
-ataraxia
-ataraxy
-atatschite
-ataunt
-atavi
-atavic
-atavism
-atavist
-atavistic
-atavistically
-atavus
-ataxaphasia
-ataxia
-ataxiagram
-ataxiagraph
-ataxiameter
-ataxiaphasia
-ataxic
-ataxinomic
-ataxite
-ataxonomic
-ataxophemia
-ataxy
-atazir
-atbash
-atchison
-ate
-Ateba
-atebrin
-atechnic
-atechnical
-atechny
-ateeter
-atef
-atelectasis
-atelectatic
-ateleological
-Ateles
-atelestite
-atelets
-atelier
-ateliosis
-Atellan
-atelo
-atelocardia
-atelocephalous
-ateloglossia
-atelognathia
-atelomitic
-atelomyelia
-atelopodia
-ateloprosopia
-atelorachidia
-atelostomia
-atemporal
-Aten
-Atenism
-Atenist
-Aterian
-ates
-Atestine
-ateuchi
-ateuchus
-Atfalati
-Athabasca
-Athabascan
-athalamous
-athalline
-Athamantid
-athanasia
-Athanasian
-Athanasianism
-Athanasianist
-athanasy
-athanor
-Athapascan
-athar
-Atharvan
-Athecae
-Athecata
-athecate
-atheism
-atheist
-atheistic
-atheistical
-atheistically
-atheisticalness
-atheize
-atheizer
-athelia
-atheling
-athematic
-Athenaea
-athenaeum
-athenee
-Athenian
-Athenianly
-athenor
-Athens
-atheological
-atheologically
-atheology
-atheous
-Athericera
-athericeran
-athericerous
-atherine
-Atherinidae
-Atheriogaea
-Atheriogaean
-Atheris
-athermancy
-athermanous
-athermic
-athermous
-atheroma
-atheromasia
-atheromata
-atheromatosis
-atheromatous
-atherosclerosis
-Atherosperma
-Atherurus
-athetesis
-athetize
-athetoid
-athetosic
-athetosis
-athing
-athirst
-athlete
-athletehood
-athletic
-athletical
-athletically
-athleticism
-athletics
-athletism
-athletocracy
-athlothete
-athlothetes
-athodyd
-athort
-athrepsia
-athreptic
-athrill
-athrive
-athrob
-athrocyte
-athrocytosis
-athrogenic
-athrong
-athrough
-athwart
-athwarthawse
-athwartship
-athwartships
-athwartwise
-athymia
-athymic
-athymy
-athyreosis
-athyria
-athyrid
-Athyridae
-Athyris
-Athyrium
-athyroid
-athyroidism
-athyrosis
-Ati
-Atik
-Atikokania
-atilt
-atimon
-atinga
-atingle
-atinkle
-atip
-atis
-Atka
-Atlanta
-atlantad
-atlantal
-Atlantean
-atlantes
-Atlantic
-atlantic
-Atlantica
-Atlantid
-Atlantides
-atlantite
-atlantoaxial
-atlantodidymus
-atlantomastoid
-atlantoodontoid
-Atlantosaurus
-Atlas
-atlas
-Atlaslike
-atlatl
-atle
-atlee
-atloaxoid
-atloid
-atloidean
-atloidoaxoid
-atma
-atman
-atmiatrics
-atmiatry
-atmid
-atmidalbumin
-atmidometer
-atmidometry
-atmo
-atmocausis
-atmocautery
-atmoclastic
-atmogenic
-atmograph
-atmologic
-atmological
-atmologist
-atmology
-atmolysis
-atmolyzation
-atmolyze
-atmolyzer
-atmometer
-atmometric
-atmometry
-atmos
-atmosphere
-atmosphereful
-atmosphereless
-atmospheric
-atmospherical
-atmospherically
-atmospherics
-atmospherology
-atmostea
-atmosteal
-atmosteon
-Atnah
-atocha
-atocia
-atokal
-atoke
-atokous
-atoll
-atom
-atomatic
-atomechanics
-atomerg
-atomic
-atomical
-atomically
-atomician
-atomicism
-atomicity
-atomics
-atomiferous
-atomism
-atomist
-atomistic
-atomistical
-atomistically
-atomistics
-atomity
-atomization
-atomize
-atomizer
-atomology
-atomy
-atonable
-atonal
-atonalism
-atonalistic
-atonality
-atonally
-atone
-atonement
-atoneness
-atoner
-atonia
-atonic
-atonicity
-atoningly
-atony
-atop
-Atophan
-atophan
-atopic
-atopite
-atopy
-Atorai
-Atossa
-atour
-atoxic
-Atoxyl
-atoxyl
-atrabilarian
-atrabilarious
-atrabiliar
-atrabiliarious
-atrabiliary
-atrabilious
-atrabiliousness
-atracheate
-Atractaspis
-Atragene
-atragene
-atrail
-atrament
-atramental
-atramentary
-atramentous
-atraumatic
-Atrebates
-Atremata
-atrematous
-atremble
-atrepsy
-atreptic
-atresia
-atresic
-atresy
-atretic
-atria
-atrial
-atrichia
-atrichosis
-atrichous
-atrickle
-Atridean
-atrienses
-atriensis
-atriocoelomic
-atrioporal
-atriopore
-atrioventricular
-atrip
-Atriplex
-atrium
-atrocha
-atrochal
-atrochous
-atrocious
-atrociously
-atrociousness
-atrocity
-atrolactic
-Atropa
-atropaceous
-atropal
-atropamine
-atrophia
-atrophiated
-atrophic
-atrophied
-atrophoderma
-atrophy
-atropia
-atropic
-Atropidae
-atropine
-atropinism
-atropinization
-atropinize
-atropism
-atropous
-atrorubent
-atrosanguineous
-atroscine
-atrous
-atry
-Atrypa
-Atta
-atta
-Attacapan
-attacco
-attach
-attachable
-attachableness
-attache
-attached
-attachedly
-attacher
-attacheship
-attachment
-attack
-attackable
-attacker
-attacolite
-Attacus
-attacus
-attagen
-attaghan
-attain
-attainability
-attainable
-attainableness
-attainder
-attainer
-attainment
-attaint
-attaintment
-attainture
-Attalea
-attaleh
-Attalid
-attar
-attargul
-attask
-attemper
-attemperament
-attemperance
-attemperate
-attemperately
-attemperation
-attemperator
-attempt
-attemptability
-attemptable
-attempter
-attemptless
-attend
-attendance
-attendancy
-attendant
-attendantly
-attender
-attendingly
-attendment
-attendress
-attensity
-attent
-attention
-attentional
-attentive
-attentively
-attentiveness
-attently
-attenuable
-attenuant
-attenuate
-attenuation
-attenuative
-attenuator
-atter
-attercop
-attercrop
-atterminal
-attermine
-atterminement
-attern
-attery
-attest
-attestable
-attestant
-attestation
-attestative
-attestator
-attester
-attestive
-Attic
-attic
-Attical
-Atticism
-atticism
-Atticist
-Atticize
-atticize
-atticomastoid
-attid
-Attidae
-attinge
-attingence
-attingency
-attingent
-attire
-attired
-attirement
-attirer
-attitude
-attitudinal
-attitudinarian
-attitudinarianism
-attitudinize
-attitudinizer
-Attiwendaronk
-attorn
-attorney
-attorneydom
-attorneyism
-attorneyship
-attornment
-attract
-attractability
-attractable
-attractableness
-attractant
-attracter
-attractile
-attractingly
-attraction
-attractionally
-attractive
-attractively
-attractiveness
-attractivity
-attractor
-attrahent
-attrap
-attributable
-attributal
-attribute
-attributer
-attribution
-attributive
-attributively
-attributiveness
-attrist
-attrite
-attrited
-attriteness
-attrition
-attritive
-attritus
-attune
-attunely
-attunement
-Atuami
-atule
-atumble
-atune
-atwain
-atweel
-atween
-atwin
-atwirl
-atwist
-atwitch
-atwitter
-atwixt
-atwo
-atypic
-atypical
-atypically
-atypy
-auantic
-aube
-aubepine
-Aubrey
-Aubrietia
-aubrietia
-aubrite
-auburn
-aubusson
-Auca
-auca
-Aucan
-Aucaner
-Aucanian
-Auchenia
-auchenia
-auchenium
-auchlet
-auction
-auctionary
-auctioneer
-auctorial
-Aucuba
-aucuba
-aucupate
-audacious
-audaciously
-audaciousness
-audacity
-Audaean
-Audian
-Audibertia
-audibility
-audible
-audibleness
-audibly
-audience
-audiencier
-audient
-audile
-audio
-audiogenic
-audiogram
-audiologist
-audiology
-audiometer
-audiometric
-audiometry
-Audion
-audion
-audiophile
-audiphone
-audit
-audition
-auditive
-auditor
-auditoria
-auditorial
-auditorially
-auditorily
-auditorium
-auditorship
-auditory
-auditress
-auditual
-audivise
-audiviser
-audivision
-Audrey
-Audubonistic
-Aueto
-auganite
-auge
-Augean
-augelite
-augen
-augend
-auger
-augerer
-augh
-aught
-aughtlins
-augite
-augitic
-augitite
-augitophyre
-augment
-augmentable
-augmentation
-augmentationer
-augmentative
-augmentatively
-augmented
-augmentedly
-augmenter
-augmentive
-augur
-augural
-augurate
-augurial
-augurous
-augurship
-augury
-August
-august
-Augusta
-augustal
-Augustan
-Augusti
-Augustin
-Augustinian
-Augustinianism
-Augustinism
-augustly
-augustness
-Augustus
-auh
-auhuhu
-Auk
-auk
-auklet
-aula
-aulacocarpous
-Aulacodus
-Aulacomniaceae
-Aulacomnium
-aulae
-aularian
-auld
-auldfarrantlike
-auletai
-aulete
-auletes
-auletic
-auletrides
-auletris
-aulic
-aulicism
-auloi
-aulophyte
-aulos
-Aulostoma
-Aulostomatidae
-Aulostomi
-aulostomid
-Aulostomidae
-Aulostomus
-aulu
-aum
-aumaga
-aumail
-aumbry
-aumery
-aumil
-aumildar
-aumous
-aumrie
-auncel
-aune
-Aunjetitz
-aunt
-aunthood
-auntie
-auntish
-auntlike
-auntly
-auntsary
-auntship
-aupaka
-aura
-aurae
-aural
-aurally
-auramine
-Aurantiaceae
-aurantiaceous
-Aurantium
-aurantium
-aurar
-aurate
-aurated
-aureate
-aureately
-aureateness
-aureation
-aureity
-Aurelia
-aurelia
-aurelian
-Aurelius
-Aureocasidium
-aureola
-aureole
-aureolin
-aureoline
-aureomycin
-aureous
-aureously
-auresca
-aureus
-auribromide
-auric
-aurichalcite
-aurichalcum
-aurichloride
-aurichlorohydric
-auricle
-auricled
-auricomous
-Auricula
-auricula
-auriculae
-auricular
-auriculare
-auriculares
-Auricularia
-auricularia
-Auriculariaceae
-auriculariae
-Auriculariales
-auricularian
-auricularis
-auricularly
-auriculate
-auriculated
-auriculately
-Auriculidae
-auriculocranial
-auriculoparietal
-auriculotemporal
-auriculoventricular
-auriculovertical
-auricyanhydric
-auricyanic
-auricyanide
-auride
-auriferous
-aurific
-aurification
-auriform
-aurify
-Auriga
-aurigal
-aurigation
-aurigerous
-Aurigid
-Aurignacian
-aurilave
-aurin
-aurinasal
-auriphone
-auriphrygia
-auriphrygiate
-auripuncture
-aurir
-auriscalp
-auriscalpia
-auriscalpium
-auriscope
-auriscopy
-aurist
-aurite
-aurivorous
-auroauric
-aurobromide
-aurochloride
-aurochs
-aurocyanide
-aurodiamine
-auronal
-aurophobia
-aurophore
-aurora
-aurorae
-auroral
-aurorally
-aurore
-aurorean
-Aurorian
-aurorium
-aurotellurite
-aurothiosulphate
-aurothiosulphuric
-aurous
-aurrescu
-aurulent
-aurum
-aurure
-auryl
-Aus
-auscult
-auscultascope
-auscultate
-auscultation
-auscultative
-auscultator
-auscultatory
-Auscultoscope
-auscultoscope
-Aushar
-auslaut
-auslaute
-Ausones
-Ausonian
-auspex
-auspicate
-auspice
-auspices
-auspicial
-auspicious
-auspiciously
-auspiciousness
-auspicy
-Aussie
-Austafrican
-austenite
-austenitic
-Auster
-austere
-austerely
-austereness
-austerity
-Austerlitz
-Austin
-Austral
-austral
-Australasian
-australene
-Australia
-Australian
-Australianism
-Australianize
-Australic
-Australioid
-australite
-Australoid
-Australopithecinae
-australopithecine
-Australopithecus
-Australorp
-Austrasian
-Austrian
-Austrianize
-Austric
-austrium
-Austroasiatic
-Austrogaea
-Austrogaean
-austromancy
-Austronesian
-Austrophil
-Austrophile
-Austrophilism
-Austroriparian
-ausu
-ausubo
-autacoid
-autacoidal
-autallotriomorphic
-autantitypy
-autarch
-autarchic
-autarchical
-Autarchoglossa
-autarchy
-autarkic
-autarkical
-autarkist
-autarky
-aute
-autechoscope
-autecious
-auteciously
-auteciousness
-autecism
-autecologic
-autecological
-autecologically
-autecologist
-autecology
-autecy
-autem
-authentic
-authentical
-authentically
-authenticalness
-authenticate
-authentication
-authenticator
-authenticity
-authenticly
-authenticness
-authigene
-authigenetic
-authigenic
-authigenous
-author
-authorcraft
-authoress
-authorhood
-authorial
-authorially
-authorish
-authorism
-authoritarian
-authoritarianism
-authoritative
-authoritatively
-authoritativeness
-authority
-authorizable
-authorization
-authorize
-authorized
-authorizer
-authorless
-authorling
-authorly
-authorship
-authotype
-autism
-autist
-autistic
-auto
-autoabstract
-autoactivation
-autoactive
-autoaddress
-autoagglutinating
-autoagglutination
-autoagglutinin
-autoalarm
-autoalkylation
-autoallogamous
-autoallogamy
-autoanalysis
-autoanalytic
-autoantibody
-autoanticomplement
-autoantitoxin
-autoasphyxiation
-autoaspiration
-autoassimilation
-autobahn
-autobasidia
-Autobasidiomycetes
-autobasidiomycetous
-autobasidium
-Autobasisii
-autobiographal
-autobiographer
-autobiographic
-autobiographical
-autobiographically
-autobiographist
-autobiography
-autobiology
-autoblast
-autoboat
-autoboating
-autobolide
-autobus
-autocab
-autocade
-autocall
-autocamp
-autocamper
-autocamping
-autocar
-autocarist
-autocarpian
-autocarpic
-autocarpous
-autocatalepsy
-autocatalysis
-autocatalytic
-autocatalytically
-autocatalyze
-autocatheterism
-autocephalia
-autocephality
-autocephalous
-autocephaly
-autoceptive
-autochemical
-autocholecystectomy
-autochrome
-autochromy
-autochronograph
-autochthon
-autochthonal
-autochthonic
-autochthonism
-autochthonous
-autochthonously
-autochthonousness
-autochthony
-autocide
-autocinesis
-autoclasis
-autoclastic
-autoclave
-autocoenobium
-autocoherer
-autocoid
-autocollimation
-autocollimator
-autocolony
-autocombustible
-autocombustion
-autocomplexes
-autocondensation
-autoconduction
-autoconvection
-autoconverter
-autocopist
-autocoprophagous
-autocorrosion
-autocracy
-autocrat
-autocratic
-autocratical
-autocratically
-autocrator
-autocratoric
-autocratorical
-autocratrix
-autocratship
-autocremation
-autocriticism
-autocystoplasty
-autocytolysis
-autocytolytic
-autodecomposition
-autodepolymerization
-autodermic
-autodestruction
-autodetector
-autodiagnosis
-autodiagnostic
-autodiagrammatic
-autodidact
-autodidactic
-autodifferentiation
-autodiffusion
-autodigestion
-autodigestive
-autodrainage
-autodrome
-autodynamic
-autodyne
-autoecholalia
-autoecic
-autoecious
-autoeciously
-autoeciousness
-autoecism
-autoecous
-autoecy
-autoeducation
-autoeducative
-autoelectrolysis
-autoelectrolytic
-autoelectronic
-autoelevation
-autoepigraph
-autoepilation
-autoerotic
-autoerotically
-autoeroticism
-autoerotism
-autoexcitation
-autofecundation
-autofermentation
-autoformation
-autofrettage
-autogamic
-autogamous
-autogamy
-autogauge
-autogeneal
-autogenesis
-autogenetic
-autogenetically
-autogenic
-autogenous
-autogenously
-autogeny
-Autogiro
-autogiro
-autognosis
-autognostic
-autograft
-autografting
-autogram
-autograph
-autographal
-autographer
-autographic
-autographical
-autographically
-autographism
-autographist
-autographometer
-autography
-autogravure
-Autoharp
-autoharp
-autoheader
-autohemic
-autohemolysin
-autohemolysis
-autohemolytic
-autohemorrhage
-autohemotherapy
-autoheterodyne
-autoheterosis
-autohexaploid
-autohybridization
-autohypnosis
-autohypnotic
-autohypnotism
-autohypnotization
-autoicous
-autoignition
-autoimmunity
-autoimmunization
-autoinduction
-autoinductive
-autoinfection
-autoinfusion
-autoinhibited
-autoinoculable
-autoinoculation
-autointellectual
-autointoxicant
-autointoxication
-autoirrigation
-autoist
-autojigger
-autojuggernaut
-autokinesis
-autokinetic
-autokrator
-autolaryngoscope
-autolaryngoscopic
-autolaryngoscopy
-autolater
-autolatry
-autolavage
-autolesion
-autolimnetic
-autolith
-autoloading
-autological
-autologist
-autologous
-autology
-autoluminescence
-autoluminescent
-autolysate
-autolysin
-autolysis
-autolytic
-Autolytus
-autolyzate
-autolyze
-automa
-automacy
-automanual
-automat
-automata
-automatic
-automatical
-automatically
-automaticity
-automatin
-automatism
-automatist
-automatization
-automatize
-automatograph
-automaton
-automatonlike
-automatous
-automechanical
-automelon
-autometamorphosis
-autometric
-autometry
-automobile
-automobilism
-automobilist
-automobilistic
-automobility
-automolite
-automonstration
-automorph
-automorphic
-automorphically
-automorphism
-automotive
-automotor
-automower
-automysophobia
-autonegation
-autonephrectomy
-autonephrotoxin
-autoneurotoxin
-autonitridation
-autonoetic
-autonomasy
-autonomic
-autonomical
-autonomically
-autonomist
-autonomize
-autonomous
-autonomously
-autonomy
-autonym
-autoparasitism
-autopathic
-autopathography
-autopathy
-autopelagic
-autopepsia
-autophagi
-autophagia
-autophagous
-autophagy
-autophobia
-autophoby
-autophon
-autophone
-autophonoscope
-autophonous
-autophony
-autophotoelectric
-autophotograph
-autophotometry
-autophthalmoscope
-autophyllogeny
-autophyte
-autophytic
-autophytically
-autophytograph
-autophytography
-autopilot
-autoplagiarism
-autoplasmotherapy
-autoplast
-autoplastic
-autoplasty
-autopneumatic
-autopoint
-autopoisonous
-autopolar
-autopolo
-autopoloist
-autopolyploid
-autopore
-autoportrait
-autoportraiture
-autopositive
-autopotent
-autoprogressive
-autoproteolysis
-autoprothesis
-autopsic
-autopsical
-autopsy
-autopsychic
-autopsychoanalysis
-autopsychology
-autopsychorhythmia
-autopsychosis
-autoptic
-autoptical
-autoptically
-autopticity
-autopyotherapy
-autoracemization
-autoradiograph
-autoradiographic
-autoradiography
-autoreduction
-autoregenerator
-autoregulation
-autoreinfusion
-autoretardation
-autorhythmic
-autorhythmus
-autoriser
-autorotation
-autorrhaphy
-Autosauri
-Autosauria
-autoschediasm
-autoschediastic
-autoschediastical
-autoschediastically
-autoschediaze
-autoscience
-autoscope
-autoscopic
-autoscopy
-autosender
-autosensitization
-autosensitized
-autosepticemia
-autoserotherapy
-autoserum
-autosexing
-autosight
-autosign
-autosite
-autositic
-autoskeleton
-autosled
-autoslip
-autosomal
-autosomatognosis
-autosomatognostic
-autosome
-autosoteric
-autosoterism
-autospore
-autosporic
-autospray
-autostability
-autostage
-autostandardization
-autostarter
-autostethoscope
-autostylic
-autostylism
-autostyly
-autosuggestibility
-autosuggestible
-autosuggestion
-autosuggestionist
-autosuggestive
-autosuppression
-autosymbiontic
-autosymbolic
-autosymbolical
-autosymbolically
-autosymnoia
-Autosyn
-autosyndesis
-autotelegraph
-autotelic
-autotetraploid
-autotetraploidy
-autothaumaturgist
-autotheater
-autotheism
-autotheist
-autotherapeutic
-autotherapy
-autothermy
-autotomic
-autotomize
-autotomous
-autotomy
-autotoxaemia
-autotoxic
-autotoxication
-autotoxicity
-autotoxicosis
-autotoxin
-autotoxis
-autotractor
-autotransformer
-autotransfusion
-autotransplant
-autotransplantation
-autotrepanation
-autotriploid
-autotriploidy
-autotroph
-autotrophic
-autotrophy
-autotropic
-autotropically
-autotropism
-autotruck
-autotuberculin
-autoturning
-autotype
-autotyphization
-autotypic
-autotypography
-autotypy
-autourine
-autovaccination
-autovaccine
-autovalet
-autovalve
-autovivisection
-autoxeny
-autoxidation
-autoxidator
-autoxidizability
-autoxidizable
-autoxidize
-autoxidizer
-autozooid
-autrefois
-autumn
-autumnal
-autumnally
-autumnian
-autumnity
-Autunian
-autunite
-auxamylase
-auxanogram
-auxanology
-auxanometer
-auxesis
-auxetic
-auxetical
-auxetically
-auxiliar
-auxiliarly
-auxiliary
-auxiliate
-auxiliation
-auxiliator
-auxiliatory
-auxilium
-auximone
-auxin
-auxinic
-auxinically
-auxoaction
-auxoamylase
-auxoblast
-auxobody
-auxocardia
-auxochrome
-auxochromic
-auxochromism
-auxochromous
-auxocyte
-auxoflore
-auxofluor
-auxograph
-auxographic
-auxohormone
-auxology
-auxometer
-auxospore
-auxosubstance
-auxotonic
-auxotox
-ava
-avadana
-avadavat
-avadhuta
-avahi
-avail
-availability
-available
-availableness
-availably
-availingly
-availment
-aval
-avalanche
-avalent
-avalvular
-Avanguardisti
-avania
-avanious
-Avanti
-avanturine
-Avar
-Avaradrano
-avaremotemo
-Avarian
-avarice
-avaricious
-avariciously
-avariciousness
-Avarish
-Avars
-avascular
-avast
-avaunt
-Ave
-ave
-avellan
-avellane
-avellaneous
-avellano
-avelonge
-aveloz
-Avena
-avenaceous
-avenage
-avenalin
-avener
-avenge
-avengeful
-avengement
-avenger
-avengeress
-avenging
-avengingly
-avenin
-avenolith
-avenous
-avens
-aventail
-Aventine
-aventurine
-avenue
-aver
-avera
-average
-averagely
-averager
-averah
-averil
-averin
-averment
-Avernal
-Avernus
-averrable
-averral
-Averrhoa
-Averroism
-Averroist
-Averroistic
-averruncate
-averruncation
-averruncator
-aversant
-aversation
-averse
-aversely
-averseness
-aversion
-aversive
-avert
-avertable
-averted
-avertedly
-averter
-avertible
-Avertin
-Avery
-Aves
-Avesta
-Avestan
-avian
-avianization
-avianize
-aviarist
-aviary
-aviate
-aviatic
-aviation
-aviator
-aviatorial
-aviatoriality
-aviatory
-aviatress
-aviatrices
-aviatrix
-Avicennia
-Avicenniaceae
-Avicennism
-avichi
-avicide
-avick
-avicolous
-Avicula
-avicular
-Avicularia
-avicularia
-avicularian
-Aviculariidae
-Avicularimorphae
-avicularium
-Aviculidae
-aviculture
-aviculturist
-avid
-avidious
-avidiously
-avidity
-avidly
-avidous
-avidya
-avifauna
-avifaunal
-avigate
-avigation
-avigator
-Avignonese
-avijja
-Avikom
-avine
-aviolite
-avirulence
-avirulent
-Avis
-aviso
-avital
-avitaminosis
-avitaminotic
-avitic
-avives
-avizandum
-avo
-avocado
-avocate
-avocation
-avocative
-avocatory
-avocet
-avodire
-avogadrite
-avoid
-avoidable
-avoidably
-avoidance
-avoider
-avoidless
-avoidment
-avoirdupois
-avolate
-avolation
-avolitional
-avondbloem
-avouch
-avouchable
-avoucher
-avouchment
-avourneen
-avow
-avowable
-avowableness
-avowably
-avowal
-avowance
-avowant
-avowed
-avowedly
-avowedness
-avower
-avowry
-avoyer
-avoyership
-Avshar
-avulse
-avulsion
-avuncular
-avunculate
-aw
-awa
-Awabakal
-awabi
-Awadhi
-awaft
-awag
-await
-awaiter
-Awaitlala
-awakable
-awake
-awaken
-awakenable
-awakener
-awakening
-awakeningly
-awakenment
-awald
-awalim
-awalt
-Awan
-awane
-awanting
-awapuhi
-award
-awardable
-awarder
-awardment
-aware
-awaredom
-awareness
-awaruite
-awash
-awaste
-awat
-awatch
-awater
-awave
-away
-awayness
-awber
-awd
-awe
-awearied
-aweary
-aweather
-aweband
-awedness
-awee
-aweek
-aweel
-aweigh
-Awellimiden
-awesome
-awesomely
-awesomeness
-awest
-aweto
-awfu
-awful
-awfully
-awfulness
-awheel
-awheft
-awhet
-awhile
-awhir
-awhirl
-awide
-awiggle
-awikiwiki
-awin
-awing
-awink
-awiwi
-awkward
-awkwardish
-awkwardly
-awkwardness
-awl
-awless
-awlessness
-awlwort
-awmous
-awn
-awned
-awner
-awning
-awninged
-awnless
-awnlike
-awny
-awoke
-Awol
-awork
-awreck
-awrist
-awrong
-awry
-Awshar
-ax
-axal
-axbreaker
-axe
-axed
-Axel
-axenic
-axes
-axfetch
-axhammer
-axhammered
-axhead
-axial
-axiality
-axially
-axiate
-axiation
-Axifera
-axiform
-axifugal
-axil
-axile
-axilemma
-axilemmata
-axilla
-axillae
-axillant
-axillar
-axillary
-axine
-axinite
-axinomancy
-axiolite
-axiolitic
-axiological
-axiologically
-axiologist
-axiology
-axiom
-axiomatic
-axiomatical
-axiomatically
-axiomatization
-axiomatize
-axion
-axiopisty
-Axis
-axis
-axised
-axisymmetric
-axisymmetrical
-axite
-axle
-axled
-axlesmith
-axletree
-axmaker
-axmaking
-axman
-axmanship
-axmaster
-Axminster
-axodendrite
-axofugal
-axogamy
-axoid
-axoidean
-axolemma
-axolotl
-axolysis
-axometer
-axometric
-axometry
-axon
-axonal
-axoneure
-axoneuron
-Axonia
-Axonolipa
-axonolipous
-axonometric
-axonometry
-Axonophora
-axonophorous
-Axonopus
-axonost
-axopetal
-axophyte
-axoplasm
-axopodia
-axopodium
-axospermous
-axostyle
-axseed
-axstone
-axtree
-Axumite
-axunge
-axweed
-axwise
-axwort
-Ay
-ay
-ayacahuite
-ayah
-Ayahuca
-Aydendron
-aye
-ayegreen
-ayelp
-ayenbite
-ayin
-Aylesbury
-ayless
-aylet
-ayllu
-Aymara
-Aymaran
-Aymoro
-ayond
-ayont
-ayous
-Ayrshire
-Aythya
-ayu
-Ayubite
-Ayyubid
-azadrachta
-azafrin
-Azalea
-azalea
-Azande
-azarole
-azedarach
-azelaic
-azelate
-Azelfafage
-azeotrope
-azeotropic
-azeotropism
-azeotropy
-Azerbaijanese
-Azerbaijani
-Azerbaijanian
-Azha
-azide
-aziethane
-Azilian
-azilut
-Azimech
-azimene
-azimethylene
-azimide
-azimine
-azimino
-aziminobenzene
-azimuth
-azimuthal
-azimuthally
-azine
-aziola
-azlactone
-azo
-azobacter
-azobenzene
-azobenzil
-azobenzoic
-azobenzol
-azoblack
-azoch
-azocochineal
-azocoralline
-azocorinth
-azocyanide
-azocyclic
-azodicarboxylic
-azodiphenyl
-azodisulphonic
-azoeosin
-azoerythrin
-azofication
-azofier
-azoflavine
-azoformamide
-azoformic
-azofy
-azogallein
-azogreen
-azogrenadine
-azohumic
-azoic
-azoimide
-azoisobutyronitrile
-azole
-azolitmin
-Azolla
-azomethine
-azon
-azonal
-azonaphthalene
-azonic
-azonium
-azoospermia
-azoparaffin
-azophen
-azophenetole
-azophenine
-azophenol
-azophenyl
-azophenylene
-azophosphin
-azophosphore
-azoprotein
-Azorian
-azorite
-azorubine
-azosulphine
-azosulphonic
-azotate
-azote
-azoted
-azotemia
-azotenesis
-azotetrazole
-azoth
-azothionium
-azotic
-azotine
-azotite
-azotize
-Azotobacter
-Azotobacterieae
-azotoluene
-azotometer
-azotorrhoea
-azotous
-azoturia
-azovernine
-azox
-azoxazole
-azoxime
-azoxine
-azoxonium
-azoxy
-azoxyanisole
-azoxybenzene
-azoxybenzoic
-azoxynaphthalene
-azoxyphenetole
-azoxytoluidine
-Aztec
-Azteca
-azteca
-Aztecan
-azthionium
-azulene
-azulite
-azulmic
-azumbre
-azure
-azurean
-azured
-azureous
-azurine
-azurite
-azurmalachite
-azurous
-azury
-Azygobranchia
-Azygobranchiata
-azygobranchiate
-azygomatous
-azygos
-azygosperm
-azygospore
-azygous
-azyme
-azymite
-azymous
-B
-b
-ba
-baa
-baahling
-Baal
-baal
-Baalath
-Baalish
-Baalism
-Baalist
-Baalite
-Baalitical
-Baalize
-Baalshem
-baar
-Bab
-baba
-babacoote
-babai
-babasco
-babassu
-babaylan
-Babbie
-Babbitt
-babbitt
-babbitter
-Babbittess
-Babbittian
-Babbittism
-Babbittry
-babblative
-babble
-babblement
-babbler
-babblesome
-babbling
-babblingly
-babblish
-babblishly
-babbly
-babby
-Babcock
-babe
-babehood
-Babel
-Babeldom
-babelet
-Babelic
-babelike
-Babelish
-Babelism
-Babelize
-babery
-babeship
-Babesia
-babesiasis
-Babhan
-Babi
-Babiana
-babiche
-babied
-Babiism
-babillard
-Babine
-babingtonite
-babirusa
-babish
-babished
-babishly
-babishness
-Babism
-Babist
-Babite
-bablah
-babloh
-baboen
-Babongo
-baboo
-baboodom
-babooism
-baboon
-baboonery
-baboonish
-baboonroot
-baboot
-babouche
-Babouvism
-Babouvist
-babroot
-Babs
-babu
-Babua
-babudom
-babuina
-babuism
-babul
-Babuma
-Babungera
-babushka
-baby
-babydom
-babyfied
-babyhood
-babyhouse
-babyish
-babyishly
-babyishness
-babyism
-babylike
-Babylon
-Babylonian
-Babylonic
-Babylonish
-Babylonism
-Babylonite
-Babylonize
-babyolatry
-babyship
-bac
-bacaba
-bacach
-bacalao
-bacao
-bacbakiri
-bacca
-baccaceous
-baccae
-baccalaurean
-baccalaureate
-baccara
-baccarat
-baccate
-baccated
-Bacchae
-bacchanal
-Bacchanalia
-bacchanalian
-bacchanalianism
-bacchanalianly
-bacchanalism
-bacchanalization
-bacchanalize
-bacchant
-bacchante
-bacchantes
-bacchantic
-bacchar
-baccharis
-baccharoid
-baccheion
-bacchiac
-bacchian
-Bacchic
-bacchic
-Bacchical
-Bacchides
-bacchii
-bacchius
-Bacchus
-Bacchuslike
-bacciferous
-bacciform
-baccivorous
-bach
-Bacharach
-bache
-bachel
-bachelor
-bachelordom
-bachelorhood
-bachelorism
-bachelorize
-bachelorlike
-bachelorly
-bachelorship
-bachelorwise
-bachelry
-Bachichi
-Bacillaceae
-bacillar
-Bacillariaceae
-bacillariaceous
-Bacillariales
-Bacillarieae
-Bacillariophyta
-bacillary
-bacillemia
-bacilli
-bacillian
-bacillicidal
-bacillicide
-bacillicidic
-bacilliculture
-bacilliform
-bacilligenic
-bacilliparous
-bacillite
-bacillogenic
-bacillogenous
-bacillophobia
-bacillosis
-bacilluria
-bacillus
-Bacis
-bacitracin
-back
-backache
-backaching
-backachy
-backage
-backband
-backbearing
-backbencher
-backbite
-backbiter
-backbitingly
-backblow
-backboard
-backbone
-backboned
-backboneless
-backbonelessness
-backbrand
-backbreaker
-backbreaking
-backcap
-backcast
-backchain
-backchat
-backcourt
-backcross
-backdoor
-backdown
-backdrop
-backed
-backen
-backer
-backet
-backfall
-backfatter
-backfield
-backfill
-backfiller
-backfilling
-backfire
-backfiring
-backflap
-backflash
-backflow
-backfold
-backframe
-backfriend
-backfurrow
-backgame
-backgammon
-background
-backhand
-backhanded
-backhandedly
-backhandedness
-backhander
-backhatch
-backheel
-backhooker
-backhouse
-backie
-backiebird
-backing
-backjaw
-backjoint
-backlands
-backlash
-backlashing
-backless
-backlet
-backlings
-backlog
-backlotter
-backmost
-backpedal
-backpiece
-backplate
-backrope
-backrun
-backsaw
-backscraper
-backset
-backsetting
-backsettler
-backshift
-backside
-backsight
-backslap
-backslapper
-backslapping
-backslide
-backslider
-backslidingness
-backspace
-backspacer
-backspang
-backspier
-backspierer
-backspin
-backspread
-backspringing
-backstaff
-backstage
-backstamp
-backstay
-backster
-backstick
-backstitch
-backstone
-backstop
-backstrap
-backstretch
-backstring
-backstrip
-backstroke
-backstromite
-backswept
-backswing
-backsword
-backswording
-backswordman
-backswordsman
-backtack
-backtender
-backtenter
-backtrack
-backtracker
-backtrick
-backup
-backveld
-backvelder
-backwall
-backward
-backwardation
-backwardly
-backwardness
-backwards
-backwash
-backwasher
-backwashing
-backwater
-backwatered
-backway
-backwood
-backwoods
-backwoodsiness
-backwoodsman
-backwoodsy
-backword
-backworm
-backwort
-backyarder
-baclin
-bacon
-baconer
-Baconian
-Baconianism
-Baconic
-Baconism
-Baconist
-baconize
-baconweed
-bacony
-Bacopa
-bacteremia
-bacteria
-Bacteriaceae
-bacteriaceous
-bacterial
-bacterially
-bacterian
-bacteric
-bactericholia
-bactericidal
-bactericide
-bactericidin
-bacterid
-bacteriemia
-bacteriform
-bacterin
-bacterioagglutinin
-bacterioblast
-bacteriocyte
-bacteriodiagnosis
-bacteriofluorescin
-bacteriogenic
-bacteriogenous
-bacteriohemolysin
-bacterioid
-bacterioidal
-bacteriologic
-bacteriological
-bacteriologically
-bacteriologist
-bacteriology
-bacteriolysin
-bacteriolysis
-bacteriolytic
-bacteriolyze
-bacteriopathology
-bacteriophage
-bacteriophagia
-bacteriophagic
-bacteriophagous
-bacteriophagy
-bacteriophobia
-bacterioprecipitin
-bacterioprotein
-bacteriopsonic
-bacteriopsonin
-bacteriopurpurin
-bacterioscopic
-bacterioscopical
-bacterioscopically
-bacterioscopist
-bacterioscopy
-bacteriosis
-bacteriosolvent
-bacteriostasis
-bacteriostat
-bacteriostatic
-bacteriotherapeutic
-bacteriotherapy
-bacteriotoxic
-bacteriotoxin
-bacteriotropic
-bacteriotropin
-bacteriotrypsin
-bacterious
-bacteritic
-bacterium
-bacteriuria
-bacterization
-bacterize
-bacteroid
-bacteroidal
-Bacteroideae
-Bacteroides
-Bactrian
-Bactris
-Bactrites
-bactriticone
-bactritoid
-bacula
-bacule
-baculi
-baculiferous
-baculiform
-baculine
-baculite
-Baculites
-baculitic
-baculiticone
-baculoid
-baculum
-baculus
-bacury
-bad
-Badaga
-badan
-Badarian
-badarrah
-Badawi
-baddeleyite
-badderlocks
-baddish
-baddishly
-baddishness
-baddock
-bade
-badenite
-badge
-badgeless
-badgeman
-badger
-badgerbrush
-badgerer
-badgeringly
-badgerlike
-badgerly
-badgerweed
-badiaga
-badian
-badigeon
-badinage
-badious
-badland
-badlands
-badly
-badminton
-badness
-Badon
-Baduhenna
-bae
-Baedeker
-Baedekerian
-Baeria
-baetuli
-baetulus
-baetyl
-baetylic
-baetylus
-baetzner
-bafaro
-baff
-baffeta
-baffle
-bafflement
-baffler
-baffling
-bafflingly
-bafflingness
-baffy
-baft
-bafta
-Bafyot
-bag
-baga
-Baganda
-bagani
-bagasse
-bagataway
-bagatelle
-bagatine
-bagattini
-bagattino
-Bagaudae
-Bagdad
-Bagdi
-bagel
-bagful
-baggage
-baggageman
-baggagemaster
-baggager
-baggala
-bagganet
-Baggara
-bagged
-bagger
-baggie
-baggily
-bagginess
-bagging
-baggit
-baggy
-Bagheli
-baghouse
-Baginda
-Bagirmi
-bagleaves
-baglike
-bagmaker
-bagmaking
-bagman
-bagnio
-bagnut
-bago
-Bagobo
-bagonet
-bagpipe
-bagpiper
-bagpipes
-bagplant
-bagrationite
-bagre
-bagreef
-bagroom
-baguette
-bagwig
-bagwigged
-bagworm
-bagwyn
-bah
-Bahai
-Bahaism
-Bahaist
-Baham
-Bahama
-Bahamian
-bahan
-bahar
-Bahaullah
-bahawder
-bahay
-bahera
-bahiaite
-Bahima
-bahisti
-Bahmani
-Bahmanid
-bahnung
-baho
-bahoe
-bahoo
-baht
-Bahuma
-bahur
-bahut
-Bahutu
-bahuvrihi
-Baianism
-baidarka
-Baidya
-Baiera
-baiginet
-baignet
-baikalite
-baikerinite
-baikerite
-baikie
-bail
-bailable
-bailage
-bailee
-bailer
-bailey
-bailie
-bailiery
-bailieship
-bailiff
-bailiffry
-bailiffship
-bailiwick
-bailliage
-baillone
-Baillonella
-bailment
-bailor
-bailpiece
-bailsman
-bailwood
-bain
-bainie
-Baining
-baioc
-baiocchi
-baiocco
-bairagi
-Bairam
-bairn
-bairnie
-bairnish
-bairnishness
-bairnliness
-bairnly
-bairnteam
-bairntime
-bairnwort
-Bais
-Baisakh
-baister
-bait
-baiter
-baith
-baittle
-baitylos
-baize
-bajada
-bajan
-Bajardo
-bajarigar
-Bajau
-Bajocian
-bajra
-bajree
-bajri
-bajury
-baka
-Bakairi
-bakal
-Bakalai
-Bakalei
-Bakatan
-bake
-bakeboard
-baked
-bakehouse
-Bakelite
-bakelite
-bakelize
-baken
-bakeoven
-bakepan
-baker
-bakerdom
-bakeress
-bakerite
-bakerless
-bakerly
-bakership
-bakery
-bakeshop
-bakestone
-Bakhtiari
-bakie
-baking
-bakingly
-bakli
-Bakongo
-Bakshaish
-baksheesh
-baktun
-Baku
-baku
-Bakuba
-bakula
-Bakunda
-Bakuninism
-Bakuninist
-bakupari
-Bakutu
-Bakwiri
-Bal
-bal
-Bala
-Balaam
-Balaamite
-Balaamitical
-balachong
-balaclava
-baladine
-Balaena
-Balaenicipites
-balaenid
-Balaenidae
-balaenoid
-Balaenoidea
-balaenoidean
-Balaenoptera
-Balaenopteridae
-balafo
-balagan
-balaghat
-balai
-Balaic
-Balak
-Balaklava
-balalaika
-Balan
-balance
-balanceable
-balanced
-balancedness
-balancelle
-balanceman
-balancement
-balancer
-balancewise
-balancing
-balander
-balandra
-balandrana
-balaneutics
-balangay
-balanic
-balanid
-Balanidae
-balaniferous
-balanism
-balanite
-Balanites
-balanitis
-balanoblennorrhea
-balanocele
-Balanoglossida
-Balanoglossus
-balanoid
-Balanophora
-Balanophoraceae
-balanophoraceous
-balanophore
-balanophorin
-balanoplasty
-balanoposthitis
-balanopreputial
-Balanops
-Balanopsidaceae
-Balanopsidales
-balanorrhagia
-Balanta
-Balante
-balantidial
-balantidiasis
-balantidic
-balantidiosis
-Balantidium
-Balanus
-Balao
-balao
-Balarama
-balas
-balata
-balatong
-balatron
-balatronic
-balausta
-balaustine
-balaustre
-Balawa
-Balawu
-balboa
-balbriggan
-balbutiate
-balbutient
-balbuties
-balconet
-balconied
-balcony
-bald
-baldachin
-baldachined
-baldachini
-baldachino
-baldberry
-baldcrown
-balden
-balder
-balderdash
-baldhead
-baldicoot
-Baldie
-baldish
-baldling
-baldly
-baldmoney
-baldness
-baldpate
-baldrib
-baldric
-baldricked
-baldricwise
-balductum
-Baldwin
-baldy
-bale
-Balearian
-Balearic
-Balearica
-baleen
-balefire
-baleful
-balefully
-balefulness
-balei
-baleise
-baleless
-baler
-balete
-Bali
-bali
-balibago
-Balija
-Balilla
-baline
-Balinese
-balinger
-balinghasay
-balisaur
-balistarius
-Balistes
-balistid
-Balistidae
-balistraria
-balita
-balk
-Balkan
-Balkanic
-Balkanization
-Balkanize
-Balkar
-balker
-balkingly
-Balkis
-balky
-ball
-ballad
-ballade
-balladeer
-ballader
-balladeroyal
-balladic
-balladical
-balladier
-balladism
-balladist
-balladize
-balladlike
-balladling
-balladmonger
-balladmongering
-balladry
-balladwise
-ballahoo
-ballam
-ballan
-ballant
-ballast
-ballastage
-ballaster
-ballasting
-ballata
-ballate
-ballatoon
-balldom
-balled
-baller
-ballerina
-ballet
-balletic
-balletomane
-Ballhausplatz
-balli
-ballist
-ballista
-ballistae
-ballistic
-ballistically
-ballistician
-ballistics
-Ballistite
-ballistocardiograph
-ballium
-ballmine
-ballogan
-ballonet
-balloon
-balloonation
-ballooner
-balloonery
-balloonet
-balloonfish
-balloonflower
-balloonful
-ballooning
-balloonish
-balloonist
-balloonlike
-ballot
-Ballota
-ballotade
-ballotage
-balloter
-balloting
-ballotist
-ballottement
-ballow
-Ballplatz
-ballplayer
-ballproof
-ballroom
-ballstock
-ballup
-ballweed
-bally
-ballyhack
-ballyhoo
-ballyhooer
-ballywack
-ballywrack
-balm
-balmacaan
-Balmarcodes
-Balmawhapple
-balmily
-balminess
-balmlike
-balmony
-Balmoral
-balmy
-balneal
-balneary
-balneation
-balneatory
-balneographer
-balneography
-balneologic
-balneological
-balneologist
-balneology
-balneophysiology
-balneotechnics
-balneotherapeutics
-balneotherapia
-balneotherapy
-Balnibarbi
-Baloch
-Baloghia
-Balolo
-balonea
-baloney
-baloo
-Balopticon
-Balor
-Baloskion
-Baloskionaceae
-balow
-balsa
-balsam
-balsamation
-Balsamea
-Balsameaceae
-balsameaceous
-balsamer
-balsamic
-balsamical
-balsamically
-balsamiferous
-balsamina
-Balsaminaceae
-balsaminaceous
-balsamine
-balsamitic
-balsamiticness
-balsamize
-balsamo
-Balsamodendron
-Balsamorrhiza
-balsamous
-balsamroot
-balsamum
-balsamweed
-balsamy
-Balt
-baltei
-balter
-balteus
-Balthasar
-Balti
-Baltic
-Baltimore
-Baltimorean
-baltimorite
-Baltis
-balu
-Baluba
-Baluch
-Baluchi
-Baluchistan
-baluchithere
-baluchitheria
-Baluchitherium
-baluchitherium
-Baluga
-Balunda
-balushai
-baluster
-balustered
-balustrade
-balustraded
-balustrading
-balut
-balwarra
-balza
-Balzacian
-balzarine
-bam
-Bamalip
-Bamangwato
-bamban
-Bambara
-bambini
-bambino
-bambocciade
-bamboo
-bamboozle
-bamboozlement
-bamboozler
-Bambos
-bamboula
-Bambuba
-Bambusa
-Bambuseae
-Bambute
-bamoth
-Ban
-ban
-Bana
-banaba
-banago
-banak
-banakite
-banal
-banality
-banally
-banana
-Bananaland
-Bananalander
-Banande
-bananist
-bananivorous
-banat
-Banate
-banatite
-banausic
-Banba
-Banbury
-banc
-banca
-bancal
-banchi
-banco
-bancus
-band
-Banda
-banda
-bandage
-bandager
-bandagist
-bandaite
-bandaka
-bandala
-bandalore
-bandanna
-bandannaed
-bandar
-bandarlog
-bandbox
-bandboxical
-bandboxy
-bandcase
-bandcutter
-bande
-bandeau
-banded
-bandelet
-bander
-Banderma
-banderole
-bandersnatch
-bandfish
-bandhava
-bandhook
-Bandhor
-bandhu
-bandi
-bandicoot
-bandicoy
-bandie
-bandikai
-bandiness
-banding
-bandit
-banditism
-banditry
-banditti
-bandle
-bandless
-bandlessly
-bandlessness
-bandlet
-bandman
-bandmaster
-bando
-bandog
-bandoleer
-bandoleered
-bandoline
-bandonion
-Bandor
-bandore
-bandrol
-bandsman
-bandstand
-bandster
-bandstring
-Bandusia
-Bandusian
-bandwork
-bandy
-bandyball
-bandyman
-bane
-baneberry
-baneful
-banefully
-banefulness
-banewort
-Banff
-bang
-banga
-Bangala
-bangalay
-bangalow
-Bangash
-bangboard
-bange
-banger
-banghy
-Bangia
-Bangiaceae
-bangiaceous
-Bangiales
-banging
-bangkok
-bangle
-bangled
-bangling
-bangster
-bangtail
-Bangwaketsi
-bani
-banian
-banig
-banilad
-banish
-banisher
-banishment
-banister
-Baniva
-baniwa
-baniya
-banjo
-banjoist
-banjore
-banjorine
-banjuke
-bank
-bankable
-Bankalachi
-bankbook
-banked
-banker
-bankera
-bankerdom
-bankeress
-banket
-bankfull
-banking
-bankman
-bankrider
-bankrupt
-bankruptcy
-bankruptism
-bankruptlike
-bankruptly
-bankruptship
-bankrupture
-bankshall
-Banksia
-Banksian
-bankside
-banksman
-bankweed
-banky
-banner
-bannered
-bannerer
-banneret
-bannerfish
-bannerless
-bannerlike
-bannerman
-bannerol
-bannerwise
-bannet
-banning
-bannister
-Bannock
-bannock
-Bannockburn
-banns
-bannut
-banovina
-banquet
-banqueteer
-banqueteering
-banqueter
-banquette
-bansalague
-banshee
-banstickle
-bant
-Bantam
-bantam
-bantamize
-bantamweight
-bantay
-bantayan
-banteng
-banter
-banterer
-banteringly
-bantery
-Bantingism
-bantingize
-bantling
-Bantoid
-Bantu
-banty
-banuyo
-banxring
-banya
-Banyai
-banyan
-Banyoro
-Banyuls
-banzai
-baobab
-bap
-Baphia
-Baphomet
-Baphometic
-Baptanodon
-Baptisia
-baptisin
-baptism
-baptismal
-baptismally
-Baptist
-baptistery
-baptistic
-baptizable
-baptize
-baptizee
-baptizement
-baptizer
-Baptornis
-bar
-bara
-barabara
-barabora
-Barabra
-Baraca
-barad
-baragnosis
-baragouin
-baragouinish
-Baraithas
-barajillo
-Baralipton
-Baramika
-barandos
-barangay
-barasingha
-barathea
-barathra
-barathrum
-barauna
-barb
-Barbacoa
-Barbacoan
-barbacou
-Barbadian
-Barbados
-barbal
-barbaloin
-Barbara
-barbaralalia
-Barbarea
-barbaresque
-Barbarian
-barbarian
-barbarianism
-barbarianize
-barbaric
-barbarical
-barbarically
-barbarious
-barbariousness
-barbarism
-barbarity
-barbarization
-barbarize
-barbarous
-barbarously
-barbarousness
-Barbary
-barbary
-barbas
-barbasco
-barbastel
-barbate
-barbated
-barbatimao
-barbe
-barbecue
-barbed
-barbeiro
-barbel
-barbellate
-barbellula
-barbellulate
-barber
-barberess
-barberfish
-barberish
-barberry
-barbershop
-barbet
-barbette
-Barbeyaceae
-barbican
-barbicel
-barbigerous
-barbion
-barbital
-barbitalism
-barbiton
-barbitone
-barbitos
-barbiturate
-barbituric
-barbless
-barblet
-barbone
-barbotine
-Barbra
-barbudo
-Barbula
-barbulate
-barbule
-barbulyie
-barbwire
-Barcan
-barcarole
-barcella
-barcelona
-Barcoo
-bard
-bardane
-bardash
-bardcraft
-bardel
-Bardesanism
-Bardesanist
-Bardesanite
-bardess
-bardic
-bardie
-bardiglio
-bardily
-bardiness
-barding
-bardish
-bardism
-bardlet
-bardlike
-bardling
-bardo
-Bardolater
-Bardolatry
-Bardolph
-Bardolphian
-bardship
-Bardulph
-bardy
-Bare
-bare
-bareback
-barebacked
-bareboat
-barebone
-bareboned
-bareca
-barefaced
-barefacedly
-barefacedness
-barefit
-barefoot
-barefooted
-barehanded
-barehead
-bareheaded
-bareheadedness
-barelegged
-barely
-barenecked
-bareness
-barer
-baresark
-baresma
-baretta
-barff
-barfish
-barfly
-barful
-bargain
-bargainee
-bargainer
-bargainor
-bargainwise
-bargander
-barge
-bargeboard
-bargee
-bargeer
-bargeese
-bargehouse
-bargelike
-bargeload
-bargeman
-bargemaster
-barger
-bargh
-bargham
-barghest
-bargoose
-Bari
-bari
-baria
-baric
-barid
-barie
-barile
-barilla
-baring
-baris
-barish
-barit
-barite
-baritone
-barium
-bark
-barkbound
-barkcutter
-barkeeper
-barken
-barkentine
-barker
-barkery
-barkevikite
-barkevikitic
-barkey
-barkhan
-barking
-barkingly
-Barkinji
-barkle
-barkless
-barklyite
-barkometer
-barkpeel
-barkpeeler
-barkpeeling
-barksome
-barky
-barlafumble
-barlafummil
-barless
-barley
-barleybird
-barleybreak
-barleycorn
-barleyhood
-barleymow
-barleysick
-barling
-barlock
-barlow
-barm
-barmaid
-barman
-barmaster
-barmbrack
-barmcloth
-Barmecidal
-Barmecide
-barmkin
-barmote
-barmskin
-barmy
-barmybrained
-barn
-Barnabas
-Barnabite
-Barnaby
-barnacle
-Barnard
-barnard
-barnbrack
-Barnburner
-Barney
-barney
-barnful
-barnhardtite
-barnman
-barnstorm
-barnstormer
-barnstorming
-Barnumism
-Barnumize
-barny
-barnyard
-Baroco
-barocyclonometer
-barodynamic
-barodynamics
-barognosis
-barogram
-barograph
-barographic
-baroi
-barolo
-barology
-Barolong
-barometer
-barometric
-barometrical
-barometrically
-barometrograph
-barometrography
-barometry
-barometz
-baromotor
-baron
-baronage
-baroness
-baronet
-baronetage
-baronetcy
-baronethood
-baronetical
-baronetship
-barong
-Baronga
-baronial
-baronize
-baronry
-baronship
-barony
-Baroque
-baroque
-baroscope
-baroscopic
-baroscopical
-Barosma
-barosmin
-barotactic
-barotaxis
-barotaxy
-barothermograph
-barothermohygrograph
-baroto
-Barotse
-barouche
-barouchet
-Barouni
-baroxyton
-barpost
-barquantine
-barra
-barrabkie
-barrable
-barrabora
-barracan
-barrack
-barracker
-barraclade
-barracoon
-barracouta
-barracuda
-barrad
-barragan
-barrage
-barragon
-barramunda
-barramundi
-barranca
-barrandite
-barras
-barrator
-barratrous
-barratrously
-barratry
-barred
-barrel
-barrelage
-barreled
-barreler
-barrelet
-barrelful
-barrelhead
-barrelmaker
-barrelmaking
-barrelwise
-barren
-barrenly
-barrenness
-barrenwort
-barrer
-barret
-Barrett
-barrette
-barretter
-barricade
-barricader
-barricado
-barrico
-barrier
-barriguda
-barrigudo
-barrikin
-barriness
-barring
-Barrington
-Barringtonia
-Barrio
-barrio
-barrister
-barristerial
-barristership
-barristress
-barroom
-barrow
-barrowful
-Barrowist
-barrowman
-barrulee
-barrulet
-barrulety
-barruly
-Barry
-barry
-Barsac
-barse
-barsom
-Bart
-bartender
-bartending
-barter
-barterer
-barth
-barthite
-bartholinitis
-Bartholomean
-Bartholomew
-Bartholomewtide
-Bartholomite
-bartizan
-bartizaned
-Bartlemy
-Bartlett
-Barton
-barton
-Bartonella
-Bartonia
-Bartram
-Bartramia
-Bartramiaceae
-Bartramian
-Bartsia
-baru
-Baruch
-Barundi
-baruria
-barvel
-barwal
-barway
-barways
-barwise
-barwood
-barycenter
-barycentric
-barye
-baryecoia
-baryglossia
-barylalia
-barylite
-baryphonia
-baryphonic
-baryphony
-barysilite
-barysphere
-baryta
-barytes
-barythymia
-barytic
-barytine
-barytocalcite
-barytocelestine
-barytocelestite
-baryton
-barytone
-barytophyllite
-barytostrontianite
-barytosulphate
-bas
-basal
-basale
-basalia
-basally
-basalt
-basaltes
-basaltic
-basaltiform
-basaltine
-basaltoid
-basanite
-basaree
-Bascology
-bascule
-base
-baseball
-baseballdom
-baseballer
-baseboard
-baseborn
-basebred
-based
-basehearted
-baseheartedness
-baselard
-baseless
-baselessly
-baselessness
-baselike
-baseliner
-Basella
-Basellaceae
-basellaceous
-basely
-baseman
-basement
-basementward
-baseness
-basenji
-bases
-bash
-bashaw
-bashawdom
-bashawism
-bashawship
-bashful
-bashfully
-bashfulness
-Bashilange
-Bashkir
-bashlyk
-Bashmuric
-basial
-basialveolar
-basiarachnitis
-basiarachnoiditis
-basiate
-basiation
-Basibracteolate
-basibranchial
-basibranchiate
-basibregmatic
-basic
-basically
-basichromatic
-basichromatin
-basichromatinic
-basichromiole
-basicity
-basicranial
-basicytoparaplastin
-basidia
-basidial
-basidigital
-basidigitale
-basidiogenetic
-basidiolichen
-Basidiolichenes
-basidiomycete
-Basidiomycetes
-basidiomycetous
-basidiophore
-basidiospore
-basidiosporous
-basidium
-basidorsal
-basifacial
-basification
-basifier
-basifixed
-basifugal
-basify
-basigamous
-basigamy
-basigenic
-basigenous
-basiglandular
-basigynium
-basihyal
-basihyoid
-Basil
-basil
-basilar
-Basilarchia
-basilary
-basilateral
-basilemma
-basileus
-Basilian
-basilic
-Basilica
-basilica
-Basilicae
-basilical
-basilican
-basilicate
-basilicon
-Basilics
-Basilidian
-Basilidianism
-basilinna
-basiliscan
-basiliscine
-Basiliscus
-basilisk
-basilissa
-Basilosauridae
-Basilosaurus
-basilweed
-basilysis
-basilyst
-basimesostasis
-basin
-basinasal
-basinasial
-basined
-basinerved
-basinet
-basinlike
-basioccipital
-basion
-basiophitic
-basiophthalmite
-basiophthalmous
-basiotribe
-basiotripsy
-basiparachromatin
-basiparaplastin
-basipetal
-basiphobia
-basipodite
-basipoditic
-basipterygial
-basipterygium
-basipterygoid
-basiradial
-basirhinal
-basirostral
-basis
-basiscopic
-basisphenoid
-basisphenoidal
-basitemporal
-basiventral
-basivertebral
-bask
-basker
-Baskerville
-basket
-basketball
-basketballer
-basketful
-basketing
-basketmaker
-basketmaking
-basketry
-basketware
-basketwoman
-basketwood
-basketwork
-basketworm
-Baskish
-Baskonize
-Basoche
-Basoga
-basoid
-Basoko
-Basommatophora
-basommatophorous
-bason
-Basongo
-basophile
-basophilia
-basophilic
-basophilous
-basophobia
-basos
-basote
-Basque
-basque
-basqued
-basquine
-bass
-Bassa
-Bassalia
-Bassalian
-bassan
-bassanello
-bassanite
-bassara
-bassarid
-Bassaris
-Bassariscus
-bassarisk
-basset
-bassetite
-bassetta
-Bassia
-bassie
-bassine
-bassinet
-bassist
-bassness
-basso
-bassoon
-bassoonist
-bassorin
-bassus
-basswood
-Bast
-bast
-basta
-Bastaard
-Bastard
-bastard
-bastardism
-bastardization
-bastardize
-bastardliness
-bastardly
-bastardy
-baste
-basten
-baster
-bastide
-bastille
-bastinade
-bastinado
-basting
-bastion
-bastionary
-bastioned
-bastionet
-bastite
-bastnasite
-basto
-baston
-basurale
-Basuto
-Bat
-bat
-bataan
-batad
-Batak
-batakan
-bataleur
-Batan
-batara
-batata
-Batatas
-batatilla
-Batavi
-Batavian
-batch
-batcher
-bate
-batea
-bateau
-bateaux
-bated
-Batekes
-batel
-bateman
-batement
-bater
-Batetela
-batfish
-batfowl
-batfowler
-batfowling
-Bath
-bath
-Bathala
-bathe
-batheable
-bather
-bathetic
-bathflower
-bathhouse
-bathic
-bathing
-bathless
-bathman
-bathmic
-bathmism
-bathmotropic
-bathmotropism
-bathochromatic
-bathochromatism
-bathochrome
-bathochromic
-bathochromy
-bathoflore
-bathofloric
-batholite
-batholith
-batholithic
-batholitic
-bathometer
-Bathonian
-bathophobia
-bathorse
-bathos
-bathrobe
-bathroom
-bathroomed
-bathroot
-bathtub
-bathukolpian
-bathukolpic
-bathvillite
-bathwort
-bathyal
-bathyanesthesia
-bathybian
-bathybic
-bathybius
-bathycentesis
-bathychrome
-bathycolpian
-bathycolpic
-bathycurrent
-bathyesthesia
-bathygraphic
-bathyhyperesthesia
-bathyhypesthesia
-bathylimnetic
-bathylite
-bathylith
-bathylithic
-bathylitic
-bathymeter
-bathymetric
-bathymetrical
-bathymetrically
-bathymetry
-bathyorographical
-bathypelagic
-bathyplankton
-bathyseism
-bathysmal
-bathysophic
-bathysophical
-bathysphere
-bathythermograph
-Batidaceae
-batidaceous
-batik
-batiker
-batikulin
-batikuling
-bating
-batino
-Batis
-batiste
-batitinan
-batlan
-batlike
-batling
-batlon
-batman
-Batocrinidae
-Batocrinus
-Batodendron
-batoid
-Batoidei
-Batoka
-baton
-Batonga
-batonistic
-batonne
-batophobia
-Batrachia
-batrachian
-batrachiate
-Batrachidae
-Batrachium
-batrachoid
-Batrachoididae
-batrachophagous
-Batrachophidia
-batrachophobia
-batrachoplasty
-Batrachospermum
-bats
-batsman
-batsmanship
-batster
-batswing
-batt
-Batta
-batta
-battailous
-Battak
-Battakhin
-battalia
-battalion
-battarism
-battarismus
-battel
-batteler
-batten
-battener
-battening
-batter
-batterable
-battercake
-batterdock
-battered
-batterer
-batterfang
-batteried
-batterman
-battery
-batteryman
-battik
-batting
-battish
-battle
-battled
-battledore
-battlefield
-battleful
-battleground
-battlement
-battlemented
-battleplane
-battler
-battleship
-battlesome
-battlestead
-battlewagon
-battleward
-battlewise
-battological
-battologist
-battologize
-battology
-battue
-batty
-batukite
-batule
-Batussi
-Batwa
-batwing
-batyphone
-batz
-batzen
-bauble
-baublery
-baubling
-Baubo
-bauch
-bauchle
-bauckie
-bauckiebird
-baud
-baudekin
-baudrons
-Bauera
-Bauhinia
-baul
-bauleah
-Baume
-baumhauerite
-baun
-bauno
-Baure
-bauson
-bausond
-bauta
-bauxite
-bauxitite
-Bavarian
-bavaroy
-bavary
-bavenite
-baviaantje
-Bavian
-bavian
-baviere
-bavin
-Bavius
-bavoso
-baw
-bawarchi
-bawbee
-bawcock
-bawd
-bawdily
-bawdiness
-bawdry
-bawdship
-bawdyhouse
-bawl
-bawler
-bawley
-bawn
-Bawra
-bawtie
-baxter
-Baxterian
-Baxterianism
-baxtone
-bay
-Baya
-baya
-bayadere
-bayal
-bayamo
-Bayard
-bayard
-bayardly
-bayberry
-baybolt
-baybush
-baycuru
-bayed
-bayeta
-baygall
-bayhead
-bayish
-bayldonite
-baylet
-baylike
-bayman
-bayness
-Bayogoula
-bayok
-bayonet
-bayoneted
-bayoneteer
-bayou
-baywood
-bazaar
-baze
-Bazigar
-bazoo
-bazooka
-bazzite
-bdellid
-Bdellidae
-bdellium
-bdelloid
-Bdelloida
-Bdellostoma
-Bdellostomatidae
-Bdellostomidae
-bdellotomy
-Bdelloura
-Bdellouridae
-be
-Bea
-beach
-beachcomb
-beachcomber
-beachcombing
-beached
-beachhead
-beachlamar
-beachless
-beachman
-beachmaster
-beachward
-beachy
-beacon
-beaconage
-beaconless
-beaconwise
-bead
-beaded
-beader
-beadflush
-beadhouse
-beadily
-beadiness
-beading
-beadle
-beadledom
-beadlehood
-beadleism
-beadlery
-beadleship
-beadlet
-beadlike
-beadman
-beadroll
-beadrow
-beadsman
-beadswoman
-beadwork
-beady
-Beagle
-beagle
-beagling
-beak
-beaked
-beaker
-beakerful
-beakerman
-beakermen
-beakful
-beakhead
-beakiron
-beaklike
-beaky
-beal
-beala
-bealing
-beallach
-bealtared
-Bealtine
-Bealtuinn
-beam
-beamage
-beambird
-beamed
-beamer
-beamfilling
-beamful
-beamhouse
-beamily
-beaminess
-beaming
-beamingly
-beamish
-beamless
-beamlet
-beamlike
-beamman
-beamsman
-beamster
-beamwork
-beamy
-bean
-beanbag
-beanbags
-beancod
-beanery
-beanfeast
-beanfeaster
-beanfield
-beanie
-beano
-beansetter
-beanshooter
-beanstalk
-beant
-beanweed
-beany
-beaproned
-bear
-bearable
-bearableness
-bearably
-bearance
-bearbaiter
-bearbaiting
-bearbane
-bearberry
-bearbind
-bearbine
-bearcoot
-beard
-bearded
-bearder
-beardie
-bearding
-beardless
-beardlessness
-beardom
-beardtongue
-beardy
-bearer
-bearess
-bearfoot
-bearherd
-bearhide
-bearhound
-bearing
-bearish
-bearishly
-bearishness
-bearlet
-bearlike
-bearm
-bearship
-bearskin
-beartongue
-bearward
-bearwood
-bearwort
-beast
-beastbane
-beastdom
-beasthood
-beastie
-beastily
-beastish
-beastishness
-beastlike
-beastlily
-beastliness
-beastling
-beastlings
-beastly
-beastman
-beastship
-beat
-Beata
-beata
-beatable
-beatae
-beatee
-beaten
-beater
-beaterman
-beath
-beatific
-beatifical
-beatifically
-beatificate
-beatification
-beatify
-beatinest
-beating
-beatitude
-Beatrice
-Beatrix
-beatster
-beatus
-beau
-Beauclerc
-beaufin
-Beaufort
-beauish
-beauism
-Beaujolais
-Beaumontia
-Beaune
-beaupere
-beauseant
-beauship
-beauteous
-beauteously
-beauteousness
-beauti
-beautician
-beautied
-beautification
-beautifier
-beautiful
-beautifully
-beautifulness
-beautify
-beautihood
-beauty
-beautydom
-beautyship
-beaux
-beaver
-Beaverboard
-beaverboard
-beavered
-beaverette
-beaverish
-beaverism
-beaverite
-beaverize
-Beaverkill
-beaverkin
-beaverlike
-beaverpelt
-beaverroot
-beaverteen
-beaverwood
-beavery
-beback
-bebait
-beballed
-bebang
-bebannered
-bebar
-bebaron
-bebaste
-bebat
-bebathe
-bebatter
-bebay
-bebeast
-bebed
-bebeerine
-bebeeru
-bebelted
-bebilya
-bebite
-bebization
-beblain
-beblear
-bebled
-bebless
-beblister
-beblood
-bebloom
-beblotch
-beblubber
-bebog
-bebop
-beboss
-bebotch
-bebothered
-bebouldered
-bebrave
-bebreech
-bebrine
-bebrother
-bebrush
-bebump
-bebusy
-bebuttoned
-becall
-becalm
-becalmment
-becap
-becard
-becarpet
-becarve
-becassocked
-becater
-because
-beccafico
-becense
-bechained
-bechalk
-bechance
-becharm
-bechase
-bechatter
-bechauffeur
-becheck
-becher
-bechern
-bechignoned
-bechirp
-Bechtler
-Bechuana
-becircled
-becivet
-Beck
-beck
-beckelite
-becker
-becket
-Beckie
-beckiron
-beckon
-beckoner
-beckoning
-beckoningly
-Becky
-beclad
-beclamor
-beclamour
-beclang
-beclart
-beclasp
-beclatter
-beclaw
-becloak
-beclog
-beclothe
-becloud
-beclout
-beclown
-becluster
-becobweb
-becoiffed
-becollier
-becolme
-becolor
-becombed
-become
-becomes
-becoming
-becomingly
-becomingness
-becomma
-becompass
-becompliment
-becoom
-becoresh
-becost
-becousined
-becovet
-becoward
-becquerelite
-becram
-becramp
-becrampon
-becrawl
-becreep
-becrime
-becrimson
-becrinolined
-becripple
-becroak
-becross
-becrowd
-becrown
-becrush
-becrust
-becry
-becudgel
-becuffed
-becuiba
-becumber
-becuna
-becurl
-becurry
-becurse
-becurtained
-becushioned
-becut
-bed
-bedabble
-bedad
-bedaggered
-bedamn
-bedamp
-bedangled
-bedare
-bedark
-bedarken
-bedash
-bedaub
-bedawn
-beday
-bedaze
-bedazement
-bedazzle
-bedazzlement
-bedazzling
-bedazzlingly
-bedboard
-bedbug
-bedcap
-bedcase
-bedchair
-bedchamber
-bedclothes
-bedcord
-bedcover
-bedded
-bedder
-bedding
-bedead
-bedeaf
-bedeafen
-bedebt
-bedeck
-bedecorate
-bedeguar
-bedel
-beden
-bedene
-bedesman
-bedevil
-bedevilment
-bedew
-bedewer
-bedewoman
-bedfast
-bedfellow
-bedfellowship
-bedflower
-bedfoot
-Bedford
-bedframe
-bedgery
-bedgoer
-bedgown
-bediademed
-bediamonded
-bediaper
-bedight
-bedikah
-bedim
-bedimple
-bedin
-bedip
-bedirt
-bedirter
-bedirty
-bedismal
-bedizen
-bedizenment
-bedkey
-bedlam
-bedlamer
-Bedlamic
-bedlamism
-bedlamite
-bedlamitish
-bedlamize
-bedlar
-bedless
-bedlids
-bedmaker
-bedmaking
-bedman
-bedmate
-bedoctor
-bedog
-bedolt
-bedot
-bedote
-Bedouin
-Bedouinism
-bedouse
-bedown
-bedoyo
-bedpan
-bedplate
-bedpost
-bedquilt
-bedrabble
-bedraggle
-bedragglement
-bedrail
-bedral
-bedrape
-bedravel
-bedrench
-bedress
-bedribble
-bedrid
-bedridden
-bedriddenness
-bedrift
-bedright
-bedrip
-bedrivel
-bedrizzle
-bedrock
-bedroll
-bedroom
-bedrop
-bedrown
-bedrowse
-bedrug
-bedscrew
-bedsick
-bedside
-bedsite
-bedsock
-bedsore
-bedspread
-bedspring
-bedstaff
-bedstand
-bedstaves
-bedstead
-bedstock
-bedstraw
-bedstring
-bedtick
-bedticking
-bedtime
-bedub
-beduchess
-beduck
-beduke
-bedull
-bedumb
-bedunce
-bedunch
-bedung
-bedur
-bedusk
-bedust
-bedwarf
-bedway
-bedways
-bedwell
-bedye
-Bee
-bee
-beearn
-beebread
-beech
-beechdrops
-beechen
-beechnut
-beechwood
-beechwoods
-beechy
-beedged
-beedom
-beef
-beefeater
-beefer
-beefhead
-beefheaded
-beefily
-beefin
-beefiness
-beefish
-beefishness
-beefless
-beeflower
-beefsteak
-beeftongue
-beefwood
-beefy
-beegerite
-beehead
-beeheaded
-beeherd
-beehive
-beehouse
-beeish
-beeishness
-beek
-beekeeper
-beekeeping
-beekite
-Beekmantown
-beelbow
-beelike
-beeline
-beelol
-Beelzebub
-Beelzebubian
-Beelzebul
-beeman
-beemaster
-been
-beennut
-beer
-beerage
-beerbachite
-beerbibber
-beerhouse
-beerily
-beeriness
-beerish
-beerishly
-beermaker
-beermaking
-beermonger
-beerocracy
-Beerothite
-beerpull
-beery
-bees
-beest
-beestings
-beeswax
-beeswing
-beeswinged
-beet
-beeth
-Beethovenian
-Beethovenish
-Beethovian
-beetle
-beetled
-beetlehead
-beetleheaded
-beetler
-beetlestock
-beetlestone
-beetleweed
-beetmister
-beetrave
-beetroot
-beetrooty
-beety
-beeve
-beevish
-beeware
-beeway
-beeweed
-beewise
-beewort
-befall
-befame
-befamilied
-befamine
-befan
-befancy
-befanned
-befathered
-befavor
-befavour
-befeather
-beferned
-befetished
-befetter
-befezzed
-befiddle
-befilch
-befile
-befilleted
-befilmed
-befilth
-befinger
-befire
-befist
-befit
-befitting
-befittingly
-befittingness
-beflag
-beflannel
-beflap
-beflatter
-beflea
-befleck
-beflounce
-beflour
-beflout
-beflower
-beflum
-befluster
-befoam
-befog
-befool
-befoolment
-befop
-before
-beforehand
-beforeness
-beforested
-beforetime
-beforetimes
-befortune
-befoul
-befouler
-befoulment
-befountained
-befraught
-befreckle
-befreeze
-befreight
-befret
-befriend
-befriender
-befriendment
-befrill
-befringe
-befriz
-befrocked
-befrogged
-befrounce
-befrumple
-befuddle
-befuddlement
-befuddler
-befume
-befurbelowed
-befurred
-beg
-begabled
-begad
-begall
-begani
-begar
-begari
-begarlanded
-begarnish
-begartered
-begash
-begat
-begaud
-begaudy
-begay
-begaze
-begeck
-begem
-beget
-begettal
-begetter
-beggable
-beggar
-beggardom
-beggarer
-beggaress
-beggarhood
-beggarism
-beggarlike
-beggarliness
-beggarly
-beggarman
-beggarweed
-beggarwise
-beggarwoman
-beggary
-Beggiatoa
-Beggiatoaceae
-beggiatoaceous
-begging
-beggingly
-beggingwise
-Beghard
-begift
-begiggle
-begild
-begin
-beginger
-beginner
-beginning
-begird
-begirdle
-beglad
-beglamour
-beglare
-beglerbeg
-beglerbeglic
-beglerbegluc
-beglerbegship
-beglerbey
-beglic
-beglide
-beglitter
-beglobed
-begloom
-begloze
-begluc
-beglue
-begnaw
-bego
-begob
-begobs
-begoggled
-begohm
-begone
-begonia
-Begoniaceae
-begoniaceous
-Begoniales
-begorra
-begorry
-begotten
-begottenness
-begoud
-begowk
-begowned
-begrace
-begrain
-begrave
-begray
-begrease
-begreen
-begrett
-begrim
-begrime
-begrimer
-begroan
-begrown
-begrudge
-begrudgingly
-begruntle
-begrutch
-begrutten
-beguard
-beguess
-beguile
-beguileful
-beguilement
-beguiler
-beguiling
-beguilingly
-Beguin
-Beguine
-beguine
-begulf
-begum
-begun
-begunk
-begut
-behale
-behalf
-behallow
-behammer
-behap
-behatted
-behave
-behavior
-behavioral
-behaviored
-behaviorism
-behaviorist
-behavioristic
-behavioristically
-behead
-beheadal
-beheader
-beheadlined
-behear
-behears
-behearse
-behedge
-beheld
-behelp
-behemoth
-behen
-behenate
-behenic
-behest
-behind
-behinder
-behindhand
-behindsight
-behint
-behn
-behold
-beholdable
-beholden
-beholder
-beholding
-beholdingness
-behoney
-behoof
-behooped
-behoot
-behoove
-behooveful
-behoovefully
-behoovefulness
-behooves
-behooving
-behoovingly
-behorn
-behorror
-behowl
-behung
-behusband
-behymn
-behypocrite
-beice
-Beid
-beige
-being
-beingless
-beingness
-beinked
-beira
-beisa
-Beja
-bejabers
-bejade
-bejan
-bejant
-bejaundice
-bejazz
-bejel
-bejewel
-bejezebel
-bejig
-bejuggle
-bejumble
-bekah
-bekerchief
-bekick
-bekilted
-beking
-bekinkinite
-bekiss
-bekko
-beknave
-beknight
-beknit
-beknived
-beknotted
-beknottedly
-beknottedness
-beknow
-beknown
-Bel
-bel
-bela
-belabor
-belaced
-beladle
-belady
-belage
-belah
-Belait
-Belaites
-belam
-Belamcanda
-belanda
-belar
-belard
-belash
-belate
-belated
-belatedly
-belatedness
-belatticed
-belaud
-belauder
-belavendered
-belay
-belayer
-belch
-belcher
-beld
-beldam
-beldamship
-belderroot
-belduque
-beleaf
-beleaguer
-beleaguerer
-beleaguerment
-beleap
-beleave
-belecture
-beledgered
-belee
-belemnid
-belemnite
-Belemnites
-belemnitic
-Belemnitidae
-belemnoid
-Belemnoidea
-beletter
-belfried
-belfry
-belga
-Belgae
-Belgian
-Belgic
-Belgophile
-Belgrade
-Belgravia
-Belgravian
-Belial
-Belialic
-Belialist
-belibel
-belick
-belie
-belief
-beliefful
-belieffulness
-beliefless
-belier
-believability
-believable
-believableness
-believe
-believer
-believing
-believingly
-belight
-beliked
-Belili
-belimousined
-Belinda
-Belinuridae
-Belinurus
-belion
-beliquor
-Belis
-belite
-belitter
-belittle
-belittlement
-belittler
-belive
-bell
-Bella
-Bellabella
-Bellacoola
-belladonna
-bellarmine
-Bellatrix
-bellbind
-bellbird
-bellbottle
-bellboy
-belle
-belled
-belledom
-Belleek
-bellehood
-belleric
-Bellerophon
-Bellerophontidae
-belletrist
-belletristic
-bellflower
-bellhanger
-bellhanging
-bellhop
-bellhouse
-bellicism
-bellicose
-bellicosely
-bellicoseness
-bellicosity
-bellied
-belliferous
-belligerence
-belligerency
-belligerent
-belligerently
-belling
-bellipotent
-Bellis
-bellite
-bellmaker
-bellmaking
-bellman
-bellmanship
-bellmaster
-bellmouth
-bellmouthed
-Bellona
-Bellonian
-bellonion
-bellote
-Bellovaci
-bellow
-bellower
-bellows
-bellowsful
-bellowslike
-bellowsmaker
-bellowsmaking
-bellowsman
-bellpull
-belltail
-belltopper
-belltopperdom
-bellware
-bellwaver
-bellweed
-bellwether
-bellwind
-bellwine
-bellwood
-bellwort
-belly
-bellyache
-bellyband
-bellyer
-bellyfish
-bellyflaught
-bellyful
-bellying
-bellyland
-bellylike
-bellyman
-bellypiece
-bellypinch
-beloam
-beloeilite
-beloid
-belomancy
-Belone
-belonesite
-belong
-belonger
-belonging
-belonid
-Belonidae
-belonite
-belonoid
-belonosphaerite
-belord
-Belostoma
-Belostomatidae
-Belostomidae
-belout
-belove
-beloved
-below
-belowstairs
-belozenged
-Belshazzar
-Belshazzaresque
-belsire
-belt
-Beltane
-belted
-Beltene
-belter
-Beltian
-beltie
-beltine
-belting
-Beltir
-Beltis
-beltmaker
-beltmaking
-beltman
-belton
-beltwise
-Beluchi
-Belucki
-beluga
-belugite
-belute
-belve
-belvedere
-Belverdian
-bely
-belying
-belyingly
-belzebuth
-bema
-bemad
-bemadam
-bemaddening
-bemail
-bemaim
-bemajesty
-beman
-bemangle
-bemantle
-bemar
-bemartyr
-bemask
-bemaster
-bemat
-bemata
-bemaul
-bemazed
-Bemba
-Bembecidae
-Bembex
-bemeal
-bemean
-bemedaled
-bemedalled
-bementite
-bemercy
-bemingle
-beminstrel
-bemire
-bemirement
-bemirror
-bemirrorment
-bemist
-bemistress
-bemitered
-bemitred
-bemix
-bemoan
-bemoanable
-bemoaner
-bemoaning
-bemoaningly
-bemoat
-bemock
-bemoil
-bemoisten
-bemole
-bemolt
-bemonster
-bemoon
-bemotto
-bemoult
-bemouth
-bemuck
-bemud
-bemuddle
-bemuddlement
-bemuddy
-bemuffle
-bemurmur
-bemuse
-bemused
-bemusedly
-bemusement
-bemusk
-bemuslined
-bemuzzle
-Ben
-ben
-bena
-benab
-Benacus
-bename
-benami
-benamidar
-benasty
-benben
-bench
-benchboard
-bencher
-benchership
-benchfellow
-benchful
-benching
-benchland
-benchlet
-benchman
-benchwork
-benchy
-bencite
-bend
-benda
-bendability
-bendable
-bended
-bender
-bending
-bendingly
-bendlet
-bendsome
-bendwise
-bendy
-bene
-beneaped
-beneath
-beneception
-beneceptive
-beneceptor
-benedicite
-Benedict
-benedict
-Benedicta
-Benedictine
-Benedictinism
-benediction
-benedictional
-benedictionary
-benedictive
-benedictively
-benedictory
-Benedictus
-benedight
-benefaction
-benefactive
-benefactor
-benefactorship
-benefactory
-benefactress
-benefic
-benefice
-beneficed
-beneficeless
-beneficence
-beneficent
-beneficential
-beneficently
-beneficial
-beneficially
-beneficialness
-beneficiary
-beneficiaryship
-beneficiate
-beneficiation
-benefit
-benefiter
-beneighbored
-Benelux
-benempt
-benempted
-beneplacito
-benet
-Benetnasch
-benettle
-Beneventan
-Beneventana
-benevolence
-benevolent
-benevolently
-benevolentness
-benevolist
-beng
-Bengal
-Bengalese
-Bengali
-Bengalic
-bengaline
-Bengola
-Beni
-beni
-benight
-benighted
-benightedness
-benighten
-benighter
-benightmare
-benightment
-benign
-benignancy
-benignant
-benignantly
-benignity
-benignly
-Benin
-Benincasa
-benison
-benitoite
-benj
-Benjamin
-benjamin
-benjaminite
-Benjamite
-Benjy
-benjy
-Benkulen
-benmost
-benn
-benne
-bennel
-Bennet
-bennet
-Bennettitaceae
-bennettitaceous
-Bennettitales
-Bennettites
-bennetweed
-Benny
-benny
-beno
-benorth
-benote
-bensel
-bensh
-benshea
-benshee
-benshi
-Benson
-bent
-bentang
-benthal
-Benthamic
-Benthamism
-Benthamite
-benthic
-benthon
-benthonic
-benthos
-Bentincks
-bentiness
-benting
-Benton
-bentonite
-bentstar
-bentwood
-benty
-Benu
-benumb
-benumbed
-benumbedness
-benumbing
-benumbingly
-benumbment
-benward
-benweed
-benzacridine
-benzal
-benzalacetone
-benzalacetophenone
-benzalaniline
-benzalazine
-benzalcohol
-benzalcyanhydrin
-benzaldehyde
-benzaldiphenyl
-benzaldoxime
-benzalethylamine
-benzalhydrazine
-benzalphenylhydrazone
-benzalphthalide
-benzamide
-benzamido
-benzamine
-benzaminic
-benzamino
-benzanalgen
-benzanilide
-benzanthrone
-benzantialdoxime
-benzazide
-benzazimide
-benzazine
-benzazole
-benzbitriazole
-benzdiazine
-benzdifuran
-benzdioxazine
-benzdioxdiazine
-benzdioxtriazine
-Benzedrine
-benzein
-benzene
-benzenediazonium
-benzenoid
-benzenyl
-benzhydrol
-benzhydroxamic
-benzidine
-benzidino
-benzil
-benzilic
-benzimidazole
-benziminazole
-benzinduline
-benzine
-benzo
-benzoate
-benzoated
-benzoazurine
-benzobis
-benzocaine
-benzocoumaran
-benzodiazine
-benzodiazole
-benzoflavine
-benzofluorene
-benzofulvene
-benzofuran
-benzofuroquinoxaline
-benzofuryl
-benzoglycolic
-benzoglyoxaline
-benzohydrol
-benzoic
-benzoid
-benzoin
-benzoinated
-benzoiodohydrin
-benzol
-benzolate
-benzole
-benzolize
-benzomorpholine
-benzonaphthol
-benzonitrile
-benzonitrol
-benzoperoxide
-benzophenanthrazine
-benzophenanthroline
-benzophenazine
-benzophenol
-benzophenone
-benzophenothiazine
-benzophenoxazine
-benzophloroglucinol
-benzophosphinic
-benzophthalazine
-benzopinacone
-benzopyran
-benzopyranyl
-benzopyrazolone
-benzopyrylium
-benzoquinoline
-benzoquinone
-benzoquinoxaline
-benzosulphimide
-benzotetrazine
-benzotetrazole
-benzothiazine
-benzothiazole
-benzothiazoline
-benzothiodiazole
-benzothiofuran
-benzothiophene
-benzothiopyran
-benzotoluide
-benzotriazine
-benzotriazole
-benzotrichloride
-benzotrifuran
-benzoxate
-benzoxy
-benzoxyacetic
-benzoxycamphor
-benzoxyphenanthrene
-benzoyl
-benzoylate
-benzoylation
-benzoylformic
-benzoylglycine
-benzpinacone
-benzthiophen
-benztrioxazine
-benzyl
-benzylamine
-benzylic
-benzylidene
-benzylpenicillin
-beode
-Beothuk
-Beothukan
-Beowulf
-bepaid
-Bepaint
-bepale
-bepaper
-beparch
-beparody
-beparse
-bepart
-bepaste
-bepastured
-bepat
-bepatched
-bepaw
-bepearl
-bepelt
-bepen
-bepepper
-beperiwigged
-bepester
-bepewed
-bephilter
-bephrase
-bepicture
-bepiece
-bepierce
-bepile
-bepill
-bepillared
-bepimple
-bepinch
-bepistoled
-bepity
-beplague
-beplaided
-beplaster
-beplumed
-bepommel
-bepowder
-bepraise
-bepraisement
-bepraiser
-beprank
-bepray
-bepreach
-bepress
-bepretty
-bepride
-beprose
-bepuddle
-bepuff
-bepun
-bepurple
-bepuzzle
-bepuzzlement
-bequalm
-bequeath
-bequeathable
-bequeathal
-bequeather
-bequeathment
-bequest
-bequirtle
-bequote
-ber
-berain
-berairou
-berakah
-berake
-berakoth
-berapt
-berascal
-berat
-berate
-berattle
-beraunite
-beray
-berbamine
-Berber
-Berberi
-Berberian
-berberid
-Berberidaceae
-berberidaceous
-berberine
-Berberis
-berberry
-Berchemia
-Berchta
-berdache
-bere
-Berean
-bereason
-bereave
-bereavement
-bereaven
-bereaver
-bereft
-berend
-Berengaria
-Berengarian
-Berengarianism
-berengelite
-Berenice
-Bereshith
-beresite
-beret
-berewick
-berg
-bergalith
-Bergama
-Bergamask
-bergamiol
-Bergamo
-Bergamot
-bergamot
-bergander
-bergaptene
-berger
-berghaan
-berginization
-berginize
-berglet
-bergschrund
-Bergsonian
-Bergsonism
-bergut
-bergy
-bergylt
-berhyme
-Beri
-beribanded
-beribboned
-beriberi
-beriberic
-beride
-berigora
-beringed
-beringite
-beringleted
-berinse
-berith
-Berkeleian
-Berkeleianism
-Berkeleyism
-Berkeleyite
-berkelium
-berkovets
-berkowitz
-Berkshire
-berley
-berlin
-berline
-Berliner
-berlinite
-Berlinize
-berm
-Bermuda
-Bermudian
-bermudite
-Bern
-Bernard
-Bernardina
-Bernardine
-berne
-Bernese
-Bernice
-Bernicia
-bernicle
-Bernie
-Berninesque
-Bernoullian
-berobed
-Beroe
-Beroida
-Beroidae
-beroll
-Berossos
-berouged
-beround
-berrendo
-berret
-berri
-berried
-berrier
-berrigan
-berrugate
-berry
-berrybush
-berryless
-berrylike
-berrypicker
-berrypicking
-berseem
-berserk
-berserker
-Bersiamite
-Bersil
-Bert
-Bertat
-Berteroa
-berth
-Bertha
-berthage
-berthed
-berther
-berthierite
-berthing
-Berthold
-Bertholletia
-Bertie
-Bertolonia
-Bertram
-bertram
-Bertrand
-bertrandite
-bertrum
-beruffed
-beruffled
-berust
-bervie
-berycid
-Berycidae
-beryciform
-berycine
-berycoid
-Berycoidea
-berycoidean
-Berycoidei
-Berycomorphi
-beryl
-berylate
-beryllia
-berylline
-berylliosis
-beryllium
-berylloid
-beryllonate
-beryllonite
-beryllosis
-Berytidae
-Beryx
-berzelianite
-berzeliite
-bes
-besa
-besagne
-besaiel
-besaint
-besan
-besanctify
-besauce
-bescab
-bescarf
-bescatter
-bescent
-bescorch
-bescorn
-bescoundrel
-bescour
-bescourge
-bescramble
-bescrape
-bescratch
-bescrawl
-bescreen
-bescribble
-bescurf
-bescurvy
-bescutcheon
-beseam
-besee
-beseech
-beseecher
-beseeching
-beseechingly
-beseechingness
-beseechment
-beseem
-beseeming
-beseemingly
-beseemingness
-beseemliness
-beseemly
-beseen
-beset
-besetment
-besetter
-besetting
-beshackle
-beshade
-beshadow
-beshag
-beshake
-beshame
-beshawled
-beshear
-beshell
-beshield
-beshine
-beshiver
-beshlik
-beshod
-beshout
-beshow
-beshower
-beshrew
-beshriek
-beshrivel
-beshroud
-besiclometer
-beside
-besides
-besiege
-besieged
-besiegement
-besieger
-besieging
-besiegingly
-besigh
-besilver
-besin
-besing
-besiren
-besit
-beslab
-beslap
-beslash
-beslave
-beslaver
-besleeve
-beslime
-beslimer
-beslings
-beslipper
-beslobber
-beslow
-beslubber
-beslur
-beslushed
-besmear
-besmearer
-besmell
-besmile
-besmirch
-besmircher
-besmirchment
-besmoke
-besmooth
-besmother
-besmouch
-besmudge
-besmut
-besmutch
-besnare
-besneer
-besnivel
-besnow
-besnuff
-besodden
-besogne
-besognier
-besoil
-besom
-besomer
-besonnet
-besoot
-besoothe
-besoothement
-besot
-besotment
-besotted
-besottedly
-besottedness
-besotting
-besottingly
-besought
-besoul
-besour
-bespangle
-bespate
-bespatter
-bespatterer
-bespatterment
-bespawl
-bespeak
-bespeakable
-bespeaker
-bespecked
-bespeckle
-bespecklement
-bespectacled
-besped
-bespeech
-bespeed
-bespell
-bespelled
-bespend
-bespete
-bespew
-bespice
-bespill
-bespin
-bespirit
-bespit
-besplash
-besplatter
-besplit
-bespoke
-bespoken
-bespot
-bespottedness
-bespouse
-bespout
-bespray
-bespread
-besprent
-besprinkle
-besprinkler
-bespurred
-besputter
-bespy
-besqueeze
-besquib
-besra
-Bess
-Bessarabian
-Besselian
-Bessemer
-bessemer
-Bessemerize
-bessemerize
-Bessera
-Bessi
-Bessie
-Bessy
-best
-bestab
-bestain
-bestamp
-bestar
-bestare
-bestarve
-bestatued
-bestay
-bestayed
-bestead
-besteer
-bestench
-bester
-bestial
-bestialism
-bestialist
-bestiality
-bestialize
-bestially
-bestiarian
-bestiarianism
-bestiary
-bestick
-bestill
-bestink
-bestir
-bestness
-bestock
-bestore
-bestorm
-bestove
-bestow
-bestowable
-bestowage
-bestowal
-bestower
-bestowing
-bestowment
-bestraddle
-bestrapped
-bestraught
-bestraw
-bestreak
-bestream
-bestrew
-bestrewment
-bestride
-bestripe
-bestrode
-bestubbled
-bestuck
-bestud
-besugar
-besuit
-besully
-beswarm
-besweatered
-besweeten
-beswelter
-beswim
-beswinge
-beswitch
-bet
-Beta
-beta
-betacism
-betacismus
-betafite
-betag
-betail
-betailor
-betaine
-betainogen
-betalk
-betallow
-betangle
-betanglement
-betask
-betassel
-betatron
-betattered
-betaxed
-betear
-beteela
-beteem
-betel
-Betelgeuse
-Beth
-beth
-bethabara
-bethankit
-bethel
-Bethesda
-bethflower
-bethink
-Bethlehem
-Bethlehemite
-bethought
-bethrall
-bethreaten
-bethroot
-Bethuel
-bethumb
-bethump
-bethunder
-bethwack
-Bethylidae
-betide
-betimber
-betimes
-betinge
-betipple
-betire
-betis
-betitle
-betocsin
-betoil
-betoken
-betokener
-betone
-betongue
-Betonica
-betony
-betorcin
-betorcinol
-betoss
-betowel
-betowered
-Betoya
-Betoyan
-betrace
-betrail
-betrample
-betrap
-betravel
-betray
-betrayal
-betrayer
-betrayment
-betread
-betrend
-betrim
-betrinket
-betroth
-betrothal
-betrothed
-betrothment
-betrough
-betrousered
-betrumpet
-betrunk
-Betsey
-Betsileos
-Betsimisaraka
-betso
-Betsy
-Betta
-betted
-better
-betterer
-bettergates
-bettering
-betterly
-betterment
-bettermost
-betterness
-betters
-Bettina
-Bettine
-betting
-bettong
-bettonga
-Bettongia
-bettor
-Betty
-betty
-betuckered
-Betula
-Betulaceae
-betulaceous
-betulin
-betulinamaric
-betulinic
-betulinol
-Betulites
-beturbaned
-betusked
-betutor
-betutored
-betwattled
-between
-betweenbrain
-betweenity
-betweenmaid
-betweenness
-betweenwhiles
-betwine
-betwit
-betwixen
-betwixt
-beudantite
-Beulah
-beuniformed
-bevatron
-beveil
-bevel
-beveled
-beveler
-bevelled
-bevelment
-bevenom
-bever
-beverage
-Beverly
-beverse
-bevesseled
-bevesselled
-beveto
-bevillain
-bevined
-bevoiled
-bevomit
-bevue
-bevy
-bewail
-bewailable
-bewailer
-bewailing
-bewailingly
-bewailment
-bewaitered
-bewall
-beware
-bewash
-bewaste
-bewater
-beweary
-beweep
-beweeper
-bewelcome
-bewelter
-bewept
-bewest
-bewet
-bewhig
-bewhiskered
-bewhisper
-bewhistle
-bewhite
-bewhiten
-bewidow
-bewig
-bewigged
-bewilder
-bewildered
-bewilderedly
-bewilderedness
-bewildering
-bewilderingly
-bewilderment
-bewimple
-bewinged
-bewinter
-bewired
-bewitch
-bewitchedness
-bewitcher
-bewitchery
-bewitchful
-bewitching
-bewitchingly
-bewitchingness
-bewitchment
-bewith
-bewizard
-bework
-beworm
-beworn
-beworry
-beworship
-bewrap
-bewrathed
-bewray
-bewrayer
-bewrayingly
-bewrayment
-bewreath
-bewreck
-bewrite
-bey
-beydom
-beylic
-beylical
-beyond
-beyrichite
-beyship
-Bezaleel
-Bezaleelian
-bezant
-bezantee
-bezanty
-bezel
-bezesteen
-bezetta
-bezique
-bezoar
-bezoardic
-bezonian
-Bezpopovets
-bezzi
-bezzle
-bezzo
-bhabar
-Bhadon
-Bhaga
-bhagavat
-bhagavata
-bhaiachari
-bhaiyachara
-bhakta
-bhakti
-bhalu
-bhandar
-bhandari
-bhang
-bhangi
-Bhar
-bhara
-bharal
-Bharata
-bhat
-bhava
-Bhavani
-bheesty
-bhikku
-bhikshu
-Bhil
-Bhili
-Bhima
-Bhojpuri
-bhoosa
-Bhotia
-Bhotiya
-Bhowani
-bhoy
-Bhumij
-bhungi
-bhungini
-bhut
-Bhutanese
-Bhutani
-bhutatathata
-Bhutia
-biabo
-biacetyl
-biacetylene
-biacid
-biacromial
-biacuminate
-biacuru
-bialate
-biallyl
-bialveolar
-Bianca
-Bianchi
-bianchite
-bianco
-biangular
-biangulate
-biangulated
-biangulous
-bianisidine
-biannual
-biannually
-biannulate
-biarchy
-biarcuate
-biarcuated
-biarticular
-biarticulate
-biarticulated
-bias
-biasness
-biasteric
-biaswise
-biatomic
-biauricular
-biauriculate
-biaxal
-biaxial
-biaxiality
-biaxially
-biaxillary
-bib
-bibacious
-bibacity
-bibasic
-bibation
-bibb
-bibber
-bibble
-bibbler
-bibbons
-bibcock
-bibenzyl
-bibi
-Bibio
-bibionid
-Bibionidae
-bibiri
-bibitory
-Bible
-bibless
-Biblic
-Biblical
-Biblicality
-Biblically
-Biblicism
-Biblicist
-Biblicistic
-Biblicolegal
-Biblicoliterary
-Biblicopsychological
-biblioclasm
-biblioclast
-bibliofilm
-bibliogenesis
-bibliognost
-bibliognostic
-bibliogony
-bibliograph
-bibliographer
-bibliographic
-bibliographical
-bibliographically
-bibliographize
-bibliography
-biblioklept
-bibliokleptomania
-bibliokleptomaniac
-bibliolater
-bibliolatrous
-bibliolatry
-bibliological
-bibliologist
-bibliology
-bibliomancy
-bibliomane
-bibliomania
-bibliomaniac
-bibliomaniacal
-bibliomanian
-bibliomanianism
-bibliomanism
-bibliomanist
-bibliopegic
-bibliopegist
-bibliopegistic
-bibliopegy
-bibliophage
-bibliophagic
-bibliophagist
-bibliophagous
-bibliophile
-bibliophilic
-bibliophilism
-bibliophilist
-bibliophilistic
-bibliophily
-bibliophobia
-bibliopolar
-bibliopole
-bibliopolery
-bibliopolic
-bibliopolical
-bibliopolically
-bibliopolism
-bibliopolist
-bibliopolistic
-bibliopoly
-bibliosoph
-bibliotaph
-bibliotaphic
-bibliothec
-bibliotheca
-bibliothecal
-bibliothecarial
-bibliothecarian
-bibliothecary
-bibliotherapeutic
-bibliotherapist
-bibliotherapy
-bibliothetic
-bibliotic
-bibliotics
-bibliotist
-Biblism
-Biblist
-biblus
-biborate
-bibracteate
-bibracteolate
-bibulosity
-bibulous
-bibulously
-bibulousness
-Bibulus
-bicalcarate
-bicameral
-bicameralism
-bicamerist
-bicapitate
-bicapsular
-bicarbonate
-bicarbureted
-bicarinate
-bicarpellary
-bicarpellate
-bicaudal
-bicaudate
-Bice
-bice
-bicellular
-bicentenary
-bicentennial
-bicephalic
-bicephalous
-biceps
-bicetyl
-bichir
-bichloride
-bichord
-bichromate
-bichromatic
-bichromatize
-bichrome
-bichromic
-bichy
-biciliate
-biciliated
-bicipital
-bicipitous
-bicircular
-bicirrose
-bick
-bicker
-bickerer
-bickern
-biclavate
-biclinium
-bicollateral
-bicollaterality
-bicolligate
-bicolor
-bicolored
-bicolorous
-biconcave
-biconcavity
-bicondylar
-bicone
-biconic
-biconical
-biconically
-biconjugate
-biconsonantal
-biconvex
-bicorn
-bicornate
-bicorne
-bicorned
-bicornous
-bicornuate
-bicornuous
-bicornute
-bicorporal
-bicorporate
-bicorporeal
-bicostate
-bicrenate
-bicrescentic
-bicrofarad
-bicron
-bicrural
-bicursal
-bicuspid
-bicuspidate
-bicyanide
-bicycle
-bicycler
-bicyclic
-bicyclism
-bicyclist
-bicyclo
-bicycloheptane
-bicylindrical
-bid
-bidactyl
-bidactyle
-bidactylous
-bidar
-bidarka
-bidcock
-biddable
-biddableness
-biddably
-biddance
-Biddelian
-bidder
-bidding
-Biddulphia
-Biddulphiaceae
-Biddy
-biddy
-bide
-Bidens
-bident
-bidental
-bidentate
-bidented
-bidential
-bidenticulate
-bider
-bidet
-bidigitate
-bidimensional
-biding
-bidirectional
-bidiurnal
-Bidpai
-bidri
-biduous
-bieberite
-Biedermeier
-bield
-bieldy
-bielectrolysis
-bielenite
-Bielid
-Bielorouss
-bien
-bienly
-bienness
-biennia
-biennial
-biennially
-biennium
-bier
-bierbalk
-biethnic
-bietle
-bifacial
-bifanged
-bifara
-bifarious
-bifariously
-bifer
-biferous
-biff
-biffin
-bifid
-bifidate
-bifidated
-bifidity
-bifidly
-bifilar
-bifilarly
-bifistular
-biflabellate
-biflagellate
-biflecnode
-biflected
-biflex
-biflorate
-biflorous
-bifluoride
-bifocal
-bifoil
-bifold
-bifolia
-bifoliate
-bifoliolate
-bifolium
-biforked
-biform
-biformed
-biformity
-biforous
-bifront
-bifrontal
-bifronted
-bifurcal
-bifurcate
-bifurcated
-bifurcately
-bifurcation
-big
-biga
-bigamic
-bigamist
-bigamistic
-bigamize
-bigamous
-bigamously
-bigamy
-bigarade
-bigaroon
-bigarreau
-bigbloom
-bigemina
-bigeminal
-bigeminate
-bigeminated
-bigeminum
-bigener
-bigeneric
-bigential
-bigeye
-bigg
-biggah
-biggen
-bigger
-biggest
-biggin
-biggish
-biggonet
-bigha
-bighead
-bighearted
-bigheartedness
-bighorn
-bight
-biglandular
-biglenoid
-biglot
-bigmouth
-bigmouthed
-bigness
-Bignonia
-Bignoniaceae
-bignoniaceous
-bignoniad
-bignou
-bigoniac
-bigonial
-bigot
-bigoted
-bigotedly
-bigotish
-bigotry
-bigotty
-bigroot
-bigthatch
-biguanide
-biguttate
-biguttulate
-bigwig
-bigwigged
-bigwiggedness
-bigwiggery
-bigwiggism
-Bihai
-Biham
-bihamate
-Bihari
-biharmonic
-bihourly
-bihydrazine
-bija
-bijasal
-bijou
-bijouterie
-bijoux
-bijugate
-bijugular
-bike
-bikh
-bikhaconitine
-bikini
-Bikol
-Bikram
-Bikukulla
-Bilaan
-bilabe
-bilabial
-bilabiate
-bilalo
-bilamellar
-bilamellate
-bilamellated
-bilaminar
-bilaminate
-bilaminated
-bilander
-bilateral
-bilateralism
-bilaterality
-bilaterally
-bilateralness
-Bilati
-bilberry
-bilbie
-bilbo
-bilboquet
-bilby
-bilch
-bilcock
-bildar
-bilders
-bile
-bilestone
-bilge
-bilgy
-Bilharzia
-bilharzial
-bilharziasis
-bilharzic
-bilharziosis
-bilianic
-biliary
-biliate
-biliation
-bilic
-bilicyanin
-bilifaction
-biliferous
-bilification
-bilifuscin
-bilify
-bilihumin
-bilimbi
-bilimbing
-biliment
-Bilin
-bilinear
-bilineate
-bilingual
-bilingualism
-bilingually
-bilinguar
-bilinguist
-bilinigrin
-bilinite
-bilio
-bilious
-biliously
-biliousness
-biliprasin
-bilipurpurin
-bilipyrrhin
-bilirubin
-bilirubinemia
-bilirubinic
-bilirubinuria
-biliteral
-biliteralism
-bilith
-bilithon
-biliverdic
-biliverdin
-bilixanthin
-bilk
-bilker
-Bill
-bill
-billa
-billable
-billabong
-billback
-billbeetle
-Billbergia
-billboard
-billbroking
-billbug
-billed
-biller
-billet
-billeter
-billethead
-billeting
-billetwood
-billety
-billfish
-billfold
-billhead
-billheading
-billholder
-billhook
-billian
-billiard
-billiardist
-billiardly
-billiards
-Billie
-Billiken
-billikin
-billing
-billingsgate
-billion
-billionaire
-billionism
-billionth
-billitonite
-Billjim
-billman
-billon
-billot
-billow
-billowiness
-billowy
-billposter
-billposting
-billsticker
-billsticking
-Billy
-billy
-billyboy
-billycan
-billycock
-billyer
-billyhood
-billywix
-bilo
-bilobated
-bilobe
-bilobed
-bilobiate
-bilobular
-bilocation
-bilocellate
-bilocular
-biloculate
-Biloculina
-biloculine
-bilophodont
-Biloxi
-bilsh
-Bilskirnir
-bilsted
-biltong
-biltongue
-Bim
-bimaculate
-bimaculated
-bimalar
-Bimana
-bimanal
-bimane
-bimanous
-bimanual
-bimanually
-bimarginate
-bimarine
-bimastic
-bimastism
-bimastoid
-bimasty
-bimaxillary
-bimbil
-Bimbisara
-bimeby
-bimensal
-bimester
-bimestrial
-bimetalic
-bimetallism
-bimetallist
-bimetallistic
-bimillenary
-bimillennium
-bimillionaire
-Bimini
-Bimmeler
-bimodal
-bimodality
-bimolecular
-bimonthly
-bimotored
-bimotors
-bimucronate
-bimuscular
-bin
-binal
-binaphthyl
-binarium
-binary
-binate
-binately
-bination
-binational
-binaural
-binauricular
-binbashi
-bind
-binder
-bindery
-bindheimite
-binding
-bindingly
-bindingness
-bindle
-bindlet
-bindoree
-bindweb
-bindweed
-bindwith
-bindwood
-bine
-binervate
-bineweed
-bing
-binge
-bingey
-binghi
-bingle
-bingo
-bingy
-binh
-Bini
-biniodide
-Binitarian
-Binitarianism
-bink
-binman
-binna
-binnacle
-binning
-binnite
-binnogue
-bino
-binocle
-binocular
-binocularity
-binocularly
-binoculate
-binodal
-binode
-binodose
-binodous
-binomenclature
-binomial
-binomialism
-binomially
-binominal
-binominated
-binominous
-binormal
-binotic
-binotonous
-binous
-binoxalate
-binoxide
-bint
-bintangor
-binturong
-binuclear
-binucleate
-binucleated
-binucleolate
-binukau
-Binzuru
-biobibliographical
-biobibliography
-bioblast
-bioblastic
-biocatalyst
-biocellate
-biocentric
-biochemic
-biochemical
-biochemically
-biochemics
-biochemist
-biochemistry
-biochemy
-biochore
-bioclimatic
-bioclimatology
-biocoenose
-biocoenosis
-biocoenotic
-biocycle
-biod
-biodynamic
-biodynamical
-biodynamics
-biodyne
-bioecologic
-bioecological
-bioecologically
-bioecologist
-bioecology
-biogen
-biogenase
-biogenesis
-biogenesist
-biogenetic
-biogenetical
-biogenetically
-biogenetics
-biogenous
-biogeny
-biogeochemistry
-biogeographic
-biogeographical
-biogeographically
-biogeography
-biognosis
-biograph
-biographee
-biographer
-biographic
-biographical
-biographically
-biographist
-biographize
-biography
-bioherm
-biokinetics
-biolinguistics
-biolith
-biologese
-biologic
-biological
-biologically
-biologicohumanistic
-biologism
-biologist
-biologize
-biology
-bioluminescence
-bioluminescent
-biolysis
-biolytic
-biomagnetic
-biomagnetism
-biomathematics
-biome
-biomechanical
-biomechanics
-biometeorology
-biometer
-biometric
-biometrical
-biometrically
-biometrician
-biometricist
-biometrics
-biometry
-biomicroscopy
-bion
-bionergy
-bionomic
-bionomical
-bionomically
-bionomics
-bionomist
-bionomy
-biophagism
-biophagous
-biophagy
-biophilous
-biophore
-biophotophone
-biophysical
-biophysicochemical
-biophysics
-biophysiography
-biophysiological
-biophysiologist
-biophysiology
-biophyte
-bioplasm
-bioplasmic
-bioplast
-bioplastic
-bioprecipitation
-biopsic
-biopsy
-biopsychic
-biopsychical
-biopsychological
-biopsychologist
-biopsychology
-biopyribole
-bioral
-biorbital
-biordinal
-bioreaction
-biorgan
-bios
-bioscope
-bioscopic
-bioscopy
-biose
-biosis
-biosocial
-biosociological
-biosphere
-biostatic
-biostatical
-biostatics
-biostatistics
-biosterin
-biosterol
-biostratigraphy
-biosynthesis
-biosynthetic
-biosystematic
-biosystematics
-biosystematist
-biosystematy
-Biota
-biota
-biotaxy
-biotechnics
-biotic
-biotical
-biotics
-biotin
-biotite
-biotitic
-biotome
-biotomy
-biotope
-biotype
-biotypic
-biovular
-biovulate
-bioxalate
-bioxide
-bipack
-bipaleolate
-Bipaliidae
-Bipalium
-bipalmate
-biparasitic
-biparental
-biparietal
-biparous
-biparted
-bipartible
-bipartient
-bipartile
-bipartisan
-bipartisanship
-bipartite
-bipartitely
-bipartition
-biparty
-bipaschal
-bipectinate
-bipectinated
-biped
-bipedal
-bipedality
-bipedism
-bipeltate
-bipennate
-bipennated
-bipenniform
-biperforate
-bipersonal
-bipetalous
-biphase
-biphasic
-biphenol
-biphenyl
-biphenylene
-bipinnaria
-bipinnate
-bipinnated
-bipinnately
-bipinnatifid
-bipinnatiparted
-bipinnatipartite
-bipinnatisect
-bipinnatisected
-biplanal
-biplanar
-biplane
-biplicate
-biplicity
-biplosion
-biplosive
-bipod
-bipolar
-bipolarity
-bipolarize
-Bipont
-Bipontine
-biporose
-biporous
-biprism
-biprong
-bipunctal
-bipunctate
-bipunctual
-bipupillate
-bipyramid
-bipyramidal
-bipyridine
-bipyridyl
-biquadrantal
-biquadrate
-biquadratic
-biquarterly
-biquartz
-biquintile
-biracial
-biracialism
-biradial
-biradiate
-biradiated
-biramous
-birational
-birch
-birchbark
-birchen
-birching
-birchman
-birchwood
-bird
-birdbander
-birdbanding
-birdbath
-birdberry
-birdcall
-birdcatcher
-birdcatching
-birdclapper
-birdcraft
-birddom
-birdeen
-birder
-birdglue
-birdhood
-birdhouse
-birdie
-birdikin
-birding
-birdland
-birdless
-birdlet
-birdlike
-birdlime
-birdling
-birdlore
-birdman
-birdmouthed
-birdnest
-birdnester
-birdseed
-birdstone
-birdweed
-birdwise
-birdwoman
-birdy
-birectangular
-birefracting
-birefraction
-birefractive
-birefringence
-birefringent
-bireme
-biretta
-Birgus
-biri
-biriba
-birimose
-birk
-birken
-Birkenhead
-Birkenia
-Birkeniidae
-birkie
-birkremite
-birl
-birle
-birler
-birlie
-birlieman
-birlinn
-birma
-Birmingham
-Birminghamize
-birn
-birny
-Biron
-birostrate
-birostrated
-birotation
-birotatory
-birr
-birse
-birsle
-birsy
-birth
-birthbed
-birthday
-birthland
-birthless
-birthmark
-birthmate
-birthnight
-birthplace
-birthright
-birthroot
-birthstone
-birthstool
-birthwort
-birthy
-bis
-bisabol
-bisaccate
-bisacromial
-bisalt
-Bisaltae
-bisantler
-bisaxillary
-bisbeeite
-biscacha
-Biscanism
-Biscayan
-Biscayanism
-biscayen
-Biscayner
-bischofite
-biscotin
-biscuit
-biscuiting
-biscuitlike
-biscuitmaker
-biscuitmaking
-biscuitroot
-biscuitry
-bisdiapason
-bisdimethylamino
-bisect
-bisection
-bisectional
-bisectionally
-bisector
-bisectrices
-bisectrix
-bisegment
-biseptate
-biserial
-biserially
-biseriate
-biseriately
-biserrate
-bisetose
-bisetous
-bisexed
-bisext
-bisexual
-bisexualism
-bisexuality
-bisexually
-bisexuous
-bisglyoxaline
-Bishareen
-Bishari
-Bisharin
-bishop
-bishopdom
-bishopess
-bishopful
-bishophood
-bishopless
-bishoplet
-bishoplike
-bishopling
-bishopric
-bishopship
-bishopweed
-bisiliac
-bisilicate
-bisiliquous
-bisimine
-bisinuate
-bisinuation
-bisischiadic
-bisischiatic
-Bisley
-bislings
-bismar
-Bismarck
-Bismarckian
-Bismarckianism
-bismarine
-bismerpund
-bismillah
-bismite
-Bismosol
-bismuth
-bismuthal
-bismuthate
-bismuthic
-bismuthide
-bismuthiferous
-bismuthine
-bismuthinite
-bismuthite
-bismuthous
-bismuthyl
-bismutite
-bismutoplagionite
-bismutosmaltite
-bismutosphaerite
-bisnaga
-bison
-bisonant
-bisontine
-bisphenoid
-bispinose
-bispinous
-bispore
-bisporous
-bisque
-bisquette
-bissext
-bissextile
-bisson
-bistate
-bistephanic
-bister
-bistered
-bistetrazole
-bisti
-bistipular
-bistipulate
-bistipuled
-bistort
-Bistorta
-bistournage
-bistoury
-bistratal
-bistratose
-bistriate
-bistriazole
-bistro
-bisubstituted
-bisubstitution
-bisulcate
-bisulfid
-bisulphate
-bisulphide
-bisulphite
-bisyllabic
-bisyllabism
-bisymmetric
-bisymmetrical
-bisymmetrically
-bisymmetry
-bit
-bitable
-bitangent
-bitangential
-bitanhol
-bitartrate
-bitbrace
-bitch
-bite
-bitemporal
-bitentaculate
-biter
-biternate
-biternately
-bitesheep
-bitewing
-bitheism
-Bithynian
-biti
-biting
-bitingly
-bitingness
-Bitis
-bitless
-bito
-bitolyl
-bitonality
-bitreadle
-bitripartite
-bitripinnatifid
-bitriseptate
-bitrochanteric
-bitstock
-bitstone
-bitt
-bitted
-bitten
-bitter
-bitterbark
-bitterblain
-bitterbloom
-bitterbur
-bitterbush
-bitterful
-bitterhead
-bitterhearted
-bitterheartedness
-bittering
-bitterish
-bitterishness
-bitterless
-bitterling
-bitterly
-bittern
-bitterness
-bitternut
-bitterroot
-bitters
-bittersweet
-bitterweed
-bitterwood
-bitterworm
-bitterwort
-bitthead
-bittie
-Bittium
-bittock
-bitty
-bitubercular
-bituberculate
-bituberculated
-Bitulithic
-bitulithic
-bitume
-bitumed
-bitumen
-bituminate
-bituminiferous
-bituminization
-bituminize
-bituminoid
-bituminous
-bitwise
-bityite
-bitypic
-biune
-biunial
-biunity
-biunivocal
-biurate
-biurea
-biuret
-bivalence
-bivalency
-bivalent
-bivalve
-bivalved
-Bivalvia
-bivalvian
-bivalvous
-bivalvular
-bivariant
-bivariate
-bivascular
-bivaulted
-bivector
-biventer
-biventral
-biverbal
-bivinyl
-bivious
-bivittate
-bivocal
-bivocalized
-bivoltine
-bivoluminous
-bivouac
-biwa
-biweekly
-biwinter
-Bixa
-Bixaceae
-bixaceous
-bixbyite
-bixin
-biyearly
-biz
-bizardite
-bizarre
-bizarrely
-bizarreness
-Bizen
-bizet
-bizonal
-bizone
-Bizonia
-bizygomatic
-bizz
-Bjorne
-blab
-blabber
-blabberer
-blachong
-black
-blackacre
-blackamoor
-blackback
-blackball
-blackballer
-blackband
-Blackbeard
-blackbelly
-blackberry
-blackbine
-blackbird
-blackbirder
-blackbirding
-blackboard
-blackboy
-blackbreast
-blackbush
-blackbutt
-blackcap
-blackcoat
-blackcock
-blackdamp
-blacken
-blackener
-blackening
-blacker
-blacketeer
-blackey
-blackeyes
-blackface
-Blackfeet
-blackfellow
-blackfellows
-blackfin
-blackfire
-blackfish
-blackfisher
-blackfishing
-Blackfoot
-blackfoot
-Blackfriars
-blackguard
-blackguardism
-blackguardize
-blackguardly
-blackguardry
-Blackhander
-blackhead
-blackheads
-blackheart
-blackhearted
-blackheartedness
-blackie
-blacking
-blackish
-blackishly
-blackishness
-blackit
-blackjack
-blackland
-blackleg
-blackleggery
-blacklegism
-blacklegs
-blackly
-blackmail
-blackmailer
-blackneb
-blackneck
-blackness
-blacknob
-blackout
-blackpoll
-blackroot
-blackseed
-blackshirted
-blacksmith
-blacksmithing
-blackstick
-blackstrap
-blacktail
-blackthorn
-blacktongue
-blacktree
-blackwash
-blackwasher
-blackwater
-blackwood
-blackwork
-blackwort
-blacky
-blad
-bladder
-bladderet
-bladderless
-bladderlike
-bladdernose
-bladdernut
-bladderpod
-bladderseed
-bladderweed
-bladderwort
-bladdery
-blade
-bladebone
-bladed
-bladelet
-bladelike
-blader
-bladesmith
-bladewise
-blading
-bladish
-blady
-bladygrass
-blae
-blaeberry
-blaeness
-blaewort
-blaff
-blaffert
-blaflum
-blah
-blahlaut
-blain
-Blaine
-Blair
-blair
-blairmorite
-Blake
-blake
-blakeberyed
-blamable
-blamableness
-blamably
-blame
-blamed
-blameful
-blamefully
-blamefulness
-blameless
-blamelessly
-blamelessness
-blamer
-blameworthiness
-blameworthy
-blaming
-blamingly
-blan
-blanc
-blanca
-blancard
-Blanch
-blanch
-blancher
-blanching
-blanchingly
-blancmange
-blancmanger
-blanco
-bland
-blanda
-Blandfordia
-blandiloquence
-blandiloquious
-blandiloquous
-blandish
-blandisher
-blandishing
-blandishingly
-blandishment
-blandly
-blandness
-blank
-blankard
-blankbook
-blanked
-blankeel
-blanket
-blanketed
-blanketeer
-blanketflower
-blanketing
-blanketless
-blanketmaker
-blanketmaking
-blanketry
-blanketweed
-blankety
-blanking
-blankish
-Blankit
-blankite
-blankly
-blankness
-blanky
-blanque
-blanquillo
-blare
-Blarina
-blarney
-blarneyer
-blarnid
-blarny
-blart
-blas
-blase
-blash
-blashy
-Blasia
-blaspheme
-blasphemer
-blasphemous
-blasphemously
-blasphemousness
-blasphemy
-blast
-blasted
-blastema
-blastemal
-blastematic
-blastemic
-blaster
-blastful
-blasthole
-blastid
-blastie
-blasting
-blastment
-blastocarpous
-blastocheme
-blastochyle
-blastocoele
-blastocolla
-blastocyst
-blastocyte
-blastoderm
-blastodermatic
-blastodermic
-blastodisk
-blastogenesis
-blastogenetic
-blastogenic
-blastogeny
-blastogranitic
-blastoid
-Blastoidea
-blastoma
-blastomata
-blastomere
-blastomeric
-Blastomyces
-blastomycete
-Blastomycetes
-blastomycetic
-blastomycetous
-blastomycosis
-blastomycotic
-blastoneuropore
-Blastophaga
-blastophitic
-blastophoral
-blastophore
-blastophoric
-blastophthoria
-blastophthoric
-blastophyllum
-blastoporal
-blastopore
-blastoporic
-blastoporphyritic
-blastosphere
-blastospheric
-blastostylar
-blastostyle
-blastozooid
-blastplate
-blastula
-blastulae
-blastular
-blastulation
-blastule
-blasty
-blat
-blatancy
-blatant
-blatantly
-blate
-blately
-blateness
-blather
-blatherer
-blatherskite
-blathery
-blatjang
-Blatta
-blatta
-Blattariae
-blatter
-blatterer
-blatti
-blattid
-Blattidae
-blattiform
-Blattodea
-blattoid
-Blattoidea
-blaubok
-Blaugas
-blauwbok
-blaver
-blaw
-blawort
-blay
-Blayne
-blaze
-blazer
-blazing
-blazingly
-blazon
-blazoner
-blazoning
-blazonment
-blazonry
-blazy
-bleaberry
-bleach
-bleachability
-bleachable
-bleached
-bleacher
-bleacherite
-bleacherman
-bleachery
-bleachfield
-bleachground
-bleachhouse
-bleaching
-bleachman
-bleachworks
-bleachyard
-bleak
-bleakish
-bleakly
-bleakness
-bleaky
-blear
-bleared
-blearedness
-bleareye
-bleariness
-blearness
-bleary
-bleat
-bleater
-bleating
-bleatingly
-bleaty
-bleb
-blebby
-blechnoid
-Blechnum
-bleck
-blee
-bleed
-bleeder
-bleeding
-bleekbok
-bleery
-bleeze
-bleezy
-blellum
-blemish
-blemisher
-blemishment
-Blemmyes
-blench
-blencher
-blenching
-blenchingly
-blencorn
-blend
-blendcorn
-blende
-blended
-blender
-blending
-blendor
-blendure
-blendwater
-blennadenitis
-blennemesis
-blennenteria
-blennenteritis
-blenniid
-Blenniidae
-blenniiform
-Blenniiformes
-blennioid
-Blennioidea
-blennocele
-blennocystitis
-blennoemesis
-blennogenic
-blennogenous
-blennoid
-blennoma
-blennometritis
-blennophlogisma
-blennophlogosis
-blennophthalmia
-blennoptysis
-blennorrhagia
-blennorrhagic
-blennorrhea
-blennorrheal
-blennorrhinia
-blennosis
-blennostasis
-blennostatic
-blennothorax
-blennotorrhea
-blennuria
-blenny
-blennymenitis
-blent
-bleo
-blephara
-blepharadenitis
-blepharal
-blepharanthracosis
-blepharedema
-blepharelcosis
-blepharemphysema
-Blephariglottis
-blepharism
-blepharitic
-blepharitis
-blepharoadenitis
-blepharoadenoma
-blepharoatheroma
-blepharoblennorrhea
-blepharocarcinoma
-Blepharocera
-Blepharoceridae
-blepharochalasis
-blepharochromidrosis
-blepharoclonus
-blepharocoloboma
-blepharoconjunctivitis
-blepharodiastasis
-blepharodyschroia
-blepharohematidrosis
-blepharolithiasis
-blepharomelasma
-blepharoncosis
-blepharoncus
-blepharophimosis
-blepharophryplasty
-blepharophthalmia
-blepharophyma
-blepharoplast
-blepharoplastic
-blepharoplasty
-blepharoplegia
-blepharoptosis
-blepharopyorrhea
-blepharorrhaphy
-blepharospasm
-blepharospath
-blepharosphincterectomy
-blepharostat
-blepharostenosis
-blepharosymphysis
-blepharosyndesmitis
-blepharosynechia
-blepharotomy
-blepharydatis
-Blephillia
-blesbok
-blesbuck
-bless
-blessed
-blessedly
-blessedness
-blesser
-blessing
-blessingly
-blest
-blet
-bletheration
-Bletia
-Bletilla
-blewits
-blibe
-blick
-blickey
-Blighia
-blight
-blightbird
-blighted
-blighter
-blighting
-blightingly
-blighty
-blimbing
-blimp
-blimy
-blind
-blindage
-blindball
-blinded
-blindedly
-blinder
-blindeyes
-blindfast
-blindfish
-blindfold
-blindfolded
-blindfoldedness
-blindfolder
-blindfoldly
-blinding
-blindingly
-blindish
-blindless
-blindling
-blindly
-blindness
-blindstory
-blindweed
-blindworm
-blink
-blinkard
-blinked
-blinker
-blinkered
-blinking
-blinkingly
-blinks
-blinky
-blinter
-blintze
-blip
-bliss
-blissful
-blissfully
-blissfulness
-blissless
-blissom
-blister
-blistered
-blistering
-blisteringly
-blisterweed
-blisterwort
-blistery
-blite
-blithe
-blithebread
-blitheful
-blithefully
-blithehearted
-blithelike
-blithely
-blithemeat
-blithen
-blitheness
-blither
-blithering
-blithesome
-blithesomely
-blithesomeness
-blitter
-Blitum
-blitz
-blitzbuggy
-blitzkrieg
-blizz
-blizzard
-blizzardly
-blizzardous
-blizzardy
-blo
-bloat
-bloated
-bloatedness
-bloater
-bloating
-blob
-blobbed
-blobber
-blobby
-bloc
-block
-blockade
-blockader
-blockage
-blockbuster
-blocked
-blocker
-blockhead
-blockheaded
-blockheadedly
-blockheadedness
-blockheadish
-blockheadishness
-blockheadism
-blockholer
-blockhouse
-blockiness
-blocking
-blockish
-blockishly
-blockishness
-blocklayer
-blocklike
-blockmaker
-blockmaking
-blockman
-blockpate
-blockship
-blocky
-blodite
-bloke
-blolly
-blomstrandine
-blonde
-blondeness
-blondine
-blood
-bloodalley
-bloodalp
-bloodbeat
-bloodberry
-bloodbird
-bloodcurdler
-bloodcurdling
-blooddrop
-blooddrops
-blooded
-bloodfin
-bloodflower
-bloodguilt
-bloodguiltiness
-bloodguiltless
-bloodguilty
-bloodhound
-bloodied
-bloodily
-bloodiness
-bloodleaf
-bloodless
-bloodlessly
-bloodlessness
-bloodletter
-bloodletting
-bloodline
-bloodmobile
-bloodmonger
-bloodnoun
-bloodripe
-bloodripeness
-bloodroot
-bloodshed
-bloodshedder
-bloodshedding
-bloodshot
-bloodshotten
-bloodspiller
-bloodspilling
-bloodstain
-bloodstained
-bloodstainedness
-bloodstanch
-bloodstock
-bloodstone
-bloodstroke
-bloodsuck
-bloodsucker
-bloodsucking
-bloodthirst
-bloodthirster
-bloodthirstily
-bloodthirstiness
-bloodthirsting
-bloodthirsty
-bloodweed
-bloodwite
-bloodwood
-bloodworm
-bloodwort
-bloodworthy
-bloody
-bloodybones
-blooey
-bloom
-bloomage
-bloomer
-Bloomeria
-bloomerism
-bloomers
-bloomery
-bloomfell
-blooming
-bloomingly
-bloomingness
-bloomkin
-bloomless
-Bloomsburian
-Bloomsbury
-bloomy
-bloop
-blooper
-blooping
-blore
-blosmy
-blossom
-blossombill
-blossomed
-blossomhead
-blossomless
-blossomry
-blossomtime
-blossomy
-blot
-blotch
-blotched
-blotchy
-blotless
-blotter
-blottesque
-blottesquely
-blotting
-blottingly
-blotto
-blotty
-bloubiskop
-blouse
-bloused
-blousing
-blout
-blow
-blowback
-blowball
-blowcock
-blowdown
-blowen
-blower
-blowfish
-blowfly
-blowgun
-blowhard
-blowhole
-blowiness
-blowing
-blowings
-blowiron
-blowlamp
-blowline
-blown
-blowoff
-blowout
-blowpipe
-blowpoint
-blowproof
-blowspray
-blowth
-blowtorch
-blowtube
-blowup
-blowy
-blowze
-blowzed
-blowzing
-blowzy
-blub
-blubber
-blubberer
-blubbering
-blubberingly
-blubberman
-blubberous
-blubbery
-blucher
-bludgeon
-bludgeoned
-bludgeoneer
-bludgeoner
-blue
-blueback
-bluebead
-Bluebeard
-bluebeard
-Bluebeardism
-bluebell
-bluebelled
-blueberry
-bluebill
-bluebird
-blueblaw
-bluebonnet
-bluebook
-bluebottle
-bluebreast
-bluebuck
-bluebush
-bluebutton
-bluecap
-bluecoat
-bluecup
-bluefish
-bluegill
-bluegown
-bluegrass
-bluehearted
-bluehearts
-blueing
-bluejack
-bluejacket
-bluejoint
-blueleg
-bluelegs
-bluely
-blueness
-bluenose
-Bluenoser
-blueprint
-blueprinter
-bluer
-blues
-bluesides
-bluestem
-bluestocking
-bluestockingish
-bluestockingism
-bluestone
-bluestoner
-bluet
-bluethroat
-bluetongue
-bluetop
-blueweed
-bluewing
-bluewood
-bluey
-bluff
-bluffable
-bluffer
-bluffly
-bluffness
-bluffy
-bluggy
-bluing
-bluish
-bluishness
-bluism
-Blumea
-blunder
-blunderbuss
-blunderer
-blunderful
-blunderhead
-blunderheaded
-blunderheadedness
-blundering
-blunderingly
-blundersome
-blunge
-blunger
-blunk
-blunker
-blunks
-blunnen
-blunt
-blunter
-blunthead
-blunthearted
-bluntie
-bluntish
-bluntly
-bluntness
-blup
-blur
-blurb
-blurbist
-blurred
-blurredness
-blurrer
-blurry
-blurt
-blush
-blusher
-blushful
-blushfully
-blushfulness
-blushiness
-blushing
-blushingly
-blushless
-blushwort
-blushy
-bluster
-blusteration
-blusterer
-blustering
-blusteringly
-blusterous
-blusterously
-blustery
-blype
-bo
-boa
-Boaedon
-boagane
-Boanbura
-Boanerges
-boanergism
-boar
-boarcite
-board
-boardable
-boarder
-boarding
-boardinghouse
-boardlike
-boardly
-boardman
-boardwalk
-boardy
-boarfish
-boarhound
-boarish
-boarishly
-boarishness
-boarship
-boarskin
-boarspear
-boarstaff
-boarwood
-boast
-boaster
-boastful
-boastfully
-boastfulness
-boasting
-boastive
-boastless
-boat
-boatable
-boatage
-boatbill
-boatbuilder
-boatbuilding
-boater
-boatfalls
-boatful
-boathead
-boatheader
-boathouse
-boatie
-boating
-boatkeeper
-boatless
-boatlike
-boatlip
-boatload
-boatloader
-boatloading
-boatly
-boatman
-boatmanship
-boatmaster
-boatowner
-boatsetter
-boatshop
-boatside
-boatsman
-boatswain
-boattail
-boatward
-boatwise
-boatwoman
-boatwright
-Bob
-bob
-boba
-bobac
-Bobadil
-Bobadilian
-Bobadilish
-Bobadilism
-bobbed
-bobber
-bobbery
-Bobbie
-bobbin
-bobbiner
-bobbinet
-bobbing
-Bobbinite
-bobbinwork
-bobbish
-bobbishly
-bobble
-Bobby
-bobby
-bobcat
-bobcoat
-bobeche
-bobfly
-bobierrite
-bobization
-bobjerom
-bobo
-bobolink
-bobotie
-bobsled
-bobsleigh
-bobstay
-bobtail
-bobtailed
-bobwhite
-bobwood
-bocaccio
-bocal
-bocardo
-bocasine
-bocca
-boccale
-boccarella
-boccaro
-bocce
-Bocconia
-boce
-bocedization
-Boche
-bocher
-Bochism
-bock
-bockerel
-bockeret
-bocking
-bocoy
-bod
-bodach
-bodacious
-bodaciously
-bode
-bodeful
-bodega
-bodement
-boden
-bodenbenderite
-boder
-bodewash
-bodge
-bodger
-bodgery
-bodhi
-bodhisattva
-bodice
-bodiced
-bodicemaker
-bodicemaking
-bodied
-bodier
-bodieron
-bodikin
-bodiless
-bodilessness
-bodiliness
-bodily
-bodiment
-boding
-bodingly
-bodkin
-bodkinwise
-bodle
-Bodleian
-Bodo
-bodock
-Bodoni
-body
-bodybending
-bodybuilder
-bodyguard
-bodyhood
-bodyless
-bodymaker
-bodymaking
-bodyplate
-bodywise
-bodywood
-bodywork
-Boebera
-Boedromion
-Boehmenism
-Boehmenist
-Boehmenite
-Boehmeria
-boeotarch
-Boeotian
-Boeotic
-Boer
-Boerdom
-Boerhavia
-Boethian
-Boethusian
-bog
-boga
-bogan
-bogard
-bogart
-bogberry
-bogey
-bogeyman
-boggart
-boggin
-bogginess
-boggish
-boggle
-bogglebo
-boggler
-boggy
-boghole
-bogie
-bogieman
-bogier
-Bogijiab
-bogland
-boglander
-bogle
-bogledom
-boglet
-bogman
-bogmire
-Bogo
-bogo
-Bogomil
-Bogomile
-Bogomilian
-bogong
-Bogota
-bogsucker
-bogtrot
-bogtrotter
-bogtrotting
-bogue
-bogum
-bogus
-bogusness
-bogway
-bogwood
-bogwort
-bogy
-bogydom
-bogyism
-bogyland
-Bohairic
-bohawn
-bohea
-Bohemia
-Bohemian
-Bohemianism
-bohemium
-bohereen
-bohireen
-boho
-bohor
-bohunk
-boid
-Boidae
-Boii
-Boiko
-boil
-boilable
-boildown
-boiled
-boiler
-boilerful
-boilerhouse
-boilerless
-boilermaker
-boilermaking
-boilerman
-boilersmith
-boilerworks
-boilery
-boiling
-boilinglike
-boilingly
-boilover
-boily
-Bois
-boist
-boisterous
-boisterously
-boisterousness
-bojite
-bojo
-bokadam
-bokard
-bokark
-boke
-Bokhara
-Bokharan
-bokom
-bola
-Bolag
-bolar
-Bolboxalis
-bold
-bolden
-Bolderian
-boldhearted
-boldine
-boldly
-boldness
-boldo
-Boldu
-bole
-bolection
-bolectioned
-boled
-boleite
-Bolelia
-bolelike
-bolero
-Boletaceae
-boletaceous
-bolete
-Boletus
-boleweed
-bolewort
-bolide
-bolimba
-bolis
-bolivar
-bolivarite
-bolivia
-Bolivian
-boliviano
-bolk
-boll
-Bollandist
-bollard
-bolled
-boller
-bolling
-bollock
-bollworm
-bolly
-Bolo
-bolo
-Bologna
-Bolognan
-Bolognese
-bolograph
-bolographic
-bolographically
-bolography
-Boloism
-boloman
-bolometer
-bolometric
-boloney
-boloroot
-Bolshevik
-Bolsheviki
-Bolshevikian
-Bolshevism
-Bolshevist
-Bolshevistic
-Bolshevistically
-Bolshevize
-Bolshie
-bolson
-bolster
-bolsterer
-bolsterwork
-bolt
-boltage
-boltant
-boltcutter
-boltel
-bolter
-bolthead
-boltheader
-boltheading
-bolthole
-bolti
-bolting
-boltless
-boltlike
-boltmaker
-boltmaking
-Boltonia
-boltonite
-boltrope
-boltsmith
-boltstrake
-boltuprightness
-boltwork
-bolus
-Bolyaian
-bom
-boma
-Bomarea
-bomb
-bombable
-Bombacaceae
-bombacaceous
-bombard
-bombarde
-bombardelle
-bombarder
-bombardier
-bombardment
-bombardon
-bombast
-bombaster
-bombastic
-bombastically
-bombastry
-Bombax
-Bombay
-bombazet
-bombazine
-bombed
-bomber
-bombiccite
-Bombidae
-bombilate
-bombilation
-Bombinae
-bombinate
-bombination
-bombo
-bombola
-bombonne
-bombous
-bombproof
-bombshell
-bombsight
-Bombus
-bombycid
-Bombycidae
-bombyciform
-Bombycilla
-Bombycillidae
-Bombycina
-bombycine
-Bombyliidae
-Bombyx
-Bon
-bon
-bonaci
-bonagh
-bonaght
-bonair
-bonairly
-bonairness
-bonally
-bonang
-bonanza
-Bonapartean
-Bonapartism
-Bonapartist
-Bonasa
-bonasus
-bonaventure
-Bonaveria
-bonavist
-Bonbo
-bonbon
-bonce
-bond
-bondage
-bondager
-bondar
-bonded
-Bondelswarts
-bonder
-bonderman
-bondfolk
-bondholder
-bondholding
-bonding
-bondless
-bondman
-bondmanship
-bondsman
-bondstone
-bondswoman
-bonduc
-bondwoman
-bone
-boneache
-bonebinder
-boneblack
-bonebreaker
-boned
-bonedog
-bonefish
-boneflower
-bonehead
-boneheaded
-boneless
-bonelessly
-bonelessness
-bonelet
-bonelike
-Bonellia
-boner
-boneset
-bonesetter
-bonesetting
-boneshaker
-boneshaw
-bonetail
-bonewood
-bonework
-bonewort
-Boney
-bonfire
-bong
-Bongo
-bongo
-bonhomie
-Boni
-boniata
-Boniface
-bonification
-boniform
-bonify
-boniness
-boninite
-bonitarian
-bonitary
-bonito
-bonk
-bonnaz
-bonnet
-bonneted
-bonneter
-bonnethead
-bonnetless
-bonnetlike
-bonnetman
-bonnibel
-Bonnie
-bonnily
-bonniness
-Bonny
-bonny
-bonnyclabber
-bonnyish
-bonnyvis
-Bononian
-bonsai
-bonspiel
-bontebok
-bontebuck
-bontequagga
-Bontok
-bonus
-bonxie
-bony
-bonyfish
-bonze
-bonzer
-bonzery
-bonzian
-boo
-boob
-boobery
-boobily
-boobook
-booby
-boobyalla
-boobyish
-boobyism
-bood
-boodie
-boodle
-boodledom
-boodleism
-boodleize
-boodler
-boody
-boof
-booger
-boogiewoogie
-boohoo
-boojum
-book
-bookable
-bookbinder
-bookbindery
-bookbinding
-bookboard
-bookcase
-bookcraft
-bookdealer
-bookdom
-booked
-booker
-bookery
-bookfold
-bookful
-bookholder
-bookhood
-bookie
-bookiness
-booking
-bookish
-bookishly
-bookishness
-bookism
-bookkeeper
-bookkeeping
-bookland
-bookless
-booklet
-booklike
-bookling
-booklore
-booklover
-bookmaker
-bookmaking
-Bookman
-bookman
-bookmark
-bookmarker
-bookmate
-bookmobile
-bookmonger
-bookplate
-bookpress
-bookrack
-bookrest
-bookroom
-bookseller
-booksellerish
-booksellerism
-bookselling
-bookshelf
-bookshop
-bookstack
-bookstall
-bookstand
-bookstore
-bookward
-bookwards
-bookways
-bookwise
-bookwork
-bookworm
-bookwright
-booky
-bool
-Boolian
-booly
-boolya
-boom
-boomable
-boomage
-boomah
-boomboat
-boomdas
-boomer
-boomerang
-booming
-boomingly
-boomless
-boomlet
-boomorah
-boomslang
-boomslange
-boomster
-boomy
-boon
-boondock
-boondocks
-boondoggle
-boondoggler
-Boone
-boonfellow
-boongary
-boonk
-boonless
-Boophilus
-boopis
-boor
-boorish
-boorishly
-boorishness
-boort
-boose
-boost
-booster
-boosterism
-boosy
-boot
-bootblack
-bootboy
-booted
-bootee
-booter
-bootery
-Bootes
-bootful
-booth
-boother
-Boothian
-boothite
-bootholder
-boothose
-Bootid
-bootied
-bootikin
-booting
-bootjack
-bootlace
-bootleg
-bootlegger
-bootlegging
-bootless
-bootlessly
-bootlessness
-bootlick
-bootlicker
-bootmaker
-bootmaking
-boots
-bootstrap
-booty
-bootyless
-booze
-boozed
-boozer
-boozily
-booziness
-boozy
-bop
-bopeep
-boppist
-bopyrid
-Bopyridae
-bopyridian
-Bopyrus
-bor
-bora
-borable
-borachio
-boracic
-boraciferous
-boracous
-borage
-Boraginaceae
-boraginaceous
-Borago
-Borak
-borak
-boral
-Boran
-Borana
-Borani
-borasca
-borasque
-Borassus
-borate
-borax
-Borboridae
-Borborus
-borborygmic
-borborygmus
-bord
-bordage
-bordar
-bordarius
-Bordeaux
-bordel
-bordello
-border
-bordered
-borderer
-Borderies
-bordering
-borderism
-borderland
-borderlander
-borderless
-borderline
-bordermark
-Borderside
-bordroom
-bordure
-bordured
-bore
-boreable
-boread
-Boreades
-boreal
-borealis
-borean
-Boreas
-borecole
-boredom
-boree
-boreen
-boregat
-borehole
-Boreiad
-boreism
-borele
-borer
-boresome
-Boreus
-borg
-borgh
-borghalpenny
-Borghese
-borh
-boric
-borickite
-boride
-borine
-boring
-boringly
-boringness
-Borinqueno
-Boris
-borish
-borism
-bority
-borize
-borlase
-born
-borne
-Bornean
-Borneo
-borneol
-borning
-bornite
-bornitic
-bornyl
-Boro
-boro
-Borocaine
-borocalcite
-borocarbide
-borocitrate
-borofluohydric
-borofluoric
-borofluoride
-borofluorin
-boroglycerate
-boroglyceride
-boroglycerine
-borolanite
-boron
-boronatrocalcite
-Boronia
-boronic
-borophenol
-borophenylic
-Bororo
-Bororoan
-borosalicylate
-borosalicylic
-borosilicate
-borosilicic
-borotungstate
-borotungstic
-borough
-boroughlet
-boroughmaster
-boroughmonger
-boroughmongering
-boroughmongery
-boroughship
-borowolframic
-borracha
-borrel
-Borrelia
-Borrelomycetaceae
-Borreria
-Borrichia
-Borromean
-Borrovian
-borrow
-borrowable
-borrower
-borrowing
-borsch
-borscht
-borsholder
-borsht
-borstall
-bort
-bortsch
-borty
-bortz
-Boruca
-Borussian
-borwort
-boryl
-Borzicactus
-borzoi
-Bos
-Bosc
-boscage
-bosch
-boschbok
-Boschneger
-boschvark
-boschveld
-bose
-Boselaphus
-boser
-bosh
-Boshas
-bosher
-Bosjesman
-bosjesman
-bosk
-bosker
-bosket
-boskiness
-bosky
-bosn
-Bosniac
-Bosniak
-Bosnian
-Bosnisch
-bosom
-bosomed
-bosomer
-bosomy
-Bosporan
-Bosporanic
-Bosporian
-bosporus
-boss
-bossage
-bossdom
-bossed
-bosselated
-bosselation
-bosser
-bosset
-bossiness
-bossing
-bossism
-bosslet
-bossship
-bossy
-bostangi
-bostanji
-bosthoon
-Boston
-boston
-Bostonese
-Bostonian
-bostonite
-bostrychid
-Bostrychidae
-bostrychoid
-bostrychoidal
-bostryx
-bosun
-Boswellia
-Boswellian
-Boswelliana
-Boswellism
-Boswellize
-bot
-bota
-botanic
-botanical
-botanically
-botanist
-botanize
-botanizer
-botanomancy
-botanophile
-botanophilist
-botany
-botargo
-Botaurinae
-Botaurus
-botch
-botched
-botchedly
-botcher
-botcherly
-botchery
-botchily
-botchiness
-botchka
-botchy
-bote
-Botein
-botella
-boterol
-botfly
-both
-bother
-botheration
-botherer
-botherheaded
-botherment
-bothersome
-bothlike
-Bothnian
-Bothnic
-bothrenchyma
-Bothriocephalus
-Bothriocidaris
-Bothriolepis
-bothrium
-Bothrodendron
-bothropic
-Bothrops
-bothros
-bothsided
-bothsidedness
-bothway
-bothy
-Botocudo
-botonee
-botong
-Botrychium
-Botrydium
-Botryllidae
-Botryllus
-botryogen
-botryoid
-botryoidal
-botryoidally
-botryolite
-Botryomyces
-botryomycoma
-botryomycosis
-botryomycotic
-Botryopteriaceae
-botryopterid
-Botryopteris
-botryose
-botryotherapy
-Botrytis
-bott
-bottekin
-Botticellian
-bottine
-bottle
-bottlebird
-bottled
-bottleflower
-bottleful
-bottlehead
-bottleholder
-bottlelike
-bottlemaker
-bottlemaking
-bottleman
-bottleneck
-bottlenest
-bottlenose
-bottler
-bottling
-bottom
-bottomchrome
-bottomed
-bottomer
-bottoming
-bottomless
-bottomlessly
-bottomlessness
-bottommost
-bottomry
-bottstick
-botuliform
-botulin
-botulinum
-botulism
-botulismus
-bouchal
-bouchaleen
-boucharde
-bouche
-boucher
-boucherism
-boucherize
-bouchette
-boud
-boudoir
-bouffancy
-bouffant
-Bougainvillaea
-Bougainvillea
-Bougainvillia
-Bougainvilliidae
-bougar
-bouge
-bouget
-bough
-boughed
-boughless
-boughpot
-bought
-boughten
-boughy
-bougie
-bouillabaisse
-bouillon
-bouk
-boukit
-boulangerite
-Boulangism
-Boulangist
-boulder
-boulderhead
-bouldering
-bouldery
-boule
-boulevard
-boulevardize
-boultel
-boulter
-boulterer
-boun
-bounce
-bounceable
-bounceably
-bouncer
-bouncing
-bouncingly
-bound
-boundable
-boundary
-bounded
-boundedly
-boundedness
-bounden
-bounder
-bounding
-boundingly
-boundless
-boundlessly
-boundlessness
-boundly
-boundness
-bounteous
-bounteously
-bounteousness
-bountied
-bountiful
-bountifully
-bountifulness
-bountith
-bountree
-bounty
-bountyless
-bouquet
-bourasque
-Bourbon
-bourbon
-Bourbonesque
-Bourbonian
-Bourbonism
-Bourbonist
-bourbonize
-bourd
-bourder
-bourdon
-bourette
-bourg
-bourgeois
-bourgeoise
-bourgeoisie
-bourgeoisitic
-Bourignian
-Bourignianism
-Bourignianist
-Bourignonism
-Bourignonist
-bourn
-bournless
-bournonite
-bourock
-Bourout
-bourse
-bourtree
-bouse
-bouser
-Boussingaultia
-boussingaultite
-boustrophedon
-boustrophedonic
-bousy
-bout
-boutade
-Bouteloua
-bouto
-boutonniere
-boutylka
-Bouvardia
-bouw
-bovarism
-bovarysm
-bovate
-bovenland
-bovicide
-boviculture
-bovid
-Bovidae
-boviform
-bovine
-bovinely
-bovinity
-Bovista
-bovoid
-bovovaccination
-bovovaccine
-bow
-bowable
-bowback
-bowbells
-bowbent
-bowboy
-Bowdichia
-bowdlerism
-bowdlerization
-bowdlerize
-bowed
-bowedness
-bowel
-boweled
-bowelless
-bowellike
-bowels
-bowenite
-bower
-bowerbird
-bowerlet
-bowermaiden
-bowermay
-bowerwoman
-Bowery
-bowery
-Boweryish
-bowet
-bowfin
-bowgrace
-bowhead
-bowie
-bowieful
-bowing
-bowingly
-bowk
-bowkail
-bowker
-bowknot
-bowl
-bowla
-bowleg
-bowlegged
-bowleggedness
-bowler
-bowless
-bowlful
-bowlike
-bowline
-bowling
-bowllike
-bowlmaker
-bowls
-bowly
-bowmaker
-bowmaking
-bowman
-bowpin
-bowralite
-bowshot
-bowsprit
-bowstave
-bowstring
-bowstringed
-bowwoman
-bowwood
-bowwort
-bowwow
-bowyer
-boxberry
-boxboard
-boxbush
-boxcar
-boxen
-Boxer
-boxer
-Boxerism
-boxfish
-boxful
-boxhaul
-boxhead
-boxing
-boxkeeper
-boxlike
-boxmaker
-boxmaking
-boxman
-boxthorn
-boxty
-boxwallah
-boxwood
-boxwork
-boxy
-boy
-boyang
-boyar
-boyard
-boyardism
-boyardom
-boyarism
-Boyce
-boycott
-boycottage
-boycotter
-boycottism
-Boyd
-boydom
-boyer
-boyhood
-boyish
-boyishly
-boyishness
-boyism
-boyla
-boylike
-boyology
-boysenberry
-boyship
-boza
-bozal
-bozo
-bozze
-bra
-brab
-brabagious
-brabant
-Brabanter
-Brabantine
-brabble
-brabblement
-brabbler
-brabblingly
-Brabejum
-braca
-braccate
-braccia
-bracciale
-braccianite
-braccio
-brace
-braced
-bracelet
-braceleted
-bracer
-bracero
-braces
-brach
-Brachelytra
-brachelytrous
-bracherer
-brachering
-brachet
-brachial
-brachialgia
-brachialis
-Brachiata
-brachiate
-brachiation
-brachiator
-brachiferous
-brachigerous
-Brachinus
-brachiocephalic
-brachiocrural
-brachiocubital
-brachiocyllosis
-brachiofacial
-brachiofaciolingual
-brachioganoid
-Brachioganoidei
-brachiolaria
-brachiolarian
-brachiopod
-Brachiopoda
-brachiopode
-brachiopodist
-brachiopodous
-brachioradial
-brachioradialis
-brachiorrhachidian
-brachiorrheuma
-brachiosaur
-Brachiosaurus
-brachiostrophosis
-brachiotomy
-brachistocephali
-brachistocephalic
-brachistocephalous
-brachistocephaly
-brachistochrone
-brachistochronic
-brachistochronous
-brachium
-brachtmema
-brachyaxis
-brachycardia
-brachycatalectic
-brachycephal
-brachycephalic
-brachycephalism
-brachycephalization
-brachycephalize
-brachycephalous
-brachycephaly
-Brachycera
-brachyceral
-brachyceric
-brachycerous
-brachychronic
-brachycnemic
-Brachycome
-brachycranial
-brachydactyl
-brachydactylic
-brachydactylism
-brachydactylous
-brachydactyly
-brachydiagonal
-brachydodrome
-brachydodromous
-brachydomal
-brachydomatic
-brachydome
-brachydont
-brachydontism
-brachyfacial
-brachyglossal
-brachygnathia
-brachygnathism
-brachygnathous
-brachygrapher
-brachygraphic
-brachygraphical
-brachygraphy
-brachyhieric
-brachylogy
-brachymetropia
-brachymetropic
-Brachyoura
-brachyphalangia
-Brachyphyllum
-brachypinacoid
-brachypinacoidal
-brachypleural
-brachypnea
-brachypodine
-brachypodous
-brachyprism
-brachyprosopic
-brachypterous
-brachypyramid
-brachyrrhinia
-brachysclereid
-brachyskelic
-brachysm
-brachystaphylic
-Brachystegia
-brachystochrone
-Brachystomata
-brachystomatous
-brachystomous
-brachytic
-brachytypous
-Brachyura
-brachyural
-brachyuran
-brachyuranic
-brachyure
-brachyurous
-Brachyurus
-bracing
-bracingly
-bracingness
-brack
-brackebuschite
-bracken
-brackened
-bracker
-bracket
-bracketing
-bracketwise
-brackish
-brackishness
-brackmard
-bracky
-Bracon
-braconid
-Braconidae
-bract
-bractea
-bracteal
-bracteate
-bracted
-bracteiform
-bracteolate
-bracteole
-bracteose
-bractless
-bractlet
-Brad
-brad
-bradawl
-Bradbury
-Bradburya
-bradenhead
-Bradford
-Bradley
-bradmaker
-Bradshaw
-bradsot
-bradyacousia
-bradycardia
-bradycauma
-bradycinesia
-bradycrotic
-bradydactylia
-bradyesthesia
-bradyglossia
-bradykinesia
-bradykinetic
-bradylalia
-bradylexia
-bradylogia
-bradynosus
-bradypepsia
-bradypeptic
-bradyphagia
-bradyphasia
-bradyphemia
-bradyphrasia
-bradyphrenia
-bradypnea
-bradypnoea
-bradypod
-bradypode
-Bradypodidae
-bradypodoid
-Bradypus
-bradyseism
-bradyseismal
-bradyseismic
-bradyseismical
-bradyseismism
-bradyspermatism
-bradysphygmia
-bradystalsis
-bradyteleocinesia
-bradyteleokinesis
-bradytocia
-bradytrophic
-bradyuria
-brae
-braeface
-braehead
-braeman
-braeside
-brag
-braggardism
-braggart
-braggartism
-braggartly
-braggartry
-braggat
-bragger
-braggery
-bragget
-bragging
-braggingly
-braggish
-braggishly
-Bragi
-bragite
-bragless
-braguette
-Brahm
-Brahma
-brahmachari
-Brahmahood
-Brahmaic
-Brahman
-Brahmana
-Brahmanaspati
-Brahmanda
-Brahmaness
-Brahmanhood
-Brahmani
-Brahmanic
-Brahmanical
-Brahmanism
-Brahmanist
-Brahmanistic
-Brahmanize
-Brahmany
-Brahmi
-Brahmic
-Brahmin
-Brahminic
-Brahminism
-Brahmoism
-Brahmsian
-Brahmsite
-Brahui
-braid
-braided
-braider
-braiding
-Braidism
-Braidist
-brail
-Braille
-Braillist
-brain
-brainache
-braincap
-braincraft
-brainer
-brainfag
-brainge
-braininess
-brainless
-brainlessly
-brainlessness
-brainlike
-brainpan
-brains
-brainsick
-brainsickly
-brainsickness
-brainstone
-brainward
-brainwash
-brainwasher
-brainwashing
-brainwater
-brainwood
-brainwork
-brainworker
-brainy
-braird
-braireau
-brairo
-braise
-brake
-brakeage
-brakehand
-brakehead
-brakeless
-brakeload
-brakemaker
-brakemaking
-brakeman
-braker
-brakeroot
-brakesman
-brakie
-braky
-Bram
-Bramantesque
-Bramantip
-bramble
-brambleberry
-bramblebush
-brambled
-brambling
-brambly
-brambrack
-Bramia
-bran
-brancard
-branch
-branchage
-branched
-Branchellion
-brancher
-branchery
-branchful
-branchi
-branchia
-branchiae
-branchial
-Branchiata
-branchiate
-branchicolous
-branchiferous
-branchiform
-branchihyal
-branchiness
-branching
-Branchiobdella
-branchiocardiac
-branchiogenous
-branchiomere
-branchiomeric
-branchiomerism
-branchiopallial
-branchiopod
-Branchiopoda
-branchiopodan
-branchiopodous
-Branchiopulmonata
-branchiopulmonate
-branchiosaur
-Branchiosauria
-branchiosaurian
-Branchiosaurus
-branchiostegal
-Branchiostegidae
-branchiostegite
-branchiostegous
-Branchiostoma
-branchiostomid
-Branchiostomidae
-Branchipodidae
-Branchipus
-branchireme
-Branchiura
-branchiurous
-branchless
-branchlet
-branchlike
-branchling
-branchman
-branchstand
-branchway
-branchy
-brand
-branded
-Brandenburg
-Brandenburger
-brander
-brandering
-Brandi
-brandied
-brandify
-brandise
-brandish
-brandisher
-brandisite
-brandless
-brandling
-Brandon
-brandreth
-Brandy
-brandy
-brandyball
-brandyman
-brandywine
-brangle
-brangled
-branglement
-brangler
-brangling
-branial
-brank
-brankie
-brankursine
-branle
-branner
-brannerite
-branny
-bransle
-bransolder
-brant
-Branta
-brantail
-brantness
-Brasenia
-brash
-brashiness
-brashness
-brashy
-brasiletto
-brasque
-brass
-brassage
-brassard
-brassart
-Brassavola
-brassbound
-brassbounder
-brasse
-brasser
-brasset
-Brassia
-brassic
-Brassica
-Brassicaceae
-brassicaceous
-brassidic
-brassie
-brassiere
-brassily
-brassiness
-brassish
-brasslike
-brassware
-brasswork
-brassworker
-brassworks
-brassy
-brassylic
-brat
-bratling
-bratstvo
-brattach
-brattice
-bratticer
-bratticing
-brattie
-brattish
-brattishing
-brattle
-brauna
-Brauneberger
-Brauneria
-braunite
-Brauronia
-Brauronian
-Brava
-bravade
-bravado
-bravadoism
-brave
-bravehearted
-bravely
-braveness
-braver
-bravery
-braving
-bravish
-bravo
-bravoite
-bravura
-bravuraish
-braw
-brawl
-brawler
-brawling
-brawlingly
-brawlsome
-brawly
-brawlys
-brawn
-brawned
-brawnedness
-brawner
-brawnily
-brawniness
-brawny
-braws
-braxy
-bray
-brayer
-brayera
-brayerin
-braystone
-braza
-braze
-brazen
-brazenface
-brazenfaced
-brazenfacedly
-brazenly
-brazenness
-brazer
-brazera
-brazier
-braziery
-brazil
-brazilein
-brazilette
-Brazilian
-brazilin
-brazilite
-brazilwood
-breach
-breacher
-breachful
-breachy
-bread
-breadbasket
-breadberry
-breadboard
-breadbox
-breadearner
-breadearning
-breaden
-breadfruit
-breadless
-breadlessness
-breadmaker
-breadmaking
-breadman
-breadnut
-breadroot
-breadseller
-breadstuff
-breadth
-breadthen
-breadthless
-breadthriders
-breadthways
-breadthwise
-breadwinner
-breadwinning
-breaghe
-break
-breakable
-breakableness
-breakably
-breakage
-breakaway
-breakax
-breakback
-breakbones
-breakdown
-breaker
-breakerman
-breakfast
-breakfaster
-breakfastless
-breaking
-breakless
-breakneck
-breakoff
-breakout
-breakover
-breakshugh
-breakstone
-breakthrough
-breakup
-breakwater
-breakwind
-bream
-breards
-breast
-breastband
-breastbeam
-breastbone
-breasted
-breaster
-breastfeeding
-breastful
-breastheight
-breasthook
-breastie
-breasting
-breastless
-breastmark
-breastpiece
-breastpin
-breastplate
-breastplow
-breastrail
-breastrope
-breastsummer
-breastweed
-breastwise
-breastwood
-breastwork
-breath
-breathable
-breathableness
-breathe
-breathed
-breather
-breathful
-breathiness
-breathing
-breathingly
-breathless
-breathlessly
-breathlessness
-breathseller
-breathy
-breba
-breccia
-breccial
-brecciated
-brecciation
-brecham
-Brechites
-breck
-brecken
-bred
-bredbergite
-brede
-bredi
-bree
-breech
-breechblock
-breechcloth
-breechclout
-breeched
-breeches
-breechesflower
-breechesless
-breeching
-breechless
-breechloader
-breed
-breedable
-breedbate
-breeder
-breediness
-breeding
-breedy
-breek
-breekless
-breekums
-breeze
-breezeful
-breezeless
-breezelike
-breezeway
-breezily
-breeziness
-breezy
-bregma
-bregmata
-bregmate
-bregmatic
-brehon
-brehonship
-brei
-breislakite
-breithauptite
-brekkle
-brelaw
-breloque
-breme
-bremely
-bremeness
-Bremia
-bremsstrahlung
-Brenda
-Brendan
-Brender
-brennage
-Brent
-brent
-Brenthis
-brephic
-Brescian
-Bret
-bret
-bretelle
-bretesse
-breth
-brethren
-Breton
-Bretonian
-Bretschneideraceae
-Brett
-brett
-brettice
-Bretwalda
-Bretwaldadom
-Bretwaldaship
-breunnerite
-breva
-breve
-brevet
-brevetcy
-breviary
-breviate
-breviature
-brevicaudate
-brevicipitid
-Brevicipitidae
-breviconic
-brevier
-brevifoliate
-breviger
-brevilingual
-breviloquence
-breviloquent
-breviped
-brevipen
-brevipennate
-breviradiate
-brevirostral
-brevirostrate
-Brevirostrines
-brevit
-brevity
-brew
-brewage
-brewer
-brewership
-brewery
-brewhouse
-brewing
-brewis
-brewmaster
-brewst
-brewster
-brewsterite
-brey
-Brian
-briar
-briarberry
-Briard
-Briarean
-Briareus
-briarroot
-bribe
-bribee
-bribegiver
-bribegiving
-bribemonger
-briber
-bribery
-bribetaker
-bribetaking
-bribeworthy
-Bribri
-brichen
-brichette
-brick
-brickbat
-brickcroft
-brickel
-bricken
-brickfield
-brickfielder
-brickhood
-bricking
-brickish
-brickkiln
-bricklayer
-bricklaying
-brickle
-brickleness
-bricklike
-brickliner
-bricklining
-brickly
-brickmaker
-brickmaking
-brickmason
-brickset
-bricksetter
-bricktimber
-brickwise
-brickwork
-bricky
-brickyard
-bricole
-bridal
-bridale
-bridaler
-bridally
-Bride
-bride
-bridebed
-bridebowl
-bridecake
-bridechamber
-bridecup
-bridegod
-bridegroom
-bridegroomship
-bridehead
-bridehood
-brideknot
-bridelace
-brideless
-bridelike
-bridely
-bridemaid
-bridemaiden
-bridemaidship
-brideship
-bridesmaid
-bridesmaiding
-bridesman
-bridestake
-bridewain
-brideweed
-bridewell
-bridewort
-bridge
-bridgeable
-bridgeboard
-bridgebote
-bridgebuilder
-bridgebuilding
-bridged
-bridgehead
-bridgekeeper
-bridgeless
-bridgelike
-bridgemaker
-bridgemaking
-bridgeman
-bridgemaster
-bridgepot
-Bridger
-bridger
-Bridget
-bridgetree
-bridgeward
-bridgewards
-bridgeway
-bridgework
-bridging
-bridle
-bridled
-bridleless
-bridleman
-bridler
-bridling
-bridoon
-brief
-briefing
-briefless
-brieflessly
-brieflessness
-briefly
-briefness
-briefs
-brier
-brierberry
-briered
-brierroot
-brierwood
-briery
-brieve
-brig
-brigade
-brigadier
-brigadiership
-brigalow
-brigand
-brigandage
-brigander
-brigandine
-brigandish
-brigandishly
-brigandism
-Brigantes
-Brigantia
-brigantine
-brigatry
-brigbote
-brigetty
-Briggs
-Briggsian
-Brighella
-Brighid
-bright
-brighten
-brightener
-brightening
-Brighteyes
-brighteyes
-brightish
-brightly
-brightness
-brightsmith
-brightsome
-brightsomeness
-brightwork
-Brigid
-Brigittine
-brill
-brilliance
-brilliancy
-brilliandeer
-brilliant
-brilliantine
-brilliantly
-brilliantness
-brilliantwise
-brilliolette
-brillolette
-brills
-brim
-brimborion
-brimborium
-brimful
-brimfully
-brimfulness
-briming
-brimless
-brimmed
-brimmer
-brimming
-brimmingly
-brimstone
-brimstonewort
-brimstony
-brin
-brindlish
-brine
-brinehouse
-brineless
-brineman
-briner
-bring
-bringal
-bringall
-bringer
-brininess
-brinish
-brinishness
-brinjal
-brinjarry
-brink
-brinkless
-briny
-brioche
-briolette
-brique
-briquette
-brisk
-brisken
-brisket
-briskish
-briskly
-briskness
-brisling
-brisque
-briss
-Brissotin
-Brissotine
-bristle
-bristlebird
-bristlecone
-bristled
-bristleless
-bristlelike
-bristler
-bristletail
-bristlewort
-bristliness
-bristly
-Bristol
-brisure
-brit
-Britain
-Britannia
-Britannian
-Britannic
-Britannically
-britchka
-brith
-brither
-Briticism
-British
-Britisher
-Britishhood
-Britishism
-Britishly
-Britishness
-Briton
-Britoness
-britska
-Brittany
-britten
-brittle
-brittlebush
-brittlely
-brittleness
-brittlestem
-brittlewood
-brittlewort
-brittling
-Briza
-brizz
-broach
-broacher
-broad
-broadacre
-broadax
-broadbill
-Broadbrim
-broadbrim
-broadcast
-broadcaster
-broadcloth
-broaden
-broadhead
-broadhearted
-broadhorn
-broadish
-broadleaf
-broadloom
-broadly
-broadmouth
-broadness
-broadpiece
-broadshare
-broadsheet
-broadside
-broadspread
-broadsword
-broadtail
-broadthroat
-Broadway
-broadway
-Broadwayite
-broadways
-broadwife
-broadwise
-brob
-Brobdingnag
-Brobdingnagian
-brocade
-brocaded
-brocard
-brocardic
-brocatel
-brocatello
-broccoli
-broch
-brochan
-brochant
-brochantite
-broche
-brochette
-brochidodromous
-brocho
-brochure
-brock
-brockage
-brocked
-brocket
-brockle
-brod
-brodder
-brodeglass
-brodequin
-broderer
-Brodiaea
-Brodie
-brog
-brogan
-brogger
-broggerite
-broggle
-brogue
-brogueful
-brogueneer
-broguer
-broguery
-broguish
-broider
-broiderer
-broideress
-broidery
-broigne
-broil
-broiler
-broiling
-broilingly
-brokage
-broke
-broken
-brokenhearted
-brokenheartedly
-brokenheartedness
-brokenly
-brokenness
-broker
-brokerage
-brokeress
-brokership
-broking
-brolga
-broll
-brolly
-broma
-bromacetanilide
-bromacetate
-bromacetic
-bromacetone
-bromal
-bromalbumin
-bromamide
-bromargyrite
-bromate
-bromaurate
-bromauric
-brombenzamide
-brombenzene
-brombenzyl
-bromcamphor
-bromcresol
-brome
-bromeigon
-Bromeikon
-bromeikon
-Bromelia
-Bromeliaceae
-bromeliaceous
-bromeliad
-bromelin
-bromellite
-bromethyl
-bromethylene
-bromgelatin
-bromhidrosis
-bromhydrate
-bromhydric
-Bromian
-bromic
-bromide
-bromidic
-bromidically
-bromidrosis
-brominate
-bromination
-bromindigo
-bromine
-brominism
-brominize
-bromiodide
-Bromios
-bromism
-bromite
-Bromius
-bromization
-bromize
-bromizer
-bromlite
-bromoacetone
-bromoaurate
-bromoauric
-bromobenzene
-bromobenzyl
-bromocamphor
-bromochlorophenol
-bromocresol
-bromocyanidation
-bromocyanide
-bromocyanogen
-bromoethylene
-bromoform
-bromogelatin
-bromohydrate
-bromohydrin
-bromoil
-bromoiodide
-bromoiodism
-bromoiodized
-bromoketone
-bromol
-bromomania
-bromomenorrhea
-bromomethane
-bromometric
-bromometrical
-bromometrically
-bromometry
-bromonaphthalene
-bromophenol
-bromopicrin
-bromopnea
-bromoprotein
-bromothymol
-bromous
-bromphenol
-brompicrin
-bromthymol
-bromuret
-Bromus
-bromvogel
-bromyrite
-bronc
-bronchadenitis
-bronchi
-bronchia
-bronchial
-bronchially
-bronchiarctia
-bronchiectasis
-bronchiectatic
-bronchiloquy
-bronchiocele
-bronchiocrisis
-bronchiogenic
-bronchiolar
-bronchiole
-bronchioli
-bronchiolitis
-bronchiolus
-bronchiospasm
-bronchiostenosis
-bronchitic
-bronchitis
-bronchium
-bronchoadenitis
-bronchoalveolar
-bronchoaspergillosis
-bronchoblennorrhea
-bronchocavernous
-bronchocele
-bronchocephalitis
-bronchoconstriction
-bronchoconstrictor
-bronchodilatation
-bronchodilator
-bronchoegophony
-bronchoesophagoscopy
-bronchogenic
-bronchohemorrhagia
-broncholemmitis
-broncholith
-broncholithiasis
-bronchomotor
-bronchomucormycosis
-bronchomycosis
-bronchopathy
-bronchophonic
-bronchophony
-bronchophthisis
-bronchoplasty
-bronchoplegia
-bronchopleurisy
-bronchopneumonia
-bronchopneumonic
-bronchopulmonary
-bronchorrhagia
-bronchorrhaphy
-bronchorrhea
-bronchoscope
-bronchoscopic
-bronchoscopist
-bronchoscopy
-bronchospasm
-bronchostenosis
-bronchostomy
-bronchotetany
-bronchotome
-bronchotomist
-bronchotomy
-bronchotracheal
-bronchotyphoid
-bronchotyphus
-bronchovesicular
-bronchus
-bronco
-broncobuster
-brongniardite
-bronk
-Bronteana
-bronteon
-brontephobia
-Brontesque
-bronteum
-brontide
-brontogram
-brontograph
-brontolite
-brontology
-brontometer
-brontophobia
-Brontops
-Brontosaurus
-brontoscopy
-Brontotherium
-Brontozoum
-Bronx
-bronze
-bronzed
-bronzelike
-bronzen
-bronzer
-bronzesmith
-bronzewing
-bronzify
-bronzine
-bronzing
-bronzite
-bronzitite
-bronzy
-broo
-brooch
-brood
-brooder
-broodiness
-brooding
-broodingly
-broodless
-broodlet
-broodling
-broody
-brook
-brookable
-Brooke
-brooked
-brookflower
-brookie
-brookite
-brookless
-brooklet
-brooklike
-brooklime
-Brooklynite
-brookside
-brookweed
-brooky
-brool
-broom
-broombush
-broomcorn
-broomer
-broommaker
-broommaking
-broomrape
-broomroot
-broomshank
-broomstaff
-broomstick
-broomstraw
-broomtail
-broomweed
-broomwood
-broomwort
-broomy
-broon
-broose
-broozled
-brose
-Brosimum
-brosot
-brosy
-brot
-brotan
-brotany
-broth
-brothel
-brotheler
-brothellike
-brothelry
-brother
-brotherhood
-brotherless
-brotherlike
-brotherliness
-brotherly
-brothership
-Brotherton
-brotherwort
-brothy
-brotocrystal
-Brotula
-brotulid
-Brotulidae
-brotuliform
-brough
-brougham
-brought
-Broussonetia
-brow
-browache
-Browallia
-browallia
-browband
-browbeat
-browbeater
-browbound
-browden
-browed
-browis
-browless
-browman
-brown
-brownback
-browner
-Brownian
-brownie
-browniness
-browning
-Browningesque
-brownish
-Brownism
-Brownist
-Brownistic
-Brownistical
-brownly
-brownness
-brownout
-brownstone
-browntail
-browntop
-brownweed
-brownwort
-browny
-browpiece
-browpost
-browse
-browser
-browsick
-browsing
-browst
-bruang
-Bruce
-Brucella
-brucellosis
-Bruchidae
-Bruchus
-brucia
-brucina
-brucine
-brucite
-bruckle
-bruckled
-bruckleness
-Bructeri
-brugh
-brugnatellite
-bruin
-bruise
-bruiser
-bruisewort
-bruising
-bruit
-bruiter
-bruke
-Brule
-brulee
-brulyie
-brulyiement
-brumal
-Brumalia
-brumby
-brume
-Brummagem
-brummagem
-brumous
-brumstane
-brumstone
-brunch
-Brunella
-Brunellia
-Brunelliaceae
-brunelliaceous
-brunet
-brunetness
-brunette
-brunetteness
-Brunfelsia
-brunissure
-Brunistic
-brunneous
-Brunnichia
-Bruno
-Brunonia
-Brunoniaceae
-Brunonian
-Brunonism
-Brunswick
-brunswick
-brunt
-bruscus
-brush
-brushable
-brushball
-brushbird
-brushbush
-brushed
-brusher
-brushes
-brushet
-brushful
-brushiness
-brushing
-brushite
-brushland
-brushless
-brushlessness
-brushlet
-brushlike
-brushmaker
-brushmaking
-brushman
-brushoff
-brushproof
-brushwood
-brushwork
-brushy
-brusque
-brusquely
-brusqueness
-Brussels
-brustle
-brut
-Bruta
-brutage
-brutal
-brutalism
-brutalist
-brutalitarian
-brutality
-brutalization
-brutalize
-brutally
-brute
-brutedom
-brutelike
-brutely
-bruteness
-brutification
-brutify
-bruting
-brutish
-brutishly
-brutishness
-brutism
-brutter
-Brutus
-bruzz
-Bryaceae
-bryaceous
-Bryales
-Bryan
-Bryanism
-Bryanite
-Bryanthus
-Bryce
-bryogenin
-bryological
-bryologist
-bryology
-Bryonia
-bryonidin
-bryonin
-bryony
-Bryophyllum
-Bryophyta
-bryophyte
-bryophytic
-Bryozoa
-bryozoan
-bryozoon
-bryozoum
-Brython
-Brythonic
-Bryum
-Bu
-bu
-bual
-buaze
-bub
-buba
-bubal
-bubaline
-Bubalis
-bubalis
-Bubastid
-Bubastite
-bubble
-bubbleless
-bubblement
-bubbler
-bubbling
-bubblingly
-bubblish
-bubbly
-bubby
-bubbybush
-Bube
-bubinga
-Bubo
-bubo
-buboed
-bubonalgia
-bubonic
-Bubonidae
-bubonocele
-bubukle
-bucare
-bucca
-buccal
-buccally
-buccan
-buccaneer
-buccaneerish
-buccate
-Buccellarius
-buccina
-buccinal
-buccinator
-buccinatory
-Buccinidae
-bucciniform
-buccinoid
-Buccinum
-Bucco
-buccobranchial
-buccocervical
-buccogingival
-buccolabial
-buccolingual
-bucconasal
-Bucconidae
-Bucconinae
-buccopharyngeal
-buccula
-Bucculatrix
-bucentaur
-Bucephala
-Bucephalus
-Buceros
-Bucerotes
-Bucerotidae
-Bucerotinae
-Buchanan
-Buchanite
-buchite
-Buchloe
-Buchmanism
-Buchmanite
-Buchnera
-buchnerite
-buchonite
-buchu
-buck
-buckaroo
-buckberry
-buckboard
-buckbrush
-buckbush
-bucked
-buckeen
-bucker
-bucket
-bucketer
-bucketful
-bucketing
-bucketmaker
-bucketmaking
-bucketman
-buckety
-buckeye
-buckhorn
-buckhound
-buckie
-bucking
-buckish
-buckishly
-buckishness
-buckjump
-buckjumper
-bucklandite
-buckle
-buckled
-buckleless
-buckler
-Buckleya
-buckling
-bucklum
-bucko
-buckplate
-buckpot
-buckra
-buckram
-bucksaw
-buckshee
-buckshot
-buckskin
-buckskinned
-buckstall
-buckstay
-buckstone
-bucktail
-buckthorn
-bucktooth
-buckwagon
-buckwash
-buckwasher
-buckwashing
-buckwheat
-buckwheater
-buckwheatlike
-Bucky
-bucky
-bucoliast
-bucolic
-bucolical
-bucolically
-bucolicism
-Bucorvinae
-Bucorvus
-bucrane
-bucranium
-Bud
-bud
-buda
-buddage
-budder
-Buddh
-Buddha
-Buddhahood
-Buddhaship
-buddhi
-Buddhic
-Buddhism
-Buddhist
-Buddhistic
-Buddhistical
-Buddhology
-budding
-buddle
-Buddleia
-buddleman
-buddler
-buddy
-budge
-budger
-budgeree
-budgereegah
-budgerigar
-budgerow
-budget
-budgetary
-budgeteer
-budgeter
-budgetful
-Budh
-budless
-budlet
-budlike
-budmash
-Budorcas
-budtime
-Budukha
-Buduma
-budwood
-budworm
-budzat
-Buettneria
-Buettneriaceae
-bufagin
-buff
-buffable
-buffalo
-buffaloback
-buffball
-buffcoat
-buffed
-buffer
-buffet
-buffeter
-buffing
-buffle
-bufflehead
-bufflehorn
-buffont
-buffoon
-buffoonery
-buffoonesque
-buffoonish
-buffoonism
-buffware
-buffy
-bufidin
-bufo
-Bufonidae
-bufonite
-bufotalin
-bug
-bugaboo
-bugan
-bugbane
-bugbear
-bugbeardom
-bugbearish
-bugbite
-bugdom
-bugfish
-bugger
-buggery
-bugginess
-buggy
-buggyman
-bughead
-bughouse
-Bugi
-Buginese
-Buginvillaea
-bugle
-bugled
-bugler
-buglet
-bugleweed
-buglewort
-bugloss
-bugologist
-bugology
-bugproof
-bugre
-bugseed
-bugweed
-bugwort
-buhl
-buhr
-buhrstone
-build
-buildable
-builder
-building
-buildingless
-buildress
-buildup
-built
-buirdly
-buisson
-buist
-Bukat
-Bukeyef
-bukh
-Bukidnon
-bukshi
-bulak
-Bulanda
-bulb
-bulbaceous
-bulbar
-bulbed
-bulbiferous
-bulbiform
-bulbil
-Bulbilis
-bulbilla
-bulbless
-bulblet
-bulblike
-bulbocapnin
-bulbocapnine
-bulbocavernosus
-bulbocavernous
-Bulbochaete
-Bulbocodium
-bulbomedullary
-bulbomembranous
-bulbonuclear
-Bulbophyllum
-bulborectal
-bulbose
-bulbospinal
-bulbotuber
-bulbous
-bulbul
-bulbule
-bulby
-bulchin
-Bulgar
-Bulgari
-Bulgarian
-Bulgaric
-Bulgarophil
-bulge
-bulger
-bulginess
-bulgy
-bulimia
-bulimiac
-bulimic
-bulimiform
-bulimoid
-Bulimulidae
-Bulimus
-bulimy
-bulk
-bulked
-bulker
-bulkhead
-bulkheaded
-bulkily
-bulkiness
-bulkish
-bulky
-bull
-bulla
-bullace
-bullamacow
-bullan
-bullary
-bullate
-bullated
-bullation
-bullback
-bullbaiting
-bullbat
-bullbeggar
-bullberry
-bullbird
-bullboat
-bullcart
-bullcomber
-bulldog
-bulldogged
-bulldoggedness
-bulldoggy
-bulldogism
-bulldoze
-bulldozer
-buller
-bullet
-bulleted
-bullethead
-bulletheaded
-bulletheadedness
-bulletin
-bulletless
-bulletlike
-bulletmaker
-bulletmaking
-bulletproof
-bulletwood
-bullety
-bullfeast
-bullfight
-bullfighter
-bullfighting
-bullfinch
-bullfist
-bullflower
-bullfoot
-bullfrog
-bullhead
-bullheaded
-bullheadedly
-bullheadedness
-bullhide
-bullhoof
-bullhorn
-Bullidae
-bulliform
-bullimong
-bulling
-bullion
-bullionism
-bullionist
-bullionless
-bullish
-bullishly
-bullishness
-bullism
-bullit
-bullneck
-bullnose
-bullnut
-bullock
-bullocker
-Bullockite
-bullockman
-bullocky
-Bullom
-bullous
-bullpates
-bullpoll
-bullpout
-bullskin
-bullsticker
-bullsucker
-bullswool
-bulltoad
-bullule
-bullweed
-bullwhack
-bullwhacker
-bullwhip
-bullwort
-bully
-bullyable
-bullydom
-bullyhuff
-bullying
-bullyism
-bullyrag
-bullyragger
-bullyragging
-bullyrook
-bulrush
-bulrushlike
-bulrushy
-bulse
-bult
-bulter
-bultey
-bultong
-bultow
-bulwand
-bulwark
-bum
-bumbailiff
-bumbailiffship
-bumbarge
-bumbaste
-bumbaze
-bumbee
-bumbershoot
-bumble
-bumblebee
-bumbleberry
-Bumbledom
-bumblefoot
-bumblekite
-bumblepuppy
-bumbler
-bumbo
-bumboat
-bumboatman
-bumboatwoman
-bumclock
-Bumelia
-bumicky
-bummalo
-bummaree
-bummed
-bummer
-bummerish
-bummie
-bumming
-bummler
-bummock
-bump
-bumpee
-bumper
-bumperette
-bumpily
-bumpiness
-bumping
-bumpingly
-bumpkin
-bumpkinet
-bumpkinish
-bumpkinly
-bumpology
-bumptious
-bumptiously
-bumptiousness
-bumpy
-bumtrap
-bumwood
-bun
-Buna
-buna
-buncal
-bunce
-bunch
-bunchberry
-buncher
-bunchflower
-bunchily
-bunchiness
-bunchy
-buncombe
-bund
-Bunda
-Bundahish
-Bundeli
-bunder
-Bundestag
-bundle
-bundler
-bundlerooted
-bundlet
-bundobust
-bundook
-Bundu
-bundweed
-bundy
-bunemost
-bung
-Bunga
-bungaloid
-bungalow
-bungarum
-Bungarus
-bungee
-bungerly
-bungey
-bungfu
-bungfull
-bunghole
-bungle
-bungler
-bunglesome
-bungling
-bunglingly
-bungmaker
-bungo
-bungwall
-bungy
-Buninahua
-bunion
-bunk
-bunker
-bunkerman
-bunkery
-bunkhouse
-bunkie
-bunkload
-bunko
-bunkum
-bunnell
-bunny
-bunnymouth
-bunodont
-Bunodonta
-bunolophodont
-Bunomastodontidae
-bunoselenodont
-bunsenite
-bunt
-buntal
-bunted
-Bunter
-bunter
-bunting
-buntline
-bunton
-bunty
-bunya
-bunyah
-bunyip
-Bunyoro
-buoy
-buoyage
-buoyance
-buoyancy
-buoyant
-buoyantly
-buoyantness
-Buphaga
-buphthalmia
-buphthalmic
-Buphthalmum
-bupleurol
-Bupleurum
-buplever
-buprestid
-Buprestidae
-buprestidan
-Buprestis
-bur
-buran
-burao
-Burbank
-burbank
-burbankian
-Burbankism
-burbark
-Burberry
-burble
-burbler
-burbly
-burbot
-burbush
-burd
-burdalone
-burden
-burdener
-burdenless
-burdenous
-burdensome
-burdensomely
-burdensomeness
-burdie
-Burdigalian
-burdock
-burdon
-bure
-bureau
-bureaucracy
-bureaucrat
-bureaucratic
-bureaucratical
-bureaucratically
-bureaucratism
-bureaucratist
-bureaucratization
-bureaucratize
-bureaux
-burel
-burele
-buret
-burette
-burfish
-burg
-burgage
-burgality
-burgall
-burgee
-burgensic
-burgeon
-burgess
-burgessdom
-burggrave
-burgh
-burghal
-burghalpenny
-burghbote
-burghemot
-burgher
-burgherage
-burgherdom
-burgheress
-burgherhood
-burghermaster
-burghership
-burghmaster
-burghmoot
-burglar
-burglarious
-burglariously
-burglarize
-burglarproof
-burglary
-burgle
-burgomaster
-burgomastership
-burgonet
-burgoo
-burgoyne
-burgrave
-burgraviate
-burgul
-Burgundian
-Burgundy
-burgus
-burgware
-burhead
-Burhinidae
-Burhinus
-Buri
-buri
-burial
-burian
-Buriat
-buried
-burier
-burin
-burinist
-burion
-buriti
-burka
-burke
-burker
-burkundaz
-burl
-burlap
-burled
-burler
-burlesque
-burlesquely
-burlesquer
-burlet
-burletta
-Burley
-burlily
-burliness
-Burlington
-burly
-Burman
-Burmannia
-Burmanniaceae
-burmanniaceous
-Burmese
-burmite
-burn
-burnable
-burnbeat
-burned
-burner
-burnet
-burnetize
-burnfire
-burnie
-burniebee
-burning
-burningly
-burnish
-burnishable
-burnisher
-burnishing
-burnishment
-burnoose
-burnoosed
-burnous
-burnout
-burnover
-Burnsian
-burnside
-burnsides
-burnt
-burntweed
-burnut
-burnwood
-burny
-buro
-burp
-burr
-burrah
-burrawang
-burred
-burrel
-burrer
-burrgrailer
-burring
-burrish
-burrito
-burrknot
-burro
-burrobrush
-burrow
-burroweed
-burrower
-burrowstown
-burry
-bursa
-bursal
-bursar
-bursarial
-bursarship
-bursary
-bursate
-bursattee
-bursautee
-burse
-burseed
-Bursera
-Burseraceae
-Burseraceous
-bursicle
-bursiculate
-bursiform
-bursitis
-burst
-burster
-burstwort
-burt
-burthenman
-burton
-burtonization
-burtonize
-burucha
-Burushaski
-Burut
-burweed
-bury
-burying
-bus
-Busaos
-busby
-buscarl
-buscarle
-bush
-bushbeater
-bushbuck
-bushcraft
-bushed
-bushel
-busheler
-bushelful
-bushelman
-bushelwoman
-busher
-bushfighter
-bushfighting
-bushful
-bushhammer
-bushi
-bushily
-bushiness
-bushing
-bushland
-bushless
-bushlet
-bushlike
-bushmaker
-bushmaking
-Bushman
-bushmanship
-bushmaster
-bushment
-Bushongo
-bushranger
-bushranging
-bushrope
-bushveld
-bushwa
-bushwhack
-bushwhacker
-bushwhacking
-bushwife
-bushwoman
-bushwood
-bushy
-busied
-busily
-busine
-business
-businesslike
-businesslikeness
-businessman
-businesswoman
-busk
-busked
-busker
-busket
-buskin
-buskined
-buskle
-busky
-busman
-buss
-busser
-bussock
-bussu
-bust
-bustard
-busted
-bustee
-buster
-busthead
-bustic
-busticate
-bustle
-bustled
-bustler
-bustling
-bustlingly
-busy
-busybodied
-busybody
-busybodyish
-busybodyism
-busybodyness
-Busycon
-busyhead
-busying
-busyish
-busyness
-busywork
-but
-butadiene
-butadiyne
-butanal
-butane
-butanoic
-butanol
-butanolid
-butanolide
-butanone
-butch
-butcher
-butcherbird
-butcherdom
-butcherer
-butcheress
-butchering
-butcherless
-butcherliness
-butcherly
-butcherous
-butchery
-Bute
-Butea
-butein
-butene
-butenyl
-Buteo
-buteonine
-butic
-butine
-Butler
-butler
-butlerage
-butlerdom
-butleress
-butlerism
-butlerlike
-butlership
-butlery
-butment
-Butomaceae
-butomaceous
-Butomus
-butoxy
-butoxyl
-Butsu
-butt
-butte
-butter
-butteraceous
-butterback
-butterball
-butterbill
-butterbird
-butterbox
-butterbump
-butterbur
-butterbush
-buttercup
-buttered
-butterfat
-butterfingered
-butterfingers
-butterfish
-butterflower
-butterfly
-butterflylike
-butterhead
-butterine
-butteriness
-butteris
-butterjags
-butterless
-butterlike
-buttermaker
-buttermaking
-butterman
-buttermilk
-buttermonger
-buttermouth
-butternose
-butternut
-butterroot
-butterscotch
-butterweed
-butterwife
-butterwoman
-butterworker
-butterwort
-butterwright
-buttery
-butteryfingered
-buttgenbachite
-butting
-buttinsky
-buttle
-buttock
-buttocked
-buttocker
-button
-buttonball
-buttonbur
-buttonbush
-buttoned
-buttoner
-buttonhold
-buttonholder
-buttonhole
-buttonholer
-buttonhook
-buttonless
-buttonlike
-buttonmold
-buttons
-buttonweed
-buttonwood
-buttony
-buttress
-buttressless
-buttresslike
-buttstock
-buttwoman
-buttwood
-butty
-buttyman
-butyl
-butylamine
-butylation
-butylene
-butylic
-Butyn
-butyne
-butyr
-butyraceous
-butyral
-butyraldehyde
-butyrate
-butyric
-butyrically
-butyrin
-butyrinase
-butyrochloral
-butyrolactone
-butyrometer
-butyrometric
-butyrone
-butyrous
-butyrousness
-butyryl
-Buxaceae
-buxaceous
-Buxbaumia
-Buxbaumiaceae
-buxerry
-buxom
-buxomly
-buxomness
-Buxus
-buy
-buyable
-buyer
-Buyides
-buzane
-buzylene
-buzz
-buzzard
-buzzardlike
-buzzardly
-buzzer
-buzzerphone
-buzzgloak
-buzzies
-buzzing
-buzzingly
-buzzle
-buzzwig
-buzzy
-by
-Byblidaceae
-Byblis
-bycoket
-bye
-byee
-byegaein
-byeman
-byepath
-byerite
-byerlite
-byestreet
-byeworker
-byeworkman
-bygane
-byganging
-bygo
-bygoing
-bygone
-byhand
-bylaw
-bylawman
-byname
-bynedestin
-Bynin
-byon
-byordinar
-byordinary
-byous
-byously
-bypass
-bypasser
-bypast
-bypath
-byplay
-byre
-byreman
-byrewards
-byrewoman
-byrlaw
-byrlawman
-byrnie
-byroad
-Byron
-Byronesque
-Byronian
-Byroniana
-Byronic
-Byronically
-Byronics
-Byronish
-Byronism
-Byronist
-Byronite
-Byronize
-byrrus
-Byrsonima
-byrthynsak
-Bysacki
-bysen
-bysmalith
-byspell
-byssaceous
-byssal
-byssiferous
-byssin
-byssine
-byssinosis
-byssogenous
-byssoid
-byssolite
-byssus
-bystander
-bystreet
-byth
-bytime
-bytownite
-bytownitite
-bywalk
-bywalker
-byway
-bywoner
-byword
-bywork
-Byzantian
-Byzantine
-Byzantinesque
-Byzantinism
-Byzantinize
-C
-c
-ca
-caam
-caama
-caaming
-caapeba
-caatinga
-cab
-caba
-cabaan
-caback
-cabaho
-cabal
-cabala
-cabalassou
-cabaletta
-cabalic
-cabalism
-cabalist
-cabalistic
-cabalistical
-cabalistically
-caballer
-caballine
-caban
-cabana
-cabaret
-cabas
-cabasset
-cabassou
-cabbage
-cabbagehead
-cabbagewood
-cabbagy
-cabber
-cabble
-cabbler
-cabby
-cabda
-cabdriver
-cabdriving
-cabellerote
-caber
-cabernet
-cabestro
-cabezon
-cabilliau
-cabin
-Cabinda
-cabinet
-cabinetmaker
-cabinetmaking
-cabinetry
-cabinetwork
-cabinetworker
-cabinetworking
-cabio
-Cabirean
-Cabiri
-Cabiria
-Cabirian
-Cabiric
-Cabiritic
-cable
-cabled
-cablegram
-cableless
-cablelike
-cableman
-cabler
-cablet
-cableway
-cabling
-cabman
-cabob
-caboceer
-cabochon
-cabocle
-Cabomba
-Cabombaceae
-caboodle
-cabook
-caboose
-caboshed
-cabot
-cabotage
-cabree
-cabrerite
-cabreuva
-cabrilla
-cabriole
-cabriolet
-cabrit
-cabstand
-cabureiba
-cabuya
-Caca
-Cacajao
-Cacalia
-cacam
-Cacan
-Cacana
-cacanthrax
-cacao
-Cacara
-Cacatua
-Cacatuidae
-Cacatuinae
-Caccabis
-cacesthesia
-cacesthesis
-cachalot
-cachaza
-cache
-cachectic
-cachemia
-cachemic
-cachet
-cachexia
-cachexic
-cachexy
-cachibou
-cachinnate
-cachinnation
-cachinnator
-cachinnatory
-cacholong
-cachou
-cachrys
-cachucha
-cachunde
-Cacicus
-cacidrosis
-caciocavallo
-cacique
-caciqueship
-caciquism
-cack
-cackerel
-cackle
-cackler
-cacocholia
-cacochroia
-cacochylia
-cacochymia
-cacochymic
-cacochymical
-cacochymy
-cacocnemia
-cacodaemoniac
-cacodaemonial
-cacodaemonic
-cacodemon
-cacodemonia
-cacodemoniac
-cacodemonial
-cacodemonic
-cacodemonize
-cacodemonomania
-cacodontia
-cacodorous
-cacodoxian
-cacodoxical
-cacodoxy
-cacodyl
-cacodylate
-cacodylic
-cacoeconomy
-cacoepist
-cacoepistic
-cacoepy
-cacoethes
-cacoethic
-cacogalactia
-cacogastric
-cacogenesis
-cacogenic
-cacogenics
-cacogeusia
-cacoglossia
-cacographer
-cacographic
-cacographical
-cacography
-cacology
-cacomagician
-cacomelia
-cacomistle
-cacomixl
-cacomixle
-cacomorphia
-cacomorphosis
-caconychia
-caconym
-caconymic
-cacoon
-cacopathy
-cacopharyngia
-cacophonia
-cacophonic
-cacophonical
-cacophonically
-cacophonist
-cacophonize
-cacophonous
-cacophonously
-cacophony
-cacophthalmia
-cacoplasia
-cacoplastic
-cacoproctia
-cacorhythmic
-cacorrhachis
-cacorrhinia
-cacosmia
-cacospermia
-cacosplanchnia
-cacostomia
-cacothansia
-cacotheline
-cacothesis
-cacothymia
-cacotrichia
-cacotrophia
-cacotrophic
-cacotrophy
-cacotype
-cacoxene
-cacoxenite
-cacozeal
-cacozealous
-cacozyme
-Cactaceae
-cactaceous
-Cactales
-cacti
-cactiform
-cactoid
-Cactus
-cacuminal
-cacuminate
-cacumination
-cacuminous
-cacur
-cad
-cadalene
-cadamba
-cadastral
-cadastration
-cadastre
-cadaver
-cadaveric
-cadaverine
-cadaverize
-cadaverous
-cadaverously
-cadaverousness
-cadbait
-cadbit
-cadbote
-caddice
-caddiced
-Caddie
-caddie
-caddis
-caddised
-caddish
-caddishly
-caddishness
-caddle
-Caddo
-Caddoan
-caddow
-caddy
-cade
-cadelle
-cadence
-cadenced
-cadency
-cadent
-cadential
-cadenza
-cader
-caderas
-Cadet
-cadet
-cadetcy
-cadetship
-cadette
-cadew
-cadge
-cadger
-cadgily
-cadginess
-cadgy
-cadi
-cadilesker
-cadinene
-cadism
-cadiueio
-cadjan
-cadlock
-Cadmean
-cadmia
-cadmic
-cadmide
-cadmiferous
-cadmium
-cadmiumize
-Cadmopone
-Cadmus
-cados
-cadrans
-cadre
-cadua
-caduac
-caduca
-caducary
-caducean
-caduceus
-caduciary
-caducibranch
-Caducibranchiata
-caducibranchiate
-caducicorn
-caducity
-caducous
-cadus
-Cadwal
-Cadwallader
-cadweed
-caeca
-caecal
-caecally
-caecectomy
-caeciform
-Caecilia
-Caeciliae
-caecilian
-Caeciliidae
-caecitis
-caecocolic
-caecostomy
-caecotomy
-caecum
-Caedmonian
-Caedmonic
-Caelian
-caelometer
-Caelum
-Caelus
-Caenogaea
-Caenogaean
-Caenolestes
-caenostylic
-caenostyly
-caeoma
-caeremoniarius
-Caerphilly
-Caesalpinia
-Caesalpiniaceae
-caesalpiniaceous
-Caesar
-Caesardom
-Caesarean
-Caesareanize
-Caesarian
-Caesarism
-Caesarist
-Caesarize
-caesaropapacy
-caesaropapism
-caesaropopism
-Caesarotomy
-Caesarship
-caesious
-caesura
-caesural
-caesuric
-cafeneh
-cafenet
-cafeteria
-caffa
-caffeate
-caffeic
-caffeina
-caffeine
-caffeinic
-caffeinism
-caffeism
-caffeol
-caffeone
-caffetannic
-caffetannin
-caffiso
-caffle
-caffoline
-caffoy
-cafh
-cafiz
-caftan
-caftaned
-cag
-Cagayan
-cage
-caged
-cageful
-cageless
-cagelike
-cageling
-cageman
-cager
-cagester
-cagework
-cagey
-caggy
-cagily
-cagit
-cagmag
-Cagn
-Cahenslyism
-Cahill
-cahincic
-Cahita
-cahiz
-Cahnite
-Cahokia
-cahoot
-cahot
-cahow
-Cahuapana
-Cahuilla
-caickle
-caid
-cailcedra
-cailleach
-caimacam
-caimakam
-caiman
-caimitillo
-caimito
-Cain
-cain
-Caingang
-Caingua
-Cainian
-Cainish
-Cainism
-Cainite
-Cainitic
-caique
-caiquejee
-Cairba
-caird
-Cairene
-cairn
-cairned
-cairngorm
-cairngorum
-cairny
-Cairo
-caisson
-caissoned
-Caitanyas
-Caite
-caitiff
-Cajan
-Cajanus
-cajeput
-cajole
-cajolement
-cajoler
-cajolery
-cajoling
-cajolingly
-cajuela
-Cajun
-cajun
-cajuput
-cajuputene
-cajuputol
-Cakavci
-Cakchikel
-cake
-cakebox
-cakebread
-cakehouse
-cakemaker
-cakemaking
-caker
-cakette
-cakewalk
-cakewalker
-cakey
-Cakile
-caky
-cal
-calaba
-Calabar
-Calabari
-calabash
-calabaza
-calabazilla
-calaber
-calaboose
-calabrasella
-Calabrese
-calabrese
-Calabrian
-calade
-Caladium
-calais
-calalu
-Calamagrostis
-calamanco
-calamansi
-Calamariaceae
-calamariaceous
-Calamariales
-calamarian
-calamarioid
-calamaroid
-calamary
-calambac
-calambour
-calamiferous
-calamiform
-calaminary
-calamine
-calamint
-Calamintha
-calamistral
-calamistrum
-calamite
-calamitean
-Calamites
-calamitoid
-calamitous
-calamitously
-calamitousness
-calamity
-Calamodendron
-calamondin
-Calamopitys
-Calamospermae
-Calamostachys
-calamus
-calander
-Calandra
-calandria
-Calandridae
-Calandrinae
-Calandrinia
-calangay
-calantas
-Calanthe
-calapite
-Calappa
-Calappidae
-Calas
-calascione
-calash
-Calathea
-calathian
-calathidium
-calathiform
-calathiscus
-calathus
-Calatrava
-calaverite
-calbroben
-calcaneal
-calcaneoastragalar
-calcaneoastragaloid
-calcaneocuboid
-calcaneofibular
-calcaneonavicular
-calcaneoplantar
-calcaneoscaphoid
-calcaneotibial
-calcaneum
-calcaneus
-calcar
-calcarate
-Calcarea
-calcareoargillaceous
-calcareobituminous
-calcareocorneous
-calcareosiliceous
-calcareosulphurous
-calcareous
-calcareously
-calcareousness
-calcariferous
-calcariform
-calcarine
-calced
-calceiform
-calcemia
-Calceolaria
-calceolate
-Calchaqui
-Calchaquian
-calcic
-calciclase
-calcicole
-calcicolous
-calcicosis
-calciferol
-Calciferous
-calciferous
-calcific
-calcification
-calcified
-calciform
-calcifugal
-calcifuge
-calcifugous
-calcify
-calcigenous
-calcigerous
-calcimeter
-calcimine
-calciminer
-calcinable
-calcination
-calcinatory
-calcine
-calcined
-calciner
-calcinize
-calciobiotite
-calciocarnotite
-calcioferrite
-calcioscheelite
-calciovolborthite
-calcipexy
-calciphile
-calciphilia
-calciphilous
-calciphobe
-calciphobous
-calciphyre
-calciprivic
-calcisponge
-Calcispongiae
-calcite
-calcitestaceous
-calcitic
-calcitrant
-calcitrate
-calcitreation
-calcium
-calcivorous
-calcographer
-calcographic
-calcography
-calcrete
-calculability
-calculable
-Calculagraph
-calculary
-calculate
-calculated
-calculatedly
-calculating
-calculatingly
-calculation
-calculational
-calculative
-calculator
-calculatory
-calculi
-calculiform
-calculist
-calculous
-calculus
-Calcydon
-calden
-caldron
-calean
-Caleb
-Caledonia
-Caledonian
-caledonite
-calefacient
-calefaction
-calefactive
-calefactor
-calefactory
-calelectric
-calelectrical
-calelectricity
-Calemes
-calendal
-calendar
-calendarer
-calendarial
-calendarian
-calendaric
-calender
-calenderer
-calendric
-calendrical
-calendry
-calends
-Calendula
-calendulin
-calentural
-calenture
-calenturist
-calepin
-calescence
-calescent
-calf
-calfbound
-calfhood
-calfish
-calfkill
-calfless
-calflike
-calfling
-calfskin
-Caliban
-Calibanism
-caliber
-calibered
-calibogus
-calibrate
-calibration
-calibrator
-calibre
-Caliburn
-Caliburno
-calicate
-calices
-caliciform
-calicle
-calico
-calicoback
-calicoed
-calicular
-caliculate
-Calicut
-calid
-calidity
-caliduct
-California
-Californian
-californite
-californium
-caliga
-caligated
-caliginous
-caliginously
-caligo
-Calimeris
-Calinago
-calinda
-calinut
-caliological
-caliologist
-caliology
-calipash
-calipee
-caliper
-caliperer
-calipers
-caliph
-caliphal
-caliphate
-caliphship
-Calista
-calistheneum
-calisthenic
-calisthenical
-calisthenics
-Calite
-caliver
-calix
-Calixtin
-Calixtus
-calk
-calkage
-calker
-calkin
-calking
-call
-Calla
-callable
-callainite
-callant
-callboy
-caller
-callet
-calli
-Callianassa
-Callianassidae
-Calliandra
-Callicarpa
-Callicebus
-callid
-callidity
-callidness
-calligraph
-calligrapha
-calligrapher
-calligraphic
-calligraphical
-calligraphically
-calligraphist
-calligraphy
-calling
-Callionymidae
-Callionymus
-Calliope
-calliophone
-Calliopsis
-calliper
-calliperer
-Calliphora
-calliphorid
-Calliphoridae
-calliphorine
-callipygian
-callipygous
-Callirrhoe
-Callisaurus
-callisection
-callisteia
-Callistemon
-Callistephus
-Callithrix
-callithump
-callithumpian
-Callitrichaceae
-callitrichaceous
-Callitriche
-Callitrichidae
-Callitris
-callitype
-callo
-Callorhynchidae
-Callorhynchus
-callosal
-callose
-callosity
-callosomarginal
-callosum
-callous
-callously
-callousness
-Callovian
-callow
-callower
-callowman
-callowness
-Calluna
-callus
-Callynteria
-calm
-calmant
-calmative
-calmer
-calmierer
-calmingly
-calmly
-calmness
-calmy
-Calocarpum
-Calochortaceae
-Calochortus
-calodemon
-calography
-calomba
-calomel
-calomorphic
-Calonectria
-Calonyction
-calool
-Calophyllum
-Calopogon
-calor
-calorescence
-calorescent
-caloric
-caloricity
-calorie
-calorifacient
-calorific
-calorifical
-calorifically
-calorification
-calorifics
-calorifier
-calorify
-calorigenic
-calorimeter
-calorimetric
-calorimetrical
-calorimetrically
-calorimetry
-calorimotor
-caloris
-calorisator
-calorist
-Calorite
-calorize
-calorizer
-Calosoma
-Calotermes
-calotermitid
-Calotermitidae
-Calothrix
-calotte
-calotype
-calotypic
-calotypist
-caloyer
-calp
-calpac
-calpack
-calpacked
-calpulli
-Caltha
-caltrap
-caltrop
-calumba
-calumet
-calumniate
-calumniation
-calumniative
-calumniator
-calumniatory
-calumnious
-calumniously
-calumniousness
-calumny
-Calusa
-calutron
-Calvados
-calvaria
-calvarium
-Calvary
-Calvatia
-calve
-calved
-calver
-calves
-Calvin
-Calvinian
-Calvinism
-Calvinist
-Calvinistic
-Calvinistical
-Calvinistically
-Calvinize
-calvish
-calvities
-calvity
-calvous
-calx
-calycanth
-Calycanthaceae
-calycanthaceous
-calycanthemous
-calycanthemy
-calycanthine
-Calycanthus
-calycate
-Calyceraceae
-calyceraceous
-calyces
-calyciferous
-calycifloral
-calyciflorate
-calyciflorous
-calyciform
-calycinal
-calycine
-calycle
-calycled
-Calycocarpum
-calycoid
-calycoideous
-Calycophora
-Calycophorae
-calycophoran
-Calycozoa
-calycozoan
-calycozoic
-calycozoon
-calycular
-calyculate
-calyculated
-calycule
-calyculus
-Calydon
-Calydonian
-Calymene
-calymma
-calyphyomy
-calypsist
-Calypso
-calypso
-calypsonian
-calypter
-Calypterae
-Calyptoblastea
-calyptoblastic
-Calyptorhynchus
-calyptra
-Calyptraea
-Calyptranthes
-Calyptrata
-Calyptratae
-calyptrate
-calyptriform
-calyptrimorphous
-calyptro
-calyptrogen
-Calyptrogyne
-Calystegia
-calyx
-cam
-camaca
-Camacan
-camagon
-camail
-camailed
-Camaldolensian
-Camaldolese
-Camaldolesian
-Camaldolite
-Camaldule
-Camaldulian
-camalote
-caman
-camansi
-camara
-camaraderie
-Camarasaurus
-camarilla
-camass
-Camassia
-camata
-camatina
-Camaxtli
-camb
-Camball
-Cambalo
-Cambarus
-cambaye
-camber
-Cambeva
-cambial
-cambiform
-cambiogenetic
-cambism
-cambist
-cambistry
-cambium
-Cambodian
-cambogia
-cambrel
-cambresine
-Cambrian
-Cambric
-cambricleaf
-cambuca
-Cambuscan
-Cambyuskan
-Came
-came
-cameist
-camel
-camelback
-cameleer
-Camelid
-Camelidae
-Camelina
-cameline
-camelish
-camelishness
-camelkeeper
-Camellia
-Camelliaceae
-camellike
-camellin
-Camellus
-camelman
-cameloid
-Cameloidea
-camelopard
-Camelopardalis
-Camelopardid
-Camelopardidae
-Camelopardus
-camelry
-Camelus
-Camembert
-Camenae
-Camenes
-cameo
-cameograph
-cameography
-camera
-cameral
-cameralism
-cameralist
-cameralistic
-cameralistics
-cameraman
-Camerata
-camerate
-camerated
-cameration
-camerier
-Camerina
-Camerinidae
-camerist
-camerlingo
-Cameronian
-Camestres
-camilla
-camillus
-camion
-camisado
-Camisard
-camise
-camisia
-camisole
-camlet
-camleteen
-Cammarum
-cammed
-cammock
-cammocky
-camomile
-camoodi
-camoodie
-Camorra
-Camorrism
-Camorrist
-Camorrista
-camouflage
-camouflager
-camp
-Campa
-campagna
-campagnol
-campaign
-campaigner
-campana
-campane
-campanero
-Campanian
-campaniform
-campanile
-campaniliform
-campanilla
-campanini
-campanist
-campanistic
-campanologer
-campanological
-campanologically
-campanologist
-campanology
-Campanula
-Campanulaceae
-campanulaceous
-Campanulales
-campanular
-Campanularia
-Campanulariae
-campanularian
-Campanularidae
-Campanulatae
-campanulate
-campanulated
-campanulous
-Campaspe
-Campbellism
-Campbellite
-campbellite
-campcraft
-Campe
-Campephagidae
-campephagine
-Campephilus
-camper
-campestral
-campfight
-campfire
-campground
-camphane
-camphanic
-camphanone
-camphanyl
-camphene
-camphine
-camphire
-campho
-camphocarboxylic
-camphoid
-camphol
-campholic
-campholide
-campholytic
-camphor
-camphoraceous
-camphorate
-camphoric
-camphorize
-camphorone
-camphoronic
-camphoroyl
-camphorphorone
-camphorwood
-camphory
-camphoryl
-camphylene
-Campignian
-campimeter
-campimetrical
-campimetry
-Campine
-campion
-cample
-campmaster
-campo
-Campodea
-campodeid
-Campodeidae
-campodeiform
-campodeoid
-campody
-Camponotus
-campoo
-camporee
-campshed
-campshedding
-campsheeting
-campshot
-campstool
-camptodrome
-camptonite
-Camptosorus
-campulitropal
-campulitropous
-campus
-campward
-campylite
-campylodrome
-campylometer
-Campyloneuron
-campylospermous
-campylotropal
-campylotropous
-camshach
-camshachle
-camshaft
-camstane
-camstone
-camuning
-camus
-camused
-camwood
-can
-Cana
-Canaan
-Canaanite
-Canaanitess
-Canaanitic
-Canaanitish
-canaba
-Canacee
-Canada
-canada
-Canadian
-Canadianism
-Canadianization
-Canadianize
-canadine
-canadite
-canadol
-canaigre
-canaille
-canajong
-canal
-canalage
-canalboat
-canalicular
-canaliculate
-canaliculated
-canaliculation
-canaliculi
-canaliculization
-canaliculus
-canaliferous
-canaliform
-canalization
-canalize
-canaller
-canalling
-canalman
-canalside
-Canamary
-canamo
-Cananaean
-Cananga
-Canangium
-canape
-canapina
-canard
-Canari
-canari
-Canarian
-canarin
-Canariote
-Canarium
-Canarsee
-canary
-canasta
-canaster
-canaut
-Canavali
-Canavalia
-canavalin
-Canberra
-cancan
-cancel
-cancelable
-cancelation
-canceleer
-canceler
-cancellarian
-cancellate
-cancellated
-cancellation
-cancelli
-cancellous
-cancellus
-cancelment
-cancer
-cancerate
-canceration
-cancerdrops
-cancered
-cancerigenic
-cancerism
-cancerophobe
-cancerophobia
-cancerous
-cancerously
-cancerousness
-cancerroot
-cancerweed
-cancerwort
-canch
-canchalagua
-Canchi
-Cancri
-Cancrid
-cancriform
-cancrinite
-cancrisocial
-cancrivorous
-cancrizans
-cancroid
-cancrophagous
-cancrum
-cand
-Candace
-candareen
-candela
-candelabra
-candelabrum
-candelilla
-candent
-candescence
-candescent
-candescently
-candid
-candidacy
-candidate
-candidateship
-candidature
-candidly
-candidness
-candied
-candier
-candify
-Candiot
-candiru
-candle
-candleball
-candlebeam
-candleberry
-candlebomb
-candlebox
-candlefish
-candleholder
-candlelight
-candlelighted
-candlelighter
-candlelighting
-candlelit
-candlemaker
-candlemaking
-Candlemas
-candlenut
-candlepin
-candler
-candlerent
-candleshine
-candleshrift
-candlestand
-candlestick
-candlesticked
-candlestickward
-candlewaster
-candlewasting
-candlewick
-candlewood
-candlewright
-candock
-Candollea
-Candolleaceae
-candolleaceous
-candor
-candroy
-candy
-candymaker
-candymaking
-candys
-candystick
-candytuft
-candyweed
-cane
-canebrake
-canel
-canelike
-canella
-Canellaceae
-canellaceous
-Canelo
-canelo
-caneology
-canephor
-canephore
-canephoros
-canephroi
-caner
-canescence
-canescent
-canette
-canewise
-canework
-Canfield
-canfieldite
-canful
-cangan
-cangia
-cangle
-cangler
-cangue
-canhoop
-Canichana
-Canichanan
-canicola
-Canicula
-canicular
-canicule
-canid
-Canidae
-Canidia
-canille
-caninal
-canine
-caniniform
-caninity
-caninus
-canioned
-canions
-Canis
-Canisiana
-canistel
-canister
-canities
-canjac
-cank
-canker
-cankerberry
-cankerbird
-cankereat
-cankered
-cankeredly
-cankeredness
-cankerflower
-cankerous
-cankerroot
-cankerweed
-cankerworm
-cankerwort
-cankery
-canmaker
-canmaking
-canman
-Canna
-canna
-cannabic
-Cannabinaceae
-cannabinaceous
-cannabine
-cannabinol
-Cannabis
-cannabism
-Cannaceae
-cannaceous
-cannach
-canned
-cannel
-cannelated
-cannelure
-cannelured
-cannequin
-canner
-cannery
-cannet
-cannibal
-cannibalean
-cannibalic
-cannibalish
-cannibalism
-cannibalistic
-cannibalistically
-cannibality
-cannibalization
-cannibalize
-cannibally
-cannikin
-cannily
-canniness
-canning
-cannon
-cannonade
-cannoned
-cannoneer
-cannoneering
-Cannonism
-cannonproof
-cannonry
-cannot
-Cannstatt
-cannula
-cannular
-cannulate
-cannulated
-canny
-canoe
-canoeing
-Canoeiro
-canoeist
-canoeload
-canoeman
-canoewood
-canon
-canoncito
-canoness
-canonic
-canonical
-canonically
-canonicalness
-canonicals
-canonicate
-canonicity
-canonics
-canonist
-canonistic
-canonistical
-canonizant
-canonization
-canonize
-canonizer
-canonlike
-canonry
-canonship
-canoodle
-canoodler
-Canopic
-canopic
-Canopus
-canopy
-canorous
-canorously
-canorousness
-Canossa
-canroy
-canroyer
-canso
-cant
-Cantab
-cantabank
-cantabile
-Cantabri
-Cantabrian
-Cantabrigian
-Cantabrize
-cantala
-cantalite
-cantaloupe
-cantankerous
-cantankerously
-cantankerousness
-cantar
-cantara
-cantaro
-cantata
-Cantate
-cantation
-cantative
-cantatory
-cantboard
-canted
-canteen
-cantefable
-canter
-Canterburian
-Canterburianism
-Canterbury
-canterer
-canthal
-Cantharellus
-Cantharidae
-cantharidal
-cantharidate
-cantharides
-cantharidian
-cantharidin
-cantharidism
-cantharidize
-cantharis
-cantharophilous
-cantharus
-canthectomy
-canthitis
-cantholysis
-canthoplasty
-canthorrhaphy
-canthotomy
-canthus
-cantic
-canticle
-cantico
-cantilena
-cantilene
-cantilever
-cantilevered
-cantillate
-cantillation
-cantily
-cantina
-cantiness
-canting
-cantingly
-cantingness
-cantion
-cantish
-cantle
-cantlet
-canto
-Canton
-canton
-cantonal
-cantonalism
-cantoned
-cantoner
-Cantonese
-cantonment
-cantoon
-cantor
-cantoral
-Cantorian
-cantoris
-cantorous
-cantorship
-cantred
-cantref
-cantrip
-cantus
-cantwise
-canty
-Canuck
-canun
-canvas
-canvasback
-canvasman
-canvass
-canvassy
-cany
-canyon
-canzon
-canzonet
-caoba
-Caodaism
-Caodaist
-caoutchouc
-caoutchoucin
-cap
-capability
-capable
-capableness
-capably
-capacious
-capaciously
-capaciousness
-capacitance
-capacitate
-capacitation
-capacitative
-capacitativly
-capacitive
-capacitor
-capacity
-capanna
-capanne
-caparison
-capax
-capcase
-Cape
-cape
-caped
-capel
-capelet
-capelin
-capeline
-Capella
-capellet
-caper
-caperbush
-capercaillie
-capercally
-capercut
-caperer
-capering
-caperingly
-Capernaism
-Capernaite
-Capernaitic
-Capernaitical
-Capernaitically
-Capernaitish
-capernoited
-capernoitie
-capernoity
-capersome
-caperwort
-capes
-capeskin
-Capetian
-Capetonian
-capeweed
-capewise
-capful
-Caph
-caph
-caphar
-caphite
-Caphtor
-Caphtorim
-capias
-capicha
-capillaceous
-capillaire
-capillament
-capillarectasia
-capillarily
-capillarimeter
-capillariness
-capillariomotor
-capillarity
-capillary
-capillation
-capilliculture
-capilliform
-capillitial
-capillitium
-capillose
-capistrate
-capital
-capitaldom
-capitaled
-capitalism
-capitalist
-capitalistic
-capitalistically
-capitalizable
-capitalization
-capitalize
-capitally
-capitalness
-capitan
-capitate
-capitated
-capitatim
-capitation
-capitative
-capitatum
-capitellar
-capitellate
-capitelliform
-capitellum
-Capito
-Capitol
-Capitolian
-Capitoline
-Capitolium
-Capitonidae
-Capitoninae
-capitoul
-capitoulate
-capitulant
-capitular
-capitularly
-capitulary
-capitulate
-capitulation
-capitulator
-capitulatory
-capituliform
-capitulum
-capivi
-capkin
-capless
-caplin
-capmaker
-capmaking
-capman
-capmint
-Capnodium
-Capnoides
-capnomancy
-capocchia
-capomo
-capon
-caponier
-caponize
-caponizer
-caporal
-capot
-capote
-cappadine
-Cappadocian
-Capparidaceae
-capparidaceous
-Capparis
-capped
-cappelenite
-capper
-cappie
-capping
-capple
-cappy
-Capra
-caprate
-Caprella
-Caprellidae
-caprelline
-capreol
-capreolar
-capreolary
-capreolate
-capreoline
-Capreolus
-Capri
-capric
-capriccetto
-capricci
-capriccio
-caprice
-capricious
-capriciously
-capriciousness
-Capricorn
-Capricornid
-Capricornus
-caprid
-caprificate
-caprification
-caprificator
-caprifig
-Caprifoliaceae
-caprifoliaceous
-Caprifolium
-caprifolium
-capriform
-caprigenous
-Caprimulgi
-Caprimulgidae
-Caprimulgiformes
-caprimulgine
-Caprimulgus
-caprin
-caprine
-caprinic
-Capriola
-capriole
-Capriote
-capriped
-capripede
-caprizant
-caproate
-caproic
-caproin
-Capromys
-caprone
-capronic
-capronyl
-caproyl
-capryl
-caprylate
-caprylene
-caprylic
-caprylin
-caprylone
-caprylyl
-capsa
-capsaicin
-Capsella
-capsheaf
-capshore
-Capsian
-capsicin
-Capsicum
-capsicum
-capsid
-Capsidae
-capsizal
-capsize
-capstan
-capstone
-capsula
-capsulae
-capsular
-capsulate
-capsulated
-capsulation
-capsule
-capsulectomy
-capsuler
-capsuliferous
-capsuliform
-capsuligerous
-capsulitis
-capsulociliary
-capsulogenous
-capsulolenticular
-capsulopupillary
-capsulorrhaphy
-capsulotome
-capsulotomy
-capsumin
-captaculum
-captain
-captaincy
-captainess
-captainly
-captainry
-captainship
-captance
-captation
-caption
-captious
-captiously
-captiousness
-captivate
-captivately
-captivating
-captivatingly
-captivation
-captivative
-captivator
-captivatrix
-captive
-captivity
-captor
-captress
-capturable
-capture
-capturer
-Capuan
-capuche
-capuched
-Capuchin
-capuchin
-capucine
-capulet
-capulin
-capybara
-Caquetio
-car
-Cara
-carabao
-carabeen
-carabid
-Carabidae
-carabidan
-carabideous
-carabidoid
-carabin
-carabineer
-Carabini
-caraboid
-Carabus
-carabus
-caracal
-caracara
-caracol
-caracole
-caracoler
-caracoli
-caracolite
-caracoller
-caracore
-caract
-Caractacus
-caracter
-Caradoc
-carafe
-Caragana
-Caraguata
-caraguata
-Caraho
-caraibe
-Caraipa
-caraipi
-Caraja
-Carajas
-carajura
-caramba
-carambola
-carambole
-caramel
-caramelan
-caramelen
-caramelin
-caramelization
-caramelize
-caramoussal
-carancha
-caranda
-Carandas
-caranday
-carane
-Caranga
-carangid
-Carangidae
-carangoid
-Carangus
-caranna
-Caranx
-Carapa
-carapace
-carapaced
-Carapache
-Carapacho
-carapacic
-carapato
-carapax
-Carapidae
-carapine
-carapo
-Carapus
-Carara
-carat
-caratch
-caraunda
-caravan
-caravaneer
-caravanist
-caravanner
-caravansary
-caravanserai
-caravanserial
-caravel
-caraway
-Carayan
-carbacidometer
-carbamate
-carbamic
-carbamide
-carbamido
-carbamine
-carbamino
-carbamyl
-carbanil
-carbanilic
-carbanilide
-carbarn
-carbasus
-carbazic
-carbazide
-carbazine
-carbazole
-carbazylic
-carbeen
-carbene
-carberry
-carbethoxy
-carbethoxyl
-carbide
-carbimide
-carbine
-carbinol
-carbinyl
-carbo
-carboazotine
-carbocinchomeronic
-carbodiimide
-carbodynamite
-carbogelatin
-carbohemoglobin
-carbohydrase
-carbohydrate
-carbohydraturia
-carbohydrazide
-carbohydride
-carbohydrogen
-carbolate
-carbolated
-carbolfuchsin
-carbolic
-carbolineate
-Carbolineum
-carbolize
-Carboloy
-carboluria
-carbolxylol
-carbomethene
-carbomethoxy
-carbomethoxyl
-carbon
-carbona
-carbonaceous
-carbonade
-carbonado
-Carbonari
-Carbonarism
-Carbonarist
-carbonatation
-carbonate
-carbonation
-carbonatization
-carbonator
-carbonemia
-carbonero
-carbonic
-carbonide
-Carboniferous
-carboniferous
-carbonification
-carbonify
-carbonigenous
-carbonimeter
-carbonimide
-carbonite
-carbonitride
-carbonium
-carbonizable
-carbonization
-carbonize
-carbonizer
-carbonless
-Carbonnieux
-carbonometer
-carbonometry
-carbonous
-carbonuria
-carbonyl
-carbonylene
-carbonylic
-carbophilous
-carbora
-Carborundum
-carborundum
-carbosilicate
-carbostyril
-carboxide
-carboxy
-Carboxydomonas
-carboxyhemoglobin
-carboxyl
-carboxylase
-carboxylate
-carboxylation
-carboxylic
-carboy
-carboyed
-carbro
-carbromal
-carbuilder
-carbuncle
-carbuncled
-carbuncular
-carbungi
-carburant
-carburate
-carburation
-carburator
-carbure
-carburet
-carburetant
-carburetor
-carburization
-carburize
-carburizer
-carburometer
-carbyl
-carbylamine
-carcajou
-carcake
-carcanet
-carcaneted
-carcass
-Carcavelhos
-carceag
-carcel
-carceral
-carcerate
-carceration
-Carcharhinus
-Carcharias
-carchariid
-Carchariidae
-carcharioid
-Carcharodon
-carcharodont
-carcinemia
-carcinogen
-carcinogenesis
-carcinogenic
-carcinoid
-carcinological
-carcinologist
-carcinology
-carcinolysin
-carcinolytic
-carcinoma
-carcinomata
-carcinomatoid
-carcinomatosis
-carcinomatous
-carcinomorphic
-carcinophagous
-carcinopolypus
-carcinosarcoma
-carcinosarcomata
-Carcinoscorpius
-carcinosis
-carcoon
-card
-cardaissin
-Cardamine
-cardamom
-Cardanic
-cardboard
-cardcase
-cardecu
-carded
-cardel
-carder
-cardholder
-cardia
-cardiac
-cardiacal
-Cardiacea
-cardiacean
-cardiagra
-cardiagram
-cardiagraph
-cardiagraphy
-cardial
-cardialgia
-cardialgy
-cardiameter
-cardiamorphia
-cardianesthesia
-cardianeuria
-cardiant
-cardiaplegia
-cardiarctia
-cardiasthenia
-cardiasthma
-cardiataxia
-cardiatomy
-cardiatrophia
-cardiauxe
-Cardiazol
-cardicentesis
-cardiectasis
-cardiectomize
-cardiectomy
-cardielcosis
-cardiemphraxia
-cardiform
-Cardigan
-cardigan
-Cardiidae
-cardin
-cardinal
-cardinalate
-cardinalic
-Cardinalis
-cardinalism
-cardinalist
-cardinalitial
-cardinalitian
-cardinally
-cardinalship
-cardines
-carding
-cardioaccelerator
-cardioarterial
-cardioblast
-cardiocarpum
-cardiocele
-cardiocentesis
-cardiocirrhosis
-cardioclasia
-cardioclasis
-cardiodilator
-cardiodynamics
-cardiodynia
-cardiodysesthesia
-cardiodysneuria
-cardiogenesis
-cardiogenic
-cardiogram
-cardiograph
-cardiographic
-cardiography
-cardiohepatic
-cardioid
-cardiokinetic
-cardiolith
-cardiological
-cardiologist
-cardiology
-cardiolysis
-cardiomalacia
-cardiomegaly
-cardiomelanosis
-cardiometer
-cardiometric
-cardiometry
-cardiomotility
-cardiomyoliposis
-cardiomyomalacia
-cardioncus
-cardionecrosis
-cardionephric
-cardioneural
-cardioneurosis
-cardionosus
-cardioparplasis
-cardiopathic
-cardiopathy
-cardiopericarditis
-cardiophobe
-cardiophobia
-cardiophrenia
-cardioplasty
-cardioplegia
-cardiopneumatic
-cardiopneumograph
-cardioptosis
-cardiopulmonary
-cardiopuncture
-cardiopyloric
-cardiorenal
-cardiorespiratory
-cardiorrhaphy
-cardiorrheuma
-cardiorrhexis
-cardioschisis
-cardiosclerosis
-cardioscope
-cardiospasm
-Cardiospermum
-cardiosphygmogram
-cardiosphygmograph
-cardiosymphysis
-cardiotherapy
-cardiotomy
-cardiotonic
-cardiotoxic
-cardiotrophia
-cardiotrophotherapy
-cardiovascular
-cardiovisceral
-cardipaludism
-cardipericarditis
-cardisophistical
-carditic
-carditis
-Cardium
-cardlike
-cardmaker
-cardmaking
-cardo
-cardol
-cardon
-cardona
-cardoncillo
-cardooer
-cardoon
-cardophagus
-cardplayer
-cardroom
-cardsharp
-cardsharping
-cardstock
-Carduaceae
-carduaceous
-Carduelis
-Carduus
-care
-carecloth
-careen
-careenage
-careener
-career
-careerer
-careering
-careeringly
-careerist
-carefree
-careful
-carefully
-carefulness
-careless
-carelessly
-carelessness
-carene
-carer
-caress
-caressant
-caresser
-caressing
-caressingly
-caressive
-caressively
-carest
-caret
-caretaker
-caretaking
-Caretta
-Carettochelydidae
-careworn
-Carex
-carfare
-carfax
-carfuffle
-carful
-carga
-cargo
-cargoose
-carhop
-carhouse
-cariacine
-Cariacus
-cariama
-Cariamae
-Carian
-Carib
-Caribal
-Cariban
-Caribbean
-Caribbee
-Caribi
-Caribisi
-caribou
-Carica
-Caricaceae
-caricaceous
-caricatura
-caricaturable
-caricatural
-caricature
-caricaturist
-caricetum
-caricographer
-caricography
-caricologist
-caricology
-caricous
-carid
-Carida
-Caridea
-caridean
-caridoid
-Caridomorpha
-caries
-Carijona
-carillon
-carillonneur
-carina
-carinal
-Carinaria
-Carinatae
-carinate
-carinated
-carination
-Cariniana
-cariniform
-Carinthian
-cariole
-carioling
-cariosity
-carious
-cariousness
-Caripuna
-Cariri
-Caririan
-Carisa
-Carissa
-caritative
-caritive
-Cariyo
-cark
-carking
-carkingly
-carkled
-Carl
-carl
-carless
-carlet
-carlie
-carlin
-Carlina
-carline
-carling
-carlings
-carlish
-carlishness
-Carlisle
-Carlism
-Carlist
-Carlo
-carload
-carloading
-carloadings
-Carlos
-carlot
-Carlovingian
-carls
-Carludovica
-Carlylean
-Carlyleian
-Carlylese
-Carlylesque
-Carlylian
-Carlylism
-carmagnole
-carmalum
-Carman
-carman
-Carmanians
-Carmel
-Carmela
-carmele
-Carmelite
-Carmelitess
-carmeloite
-Carmen
-carminative
-Carmine
-carmine
-carminette
-carminic
-carminite
-carminophilous
-carmoisin
-carmot
-Carnacian
-carnage
-carnaged
-carnal
-carnalism
-carnalite
-carnality
-carnalize
-carnallite
-carnally
-carnalness
-carnaptious
-Carnaria
-carnassial
-carnate
-carnation
-carnationed
-carnationist
-carnauba
-carnaubic
-carnaubyl
-Carnegie
-Carnegiea
-carnelian
-carneol
-carneole
-carneous
-carney
-carnic
-carniferous
-carniferrin
-carnifex
-carnification
-carnifices
-carnificial
-carniform
-carnify
-Carniolan
-carnival
-carnivaler
-carnivalesque
-Carnivora
-carnivoracity
-carnivoral
-carnivore
-carnivorism
-carnivorous
-carnivorously
-carnivorousness
-carnose
-carnosine
-carnosity
-carnotite
-carnous
-Caro
-caroa
-carob
-caroba
-caroche
-Caroid
-Carol
-carol
-Carolan
-Carole
-Carolean
-caroler
-caroli
-carolin
-Carolina
-Caroline
-caroline
-Caroling
-Carolingian
-Carolinian
-carolus
-Carolyn
-carom
-carombolette
-carone
-caronic
-caroome
-caroon
-carotene
-carotenoid
-carotic
-carotid
-carotidal
-carotidean
-carotin
-carotinemia
-carotinoid
-caroubier
-carousal
-carouse
-carouser
-carousing
-carousingly
-carp
-carpaine
-carpal
-carpale
-carpalia
-Carpathian
-carpel
-carpellary
-carpellate
-carpent
-carpenter
-Carpenteria
-carpentering
-carpentership
-carpentry
-carper
-carpet
-carpetbag
-carpetbagger
-carpetbaggery
-carpetbaggism
-carpetbagism
-carpetbeater
-carpeting
-carpetlayer
-carpetless
-carpetmaker
-carpetmaking
-carpetmonger
-carpetweb
-carpetweed
-carpetwork
-carpetwoven
-Carphiophiops
-carpholite
-Carphophis
-carphosiderite
-carpid
-carpidium
-carpincho
-carping
-carpingly
-carpintero
-Carpinus
-Carpiodes
-carpitis
-carpium
-carpocace
-Carpocapsa
-carpocarpal
-carpocephala
-carpocephalum
-carpocerite
-carpocervical
-Carpocratian
-Carpodacus
-Carpodetus
-carpogam
-carpogamy
-carpogenic
-carpogenous
-carpogone
-carpogonial
-carpogonium
-Carpoidea
-carpolite
-carpolith
-carpological
-carpologically
-carpologist
-carpology
-carpomania
-carpometacarpal
-carpometacarpus
-carpopedal
-Carpophaga
-carpophagous
-carpophalangeal
-carpophore
-carpophyll
-carpophyte
-carpopodite
-carpopoditic
-carpoptosia
-carpoptosis
-carport
-carpos
-carposperm
-carposporangia
-carposporangial
-carposporangium
-carpospore
-carposporic
-carposporous
-carpostome
-carpus
-carquaise
-carr
-carrack
-carrageen
-carrageenin
-Carrara
-Carraran
-carrel
-carriable
-carriage
-carriageable
-carriageful
-carriageless
-carriagesmith
-carriageway
-Carrick
-carrick
-Carrie
-carried
-carrier
-carrion
-carritch
-carritches
-carriwitchet
-Carrizo
-carrizo
-carroch
-carrollite
-carronade
-carrot
-carrotage
-carroter
-carrotiness
-carrottop
-carrotweed
-carrotwood
-carroty
-carrousel
-carrow
-Carry
-carry
-carryall
-carrying
-carrytale
-carse
-carshop
-carsick
-carsmith
-Carsten
-cart
-cartable
-cartaceous
-cartage
-cartboot
-cartbote
-carte
-cartel
-cartelism
-cartelist
-cartelization
-cartelize
-Carter
-carter
-Cartesian
-Cartesianism
-cartful
-Carthaginian
-carthame
-carthamic
-carthamin
-Carthamus
-Carthusian
-Cartier
-cartilage
-cartilaginean
-Cartilaginei
-cartilagineous
-Cartilagines
-cartilaginification
-cartilaginoid
-cartilaginous
-cartisane
-Cartist
-cartload
-cartmaker
-cartmaking
-cartman
-cartobibliography
-cartogram
-cartograph
-cartographer
-cartographic
-cartographical
-cartographically
-cartography
-cartomancy
-carton
-cartonnage
-cartoon
-cartoonist
-cartouche
-cartridge
-cartsale
-cartulary
-cartway
-cartwright
-cartwrighting
-carty
-carua
-carucage
-carucal
-carucate
-carucated
-Carum
-caruncle
-caruncula
-carunculae
-caruncular
-carunculate
-carunculated
-carunculous
-carvacrol
-carvacryl
-carval
-carve
-carvel
-carven
-carvene
-carver
-carvership
-carvestrene
-carving
-carvoepra
-carvol
-carvomenthene
-carvone
-carvyl
-carwitchet
-Cary
-Carya
-caryatic
-caryatid
-caryatidal
-caryatidean
-caryatidic
-caryl
-Caryocar
-Caryocaraceae
-caryocaraceous
-Caryophyllaceae
-caryophyllaceous
-caryophyllene
-caryophylleous
-caryophyllin
-caryophyllous
-Caryophyllus
-caryopilite
-caryopses
-caryopsides
-caryopsis
-Caryopteris
-Caryota
-casaba
-casabe
-casal
-casalty
-Casamarca
-Casanovanic
-Casasia
-casate
-casaun
-casava
-casave
-casavi
-casbah
-cascabel
-cascade
-Cascadia
-Cascadian
-cascadite
-cascado
-cascalho
-cascalote
-cascara
-cascarilla
-cascaron
-casco
-cascol
-Case
-case
-Casearia
-casease
-caseate
-caseation
-casebook
-casebox
-cased
-caseful
-casefy
-caseharden
-caseic
-casein
-caseinate
-caseinogen
-casekeeper
-Casel
-caseless
-caselessly
-casemaker
-casemaking
-casemate
-casemated
-casement
-casemented
-caseolysis
-caseose
-caseous
-caser
-casern
-caseum
-caseweed
-casewood
-casework
-caseworker
-caseworm
-Casey
-cash
-casha
-cashable
-cashableness
-cashaw
-cashbook
-cashbox
-cashboy
-cashcuttee
-cashel
-cashew
-cashgirl
-Cashibo
-cashier
-cashierer
-cashierment
-cashkeeper
-cashment
-Cashmere
-cashmere
-cashmerette
-Cashmirian
-Casimir
-Casimiroa
-casing
-casino
-casiri
-cask
-casket
-casking
-casklike
-Caslon
-Caspar
-Casparian
-Casper
-Caspian
-casque
-casqued
-casquet
-casquetel
-casquette
-cass
-cassabanana
-cassabully
-cassady
-Cassandra
-cassareep
-cassation
-casse
-Cassegrain
-Cassegrainian
-casselty
-cassena
-casserole
-Cassia
-cassia
-Cassiaceae
-Cassian
-cassican
-Cassicus
-Cassida
-cassideous
-cassidid
-Cassididae
-Cassidinae
-cassidony
-Cassidulina
-cassiduloid
-Cassiduloidea
-Cassie
-cassie
-Cassiepeia
-cassimere
-cassina
-cassine
-Cassinese
-cassinette
-Cassinian
-cassino
-cassinoid
-cassioberry
-Cassiope
-Cassiopeia
-Cassiopeian
-Cassiopeid
-cassiopeium
-Cassis
-cassis
-cassiterite
-Cassius
-cassock
-cassolette
-casson
-cassonade
-cassoon
-cassowary
-cassumunar
-Cassytha
-Cassythaceae
-cast
-castable
-castagnole
-Castalia
-Castalian
-Castalides
-Castalio
-Castanea
-castanean
-castaneous
-castanet
-Castanopsis
-Castanospermum
-castaway
-caste
-casteless
-castelet
-castellan
-castellano
-castellanship
-castellany
-castellar
-castellate
-castellated
-castellation
-caster
-casterless
-casthouse
-castice
-castigable
-castigate
-castigation
-castigative
-castigator
-castigatory
-Castilian
-Castilla
-Castilleja
-Castilloa
-casting
-castle
-castled
-castlelike
-castlet
-castlewards
-castlewise
-castling
-castock
-castoff
-Castor
-castor
-Castores
-castoreum
-castorial
-Castoridae
-castorin
-castorite
-castorized
-Castoroides
-castory
-castra
-castral
-castrametation
-castrate
-castrater
-castration
-castrator
-castrensial
-castrensian
-castrum
-castuli
-casual
-casualism
-casualist
-casuality
-casually
-casualness
-casualty
-Casuariidae
-Casuariiformes
-Casuarina
-Casuarinaceae
-casuarinaceous
-Casuarinales
-Casuarius
-casuary
-casuist
-casuistess
-casuistic
-casuistical
-casuistically
-casuistry
-casula
-caswellite
-Casziel
-Cat
-cat
-catabaptist
-catabases
-catabasis
-catabatic
-catabibazon
-catabiotic
-catabolic
-catabolically
-catabolin
-catabolism
-catabolite
-catabolize
-catacaustic
-catachreses
-catachresis
-catachrestic
-catachrestical
-catachrestically
-catachthonian
-cataclasm
-cataclasmic
-cataclastic
-cataclinal
-cataclysm
-cataclysmal
-cataclysmatic
-cataclysmatist
-cataclysmic
-cataclysmically
-cataclysmist
-catacomb
-catacorolla
-catacoustics
-catacromyodian
-catacrotic
-catacrotism
-catacumbal
-catadicrotic
-catadicrotism
-catadioptric
-catadioptrical
-catadioptrics
-catadromous
-catafalco
-catafalque
-catagenesis
-catagenetic
-catagmatic
-Cataian
-catakinesis
-catakinetic
-catakinetomer
-catakinomeric
-Catalan
-Catalanganes
-Catalanist
-catalase
-Catalaunian
-catalecta
-catalectic
-catalecticant
-catalepsis
-catalepsy
-cataleptic
-cataleptiform
-cataleptize
-cataleptoid
-catalexis
-catalina
-catalineta
-catalinite
-catallactic
-catallactically
-catallactics
-catallum
-catalogia
-catalogic
-catalogical
-catalogist
-catalogistic
-catalogue
-cataloguer
-cataloguish
-cataloguist
-cataloguize
-Catalonian
-catalowne
-Catalpa
-catalpa
-catalufa
-catalyses
-catalysis
-catalyst
-catalyte
-catalytic
-catalytical
-catalytically
-catalyzator
-catalyze
-catalyzer
-catamaran
-Catamarcan
-Catamarenan
-catamenia
-catamenial
-catamite
-catamited
-catamiting
-catamount
-catamountain
-catan
-Catananche
-catapan
-catapasm
-catapetalous
-cataphasia
-cataphatic
-cataphora
-cataphoresis
-cataphoretic
-cataphoria
-cataphoric
-cataphract
-Cataphracta
-Cataphracti
-cataphrenia
-cataphrenic
-Cataphrygian
-cataphrygianism
-cataphyll
-cataphylla
-cataphyllary
-cataphyllum
-cataphysical
-cataplasia
-cataplasis
-cataplasm
-catapleiite
-cataplexy
-catapult
-catapultic
-catapultier
-cataract
-cataractal
-cataracted
-cataractine
-cataractous
-cataractwise
-cataria
-catarinite
-catarrh
-catarrhal
-catarrhally
-catarrhed
-Catarrhina
-catarrhine
-catarrhinian
-catarrhous
-catasarka
-Catasetum
-catasta
-catastaltic
-catastasis
-catastate
-catastatic
-catasterism
-catastrophal
-catastrophe
-catastrophic
-catastrophical
-catastrophically
-catastrophism
-catastrophist
-catathymic
-catatonia
-catatoniac
-catatonic
-catawampous
-catawampously
-catawamptious
-catawamptiously
-catawampus
-Catawba
-catberry
-catbird
-catboat
-catcall
-catch
-catchable
-catchall
-catchcry
-catcher
-catchfly
-catchiness
-catching
-catchingly
-catchingness
-catchland
-catchment
-catchpenny
-catchplate
-catchpole
-catchpolery
-catchpoleship
-catchpoll
-catchpollery
-catchup
-catchwater
-catchweed
-catchweight
-catchword
-catchwork
-catchy
-catclaw
-catdom
-cate
-catechesis
-catechetic
-catechetical
-catechetically
-catechin
-catechism
-catechismal
-catechist
-catechistic
-catechistical
-catechistically
-catechizable
-catechization
-catechize
-catechizer
-catechol
-catechu
-catechumen
-catechumenal
-catechumenate
-catechumenical
-catechumenically
-catechumenism
-catechumenship
-catechutannic
-categorem
-categorematic
-categorematical
-categorematically
-categorial
-categoric
-categorical
-categorically
-categoricalness
-categorist
-categorization
-categorize
-category
-catelectrotonic
-catelectrotonus
-catella
-catena
-catenae
-catenarian
-catenary
-catenate
-catenated
-catenation
-catenoid
-catenulate
-catepuce
-cater
-cateran
-catercap
-catercorner
-caterer
-caterership
-cateress
-caterpillar
-caterpillared
-caterpillarlike
-caterva
-caterwaul
-caterwauler
-caterwauling
-Catesbaea
-cateye
-catface
-catfaced
-catfacing
-catfall
-catfish
-catfoot
-catfooted
-catgut
-Catha
-Cathari
-Catharina
-Catharine
-Catharism
-Catharist
-Catharistic
-catharization
-catharize
-catharpin
-catharping
-Cathars
-catharsis
-Cathartae
-Cathartes
-cathartic
-cathartical
-cathartically
-catharticalness
-Cathartidae
-Cathartides
-Cathartolinum
-Cathay
-Cathayan
-cathead
-cathect
-cathectic
-cathection
-cathedra
-cathedral
-cathedraled
-cathedralesque
-cathedralic
-cathedrallike
-cathedralwise
-cathedratic
-cathedratica
-cathedratical
-cathedratically
-cathedraticum
-cathepsin
-Catherine
-catheter
-catheterism
-catheterization
-catheterize
-catheti
-cathetometer
-cathetometric
-cathetus
-cathexion
-cathexis
-cathidine
-cathin
-cathine
-cathinine
-cathion
-cathisma
-cathodal
-cathode
-cathodic
-cathodical
-cathodically
-cathodofluorescence
-cathodograph
-cathodography
-cathodoluminescence
-cathograph
-cathography
-cathole
-catholic
-catholical
-catholically
-catholicalness
-catholicate
-catholicism
-catholicist
-catholicity
-catholicize
-catholicizer
-catholicly
-catholicness
-catholicon
-catholicos
-catholicus
-catholyte
-cathood
-cathop
-Cathrin
-cathro
-Cathryn
-Cathy
-Catilinarian
-cation
-cationic
-cativo
-catjang
-catkin
-catkinate
-catlap
-catlike
-catlin
-catling
-catlinite
-catmalison
-catmint
-catnip
-catoblepas
-Catocala
-catocalid
-catocathartic
-catoctin
-Catodon
-catodont
-catogene
-catogenic
-Catoism
-Catonian
-Catonic
-Catonically
-Catonism
-catoptric
-catoptrical
-catoptrically
-catoptrics
-catoptrite
-catoptromancy
-catoptromantic
-Catoquina
-catostomid
-Catostomidae
-catostomoid
-Catostomus
-catpiece
-catpipe
-catproof
-Catskill
-catskin
-catstep
-catstick
-catstitch
-catstitcher
-catstone
-catsup
-cattabu
-cattail
-cattalo
-cattery
-Catti
-cattily
-cattimandoo
-cattiness
-catting
-cattish
-cattishly
-cattishness
-cattle
-cattlebush
-cattlegate
-cattleless
-cattleman
-Cattleya
-cattleya
-cattleyak
-Catty
-catty
-cattyman
-Catullian
-catvine
-catwalk
-catwise
-catwood
-catwort
-caubeen
-cauboge
-Caucasian
-Caucasic
-Caucasoid
-cauch
-cauchillo
-caucho
-caucus
-cauda
-caudad
-caudae
-caudal
-caudally
-caudalward
-Caudata
-caudata
-caudate
-caudated
-caudation
-caudatolenticular
-caudatory
-caudatum
-caudex
-caudices
-caudicle
-caudiform
-caudillism
-caudle
-caudocephalad
-caudodorsal
-caudofemoral
-caudolateral
-caudotibial
-caudotibialis
-Caughnawaga
-caught
-cauk
-caul
-cauld
-cauldrife
-cauldrifeness
-Caulerpa
-Caulerpaceae
-caulerpaceous
-caules
-caulescent
-caulicle
-caulicole
-caulicolous
-caulicule
-cauliculus
-cauliferous
-cauliflorous
-cauliflory
-cauliflower
-cauliform
-cauligenous
-caulinar
-caulinary
-cauline
-caulis
-Caulite
-caulivorous
-caulocarpic
-caulocarpous
-caulome
-caulomer
-caulomic
-caulophylline
-Caulophyllum
-Caulopteris
-caulopteris
-caulosarc
-caulotaxis
-caulotaxy
-caulote
-caum
-cauma
-caumatic
-caunch
-Caunos
-Caunus
-caup
-caupo
-caupones
-Cauqui
-caurale
-Caurus
-causability
-causable
-causal
-causalgia
-causality
-causally
-causate
-causation
-causational
-causationism
-causationist
-causative
-causatively
-causativeness
-causativity
-cause
-causeful
-causeless
-causelessly
-causelessness
-causer
-causerie
-causeway
-causewayman
-causey
-causidical
-causing
-causingness
-causse
-causson
-caustic
-caustical
-caustically
-causticiser
-causticism
-causticity
-causticization
-causticize
-causticizer
-causticly
-causticness
-caustification
-caustify
-Causus
-cautel
-cautelous
-cautelously
-cautelousness
-cauter
-cauterant
-cauterization
-cauterize
-cautery
-caution
-cautionary
-cautioner
-cautionry
-cautious
-cautiously
-cautiousness
-cautivo
-cava
-cavae
-caval
-cavalcade
-cavalero
-cavalier
-cavalierish
-cavalierishness
-cavalierism
-cavalierly
-cavalierness
-cavaliero
-cavaliership
-cavalla
-cavalry
-cavalryman
-cavascope
-cavate
-cavatina
-cave
-caveat
-caveator
-cavekeeper
-cavel
-cavelet
-cavelike
-cavendish
-cavern
-cavernal
-caverned
-cavernicolous
-cavernitis
-cavernlike
-cavernoma
-cavernous
-cavernously
-cavernulous
-cavesson
-cavetto
-Cavia
-caviar
-cavicorn
-Cavicornia
-Cavidae
-cavie
-cavil
-caviler
-caviling
-cavilingly
-cavilingness
-cavillation
-Cavina
-caving
-cavings
-cavish
-cavitary
-cavitate
-cavitation
-cavitied
-cavity
-caviya
-cavort
-cavus
-cavy
-caw
-cawk
-cawky
-cawney
-cawquaw
-caxiri
-caxon
-Caxton
-Caxtonian
-cay
-Cayapa
-Cayapo
-Cayenne
-cayenne
-cayenned
-Cayleyan
-cayman
-Cayubaba
-Cayubaban
-Cayuga
-Cayugan
-Cayuse
-Cayuvava
-caza
-cazimi
-Ccoya
-ce
-Ceanothus
-cearin
-cease
-ceaseless
-ceaselessly
-ceaselessness
-ceasmic
-Cebalrai
-Cebatha
-cebell
-cebian
-cebid
-Cebidae
-cebil
-cebine
-ceboid
-cebollite
-cebur
-Cebus
-cecidiologist
-cecidiology
-cecidium
-cecidogenous
-cecidologist
-cecidology
-cecidomyian
-cecidomyiid
-Cecidomyiidae
-cecidomyiidous
-Cecil
-Cecile
-Cecilia
-cecilite
-cecils
-Cecily
-cecity
-cecograph
-Cecomorphae
-cecomorphic
-cecostomy
-Cecropia
-Cecrops
-cecutiency
-cedar
-cedarbird
-cedared
-cedarn
-cedarware
-cedarwood
-cedary
-cede
-cedent
-ceder
-cedilla
-cedrat
-cedrate
-cedre
-Cedrela
-cedrene
-Cedric
-cedrin
-cedrine
-cedriret
-cedrium
-cedrol
-cedron
-Cedrus
-cedry
-cedula
-cee
-Ceiba
-ceibo
-ceil
-ceile
-ceiler
-ceilidh
-ceiling
-ceilinged
-ceilingward
-ceilingwards
-ceilometer
-Celadon
-celadon
-celadonite
-Celaeno
-celandine
-Celanese
-Celarent
-Celastraceae
-celastraceous
-Celastrus
-celation
-celative
-celature
-Celebesian
-celebrant
-celebrate
-celebrated
-celebratedness
-celebrater
-celebration
-celebrative
-celebrator
-celebratory
-celebrity
-celemin
-celemines
-celeomorph
-Celeomorphae
-celeomorphic
-celeriac
-celerity
-celery
-celesta
-Celeste
-celeste
-celestial
-celestiality
-celestialize
-celestially
-celestialness
-celestina
-Celestine
-celestine
-Celestinian
-celestite
-celestitude
-Celia
-celiac
-celiadelphus
-celiagra
-celialgia
-celibacy
-celibatarian
-celibate
-celibatic
-celibatist
-celibatory
-celidographer
-celidography
-celiectasia
-celiectomy
-celiemia
-celiitis
-celiocele
-celiocentesis
-celiocolpotomy
-celiocyesis
-celiodynia
-celioelytrotomy
-celioenterotomy
-celiogastrotomy
-celiohysterotomy
-celiolymph
-celiomyalgia
-celiomyodynia
-celiomyomectomy
-celiomyomotomy
-celiomyositis
-celioncus
-celioparacentesis
-celiopyosis
-celiorrhaphy
-celiorrhea
-celiosalpingectomy
-celiosalpingotomy
-celioschisis
-celioscope
-celioscopy
-celiotomy
-celite
-cell
-cella
-cellae
-cellar
-cellarage
-cellarer
-cellaress
-cellaret
-cellaring
-cellarless
-cellarman
-cellarous
-cellarway
-cellarwoman
-cellated
-celled
-Cellepora
-cellepore
-Cellfalcicula
-celliferous
-celliform
-cellifugal
-cellipetal
-cellist
-Cellite
-cello
-cellobiose
-celloid
-celloidin
-celloist
-cellophane
-cellose
-Cellucotton
-cellular
-cellularity
-cellularly
-cellulase
-cellulate
-cellulated
-cellulation
-cellule
-cellulicidal
-celluliferous
-cellulifugal
-cellulifugally
-cellulin
-cellulipetal
-cellulipetally
-cellulitis
-cellulocutaneous
-cellulofibrous
-Celluloid
-celluloid
-celluloided
-Cellulomonadeae
-Cellulomonas
-cellulose
-cellulosic
-cellulosity
-cellulotoxic
-cellulous
-Cellvibrio
-Celosia
-Celotex
-celotomy
-Celsia
-celsian
-Celsius
-Celt
-celt
-Celtdom
-Celtiberi
-Celtiberian
-Celtic
-Celtically
-Celticism
-Celticist
-Celticize
-Celtidaceae
-celtiform
-Celtillyrians
-Celtis
-Celtish
-Celtism
-Celtist
-celtium
-Celtization
-Celtologist
-Celtologue
-Celtomaniac
-Celtophil
-Celtophobe
-Celtophobia
-celtuce
-cembalist
-cembalo
-cement
-cemental
-cementation
-cementatory
-cementer
-cementification
-cementin
-cementite
-cementitious
-cementless
-cementmaker
-cementmaking
-cementoblast
-cementoma
-cementum
-cemeterial
-cemetery
-cenacle
-cenaculum
-cenanthous
-cenanthy
-cencerro
-Cenchrus
-cendre
-cenobian
-cenobite
-cenobitic
-cenobitical
-cenobitically
-cenobitism
-cenobium
-cenoby
-cenogenesis
-cenogenetic
-cenogenetically
-cenogonous
-Cenomanian
-cenosite
-cenosity
-cenospecies
-cenospecific
-cenospecifically
-cenotaph
-cenotaphic
-cenotaphy
-Cenozoic
-cenozoology
-cense
-censer
-censerless
-censive
-censor
-censorable
-censorate
-censorial
-censorious
-censoriously
-censoriousness
-censorship
-censual
-censurability
-censurable
-censurableness
-censurably
-censure
-censureless
-censurer
-censureship
-census
-cent
-centage
-cental
-centare
-centaur
-centaurdom
-Centaurea
-centauress
-centauri
-centaurial
-centaurian
-centauric
-Centaurid
-Centauridium
-Centaurium
-centauromachia
-centauromachy
-Centaurus
-centaurus
-centaury
-centavo
-centena
-centenar
-centenarian
-centenarianism
-centenary
-centenier
-centenionalis
-centennial
-centennially
-center
-centerable
-centerboard
-centered
-centerer
-centering
-centerless
-centermost
-centerpiece
-centervelic
-centerward
-centerwise
-centesimal
-centesimally
-centesimate
-centesimation
-centesimi
-centesimo
-centesis
-Centetes
-centetid
-Centetidae
-centgener
-centiar
-centiare
-centibar
-centifolious
-centigrade
-centigram
-centile
-centiliter
-centillion
-centillionth
-Centiloquy
-centime
-centimeter
-centimo
-centimolar
-centinormal
-centipedal
-centipede
-centiplume
-centipoise
-centistere
-centistoke
-centner
-cento
-centonical
-centonism
-centrad
-central
-centrale
-Centrales
-centralism
-centralist
-centralistic
-centrality
-centralization
-centralize
-centralizer
-centrally
-centralness
-centranth
-Centranthus
-centrarchid
-Centrarchidae
-centrarchoid
-Centraxonia
-centraxonial
-Centrechinoida
-centric
-Centricae
-centrical
-centricality
-centrically
-centricalness
-centricipital
-centriciput
-centricity
-centriffed
-centrifugal
-centrifugalization
-centrifugalize
-centrifugaller
-centrifugally
-centrifugate
-centrifugation
-centrifuge
-centrifugence
-centriole
-centripetal
-centripetalism
-centripetally
-centripetence
-centripetency
-centriscid
-Centriscidae
-centrisciform
-centriscoid
-Centriscus
-centrist
-centroacinar
-centrobaric
-centrobarical
-centroclinal
-centrode
-centrodesmose
-centrodesmus
-centrodorsal
-centrodorsally
-centroid
-centroidal
-centrolecithal
-Centrolepidaceae
-centrolepidaceous
-centrolinead
-centrolineal
-centromere
-centronucleus
-centroplasm
-Centropomidae
-Centropomus
-Centrosema
-centrosome
-centrosomic
-Centrosoyus
-Centrospermae
-centrosphere
-centrosymmetric
-centrosymmetry
-Centrotus
-centrum
-centry
-centum
-centumvir
-centumviral
-centumvirate
-Centunculus
-centuple
-centuplicate
-centuplication
-centuply
-centuria
-centurial
-centuriate
-centuriation
-centuriator
-centuried
-centurion
-century
-ceorl
-ceorlish
-cep
-cepa
-cepaceous
-cepe
-cephaeline
-Cephaelis
-Cephalacanthidae
-Cephalacanthus
-cephalad
-cephalagra
-cephalalgia
-cephalalgic
-cephalalgy
-cephalanthium
-cephalanthous
-Cephalanthus
-Cephalaspis
-Cephalata
-cephalate
-cephaldemae
-cephalemia
-cephaletron
-Cephaleuros
-cephalhematoma
-cephalhydrocele
-cephalic
-cephalin
-Cephalina
-cephaline
-cephalism
-cephalitis
-cephalization
-cephaloauricular
-Cephalobranchiata
-cephalobranchiate
-cephalocathartic
-cephalocaudal
-cephalocele
-cephalocentesis
-cephalocercal
-Cephalocereus
-cephalochord
-Cephalochorda
-cephalochordal
-Cephalochordata
-cephalochordate
-cephaloclasia
-cephaloclast
-cephalocone
-cephaloconic
-cephalocyst
-cephalodiscid
-Cephalodiscida
-Cephalodiscus
-cephalodymia
-cephalodymus
-cephalodynia
-cephalofacial
-cephalogenesis
-cephalogram
-cephalograph
-cephalohumeral
-cephalohumeralis
-cephaloid
-cephalology
-cephalomancy
-cephalomant
-cephalomelus
-cephalomenia
-cephalomeningitis
-cephalomere
-cephalometer
-cephalometric
-cephalometry
-cephalomotor
-cephalomyitis
-cephalon
-cephalonasal
-cephalopagus
-cephalopathy
-cephalopharyngeal
-cephalophine
-cephalophorous
-Cephalophus
-cephalophyma
-cephaloplegia
-cephaloplegic
-cephalopod
-Cephalopoda
-cephalopodan
-cephalopodic
-cephalopodous
-Cephalopterus
-cephalorachidian
-cephalorhachidian
-cephalosome
-cephalospinal
-Cephalosporium
-cephalostyle
-Cephalotaceae
-cephalotaceous
-Cephalotaxus
-cephalotheca
-cephalothecal
-cephalothoracic
-cephalothoracopagus
-cephalothorax
-cephalotome
-cephalotomy
-cephalotractor
-cephalotribe
-cephalotripsy
-cephalotrocha
-Cephalotus
-cephalous
-Cephas
-Cepheid
-cephid
-Cephidae
-Cephus
-Cepolidae
-ceps
-ceptor
-cequi
-ceraceous
-cerago
-ceral
-ceramal
-cerambycid
-Cerambycidae
-Ceramiaceae
-ceramiaceous
-ceramic
-ceramicite
-ceramics
-ceramidium
-ceramist
-Ceramium
-ceramographic
-ceramography
-cerargyrite
-ceras
-cerasein
-cerasin
-cerastes
-Cerastium
-Cerasus
-cerata
-cerate
-ceratectomy
-cerated
-ceratiasis
-ceratiid
-Ceratiidae
-ceratioid
-ceration
-ceratite
-Ceratites
-ceratitic
-Ceratitidae
-Ceratitis
-ceratitoid
-Ceratitoidea
-Ceratium
-Ceratobatrachinae
-ceratoblast
-ceratobranchial
-ceratocricoid
-Ceratodidae
-Ceratodontidae
-Ceratodus
-ceratofibrous
-ceratoglossal
-ceratoglossus
-ceratohyal
-ceratohyoid
-ceratoid
-ceratomandibular
-ceratomania
-Ceratonia
-Ceratophrys
-Ceratophyllaceae
-ceratophyllaceous
-Ceratophyllum
-Ceratophyta
-ceratophyte
-Ceratops
-Ceratopsia
-ceratopsian
-ceratopsid
-Ceratopsidae
-Ceratopteridaceae
-ceratopteridaceous
-Ceratopteris
-ceratorhine
-Ceratosa
-Ceratosaurus
-Ceratospongiae
-ceratospongian
-Ceratostomataceae
-Ceratostomella
-ceratotheca
-ceratothecal
-Ceratozamia
-ceraunia
-ceraunics
-ceraunogram
-ceraunograph
-ceraunomancy
-ceraunophone
-ceraunoscope
-ceraunoscopy
-Cerberean
-Cerberic
-Cerberus
-cercal
-cercaria
-cercarial
-cercarian
-cercariform
-cercelee
-cerci
-Cercidiphyllaceae
-Cercis
-Cercocebus
-Cercolabes
-Cercolabidae
-cercomonad
-Cercomonadidae
-Cercomonas
-cercopid
-Cercopidae
-cercopithecid
-Cercopithecidae
-cercopithecoid
-Cercopithecus
-cercopod
-Cercospora
-Cercosporella
-cercus
-Cerdonian
-cere
-cereal
-cerealian
-cerealin
-cerealism
-cerealist
-cerealose
-cerebella
-cerebellar
-cerebellifugal
-cerebellipetal
-cerebellocortex
-cerebellopontile
-cerebellopontine
-cerebellorubral
-cerebellospinal
-cerebellum
-cerebra
-cerebral
-cerebralgia
-cerebralism
-cerebralist
-cerebralization
-cerebralize
-cerebrally
-cerebrasthenia
-cerebrasthenic
-cerebrate
-cerebration
-cerebrational
-Cerebratulus
-cerebric
-cerebricity
-cerebriform
-cerebriformly
-cerebrifugal
-cerebrin
-cerebripetal
-cerebritis
-cerebrize
-cerebrocardiac
-cerebrogalactose
-cerebroganglion
-cerebroganglionic
-cerebroid
-cerebrology
-cerebroma
-cerebromalacia
-cerebromedullary
-cerebromeningeal
-cerebromeningitis
-cerebrometer
-cerebron
-cerebronic
-cerebroparietal
-cerebropathy
-cerebropedal
-cerebrophysiology
-cerebropontile
-cerebropsychosis
-cerebrorachidian
-cerebrosclerosis
-cerebroscope
-cerebroscopy
-cerebrose
-cerebrosensorial
-cerebroside
-cerebrosis
-cerebrospinal
-cerebrospinant
-cerebrosuria
-cerebrotomy
-cerebrotonia
-cerebrotonic
-cerebrovisceral
-cerebrum
-cerecloth
-cered
-cereless
-cerement
-ceremonial
-ceremonialism
-ceremonialist
-ceremonialize
-ceremonially
-ceremonious
-ceremoniously
-ceremoniousness
-ceremony
-cereous
-cerer
-ceresin
-Cereus
-cerevis
-ceria
-Cerialia
-cerianthid
-Cerianthidae
-cerianthoid
-Cerianthus
-ceric
-ceride
-ceriferous
-cerigerous
-cerillo
-ceriman
-cerin
-cerine
-Cerinthe
-Cerinthian
-Ceriomyces
-Cerion
-Cerionidae
-ceriops
-Ceriornis
-cerise
-cerite
-Cerithiidae
-cerithioid
-Cerithium
-cerium
-cermet
-cern
-cerniture
-cernuous
-cero
-cerograph
-cerographic
-cerographist
-cerography
-ceroline
-cerolite
-ceroma
-ceromancy
-cerophilous
-ceroplast
-ceroplastic
-ceroplastics
-ceroplasty
-cerotate
-cerote
-cerotene
-cerotic
-cerotin
-cerotype
-cerous
-ceroxyle
-Ceroxylon
-cerrero
-cerrial
-cerris
-certain
-certainly
-certainty
-Certhia
-Certhiidae
-certie
-certifiable
-certifiableness
-certifiably
-certificate
-certification
-certificative
-certificator
-certificatory
-certified
-certifier
-certify
-certiorari
-certiorate
-certioration
-certis
-certitude
-certosina
-certosino
-certy
-cerule
-cerulean
-cerulein
-ceruleite
-ceruleolactite
-ceruleous
-cerulescent
-ceruleum
-cerulignol
-cerulignone
-cerumen
-ceruminal
-ceruminiferous
-ceruminous
-cerumniparous
-ceruse
-cerussite
-Cervantist
-cervantite
-cervical
-Cervicapra
-cervicaprine
-cervicectomy
-cervicicardiac
-cervicide
-cerviciplex
-cervicispinal
-cervicitis
-cervicoauricular
-cervicoaxillary
-cervicobasilar
-cervicobrachial
-cervicobregmatic
-cervicobuccal
-cervicodorsal
-cervicodynia
-cervicofacial
-cervicohumeral
-cervicolabial
-cervicolingual
-cervicolumbar
-cervicomuscular
-cerviconasal
-cervicorn
-cervicoscapular
-cervicothoracic
-cervicovaginal
-cervicovesical
-cervid
-Cervidae
-Cervinae
-cervine
-cervisia
-cervisial
-cervix
-cervoid
-cervuline
-Cervulus
-Cervus
-ceryl
-Cerynean
-Cesare
-cesarevitch
-cesarolite
-cesious
-cesium
-cespititous
-cespitose
-cespitosely
-cespitulose
-cess
-cessantly
-cessation
-cessative
-cessavit
-cesser
-cession
-cessionaire
-cessionary
-cessor
-cesspipe
-cesspit
-cesspool
-cest
-Cestida
-Cestidae
-Cestoda
-Cestodaria
-cestode
-cestoid
-Cestoidea
-cestoidean
-Cestracion
-cestraciont
-Cestraciontes
-Cestraciontidae
-Cestrian
-Cestrum
-cestrum
-cestus
-Cetacea
-cetacean
-cetaceous
-cetaceum
-cetane
-Cete
-cetene
-ceterach
-ceti
-cetic
-ceticide
-Cetid
-cetin
-Cetiosauria
-cetiosaurian
-Cetiosaurus
-cetological
-cetologist
-cetology
-Cetomorpha
-cetomorphic
-Cetonia
-cetonian
-Cetoniides
-Cetoniinae
-cetorhinid
-Cetorhinidae
-cetorhinoid
-Cetorhinus
-cetotolite
-Cetraria
-cetraric
-cetrarin
-Cetus
-cetyl
-cetylene
-cetylic
-cevadilla
-cevadilline
-cevadine
-Cevennian
-Cevenol
-Cevenole
-cevine
-cevitamic
-ceylanite
-Ceylon
-Ceylonese
-ceylonite
-ceyssatite
-Ceyx
-Cezannesque
-cha
-chaa
-chab
-chabasie
-chabazite
-Chablis
-chabot
-chabouk
-chabuk
-chabutra
-Chac
-chacate
-chachalaca
-Chachapuya
-chack
-Chackchiuma
-chacker
-chackle
-chackler
-chacma
-Chaco
-chacona
-chacte
-chad
-chadacryst
-Chaenactis
-Chaenolobus
-Chaenomeles
-chaeta
-Chaetangiaceae
-Chaetangium
-Chaetetes
-Chaetetidae
-Chaetifera
-chaetiferous
-Chaetites
-Chaetitidae
-Chaetochloa
-Chaetodon
-chaetodont
-chaetodontid
-Chaetodontidae
-chaetognath
-Chaetognatha
-chaetognathan
-chaetognathous
-Chaetophora
-Chaetophoraceae
-chaetophoraceous
-Chaetophorales
-chaetophorous
-chaetopod
-Chaetopoda
-chaetopodan
-chaetopodous
-chaetopterin
-Chaetopterus
-chaetosema
-Chaetosoma
-Chaetosomatidae
-Chaetosomidae
-chaetotactic
-chaetotaxy
-Chaetura
-chafe
-chafer
-chafery
-chafewax
-chafeweed
-chaff
-chaffcutter
-chaffer
-chafferer
-chaffinch
-chaffiness
-chaffing
-chaffingly
-chaffless
-chafflike
-chaffman
-chaffseed
-chaffwax
-chaffweed
-chaffy
-chaft
-chafted
-Chaga
-chagan
-Chagga
-chagrin
-chaguar
-chagul
-chahar
-chai
-Chailletiaceae
-chain
-chainage
-chained
-chainer
-chainette
-chainless
-chainlet
-chainmaker
-chainmaking
-chainman
-chainon
-chainsmith
-chainwale
-chainwork
-chair
-chairer
-chairless
-chairmaker
-chairmaking
-chairman
-chairmanship
-chairmender
-chairmending
-chairwarmer
-chairwoman
-chais
-chaise
-chaiseless
-Chait
-chaitya
-chaja
-chaka
-chakar
-chakari
-Chakavski
-chakazi
-chakdar
-chakobu
-chakra
-chakram
-chakravartin
-chaksi
-chal
-chalaco
-chalana
-chalastic
-Chalastogastra
-chalaza
-chalazal
-chalaze
-chalazian
-chalaziferous
-chalazion
-chalazogam
-chalazogamic
-chalazogamy
-chalazoidite
-chalcanthite
-Chalcedonian
-chalcedonic
-chalcedonous
-chalcedony
-chalcedonyx
-chalchuite
-chalcid
-Chalcidian
-Chalcidic
-chalcidicum
-chalcidid
-Chalcididae
-chalcidiform
-chalcidoid
-Chalcidoidea
-Chalcioecus
-Chalcis
-chalcites
-chalcocite
-chalcograph
-chalcographer
-chalcographic
-chalcographical
-chalcographist
-chalcography
-chalcolite
-chalcolithic
-chalcomancy
-chalcomenite
-chalcon
-chalcone
-chalcophanite
-chalcophyllite
-chalcopyrite
-chalcosiderite
-chalcosine
-chalcostibite
-chalcotrichite
-chalcotript
-chalcus
-Chaldaei
-Chaldaic
-Chaldaical
-Chaldaism
-Chaldean
-Chaldee
-chalder
-chaldron
-chalet
-chalice
-chaliced
-chalicosis
-chalicothere
-chalicotheriid
-Chalicotheriidae
-chalicotherioid
-Chalicotherium
-Chalina
-Chalinidae
-chalinine
-Chalinitis
-chalk
-chalkcutter
-chalker
-chalkiness
-chalklike
-chalkography
-chalkosideric
-chalkstone
-chalkstony
-chalkworker
-chalky
-challah
-challenge
-challengeable
-challengee
-challengeful
-challenger
-challengingly
-challie
-challis
-challote
-chalmer
-chalon
-chalone
-Chalons
-chalque
-chalta
-Chalukya
-Chalukyan
-chalumeau
-chalutz
-chalutzim
-Chalybean
-chalybeate
-chalybeous
-Chalybes
-chalybite
-Cham
-cham
-Chama
-Chamacea
-Chamacoco
-Chamaebatia
-Chamaecistus
-chamaecranial
-Chamaecrista
-Chamaecyparis
-Chamaedaphne
-Chamaeleo
-Chamaeleon
-Chamaeleontidae
-Chamaelirium
-Chamaenerion
-Chamaepericlymenum
-chamaeprosopic
-Chamaerops
-chamaerrhine
-Chamaesaura
-Chamaesiphon
-Chamaesiphonaceae
-Chamaesiphonaceous
-Chamaesiphonales
-Chamaesyce
-chamal
-Chamar
-chamar
-chamber
-chamberdeacon
-chambered
-chamberer
-chambering
-chamberlain
-chamberlainry
-chamberlainship
-chamberlet
-chamberleted
-chamberletted
-chambermaid
-Chambertin
-chamberwoman
-Chambioa
-chambray
-chambrel
-chambul
-chamecephalic
-chamecephalous
-chamecephalus
-chamecephaly
-chameleon
-chameleonic
-chameleonize
-chameleonlike
-chamfer
-chamferer
-chamfron
-Chamian
-Chamicuro
-Chamidae
-chamisal
-chamiso
-Chamite
-chamite
-Chamkanni
-chamma
-chamois
-Chamoisette
-chamoisite
-chamoline
-Chamomilla
-Chamorro
-Chamos
-champ
-Champa
-champac
-champaca
-champacol
-champagne
-champagneless
-champagnize
-champaign
-champain
-champaka
-champer
-champertor
-champertous
-champerty
-champignon
-champion
-championess
-championize
-championless
-championlike
-championship
-Champlain
-Champlainic
-champleve
-champy
-Chanabal
-Chanca
-chance
-chanceful
-chancefully
-chancefulness
-chancel
-chanceled
-chanceless
-chancellery
-chancellor
-chancellorate
-chancelloress
-chancellorism
-chancellorship
-chancer
-chancery
-chancewise
-chanche
-chanchito
-chanco
-chancre
-chancriform
-chancroid
-chancroidal
-chancrous
-chancy
-chandala
-chandam
-chandelier
-Chandi
-chandi
-chandler
-chandleress
-chandlering
-chandlery
-chandoo
-chandu
-chandul
-Chane
-chanfrin
-Chang
-chang
-changa
-changar
-change
-changeability
-changeable
-changeableness
-changeably
-changedale
-changedness
-changeful
-changefully
-changefulness
-changeless
-changelessly
-changelessness
-changeling
-changement
-changer
-Changoan
-Changos
-Changuina
-Changuinan
-Chanidae
-chank
-chankings
-channel
-channelbill
-channeled
-channeler
-channeling
-channelization
-channelize
-channelled
-channeller
-channelling
-channelwards
-channer
-chanson
-chansonnette
-chanst
-chant
-chantable
-chanter
-chanterelle
-chantership
-chantey
-chanteyman
-chanticleer
-chanting
-chantingly
-chantlate
-chantress
-chantry
-chao
-chaogenous
-chaology
-chaos
-chaotic
-chaotical
-chaotically
-chaoticness
-Chaouia
-chap
-Chapacura
-Chapacuran
-chapah
-Chapanec
-chaparral
-chaparro
-chapatty
-chapbook
-chape
-chapeau
-chapeaux
-chaped
-chapel
-chapeless
-chapelet
-chapelgoer
-chapelgoing
-chapellage
-chapellany
-chapelman
-chapelmaster
-chapelry
-chapelward
-chaperno
-chaperon
-chaperonage
-chaperone
-chaperonless
-chapfallen
-chapin
-chapiter
-chapitral
-chaplain
-chaplaincy
-chaplainry
-chaplainship
-chapless
-chaplet
-chapleted
-chapman
-chapmanship
-chapournet
-chapournetted
-chappaul
-chapped
-chapper
-chappie
-chappin
-chapping
-chappow
-chappy
-chaps
-chapt
-chaptalization
-chaptalize
-chapter
-chapteral
-chapterful
-chapwoman
-char
-Chara
-charabanc
-charabancer
-charac
-Characeae
-characeous
-characetum
-characin
-characine
-characinid
-Characinidae
-characinoid
-character
-characterful
-characterial
-characterical
-characterism
-characterist
-characteristic
-characteristical
-characteristically
-characteristicalness
-characteristicness
-characterizable
-characterization
-characterize
-characterizer
-characterless
-characterlessness
-characterological
-characterologist
-characterology
-charactery
-charade
-Charadrii
-Charadriidae
-charadriiform
-Charadriiformes
-charadrine
-charadrioid
-Charadriomorphae
-Charadrius
-Charales
-charas
-charbon
-Charca
-charcoal
-charcoaly
-charcutier
-chard
-chardock
-chare
-charer
-charet
-charette
-charge
-chargeability
-chargeable
-chargeableness
-chargeably
-chargee
-chargeless
-chargeling
-chargeman
-charger
-chargeship
-charging
-Charicleia
-charier
-charily
-chariness
-chariot
-charioted
-chariotee
-charioteer
-charioteership
-chariotlike
-chariotman
-chariotry
-chariotway
-charism
-charisma
-charismatic
-Charissa
-charisticary
-charitable
-charitableness
-charitably
-Charites
-charity
-charityless
-charivari
-chark
-charka
-charkha
-charkhana
-charlady
-charlatan
-charlatanic
-charlatanical
-charlatanically
-charlatanish
-charlatanism
-charlatanistic
-charlatanry
-charlatanship
-Charleen
-Charlene
-Charles
-Charleston
-Charley
-Charlie
-charlock
-Charlotte
-charm
-charmedly
-charmel
-charmer
-charmful
-charmfully
-charmfulness
-charming
-charmingly
-charmingness
-charmless
-charmlessly
-charmwise
-charnel
-charnockite
-Charon
-Charonian
-Charonic
-Charontas
-Charophyta
-charpit
-charpoy
-charqued
-charqui
-charr
-Charruan
-Charruas
-charry
-charshaf
-charsingha
-chart
-chartaceous
-charter
-charterable
-charterage
-chartered
-charterer
-charterhouse
-Charterist
-charterless
-chartermaster
-charthouse
-charting
-Chartism
-Chartist
-chartist
-chartless
-chartographist
-chartology
-chartometer
-chartophylax
-chartreuse
-Chartreux
-chartroom
-chartula
-chartulary
-charuk
-charwoman
-chary
-Charybdian
-Charybdis
-chasable
-chase
-chaseable
-chaser
-Chasidim
-chasing
-chasm
-chasma
-chasmal
-chasmed
-chasmic
-chasmogamic
-chasmogamous
-chasmogamy
-chasmophyte
-chasmy
-chasse
-Chasselas
-chassepot
-chasseur
-chassignite
-chassis
-Chastacosta
-chaste
-chastely
-chasten
-chastener
-chasteness
-chasteningly
-chastenment
-chasteweed
-chastisable
-chastise
-chastisement
-chastiser
-chastity
-chasuble
-chasubled
-chat
-chataka
-Chateau
-chateau
-chateaux
-chatelain
-chatelaine
-chatelainry
-chatellany
-chathamite
-chati
-Chatillon
-Chatino
-Chatot
-chatoyance
-chatoyancy
-chatoyant
-chatsome
-chatta
-chattable
-Chattanooga
-Chattanoogan
-chattation
-chattel
-chattelhood
-chattelism
-chattelization
-chattelize
-chattelship
-chatter
-chatteration
-chatterbag
-chatterbox
-chatterer
-chattering
-chatteringly
-chattermag
-chattermagging
-Chattertonian
-chattery
-Chatti
-chattily
-chattiness
-chatting
-chattingly
-chatty
-chatwood
-Chaucerian
-Chauceriana
-Chaucerianism
-Chaucerism
-Chauchat
-chaudron
-chauffer
-chauffeur
-chauffeurship
-Chaui
-chauk
-chaukidari
-Chauliodes
-chaulmoogra
-chaulmoograte
-chaulmoogric
-Chauna
-chaus
-chausseemeile
-Chautauqua
-Chautauquan
-chaute
-chauth
-chauvinism
-chauvinist
-chauvinistic
-chauvinistically
-Chavante
-Chavantean
-chavender
-chavibetol
-chavicin
-chavicine
-chavicol
-chavish
-chaw
-chawan
-chawbacon
-chawer
-Chawia
-chawk
-chawl
-chawstick
-chay
-chaya
-chayaroot
-Chayma
-Chayota
-chayote
-chayroot
-chazan
-Chazy
-che
-cheap
-cheapen
-cheapener
-cheapery
-cheaping
-cheapish
-cheaply
-cheapness
-Cheapside
-cheat
-cheatable
-cheatableness
-cheatee
-cheater
-cheatery
-cheating
-cheatingly
-cheatrie
-Chebacco
-chebec
-chebel
-chebog
-chebule
-chebulinic
-Chechehet
-Chechen
-check
-checkable
-checkage
-checkbird
-checkbite
-checkbook
-checked
-checker
-checkerbelly
-checkerberry
-checkerbloom
-checkerboard
-checkerbreast
-checkered
-checkerist
-checkers
-checkerwise
-checkerwork
-checkhook
-checkless
-checkman
-checkmate
-checkoff
-checkrack
-checkrein
-checkroll
-checkroom
-checkrope
-checkrow
-checkrowed
-checkrower
-checkstone
-checkstrap
-checkstring
-checkup
-checkweigher
-checkwork
-checky
-cheddaring
-cheddite
-cheder
-chedlock
-chee
-cheecha
-cheechako
-cheek
-cheekbone
-cheeker
-cheekily
-cheekiness
-cheekish
-cheekless
-cheekpiece
-cheeky
-cheep
-cheeper
-cheepily
-cheepiness
-cheepy
-cheer
-cheered
-cheerer
-cheerful
-cheerfulize
-cheerfully
-cheerfulness
-cheerfulsome
-cheerily
-cheeriness
-cheering
-cheeringly
-cheerio
-cheerleader
-cheerless
-cheerlessly
-cheerlessness
-cheerly
-cheery
-cheese
-cheeseboard
-cheesebox
-cheeseburger
-cheesecake
-cheesecloth
-cheesecurd
-cheesecutter
-cheeseflower
-cheeselip
-cheesemonger
-cheesemongering
-cheesemongerly
-cheesemongery
-cheeseparer
-cheeseparing
-cheeser
-cheesery
-cheesewood
-cheesiness
-cheesy
-cheet
-cheetah
-cheeter
-cheetie
-chef
-Chefrinia
-chegoe
-chegre
-Chehalis
-Cheilanthes
-cheilitis
-Cheilodipteridae
-Cheilodipterus
-Cheilostomata
-cheilostomatous
-cheir
-cheiragra
-Cheiranthus
-Cheirogaleus
-Cheiroglossa
-cheirognomy
-cheirography
-cheirolin
-cheirology
-cheiromancy
-cheiromegaly
-cheiropatagium
-cheiropodist
-cheiropody
-cheiropompholyx
-Cheiroptera
-cheiropterygium
-cheirosophy
-cheirospasm
-Cheirotherium
-Cheka
-chekan
-cheke
-cheki
-Chekist
-chekmak
-chela
-chelaship
-chelate
-chelation
-chelem
-chelerythrine
-chelicer
-chelicera
-cheliceral
-chelicerate
-chelicere
-chelide
-chelidon
-chelidonate
-chelidonian
-chelidonic
-chelidonine
-Chelidonium
-Chelidosaurus
-Cheliferidea
-cheliferous
-cheliform
-chelingo
-cheliped
-Chellean
-chello
-Chelodina
-chelodine
-chelone
-Chelonia
-chelonian
-chelonid
-Chelonidae
-cheloniid
-Cheloniidae
-chelonin
-chelophore
-chelp
-Cheltenham
-Chelura
-Chelydidae
-Chelydra
-Chelydridae
-chelydroid
-chelys
-Chemakuan
-chemasthenia
-chemawinite
-Chemehuevi
-chemesthesis
-chemiatric
-chemiatrist
-chemiatry
-chemic
-chemical
-chemicalization
-chemicalize
-chemically
-chemicker
-chemicoastrological
-chemicobiologic
-chemicobiology
-chemicocautery
-chemicodynamic
-chemicoengineering
-chemicoluminescence
-chemicomechanical
-chemicomineralogical
-chemicopharmaceutical
-chemicophysical
-chemicophysics
-chemicophysiological
-chemicovital
-chemigraph
-chemigraphic
-chemigraphy
-chemiloon
-chemiluminescence
-chemiotactic
-chemiotaxic
-chemiotaxis
-chemiotropic
-chemiotropism
-chemiphotic
-chemis
-chemise
-chemisette
-chemism
-chemisorb
-chemisorption
-chemist
-chemistry
-chemitype
-chemitypy
-chemoceptor
-chemokinesis
-chemokinetic
-chemolysis
-chemolytic
-chemolyze
-chemoreception
-chemoreceptor
-chemoreflex
-chemoresistance
-chemoserotherapy
-chemosis
-chemosmosis
-chemosmotic
-chemosynthesis
-chemosynthetic
-chemotactic
-chemotactically
-chemotaxis
-chemotaxy
-chemotherapeutic
-chemotherapeutics
-chemotherapist
-chemotherapy
-chemotic
-chemotropic
-chemotropically
-chemotropism
-Chemung
-chemurgic
-chemurgical
-chemurgy
-Chen
-chena
-chende
-chenevixite
-Cheney
-cheng
-chenica
-chenille
-cheniller
-chenopod
-Chenopodiaceae
-chenopodiaceous
-Chenopodiales
-Chenopodium
-cheoplastic
-chepster
-cheque
-Chequers
-Chera
-chercock
-cherem
-Cheremiss
-Cheremissian
-cherimoya
-cherish
-cherishable
-cherisher
-cherishing
-cherishingly
-cherishment
-Cherkess
-Cherkesser
-Chermes
-Chermidae
-Chermish
-Chernomorish
-chernozem
-Cherokee
-cheroot
-cherried
-cherry
-cherryblossom
-cherrylike
-chersonese
-Chersydridae
-chert
-cherte
-cherty
-cherub
-cherubic
-cherubical
-cherubically
-cherubim
-cherubimic
-cherubimical
-cherubin
-Cherusci
-Chervante
-chervil
-chervonets
-Chesapeake
-Cheshire
-cheson
-chess
-chessboard
-chessdom
-chessel
-chesser
-chessist
-chessman
-chessmen
-chesstree
-chessylite
-chest
-Chester
-chester
-chesterfield
-Chesterfieldian
-chesterlite
-chestful
-chestily
-chestiness
-chestnut
-chestnutty
-chesty
-Chet
-cheth
-chettik
-chetty
-chetverik
-chetvert
-chevage
-cheval
-chevalier
-chevaline
-chevance
-cheve
-cheven
-chevener
-chevesaile
-chevin
-Cheviot
-chevisance
-chevise
-chevon
-chevrette
-chevron
-chevrone
-chevronel
-chevronelly
-chevronwise
-chevrony
-chevrotain
-chevy
-chew
-chewbark
-chewer
-chewink
-chewstick
-chewy
-Cheyenne
-cheyney
-chhatri
-chi
-chia
-Chiam
-Chian
-Chianti
-Chiapanec
-Chiapanecan
-chiaroscurist
-chiaroscuro
-chiasm
-chiasma
-chiasmal
-chiasmatype
-chiasmatypy
-chiasmic
-Chiasmodon
-chiasmodontid
-Chiasmodontidae
-chiasmus
-chiastic
-chiastolite
-chiastoneural
-chiastoneurous
-chiastoneury
-chiaus
-Chibcha
-Chibchan
-chibinite
-chibouk
-chibrit
-chic
-chicane
-chicaner
-chicanery
-chicaric
-chicayote
-Chicha
-chichi
-chichicaste
-Chichimec
-chichimecan
-chichipate
-chichipe
-chichituna
-chick
-chickabiddy
-chickadee
-Chickahominy
-Chickamauga
-chickaree
-Chickasaw
-chickasaw
-chickell
-chicken
-chickenberry
-chickenbill
-chickenbreasted
-chickenhearted
-chickenheartedly
-chickenheartedness
-chickenhood
-chickenweed
-chickenwort
-chicker
-chickhood
-chickling
-chickstone
-chickweed
-chickwit
-chicky
-chicle
-chicness
-Chico
-chico
-Chicomecoatl
-chicory
-chicot
-chicote
-chicqued
-chicquer
-chicquest
-chicquing
-chid
-chidden
-chide
-chider
-chiding
-chidingly
-chidingness
-chidra
-chief
-chiefdom
-chiefery
-chiefess
-chiefest
-chiefish
-chiefless
-chiefling
-chiefly
-chiefship
-chieftain
-chieftaincy
-chieftainess
-chieftainry
-chieftainship
-chieftess
-chield
-Chien
-chien
-chiffer
-chiffon
-chiffonade
-chiffonier
-chiffony
-chifforobe
-chigetai
-chiggak
-chigger
-chiggerweed
-chignon
-chignoned
-chigoe
-chih
-chihfu
-Chihuahua
-chikara
-chil
-chilacavote
-chilalgia
-chilarium
-chilblain
-Chilcat
-child
-childbearing
-childbed
-childbirth
-childcrowing
-childe
-childed
-Childermas
-childhood
-childing
-childish
-childishly
-childishness
-childkind
-childless
-childlessness
-childlike
-childlikeness
-childly
-childness
-childrenite
-childridden
-childship
-childward
-chile
-Chilean
-Chileanization
-Chileanize
-chilectropion
-chilenite
-chili
-chiliad
-chiliadal
-chiliadic
-chiliagon
-chiliahedron
-chiliarch
-chiliarchia
-chiliarchy
-chiliasm
-chiliast
-chiliastic
-chilicote
-chilicothe
-chilidium
-Chilina
-Chilinidae
-chiliomb
-Chilion
-chilitis
-Chilkat
-chill
-chilla
-chillagite
-chilled
-chiller
-chillily
-chilliness
-chilling
-chillingly
-chillish
-Chilliwack
-chillness
-chillo
-chillroom
-chillsome
-chillum
-chillumchee
-chilly
-chilognath
-Chilognatha
-chilognathan
-chilognathous
-chilogrammo
-chiloma
-Chilomastix
-chiloncus
-chiloplasty
-chilopod
-Chilopoda
-chilopodan
-chilopodous
-Chilopsis
-Chilostoma
-Chilostomata
-chilostomatous
-chilostome
-chilotomy
-Chiltern
-chilver
-chimaera
-chimaerid
-Chimaeridae
-chimaeroid
-Chimaeroidei
-Chimakuan
-Chimakum
-Chimalakwe
-Chimalapa
-Chimane
-chimango
-Chimaphila
-Chimarikan
-Chimariko
-chimble
-chime
-chimer
-chimera
-chimeric
-chimerical
-chimerically
-chimericalness
-chimesmaster
-chiminage
-Chimmesyan
-chimney
-chimneyhead
-chimneyless
-chimneyman
-Chimonanthus
-chimopeelagic
-chimpanzee
-Chimu
-Chin
-chin
-china
-chinaberry
-chinalike
-Chinaman
-chinamania
-chinamaniac
-chinampa
-chinanta
-Chinantecan
-Chinantecs
-chinaphthol
-chinar
-chinaroot
-Chinatown
-chinaware
-chinawoman
-chinband
-chinch
-chincha
-Chinchasuyu
-chinchayote
-chinche
-chincherinchee
-chinchilla
-chinching
-chincloth
-chincough
-chine
-chined
-Chinee
-Chinese
-Chinesery
-ching
-chingma
-Chingpaw
-Chinhwan
-chinik
-chinin
-Chink
-chink
-chinkara
-chinker
-chinkerinchee
-chinking
-chinkle
-chinks
-chinky
-chinless
-chinnam
-chinned
-chinny
-chino
-chinoa
-chinol
-Chinook
-Chinookan
-chinotoxine
-chinotti
-chinpiece
-chinquapin
-chinse
-chint
-chintz
-chinwood
-Chiococca
-chiococcine
-Chiogenes
-chiolite
-chionablepsia
-Chionanthus
-Chionaspis
-Chionididae
-Chionis
-Chionodoxa
-Chiot
-chiotilla
-Chip
-chip
-chipchap
-chipchop
-Chipewyan
-chiplet
-chipling
-chipmunk
-chippable
-chippage
-chipped
-Chippendale
-chipper
-chipping
-chippy
-chips
-chipwood
-Chiquitan
-Chiquito
-chiragra
-chiral
-chiralgia
-chirality
-chirapsia
-chirarthritis
-chirata
-Chiriana
-Chiricahua
-Chiriguano
-chirimen
-Chirino
-chirinola
-chiripa
-chirivita
-chirk
-chirm
-chiro
-chirocosmetics
-chirogale
-chirognomic
-chirognomically
-chirognomist
-chirognomy
-chirognostic
-chirograph
-chirographary
-chirographer
-chirographic
-chirographical
-chirography
-chirogymnast
-chirological
-chirologically
-chirologist
-chirology
-chiromance
-chiromancer
-chiromancist
-chiromancy
-chiromant
-chiromantic
-chiromantical
-Chiromantis
-chiromegaly
-chirometer
-Chiromyidae
-Chiromys
-Chiron
-chironomic
-chironomid
-Chironomidae
-Chironomus
-chironomy
-chironym
-chiropatagium
-chiroplasty
-chiropod
-chiropodial
-chiropodic
-chiropodical
-chiropodist
-chiropodistry
-chiropodous
-chiropody
-chiropompholyx
-chiropractic
-chiropractor
-chiropraxis
-chiropter
-Chiroptera
-chiropteran
-chiropterite
-chiropterophilous
-chiropterous
-chiropterygian
-chiropterygious
-chiropterygium
-chirosophist
-chirospasm
-Chirotes
-chirotherian
-Chirotherium
-chirothesia
-chirotonsor
-chirotonsory
-chirotony
-chirotype
-chirp
-chirper
-chirpily
-chirpiness
-chirping
-chirpingly
-chirpling
-chirpy
-chirr
-chirrup
-chirruper
-chirrupy
-chirurgeon
-chirurgery
-Chisedec
-chisel
-chiseled
-chiseler
-chisellike
-chiselly
-chiselmouth
-chit
-Chita
-chitak
-chital
-chitchat
-chitchatty
-Chitimacha
-Chitimachan
-chitin
-chitinization
-chitinized
-chitinocalcareous
-chitinogenous
-chitinoid
-chitinous
-chiton
-chitosamine
-chitosan
-chitose
-chitra
-Chitrali
-chittamwood
-chitter
-chitterling
-chitty
-chivalresque
-chivalric
-chivalrous
-chivalrously
-chivalrousness
-chivalry
-chive
-chivey
-chiviatite
-Chiwere
-chkalik
-chladnite
-chlamyd
-chlamydate
-chlamydeous
-Chlamydobacteriaceae
-chlamydobacteriaceous
-Chlamydobacteriales
-Chlamydomonadaceae
-Chlamydomonadidae
-Chlamydomonas
-Chlamydosaurus
-Chlamydoselachidae
-Chlamydoselachus
-chlamydospore
-Chlamydozoa
-chlamydozoan
-chlamyphore
-Chlamyphorus
-chlamys
-Chleuh
-chloanthite
-chloasma
-Chloe
-chlor
-chloracetate
-chloragogen
-chloral
-chloralformamide
-chloralide
-chloralism
-chloralization
-chloralize
-chloralose
-chloralum
-chloramide
-chloramine
-chloramphenicol
-chloranemia
-chloranemic
-chloranhydride
-chloranil
-Chloranthaceae
-chloranthaceous
-Chloranthus
-chloranthy
-chlorapatite
-chlorastrolite
-chlorate
-chlorazide
-chlorcosane
-chlordan
-chlordane
-chlore
-Chlorella
-Chlorellaceae
-chlorellaceous
-chloremia
-chlorenchyma
-chlorhydrate
-chlorhydric
-chloric
-chloridate
-chloridation
-chloride
-Chloridella
-Chloridellidae
-chlorider
-chloridize
-chlorimeter
-chlorimetric
-chlorimetry
-chlorinate
-chlorination
-chlorinator
-chlorine
-chlorinize
-chlorinous
-chloriodide
-Chlorion
-Chlorioninae
-chlorite
-chloritic
-chloritization
-chloritize
-chloritoid
-chlorize
-chlormethane
-chlormethylic
-chloroacetate
-chloroacetic
-chloroacetone
-chloroacetophenone
-chloroamide
-chloroamine
-chloroanaemia
-chloroanemia
-chloroaurate
-chloroauric
-chloroaurite
-chlorobenzene
-chlorobromide
-chlorocalcite
-chlorocarbonate
-chlorochromates
-chlorochromic
-chlorochrous
-Chlorococcaceae
-Chlorococcales
-Chlorococcum
-Chlorococcus
-chlorocresol
-chlorocruorin
-chlorodize
-chloroform
-chloroformate
-chloroformic
-chloroformism
-chloroformist
-chloroformization
-chloroformize
-chlorogenic
-chlorogenine
-chlorohydrin
-chlorohydrocarbon
-chloroiodide
-chloroleucite
-chloroma
-chloromelanite
-chlorometer
-chloromethane
-chlorometric
-chlorometry
-Chloromycetin
-chloronitrate
-chloropal
-chloropalladates
-chloropalladic
-chlorophane
-chlorophenol
-chlorophoenicite
-Chlorophora
-Chlorophyceae
-chlorophyceous
-chlorophyl
-chlorophyll
-chlorophyllaceous
-chlorophyllan
-chlorophyllase
-chlorophyllian
-chlorophyllide
-chlorophylliferous
-chlorophylligenous
-chlorophylligerous
-chlorophyllin
-chlorophyllite
-chlorophylloid
-chlorophyllose
-chlorophyllous
-chloropia
-chloropicrin
-chloroplast
-chloroplastic
-chloroplastid
-chloroplatinate
-chloroplatinic
-chloroplatinite
-chloroplatinous
-chloroprene
-chloropsia
-chloroquine
-chlorosilicate
-chlorosis
-chlorospinel
-chlorosulphonic
-chlorotic
-chlorous
-chlorozincate
-chlorsalol
-chloryl
-Chnuphis
-cho
-choachyte
-choana
-choanate
-Choanephora
-choanocytal
-choanocyte
-Choanoflagellata
-choanoflagellate
-Choanoflagellida
-Choanoflagellidae
-choanoid
-choanophorous
-choanosomal
-choanosome
-choate
-choaty
-chob
-choca
-chocard
-Chocho
-chocho
-chock
-chockablock
-chocker
-chockler
-chockman
-Choco
-Chocoan
-chocolate
-Choctaw
-choel
-choenix
-Choeropsis
-Choes
-choffer
-choga
-chogak
-chogset
-Choiak
-choice
-choiceful
-choiceless
-choicelessness
-choicely
-choiceness
-choicy
-choil
-choiler
-choir
-choirboy
-choirlike
-choirman
-choirmaster
-choirwise
-Choisya
-chokage
-choke
-chokeberry
-chokebore
-chokecherry
-chokedamp
-choker
-chokered
-chokerman
-chokestrap
-chokeweed
-chokidar
-choking
-chokingly
-chokra
-choky
-Chol
-chol
-Chola
-chola
-cholagogic
-cholagogue
-cholalic
-cholane
-cholangioitis
-cholangitis
-cholanic
-cholanthrene
-cholate
-chold
-choleate
-cholecyanine
-cholecyst
-cholecystalgia
-cholecystectasia
-cholecystectomy
-cholecystenterorrhaphy
-cholecystenterostomy
-cholecystgastrostomy
-cholecystic
-cholecystitis
-cholecystnephrostomy
-cholecystocolostomy
-cholecystocolotomy
-cholecystoduodenostomy
-cholecystogastrostomy
-cholecystogram
-cholecystography
-cholecystoileostomy
-cholecystojejunostomy
-cholecystokinin
-cholecystolithiasis
-cholecystolithotripsy
-cholecystonephrostomy
-cholecystopexy
-cholecystorrhaphy
-cholecystostomy
-cholecystotomy
-choledoch
-choledochal
-choledochectomy
-choledochitis
-choledochoduodenostomy
-choledochoenterostomy
-choledocholithiasis
-choledocholithotomy
-choledocholithotripsy
-choledochoplasty
-choledochorrhaphy
-choledochostomy
-choledochotomy
-cholehematin
-choleic
-choleine
-choleinic
-cholelith
-cholelithiasis
-cholelithic
-cholelithotomy
-cholelithotripsy
-cholelithotrity
-cholemia
-choleokinase
-cholepoietic
-choler
-cholera
-choleraic
-choleric
-cholericly
-cholericness
-choleriform
-cholerigenous
-cholerine
-choleroid
-choleromania
-cholerophobia
-cholerrhagia
-cholestane
-cholestanol
-cholesteatoma
-cholesteatomatous
-cholestene
-cholesterate
-cholesteremia
-cholesteric
-cholesterin
-cholesterinemia
-cholesterinic
-cholesterinuria
-cholesterol
-cholesterolemia
-cholesteroluria
-cholesterosis
-cholesteryl
-choletelin
-choletherapy
-choleuria
-choli
-choliamb
-choliambic
-choliambist
-cholic
-choline
-cholinergic
-cholinesterase
-cholinic
-cholla
-choller
-Cholo
-cholochrome
-cholocyanine
-Choloepus
-chologenetic
-choloidic
-choloidinic
-chololith
-chololithic
-Cholonan
-Cholones
-cholophein
-cholorrhea
-choloscopy
-cholterheaded
-cholum
-choluria
-Choluteca
-chomp
-chondral
-chondralgia
-chondrarsenite
-chondre
-chondrectomy
-chondrenchyma
-chondric
-chondrification
-chondrify
-chondrigen
-chondrigenous
-Chondrilla
-chondrin
-chondrinous
-chondriocont
-chondriome
-chondriomere
-chondriomite
-chondriosomal
-chondriosome
-chondriosphere
-chondrite
-chondritic
-chondritis
-chondroadenoma
-chondroalbuminoid
-chondroangioma
-chondroarthritis
-chondroblast
-chondroblastoma
-chondrocarcinoma
-chondrocele
-chondroclasis
-chondroclast
-chondrocoracoid
-chondrocostal
-chondrocranial
-chondrocranium
-chondrocyte
-chondrodite
-chondroditic
-chondrodynia
-chondrodystrophia
-chondrodystrophy
-chondroendothelioma
-chondroepiphysis
-chondrofetal
-chondrofibroma
-chondrofibromatous
-Chondroganoidei
-chondrogen
-chondrogenesis
-chondrogenetic
-chondrogenous
-chondrogeny
-chondroglossal
-chondroglossus
-chondrography
-chondroid
-chondroitic
-chondroitin
-chondrolipoma
-chondrology
-chondroma
-chondromalacia
-chondromatous
-chondromucoid
-Chondromyces
-chondromyoma
-chondromyxoma
-chondromyxosarcoma
-chondropharyngeal
-chondropharyngeus
-chondrophore
-chondrophyte
-chondroplast
-chondroplastic
-chondroplasty
-chondroprotein
-chondropterygian
-Chondropterygii
-chondropterygious
-chondrosamine
-chondrosarcoma
-chondrosarcomatous
-chondroseptum
-chondrosin
-chondrosis
-chondroskeleton
-chondrostean
-Chondrostei
-chondrosteoma
-chondrosteous
-chondrosternal
-chondrotome
-chondrotomy
-chondroxiphoid
-chondrule
-chondrus
-chonolith
-chonta
-Chontal
-Chontalan
-Chontaquiro
-chontawood
-choop
-choosable
-choosableness
-choose
-chooser
-choosing
-choosingly
-choosy
-chop
-chopa
-chopboat
-chopfallen
-chophouse
-chopin
-chopine
-choplogic
-chopped
-chopper
-choppered
-chopping
-choppy
-chopstick
-Chopunnish
-Chora
-choragic
-choragion
-choragium
-choragus
-choragy
-Chorai
-choral
-choralcelo
-choraleon
-choralist
-chorally
-Chorasmian
-chord
-chorda
-Chordaceae
-chordacentrous
-chordacentrum
-chordaceous
-chordal
-chordally
-chordamesoderm
-Chordata
-chordate
-chorded
-Chordeiles
-chorditis
-chordoid
-chordomesoderm
-chordotomy
-chordotonal
-chore
-chorea
-choreal
-choreatic
-choree
-choregic
-choregus
-choregy
-choreic
-choreiform
-choreograph
-choreographer
-choreographic
-choreographical
-choreography
-choreoid
-choreomania
-chorepiscopal
-chorepiscopus
-choreus
-choreutic
-chorial
-choriamb
-choriambic
-choriambize
-choriambus
-choric
-chorine
-chorioadenoma
-chorioallantoic
-chorioallantoid
-chorioallantois
-choriocapillaris
-choriocapillary
-choriocarcinoma
-choriocele
-chorioepithelioma
-chorioid
-chorioidal
-chorioiditis
-chorioidocyclitis
-chorioidoiritis
-chorioidoretinitis
-chorioma
-chorion
-chorionepithelioma
-chorionic
-Chorioptes
-chorioptic
-chorioretinal
-chorioretinitis
-Choripetalae
-choripetalous
-choriphyllous
-chorisepalous
-chorisis
-chorism
-chorist
-choristate
-chorister
-choristership
-choristic
-choristoblastoma
-choristoma
-choristry
-chorization
-chorizont
-chorizontal
-chorizontes
-chorizontic
-chorizontist
-chorogi
-chorograph
-chorographer
-chorographic
-chorographical
-chorographically
-chorography
-choroid
-choroidal
-choroidea
-choroiditis
-choroidocyclitis
-choroidoiritis
-choroidoretinitis
-chorological
-chorologist
-chorology
-choromania
-choromanic
-chorometry
-chorook
-Chorotega
-Choroti
-chort
-chorten
-Chorti
-chortle
-chortler
-chortosterol
-chorus
-choruser
-choruslike
-Chorwat
-choryos
-chose
-chosen
-chott
-Chou
-Chouan
-Chouanize
-chouette
-chough
-chouka
-choultry
-choup
-chouquette
-chous
-chouse
-chouser
-chousingha
-chow
-Chowanoc
-chowchow
-chowder
-chowderhead
-chowderheaded
-chowk
-chowry
-choya
-choyroot
-Chozar
-chrematheism
-chrematist
-chrematistic
-chrematistics
-chreotechnics
-chresmology
-chrestomathic
-chrestomathics
-chrestomathy
-chria
-chrimsel
-Chris
-chrism
-chrisma
-chrismal
-chrismary
-chrismatine
-chrismation
-chrismatite
-chrismatize
-chrismatory
-chrismon
-chrisom
-chrisomloosing
-chrisroot
-Chrissie
-Christ
-Christabel
-Christadelphian
-Christadelphianism
-christcross
-Christdom
-Christed
-christen
-Christendie
-Christendom
-christened
-christener
-christening
-Christenmas
-Christhood
-Christiad
-Christian
-Christiana
-Christiania
-Christianiadeal
-Christianism
-christianite
-Christianity
-Christianization
-Christianize
-Christianizer
-Christianlike
-Christianly
-Christianness
-Christianogentilism
-Christianography
-Christianomastix
-Christianopaganism
-Christicide
-Christie
-Christiform
-Christina
-Christine
-Christless
-Christlessness
-Christlike
-Christlikeness
-Christliness
-Christly
-Christmas
-Christmasberry
-Christmasing
-Christmastide
-Christmasy
-Christocentric
-Christofer
-Christogram
-Christolatry
-Christological
-Christologist
-Christology
-Christophany
-Christophe
-Christopher
-Christos
-chroatol
-Chrobat
-chroma
-chromaffin
-chromaffinic
-chromammine
-chromaphil
-chromaphore
-chromascope
-chromate
-chromatic
-chromatical
-chromatically
-chromatician
-chromaticism
-chromaticity
-chromatics
-chromatid
-chromatin
-chromatinic
-Chromatioideae
-chromatism
-chromatist
-Chromatium
-chromatize
-chromatocyte
-chromatodysopia
-chromatogenous
-chromatogram
-chromatograph
-chromatographic
-chromatography
-chromatoid
-chromatology
-chromatolysis
-chromatolytic
-chromatometer
-chromatone
-chromatopathia
-chromatopathic
-chromatopathy
-chromatophil
-chromatophile
-chromatophilia
-chromatophilic
-chromatophilous
-chromatophobia
-chromatophore
-chromatophoric
-chromatophorous
-chromatoplasm
-chromatopsia
-chromatoptometer
-chromatoptometry
-chromatoscope
-chromatoscopy
-chromatosis
-chromatosphere
-chromatospheric
-chromatrope
-chromaturia
-chromatype
-chromazurine
-chromdiagnosis
-chrome
-chromene
-chromesthesia
-chromic
-chromicize
-chromid
-Chromidae
-Chromides
-chromidial
-Chromididae
-chromidiogamy
-chromidiosome
-chromidium
-chromidrosis
-chromiferous
-chromiole
-chromism
-chromite
-chromitite
-chromium
-chromo
-Chromobacterieae
-Chromobacterium
-chromoblast
-chromocenter
-chromocentral
-chromochalcographic
-chromochalcography
-chromocollograph
-chromocollographic
-chromocollography
-chromocollotype
-chromocollotypy
-chromocratic
-chromocyte
-chromocytometer
-chromodermatosis
-chromodiascope
-chromogen
-chromogene
-chromogenesis
-chromogenetic
-chromogenic
-chromogenous
-chromogram
-chromograph
-chromoisomer
-chromoisomeric
-chromoisomerism
-chromoleucite
-chromolipoid
-chromolith
-chromolithic
-chromolithograph
-chromolithographer
-chromolithographic
-chromolithography
-chromolysis
-chromomere
-chromometer
-chromone
-chromonema
-chromoparous
-chromophage
-chromophane
-chromophile
-chromophilic
-chromophilous
-chromophobic
-chromophore
-chromophoric
-chromophorous
-chromophotograph
-chromophotographic
-chromophotography
-chromophotolithograph
-chromophyll
-chromoplasm
-chromoplasmic
-chromoplast
-chromoplastid
-chromoprotein
-chromopsia
-chromoptometer
-chromoptometrical
-chromosantonin
-chromoscope
-chromoscopic
-chromoscopy
-chromosomal
-chromosome
-chromosphere
-chromospheric
-chromotherapist
-chromotherapy
-chromotrope
-chromotropic
-chromotropism
-chromotropy
-chromotype
-chromotypic
-chromotypographic
-chromotypography
-chromotypy
-chromous
-chromoxylograph
-chromoxylography
-chromule
-chromy
-chromyl
-chronal
-chronanagram
-chronaxia
-chronaxie
-chronaxy
-chronic
-chronical
-chronically
-chronicity
-chronicle
-chronicler
-chronicon
-chronisotherm
-chronist
-chronobarometer
-chronocinematography
-chronocrator
-chronocyclegraph
-chronodeik
-chronogeneous
-chronogenesis
-chronogenetic
-chronogram
-chronogrammatic
-chronogrammatical
-chronogrammatically
-chronogrammatist
-chronogrammic
-chronograph
-chronographer
-chronographic
-chronographical
-chronographically
-chronography
-chronoisothermal
-chronologer
-chronologic
-chronological
-chronologically
-chronologist
-chronologize
-chronology
-chronomancy
-chronomantic
-chronometer
-chronometric
-chronometrical
-chronometrically
-chronometry
-chrononomy
-chronopher
-chronophotograph
-chronophotographic
-chronophotography
-Chronos
-chronoscope
-chronoscopic
-chronoscopically
-chronoscopy
-chronosemic
-chronostichon
-chronothermal
-chronothermometer
-chronotropic
-chronotropism
-Chroococcaceae
-chroococcaceous
-Chroococcales
-chroococcoid
-Chroococcus
-Chrosperma
-chrotta
-chrysal
-chrysalid
-chrysalidal
-chrysalides
-chrysalidian
-chrysaline
-chrysalis
-chrysaloid
-chrysamine
-chrysammic
-chrysamminic
-Chrysamphora
-chrysaniline
-chrysanisic
-chrysanthemin
-chrysanthemum
-chrysanthous
-Chrysaor
-chrysarobin
-chrysatropic
-chrysazin
-chrysazol
-chryselectrum
-chryselephantine
-Chrysemys
-chrysene
-chrysenic
-chrysid
-Chrysidella
-chrysidid
-Chrysididae
-chrysin
-Chrysippus
-Chrysis
-chrysoaristocracy
-Chrysobalanaceae
-Chrysobalanus
-chrysoberyl
-chrysobull
-chrysocarpous
-chrysochlore
-Chrysochloridae
-Chrysochloris
-chrysochlorous
-chrysochrous
-chrysocolla
-chrysocracy
-chrysoeriol
-chrysogen
-chrysograph
-chrysographer
-chrysography
-chrysohermidin
-chrysoidine
-chrysolite
-chrysolitic
-chrysology
-Chrysolophus
-chrysomelid
-Chrysomelidae
-chrysomonad
-Chrysomonadales
-Chrysomonadina
-chrysomonadine
-Chrysomyia
-Chrysopa
-chrysopal
-chrysopee
-chrysophan
-chrysophanic
-Chrysophanus
-chrysophenine
-chrysophilist
-chrysophilite
-Chrysophlyctis
-chrysophyll
-Chrysophyllum
-chrysopid
-Chrysopidae
-chrysopoeia
-chrysopoetic
-chrysopoetics
-chrysoprase
-Chrysops
-Chrysopsis
-chrysorin
-chrysosperm
-Chrysosplenium
-Chrysothamnus
-Chrysothrix
-chrysotile
-Chrysotis
-chrystocrene
-chthonian
-chthonic
-chthonophagia
-chthonophagy
-chub
-chubbed
-chubbedness
-chubbily
-chubbiness
-chubby
-Chuchona
-Chuck
-chuck
-chucker
-chuckhole
-chuckies
-chucking
-chuckingly
-chuckle
-chucklehead
-chuckleheaded
-chuckler
-chucklingly
-chuckrum
-chuckstone
-chuckwalla
-chucky
-Chud
-chuddar
-Chude
-Chudic
-Chueta
-chufa
-chuff
-chuffy
-chug
-chugger
-chuhra
-Chuje
-chukar
-Chukchi
-chukker
-chukor
-chulan
-chullpa
-chum
-Chumashan
-Chumawi
-chummage
-chummer
-chummery
-chummily
-chummy
-chump
-chumpaka
-chumpish
-chumpishness
-Chumpivilca
-chumpy
-chumship
-Chumulu
-Chun
-chun
-chunari
-Chuncho
-chunga
-chunk
-chunkhead
-chunkily
-chunkiness
-chunky
-chunner
-chunnia
-chunter
-chupak
-chupon
-chuprassie
-chuprassy
-church
-churchanity
-churchcraft
-churchdom
-churchful
-churchgoer
-churchgoing
-churchgrith
-churchianity
-churchified
-churchiness
-churching
-churchish
-churchism
-churchite
-churchless
-churchlet
-churchlike
-churchliness
-churchly
-churchman
-churchmanly
-churchmanship
-churchmaster
-churchscot
-churchward
-churchwarden
-churchwardenism
-churchwardenize
-churchwardenship
-churchwards
-churchway
-churchwise
-churchwoman
-churchy
-churchyard
-churel
-churinga
-churl
-churled
-churlhood
-churlish
-churlishly
-churlishness
-churly
-churm
-churn
-churnability
-churnful
-churning
-churnmilk
-churnstaff
-Churoya
-Churoyan
-churr
-Churrigueresque
-churruck
-churrus
-churrworm
-chut
-chute
-chuter
-chutney
-Chuvash
-Chwana
-chyack
-chyak
-chylaceous
-chylangioma
-chylaqueous
-chyle
-chylemia
-chylidrosis
-chylifaction
-chylifactive
-chylifactory
-chyliferous
-chylific
-chylification
-chylificatory
-chyliform
-chylify
-chylocaulous
-chylocauly
-chylocele
-chylocyst
-chyloid
-chylomicron
-chylopericardium
-chylophyllous
-chylophylly
-chylopoiesis
-chylopoietic
-chylosis
-chylothorax
-chylous
-chyluria
-chymaqueous
-chymase
-chyme
-chymia
-chymic
-chymiferous
-chymification
-chymify
-chymosin
-chymosinogen
-chymotrypsin
-chymotrypsinogen
-chymous
-chypre
-chytra
-chytrid
-Chytridiaceae
-chytridiaceous
-chytridial
-Chytridiales
-chytridiose
-chytridiosis
-Chytridium
-Chytroi
-cibarial
-cibarian
-cibarious
-cibation
-cibol
-Cibola
-Cibolan
-Ciboney
-cibophobia
-ciborium
-cibory
-ciboule
-cicad
-cicada
-Cicadellidae
-cicadid
-Cicadidae
-cicala
-cicatrice
-cicatrices
-cicatricial
-cicatricle
-cicatricose
-cicatricula
-cicatricule
-cicatrisive
-cicatrix
-cicatrizant
-cicatrizate
-cicatrization
-cicatrize
-cicatrizer
-cicatrose
-Cicely
-cicely
-cicer
-ciceronage
-cicerone
-ciceroni
-Ciceronian
-Ciceronianism
-Ciceronianize
-Ciceronic
-Ciceronically
-ciceronism
-ciceronize
-cichlid
-Cichlidae
-cichloid
-cichoraceous
-Cichoriaceae
-cichoriaceous
-Cichorium
-Cicindela
-cicindelid
-cicindelidae
-cicisbeism
-ciclatoun
-Ciconia
-Ciconiae
-ciconian
-ciconiid
-Ciconiidae
-ciconiiform
-Ciconiiformes
-ciconine
-ciconioid
-Cicuta
-cicutoxin
-Cid
-cidarid
-Cidaridae
-cidaris
-Cidaroida
-cider
-ciderish
-ciderist
-ciderkin
-cig
-cigala
-cigar
-cigaresque
-cigarette
-cigarfish
-cigarillo
-cigarito
-cigarless
-cigua
-ciguatera
-cilectomy
-cilia
-ciliary
-Ciliata
-ciliate
-ciliated
-ciliately
-ciliation
-cilice
-Cilician
-cilicious
-Cilicism
-ciliella
-ciliferous
-ciliform
-ciliiferous
-ciliiform
-Cilioflagellata
-cilioflagellate
-ciliograde
-ciliolate
-ciliolum
-Ciliophora
-cilioretinal
-cilioscleral
-ciliospinal
-ciliotomy
-cilium
-cillosis
-cimbia
-Cimbri
-Cimbrian
-Cimbric
-cimelia
-cimex
-cimicid
-Cimicidae
-cimicide
-cimiciform
-Cimicifuga
-cimicifugin
-cimicoid
-ciminite
-cimline
-Cimmeria
-Cimmerian
-Cimmerianism
-cimolite
-cinch
-cincher
-cincholoipon
-cincholoiponic
-cinchomeronic
-Cinchona
-Cinchonaceae
-cinchonaceous
-cinchonamine
-cinchonate
-cinchonia
-cinchonic
-cinchonicine
-cinchonidia
-cinchonidine
-cinchonine
-cinchoninic
-cinchonism
-cinchonization
-cinchonize
-cinchonology
-cinchophen
-cinchotine
-cinchotoxine
-cincinnal
-Cincinnati
-Cincinnatia
-Cincinnatian
-cincinnus
-Cinclidae
-Cinclidotus
-cinclis
-Cinclus
-cinct
-cincture
-cinder
-Cinderella
-cinderlike
-cinderman
-cinderous
-cindery
-Cindie
-Cindy
-cine
-cinecamera
-cinefilm
-cinel
-cinema
-Cinemascope
-cinematic
-cinematical
-cinematically
-cinematize
-cinematograph
-cinematographer
-cinematographic
-cinematographical
-cinematographically
-cinematographist
-cinematography
-cinemelodrama
-cinemize
-cinemograph
-cinenchyma
-cinenchymatous
-cinene
-cinenegative
-cineole
-cineolic
-cinephone
-cinephotomicrography
-cineplastics
-cineplasty
-cineraceous
-Cinerama
-Cineraria
-cinerarium
-cinerary
-cineration
-cinerator
-cinerea
-cinereal
-cinereous
-cineritious
-cinevariety
-cingle
-cingular
-cingulate
-cingulated
-cingulum
-cinnabar
-cinnabaric
-cinnabarine
-cinnamal
-cinnamaldehyde
-cinnamate
-cinnamein
-cinnamene
-cinnamenyl
-cinnamic
-Cinnamodendron
-cinnamol
-cinnamomic
-Cinnamomum
-cinnamon
-cinnamoned
-cinnamonic
-cinnamonlike
-cinnamonroot
-cinnamonwood
-cinnamyl
-cinnamylidene
-cinnoline
-cinnyl
-cinquain
-cinque
-cinquecentism
-cinquecentist
-cinquecento
-cinquefoil
-cinquefoiled
-cinquepace
-cinter
-Cinura
-cinuran
-cinurous
-cion
-cionectomy
-cionitis
-cionocranial
-cionocranian
-cionoptosis
-cionorrhaphia
-cionotome
-cionotomy
-Cipango
-cipher
-cipherable
-cipherdom
-cipherer
-cipherhood
-cipo
-cipolin
-cippus
-circa
-Circaea
-Circaeaceae
-Circaetus
-Circassian
-Circassic
-Circe
-Circean
-Circensian
-circinal
-circinate
-circinately
-circination
-Circinus
-circiter
-circle
-circled
-circler
-circlet
-circlewise
-circling
-circovarian
-circuit
-circuitable
-circuital
-circuiteer
-circuiter
-circuition
-circuitman
-circuitor
-circuitous
-circuitously
-circuitousness
-circuity
-circulable
-circulant
-circular
-circularism
-circularity
-circularization
-circularize
-circularizer
-circularly
-circularness
-circularwise
-circulate
-circulation
-circulative
-circulator
-circulatory
-circumagitate
-circumagitation
-circumambages
-circumambagious
-circumambience
-circumambiency
-circumambient
-circumambulate
-circumambulation
-circumambulator
-circumambulatory
-circumanal
-circumantarctic
-circumarctic
-circumarticular
-circumaviate
-circumaviation
-circumaviator
-circumaxial
-circumaxile
-circumaxillary
-circumbasal
-circumbendibus
-circumboreal
-circumbuccal
-circumbulbar
-circumcallosal
-Circumcellion
-circumcenter
-circumcentral
-circumcinct
-circumcincture
-circumcircle
-circumcise
-circumciser
-circumcision
-circumclude
-circumclusion
-circumcolumnar
-circumcone
-circumconic
-circumcorneal
-circumcrescence
-circumcrescent
-circumdenudation
-circumdiction
-circumduce
-circumduct
-circumduction
-circumesophagal
-circumesophageal
-circumference
-circumferential
-circumferentially
-circumferentor
-circumflant
-circumflect
-circumflex
-circumflexion
-circumfluence
-circumfluent
-circumfluous
-circumforaneous
-circumfulgent
-circumfuse
-circumfusile
-circumfusion
-circumgenital
-circumgyrate
-circumgyration
-circumgyratory
-circumhorizontal
-circumincession
-circuminsession
-circuminsular
-circumintestinal
-circumitineration
-circumjacence
-circumjacency
-circumjacent
-circumlental
-circumlitio
-circumlittoral
-circumlocute
-circumlocution
-circumlocutional
-circumlocutionary
-circumlocutionist
-circumlocutory
-circummeridian
-circummeridional
-circummigration
-circummundane
-circummure
-circumnatant
-circumnavigable
-circumnavigate
-circumnavigation
-circumnavigator
-circumnavigatory
-circumneutral
-circumnuclear
-circumnutate
-circumnutation
-circumnutatory
-circumocular
-circumoesophagal
-circumoral
-circumorbital
-circumpacific
-circumpallial
-circumparallelogram
-circumpentagon
-circumplicate
-circumplication
-circumpolar
-circumpolygon
-circumpose
-circumposition
-circumradius
-circumrenal
-circumrotate
-circumrotation
-circumrotatory
-circumsail
-circumscissile
-circumscribable
-circumscribe
-circumscribed
-circumscriber
-circumscript
-circumscription
-circumscriptive
-circumscriptively
-circumscriptly
-circumsinous
-circumspangle
-circumspatial
-circumspect
-circumspection
-circumspective
-circumspectively
-circumspectly
-circumspectness
-circumspheral
-circumstance
-circumstanced
-circumstantiability
-circumstantiable
-circumstantial
-circumstantiality
-circumstantially
-circumstantialness
-circumstantiate
-circumstantiation
-circumtabular
-circumterraneous
-circumterrestrial
-circumtonsillar
-circumtropical
-circumumbilical
-circumundulate
-circumundulation
-circumvallate
-circumvallation
-circumvascular
-circumvent
-circumventer
-circumvention
-circumventive
-circumventor
-circumviate
-circumvolant
-circumvolute
-circumvolution
-circumvolutory
-circumvolve
-circumzenithal
-circus
-circusy
-cirque
-cirrate
-cirrated
-Cirratulidae
-Cirratulus
-Cirrhopetalum
-cirrhosed
-cirrhosis
-cirrhotic
-cirrhous
-cirri
-cirribranch
-cirriferous
-cirriform
-cirrigerous
-cirrigrade
-cirriped
-Cirripedia
-cirripedial
-cirrolite
-cirropodous
-cirrose
-Cirrostomi
-cirrous
-cirrus
-cirsectomy
-Cirsium
-cirsocele
-cirsoid
-cirsomphalos
-cirsophthalmia
-cirsotome
-cirsotomy
-ciruela
-cirurgian
-Cisalpine
-cisalpine
-Cisalpinism
-cisandine
-cisatlantic
-cisco
-cise
-cisele
-cisgangetic
-cisjurane
-cisleithan
-cismarine
-Cismontane
-cismontane
-Cismontanism
-cisoceanic
-cispadane
-cisplatine
-cispontine
-cisrhenane
-Cissampelos
-cissing
-cissoid
-cissoidal
-Cissus
-cist
-cista
-Cistaceae
-cistaceous
-cistae
-cisted
-Cistercian
-Cistercianism
-cistern
-cisterna
-cisternal
-cistic
-cistophoric
-cistophorus
-Cistudo
-Cistus
-cistvaen
-cit
-citable
-citadel
-citation
-citator
-citatory
-cite
-citee
-Citellus
-citer
-citess
-cithara
-Citharexylum
-citharist
-citharista
-citharoedi
-citharoedic
-citharoedus
-cither
-citied
-citification
-citified
-citify
-Citigradae
-citigrade
-citizen
-citizendom
-citizeness
-citizenhood
-citizenish
-citizenism
-citizenize
-citizenly
-citizenry
-citizenship
-citole
-citraconate
-citraconic
-citral
-citramide
-citramontane
-citrange
-citrangeade
-citrate
-citrated
-citrean
-citrene
-citreous
-citric
-citriculture
-citriculturist
-citril
-citrin
-citrination
-citrine
-citrinin
-citrinous
-citrometer
-Citromyces
-citron
-citronade
-citronella
-citronellal
-citronelle
-citronellic
-citronellol
-citronin
-citronwood
-Citropsis
-citropten
-citrous
-citrullin
-Citrullus
-Citrus
-citrus
-citrylidene
-cittern
-citua
-city
-citycism
-citydom
-cityfolk
-cityful
-cityish
-cityless
-cityness
-cityscape
-cityward
-citywards
-cive
-civet
-civetlike
-civetone
-civic
-civically
-civicism
-civics
-civil
-civilian
-civility
-civilizable
-civilization
-civilizational
-civilizatory
-civilize
-civilized
-civilizedness
-civilizee
-civilizer
-civilly
-civilness
-civism
-Civitan
-civvy
-cixiid
-Cixiidae
-Cixo
-clabber
-clabbery
-clachan
-clack
-Clackama
-clackdish
-clacker
-clacket
-clackety
-clad
-cladanthous
-cladautoicous
-cladding
-cladine
-cladocarpous
-Cladocera
-cladoceran
-cladocerous
-cladode
-cladodial
-cladodont
-cladodontid
-Cladodontidae
-Cladodus
-cladogenous
-Cladonia
-Cladoniaceae
-cladoniaceous
-cladonioid
-Cladophora
-Cladophoraceae
-cladophoraceous
-Cladophorales
-cladophyll
-cladophyllum
-cladoptosis
-cladose
-Cladoselache
-Cladoselachea
-cladoselachian
-Cladoselachidae
-cladosiphonic
-Cladosporium
-Cladothrix
-Cladrastis
-cladus
-clag
-claggum
-claggy
-Claiborne
-Claibornian
-claim
-claimable
-claimant
-claimer
-claimless
-clairaudience
-clairaudient
-clairaudiently
-clairce
-Claire
-clairecole
-clairecolle
-clairschach
-clairschacher
-clairsentience
-clairsentient
-clairvoyance
-clairvoyancy
-clairvoyant
-clairvoyantly
-claith
-claithes
-claiver
-Clallam
-clam
-clamant
-clamantly
-clamative
-Clamatores
-clamatorial
-clamatory
-clamb
-clambake
-clamber
-clamberer
-clamcracker
-clame
-clamer
-clammed
-clammer
-clammily
-clamminess
-clamming
-clammish
-clammy
-clammyweed
-clamor
-clamorer
-clamorist
-clamorous
-clamorously
-clamorousness
-clamorsome
-clamp
-clamper
-clamshell
-clamworm
-clan
-clancular
-clancularly
-clandestine
-clandestinely
-clandestineness
-clandestinity
-clanfellow
-clang
-clangful
-clangingly
-clangor
-clangorous
-clangorously
-Clangula
-clanjamfray
-clanjamfrey
-clanjamfrie
-clanjamphrey
-clank
-clankety
-clanking
-clankingly
-clankingness
-clankless
-clanless
-clanned
-clanning
-clannishly
-clannishness
-clansfolk
-clanship
-clansman
-clansmanship
-clanswoman
-Claosaurus
-clap
-clapboard
-clapbread
-clapmatch
-clapnet
-clapped
-clapper
-clapperclaw
-clapperclawer
-clapperdudgeon
-clappermaclaw
-clapping
-clapt
-claptrap
-clapwort
-claque
-claquer
-Clara
-clarabella
-clarain
-Clare
-Clarence
-Clarenceux
-Clarenceuxship
-Clarencieux
-clarendon
-claret
-Claretian
-Claribel
-claribella
-Clarice
-clarifiant
-clarification
-clarifier
-clarify
-clarigation
-clarin
-Clarinda
-clarinet
-clarinetist
-clarinettist
-clarion
-clarionet
-Clarissa
-Clarisse
-Clarist
-clarity
-Clark
-clark
-clarkeite
-Clarkia
-claro
-Claromontane
-clarshech
-clart
-clarty
-clary
-clash
-clasher
-clashingly
-clashy
-clasmatocyte
-clasmatosis
-clasp
-clasper
-clasping
-claspt
-class
-classable
-classbook
-classed
-classer
-classes
-classfellow
-classic
-classical
-classicalism
-classicalist
-classicality
-classicalize
-classically
-classicalness
-classicism
-classicist
-classicistic
-classicize
-classicolatry
-classifiable
-classific
-classifically
-classification
-classificational
-classificator
-classificatory
-classified
-classifier
-classis
-classism
-classman
-classmanship
-classmate
-classroom
-classwise
-classwork
-classy
-clastic
-clat
-clatch
-Clathraceae
-clathraceous
-Clathraria
-clathrarian
-clathrate
-Clathrina
-Clathrinidae
-clathroid
-clathrose
-clathrulate
-Clathrus
-Clatsop
-clatter
-clatterer
-clatteringly
-clattertrap
-clattery
-clatty
-Claude
-claudent
-claudetite
-Claudia
-Claudian
-claudicant
-claudicate
-claudication
-Claudio
-Claudius
-claught
-clausal
-clause
-Clausilia
-Clausiliidae
-clausthalite
-claustra
-claustral
-claustration
-claustrophobia
-claustrum
-clausula
-clausular
-clausule
-clausure
-claut
-clava
-clavacin
-claval
-Clavaria
-Clavariaceae
-clavariaceous
-clavate
-clavated
-clavately
-clavation
-clave
-clavecin
-clavecinist
-clavel
-clavelization
-clavelize
-clavellate
-clavellated
-claver
-clavial
-claviature
-clavicembalo
-Claviceps
-clavichord
-clavichordist
-clavicithern
-clavicle
-clavicorn
-clavicornate
-Clavicornes
-Clavicornia
-clavicotomy
-clavicular
-clavicularium
-claviculate
-claviculus
-clavicylinder
-clavicymbal
-clavicytherium
-clavier
-clavierist
-claviform
-claviger
-clavigerous
-claviharp
-clavilux
-claviol
-clavipectoral
-clavis
-clavodeltoid
-clavodeltoideus
-clavola
-clavolae
-clavolet
-clavus
-clavy
-claw
-clawed
-clawer
-clawk
-clawker
-clawless
-Clay
-clay
-claybank
-claybrained
-clayen
-clayer
-clayey
-clayiness
-clayish
-claylike
-clayman
-claymore
-Clayoquot
-claypan
-Clayton
-Claytonia
-clayware
-clayweed
-cleach
-clead
-cleaded
-cleading
-cleam
-cleamer
-clean
-cleanable
-cleaner
-cleanhanded
-cleanhandedness
-cleanhearted
-cleaning
-cleanish
-cleanlily
-cleanliness
-cleanly
-cleanness
-cleanout
-cleansable
-cleanse
-cleanser
-cleansing
-cleanskins
-cleanup
-clear
-clearable
-clearage
-clearance
-clearcole
-clearedness
-clearer
-clearheaded
-clearheadedly
-clearheadedness
-clearhearted
-clearing
-clearinghouse
-clearish
-clearly
-clearness
-clearskins
-clearstarch
-clearweed
-clearwing
-cleat
-cleavability
-cleavable
-cleavage
-cleave
-cleaveful
-cleavelandite
-cleaver
-cleavers
-cleaverwort
-cleaving
-cleavingly
-cleche
-cleck
-cled
-cledge
-cledgy
-cledonism
-clee
-cleek
-cleeked
-cleeky
-clef
-cleft
-clefted
-cleg
-cleidagra
-cleidarthritis
-cleidocostal
-cleidocranial
-cleidohyoid
-cleidomancy
-cleidomastoid
-cleidorrhexis
-cleidoscapular
-cleidosternal
-cleidotomy
-cleidotripsy
-cleistocarp
-cleistocarpous
-cleistogamic
-cleistogamically
-cleistogamous
-cleistogamously
-cleistogamy
-cleistogene
-cleistogenous
-cleistogeny
-cleistothecium
-Cleistothecopsis
-cleithral
-cleithrum
-Clem
-clem
-Clematis
-clematite
-Clemclemalats
-clemence
-clemency
-Clement
-clement
-Clementina
-Clementine
-clemently
-clench
-cleoid
-Cleome
-Cleopatra
-clep
-Clepsine
-clepsydra
-cleptobiosis
-cleptobiotic
-clerestoried
-clerestory
-clergy
-clergyable
-clergylike
-clergyman
-clergywoman
-cleric
-clerical
-clericalism
-clericalist
-clericality
-clericalize
-clerically
-clericate
-clericature
-clericism
-clericity
-clerid
-Cleridae
-clerihew
-clerisy
-clerk
-clerkage
-clerkdom
-clerkery
-clerkess
-clerkhood
-clerking
-clerkish
-clerkless
-clerklike
-clerkliness
-clerkly
-clerkship
-Clerodendron
-cleromancy
-cleronomy
-cleruch
-cleruchial
-cleruchic
-cleruchy
-Clerus
-cletch
-Clethra
-Clethraceae
-clethraceous
-cleuch
-cleve
-cleveite
-clever
-cleverality
-cleverish
-cleverishly
-cleverly
-cleverness
-clevis
-clew
-cliack
-clianthus
-cliche
-click
-clicker
-clicket
-clickless
-clicky
-Clidastes
-cliency
-client
-clientage
-cliental
-cliented
-clientelage
-clientele
-clientless
-clientry
-clientship
-Cliff
-cliff
-cliffed
-cliffless
-clifflet
-clifflike
-Clifford
-cliffside
-cliffsman
-cliffweed
-cliffy
-clift
-Cliftonia
-cliftonite
-clifty
-clima
-Climaciaceae
-climaciaceous
-Climacium
-climacteric
-climacterical
-climacterically
-climactic
-climactical
-climactically
-climacus
-climata
-climatal
-climate
-climath
-climatic
-climatical
-climatically
-Climatius
-climatize
-climatographical
-climatography
-climatologic
-climatological
-climatologically
-climatologist
-climatology
-climatometer
-climatotherapeutics
-climatotherapy
-climature
-climax
-climb
-climbable
-climber
-climbing
-clime
-climograph
-clinal
-clinamen
-clinamina
-clinandria
-clinandrium
-clinanthia
-clinanthium
-clinch
-clincher
-clinchingly
-clinchingness
-cline
-cling
-clinger
-clingfish
-clinging
-clingingly
-clingingness
-clingstone
-clingy
-clinia
-clinic
-clinical
-clinically
-clinician
-clinicist
-clinicopathological
-clinium
-clink
-clinker
-clinkerer
-clinkery
-clinking
-clinkstone
-clinkum
-clinoaxis
-clinocephalic
-clinocephalism
-clinocephalous
-clinocephalus
-clinocephaly
-clinochlore
-clinoclase
-clinoclasite
-clinodiagonal
-clinodomatic
-clinodome
-clinograph
-clinographic
-clinohedral
-clinohedrite
-clinohumite
-clinoid
-clinologic
-clinology
-clinometer
-clinometric
-clinometrical
-clinometry
-clinopinacoid
-clinopinacoidal
-Clinopodium
-clinoprism
-clinopyramid
-clinopyroxene
-clinorhombic
-clinospore
-clinostat
-clinquant
-clint
-clinting
-Clinton
-Clintonia
-clintonite
-clinty
-Clio
-Cliona
-Clione
-clip
-clipei
-clipeus
-clippable
-clipped
-clipper
-clipperman
-clipping
-clips
-clipse
-clipsheet
-clipsome
-clipt
-clique
-cliquedom
-cliqueless
-cliquish
-cliquishly
-cliquishness
-cliquism
-cliquy
-cliseometer
-clisere
-clishmaclaver
-Clisiocampa
-Clistogastra
-clit
-clitch
-clite
-clitella
-clitellar
-clitelliferous
-clitelline
-clitellum
-clitellus
-clites
-clithe
-clithral
-clithridiate
-clitia
-clition
-Clitocybe
-Clitoria
-clitoridauxe
-clitoridean
-clitoridectomy
-clitoriditis
-clitoridotomy
-clitoris
-clitorism
-clitoritis
-clitter
-clitterclatter
-clival
-clive
-clivers
-Clivia
-clivis
-clivus
-cloaca
-cloacal
-cloacaline
-cloacean
-cloacinal
-cloacinean
-cloacitis
-cloak
-cloakage
-cloaked
-cloakedly
-cloaking
-cloakless
-cloaklet
-cloakmaker
-cloakmaking
-cloakroom
-cloakwise
-cloam
-cloamen
-cloamer
-clobber
-clobberer
-clochan
-cloche
-clocher
-clochette
-clock
-clockbird
-clockcase
-clocked
-clocker
-clockface
-clockhouse
-clockkeeper
-clockless
-clocklike
-clockmaker
-clockmaking
-clockmutch
-clockroom
-clocksmith
-clockwise
-clockwork
-clod
-clodbreaker
-clodder
-cloddily
-cloddiness
-cloddish
-cloddishly
-cloddishness
-cloddy
-clodhead
-clodhopper
-clodhopping
-clodlet
-clodpate
-clodpated
-clodpoll
-cloff
-clog
-clogdogdo
-clogger
-cloggily
-clogginess
-cloggy
-cloghad
-cloglike
-clogmaker
-clogmaking
-clogwood
-clogwyn
-cloiochoanitic
-cloisonless
-cloisonne
-cloister
-cloisteral
-cloistered
-cloisterer
-cloisterless
-cloisterlike
-cloisterliness
-cloisterly
-cloisterwise
-cloistral
-cloistress
-cloit
-clomb
-clomben
-clonal
-clone
-clonic
-clonicity
-clonicotonic
-clonism
-clonorchiasis
-Clonorchis
-Clonothrix
-clonus
-cloof
-cloop
-cloot
-clootie
-clop
-cloragen
-clorargyrite
-cloriodid
-closable
-close
-closecross
-closed
-closefisted
-closefistedly
-closefistedness
-closehanded
-closehearted
-closely
-closemouth
-closemouthed
-closen
-closeness
-closer
-closestool
-closet
-closewing
-closh
-closish
-closter
-Closterium
-clostridial
-Clostridium
-closure
-clot
-clotbur
-clote
-cloth
-clothbound
-clothe
-clothes
-clothesbag
-clothesbasket
-clothesbrush
-clotheshorse
-clothesline
-clothesman
-clothesmonger
-clothespin
-clothespress
-clothesyard
-clothier
-clothify
-Clothilda
-clothing
-clothmaker
-clothmaking
-Clotho
-clothworker
-clothy
-clottage
-clottedness
-clotter
-clotty
-cloture
-clotweed
-cloud
-cloudage
-cloudberry
-cloudburst
-cloudcap
-clouded
-cloudful
-cloudily
-cloudiness
-clouding
-cloudland
-cloudless
-cloudlessly
-cloudlessness
-cloudlet
-cloudlike
-cloudling
-cloudology
-cloudscape
-cloudship
-cloudward
-cloudwards
-cloudy
-clough
-clour
-clout
-clouted
-clouter
-clouterly
-clouty
-clove
-cloven
-clovene
-clover
-clovered
-cloverlay
-cloverleaf
-cloveroot
-cloverroot
-clovery
-clow
-clown
-clownade
-clownage
-clownery
-clownheal
-clownish
-clownishly
-clownishness
-clownship
-clowring
-cloy
-cloyedness
-cloyer
-cloying
-cloyingly
-cloyingness
-cloyless
-cloysome
-club
-clubbability
-clubbable
-clubbed
-clubber
-clubbily
-clubbing
-clubbish
-clubbism
-clubbist
-clubby
-clubdom
-clubfellow
-clubfisted
-clubfoot
-clubfooted
-clubhand
-clubhaul
-clubhouse
-clubionid
-Clubionidae
-clubland
-clubman
-clubmate
-clubmobile
-clubmonger
-clubridden
-clubroom
-clubroot
-clubstart
-clubster
-clubweed
-clubwoman
-clubwood
-cluck
-clue
-cluff
-clump
-clumpish
-clumproot
-clumpy
-clumse
-clumsily
-clumsiness
-clumsy
-clunch
-clung
-Cluniac
-Cluniacensian
-Clunisian
-Clunist
-clunk
-clupanodonic
-Clupea
-clupeid
-Clupeidae
-clupeiform
-clupeine
-Clupeodei
-clupeoid
-cluricaune
-Clusia
-Clusiaceae
-clusiaceous
-cluster
-clusterberry
-clustered
-clusterfist
-clustering
-clusteringly
-clustery
-clutch
-clutchman
-cluther
-clutter
-clutterer
-clutterment
-cluttery
-cly
-Clyde
-Clydesdale
-Clydeside
-Clydesider
-clyer
-clyfaker
-clyfaking
-Clymenia
-clype
-clypeal
-Clypeaster
-Clypeastridea
-Clypeastrina
-clypeastroid
-Clypeastroida
-Clypeastroidea
-clypeate
-clypeiform
-clypeolar
-clypeolate
-clypeole
-clypeus
-clysis
-clysma
-clysmian
-clysmic
-clyster
-clysterize
-Clytemnestra
-cnemapophysis
-cnemial
-cnemidium
-Cnemidophorus
-cnemis
-Cneoraceae
-cneoraceous
-Cneorum
-cnicin
-Cnicus
-cnida
-Cnidaria
-cnidarian
-Cnidian
-cnidoblast
-cnidocell
-cnidocil
-cnidocyst
-cnidophore
-cnidophorous
-cnidopod
-cnidosac
-Cnidoscolus
-cnidosis
-coabode
-coabound
-coabsume
-coacceptor
-coacervate
-coacervation
-coach
-coachability
-coachable
-coachbuilder
-coachbuilding
-coachee
-coacher
-coachfellow
-coachful
-coaching
-coachlet
-coachmaker
-coachmaking
-coachman
-coachmanship
-coachmaster
-coachsmith
-coachsmithing
-coachway
-coachwhip
-coachwise
-coachwoman
-coachwork
-coachwright
-coachy
-coact
-coaction
-coactive
-coactively
-coactivity
-coactor
-coadamite
-coadapt
-coadaptation
-coadequate
-coadjacence
-coadjacency
-coadjacent
-coadjacently
-coadjudicator
-coadjust
-coadjustment
-coadjutant
-coadjutator
-coadjute
-coadjutement
-coadjutive
-coadjutor
-coadjutorship
-coadjutress
-coadjutrix
-coadjuvancy
-coadjuvant
-coadjuvate
-coadminister
-coadministration
-coadministrator
-coadministratrix
-coadmiration
-coadmire
-coadmit
-coadnate
-coadore
-coadsorbent
-coadunate
-coadunation
-coadunative
-coadunatively
-coadunite
-coadventure
-coadventurer
-coadvice
-coaffirmation
-coafforest
-coaged
-coagency
-coagent
-coaggregate
-coaggregated
-coaggregation
-coagitate
-coagitator
-coagment
-coagonize
-coagriculturist
-coagula
-coagulability
-coagulable
-coagulant
-coagulase
-coagulate
-coagulation
-coagulative
-coagulator
-coagulatory
-coagulin
-coagulometer
-coagulose
-coagulum
-Coahuiltecan
-coaid
-coaita
-coak
-coakum
-coal
-coalbag
-coalbagger
-coalbin
-coalbox
-coaldealer
-coaler
-coalesce
-coalescence
-coalescency
-coalescent
-coalfish
-coalfitter
-coalhole
-coalification
-coalify
-Coalite
-coalition
-coalitional
-coalitioner
-coalitionist
-coalize
-coalizer
-coalless
-coalmonger
-coalmouse
-coalpit
-coalrake
-coalsack
-coalternate
-coalternation
-coalternative
-coaltitude
-coaly
-coalyard
-coambassador
-coambulant
-coamiable
-coaming
-Coan
-coanimate
-coannex
-coannihilate
-coapostate
-coapparition
-coappear
-coappearance
-coapprehend
-coapprentice
-coappriser
-coapprover
-coapt
-coaptate
-coaptation
-coaration
-coarb
-coarbiter
-coarbitrator
-coarctate
-coarctation
-coardent
-coarrange
-coarrangement
-coarse
-coarsely
-coarsen
-coarseness
-coarsish
-coascend
-coassert
-coasserter
-coassession
-coassessor
-coassignee
-coassist
-coassistance
-coassistant
-coassume
-coast
-coastal
-coastally
-coaster
-Coastguard
-coastguardman
-coasting
-coastland
-coastman
-coastside
-coastwaiter
-coastward
-coastwards
-coastways
-coastwise
-coat
-coated
-coatee
-coater
-coati
-coatie
-coatimondie
-coatimundi
-coating
-coatless
-coatroom
-coattail
-coattailed
-coattend
-coattest
-coattestation
-coattestator
-coaudience
-coauditor
-coaugment
-coauthor
-coauthority
-coauthorship
-coawareness
-coax
-coaxal
-coaxation
-coaxer
-coaxial
-coaxially
-coaxing
-coaxingly
-coaxy
-cob
-cobaea
-cobalt
-cobaltammine
-cobaltic
-cobalticyanic
-cobalticyanides
-cobaltiferous
-cobaltinitrite
-cobaltite
-cobaltocyanic
-cobaltocyanide
-cobaltous
-cobang
-cobbed
-cobber
-cobberer
-cobbing
-cobble
-cobbler
-cobblerfish
-cobblerism
-cobblerless
-cobblership
-cobblery
-cobblestone
-cobbling
-cobbly
-cobbra
-cobby
-cobcab
-Cobdenism
-Cobdenite
-cobego
-cobelief
-cobeliever
-cobelligerent
-cobenignity
-coberger
-cobewail
-cobhead
-cobia
-cobiron
-cobishop
-Cobitidae
-Cobitis
-coble
-cobleman
-Coblentzian
-Cobleskill
-cobless
-cobloaf
-cobnut
-cobola
-coboundless
-cobourg
-cobra
-cobreathe
-cobridgehead
-cobriform
-cobrother
-cobstone
-coburg
-coburgess
-coburgher
-coburghership
-Cobus
-cobweb
-cobwebbery
-cobwebbing
-cobwebby
-cobwork
-coca
-cocaceous
-cocaine
-cocainism
-cocainist
-cocainization
-cocainize
-cocainomania
-cocainomaniac
-Cocama
-Cocamama
-cocamine
-Cocanucos
-cocarboxylase
-cocash
-cocashweed
-cocause
-cocautioner
-Coccaceae
-coccagee
-coccal
-Cocceian
-Cocceianism
-coccerin
-cocci
-coccid
-Coccidae
-coccidia
-coccidial
-coccidian
-Coccidiidea
-coccidioidal
-Coccidioides
-Coccidiomorpha
-coccidiosis
-coccidium
-coccidology
-cocciferous
-cocciform
-coccigenic
-coccinella
-coccinellid
-Coccinellidae
-coccionella
-cocco
-coccobacillus
-coccochromatic
-Coccogonales
-coccogone
-Coccogoneae
-coccogonium
-coccoid
-coccolite
-coccolith
-coccolithophorid
-Coccolithophoridae
-Coccoloba
-Coccolobis
-Coccomyces
-coccosphere
-coccostean
-coccosteid
-Coccosteidae
-Coccosteus
-Coccothraustes
-coccothraustine
-Coccothrinax
-coccous
-coccule
-cocculiferous
-Cocculus
-cocculus
-coccus
-coccydynia
-coccygalgia
-coccygeal
-coccygean
-coccygectomy
-coccygerector
-coccyges
-coccygeus
-coccygine
-coccygodynia
-coccygomorph
-Coccygomorphae
-coccygomorphic
-coccygotomy
-coccyodynia
-coccyx
-Coccyzus
-cocentric
-cochairman
-cochal
-cochief
-Cochin
-cochineal
-cochlea
-cochlear
-cochleare
-Cochlearia
-cochlearifoliate
-cochleariform
-cochleate
-cochleated
-cochleiform
-cochleitis
-cochleous
-cochlidiid
-Cochlidiidae
-cochliodont
-Cochliodontidae
-Cochliodus
-Cochlospermaceae
-cochlospermaceous
-Cochlospermum
-Cochranea
-cochurchwarden
-cocillana
-cocircular
-cocircularity
-cocitizen
-cocitizenship
-cock
-cockade
-cockaded
-Cockaigne
-cockal
-cockalorum
-cockamaroo
-cockarouse
-cockateel
-cockatoo
-cockatrice
-cockawee
-cockbell
-cockbill
-cockbird
-cockboat
-cockbrain
-cockchafer
-cockcrow
-cockcrower
-cockcrowing
-cocked
-Cocker
-cocker
-cockerel
-cockermeg
-cockernony
-cocket
-cockeye
-cockeyed
-cockfight
-cockfighting
-cockhead
-cockhorse
-cockieleekie
-cockily
-cockiness
-cocking
-cockish
-cockle
-cockleboat
-cocklebur
-cockled
-cockler
-cockleshell
-cocklet
-cocklewife
-cocklight
-cockling
-cockloft
-cockly
-cockmaster
-cockmatch
-cockmate
-cockneian
-cockneity
-cockney
-cockneybred
-cockneydom
-cockneyese
-cockneyess
-cockneyfication
-cockneyfy
-cockneyish
-cockneyishly
-cockneyism
-cockneyize
-cockneyland
-cockneyship
-cockpit
-cockroach
-cockscomb
-cockscombed
-cocksfoot
-cockshead
-cockshot
-cockshut
-cockshy
-cockshying
-cockspur
-cockstone
-cocksure
-cocksuredom
-cocksureism
-cocksurely
-cocksureness
-cocksurety
-cocktail
-cockthrowing
-cockup
-cockweed
-cocky
-Cocle
-coco
-cocoa
-cocoach
-cocobolo
-Coconino
-coconnection
-coconqueror
-coconscious
-coconsciously
-coconsciousness
-coconsecrator
-coconspirator
-coconstituent
-cocontractor
-Coconucan
-Coconuco
-coconut
-cocoon
-cocoonery
-cocorico
-cocoroot
-Cocos
-cocotte
-cocovenantor
-cocowood
-cocowort
-cocozelle
-cocreate
-cocreator
-cocreatorship
-cocreditor
-cocrucify
-coctile
-coction
-coctoantigen
-coctoprecipitin
-cocuisa
-cocullo
-cocurator
-cocurrent
-cocuswood
-cocuyo
-Cocytean
-Cocytus
-cod
-coda
-codamine
-codbank
-codder
-codding
-coddle
-coddler
-code
-codebtor
-codeclination
-codecree
-codefendant
-codeine
-codeless
-codelight
-codelinquency
-codelinquent
-codenization
-codeposit
-coder
-coderive
-codescendant
-codespairer
-codex
-codfish
-codfisher
-codfishery
-codger
-codhead
-codheaded
-Codiaceae
-codiaceous
-Codiaeum
-Codiales
-codical
-codices
-codicil
-codicilic
-codicillary
-codictatorship
-codification
-codifier
-codify
-codilla
-codille
-codiniac
-codirectional
-codirector
-codiscoverer
-codisjunct
-codist
-Codium
-codivine
-codling
-codman
-codo
-codol
-codomestication
-codominant
-codon
-codpiece
-codpitchings
-Codrus
-codshead
-codworm
-coe
-coecal
-coecum
-coed
-coeditor
-coeditorship
-coeducate
-coeducation
-coeducational
-coeducationalism
-coeducationalize
-coeducationally
-coeffect
-coefficacy
-coefficient
-coefficiently
-coeffluent
-coeffluential
-coelacanth
-coelacanthid
-Coelacanthidae
-coelacanthine
-Coelacanthini
-coelacanthoid
-coelacanthous
-coelanaglyphic
-coelar
-coelarium
-Coelastraceae
-coelastraceous
-Coelastrum
-Coelata
-coelder
-coeldership
-Coelebogyne
-coelect
-coelection
-coelector
-coelectron
-coelelminth
-Coelelminthes
-coelelminthic
-Coelentera
-Coelenterata
-coelenterate
-coelenteric
-coelenteron
-coelestine
-coelevate
-coelho
-coelia
-coeliac
-coelialgia
-coelian
-Coelicolae
-Coelicolist
-coeligenous
-coelin
-coeline
-coeliomyalgia
-coeliorrhea
-coeliorrhoea
-coelioscopy
-coeliotomy
-coeloblastic
-coeloblastula
-Coelococcus
-coelodont
-coelogastrula
-Coeloglossum
-Coelogyne
-coelom
-coeloma
-Coelomata
-coelomate
-coelomatic
-coelomatous
-coelomesoblast
-coelomic
-Coelomocoela
-coelomopore
-coelonavigation
-coelongated
-coeloplanula
-coelosperm
-coelospermous
-coelostat
-coelozoic
-coemanate
-coembedded
-coembody
-coembrace
-coeminency
-coemperor
-coemploy
-coemployee
-coemployment
-coempt
-coemption
-coemptional
-coemptionator
-coemptive
-coemptor
-coenact
-coenactor
-coenaculous
-coenamor
-coenamorment
-coenamourment
-coenanthium
-coendear
-Coendidae
-Coendou
-coendure
-coenenchym
-coenenchyma
-coenenchymal
-coenenchymatous
-coenenchyme
-coenesthesia
-coenesthesis
-coenflame
-coengage
-coengager
-coenjoy
-coenobe
-coenobiar
-coenobic
-coenobioid
-coenobium
-coenoblast
-coenoblastic
-coenocentrum
-coenocyte
-coenocytic
-coenodioecism
-coenoecial
-coenoecic
-coenoecium
-coenogamete
-coenomonoecism
-coenosarc
-coenosarcal
-coenosarcous
-coenosite
-coenospecies
-coenospecific
-coenospecifically
-coenosteal
-coenosteum
-coenotrope
-coenotype
-coenotypic
-coenthrone
-coenurus
-coenzyme
-coequal
-coequality
-coequalize
-coequally
-coequalness
-coequate
-coequated
-coequation
-coerce
-coercement
-coercer
-coercibility
-coercible
-coercibleness
-coercibly
-coercion
-coercionary
-coercionist
-coercitive
-coercive
-coercively
-coerciveness
-coercivity
-Coerebidae
-coeruleolactite
-coessential
-coessentiality
-coessentially
-coessentialness
-coestablishment
-coestate
-coetaneity
-coetaneous
-coetaneously
-coetaneousness
-coeternal
-coeternally
-coeternity
-coetus
-coeval
-coevality
-coevally
-coexchangeable
-coexclusive
-coexecutant
-coexecutor
-coexecutrix
-coexert
-coexertion
-coexist
-coexistence
-coexistency
-coexistent
-coexpand
-coexpanded
-coexperiencer
-coexpire
-coexplosion
-coextend
-coextension
-coextensive
-coextensively
-coextensiveness
-coextent
-cofactor
-Cofane
-cofaster
-cofather
-cofathership
-cofeature
-cofeoffee
-coferment
-cofermentation
-coff
-Coffea
-coffee
-coffeebush
-coffeecake
-coffeegrower
-coffeegrowing
-coffeehouse
-coffeeleaf
-coffeepot
-coffeeroom
-coffeetime
-coffeeweed
-coffeewood
-coffer
-cofferdam
-cofferer
-cofferfish
-coffering
-cofferlike
-cofferwork
-coffin
-coffinless
-coffinmaker
-coffinmaking
-coffle
-coffret
-cofighter
-coforeknown
-coformulator
-cofounder
-cofoundress
-cofreighter
-coft
-cofunction
-cog
-cogence
-cogency
-cogener
-cogeneric
-cogent
-cogently
-cogged
-cogger
-coggie
-cogging
-coggle
-coggledy
-cogglety
-coggly
-coghle
-cogitability
-cogitable
-cogitabund
-cogitabundity
-cogitabundly
-cogitabundous
-cogitant
-cogitantly
-cogitate
-cogitatingly
-cogitation
-cogitative
-cogitatively
-cogitativeness
-cogitativity
-cogitator
-coglorify
-coglorious
-cogman
-cognac
-cognate
-cognateness
-cognatic
-cognatical
-cognation
-cognisable
-cognisance
-cognition
-cognitional
-cognitive
-cognitively
-cognitum
-cognizability
-cognizable
-cognizableness
-cognizably
-cognizance
-cognizant
-cognize
-cognizee
-cognizer
-cognizor
-cognomen
-cognominal
-cognominate
-cognomination
-cognosce
-cognoscent
-cognoscibility
-cognoscible
-cognoscitive
-cognoscitively
-cogon
-cogonal
-cogovernment
-cogovernor
-cogracious
-cograil
-cogrediency
-cogredient
-cogroad
-Cogswellia
-coguarantor
-coguardian
-cogue
-cogway
-cogwheel
-cogwood
-cohabit
-cohabitancy
-cohabitant
-cohabitation
-coharmonious
-coharmoniously
-coharmonize
-coheartedness
-coheir
-coheiress
-coheirship
-cohelper
-cohelpership
-Cohen
-cohenite
-coherald
-cohere
-coherence
-coherency
-coherent
-coherently
-coherer
-coheretic
-coheritage
-coheritor
-cohesibility
-cohesible
-cohesion
-cohesive
-cohesively
-cohesiveness
-cohibit
-cohibition
-cohibitive
-cohibitor
-coho
-cohoba
-cohobate
-cohobation
-cohobator
-cohol
-cohort
-cohortation
-cohortative
-cohosh
-cohune
-cohusband
-coidentity
-coif
-coifed
-coiffure
-coign
-coigue
-coil
-coiled
-coiler
-coiling
-coilsmith
-coimmense
-coimplicant
-coimplicate
-coimplore
-coin
-coinable
-coinage
-coincide
-coincidence
-coincidency
-coincident
-coincidental
-coincidentally
-coincidently
-coincider
-coinclination
-coincline
-coinclude
-coincorporate
-coindicant
-coindicate
-coindication
-coindwelling
-coiner
-coinfeftment
-coinfer
-coinfinite
-coinfinity
-coinhabit
-coinhabitant
-coinhabitor
-coinhere
-coinherence
-coinherent
-coinheritance
-coinheritor
-coining
-coinitial
-coinmaker
-coinmaking
-coinmate
-coinspire
-coinstantaneity
-coinstantaneous
-coinstantaneously
-coinstantaneousness
-coinsurance
-coinsure
-cointense
-cointension
-cointensity
-cointer
-cointerest
-cointersecting
-cointise
-Cointreau
-coinventor
-coinvolve
-coiny
-coir
-coislander
-coistrel
-coistril
-coital
-coition
-coiture
-coitus
-Coix
-cojudge
-cojuror
-cojusticiar
-coke
-cokelike
-cokeman
-coker
-cokernut
-cokery
-coking
-coky
-col
-Cola
-cola
-colaborer
-Colada
-colalgia
-Colan
-colander
-colane
-colarin
-colate
-colation
-colatitude
-colatorium
-colature
-colauxe
-colback
-colberter
-colbertine
-Colbertism
-colcannon
-Colchian
-Colchicaceae
-colchicine
-Colchicum
-Colchis
-colchyte
-Colcine
-colcothar
-cold
-colder
-coldfinch
-coldhearted
-coldheartedly
-coldheartedness
-coldish
-coldly
-coldness
-coldproof
-coldslaw
-Cole
-cole
-coleader
-colecannon
-colectomy
-Coleen
-colegatee
-colegislator
-colemanite
-colemouse
-Coleochaetaceae
-coleochaetaceous
-Coleochaete
-Coleophora
-Coleophoridae
-coleopter
-Coleoptera
-coleopteral
-coleopteran
-coleopterist
-coleopteroid
-coleopterological
-coleopterology
-coleopteron
-coleopterous
-coleoptile
-coleoptilum
-coleorhiza
-Coleosporiaceae
-Coleosporium
-coleplant
-coleseed
-coleslaw
-colessee
-colessor
-coletit
-coleur
-Coleus
-colewort
-coli
-Colias
-colibacillosis
-colibacterin
-colibri
-colic
-colical
-colichemarde
-colicky
-colicolitis
-colicroot
-colicweed
-colicwort
-colicystitis
-colicystopyelitis
-coliform
-Coliidae
-Coliiformes
-colilysin
-Colima
-colima
-Colin
-colin
-colinear
-colinephritis
-coling
-Colinus
-coliplication
-colipuncture
-colipyelitis
-colipyuria
-colisepsis
-Coliseum
-coliseum
-colitic
-colitis
-colitoxemia
-coliuria
-Colius
-colk
-coll
-Colla
-collaborate
-collaboration
-collaborationism
-collaborationist
-collaborative
-collaboratively
-collaborator
-collage
-collagen
-collagenic
-collagenous
-collapse
-collapsibility
-collapsible
-collar
-collarband
-collarbird
-collarbone
-collard
-collare
-collared
-collaret
-collarino
-collarless
-collarman
-collatable
-collate
-collatee
-collateral
-collaterality
-collaterally
-collateralness
-collation
-collationer
-collatitious
-collative
-collator
-collatress
-collaud
-collaudation
-colleague
-colleagueship
-collect
-collectability
-collectable
-collectanea
-collectarium
-collected
-collectedly
-collectedness
-collectibility
-collectible
-collection
-collectional
-collectioner
-collective
-collectively
-collectiveness
-collectivism
-collectivist
-collectivistic
-collectivistically
-collectivity
-collectivization
-collectivize
-collector
-collectorate
-collectorship
-collectress
-colleen
-collegatary
-college
-colleger
-collegial
-collegialism
-collegiality
-collegian
-collegianer
-Collegiant
-collegiate
-collegiately
-collegiateness
-collegiation
-collegium
-Collembola
-collembolan
-collembole
-collembolic
-collembolous
-collenchyma
-collenchymatic
-collenchymatous
-collenchyme
-collencytal
-collencyte
-Colleri
-Colleries
-Collery
-collery
-collet
-colleter
-colleterial
-colleterium
-Colletes
-Colletia
-colletic
-Colletidae
-colletin
-Colletotrichum
-colletside
-colley
-collibert
-colliculate
-colliculus
-collide
-collidine
-collie
-collied
-collier
-colliery
-collieshangie
-colliform
-colligate
-colligation
-colligative
-colligible
-collimate
-collimation
-collimator
-Collin
-collin
-collinal
-colline
-collinear
-collinearity
-collinearly
-collineate
-collineation
-colling
-collingly
-collingual
-Collins
-collins
-Collinsia
-collinsite
-Collinsonia
-colliquate
-colliquation
-colliquative
-colliquativeness
-collision
-collisional
-collisive
-colloblast
-collobrierite
-collocal
-Collocalia
-collocate
-collocation
-collocationable
-collocative
-collocatory
-collochemistry
-collochromate
-collock
-collocution
-collocutor
-collocutory
-collodiochloride
-collodion
-collodionization
-collodionize
-collodiotype
-collodium
-collogue
-colloid
-colloidal
-colloidality
-colloidize
-colloidochemical
-Collomia
-collop
-colloped
-collophanite
-collophore
-colloque
-colloquia
-colloquial
-colloquialism
-colloquialist
-colloquiality
-colloquialize
-colloquially
-colloquialness
-colloquist
-colloquium
-colloquize
-colloquy
-collothun
-collotype
-collotypic
-collotypy
-colloxylin
-colluctation
-collude
-colluder
-collum
-collumelliaceous
-collusion
-collusive
-collusively
-collusiveness
-collutorium
-collutory
-colluvial
-colluvies
-colly
-collyba
-Collybia
-Collyridian
-collyrite
-collyrium
-collywest
-collyweston
-collywobbles
-colmar
-colobin
-colobium
-coloboma
-Colobus
-Colocasia
-colocentesis
-Colocephali
-colocephalous
-coloclysis
-colocola
-colocolic
-colocynth
-colocynthin
-colodyspepsia
-coloenteritis
-cologarithm
-Cologne
-cololite
-Colombian
-colombier
-colombin
-Colombina
-colometric
-colometrically
-colometry
-colon
-colonalgia
-colonate
-colonel
-colonelcy
-colonelship
-colongitude
-colonial
-colonialism
-colonialist
-colonialize
-colonially
-colonialness
-colonic
-colonist
-colonitis
-colonizability
-colonizable
-colonization
-colonizationist
-colonize
-colonizer
-colonnade
-colonnaded
-colonnette
-colonopathy
-colonopexy
-colonoscope
-colonoscopy
-colony
-colopexia
-colopexotomy
-colopexy
-colophane
-colophany
-colophene
-colophenic
-colophon
-colophonate
-Colophonian
-colophonic
-colophonist
-colophonite
-colophonium
-colophony
-coloplication
-coloproctitis
-coloptosis
-colopuncture
-coloquintid
-coloquintida
-color
-colorability
-colorable
-colorableness
-colorably
-Coloradan
-Colorado
-colorado
-coloradoite
-colorant
-colorate
-coloration
-colorational
-colorationally
-colorative
-coloratura
-colorature
-colorcast
-colorectitis
-colorectostomy
-colored
-colorer
-colorfast
-colorful
-colorfully
-colorfulness
-colorific
-colorifics
-colorimeter
-colorimetric
-colorimetrical
-colorimetrically
-colorimetrics
-colorimetrist
-colorimetry
-colorin
-coloring
-colorist
-coloristic
-colorization
-colorize
-colorless
-colorlessly
-colorlessness
-colormaker
-colormaking
-colorman
-colorrhaphy
-colors
-colortype
-Colorum
-colory
-coloss
-colossal
-colossality
-colossally
-colossean
-Colosseum
-colossi
-Colossian
-Colossochelys
-colossus
-Colossuswise
-colostomy
-colostral
-colostration
-colostric
-colostrous
-colostrum
-colotomy
-colotyphoid
-colove
-colp
-colpenchyma
-colpeo
-colpeurynter
-colpeurysis
-colpindach
-colpitis
-colpocele
-colpocystocele
-colpohyperplasia
-colpohysterotomy
-colpoperineoplasty
-colpoperineorrhaphy
-colpoplastic
-colpoplasty
-colpoptosis
-colporrhagia
-colporrhaphy
-colporrhea
-colporrhexis
-colport
-colportage
-colporter
-colporteur
-colposcope
-colposcopy
-colpotomy
-colpus
-Colt
-colt
-colter
-colthood
-coltish
-coltishly
-coltishness
-coltpixie
-coltpixy
-coltsfoot
-coltskin
-Coluber
-colubrid
-Colubridae
-colubriform
-Colubriformes
-Colubriformia
-Colubrina
-Colubrinae
-colubrine
-colubroid
-colugo
-Columba
-columbaceous
-Columbae
-Columban
-Columbanian
-columbarium
-columbary
-columbate
-columbeion
-Columbella
-Columbia
-columbiad
-Columbian
-columbic
-Columbid
-Columbidae
-columbier
-columbiferous
-Columbiformes
-columbin
-Columbine
-columbine
-columbite
-columbium
-columbo
-columboid
-columbotantalate
-columbotitanate
-columella
-columellar
-columellate
-Columellia
-Columelliaceae
-columelliform
-column
-columnal
-columnar
-columnarian
-columnarity
-columnated
-columned
-columner
-columniation
-columniferous
-columniform
-columning
-columnist
-columnization
-columnwise
-colunar
-colure
-Colutea
-Colville
-coly
-Colymbidae
-colymbiform
-colymbion
-Colymbriformes
-Colymbus
-colyone
-colyonic
-colytic
-colyum
-colyumist
-colza
-coma
-comacine
-comagistracy
-comagmatic
-comaker
-comal
-comamie
-Coman
-Comanche
-Comanchean
-Comandra
-comanic
-comart
-Comarum
-comate
-comatose
-comatosely
-comatoseness
-comatosity
-comatous
-comatula
-comatulid
-comb
-combaron
-combat
-combatable
-combatant
-combater
-combative
-combatively
-combativeness
-combativity
-combed
-comber
-combfish
-combflower
-combinable
-combinableness
-combinant
-combinantive
-combinate
-combination
-combinational
-combinative
-combinator
-combinatorial
-combinatory
-combine
-combined
-combinedly
-combinedness
-combinement
-combiner
-combing
-combining
-comble
-combless
-comblessness
-combmaker
-combmaking
-comboloio
-comboy
-Combretaceae
-combretaceous
-Combretum
-combure
-comburendo
-comburent
-comburgess
-comburimeter
-comburimetry
-comburivorous
-combust
-combustibility
-combustible
-combustibleness
-combustibly
-combustion
-combustive
-combustor
-combwise
-combwright
-comby
-come
-comeback
-Comecrudo
-comedial
-comedian
-comediant
-comedic
-comedical
-comedienne
-comedietta
-comedist
-comedo
-comedown
-comedy
-comelily
-comeliness
-comeling
-comely
-comendite
-comenic
-comephorous
-comer
-comes
-comestible
-comet
-cometarium
-cometary
-comether
-cometic
-cometical
-cometlike
-cometographer
-cometographical
-cometography
-cometoid
-cometology
-cometwise
-comeuppance
-comfit
-comfiture
-comfort
-comfortable
-comfortableness
-comfortably
-comforter
-comfortful
-comforting
-comfortingly
-comfortless
-comfortlessly
-comfortlessness
-comfortress
-comfortroot
-comfrey
-comfy
-Comiakin
-comic
-comical
-comicality
-comically
-comicalness
-comicocratic
-comicocynical
-comicodidactic
-comicography
-comicoprosaic
-comicotragedy
-comicotragic
-comicotragical
-comicry
-Comid
-comiferous
-Cominform
-coming
-comingle
-comino
-Comintern
-comism
-comital
-comitant
-comitatensian
-comitative
-comitatus
-comitia
-comitial
-Comitium
-comitragedy
-comity
-comma
-command
-commandable
-commandant
-commandedness
-commandeer
-commander
-commandership
-commandery
-commanding
-commandingly
-commandingness
-commandless
-commandment
-commando
-commandoman
-commandress
-commassation
-commassee
-commatic
-commation
-commatism
-commeasurable
-commeasure
-commeddle
-Commelina
-Commelinaceae
-commelinaceous
-commemorable
-commemorate
-commemoration
-commemorational
-commemorative
-commemoratively
-commemorativeness
-commemorator
-commemoratory
-commemorize
-commence
-commenceable
-commencement
-commencer
-commend
-commendable
-commendableness
-commendably
-commendador
-commendam
-commendatary
-commendation
-commendator
-commendatory
-commender
-commendingly
-commendment
-commensal
-commensalism
-commensalist
-commensalistic
-commensality
-commensally
-commensurability
-commensurable
-commensurableness
-commensurably
-commensurate
-commensurately
-commensurateness
-commensuration
-comment
-commentarial
-commentarialism
-commentary
-commentate
-commentation
-commentator
-commentatorial
-commentatorially
-commentatorship
-commenter
-commerce
-commerceless
-commercer
-commerciable
-commercial
-commercialism
-commercialist
-commercialistic
-commerciality
-commercialization
-commercialize
-commercially
-commercium
-commerge
-commie
-comminate
-commination
-comminative
-comminator
-comminatory
-commingle
-comminglement
-commingler
-comminister
-comminuate
-comminute
-comminution
-comminutor
-Commiphora
-commiserable
-commiserate
-commiseratingly
-commiseration
-commiserative
-commiseratively
-commiserator
-commissar
-commissarial
-commissariat
-commissary
-commissaryship
-commission
-commissionaire
-commissional
-commissionate
-commissioner
-commissionership
-commissionship
-commissive
-commissively
-commissural
-commissure
-commissurotomy
-commit
-commitment
-committable
-committal
-committee
-committeeism
-committeeman
-committeeship
-committeewoman
-committent
-committer
-committible
-committor
-commix
-commixt
-commixtion
-commixture
-commodatary
-commodate
-commodation
-commodatum
-commode
-commodious
-commodiously
-commodiousness
-commoditable
-commodity
-commodore
-common
-commonable
-commonage
-commonality
-commonalty
-commoner
-commonership
-commoney
-commonish
-commonition
-commonize
-commonly
-commonness
-commonplace
-commonplaceism
-commonplacely
-commonplaceness
-commonplacer
-commons
-commonsensible
-commonsensibly
-commonsensical
-commonsensically
-commonty
-commonweal
-commonwealth
-commonwealthism
-commorancy
-commorant
-commorient
-commorth
-commot
-commotion
-commotional
-commotive
-commove
-communa
-communal
-communalism
-communalist
-communalistic
-communality
-communalization
-communalize
-communalizer
-communally
-communard
-commune
-communer
-communicability
-communicable
-communicableness
-communicably
-communicant
-communicate
-communicatee
-communicating
-communication
-communicative
-communicatively
-communicativeness
-communicator
-communicatory
-communion
-communionist
-communique
-communism
-communist
-communistery
-communistic
-communistically
-communital
-communitarian
-communitary
-communitive
-communitorium
-community
-communization
-communize
-commutability
-commutable
-commutableness
-commutant
-commutate
-commutation
-commutative
-commutatively
-commutator
-commute
-commuter
-commuting
-commutual
-commutuality
-Comnenian
-comoid
-comolecule
-comortgagee
-comose
-comourn
-comourner
-comournful
-comous
-Comox
-compact
-compacted
-compactedly
-compactedness
-compacter
-compactible
-compaction
-compactly
-compactness
-compactor
-compacture
-compages
-compaginate
-compagination
-companator
-companion
-companionability
-companionable
-companionableness
-companionably
-companionage
-companionate
-companionize
-companionless
-companionship
-companionway
-company
-comparability
-comparable
-comparableness
-comparably
-comparascope
-comparate
-comparatival
-comparative
-comparatively
-comparativeness
-comparativist
-comparator
-compare
-comparer
-comparison
-comparition
-comparograph
-compart
-compartition
-compartment
-compartmental
-compartmentalization
-compartmentalize
-compartmentally
-compartmentize
-compass
-compassable
-compasser
-compasses
-compassing
-compassion
-compassionable
-compassionate
-compassionately
-compassionateness
-compassionless
-compassive
-compassivity
-compassless
-compaternity
-compatibility
-compatible
-compatibleness
-compatibly
-compatriot
-compatriotic
-compatriotism
-compear
-compearance
-compearant
-compeer
-compel
-compellable
-compellably
-compellation
-compellative
-compellent
-compeller
-compelling
-compellingly
-compend
-compendency
-compendent
-compendia
-compendiary
-compendiate
-compendious
-compendiously
-compendiousness
-compendium
-compenetrate
-compenetration
-compensable
-compensate
-compensating
-compensatingly
-compensation
-compensational
-compensative
-compensativeness
-compensator
-compensatory
-compense
-compenser
-compesce
-compete
-competence
-competency
-competent
-competently
-competentness
-competition
-competitioner
-competitive
-competitively
-competitiveness
-competitor
-competitorship
-competitory
-competitress
-competitrix
-compilation
-compilator
-compilatory
-compile
-compilement
-compiler
-compital
-Compitalia
-compitum
-complacence
-complacency
-complacent
-complacential
-complacentially
-complacently
-complain
-complainable
-complainant
-complainer
-complainingly
-complainingness
-complaint
-complaintive
-complaintiveness
-complaisance
-complaisant
-complaisantly
-complaisantness
-complanar
-complanate
-complanation
-complect
-complected
-complement
-complemental
-complementally
-complementalness
-complementariness
-complementarism
-complementary
-complementation
-complementative
-complementer
-complementoid
-complete
-completedness
-completely
-completement
-completeness
-completer
-completion
-completive
-completively
-completory
-complex
-complexedness
-complexification
-complexify
-complexion
-complexionably
-complexional
-complexionally
-complexioned
-complexionist
-complexionless
-complexity
-complexively
-complexly
-complexness
-complexus
-compliable
-compliableness
-compliably
-compliance
-compliancy
-compliant
-compliantly
-complicacy
-complicant
-complicate
-complicated
-complicatedly
-complicatedness
-complication
-complicative
-complice
-complicitous
-complicity
-complier
-compliment
-complimentable
-complimental
-complimentally
-complimentalness
-complimentarily
-complimentariness
-complimentary
-complimentation
-complimentative
-complimenter
-complimentingly
-complin
-complot
-complotter
-Complutensian
-compluvium
-comply
-compo
-compoer
-compole
-compone
-componed
-componency
-componendo
-component
-componental
-componented
-compony
-comport
-comportment
-compos
-compose
-composed
-composedly
-composedness
-composer
-composita
-Compositae
-composite
-compositely
-compositeness
-composition
-compositional
-compositionally
-compositive
-compositively
-compositor
-compositorial
-compositous
-composograph
-compossibility
-compossible
-compost
-composture
-composure
-compotation
-compotationship
-compotator
-compotatory
-compote
-compotor
-compound
-compoundable
-compoundedness
-compounder
-compounding
-compoundness
-comprachico
-comprador
-comprecation
-compreg
-compregnate
-comprehend
-comprehender
-comprehendible
-comprehendingly
-comprehense
-comprehensibility
-comprehensible
-comprehensibleness
-comprehensibly
-comprehension
-comprehensive
-comprehensively
-comprehensiveness
-comprehensor
-compresbyter
-compresbyterial
-compresence
-compresent
-compress
-compressed
-compressedly
-compressibility
-compressible
-compressibleness
-compressingly
-compression
-compressional
-compressive
-compressively
-compressometer
-compressor
-compressure
-comprest
-compriest
-comprisable
-comprisal
-comprise
-comprised
-compromise
-compromiser
-compromising
-compromisingly
-compromissary
-compromission
-compromissorial
-compromit
-compromitment
-comprovincial
-Compsilura
-Compsoa
-Compsognathus
-Compsothlypidae
-compter
-Comptometer
-Comptonia
-comptroller
-comptrollership
-compulsative
-compulsatively
-compulsatorily
-compulsatory
-compulsed
-compulsion
-compulsitor
-compulsive
-compulsively
-compulsiveness
-compulsorily
-compulsoriness
-compulsory
-compunction
-compunctionary
-compunctionless
-compunctious
-compunctiously
-compunctive
-compurgation
-compurgator
-compurgatorial
-compurgatory
-compursion
-computability
-computable
-computably
-computation
-computational
-computative
-computativeness
-compute
-computer
-computist
-computus
-comrade
-comradely
-comradery
-comradeship
-Comsomol
-comstockery
-Comtian
-Comtism
-Comtist
-comurmurer
-Comus
-con
-conacaste
-conacre
-conal
-conalbumin
-conamed
-Conant
-conarial
-conarium
-conation
-conational
-conationalistic
-conative
-conatus
-conaxial
-concamerate
-concamerated
-concameration
-concanavalin
-concaptive
-concassation
-concatenary
-concatenate
-concatenation
-concatenator
-concausal
-concause
-concavation
-concave
-concavely
-concaveness
-concaver
-concavity
-conceal
-concealable
-concealed
-concealedly
-concealedness
-concealer
-concealment
-concede
-conceded
-concededly
-conceder
-conceit
-conceited
-conceitedly
-conceitedness
-conceitless
-conceity
-conceivability
-conceivable
-conceivableness
-conceivably
-conceive
-conceiver
-concelebrate
-concelebration
-concent
-concenter
-concentive
-concentralization
-concentrate
-concentrated
-concentration
-concentrative
-concentrativeness
-concentrator
-concentric
-concentrically
-concentricity
-concentual
-concentus
-concept
-conceptacle
-conceptacular
-conceptaculum
-conception
-conceptional
-conceptionist
-conceptism
-conceptive
-conceptiveness
-conceptual
-conceptualism
-conceptualist
-conceptualistic
-conceptuality
-conceptualization
-conceptualize
-conceptually
-conceptus
-concern
-concerned
-concernedly
-concernedness
-concerning
-concerningly
-concerningness
-concernment
-concert
-concerted
-concertedly
-concertgoer
-concertina
-concertinist
-concertist
-concertize
-concertizer
-concertmaster
-concertmeister
-concertment
-concerto
-concertstuck
-concessible
-concession
-concessionaire
-concessional
-concessionary
-concessioner
-concessionist
-concessive
-concessively
-concessiveness
-concessor
-concettism
-concettist
-conch
-concha
-conchal
-conchate
-conche
-conched
-concher
-Conchifera
-conchiferous
-conchiform
-conchinine
-conchiolin
-conchitic
-conchitis
-Conchobor
-conchoid
-conchoidal
-conchoidally
-conchological
-conchologically
-conchologist
-conchologize
-conchology
-conchometer
-conchometry
-Conchostraca
-conchotome
-Conchubar
-Conchucu
-conchuela
-conchy
-conchyliated
-conchyliferous
-conchylium
-concierge
-concile
-conciliable
-conciliabule
-conciliabulum
-conciliar
-conciliate
-conciliating
-conciliatingly
-conciliation
-conciliationist
-conciliative
-conciliator
-conciliatorily
-conciliatoriness
-conciliatory
-concilium
-concinnity
-concinnous
-concionator
-concipiency
-concipient
-concise
-concisely
-conciseness
-concision
-conclamant
-conclamation
-conclave
-conclavist
-concludable
-conclude
-concluder
-concluding
-concludingly
-conclusion
-conclusional
-conclusionally
-conclusive
-conclusively
-conclusiveness
-conclusory
-concoagulate
-concoagulation
-concoct
-concocter
-concoction
-concoctive
-concoctor
-concolor
-concolorous
-concomitance
-concomitancy
-concomitant
-concomitantly
-conconscious
-Concord
-concord
-concordal
-concordance
-concordancer
-concordant
-concordantial
-concordantly
-concordat
-concordatory
-concorder
-concordial
-concordist
-concordity
-concorporate
-Concorrezanes
-concourse
-concreate
-concremation
-concrement
-concresce
-concrescence
-concrescible
-concrescive
-concrete
-concretely
-concreteness
-concreter
-concretion
-concretional
-concretionary
-concretism
-concretive
-concretively
-concretize
-concretor
-concubinage
-concubinal
-concubinarian
-concubinary
-concubinate
-concubine
-concubinehood
-concubitancy
-concubitant
-concubitous
-concubitus
-concupiscence
-concupiscent
-concupiscible
-concupiscibleness
-concupy
-concur
-concurrence
-concurrency
-concurrent
-concurrently
-concurrentness
-concurring
-concurringly
-concursion
-concurso
-concursus
-concuss
-concussant
-concussion
-concussional
-concussive
-concutient
-concyclic
-concyclically
-cond
-Condalia
-condemn
-condemnable
-condemnably
-condemnate
-condemnation
-condemnatory
-condemned
-condemner
-condemning
-condemningly
-condensability
-condensable
-condensance
-condensary
-condensate
-condensation
-condensational
-condensative
-condensator
-condense
-condensed
-condensedly
-condensedness
-condenser
-condensery
-condensity
-condescend
-condescendence
-condescendent
-condescender
-condescending
-condescendingly
-condescendingness
-condescension
-condescensive
-condescensively
-condescensiveness
-condiction
-condictious
-condiddle
-condiddlement
-condign
-condigness
-condignity
-condignly
-condiment
-condimental
-condimentary
-condisciple
-condistillation
-condite
-condition
-conditional
-conditionalism
-conditionalist
-conditionality
-conditionalize
-conditionally
-conditionate
-conditioned
-conditioner
-condivision
-condolatory
-condole
-condolement
-condolence
-condolent
-condoler
-condoling
-condolingly
-condominate
-condominium
-condonable
-condonance
-condonation
-condonative
-condone
-condonement
-condoner
-condor
-conduce
-conducer
-conducing
-conducingly
-conducive
-conduciveness
-conduct
-conductance
-conductibility
-conductible
-conductility
-conductimeter
-conductio
-conduction
-conductional
-conductitious
-conductive
-conductively
-conductivity
-conductometer
-conductometric
-conductor
-conductorial
-conductorless
-conductorship
-conductory
-conductress
-conductus
-conduit
-conduplicate
-conduplicated
-conduplication
-condurangin
-condurango
-condylar
-condylarth
-Condylarthra
-condylarthrosis
-condylarthrous
-condyle
-condylectomy
-condylion
-condyloid
-condyloma
-condylomatous
-condylome
-condylopod
-Condylopoda
-condylopodous
-condylos
-condylotomy
-Condylura
-condylure
-cone
-coned
-coneen
-coneflower
-conehead
-coneighboring
-coneine
-conelet
-conemaker
-conemaking
-Conemaugh
-conenose
-conepate
-coner
-cones
-conessine
-Conestoga
-confab
-confabular
-confabulate
-confabulation
-confabulator
-confabulatory
-confact
-confarreate
-confarreation
-confated
-confect
-confection
-confectionary
-confectioner
-confectionery
-Confed
-confederacy
-confederal
-confederalist
-confederate
-confederater
-confederatio
-confederation
-confederationist
-confederatism
-confederative
-confederatize
-confederator
-confelicity
-conferee
-conference
-conferential
-conferment
-conferrable
-conferral
-conferrer
-conferruminate
-conferted
-Conferva
-Confervaceae
-confervaceous
-conferval
-Confervales
-confervoid
-Confervoideae
-confervous
-confess
-confessable
-confessant
-confessarius
-confessary
-confessedly
-confesser
-confessing
-confessingly
-confession
-confessional
-confessionalian
-confessionalism
-confessionalist
-confessionary
-confessionist
-confessor
-confessorship
-confessory
-confidant
-confide
-confidence
-confidency
-confident
-confidential
-confidentiality
-confidentially
-confidentialness
-confidentiary
-confidently
-confidentness
-confider
-confiding
-confidingly
-confidingness
-configural
-configurate
-configuration
-configurational
-configurationally
-configurationism
-configurationist
-configurative
-configure
-confinable
-confine
-confineable
-confined
-confinedly
-confinedness
-confineless
-confinement
-confiner
-confining
-confinity
-confirm
-confirmable
-confirmand
-confirmation
-confirmative
-confirmatively
-confirmatorily
-confirmatory
-confirmed
-confirmedly
-confirmedness
-confirmee
-confirmer
-confirming
-confirmingly
-confirmity
-confirmment
-confirmor
-confiscable
-confiscatable
-confiscate
-confiscation
-confiscator
-confiscatory
-confitent
-confiteor
-confiture
-confix
-conflagrant
-conflagrate
-conflagration
-conflagrative
-conflagrator
-conflagratory
-conflate
-conflated
-conflation
-conflict
-conflicting
-conflictingly
-confliction
-conflictive
-conflictory
-conflow
-confluence
-confluent
-confluently
-conflux
-confluxibility
-confluxible
-confluxibleness
-confocal
-conform
-conformability
-conformable
-conformableness
-conformably
-conformal
-conformance
-conformant
-conformate
-conformation
-conformator
-conformer
-conformist
-conformity
-confound
-confoundable
-confounded
-confoundedly
-confoundedness
-confounder
-confounding
-confoundingly
-confrater
-confraternal
-confraternity
-confraternization
-confrere
-confriar
-confrication
-confront
-confrontal
-confrontation
-confronte
-confronter
-confrontment
-Confucian
-Confucianism
-Confucianist
-confusability
-confusable
-confusably
-confuse
-confused
-confusedly
-confusedness
-confusingly
-confusion
-confusional
-confusticate
-confustication
-confutable
-confutation
-confutative
-confutator
-confute
-confuter
-conga
-congeable
-congeal
-congealability
-congealable
-congealableness
-congealedness
-congealer
-congealment
-congee
-congelation
-congelative
-congelifraction
-congeliturbate
-congeliturbation
-congener
-congeneracy
-congeneric
-congenerical
-congenerous
-congenerousness
-congenetic
-congenial
-congeniality
-congenialize
-congenially
-congenialness
-congenital
-congenitally
-congenitalness
-conger
-congeree
-congest
-congested
-congestible
-congestion
-congestive
-congiary
-congius
-conglobate
-conglobately
-conglobation
-conglobe
-conglobulate
-conglomerate
-conglomeratic
-conglomeration
-conglutin
-conglutinant
-conglutinate
-conglutination
-conglutinative
-Congo
-Congoese
-Congolese
-Congoleum
-congou
-congratulable
-congratulant
-congratulate
-congratulation
-congratulational
-congratulator
-congratulatory
-congredient
-congreet
-congregable
-congreganist
-congregant
-congregate
-congregation
-congregational
-congregationalism
-Congregationalist
-congregationalize
-congregationally
-Congregationer
-congregationist
-congregative
-congregativeness
-congregator
-Congreso
-congress
-congresser
-congressional
-congressionalist
-congressionally
-congressionist
-congressist
-congressive
-congressman
-Congresso
-congresswoman
-Congreve
-Congridae
-congroid
-congruence
-congruency
-congruent
-congruential
-congruently
-congruism
-congruist
-congruistic
-congruity
-congruous
-congruously
-congruousness
-conhydrine
-Coniacian
-conic
-conical
-conicality
-conically
-conicalness
-coniceine
-conichalcite
-conicine
-conicity
-conicle
-conicoid
-conicopoly
-conics
-Conidae
-conidia
-conidial
-conidian
-conidiiferous
-conidioid
-conidiophore
-conidiophorous
-conidiospore
-conidium
-conifer
-Coniferae
-coniferin
-coniferophyte
-coniferous
-conification
-coniform
-Conilurus
-conima
-conimene
-conin
-conine
-Coniogramme
-Coniophora
-Coniopterygidae
-Conioselinum
-coniosis
-Coniothyrium
-coniroster
-conirostral
-Conirostres
-Conium
-conject
-conjective
-conjecturable
-conjecturably
-conjectural
-conjecturalist
-conjecturality
-conjecturally
-conjecture
-conjecturer
-conjobble
-conjoin
-conjoined
-conjoinedly
-conjoiner
-conjoint
-conjointly
-conjointment
-conjointness
-conjubilant
-conjugable
-conjugacy
-conjugal
-Conjugales
-conjugality
-conjugally
-conjugant
-conjugata
-Conjugatae
-conjugate
-conjugated
-conjugately
-conjugateness
-conjugation
-conjugational
-conjugationally
-conjugative
-conjugator
-conjugial
-conjugium
-conjunct
-conjunction
-conjunctional
-conjunctionally
-conjunctiva
-conjunctival
-conjunctive
-conjunctively
-conjunctiveness
-conjunctivitis
-conjunctly
-conjunctur
-conjunctural
-conjuncture
-conjuration
-conjurator
-conjure
-conjurement
-conjurer
-conjurership
-conjuror
-conjury
-conk
-conkanee
-conker
-conkers
-conky
-conn
-connach
-Connaraceae
-connaraceous
-connarite
-Connarus
-connascency
-connascent
-connatal
-connate
-connately
-connateness
-connation
-connatural
-connaturality
-connaturalize
-connaturally
-connaturalness
-connature
-connaught
-connect
-connectable
-connectant
-connected
-connectedly
-connectedness
-connectible
-connection
-connectional
-connectival
-connective
-connectively
-connectivity
-connector
-connellite
-conner
-connex
-connexion
-connexionalism
-connexity
-connexive
-connexivum
-connexus
-Connie
-conning
-conniption
-connivance
-connivancy
-connivant
-connivantly
-connive
-connivent
-conniver
-Connochaetes
-connoissance
-connoisseur
-connoisseurship
-connotation
-connotative
-connotatively
-connote
-connotive
-connotively
-connubial
-connubiality
-connubially
-connubiate
-connubium
-connumerate
-connumeration
-Conocarpus
-Conocephalum
-Conocephalus
-conoclinium
-conocuneus
-conodont
-conoid
-conoidal
-conoidally
-conoidic
-conoidical
-conoidically
-Conolophus
-conominee
-cononintelligent
-Conopholis
-conopid
-Conopidae
-conoplain
-conopodium
-Conopophaga
-Conopophagidae
-Conor
-Conorhinus
-conormal
-conoscope
-conourish
-Conoy
-conphaseolin
-conplane
-conquedle
-conquer
-conquerable
-conquerableness
-conqueress
-conquering
-conqueringly
-conquerment
-conqueror
-conquest
-conquian
-conquinamine
-conquinine
-conquistador
-Conrad
-conrector
-conrectorship
-conred
-Conringia
-consanguine
-consanguineal
-consanguinean
-consanguineous
-consanguineously
-consanguinity
-conscience
-conscienceless
-consciencelessly
-consciencelessness
-consciencewise
-conscient
-conscientious
-conscientiously
-conscientiousness
-conscionable
-conscionableness
-conscionably
-conscious
-consciously
-consciousness
-conscribe
-conscript
-conscription
-conscriptional
-conscriptionist
-conscriptive
-consecrate
-consecrated
-consecratedness
-consecrater
-consecration
-consecrative
-consecrator
-consecratory
-consectary
-consecute
-consecution
-consecutive
-consecutively
-consecutiveness
-consecutives
-consenescence
-consenescency
-consension
-consensual
-consensually
-consensus
-consent
-consentable
-consentaneity
-consentaneous
-consentaneously
-consentaneousness
-consentant
-consenter
-consentful
-consentfully
-consentience
-consentient
-consentiently
-consenting
-consentingly
-consentingness
-consentive
-consentively
-consentment
-consequence
-consequency
-consequent
-consequential
-consequentiality
-consequentially
-consequentialness
-consequently
-consertal
-conservable
-conservacy
-conservancy
-conservant
-conservate
-conservation
-conservational
-conservationist
-conservatism
-conservatist
-conservative
-conservatively
-conservativeness
-conservatize
-conservatoire
-conservator
-conservatorio
-conservatorium
-conservatorship
-conservatory
-conservatrix
-conserve
-conserver
-consider
-considerability
-considerable
-considerableness
-considerably
-considerance
-considerate
-considerately
-considerateness
-consideration
-considerative
-consideratively
-considerativeness
-considerator
-considered
-considerer
-considering
-consideringly
-consign
-consignable
-consignatary
-consignation
-consignatory
-consignee
-consigneeship
-consigner
-consignificant
-consignificate
-consignification
-consignificative
-consignificator
-consignify
-consignment
-consignor
-consiliary
-consilience
-consilient
-consimilar
-consimilarity
-consimilate
-consist
-consistence
-consistency
-consistent
-consistently
-consistorial
-consistorian
-consistory
-consociate
-consociation
-consociational
-consociationism
-consociative
-consocies
-consol
-consolable
-consolableness
-consolably
-Consolamentum
-consolation
-Consolato
-consolatorily
-consolatoriness
-consolatory
-consolatrix
-console
-consolement
-consoler
-consolidant
-consolidate
-consolidated
-consolidation
-consolidationist
-consolidative
-consolidator
-consoling
-consolingly
-consolute
-consomme
-consonance
-consonancy
-consonant
-consonantal
-consonantic
-consonantism
-consonantize
-consonantly
-consonantness
-consonate
-consonous
-consort
-consortable
-consorter
-consortial
-consortion
-consortism
-consortium
-consortship
-consound
-conspecies
-conspecific
-conspectus
-consperse
-conspersion
-conspicuity
-conspicuous
-conspicuously
-conspicuousness
-conspiracy
-conspirant
-conspiration
-conspirative
-conspirator
-conspiratorial
-conspiratorially
-conspiratory
-conspiratress
-conspire
-conspirer
-conspiring
-conspiringly
-conspue
-constable
-constablery
-constableship
-constabless
-constablewick
-constabular
-constabulary
-Constance
-constancy
-constant
-constantan
-Constantine
-Constantinian
-Constantinopolitan
-constantly
-constantness
-constat
-constatation
-constate
-constatory
-constellate
-constellation
-constellatory
-consternate
-consternation
-constipate
-constipation
-constituency
-constituent
-constituently
-constitute
-constituter
-constitution
-constitutional
-constitutionalism
-constitutionalist
-constitutionality
-constitutionalization
-constitutionalize
-constitutionally
-constitutionary
-constitutioner
-constitutionist
-constitutive
-constitutively
-constitutiveness
-constitutor
-constrain
-constrainable
-constrained
-constrainedly
-constrainedness
-constrainer
-constraining
-constrainingly
-constrainment
-constraint
-constrict
-constricted
-constriction
-constrictive
-constrictor
-constringe
-constringency
-constringent
-construability
-construable
-construct
-constructer
-constructible
-construction
-constructional
-constructionally
-constructionism
-constructionist
-constructive
-constructively
-constructiveness
-constructivism
-constructivist
-constructor
-constructorship
-constructure
-construe
-construer
-constuprate
-constupration
-consubsist
-consubsistency
-consubstantial
-consubstantialism
-consubstantialist
-consubstantiality
-consubstantially
-consubstantiate
-consubstantiation
-consubstantiationist
-consubstantive
-consuete
-consuetitude
-consuetude
-consuetudinal
-consuetudinary
-consul
-consulage
-consular
-consularity
-consulary
-consulate
-consulship
-consult
-consultable
-consultant
-consultary
-consultation
-consultative
-consultatory
-consultee
-consulter
-consulting
-consultive
-consultively
-consultor
-consultory
-consumable
-consume
-consumedly
-consumeless
-consumer
-consuming
-consumingly
-consumingness
-consummate
-consummately
-consummation
-consummative
-consummatively
-consummativeness
-consummator
-consummatory
-consumpt
-consumpted
-consumptible
-consumption
-consumptional
-consumptive
-consumptively
-consumptiveness
-consumptivity
-consute
-contabescence
-contabescent
-contact
-contactor
-contactual
-contactually
-contagion
-contagioned
-contagionist
-contagiosity
-contagious
-contagiously
-contagiousness
-contagium
-contain
-containable
-container
-containment
-contakion
-contaminable
-contaminant
-contaminate
-contamination
-contaminative
-contaminator
-contaminous
-contangential
-contango
-conte
-contect
-contection
-contemn
-contemner
-contemnible
-contemnibly
-contemning
-contemningly
-contemnor
-contemper
-contemperate
-contemperature
-contemplable
-contemplamen
-contemplant
-contemplate
-contemplatingly
-contemplation
-contemplatist
-contemplative
-contemplatively
-contemplativeness
-contemplator
-contemplature
-contemporanean
-contemporaneity
-contemporaneous
-contemporaneously
-contemporaneousness
-contemporarily
-contemporariness
-contemporary
-contemporize
-contempt
-contemptful
-contemptibility
-contemptible
-contemptibleness
-contemptibly
-contemptuous
-contemptuously
-contemptuousness
-contendent
-contender
-contending
-contendingly
-contendress
-content
-contentable
-contented
-contentedly
-contentedness
-contentful
-contention
-contentional
-contentious
-contentiously
-contentiousness
-contentless
-contently
-contentment
-contentness
-contents
-conter
-conterminal
-conterminant
-contermine
-conterminous
-conterminously
-conterminousness
-contest
-contestable
-contestableness
-contestably
-contestant
-contestation
-contestee
-contester
-contestingly
-contestless
-context
-contextive
-contextual
-contextually
-contextural
-contexture
-contextured
-conticent
-contignation
-contiguity
-contiguous
-contiguously
-contiguousness
-continence
-continency
-continent
-continental
-Continentaler
-continentalism
-continentalist
-continentality
-Continentalize
-continentally
-continently
-contingence
-contingency
-contingent
-contingential
-contingentialness
-contingently
-contingentness
-continuable
-continual
-continuality
-continually
-continualness
-continuance
-continuancy
-continuando
-continuant
-continuantly
-continuate
-continuately
-continuateness
-continuation
-continuative
-continuatively
-continuativeness
-continuator
-continue
-continued
-continuedly
-continuedness
-continuer
-continuingly
-continuist
-continuity
-continuous
-continuously
-continuousness
-continuum
-contise
-contline
-conto
-contorniate
-contorsive
-contort
-Contortae
-contorted
-contortedly
-contortedness
-contortion
-contortional
-contortionate
-contortioned
-contortionist
-contortionistic
-contortive
-contour
-contourne
-contra
-contraband
-contrabandage
-contrabandery
-contrabandism
-contrabandist
-contrabandista
-contrabass
-contrabassist
-contrabasso
-contracapitalist
-contraception
-contraceptionist
-contraceptive
-contracivil
-contraclockwise
-contract
-contractable
-contractant
-contractation
-contracted
-contractedly
-contractedness
-contractee
-contracter
-contractibility
-contractible
-contractibleness
-contractibly
-contractile
-contractility
-contraction
-contractional
-contractionist
-contractive
-contractively
-contractiveness
-contractor
-contractual
-contractually
-contracture
-contractured
-contradebt
-contradict
-contradictable
-contradictedness
-contradicter
-contradiction
-contradictional
-contradictious
-contradictiously
-contradictiousness
-contradictive
-contradictively
-contradictiveness
-contradictor
-contradictorily
-contradictoriness
-contradictory
-contradiscriminate
-contradistinct
-contradistinction
-contradistinctive
-contradistinctively
-contradistinctly
-contradistinguish
-contradivide
-contrafacture
-contrafagotto
-contrafissura
-contraflexure
-contraflow
-contrafocal
-contragredience
-contragredient
-contrahent
-contrail
-contraindicate
-contraindication
-contraindicative
-contralateral
-contralto
-contramarque
-contranatural
-contrantiscion
-contraoctave
-contraparallelogram
-contraplex
-contrapolarization
-contrapone
-contraponend
-Contraposaune
-contrapose
-contraposit
-contraposita
-contraposition
-contrapositive
-contraprogressist
-contraprop
-contraproposal
-contraption
-contraptious
-contrapuntal
-contrapuntalist
-contrapuntally
-contrapuntist
-contrapunto
-contrarational
-contraregular
-contraregularity
-contraremonstrance
-contraremonstrant
-contrarevolutionary
-contrariant
-contrariantly
-contrariety
-contrarily
-contrariness
-contrarious
-contrariously
-contrariousness
-contrariwise
-contrarotation
-contrary
-contrascriptural
-contrast
-contrastable
-contrastably
-contrastedly
-contrastimulant
-contrastimulation
-contrastimulus
-contrastingly
-contrastive
-contrastively
-contrastment
-contrasty
-contrasuggestible
-contratabular
-contrate
-contratempo
-contratenor
-contravalence
-contravallation
-contravariant
-contravene
-contravener
-contravention
-contraversion
-contravindicate
-contravindication
-contrawise
-contrayerva
-contrectation
-contreface
-contrefort
-contretemps
-contributable
-contribute
-contribution
-contributional
-contributive
-contributively
-contributiveness
-contributor
-contributorial
-contributorship
-contributory
-contrite
-contritely
-contriteness
-contrition
-contriturate
-contrivance
-contrivancy
-contrive
-contrivement
-contriver
-control
-controllability
-controllable
-controllableness
-controllably
-controller
-controllership
-controlless
-controllingly
-controlment
-controversial
-controversialism
-controversialist
-controversialize
-controversially
-controversion
-controversional
-controversionalism
-controversionalist
-controversy
-controvert
-controverter
-controvertible
-controvertibly
-controvertist
-contubernal
-contubernial
-contubernium
-contumacious
-contumaciously
-contumaciousness
-contumacity
-contumacy
-contumelious
-contumeliously
-contumeliousness
-contumely
-contund
-conturbation
-contuse
-contusion
-contusioned
-contusive
-conubium
-Conularia
-conumerary
-conumerous
-conundrum
-conundrumize
-conurbation
-conure
-Conuropsis
-Conurus
-conus
-conusable
-conusance
-conusant
-conusee
-conusor
-conutrition
-conuzee
-conuzor
-convalesce
-convalescence
-convalescency
-convalescent
-convalescently
-convallamarin
-Convallaria
-Convallariaceae
-convallariaceous
-convallarin
-convect
-convection
-convectional
-convective
-convectively
-convector
-convenable
-convenably
-convene
-convenee
-convener
-convenership
-convenience
-conveniency
-convenient
-conveniently
-convenientness
-convent
-conventical
-conventically
-conventicle
-conventicler
-conventicular
-convention
-conventional
-conventionalism
-conventionalist
-conventionality
-conventionalization
-conventionalize
-conventionally
-conventionary
-conventioner
-conventionism
-conventionist
-conventionize
-conventual
-conventually
-converge
-convergement
-convergence
-convergency
-convergent
-convergescence
-converging
-conversable
-conversableness
-conversably
-conversance
-conversancy
-conversant
-conversantly
-conversation
-conversationable
-conversational
-conversationalist
-conversationally
-conversationism
-conversationist
-conversationize
-conversative
-converse
-conversely
-converser
-conversibility
-conversible
-conversion
-conversional
-conversionism
-conversionist
-conversive
-convert
-converted
-convertend
-converter
-convertibility
-convertible
-convertibleness
-convertibly
-converting
-convertingness
-convertise
-convertism
-convertite
-convertive
-convertor
-conveth
-convex
-convexed
-convexedly
-convexedness
-convexity
-convexly
-convexness
-convey
-conveyable
-conveyal
-conveyance
-conveyancer
-conveyancing
-conveyer
-convict
-convictable
-conviction
-convictional
-convictism
-convictive
-convictively
-convictiveness
-convictment
-convictor
-convince
-convinced
-convincedly
-convincedness
-convincement
-convincer
-convincibility
-convincible
-convincing
-convincingly
-convincingness
-convival
-convive
-convivial
-convivialist
-conviviality
-convivialize
-convivially
-convocant
-convocate
-convocation
-convocational
-convocationally
-convocationist
-convocative
-convocator
-convoke
-convoker
-Convoluta
-convolute
-convoluted
-convolutely
-convolution
-convolutional
-convolutionary
-convolutive
-convolve
-convolvement
-Convolvulaceae
-convolvulaceous
-convolvulad
-convolvuli
-convolvulic
-convolvulin
-convolvulinic
-convolvulinolic
-Convolvulus
-convoy
-convulsant
-convulse
-convulsedly
-convulsibility
-convulsible
-convulsion
-convulsional
-convulsionary
-convulsionism
-convulsionist
-convulsive
-convulsively
-convulsiveness
-cony
-conycatcher
-conyrine
-coo
-cooba
-coodle
-cooee
-cooer
-coof
-Coohee
-cooing
-cooingly
-cooja
-cook
-cookable
-cookbook
-cookdom
-cookee
-cookeite
-cooker
-cookery
-cookhouse
-cooking
-cookish
-cookishly
-cookless
-cookmaid
-cookout
-cookroom
-cookshack
-cookshop
-cookstove
-cooky
-cool
-coolant
-coolen
-cooler
-coolerman
-coolheaded
-coolheadedly
-coolheadedness
-coolhouse
-coolibah
-coolie
-cooling
-coolingly
-coolingness
-coolish
-coolly
-coolness
-coolth
-coolung
-coolweed
-coolwort
-cooly
-coom
-coomb
-coomy
-coon
-cooncan
-coonily
-cooniness
-coonroot
-coonskin
-coontail
-coontie
-coony
-coop
-cooper
-cooperage
-Cooperia
-coopering
-coopery
-cooree
-Coorg
-coorie
-cooruptibly
-Coos
-cooser
-coost
-Coosuc
-coot
-cooter
-cootfoot
-coothay
-cootie
-cop
-copa
-copable
-copacetic
-copaene
-copaiba
-copaibic
-Copaifera
-Copaiva
-copaivic
-copaiye
-copal
-copalche
-copalcocote
-copaliferous
-copalite
-copalm
-coparallel
-coparcenary
-coparcener
-coparceny
-coparent
-copart
-copartaker
-copartner
-copartnership
-copartnery
-coparty
-copassionate
-copastor
-copastorate
-copatain
-copatentee
-copatriot
-copatron
-copatroness
-cope
-Copehan
-copei
-Copelata
-Copelatae
-copelate
-copellidine
-copeman
-copemate
-copen
-copending
-copenetrate
-Copeognatha
-copepod
-Copepoda
-copepodan
-copepodous
-coper
-coperception
-coperiodic
-Copernican
-Copernicanism
-Copernicia
-coperta
-copesman
-copesmate
-copestone
-copetitioner
-cophasal
-Cophetua
-cophosis
-copiability
-copiable
-copiapite
-copied
-copier
-copilot
-coping
-copiopia
-copiopsia
-copiosity
-copious
-copiously
-copiousness
-copis
-copist
-copita
-coplaintiff
-coplanar
-coplanarity
-copleased
-coplotter
-coploughing
-coplowing
-copolar
-copolymer
-copolymerization
-copolymerize
-coppaelite
-copped
-copper
-copperas
-copperbottom
-copperer
-copperhead
-copperheadism
-coppering
-copperish
-copperization
-copperize
-copperleaf
-coppernose
-coppernosed
-copperplate
-copperproof
-coppersidesman
-copperskin
-coppersmith
-coppersmithing
-copperware
-copperwing
-copperworks
-coppery
-copperytailed
-coppet
-coppice
-coppiced
-coppicing
-coppin
-copping
-copple
-copplecrown
-coppled
-coppy
-copr
-copra
-coprecipitate
-coprecipitation
-copremia
-copremic
-copresbyter
-copresence
-copresent
-Coprides
-Coprinae
-coprincipal
-coprincipate
-Coprinus
-coprisoner
-coprodaeum
-coproduce
-coproducer
-coprojector
-coprolagnia
-coprolagnist
-coprolalia
-coprolaliac
-coprolite
-coprolith
-coprolitic
-coprology
-copromisor
-copromoter
-coprophagan
-coprophagia
-coprophagist
-coprophagous
-coprophagy
-coprophilia
-coprophiliac
-coprophilic
-coprophilism
-coprophilous
-coprophyte
-coproprietor
-coproprietorship
-coprose
-Coprosma
-coprostasis
-coprosterol
-coprozoic
-copse
-copsewood
-copsewooded
-copsing
-copsy
-Copt
-copter
-Coptic
-Coptis
-copula
-copulable
-copular
-copularium
-copulate
-copulation
-copulative
-copulatively
-copulatory
-copunctal
-copurchaser
-copus
-copy
-copybook
-copycat
-copygraph
-copygraphed
-copyhold
-copyholder
-copyholding
-copyism
-copyist
-copyman
-copyreader
-copyright
-copyrightable
-copyrighter
-copywise
-coque
-coquecigrue
-coquelicot
-coqueluche
-coquet
-coquetoon
-coquetry
-coquette
-coquettish
-coquettishly
-coquettishness
-coquicken
-coquilla
-Coquille
-coquille
-coquimbite
-coquina
-coquita
-Coquitlam
-coquito
-cor
-Cora
-cora
-Corabeca
-Corabecan
-corach
-Coraciae
-coracial
-Coracias
-Coracii
-Coraciidae
-coraciiform
-Coraciiformes
-coracine
-coracle
-coracler
-coracoacromial
-coracobrachial
-coracobrachialis
-coracoclavicular
-coracocostal
-coracohumeral
-coracohyoid
-coracoid
-coracoidal
-coracomandibular
-coracomorph
-Coracomorphae
-coracomorphic
-coracopectoral
-coracoprocoracoid
-coracoradialis
-coracoscapular
-coracovertebral
-coradical
-coradicate
-corah
-coraise
-coral
-coralberry
-coralbush
-coraled
-coralflower
-coralist
-corallet
-Corallian
-corallic
-Corallidae
-corallidomous
-coralliferous
-coralliform
-Coralligena
-coralligenous
-coralligerous
-corallike
-Corallina
-Corallinaceae
-corallinaceous
-coralline
-corallite
-Corallium
-coralloid
-coralloidal
-Corallorhiza
-corallum
-Corallus
-coralroot
-coralwort
-coram
-Corambis
-coranto
-corban
-corbeau
-corbeil
-corbel
-corbeling
-corbicula
-corbiculate
-corbiculum
-corbie
-corbiestep
-corbovinum
-corbula
-corcass
-Corchorus
-corcir
-corcopali
-Corcyraean
-cord
-cordage
-Cordaitaceae
-cordaitaceous
-cordaitalean
-Cordaitales
-cordaitean
-Cordaites
-cordant
-cordate
-cordately
-cordax
-Cordeau
-corded
-cordel
-Cordelia
-Cordelier
-cordeliere
-cordelle
-corder
-Cordery
-cordewane
-Cordia
-cordial
-cordiality
-cordialize
-cordially
-cordialness
-cordiceps
-cordicole
-cordierite
-cordies
-cordiform
-cordigeri
-cordillera
-cordilleran
-cordiner
-cording
-cordite
-corditis
-cordleaf
-cordmaker
-cordoba
-cordon
-cordonnet
-Cordovan
-Cordula
-corduroy
-corduroyed
-cordwain
-cordwainer
-cordwainery
-cordwood
-cordy
-Cordyceps
-cordyl
-Cordylanthus
-Cordyline
-core
-corebel
-coreceiver
-coreciprocal
-corectome
-corectomy
-corector
-cored
-coredeem
-coredeemer
-coredemptress
-coreductase
-Coree
-coreflexed
-coregence
-coregency
-coregent
-coregnancy
-coregnant
-coregonid
-Coregonidae
-coregonine
-coregonoid
-Coregonus
-coreid
-Coreidae
-coreign
-coreigner
-corejoice
-coreless
-coreligionist
-corella
-corelysis
-Corema
-coremaker
-coremaking
-coremium
-coremorphosis
-corenounce
-coreometer
-Coreopsis
-coreplastic
-coreplasty
-corer
-coresidence
-coresidual
-coresign
-coresonant
-coresort
-corespect
-corespondency
-corespondent
-coretomy
-coreveler
-coreveller
-corevolve
-Corey
-corf
-Corfiote
-Corflambo
-corge
-corgi
-coriaceous
-corial
-coriamyrtin
-coriander
-coriandrol
-Coriandrum
-Coriaria
-Coriariaceae
-coriariaceous
-coriin
-Corimelaena
-Corimelaenidae
-Corin
-corindon
-Corineus
-coring
-Corinna
-corinne
-Corinth
-Corinthian
-Corinthianesque
-Corinthianism
-Corinthianize
-Coriolanus
-coriparian
-corium
-Corixa
-Corixidae
-cork
-corkage
-corkboard
-corke
-corked
-corker
-corkiness
-corking
-corkish
-corkite
-corkmaker
-corkmaking
-corkscrew
-corkscrewy
-corkwing
-corkwood
-corky
-corm
-Cormac
-cormel
-cormidium
-cormoid
-Cormophyta
-cormophyte
-cormophytic
-cormorant
-cormous
-cormus
-corn
-Cornaceae
-cornaceous
-cornage
-cornbell
-cornberry
-cornbin
-cornbinks
-cornbird
-cornbole
-cornbottle
-cornbrash
-corncake
-corncob
-corncracker
-corncrib
-corncrusher
-corndodger
-cornea
-corneagen
-corneal
-cornein
-corneitis
-cornel
-Cornelia
-cornelian
-Cornelius
-cornemuse
-corneocalcareous
-corneosclerotic
-corneosiliceous
-corneous
-corner
-cornerbind
-cornered
-cornerer
-cornerpiece
-cornerstone
-cornerways
-cornerwise
-cornet
-cornetcy
-cornettino
-cornettist
-corneule
-corneum
-cornfield
-cornfloor
-cornflower
-corngrower
-cornhouse
-cornhusk
-cornhusker
-cornhusking
-cornic
-cornice
-cornicle
-corniculate
-corniculer
-corniculum
-Corniferous
-cornific
-cornification
-cornified
-corniform
-cornigerous
-cornin
-corning
-corniplume
-Cornish
-Cornishman
-cornland
-cornless
-cornloft
-cornmaster
-cornmonger
-cornopean
-cornpipe
-cornrick
-cornroot
-cornstalk
-cornstarch
-cornstook
-cornu
-cornual
-cornuate
-cornuated
-cornubianite
-cornucopia
-Cornucopiae
-cornucopian
-cornucopiate
-cornule
-cornulite
-Cornulites
-cornupete
-Cornus
-cornute
-cornuted
-cornutine
-cornuto
-cornwallis
-cornwallite
-corny
-coroa
-Coroado
-corocleisis
-corodiary
-corodiastasis
-corodiastole
-corody
-corol
-corolla
-corollaceous
-corollarial
-corollarially
-corollary
-corollate
-corollated
-corolliferous
-corolliform
-corollike
-corolline
-corollitic
-corometer
-corona
-coronach
-coronad
-coronadite
-coronae
-coronagraph
-coronagraphic
-coronal
-coronale
-coronaled
-coronally
-coronamen
-coronary
-coronate
-coronated
-coronation
-coronatorial
-coroner
-coronership
-coronet
-coroneted
-coronetted
-coronetty
-coroniform
-Coronilla
-coronillin
-coronion
-coronitis
-coronium
-coronize
-coronobasilar
-coronofacial
-coronofrontal
-coronoid
-Coronopus
-coronule
-coroparelcysis
-coroplast
-coroplasta
-coroplastic
-Coropo
-coroscopy
-corotomy
-corozo
-corp
-corpora
-corporal
-corporalism
-corporality
-corporally
-corporalship
-corporas
-corporate
-corporately
-corporateness
-corporation
-corporational
-corporationer
-corporationism
-corporative
-corporator
-corporature
-corporeal
-corporealist
-corporeality
-corporealization
-corporealize
-corporeally
-corporealness
-corporeals
-corporeity
-corporeous
-corporification
-corporify
-corporosity
-corposant
-corps
-corpsbruder
-corpse
-corpsman
-corpulence
-corpulency
-corpulent
-corpulently
-corpulentness
-corpus
-corpuscle
-corpuscular
-corpuscularian
-corpuscularity
-corpusculated
-corpuscule
-corpusculous
-corpusculum
-corrade
-corradial
-corradiate
-corradiation
-corral
-corrasion
-corrasive
-Correa
-correal
-correality
-correct
-correctable
-correctant
-corrected
-correctedness
-correctible
-correcting
-correctingly
-correction
-correctional
-correctionalist
-correctioner
-correctitude
-corrective
-correctively
-correctiveness
-correctly
-correctness
-corrector
-correctorship
-correctress
-correctrice
-corregidor
-correlatable
-correlate
-correlated
-correlation
-correlational
-correlative
-correlatively
-correlativeness
-correlativism
-correlativity
-correligionist
-corrente
-correption
-corresol
-correspond
-correspondence
-correspondency
-correspondent
-correspondential
-correspondentially
-correspondently
-correspondentship
-corresponder
-corresponding
-correspondingly
-corresponsion
-corresponsive
-corresponsively
-corridor
-corridored
-corrie
-Corriedale
-corrige
-corrigenda
-corrigendum
-corrigent
-corrigibility
-corrigible
-corrigibleness
-corrigibly
-Corrigiola
-Corrigiolaceae
-corrival
-corrivality
-corrivalry
-corrivalship
-corrivate
-corrivation
-corrobboree
-corroborant
-corroborate
-corroboration
-corroborative
-corroboratively
-corroborator
-corroboratorily
-corroboratory
-corroboree
-corrode
-corrodent
-Corrodentia
-corroder
-corrodiary
-corrodibility
-corrodible
-corrodier
-corroding
-corrosibility
-corrosible
-corrosibleness
-corrosion
-corrosional
-corrosive
-corrosively
-corrosiveness
-corrosivity
-corrugate
-corrugated
-corrugation
-corrugator
-corrupt
-corrupted
-corruptedly
-corruptedness
-corrupter
-corruptful
-corruptibility
-corruptible
-corruptibleness
-corrupting
-corruptingly
-corruption
-corruptionist
-corruptive
-corruptively
-corruptly
-corruptness
-corruptor
-corruptress
-corsac
-corsage
-corsaint
-corsair
-corse
-corselet
-corsepresent
-corsesque
-corset
-corseting
-corsetless
-corsetry
-Corsican
-corsie
-corsite
-corta
-Cortaderia
-cortege
-Cortes
-cortex
-cortez
-cortical
-cortically
-corticate
-corticated
-corticating
-cortication
-cortices
-corticiferous
-corticiform
-corticifugal
-corticifugally
-corticipetal
-corticipetally
-Corticium
-corticoafferent
-corticoefferent
-corticoline
-corticopeduncular
-corticose
-corticospinal
-corticosterone
-corticostriate
-corticous
-cortin
-cortina
-cortinarious
-Cortinarius
-cortinate
-cortisone
-cortlandtite
-Corton
-coruco
-coruler
-Coruminacan
-corundophilite
-corundum
-corupay
-coruscant
-coruscate
-coruscation
-corver
-corvette
-corvetto
-Corvidae
-corviform
-corvillosum
-corvina
-Corvinae
-corvine
-corvoid
-Corvus
-Cory
-Corybant
-Corybantian
-corybantiasm
-Corybantic
-corybantic
-Corybantine
-corybantish
-corybulbin
-corybulbine
-corycavamine
-corycavidin
-corycavidine
-corycavine
-Corycia
-Corycian
-corydalin
-corydaline
-Corydalis
-corydine
-Corydon
-coryl
-Corylaceae
-corylaceous
-corylin
-Corylopsis
-Corylus
-corymb
-corymbed
-corymbiate
-corymbiated
-corymbiferous
-corymbiform
-corymbose
-corymbous
-corynebacterial
-Corynebacterium
-Coryneum
-corynine
-Corynocarpaceae
-corynocarpaceous
-Corynocarpus
-Corypha
-Coryphaena
-coryphaenid
-Coryphaenidae
-coryphaenoid
-Coryphaenoididae
-coryphaeus
-coryphee
-coryphene
-Coryphodon
-coryphodont
-coryphylly
-corytuberine
-coryza
-cos
-cosalite
-cosaque
-cosavior
-coscet
-Coscinodiscaceae
-Coscinodiscus
-coscinomancy
-coscoroba
-coseasonal
-coseat
-cosec
-cosecant
-cosech
-cosectarian
-cosectional
-cosegment
-coseism
-coseismal
-coseismic
-cosenator
-cosentiency
-cosentient
-coservant
-cosession
-coset
-cosettler
-cosh
-cosharer
-cosheath
-cosher
-cosherer
-coshering
-coshery
-cosignatory
-cosigner
-cosignitary
-cosily
-cosinage
-cosine
-cosiness
-cosingular
-cosinusoid
-Cosmati
-cosmecology
-cosmesis
-cosmetic
-cosmetical
-cosmetically
-cosmetician
-cosmetiste
-cosmetological
-cosmetologist
-cosmetology
-cosmic
-cosmical
-cosmicality
-cosmically
-cosmism
-cosmist
-cosmocracy
-cosmocrat
-cosmocratic
-cosmogenesis
-cosmogenetic
-cosmogenic
-cosmogeny
-cosmogonal
-cosmogoner
-cosmogonic
-cosmogonical
-cosmogonist
-cosmogonize
-cosmogony
-cosmographer
-cosmographic
-cosmographical
-cosmographically
-cosmographist
-cosmography
-cosmolabe
-cosmolatry
-cosmologic
-cosmological
-cosmologically
-cosmologist
-cosmology
-cosmometry
-cosmopathic
-cosmoplastic
-cosmopoietic
-cosmopolicy
-cosmopolis
-cosmopolitan
-cosmopolitanism
-cosmopolitanization
-cosmopolitanize
-cosmopolitanly
-cosmopolite
-cosmopolitic
-cosmopolitical
-cosmopolitics
-cosmopolitism
-cosmorama
-cosmoramic
-cosmorganic
-cosmos
-cosmoscope
-cosmosophy
-cosmosphere
-cosmotellurian
-cosmotheism
-cosmotheist
-cosmotheistic
-cosmothetic
-cosmotron
-cosmozoan
-cosmozoic
-cosmozoism
-cosonant
-cosounding
-cosovereign
-cosovereignty
-cospecies
-cospecific
-cosphered
-cosplendor
-cosplendour
-coss
-Cossack
-Cossaean
-cossas
-cosse
-cosset
-cossette
-cossid
-Cossidae
-cossnent
-cossyrite
-cost
-costa
-Costaea
-costal
-costalgia
-costally
-costander
-Costanoan
-costar
-costard
-Costata
-costate
-costated
-costean
-costeaning
-costectomy
-costellate
-coster
-costerdom
-costermonger
-costicartilage
-costicartilaginous
-costicervical
-costiferous
-costiform
-costing
-costipulator
-costispinal
-costive
-costively
-costiveness
-costless
-costlessness
-costliness
-costly
-costmary
-costoabdominal
-costoapical
-costocentral
-costochondral
-costoclavicular
-costocolic
-costocoracoid
-costodiaphragmatic
-costogenic
-costoinferior
-costophrenic
-costopleural
-costopneumopexy
-costopulmonary
-costoscapular
-costosternal
-costosuperior
-costothoracic
-costotome
-costotomy
-costotrachelian
-costotransversal
-costotransverse
-costovertebral
-costoxiphoid
-costraight
-costrel
-costula
-costulation
-costume
-costumer
-costumery
-costumic
-costumier
-costumiere
-costuming
-costumist
-costusroot
-cosubject
-cosubordinate
-cosuffer
-cosufferer
-cosuggestion
-cosuitor
-cosurety
-cosustain
-coswearer
-cosy
-cosymmedian
-cot
-cotangent
-cotangential
-cotarius
-cotarnine
-cotch
-cote
-coteful
-coteline
-coteller
-cotemporane
-cotemporanean
-cotemporaneous
-cotemporaneously
-cotemporary
-cotenancy
-cotenant
-cotenure
-coterell
-coterie
-coterminous
-Cotesian
-coth
-cothamore
-cothe
-cotheorist
-cothish
-cothon
-cothurn
-cothurnal
-cothurnate
-cothurned
-cothurnian
-cothurnus
-cothy
-cotidal
-cotillage
-cotillion
-Cotinga
-cotingid
-Cotingidae
-cotingoid
-Cotinus
-cotise
-cotitular
-cotland
-cotman
-coto
-cotoin
-Cotonam
-Cotoneaster
-cotonier
-cotorment
-cotoro
-cotorture
-Cotoxo
-cotquean
-cotraitor
-cotransfuse
-cotranslator
-cotranspire
-cotransubstantiate
-cotrine
-cotripper
-cotrustee
-cotset
-cotsetla
-cotsetle
-cotta
-cottabus
-cottage
-cottaged
-cottager
-cottagers
-cottagey
-cotte
-cotted
-cotter
-cotterel
-cotterite
-cotterway
-cottid
-Cottidae
-cottier
-cottierism
-cottiform
-cottoid
-cotton
-cottonade
-cottonbush
-cottonee
-cottoneer
-cottoner
-Cottonian
-cottonization
-cottonize
-cottonless
-cottonmouth
-cottonocracy
-Cottonopolis
-cottonseed
-cottontail
-cottontop
-cottonweed
-cottonwood
-cottony
-Cottus
-cotty
-cotuit
-cotula
-cotunnite
-Coturnix
-cotutor
-cotwin
-cotwinned
-cotwist
-cotyla
-cotylar
-cotyledon
-cotyledonal
-cotyledonar
-cotyledonary
-cotyledonous
-cotyliform
-cotyligerous
-cotyliscus
-cotyloid
-Cotylophora
-cotylophorous
-cotylopubic
-cotylosacral
-cotylosaur
-Cotylosauria
-cotylosaurian
-cotype
-Cotys
-Cotyttia
-couac
-coucal
-couch
-couchancy
-couchant
-couched
-couchee
-coucher
-couching
-couchmaker
-couchmaking
-couchmate
-couchy
-coude
-coudee
-coue
-Coueism
-cougar
-cough
-cougher
-coughroot
-coughweed
-coughwort
-cougnar
-coul
-could
-couldron
-coulee
-coulisse
-coulomb
-coulometer
-coulterneb
-coulure
-couma
-coumalic
-coumalin
-coumara
-coumaran
-coumarate
-coumaric
-coumarilic
-coumarin
-coumarinic
-coumarone
-coumarou
-Coumarouna
-council
-councilist
-councilman
-councilmanic
-councilor
-councilorship
-councilwoman
-counderstand
-counite
-couniversal
-counsel
-counselable
-counselee
-counselful
-counselor
-counselorship
-count
-countable
-countableness
-countably
-countdom
-countenance
-countenancer
-counter
-counterabut
-counteraccusation
-counteracquittance
-counteract
-counteractant
-counteracter
-counteracting
-counteractingly
-counteraction
-counteractive
-counteractively
-counteractivity
-counteractor
-counteraddress
-counteradvance
-counteradvantage
-counteradvice
-counteradvise
-counteraffirm
-counteraffirmation
-counteragency
-counteragent
-counteragitate
-counteragitation
-counteralliance
-counterambush
-counterannouncement
-counteranswer
-counterappeal
-counterappellant
-counterapproach
-counterapse
-counterarch
-counterargue
-counterargument
-counterartillery
-counterassertion
-counterassociation
-counterassurance
-counterattack
-counterattestation
-counterattired
-counterattraction
-counterattractive
-counterattractively
-counteraverment
-counteravouch
-counteravouchment
-counterbalance
-counterbarrage
-counterbase
-counterbattery
-counterbeating
-counterbend
-counterbewitch
-counterbid
-counterblast
-counterblow
-counterbond
-counterborder
-counterbore
-counterboycott
-counterbrace
-counterbranch
-counterbrand
-counterbreastwork
-counterbuff
-counterbuilding
-countercampaign
-countercarte
-countercause
-counterchange
-counterchanged
-countercharge
-countercharm
-countercheck
-countercheer
-counterclaim
-counterclaimant
-counterclockwise
-countercolored
-countercommand
-countercompetition
-countercomplaint
-countercompony
-countercondemnation
-counterconquest
-counterconversion
-countercouchant
-countercoupe
-countercourant
-countercraft
-countercriticism
-countercross
-countercry
-countercurrent
-countercurrently
-countercurrentwise
-counterdance
-counterdash
-counterdecision
-counterdeclaration
-counterdecree
-counterdefender
-counterdemand
-counterdemonstration
-counterdeputation
-counterdesire
-counterdevelopment
-counterdifficulty
-counterdigged
-counterdike
-counterdiscipline
-counterdisengage
-counterdisengagement
-counterdistinction
-counterdistinguish
-counterdoctrine
-counterdogmatism
-counterdraft
-counterdrain
-counterdrive
-counterearth
-counterefficiency
-countereffort
-counterembattled
-counterembowed
-counterenamel
-counterend
-counterenergy
-counterengagement
-counterengine
-counterenthusiasm
-counterentry
-counterequivalent
-counterermine
-counterespionage
-counterestablishment
-counterevidence
-counterexaggeration
-counterexcitement
-counterexcommunication
-counterexercise
-counterexplanation
-counterexposition
-counterexpostulation
-counterextend
-counterextension
-counterfact
-counterfallacy
-counterfaller
-counterfeit
-counterfeiter
-counterfeitly
-counterfeitment
-counterfeitness
-counterferment
-counterfessed
-counterfire
-counterfix
-counterflange
-counterflashing
-counterflight
-counterflory
-counterflow
-counterflux
-counterfoil
-counterforce
-counterformula
-counterfort
-counterfugue
-countergabble
-countergabion
-countergambit
-countergarrison
-countergauge
-countergauger
-countergift
-countergirded
-counterglow
-counterguard
-counterhaft
-counterhammering
-counterhypothesis
-counteridea
-counterideal
-counterimagination
-counterimitate
-counterimitation
-counterimpulse
-counterindentation
-counterindented
-counterindicate
-counterindication
-counterinfluence
-counterinsult
-counterintelligence
-counterinterest
-counterinterpretation
-counterintrigue
-counterinvective
-counterirritant
-counterirritate
-counterirritation
-counterjudging
-counterjumper
-counterlath
-counterlathing
-counterlatration
-counterlaw
-counterleague
-counterlegislation
-counterlife
-counterlocking
-counterlode
-counterlove
-counterly
-countermachination
-counterman
-countermand
-countermandable
-countermaneuver
-countermanifesto
-countermarch
-countermark
-countermarriage
-countermeasure
-countermeet
-countermessage
-countermigration
-countermine
-countermission
-countermotion
-countermount
-countermove
-countermovement
-countermure
-countermutiny
-counternaiant
-counternarrative
-counternatural
-counternecromancy
-counternoise
-counternotice
-counterobjection
-counterobligation
-counteroffensive
-counteroffer
-counteropening
-counteropponent
-counteropposite
-counterorator
-counterorder
-counterorganization
-counterpaled
-counterpaly
-counterpane
-counterpaned
-counterparadox
-counterparallel
-counterparole
-counterparry
-counterpart
-counterpassant
-counterpassion
-counterpenalty
-counterpendent
-counterpetition
-counterpicture
-counterpillar
-counterplan
-counterplay
-counterplayer
-counterplea
-counterplead
-counterpleading
-counterplease
-counterplot
-counterpoint
-counterpointe
-counterpointed
-counterpoise
-counterpoison
-counterpole
-counterponderate
-counterpose
-counterposition
-counterposting
-counterpotence
-counterpotency
-counterpotent
-counterpractice
-counterpray
-counterpreach
-counterpreparation
-counterpressure
-counterprick
-counterprinciple
-counterprocess
-counterproject
-counterpronunciamento
-counterproof
-counterpropaganda
-counterpropagandize
-counterprophet
-counterproposal
-counterproposition
-counterprotection
-counterprotest
-counterprove
-counterpull
-counterpunch
-counterpuncture
-counterpush
-counterquartered
-counterquarterly
-counterquery
-counterquestion
-counterquip
-counterradiation
-counterraid
-counterraising
-counterrampant
-counterrate
-counterreaction
-counterreason
-counterreckoning
-counterrecoil
-counterreconnaissance
-counterrefer
-counterreflected
-counterreform
-counterreformation
-counterreligion
-counterremonstrant
-counterreply
-counterreprisal
-counterresolution
-counterrestoration
-counterretreat
-counterrevolution
-counterrevolutionary
-counterrevolutionist
-counterrevolutionize
-counterriposte
-counterroll
-counterround
-counterruin
-countersale
-countersalient
-counterscale
-counterscalloped
-counterscarp
-counterscoff
-countersconce
-counterscrutiny
-countersea
-counterseal
-countersecure
-countersecurity
-counterselection
-countersense
-counterservice
-countershade
-countershaft
-countershafting
-countershear
-countershine
-countershout
-counterside
-countersiege
-countersign
-countersignal
-countersignature
-countersink
-countersleight
-counterslope
-countersmile
-countersnarl
-counterspying
-counterstain
-counterstamp
-counterstand
-counterstatant
-counterstatement
-counterstatute
-counterstep
-counterstimulate
-counterstimulation
-counterstimulus
-counterstock
-counterstratagem
-counterstream
-counterstrike
-counterstroke
-counterstruggle
-countersubject
-countersuggestion
-countersuit
-countersun
-countersunk
-countersurprise
-counterswing
-countersworn
-countersympathy
-countersynod
-countertack
-countertail
-countertally
-countertaste
-countertechnicality
-countertendency
-countertenor
-counterterm
-counterterror
-countertheme
-countertheory
-counterthought
-counterthreat
-counterthrust
-counterthwarting
-countertierce
-countertime
-countertouch
-countertraction
-countertrades
-countertransference
-countertranslation
-countertraverse
-countertreason
-countertree
-countertrench
-countertrespass
-countertrippant
-countertripping
-countertruth
-countertug
-counterturn
-counterturned
-countertype
-countervail
-countervair
-countervairy
-countervallation
-countervaunt
-countervene
-countervengeance
-countervenom
-countervibration
-counterview
-countervindication
-countervolition
-countervolley
-countervote
-counterwager
-counterwall
-counterwarmth
-counterwave
-counterweigh
-counterweight
-counterweighted
-counterwheel
-counterwill
-counterwilling
-counterwind
-counterwitness
-counterword
-counterwork
-counterworker
-counterwrite
-countess
-countfish
-counting
-countinghouse
-countless
-countor
-countrified
-countrifiedness
-country
-countryfolk
-countryman
-countrypeople
-countryseat
-countryside
-countryward
-countrywoman
-countship
-county
-coup
-coupage
-coupe
-couped
-coupee
-coupelet
-couper
-couple
-coupled
-couplement
-coupler
-coupleress
-couplet
-coupleteer
-coupling
-coupon
-couponed
-couponless
-coupstick
-coupure
-courage
-courageous
-courageously
-courageousness
-courager
-courant
-courante
-courap
-couratari
-courb
-courbache
-courbaril
-courbash
-courge
-courida
-courier
-couril
-courlan
-Cours
-course
-coursed
-courser
-coursing
-court
-courtbred
-courtcraft
-courteous
-courteously
-courteousness
-courtepy
-courter
-courtesan
-courtesanry
-courtesanship
-courtesy
-courtezanry
-courtezanship
-courthouse
-courtier
-courtierism
-courtierly
-courtiership
-courtin
-courtless
-courtlet
-courtlike
-courtliness
-courtling
-courtly
-courtman
-Courtney
-courtroom
-courtship
-courtyard
-courtzilite
-couscous
-couscousou
-couseranite
-cousin
-cousinage
-cousiness
-cousinhood
-cousinly
-cousinry
-cousinship
-cousiny
-coussinet
-coustumier
-coutel
-coutelle
-couter
-Coutet
-couth
-couthie
-couthily
-couthiness
-couthless
-coutil
-coutumier
-couvade
-couxia
-covado
-covalence
-covalent
-Covarecan
-Covarecas
-covariable
-covariance
-covariant
-covariation
-covassal
-cove
-coved
-covelline
-covellite
-covenant
-covenantal
-covenanted
-covenantee
-Covenanter
-covenanter
-covenanting
-covenantor
-covent
-coventrate
-coventrize
-Coventry
-cover
-coverage
-coveralls
-coverchief
-covercle
-covered
-coverer
-covering
-coverless
-coverlet
-coverlid
-coversed
-coverside
-coversine
-coverslut
-covert
-covertical
-covertly
-covertness
-coverture
-covet
-covetable
-coveter
-coveting
-covetingly
-covetiveness
-covetous
-covetously
-covetousness
-covey
-covibrate
-covibration
-covid
-Coviello
-covillager
-Covillea
-covin
-coving
-covinous
-covinously
-covisit
-covisitor
-covite
-covolume
-covotary
-cow
-cowal
-Cowan
-coward
-cowardice
-cowardliness
-cowardly
-cowardness
-cowardy
-cowbane
-cowbell
-cowberry
-cowbind
-cowbird
-cowboy
-cowcatcher
-cowdie
-coween
-cower
-cowfish
-cowgate
-cowgram
-cowhage
-cowheart
-cowhearted
-cowheel
-cowherb
-cowherd
-cowhide
-cowhiding
-cowhorn
-Cowichan
-cowish
-cowitch
-cowkeeper
-cowl
-cowle
-cowled
-cowleech
-cowleeching
-cowlick
-cowlicks
-cowlike
-cowling
-Cowlitz
-cowlstaff
-cowman
-cowpath
-cowpea
-cowpen
-Cowperian
-cowperitis
-cowpock
-cowpox
-cowpuncher
-cowquake
-cowrie
-cowroid
-cowshed
-cowskin
-cowslip
-cowslipped
-cowsucker
-cowtail
-cowthwort
-cowtongue
-cowweed
-cowwheat
-cowy
-cowyard
-cox
-coxa
-coxal
-coxalgia
-coxalgic
-coxankylometer
-coxarthritis
-coxarthrocace
-coxarthropathy
-coxbones
-coxcomb
-coxcombess
-coxcombhood
-coxcombic
-coxcombical
-coxcombicality
-coxcombically
-coxcombity
-coxcombry
-coxcomby
-coxcomical
-coxcomically
-coxite
-coxitis
-coxocerite
-coxoceritic
-coxodynia
-coxofemoral
-coxopodite
-coxswain
-coxy
-coy
-coyan
-coydog
-coyish
-coyishness
-coyly
-coyness
-coynye
-coyo
-coyol
-coyote
-Coyotero
-coyotillo
-coyoting
-coypu
-coyure
-coz
-coze
-cozen
-cozenage
-cozener
-cozening
-cozeningly
-cozier
-cozily
-coziness
-cozy
-crab
-crabbed
-crabbedly
-crabbedness
-crabber
-crabbery
-crabbing
-crabby
-crabcatcher
-crabeater
-craber
-crabhole
-crablet
-crablike
-crabman
-crabmill
-crabsidle
-crabstick
-crabweed
-crabwise
-crabwood
-Cracca
-Cracidae
-Cracinae
-crack
-crackable
-crackajack
-crackbrain
-crackbrained
-crackbrainedness
-crackdown
-cracked
-crackedness
-cracker
-crackerberry
-crackerjack
-crackers
-crackhemp
-crackiness
-cracking
-crackjaw
-crackle
-crackled
-crackless
-crackleware
-crackling
-crackly
-crackmans
-cracknel
-crackpot
-crackskull
-cracksman
-cracky
-cracovienne
-craddy
-cradge
-cradle
-cradleboard
-cradlechild
-cradlefellow
-cradleland
-cradlelike
-cradlemaker
-cradlemaking
-cradleman
-cradlemate
-cradler
-cradleside
-cradlesong
-cradletime
-cradling
-Cradock
-craft
-craftily
-craftiness
-craftless
-craftsman
-craftsmanship
-craftsmaster
-craftswoman
-craftwork
-craftworker
-crafty
-crag
-craggan
-cragged
-craggedness
-craggily
-cragginess
-craggy
-craglike
-cragsman
-cragwork
-craichy
-Craig
-craigmontite
-crain
-craisey
-craizey
-crajuru
-crake
-crakefeet
-crakow
-cram
-cramasie
-crambambulee
-crambambuli
-Crambe
-crambe
-cramberry
-crambid
-Crambidae
-Crambinae
-cramble
-crambly
-crambo
-Crambus
-crammer
-cramp
-cramped
-crampedness
-cramper
-crampet
-crampfish
-cramping
-crampingly
-crampon
-cramponnee
-crampy
-cran
-cranage
-cranberry
-crance
-crandall
-crandallite
-crane
-cranelike
-craneman
-craner
-cranesman
-craneway
-craney
-Crania
-crania
-craniacromial
-craniad
-cranial
-cranially
-cranian
-Craniata
-craniate
-cranic
-craniectomy
-craniocele
-craniocerebral
-cranioclasis
-cranioclasm
-cranioclast
-cranioclasty
-craniodidymus
-craniofacial
-craniognomic
-craniognomy
-craniognosy
-craniograph
-craniographer
-craniography
-craniological
-craniologically
-craniologist
-craniology
-craniomalacia
-craniomaxillary
-craniometer
-craniometric
-craniometrical
-craniometrically
-craniometrist
-craniometry
-craniopagus
-craniopathic
-craniopathy
-craniopharyngeal
-craniophore
-cranioplasty
-craniopuncture
-craniorhachischisis
-craniosacral
-cranioschisis
-cranioscopical
-cranioscopist
-cranioscopy
-craniospinal
-craniostenosis
-craniostosis
-Craniota
-craniotabes
-craniotome
-craniotomy
-craniotopography
-craniotympanic
-craniovertebral
-cranium
-crank
-crankbird
-crankcase
-cranked
-cranker
-crankery
-crankily
-crankiness
-crankle
-crankless
-crankly
-crankman
-crankous
-crankpin
-crankshaft
-crankum
-cranky
-crannage
-crannied
-crannock
-crannog
-crannoger
-cranny
-cranreuch
-crantara
-crants
-crap
-crapaud
-crapaudine
-crape
-crapefish
-crapehanger
-crapelike
-crappie
-crappin
-crapple
-crappo
-craps
-crapshooter
-crapulate
-crapulence
-crapulent
-crapulous
-crapulously
-crapulousness
-crapy
-craquelure
-crare
-crash
-crasher
-crasis
-craspedal
-craspedodromous
-craspedon
-Craspedota
-craspedotal
-craspedote
-crass
-crassamentum
-crassier
-crassilingual
-Crassina
-crassitude
-crassly
-crassness
-Crassula
-Crassulaceae
-crassulaceous
-Crataegus
-Crataeva
-cratch
-cratchens
-cratches
-crate
-crateful
-cratemaker
-cratemaking
-crateman
-crater
-crateral
-cratered
-Craterellus
-Craterid
-crateriform
-crateris
-craterkin
-craterless
-craterlet
-craterlike
-craterous
-craticular
-Cratinean
-cratometer
-cratometric
-cratometry
-craunch
-craunching
-craunchingly
-cravat
-crave
-craven
-Cravenette
-cravenette
-cravenhearted
-cravenly
-cravenness
-craver
-craving
-cravingly
-cravingness
-cravo
-craw
-crawberry
-crawdad
-crawfish
-crawfoot
-crawful
-crawl
-crawler
-crawlerize
-crawley
-crawleyroot
-crawling
-crawlingly
-crawlsome
-crawly
-crawm
-crawtae
-Crawthumper
-Crax
-crayer
-crayfish
-crayon
-crayonist
-crayonstone
-craze
-crazed
-crazedly
-crazedness
-crazily
-craziness
-crazingmill
-crazy
-crazycat
-crazyweed
-crea
-creagh
-creaght
-creak
-creaker
-creakily
-creakiness
-creakingly
-creaky
-cream
-creambush
-creamcake
-creamcup
-creamer
-creamery
-creameryman
-creamfruit
-creamily
-creaminess
-creamless
-creamlike
-creammaker
-creammaking
-creamometer
-creamsacs
-creamware
-creamy
-creance
-creancer
-creant
-crease
-creaseless
-creaser
-creashaks
-creasing
-creasy
-creat
-creatable
-create
-createdness
-creatic
-creatine
-creatinephosphoric
-creatinine
-creatininemia
-creatinuria
-creation
-creational
-creationary
-creationism
-creationist
-creationistic
-creative
-creatively
-creativeness
-creativity
-creatophagous
-creator
-creatorhood
-creatorrhea
-creatorship
-creatotoxism
-creatress
-creatrix
-creatural
-creature
-creaturehood
-creatureless
-creatureliness
-creatureling
-creaturely
-creatureship
-creaturize
-crebricostate
-crebrisulcate
-crebrity
-crebrous
-creche
-creddock
-credence
-credencive
-credenciveness
-credenda
-credensive
-credensiveness
-credent
-credential
-credently
-credenza
-credibility
-credible
-credibleness
-credibly
-credit
-creditability
-creditable
-creditableness
-creditably
-creditive
-creditless
-creditor
-creditorship
-creditress
-creditrix
-crednerite
-Credo
-credulity
-credulous
-credulously
-credulousness
-Cree
-cree
-creed
-creedal
-creedalism
-creedalist
-creeded
-creedist
-creedite
-creedless
-creedlessness
-creedmore
-creedsman
-Creek
-creek
-creeker
-creekfish
-creekside
-creekstuff
-creeky
-creel
-creeler
-creem
-creen
-creep
-creepage
-creeper
-creepered
-creeperless
-creephole
-creepie
-creepiness
-creeping
-creepingly
-creepmouse
-creepmousy
-creepy
-creese
-creesh
-creeshie
-creeshy
-creirgist
-cremaster
-cremasterial
-cremasteric
-cremate
-cremation
-cremationism
-cremationist
-cremator
-crematorial
-crematorium
-crematory
-crembalum
-cremnophobia
-cremocarp
-cremometer
-cremone
-cremor
-cremorne
-cremule
-crena
-crenate
-crenated
-crenately
-crenation
-crenature
-crenel
-crenelate
-crenelated
-crenelation
-crenele
-creneled
-crenelet
-crenellate
-crenellation
-crenic
-crenitic
-crenology
-crenotherapy
-Crenothrix
-crenula
-crenulate
-crenulated
-crenulation
-creodont
-Creodonta
-creole
-creoleize
-creolian
-Creolin
-creolism
-creolization
-creolize
-creophagia
-creophagism
-creophagist
-creophagous
-creophagy
-creosol
-creosote
-creosoter
-creosotic
-crepance
-crepe
-crepehanger
-Crepidula
-crepine
-crepiness
-Crepis
-crepitaculum
-crepitant
-crepitate
-crepitation
-crepitous
-crepitus
-crepon
-crept
-crepuscle
-crepuscular
-crepuscule
-crepusculine
-crepusculum
-crepy
-cresamine
-crescendo
-crescent
-crescentade
-crescentader
-Crescentia
-crescentic
-crescentiform
-crescentlike
-crescentoid
-crescentwise
-crescive
-crescograph
-crescographic
-cresegol
-cresol
-cresolin
-cresorcinol
-cresotate
-cresotic
-cresotinic
-cresoxide
-cresoxy
-cresphontes
-cress
-cressed
-cresselle
-cresset
-Cressida
-cresson
-cressweed
-cresswort
-cressy
-crest
-crested
-crestfallen
-crestfallenly
-crestfallenness
-cresting
-crestless
-crestline
-crestmoreite
-cresyl
-cresylate
-cresylene
-cresylic
-cresylite
-creta
-Cretaceous
-cretaceous
-cretaceously
-Cretacic
-Cretan
-Crete
-cretefaction
-Cretic
-cretic
-cretification
-cretify
-cretin
-cretinic
-cretinism
-cretinization
-cretinize
-cretinoid
-cretinous
-cretion
-cretionary
-Cretism
-cretonne
-crevalle
-crevasse
-crevice
-creviced
-crew
-crewel
-crewelist
-crewellery
-crewelwork
-crewer
-crewless
-crewman
-Crex
-crib
-cribbage
-cribber
-cribbing
-cribble
-cribellum
-cribo
-cribral
-cribrate
-cribrately
-cribration
-cribriform
-cribrose
-cribwork
-cric
-Cricetidae
-cricetine
-Cricetus
-crick
-cricket
-cricketer
-cricketing
-crickety
-crickey
-crickle
-cricoarytenoid
-cricoid
-cricopharyngeal
-cricothyreoid
-cricothyreotomy
-cricothyroid
-cricothyroidean
-cricotomy
-cricotracheotomy
-Cricotus
-cried
-crier
-criey
-crig
-crile
-crime
-Crimean
-crimeful
-crimeless
-crimelessness
-crimeproof
-criminal
-criminaldom
-criminalese
-criminalism
-criminalist
-criminalistic
-criminalistician
-criminalistics
-criminality
-criminally
-criminalness
-criminaloid
-criminate
-crimination
-criminative
-criminator
-criminatory
-crimine
-criminogenesis
-criminogenic
-criminologic
-criminological
-criminologist
-criminology
-criminosis
-criminous
-criminously
-criminousness
-crimogenic
-crimp
-crimpage
-crimper
-crimping
-crimple
-crimpness
-crimpy
-crimson
-crimsonly
-crimsonness
-crimsony
-crin
-crinal
-crinanite
-crinated
-crinatory
-crine
-crined
-crinet
-cringe
-cringeling
-cringer
-cringing
-cringingly
-cringingness
-cringle
-crinicultural
-criniculture
-criniferous
-Criniger
-crinigerous
-criniparous
-crinite
-crinitory
-crinivorous
-crink
-crinkle
-crinkleroot
-crinkly
-crinoid
-crinoidal
-Crinoidea
-crinoidean
-crinoline
-crinose
-crinosity
-crinula
-Crinum
-criobolium
-criocephalus
-Crioceras
-crioceratite
-crioceratitic
-Crioceris
-criophore
-Criophoros
-criosphinx
-cripes
-crippingly
-cripple
-crippledom
-crippleness
-crippler
-crippling
-cripply
-Cris
-crises
-crisic
-crisis
-crisp
-crispate
-crispated
-crispation
-crispature
-crisped
-crisper
-crispily
-Crispin
-crispine
-crispiness
-crisping
-crisply
-crispness
-crispy
-criss
-crissal
-crisscross
-crissum
-crista
-cristate
-Cristatella
-Cristi
-cristiform
-Cristina
-Cristineaux
-Cristino
-Cristispira
-Cristivomer
-cristobalite
-Cristopher
-critch
-criteria
-criteriology
-criterion
-criterional
-criterium
-crith
-Crithidia
-crithmene
-crithomancy
-critic
-critical
-criticality
-critically
-criticalness
-criticaster
-criticasterism
-criticastry
-criticisable
-criticism
-criticist
-criticizable
-criticize
-criticizer
-criticizingly
-critickin
-criticship
-criticule
-critique
-critling
-crizzle
-cro
-croak
-Croaker
-croaker
-croakily
-croakiness
-croaky
-Croat
-Croatan
-Croatian
-croc
-Crocanthemum
-crocard
-croceic
-crocein
-croceine
-croceous
-crocetin
-croche
-crochet
-crocheter
-crocheting
-croci
-crocidolite
-Crocidura
-crocin
-crock
-crocker
-crockery
-crockeryware
-crocket
-crocketed
-crocky
-crocodile
-Crocodilia
-crocodilian
-Crocodilidae
-crocodiline
-crocodilite
-crocodiloid
-Crocodilus
-Crocodylidae
-Crocodylus
-crocoisite
-crocoite
-croconate
-croconic
-Crocosmia
-Crocus
-crocus
-crocused
-croft
-crofter
-crofterization
-crofterize
-crofting
-croftland
-croisette
-croissante
-Crokinole
-Crom
-cromaltite
-crome
-Cromer
-Cromerian
-cromfordite
-cromlech
-cromorna
-cromorne
-Cromwell
-Cromwellian
-Cronartium
-crone
-croneberry
-cronet
-Cronian
-cronish
-cronk
-cronkness
-cronstedtite
-crony
-crood
-croodle
-crook
-crookback
-crookbacked
-crookbill
-crookbilled
-crooked
-crookedly
-crookedness
-crooken
-crookesite
-crookfingered
-crookheaded
-crookkneed
-crookle
-crooklegged
-crookneck
-crooknecked
-crooknosed
-crookshouldered
-crooksided
-crooksterned
-crooktoothed
-crool
-Croomia
-croon
-crooner
-crooning
-crooningly
-crop
-crophead
-cropland
-cropman
-croppa
-cropper
-croppie
-cropplecrown
-croppy
-cropshin
-cropsick
-cropsickness
-cropweed
-croquet
-croquette
-crore
-crosa
-Crosby
-crosier
-crosiered
-crosnes
-cross
-crossability
-crossable
-crossarm
-crossband
-crossbar
-crossbeak
-crossbeam
-crossbelt
-crossbill
-crossbolt
-crossbolted
-crossbones
-crossbow
-crossbowman
-crossbred
-crossbreed
-crosscurrent
-crosscurrented
-crosscut
-crosscutter
-crosscutting
-crosse
-crossed
-crosser
-crossette
-crossfall
-crossfish
-crossflow
-crossflower
-crossfoot
-crosshackle
-crosshand
-crosshatch
-crosshaul
-crosshauling
-crosshead
-crossing
-crossite
-crossjack
-crosslegs
-crosslet
-crossleted
-crosslight
-crosslighted
-crossline
-crossly
-crossness
-crossopodia
-crossopterygian
-Crossopterygii
-Crossosoma
-Crossosomataceae
-crossosomataceous
-crossover
-crosspatch
-crosspath
-crosspiece
-crosspoint
-crossrail
-crossroad
-crossroads
-crossrow
-crossruff
-crosstail
-crosstie
-crosstied
-crosstoes
-crosstrack
-crosstree
-crosswalk
-crossway
-crossways
-crossweb
-crossweed
-crosswise
-crossword
-crosswort
-crostarie
-crotal
-Crotalaria
-crotalic
-Crotalidae
-crotaliform
-Crotalinae
-crotaline
-crotalism
-crotalo
-crotaloid
-crotalum
-Crotalus
-crotaphic
-crotaphion
-crotaphite
-crotaphitic
-Crotaphytus
-crotch
-crotched
-crotchet
-crotcheteer
-crotchetiness
-crotchety
-crotchy
-crotin
-Croton
-crotonaldehyde
-crotonate
-crotonic
-crotonization
-crotonyl
-crotonylene
-Crotophaga
-crottels
-crottle
-crotyl
-crouch
-crouchant
-crouched
-croucher
-crouching
-crouchingly
-crounotherapy
-croup
-croupade
-croupal
-croupe
-crouperbush
-croupier
-croupily
-croupiness
-croupous
-croupy
-crouse
-crousely
-crout
-croute
-crouton
-crow
-crowbait
-crowbar
-crowberry
-crowbill
-crowd
-crowded
-crowdedly
-crowdedness
-crowder
-crowdweed
-crowdy
-crower
-crowflower
-crowfoot
-crowfooted
-crowhop
-crowing
-crowingly
-crowkeeper
-crowl
-crown
-crownbeard
-crowned
-crowner
-crownless
-crownlet
-crownling
-crownmaker
-crownwork
-crownwort
-crowshay
-crowstep
-crowstepped
-crowstick
-crowstone
-crowtoe
-croy
-croyden
-croydon
-croze
-crozer
-crozzle
-crozzly
-crubeen
-cruce
-cruces
-crucethouse
-cruche
-crucial
-cruciality
-crucially
-crucian
-Crucianella
-cruciate
-cruciately
-cruciation
-crucible
-Crucibulum
-crucifer
-Cruciferae
-cruciferous
-crucificial
-crucified
-crucifier
-crucifix
-crucifixion
-cruciform
-cruciformity
-cruciformly
-crucify
-crucigerous
-crucilly
-crucily
-cruck
-crude
-crudely
-crudeness
-crudity
-crudwort
-cruel
-cruelhearted
-cruelize
-cruelly
-cruelness
-cruels
-cruelty
-cruent
-cruentation
-cruet
-cruety
-cruise
-cruiser
-cruisken
-cruive
-cruller
-crum
-crumb
-crumbable
-crumbcloth
-crumber
-crumble
-crumblement
-crumblet
-crumbliness
-crumblingness
-crumblings
-crumbly
-crumby
-crumen
-crumenal
-crumlet
-crummie
-crummier
-crummiest
-crummock
-crummy
-crump
-crumper
-crumpet
-crumple
-crumpled
-crumpler
-crumpling
-crumply
-crumpy
-crunch
-crunchable
-crunchiness
-crunching
-crunchingly
-crunchingness
-crunchweed
-crunchy
-crunk
-crunkle
-crunodal
-crunode
-crunt
-cruor
-crupper
-crural
-crureus
-crurogenital
-cruroinguinal
-crurotarsal
-crus
-crusade
-crusader
-crusado
-Crusca
-cruse
-crush
-crushability
-crushable
-crushed
-crusher
-crushing
-crushingly
-crusie
-crusily
-crust
-crusta
-Crustacea
-crustaceal
-crustacean
-crustaceological
-crustaceologist
-crustaceology
-crustaceous
-crustade
-crustal
-crustalogical
-crustalogist
-crustalogy
-crustate
-crustated
-crustation
-crusted
-crustedly
-cruster
-crustific
-crustification
-crustily
-crustiness
-crustless
-crustose
-crustosis
-crusty
-crutch
-crutched
-crutcher
-crutching
-crutchlike
-cruth
-crutter
-crux
-cruzeiro
-cry
-cryable
-cryaesthesia
-cryalgesia
-cryanesthesia
-crybaby
-cryesthesia
-crying
-cryingly
-crymodynia
-crymotherapy
-cryoconite
-cryogen
-cryogenic
-cryogenics
-cryogeny
-cryohydrate
-cryohydric
-cryolite
-cryometer
-cryophile
-cryophilic
-cryophoric
-cryophorus
-cryophyllite
-cryophyte
-cryoplankton
-cryoscope
-cryoscopic
-cryoscopy
-cryosel
-cryostase
-cryostat
-crypt
-crypta
-cryptal
-cryptamnesia
-cryptamnesic
-cryptanalysis
-cryptanalyst
-cryptarch
-cryptarchy
-crypted
-Crypteronia
-Crypteroniaceae
-cryptesthesia
-cryptesthetic
-cryptic
-cryptical
-cryptically
-cryptoagnostic
-cryptobatholithic
-cryptobranch
-Cryptobranchia
-Cryptobranchiata
-cryptobranchiate
-Cryptobranchidae
-Cryptobranchus
-cryptocarp
-cryptocarpic
-cryptocarpous
-Cryptocarya
-Cryptocephala
-cryptocephalous
-Cryptocerata
-cryptocerous
-cryptoclastic
-Cryptocleidus
-cryptococci
-cryptococcic
-Cryptococcus
-cryptococcus
-cryptocommercial
-cryptocrystalline
-cryptocrystallization
-cryptodeist
-Cryptodira
-cryptodiran
-cryptodire
-cryptodirous
-cryptodouble
-cryptodynamic
-cryptogam
-Cryptogamia
-cryptogamian
-cryptogamic
-cryptogamical
-cryptogamist
-cryptogamous
-cryptogamy
-cryptogenetic
-cryptogenic
-cryptogenous
-Cryptoglaux
-cryptoglioma
-cryptogram
-Cryptogramma
-cryptogrammatic
-cryptogrammatical
-cryptogrammatist
-cryptogrammic
-cryptograph
-cryptographal
-cryptographer
-cryptographic
-cryptographical
-cryptographically
-cryptographist
-cryptography
-cryptoheresy
-cryptoheretic
-cryptoinflationist
-cryptolite
-cryptologist
-cryptology
-cryptolunatic
-cryptomere
-Cryptomeria
-cryptomerous
-cryptomnesia
-cryptomnesic
-cryptomonad
-Cryptomonadales
-Cryptomonadina
-cryptonema
-Cryptonemiales
-cryptoneurous
-cryptonym
-cryptonymous
-cryptopapist
-cryptoperthite
-Cryptophagidae
-cryptophthalmos
-Cryptophyceae
-cryptophyte
-cryptopine
-cryptoporticus
-Cryptoprocta
-cryptoproselyte
-cryptoproselytism
-cryptopyic
-cryptopyrrole
-cryptorchid
-cryptorchidism
-cryptorchis
-Cryptorhynchus
-cryptorrhesis
-cryptorrhetic
-cryptoscope
-cryptoscopy
-cryptosplenetic
-Cryptostegia
-cryptostoma
-Cryptostomata
-cryptostomate
-cryptostome
-Cryptotaenia
-cryptous
-cryptovalence
-cryptovalency
-cryptozonate
-Cryptozonia
-cryptozygosity
-cryptozygous
-Crypturi
-Crypturidae
-crystal
-crystallic
-crystalliferous
-crystalliform
-crystalligerous
-crystallin
-crystalline
-crystallinity
-crystallite
-crystallitic
-crystallitis
-crystallizability
-crystallizable
-crystallization
-crystallize
-crystallized
-crystallizer
-crystalloblastic
-crystallochemical
-crystallochemistry
-crystallogenesis
-crystallogenetic
-crystallogenic
-crystallogenical
-crystallogeny
-crystallogram
-crystallographer
-crystallographic
-crystallographical
-crystallographically
-crystallography
-crystalloid
-crystalloidal
-crystallology
-crystalloluminescence
-crystallomagnetic
-crystallomancy
-crystallometric
-crystallometry
-crystallophyllian
-crystallose
-crystallurgy
-crystalwort
-crystic
-crystograph
-crystoleum
-Crystolon
-crystosphene
-csardas
-Ctenacanthus
-ctene
-ctenidial
-ctenidium
-cteniform
-Ctenocephalus
-ctenocyst
-ctenodactyl
-Ctenodipterini
-ctenodont
-Ctenodontidae
-Ctenodus
-ctenoid
-ctenoidean
-Ctenoidei
-ctenoidian
-ctenolium
-Ctenophora
-ctenophoral
-ctenophoran
-ctenophore
-ctenophoric
-ctenophorous
-Ctenoplana
-Ctenostomata
-ctenostomatous
-ctenostome
-ctetology
-cuadra
-Cuailnge
-cuapinole
-cuarenta
-cuarta
-cuarteron
-cuartilla
-cuartillo
-cub
-Cuba
-cubage
-Cuban
-cubangle
-cubanite
-Cubanize
-cubatory
-cubature
-cubbing
-cubbish
-cubbishly
-cubbishness
-cubby
-cubbyhole
-cubbyhouse
-cubbyyew
-cubdom
-cube
-cubeb
-cubelet
-Cubelium
-cuber
-cubhood
-cubi
-cubic
-cubica
-cubical
-cubically
-cubicalness
-cubicity
-cubicle
-cubicly
-cubicone
-cubicontravariant
-cubicovariant
-cubicular
-cubiculum
-cubiform
-cubism
-cubist
-cubit
-cubital
-cubitale
-cubited
-cubitiere
-cubito
-cubitocarpal
-cubitocutaneous
-cubitodigital
-cubitometacarpal
-cubitopalmar
-cubitoplantar
-cubitoradial
-cubitus
-cubmaster
-cubocalcaneal
-cuboctahedron
-cubocube
-cubocuneiform
-cubododecahedral
-cuboid
-cuboidal
-cuboides
-cubomancy
-Cubomedusae
-cubomedusan
-cubometatarsal
-cubonavicular
-Cuchan
-Cuchulainn
-cuck
-cuckhold
-cuckold
-cuckoldom
-cuckoldry
-cuckoldy
-cuckoo
-cuckooflower
-cuckoomaid
-cuckoopint
-cuckoopintle
-cuckstool
-cucoline
-Cucujid
-Cucujidae
-Cucujus
-Cuculi
-Cuculidae
-cuculiform
-Cuculiformes
-cuculine
-cuculla
-cucullaris
-cucullate
-cucullately
-cuculliform
-cucullus
-cuculoid
-Cuculus
-Cucumaria
-Cucumariidae
-cucumber
-cucumiform
-Cucumis
-cucurbit
-Cucurbita
-Cucurbitaceae
-cucurbitaceous
-cucurbite
-cucurbitine
-cud
-cudava
-cudbear
-cudden
-cuddle
-cuddleable
-cuddlesome
-cuddly
-Cuddy
-cuddy
-cuddyhole
-cudgel
-cudgeler
-cudgerie
-cudweed
-cue
-cueball
-cueca
-cueist
-cueman
-cuemanship
-cuerda
-cuesta
-Cueva
-cuff
-cuffer
-cuffin
-cuffy
-cuffyism
-cuggermugger
-cuichunchulli
-cuinage
-cuir
-cuirass
-cuirassed
-cuirassier
-cuisinary
-cuisine
-cuissard
-cuissart
-cuisse
-cuissen
-cuisten
-Cuitlateco
-cuittikin
-Cujam
-cuke
-Culavamsa
-culbut
-Culdee
-culebra
-culet
-culeus
-Culex
-culgee
-culicid
-Culicidae
-culicidal
-culicide
-culiciform
-culicifugal
-culicifuge
-Culicinae
-culicine
-Culicoides
-culilawan
-culinarily
-culinary
-cull
-culla
-cullage
-Cullen
-culler
-cullet
-culling
-cullion
-cullis
-cully
-culm
-culmen
-culmicolous
-culmiferous
-culmigenous
-culminal
-culminant
-culminate
-culmination
-culmy
-culotte
-culottes
-culottic
-culottism
-culpa
-culpability
-culpable
-culpableness
-culpably
-culpatory
-culpose
-culprit
-cult
-cultch
-cultellation
-cultellus
-culteranismo
-cultic
-cultigen
-cultirostral
-Cultirostres
-cultish
-cultism
-cultismo
-cultist
-cultivability
-cultivable
-cultivably
-cultivar
-cultivatability
-cultivatable
-cultivate
-cultivated
-cultivation
-cultivator
-cultrate
-cultrated
-cultriform
-cultrirostral
-Cultrirostres
-cultual
-culturable
-cultural
-culturally
-culture
-cultured
-culturine
-culturist
-culturization
-culturize
-culturological
-culturologically
-culturologist
-culturology
-cultus
-culver
-culverfoot
-culverhouse
-culverin
-culverineer
-culverkey
-culvert
-culvertage
-culverwort
-cum
-Cumacea
-cumacean
-cumaceous
-Cumaean
-cumal
-cumaldehyde
-Cumanagoto
-cumaphyte
-cumaphytic
-cumaphytism
-Cumar
-cumay
-cumbent
-cumber
-cumberer
-cumberlandite
-cumberless
-cumberment
-cumbersome
-cumbersomely
-cumbersomeness
-cumberworld
-cumbha
-cumbly
-cumbraite
-cumbrance
-cumbre
-Cumbrian
-cumbrous
-cumbrously
-cumbrousness
-cumbu
-cumene
-cumengite
-cumenyl
-cumflutter
-cumhal
-cumic
-cumidin
-cumidine
-cumin
-cuminal
-cuminic
-cuminoin
-cuminol
-cuminole
-cuminseed
-cuminyl
-cummer
-cummerbund
-cummin
-cummingtonite
-cumol
-cump
-cumshaw
-cumulant
-cumular
-cumulate
-cumulately
-cumulation
-cumulatist
-cumulative
-cumulatively
-cumulativeness
-cumuli
-cumuliform
-cumulite
-cumulophyric
-cumulose
-cumulous
-cumulus
-cumyl
-Cuna
-cunabular
-Cunan
-Cunarder
-Cunas
-cunctation
-cunctatious
-cunctative
-cunctator
-cunctatorship
-cunctatury
-cunctipotent
-cundeamor
-cuneal
-cuneate
-cuneately
-cuneatic
-cuneator
-cuneiform
-cuneiformist
-cuneocuboid
-cuneonavicular
-cuneoscaphoid
-cunette
-cuneus
-cungeboi
-cunicular
-cuniculus
-cunila
-cunjah
-cunjer
-cunjevoi
-cunner
-cunnilinctus
-cunnilingus
-cunning
-Cunninghamia
-cunningly
-cunningness
-Cunonia
-Cunoniaceae
-cunoniaceous
-cunye
-Cunza
-Cuon
-cuorin
-cup
-Cupania
-cupay
-cupbearer
-cupboard
-cupcake
-cupel
-cupeler
-cupellation
-cupflower
-cupful
-Cuphea
-cuphead
-cupholder
-Cupid
-cupidinous
-cupidity
-cupidon
-cupidone
-cupless
-cupmaker
-cupmaking
-cupman
-cupmate
-cupola
-cupolaman
-cupolar
-cupolated
-cupped
-cupper
-cupping
-cuppy
-cuprammonia
-cuprammonium
-cupreine
-cuprene
-cupreous
-Cupressaceae
-cupressineous
-Cupressinoxylon
-Cupressus
-cupric
-cupride
-cupriferous
-cuprite
-cuproammonium
-cuprobismutite
-cuprocyanide
-cuprodescloizite
-cuproid
-cuproiodargyrite
-cupromanganese
-cupronickel
-cuproplumbite
-cuproscheelite
-cuprose
-cuprosilicon
-cuprotungstite
-cuprous
-cuprum
-cupseed
-cupstone
-cupula
-cupulate
-cupule
-Cupuliferae
-cupuliferous
-cupuliform
-cur
-curability
-curable
-curableness
-curably
-curacao
-curacy
-curare
-curarine
-curarization
-curarize
-curassow
-curatage
-curate
-curatel
-curateship
-curatess
-curatial
-curatic
-curation
-curative
-curatively
-curativeness
-curatize
-curatolatry
-curator
-curatorial
-curatorium
-curatorship
-curatory
-curatrix
-Curavecan
-curb
-curbable
-curber
-curbing
-curbless
-curblike
-curbstone
-curbstoner
-curby
-curcas
-curch
-curcuddoch
-Curculio
-curculionid
-Curculionidae
-curculionist
-Curcuma
-curcumin
-curd
-curdiness
-curdle
-curdler
-curdly
-curdwort
-curdy
-cure
-cureless
-curelessly
-curemaster
-curer
-curettage
-curette
-curettement
-curfew
-curial
-curialism
-curialist
-curialistic
-curiality
-curiate
-Curiatii
-curiboca
-curie
-curiescopy
-curietherapy
-curin
-curine
-curing
-curio
-curiologic
-curiologically
-curiologics
-curiology
-curiomaniac
-curiosa
-curiosity
-curioso
-curious
-curiously
-curiousness
-curite
-Curitis
-curium
-curl
-curled
-curledly
-curledness
-curler
-curlew
-curlewberry
-curlicue
-curliewurly
-curlike
-curlily
-curliness
-curling
-curlingly
-curlpaper
-curly
-curlycue
-curlyhead
-curlylocks
-curmudgeon
-curmudgeonery
-curmudgeonish
-curmudgeonly
-curmurring
-curn
-curney
-curnock
-curple
-curr
-currach
-currack
-curragh
-currant
-curratow
-currawang
-currency
-current
-currently
-currentness
-currentwise
-curricle
-curricula
-curricular
-curricularization
-curricularize
-curriculum
-curried
-currier
-curriery
-currish
-currishly
-currishness
-curry
-currycomb
-curryfavel
-Cursa
-cursal
-curse
-cursed
-cursedly
-cursedness
-curser
-curship
-cursitor
-cursive
-cursively
-cursiveness
-cursor
-cursorary
-Cursores
-Cursoria
-cursorial
-Cursoriidae
-cursorily
-cursoriness
-cursorious
-Cursorius
-cursory
-curst
-curstful
-curstfully
-curstly
-curstness
-cursus
-Curt
-curt
-curtail
-curtailed
-curtailedly
-curtailer
-curtailment
-curtain
-curtaining
-curtainless
-curtainwise
-curtal
-Curtana
-curtate
-curtation
-curtesy
-curtilage
-Curtis
-Curtise
-curtly
-curtness
-curtsy
-curua
-curuba
-Curucaneca
-Curucanecan
-curucucu
-curule
-Curuminaca
-Curuminacan
-Curupira
-cururo
-curvaceous
-curvaceousness
-curvacious
-curvant
-curvate
-curvation
-curvature
-curve
-curved
-curvedly
-curvedness
-curver
-curvesome
-curvesomeness
-curvet
-curvicaudate
-curvicostate
-curvidentate
-curvifoliate
-curviform
-curvilineal
-curvilinear
-curvilinearity
-curvilinearly
-curvimeter
-curvinervate
-curvinerved
-curvirostral
-Curvirostres
-curviserial
-curvital
-curvity
-curvograph
-curvometer
-curvous
-curvulate
-curvy
-curwhibble
-curwillet
-cuscohygrine
-cusconine
-Cuscus
-cuscus
-Cuscuta
-Cuscutaceae
-cuscutaceous
-cusec
-cuselite
-cush
-cushag
-cushat
-cushaw
-cushewbird
-cushion
-cushioned
-cushionflower
-cushionless
-cushionlike
-cushiony
-Cushite
-Cushitic
-cushlamochree
-cushy
-cusie
-cusinero
-cusk
-cusp
-cuspal
-cusparidine
-cusparine
-cuspate
-cusped
-cuspid
-cuspidal
-cuspidate
-cuspidation
-cuspidine
-cuspidor
-cuspule
-cuss
-cussed
-cussedly
-cussedness
-cusser
-cusso
-custard
-custerite
-custodee
-custodes
-custodial
-custodiam
-custodian
-custodianship
-custodier
-custody
-custom
-customable
-customarily
-customariness
-customary
-customer
-customhouse
-customs
-custumal
-cut
-cutaneal
-cutaneous
-cutaneously
-cutaway
-cutback
-cutch
-cutcher
-cutcherry
-cute
-cutely
-cuteness
-Cuterebra
-Cuthbert
-cutheal
-cuticle
-cuticolor
-cuticula
-cuticular
-cuticularization
-cuticularize
-cuticulate
-cutidure
-cutie
-cutification
-cutigeral
-cutin
-cutinization
-cutinize
-cutireaction
-cutis
-cutisector
-Cutiterebra
-cutitis
-cutization
-cutlass
-cutler
-cutleress
-Cutleria
-Cutleriaceae
-cutleriaceous
-Cutleriales
-cutlery
-cutlet
-cutling
-cutlips
-cutocellulose
-cutoff
-cutout
-cutover
-cutpurse
-cuttable
-cuttage
-cuttail
-cuttanee
-cutted
-cutter
-cutterhead
-cutterman
-cutthroat
-cutting
-cuttingly
-cuttingness
-cuttle
-cuttlebone
-cuttlefish
-cuttler
-cuttoo
-cutty
-cuttyhunk
-cutup
-cutwater
-cutweed
-cutwork
-cutworm
-cuvette
-Cuvierian
-cuvy
-cuya
-Cuzceno
-cwierc
-cwm
-cyamelide
-Cyamus
-cyan
-cyanacetic
-cyanamide
-cyananthrol
-Cyanastraceae
-Cyanastrum
-cyanate
-cyanaurate
-cyanauric
-cyanbenzyl
-cyancarbonic
-Cyanea
-cyanean
-cyanemia
-cyaneous
-cyanephidrosis
-cyanformate
-cyanformic
-cyanhidrosis
-cyanhydrate
-cyanhydric
-cyanhydrin
-cyanic
-cyanicide
-cyanidation
-cyanide
-cyanidin
-cyanidine
-cyanidrosis
-cyanimide
-cyanin
-cyanine
-cyanite
-cyanize
-cyanmethemoglobin
-cyanoacetate
-cyanoacetic
-cyanoaurate
-cyanoauric
-cyanobenzene
-cyanocarbonic
-cyanochlorous
-cyanochroia
-cyanochroic
-Cyanocitta
-cyanocrystallin
-cyanoderma
-cyanogen
-cyanogenesis
-cyanogenetic
-cyanogenic
-cyanoguanidine
-cyanohermidin
-cyanohydrin
-cyanol
-cyanole
-cyanomaclurin
-cyanometer
-cyanomethaemoglobin
-cyanomethemoglobin
-cyanometric
-cyanometry
-cyanopathic
-cyanopathy
-cyanophile
-cyanophilous
-cyanophoric
-cyanophose
-Cyanophyceae
-cyanophycean
-cyanophyceous
-cyanophycin
-cyanopia
-cyanoplastid
-cyanoplatinite
-cyanoplatinous
-cyanopsia
-cyanose
-cyanosed
-cyanosis
-Cyanospiza
-cyanotic
-cyanotrichite
-cyanotype
-cyanuramide
-cyanurate
-cyanuret
-cyanuric
-cyanurine
-cyanus
-cyaphenine
-cyath
-Cyathaspis
-Cyathea
-Cyatheaceae
-cyatheaceous
-cyathiform
-cyathium
-cyathoid
-cyatholith
-Cyathophyllidae
-cyathophylline
-cyathophylloid
-Cyathophyllum
-cyathos
-cyathozooid
-cyathus
-cybernetic
-cyberneticist
-cybernetics
-Cybister
-cycad
-Cycadaceae
-cycadaceous
-Cycadales
-cycadean
-cycadeoid
-Cycadeoidea
-cycadeous
-cycadiform
-cycadlike
-cycadofilicale
-Cycadofilicales
-Cycadofilices
-cycadofilicinean
-Cycadophyta
-Cycas
-Cycladic
-cyclamen
-cyclamin
-cyclamine
-cyclammonium
-cyclane
-Cyclanthaceae
-cyclanthaceous
-Cyclanthales
-Cyclanthus
-cyclar
-cyclarthrodial
-cyclarthrsis
-cyclas
-cycle
-cyclecar
-cycledom
-cyclene
-cycler
-cyclesmith
-Cycliae
-cyclian
-cyclic
-cyclical
-cyclically
-cyclicism
-cyclide
-cycling
-cyclism
-cyclist
-cyclistic
-cyclitic
-cyclitis
-cyclization
-cyclize
-cycloalkane
-Cyclobothra
-cyclobutane
-cyclocoelic
-cyclocoelous
-Cycloconium
-cyclodiolefin
-cycloganoid
-Cycloganoidei
-cyclogram
-cyclograph
-cyclographer
-cycloheptane
-cycloheptanone
-cyclohexane
-cyclohexanol
-cyclohexanone
-cyclohexene
-cyclohexyl
-cycloid
-cycloidal
-cycloidally
-cycloidean
-Cycloidei
-cycloidian
-cycloidotrope
-cyclolith
-Cycloloma
-cyclomania
-cyclometer
-cyclometric
-cyclometrical
-cyclometry
-Cyclomyaria
-cyclomyarian
-cyclonal
-cyclone
-cyclonic
-cyclonical
-cyclonically
-cyclonist
-cyclonite
-cyclonologist
-cyclonology
-cyclonometer
-cyclonoscope
-cycloolefin
-cycloparaffin
-cyclope
-Cyclopean
-cyclopean
-cyclopedia
-cyclopedic
-cyclopedical
-cyclopedically
-cyclopedist
-cyclopentadiene
-cyclopentane
-cyclopentanone
-cyclopentene
-Cyclopes
-cyclopes
-cyclophoria
-cyclophoric
-Cyclophorus
-cyclophrenia
-cyclopia
-Cyclopic
-cyclopism
-cyclopite
-cycloplegia
-cycloplegic
-cyclopoid
-cyclopropane
-Cyclops
-Cyclopteridae
-cyclopteroid
-cyclopterous
-cyclopy
-cyclorama
-cycloramic
-Cyclorrhapha
-cyclorrhaphous
-cycloscope
-cyclose
-cyclosis
-cyclospermous
-Cyclospondyli
-cyclospondylic
-cyclospondylous
-Cyclosporales
-Cyclosporeae
-Cyclosporinae
-cyclosporous
-Cyclostoma
-Cyclostomata
-cyclostomate
-Cyclostomatidae
-cyclostomatous
-cyclostome
-Cyclostomes
-Cyclostomi
-Cyclostomidae
-cyclostomous
-cyclostrophic
-cyclostyle
-Cyclotella
-cyclothem
-cyclothure
-cyclothurine
-Cyclothurus
-cyclothyme
-cyclothymia
-cyclothymiac
-cyclothymic
-cyclotome
-cyclotomic
-cyclotomy
-Cyclotosaurus
-cyclotron
-cyclovertebral
-cyclus
-Cydippe
-cydippian
-cydippid
-Cydippida
-Cydonia
-Cydonian
-cydonium
-cyesiology
-cyesis
-cygneous
-cygnet
-Cygnid
-Cygninae
-cygnine
-Cygnus
-cyke
-cylinder
-cylindered
-cylinderer
-cylinderlike
-cylindraceous
-cylindrarthrosis
-Cylindrella
-cylindrelloid
-cylindrenchyma
-cylindric
-cylindrical
-cylindricality
-cylindrically
-cylindricalness
-cylindricity
-cylindricule
-cylindriform
-cylindrite
-cylindrocellular
-cylindrocephalic
-cylindroconical
-cylindroconoidal
-cylindrocylindric
-cylindrodendrite
-cylindrograph
-cylindroid
-cylindroidal
-cylindroma
-cylindromatous
-cylindrometric
-cylindroogival
-Cylindrophis
-Cylindrosporium
-cylindruria
-cylix
-Cyllenian
-Cyllenius
-cyllosis
-cyma
-cymagraph
-cymaphen
-cymaphyte
-cymaphytic
-cymaphytism
-cymar
-cymation
-cymatium
-cymba
-cymbaeform
-cymbal
-Cymbalaria
-cymbaleer
-cymbaler
-cymbaline
-cymbalist
-cymballike
-cymbalo
-cymbalon
-cymbate
-Cymbella
-cymbiform
-Cymbium
-cymbling
-cymbocephalic
-cymbocephalous
-cymbocephaly
-Cymbopogon
-cyme
-cymelet
-cymene
-cymiferous
-cymling
-Cymodoceaceae
-cymogene
-cymograph
-cymographic
-cymoid
-Cymoidium
-cymometer
-cymophane
-cymophanous
-cymophenol
-cymoscope
-cymose
-cymosely
-cymotrichous
-cymotrichy
-cymous
-Cymraeg
-Cymric
-Cymry
-cymule
-cymulose
-cynanche
-Cynanchum
-cynanthropy
-Cynara
-cynaraceous
-cynarctomachy
-cynareous
-cynaroid
-cynebot
-cynegetic
-cynegetics
-cynegild
-cynhyena
-Cynias
-cyniatria
-cyniatrics
-cynic
-cynical
-cynically
-cynicalness
-cynicism
-cynicist
-cynipid
-Cynipidae
-cynipidous
-cynipoid
-Cynipoidea
-Cynips
-cynism
-cynocephalic
-cynocephalous
-cynocephalus
-cynoclept
-Cynocrambaceae
-cynocrambaceous
-Cynocrambe
-Cynodon
-cynodont
-Cynodontia
-Cynogale
-cynogenealogist
-cynogenealogy
-Cynoglossum
-Cynognathus
-cynography
-cynoid
-Cynoidea
-cynology
-Cynomoriaceae
-cynomoriaceous
-Cynomorium
-Cynomorpha
-cynomorphic
-cynomorphous
-Cynomys
-cynophile
-cynophilic
-cynophilist
-cynophobe
-cynophobia
-Cynopithecidae
-cynopithecoid
-cynopodous
-cynorrhodon
-Cynosarges
-Cynoscion
-Cynosura
-cynosural
-cynosure
-Cynosurus
-cynotherapy
-Cynoxylon
-Cynthia
-Cynthian
-Cynthiidae
-Cynthius
-cyp
-Cyperaceae
-cyperaceous
-Cyperus
-cyphella
-cyphellate
-Cyphomandra
-cyphonautes
-cyphonism
-Cypraea
-cypraeid
-Cypraeidae
-cypraeiform
-cypraeoid
-cypre
-cypres
-cypress
-cypressed
-cypressroot
-Cypria
-Cyprian
-Cyprididae
-Cypridina
-Cypridinidae
-cypridinoid
-Cyprina
-cyprine
-cyprinid
-Cyprinidae
-cypriniform
-cyprinine
-cyprinodont
-Cyprinodontes
-Cyprinodontidae
-cyprinodontoid
-cyprinoid
-Cyprinoidea
-cyprinoidean
-Cyprinus
-Cypriote
-Cypripedium
-Cypris
-cypsela
-Cypseli
-Cypselid
-Cypselidae
-cypseliform
-Cypseliformes
-cypseline
-cypseloid
-cypselomorph
-Cypselomorphae
-cypselomorphic
-cypselous
-Cypselus
-cyptozoic
-Cyrano
-Cyrenaic
-Cyrenaicism
-Cyrenian
-Cyril
-Cyrilla
-Cyrillaceae
-cyrillaceous
-Cyrillian
-Cyrillianism
-Cyrillic
-cyriologic
-cyriological
-Cyrtandraceae
-Cyrtidae
-cyrtoceracone
-Cyrtoceras
-cyrtoceratite
-cyrtoceratitic
-cyrtograph
-cyrtolite
-cyrtometer
-Cyrtomium
-cyrtopia
-cyrtosis
-Cyrus
-cyrus
-cyst
-cystadenoma
-cystadenosarcoma
-cystal
-cystalgia
-cystamine
-cystaster
-cystatrophia
-cystatrophy
-cystectasia
-cystectasy
-cystectomy
-cysted
-cysteine
-cysteinic
-cystelcosis
-cystenchyma
-cystenchymatous
-cystencyte
-cysterethism
-cystic
-cysticarpic
-cysticarpium
-cysticercoid
-cysticercoidal
-cysticercosis
-cysticercus
-cysticolous
-cystid
-Cystidea
-cystidean
-cystidicolous
-cystidium
-cystiferous
-cystiform
-cystigerous
-Cystignathidae
-cystignathine
-cystine
-cystinuria
-cystirrhea
-cystis
-cystitis
-cystitome
-cystoadenoma
-cystocarcinoma
-cystocarp
-cystocarpic
-cystocele
-cystocolostomy
-cystocyte
-cystodynia
-cystoelytroplasty
-cystoenterocele
-cystoepiplocele
-cystoepithelioma
-cystofibroma
-Cystoflagellata
-cystoflagellate
-cystogenesis
-cystogenous
-cystogram
-cystoid
-Cystoidea
-cystoidean
-cystolith
-cystolithectomy
-cystolithiasis
-cystolithic
-cystoma
-cystomatous
-cystomorphous
-cystomyoma
-cystomyxoma
-Cystonectae
-cystonectous
-cystonephrosis
-cystoneuralgia
-cystoparalysis
-Cystophora
-cystophore
-cystophotography
-cystophthisis
-cystoplasty
-cystoplegia
-cystoproctostomy
-Cystopteris
-cystoptosis
-Cystopus
-cystopyelitis
-cystopyelography
-cystopyelonephritis
-cystoradiography
-cystorrhagia
-cystorrhaphy
-cystorrhea
-cystosarcoma
-cystoschisis
-cystoscope
-cystoscopic
-cystoscopy
-cystose
-cystospasm
-cystospastic
-cystospore
-cystostomy
-cystosyrinx
-cystotome
-cystotomy
-cystotrachelotomy
-cystoureteritis
-cystourethritis
-cystous
-cytase
-cytasic
-Cytherea
-Cytherean
-Cytherella
-Cytherellidae
-Cytinaceae
-cytinaceous
-Cytinus
-cytioderm
-cytisine
-Cytisus
-cytitis
-cytoblast
-cytoblastema
-cytoblastemal
-cytoblastematous
-cytoblastemic
-cytoblastemous
-cytochemistry
-cytochrome
-cytochylema
-cytocide
-cytoclasis
-cytoclastic
-cytococcus
-cytocyst
-cytode
-cytodendrite
-cytoderm
-cytodiagnosis
-cytodieresis
-cytodieretic
-cytogamy
-cytogene
-cytogenesis
-cytogenetic
-cytogenetical
-cytogenetically
-cytogeneticist
-cytogenetics
-cytogenic
-cytogenous
-cytogeny
-cytoglobin
-cytohyaloplasm
-cytoid
-cytokinesis
-cytolist
-cytologic
-cytological
-cytologically
-cytologist
-cytology
-cytolymph
-cytolysin
-cytolysis
-cytolytic
-cytoma
-cytomere
-cytometer
-cytomicrosome
-cytomitome
-cytomorphosis
-cyton
-cytoparaplastin
-cytopathologic
-cytopathological
-cytopathologically
-cytopathology
-Cytophaga
-cytophagous
-cytophagy
-cytopharynx
-cytophil
-cytophysics
-cytophysiology
-cytoplasm
-cytoplasmic
-cytoplast
-cytoplastic
-cytoproct
-cytopyge
-cytoreticulum
-cytoryctes
-cytosine
-cytosome
-Cytospora
-Cytosporina
-cytost
-cytostomal
-cytostome
-cytostroma
-cytostromatic
-cytotactic
-cytotaxis
-cytotoxic
-cytotoxin
-cytotrophoblast
-cytotrophy
-cytotropic
-cytotropism
-cytozoic
-cytozoon
-cytozymase
-cytozyme
-cytula
-Cyzicene
-cyzicene
-czar
-czardas
-czardom
-czarevitch
-czarevna
-czarian
-czaric
-czarina
-czarinian
-czarish
-czarism
-czarist
-czaristic
-czaritza
-czarowitch
-czarowitz
-czarship
-Czech
-Czechic
-Czechish
-Czechization
-Czechoslovak
-Czechoslovakian
-D
-d
-da
-daalder
-dab
-dabb
-dabba
-dabber
-dabble
-dabbler
-dabbling
-dabblingly
-dabblingness
-dabby
-dabchick
-Dabih
-Dabitis
-dablet
-daboia
-daboya
-dabster
-dace
-Dacelo
-Daceloninae
-dacelonine
-dachshound
-dachshund
-Dacian
-dacite
-dacitic
-dacker
-dacoit
-dacoitage
-dacoity
-dacryadenalgia
-dacryadenitis
-dacryagogue
-dacrycystalgia
-Dacrydium
-dacryelcosis
-dacryoadenalgia
-dacryoadenitis
-dacryoblenorrhea
-dacryocele
-dacryocyst
-dacryocystalgia
-dacryocystitis
-dacryocystoblennorrhea
-dacryocystocele
-dacryocystoptosis
-dacryocystorhinostomy
-dacryocystosyringotomy
-dacryocystotome
-dacryocystotomy
-dacryohelcosis
-dacryohemorrhea
-dacryolite
-dacryolith
-dacryolithiasis
-dacryoma
-dacryon
-dacryops
-dacryopyorrhea
-dacryopyosis
-dacryosolenitis
-dacryostenosis
-dacryosyrinx
-dacryuria
-Dactyl
-dactyl
-dactylar
-dactylate
-dactylic
-dactylically
-dactylioglyph
-dactylioglyphic
-dactylioglyphist
-dactylioglyphtic
-dactylioglyphy
-dactyliographer
-dactyliographic
-dactyliography
-dactyliology
-dactyliomancy
-dactylion
-dactyliotheca
-Dactylis
-dactylist
-dactylitic
-dactylitis
-dactylogram
-dactylograph
-dactylographic
-dactylography
-dactyloid
-dactylology
-dactylomegaly
-dactylonomy
-dactylopatagium
-Dactylopius
-dactylopodite
-dactylopore
-Dactylopteridae
-Dactylopterus
-dactylorhiza
-dactyloscopic
-dactyloscopy
-dactylose
-dactylosternal
-dactylosymphysis
-dactylotheca
-dactylous
-dactylozooid
-dactylus
-Dacus
-dacyorrhea
-dad
-Dada
-dada
-Dadaism
-Dadaist
-dadap
-Dadayag
-dadder
-daddle
-daddock
-daddocky
-daddy
-daddynut
-dade
-dadenhudd
-dado
-Dadoxylon
-Dadu
-daduchus
-Dadupanthi
-dae
-Daedal
-daedal
-Daedalea
-Daedalean
-Daedalian
-Daedalic
-Daedalidae
-Daedalist
-daedaloid
-Daedalus
-daemon
-Daemonelix
-daemonic
-daemonurgist
-daemonurgy
-daemony
-daer
-daff
-daffery
-daffing
-daffish
-daffle
-daffodil
-daffodilly
-daffy
-daffydowndilly
-Dafla
-daft
-daftberry
-daftlike
-daftly
-daftness
-dag
-dagaba
-dagame
-dagassa
-Dagbamba
-Dagbane
-dagesh
-Dagestan
-dagga
-dagger
-daggerbush
-daggered
-daggerlike
-daggerproof
-daggers
-daggle
-daggletail
-daggletailed
-daggly
-daggy
-daghesh
-daglock
-Dagmar
-Dago
-dagoba
-Dagomba
-dags
-Daguerrean
-daguerreotype
-daguerreotyper
-daguerreotypic
-daguerreotypist
-daguerreotypy
-dah
-dahabeah
-Dahlia
-Dahoman
-Dahomeyan
-dahoon
-Daibutsu
-daidle
-daidly
-Daijo
-daiker
-daikon
-Dail
-Dailamite
-dailiness
-daily
-daimen
-daimiate
-daimio
-daimon
-daimonic
-daimonion
-daimonistic
-daimonology
-dain
-daincha
-dainteth
-daintify
-daintihood
-daintily
-daintiness
-daintith
-dainty
-Daira
-daira
-dairi
-dairy
-dairying
-dairymaid
-dairyman
-dairywoman
-dais
-daisied
-daisy
-daisybush
-daitya
-daiva
-dak
-daker
-Dakhini
-dakir
-Dakota
-daktylon
-daktylos
-dal
-dalar
-Dalarnian
-Dalbergia
-Dalcassian
-Dale
-dale
-Dalea
-Dalecarlian
-daleman
-daler
-dalesfolk
-dalesman
-dalespeople
-daleswoman
-daleth
-dali
-Dalibarda
-dalk
-dallack
-dalle
-dalles
-dalliance
-dallier
-dally
-dallying
-dallyingly
-Dalmania
-Dalmanites
-Dalmatian
-Dalmatic
-dalmatic
-Dalradian
-dalt
-dalteen
-Dalton
-dalton
-Daltonian
-Daltonic
-Daltonism
-Daltonist
-dam
-dama
-damage
-damageability
-damageable
-damageableness
-damageably
-damagement
-damager
-damages
-damagingly
-daman
-Damara
-Damascene
-damascene
-damascened
-damascener
-damascenine
-Damascus
-damask
-damaskeen
-damasse
-damassin
-Damayanti
-dambonitol
-dambose
-dambrod
-dame
-damenization
-damewort
-Damgalnunna
-Damia
-damiana
-Damianist
-damie
-damier
-damine
-damkjernite
-damlike
-dammar
-Dammara
-damme
-dammer
-dammish
-damn
-damnability
-damnable
-damnableness
-damnably
-damnation
-damnatory
-damned
-damner
-damnification
-damnify
-Damnii
-damning
-damningly
-damningness
-damnonians
-Damnonii
-damnous
-damnously
-Damoclean
-Damocles
-Damoetas
-damoiseau
-Damon
-Damone
-damonico
-damourite
-damp
-dampang
-damped
-dampen
-dampener
-damper
-damping
-dampish
-dampishly
-dampishness
-damply
-dampness
-dampproof
-dampproofer
-dampproofing
-dampy
-damsel
-damselfish
-damselhood
-damson
-Dan
-dan
-Dana
-Danaan
-Danagla
-Danai
-Danaid
-danaid
-Danaidae
-danaide
-Danaidean
-Danainae
-danaine
-Danais
-danaite
-Danakil
-danalite
-danburite
-dancalite
-dance
-dancer
-danceress
-dancery
-dancette
-dancing
-dancingly
-dand
-danda
-dandelion
-dander
-dandiacal
-dandiacally
-dandically
-dandification
-dandify
-dandilly
-dandily
-dandiprat
-dandizette
-dandle
-dandler
-dandling
-dandlingly
-dandruff
-dandruffy
-dandy
-dandydom
-dandyish
-dandyism
-dandyize
-dandyling
-Dane
-Daneball
-Daneflower
-Danegeld
-Danelaw
-Daneweed
-Danewort
-dang
-danger
-dangerful
-dangerfully
-dangerless
-dangerous
-dangerously
-dangerousness
-dangersome
-dangle
-dangleberry
-danglement
-dangler
-danglin
-dangling
-danglingly
-Dani
-Danian
-Danic
-danicism
-Daniel
-Daniele
-Danielic
-Danielle
-Daniglacial
-danio
-Danish
-Danism
-Danite
-Danization
-Danize
-dank
-Dankali
-dankish
-dankishness
-dankly
-dankness
-danli
-Dannebrog
-dannemorite
-danner
-Dannie
-dannock
-Danny
-danoranja
-dansant
-danseuse
-danta
-Dantean
-Dantesque
-Danthonia
-Dantist
-Dantology
-Dantomania
-danton
-Dantonesque
-Dantonist
-Dantophilist
-Dantophily
-Danube
-Danubian
-Danuri
-Danzig
-Danziger
-dao
-daoine
-dap
-Dapedium
-Dapedius
-Daphnaceae
-Daphne
-Daphnean
-Daphnephoria
-daphnetin
-Daphnia
-daphnin
-daphnioid
-Daphnis
-daphnoid
-dapicho
-dapico
-dapifer
-dapper
-dapperling
-dapperly
-dapperness
-dapple
-dappled
-dar
-darabukka
-darac
-daraf
-Darapti
-darat
-darbha
-darby
-Darbyism
-Darbyite
-Darci
-Dard
-Dardan
-dardanarius
-Dardani
-dardanium
-dardaol
-Dardic
-Dardistan
-dare
-dareall
-daredevil
-daredevilism
-daredevilry
-daredeviltry
-dareful
-Daren
-darer
-Dares
-daresay
-darg
-dargah
-darger
-Darghin
-Dargo
-dargsman
-dargue
-dari
-daribah
-daric
-Darien
-Darii
-Darin
-daring
-daringly
-daringness
-dariole
-Darius
-Darjeeling
-dark
-darken
-darkener
-darkening
-darkful
-darkhearted
-darkheartedness
-darkish
-darkishness
-darkle
-darkling
-darklings
-darkly
-darkmans
-darkness
-darkroom
-darkskin
-darksome
-darksomeness
-darky
-darling
-darlingly
-darlingness
-Darlingtonia
-darn
-darnation
-darned
-darnel
-darner
-darnex
-darning
-daroga
-daroo
-darr
-darrein
-Darrell
-Darren
-Darryl
-darshana
-Darsonval
-Darsonvalism
-darst
-dart
-Dartagnan
-dartars
-dartboard
-darter
-darting
-dartingly
-dartingness
-dartle
-dartlike
-dartman
-Dartmoor
-dartoic
-dartoid
-dartos
-dartre
-dartrose
-dartrous
-darts
-dartsman
-Darwinian
-Darwinical
-Darwinically
-Darwinism
-Darwinist
-Darwinistic
-Darwinite
-Darwinize
-Daryl
-darzee
-das
-Daschagga
-dash
-dashboard
-dashed
-dashedly
-dashee
-dasheen
-dasher
-dashing
-dashingly
-dashmaker
-Dashnak
-Dashnakist
-Dashnaktzutiun
-dashplate
-dashpot
-dashwheel
-dashy
-dasi
-Dasiphora
-dasnt
-dassie
-dassy
-dastard
-dastardize
-dastardliness
-dastardly
-dastur
-dasturi
-Dasya
-Dasyatidae
-Dasyatis
-Dasycladaceae
-dasycladaceous
-Dasylirion
-dasymeter
-dasypaedal
-dasypaedes
-dasypaedic
-Dasypeltis
-dasyphyllous
-Dasypodidae
-dasypodoid
-Dasyprocta
-Dasyproctidae
-dasyproctine
-Dasypus
-Dasystephana
-dasyure
-Dasyuridae
-dasyurine
-dasyuroid
-Dasyurus
-Dasyus
-data
-datable
-datableness
-datably
-dataria
-datary
-datch
-datcha
-date
-dateless
-datemark
-dater
-datil
-dating
-dation
-Datisca
-Datiscaceae
-datiscaceous
-datiscetin
-datiscin
-datiscoside
-Datisi
-Datism
-datival
-dative
-datively
-dativogerundial
-datolite
-datolitic
-dattock
-datum
-Datura
-daturic
-daturism
-daub
-daube
-Daubentonia
-Daubentoniidae
-dauber
-daubery
-daubing
-daubingly
-daubreeite
-daubreelite
-daubster
-dauby
-Daucus
-daud
-daughter
-daughterhood
-daughterkin
-daughterless
-daughterlike
-daughterliness
-daughterling
-daughterly
-daughtership
-Daulias
-daunch
-dauncy
-Daunii
-daunt
-daunter
-daunting
-dauntingly
-dauntingness
-dauntless
-dauntlessly
-dauntlessness
-daunton
-dauphin
-dauphine
-dauphiness
-Daur
-Dauri
-daut
-dautie
-dauw
-davach
-Davallia
-Dave
-daven
-davenport
-daver
-daverdy
-David
-Davidian
-Davidic
-Davidical
-Davidist
-davidsonite
-Daviesia
-daviesite
-davit
-davoch
-Davy
-davy
-davyne
-daw
-dawdle
-dawdler
-dawdling
-dawdlingly
-dawdy
-dawish
-dawkin
-Dawn
-dawn
-dawning
-dawnlight
-dawnlike
-dawnstreak
-dawnward
-dawny
-Dawson
-Dawsonia
-Dawsoniaceae
-dawsoniaceous
-dawsonite
-dawtet
-dawtit
-dawut
-day
-dayabhaga
-Dayakker
-dayal
-daybeam
-dayberry
-dayblush
-daybook
-daybreak
-daydawn
-daydream
-daydreamer
-daydreamy
-daydrudge
-dayflower
-dayfly
-daygoing
-dayless
-daylight
-daylit
-daylong
-dayman
-daymare
-daymark
-dayroom
-days
-dayshine
-daysman
-dayspring
-daystar
-daystreak
-daytale
-daytide
-daytime
-daytimes
-dayward
-daywork
-dayworker
-daywrit
-Daza
-daze
-dazed
-dazedly
-dazedness
-dazement
-dazingly
-dazy
-dazzle
-dazzlement
-dazzler
-dazzlingly
-de
-deacetylate
-deacetylation
-deacidification
-deacidify
-deacon
-deaconal
-deaconate
-deaconess
-deaconhood
-deaconize
-deaconry
-deaconship
-deactivate
-deactivation
-dead
-deadbeat
-deadborn
-deadcenter
-deaden
-deadener
-deadening
-deader
-deadeye
-deadfall
-deadhead
-deadheadism
-deadhearted
-deadheartedly
-deadheartedness
-deadhouse
-deading
-deadish
-deadishly
-deadishness
-deadlatch
-deadlight
-deadlily
-deadline
-deadliness
-deadlock
-deadly
-deadman
-deadmelt
-deadness
-deadpan
-deadpay
-deadtongue
-deadwood
-deadwort
-deaerate
-deaeration
-deaerator
-deaf
-deafen
-deafening
-deafeningly
-deafforest
-deafforestation
-deafish
-deafly
-deafness
-deair
-deal
-dealable
-dealate
-dealated
-dealation
-dealbate
-dealbation
-dealbuminize
-dealcoholist
-dealcoholization
-dealcoholize
-dealer
-dealerdom
-dealership
-dealfish
-dealing
-dealkalize
-dealkylate
-dealkylation
-dealt
-deambulation
-deambulatory
-deamidase
-deamidate
-deamidation
-deamidization
-deamidize
-deaminase
-deaminate
-deamination
-deaminization
-deaminize
-deammonation
-Dean
-dean
-deanathematize
-deaner
-deanery
-deaness
-deanimalize
-deanship
-deanthropomorphic
-deanthropomorphism
-deanthropomorphization
-deanthropomorphize
-deappetizing
-deaquation
-dear
-dearborn
-dearie
-dearly
-dearness
-dearomatize
-dearsenicate
-dearsenicator
-dearsenicize
-dearth
-dearthfu
-dearticulation
-dearworth
-dearworthily
-dearworthiness
-deary
-deash
-deasil
-deaspirate
-deaspiration
-deassimilation
-death
-deathbed
-deathblow
-deathday
-deathful
-deathfully
-deathfulness
-deathify
-deathin
-deathiness
-deathless
-deathlessly
-deathlessness
-deathlike
-deathliness
-deathling
-deathly
-deathroot
-deathshot
-deathsman
-deathtrap
-deathward
-deathwards
-deathwatch
-deathweed
-deathworm
-deathy
-deave
-deavely
-Deb
-deb
-debacle
-debadge
-debamboozle
-debar
-debarbarization
-debarbarize
-debark
-debarkation
-debarkment
-debarment
-debarrance
-debarrass
-debarration
-debase
-debasedness
-debasement
-debaser
-debasingly
-debatable
-debate
-debateful
-debatefully
-debatement
-debater
-debating
-debatingly
-debauch
-debauched
-debauchedly
-debauchedness
-debauchee
-debaucher
-debauchery
-debauchment
-Debbie
-Debby
-debby
-debeige
-debellate
-debellation
-debellator
-deben
-debenture
-debentured
-debenzolize
-Debi
-debile
-debilissima
-debilitant
-debilitate
-debilitated
-debilitation
-debilitative
-debility
-debind
-debit
-debiteuse
-debituminization
-debituminize
-deblaterate
-deblateration
-deboistly
-deboistness
-debonair
-debonaire
-debonairity
-debonairly
-debonairness
-debonnaire
-Deborah
-debord
-debordment
-debosh
-deboshed
-debouch
-debouchment
-debride
-debrief
-debris
-debrominate
-debromination
-debruise
-debt
-debtee
-debtful
-debtless
-debtor
-debtorship
-debullition
-debunk
-debunker
-debunkment
-debus
-Debussyan
-Debussyanize
-debut
-debutant
-debutante
-decachord
-decad
-decadactylous
-decadal
-decadally
-decadarch
-decadarchy
-decadary
-decadation
-decade
-decadence
-decadency
-decadent
-decadentism
-decadently
-decadescent
-decadianome
-decadic
-decadist
-decadrachm
-decadrachma
-decaesarize
-decaffeinate
-decaffeinize
-decafid
-decagon
-decagonal
-decagram
-decagramme
-decahedral
-decahedron
-decahydrate
-decahydrated
-decahydronaphthalene
-Decaisnea
-decal
-decalcification
-decalcifier
-decalcify
-decalcomania
-decalcomaniac
-decalescence
-decalescent
-Decalin
-decaliter
-decalitre
-decalobate
-Decalogist
-Decalogue
-decalvant
-decalvation
-decameral
-Decameron
-Decameronic
-decamerous
-decameter
-decametre
-decamp
-decampment
-decan
-decanal
-decanally
-decanate
-decane
-decangular
-decani
-decanically
-decannulation
-decanonization
-decanonize
-decant
-decantate
-decantation
-decanter
-decantherous
-decap
-decapetalous
-decaphyllous
-decapitable
-decapitalization
-decapitalize
-decapitate
-decapitation
-decapitator
-decapod
-Decapoda
-decapodal
-decapodan
-decapodiform
-decapodous
-decapper
-decapsulate
-decapsulation
-decarbonate
-decarbonator
-decarbonization
-decarbonize
-decarbonized
-decarbonizer
-decarboxylate
-decarboxylation
-decarboxylization
-decarboxylize
-decarburation
-decarburization
-decarburize
-decarch
-decarchy
-decardinalize
-decare
-decarhinus
-decarnate
-decarnated
-decart
-decasemic
-decasepalous
-decaspermal
-decaspermous
-decast
-decastellate
-decastere
-decastich
-decastyle
-decasualization
-decasualize
-decasyllabic
-decasyllable
-decasyllabon
-decate
-decathlon
-decatholicize
-decatize
-decatizer
-decatoic
-decator
-decatyl
-decaudate
-decaudation
-decay
-decayable
-decayed
-decayedness
-decayer
-decayless
-decease
-deceased
-decedent
-deceit
-deceitful
-deceitfully
-deceitfulness
-deceivability
-deceivable
-deceivableness
-deceivably
-deceive
-deceiver
-deceiving
-deceivingly
-decelerate
-deceleration
-decelerator
-decelerometer
-December
-Decemberish
-Decemberly
-Decembrist
-decemcostate
-decemdentate
-decemfid
-decemflorous
-decemfoliate
-decemfoliolate
-decemjugate
-decemlocular
-decempartite
-decempeda
-decempedal
-decempedate
-decempennate
-decemplex
-decemplicate
-decempunctate
-decemstriate
-decemuiri
-decemvir
-decemviral
-decemvirate
-decemvirship
-decenary
-decence
-decency
-decene
-decennal
-decennary
-decennia
-decenniad
-decennial
-decennially
-decennium
-decennoval
-decent
-decenter
-decently
-decentness
-decentralism
-decentralist
-decentralization
-decentralize
-decentration
-decentre
-decenyl
-decephalization
-deceptibility
-deceptible
-deception
-deceptious
-deceptiously
-deceptitious
-deceptive
-deceptively
-deceptiveness
-deceptivity
-decerebrate
-decerebration
-decerebrize
-decern
-decerniture
-decernment
-decess
-decession
-dechemicalization
-dechemicalize
-dechenite
-Dechlog
-dechlore
-dechlorination
-dechoralize
-dechristianization
-dechristianize
-Decian
-deciare
-deciatine
-decibel
-deciceronize
-decidable
-decide
-decided
-decidedly
-decidedness
-decider
-decidingly
-decidua
-decidual
-deciduary
-Deciduata
-deciduate
-deciduitis
-deciduoma
-deciduous
-deciduously
-deciduousness
-decigram
-decigramme
-decil
-decile
-deciliter
-decillion
-decillionth
-decima
-decimal
-decimalism
-decimalist
-decimalization
-decimalize
-decimally
-decimate
-decimation
-decimator
-decimestrial
-decimeter
-decimolar
-decimole
-decimosexto
-Decimus
-decinormal
-decipher
-decipherability
-decipherable
-decipherably
-decipherer
-decipherment
-decipium
-decipolar
-decision
-decisional
-decisive
-decisively
-decisiveness
-decistere
-decitizenize
-Decius
-decivilization
-decivilize
-deck
-decke
-decked
-deckel
-decker
-deckhead
-deckhouse
-deckie
-decking
-deckle
-deckload
-deckswabber
-declaim
-declaimant
-declaimer
-declamation
-declamatoriness
-declamatory
-declarable
-declarant
-declaration
-declarative
-declaratively
-declarator
-declaratorily
-declaratory
-declare
-declared
-declaredly
-declaredness
-declarer
-declass
-declassicize
-declassify
-declension
-declensional
-declensionally
-declericalize
-declimatize
-declinable
-declinal
-declinate
-declination
-declinational
-declinatory
-declinature
-decline
-declined
-declinedness
-decliner
-declinograph
-declinometer
-declivate
-declive
-declivitous
-declivity
-declivous
-declutch
-decoagulate
-decoagulation
-decoat
-decocainize
-decoct
-decoctible
-decoction
-decoctive
-decoctum
-decode
-Decodon
-decohere
-decoherence
-decoherer
-decohesion
-decoic
-decoke
-decollate
-decollated
-decollation
-decollator
-decolletage
-decollete
-decolor
-decolorant
-decolorate
-decoloration
-decolorimeter
-decolorization
-decolorize
-decolorizer
-decolour
-decommission
-decompensate
-decompensation
-decomplex
-decomponible
-decomposability
-decomposable
-decompose
-decomposed
-decomposer
-decomposite
-decomposition
-decomposure
-decompound
-decompoundable
-decompoundly
-decompress
-decompressing
-decompression
-decompressive
-deconcatenate
-deconcentrate
-deconcentration
-deconcentrator
-decongestive
-deconsecrate
-deconsecration
-deconsider
-deconsideration
-decontaminate
-decontamination
-decontrol
-deconventionalize
-decopperization
-decopperize
-decorability
-decorable
-decorably
-decorament
-decorate
-decorated
-decoration
-decorationist
-decorative
-decoratively
-decorativeness
-decorator
-decoratory
-decorist
-decorous
-decorously
-decorousness
-decorrugative
-decorticate
-decortication
-decorticator
-decorticosis
-decorum
-decostate
-decoy
-decoyer
-decoyman
-decrassify
-decream
-decrease
-decreaseless
-decreasing
-decreasingly
-decreation
-decreative
-decree
-decreeable
-decreement
-decreer
-decreet
-decrement
-decrementless
-decremeter
-decrepit
-decrepitate
-decrepitation
-decrepitly
-decrepitness
-decrepitude
-decrescence
-decrescendo
-decrescent
-decretal
-decretalist
-decrete
-decretist
-decretive
-decretively
-decretorial
-decretorily
-decretory
-decretum
-decrew
-decrial
-decried
-decrier
-decrown
-decrudescence
-decrustation
-decry
-decrystallization
-decubital
-decubitus
-decultivate
-deculturate
-decuman
-decumana
-decumanus
-Decumaria
-decumary
-decumbence
-decumbency
-decumbent
-decumbently
-decumbiture
-decuple
-decuplet
-decuria
-decurion
-decurionate
-decurrence
-decurrency
-decurrent
-decurrently
-decurring
-decursion
-decursive
-decursively
-decurtate
-decurvation
-decurvature
-decurve
-decury
-decus
-decussate
-decussated
-decussately
-decussation
-decussis
-decussorium
-decyl
-decylene
-decylenic
-decylic
-decyne
-Dedan
-Dedanim
-Dedanite
-dedecorate
-dedecoration
-dedecorous
-dedendum
-dedentition
-dedicant
-dedicate
-dedicatee
-dedication
-dedicational
-dedicative
-dedicator
-dedicatorial
-dedicatorily
-dedicatory
-dedicature
-dedifferentiate
-dedifferentiation
-dedimus
-deditician
-dediticiancy
-dedition
-dedo
-dedoggerelize
-dedogmatize
-dedolation
-deduce
-deducement
-deducibility
-deducible
-deducibleness
-deducibly
-deducive
-deduct
-deductible
-deduction
-deductive
-deductively
-deductory
-deduplication
-dee
-deed
-deedbox
-deedeed
-deedful
-deedfully
-deedily
-deediness
-deedless
-deedy
-deem
-deemer
-deemie
-deemster
-deemstership
-deep
-deepen
-deepener
-deepening
-deepeningly
-Deepfreeze
-deeping
-deepish
-deeplier
-deeply
-deepmost
-deepmouthed
-deepness
-deepsome
-deepwater
-deepwaterman
-deer
-deerberry
-deerdog
-deerdrive
-deerfood
-deerhair
-deerherd
-deerhorn
-deerhound
-deerlet
-deermeat
-deerskin
-deerstalker
-deerstalking
-deerstand
-deerstealer
-deertongue
-deerweed
-deerwood
-deeryard
-deevey
-deevilick
-deface
-defaceable
-defacement
-defacer
-defacing
-defacingly
-defalcate
-defalcation
-defalcator
-defalk
-defamation
-defamatory
-defame
-defamed
-defamer
-defamingly
-defassa
-defat
-default
-defaultant
-defaulter
-defaultless
-defaulture
-defeasance
-defeasanced
-defease
-defeasibility
-defeasible
-defeasibleness
-defeat
-defeater
-defeatism
-defeatist
-defeatment
-defeature
-defecant
-defecate
-defecation
-defecator
-defect
-defectibility
-defectible
-defection
-defectionist
-defectious
-defective
-defectively
-defectiveness
-defectless
-defectology
-defector
-defectoscope
-defedation
-defeminize
-defence
-defend
-defendable
-defendant
-defender
-defendress
-defenestration
-defensative
-defense
-defenseless
-defenselessly
-defenselessness
-defensibility
-defensible
-defensibleness
-defensibly
-defension
-defensive
-defensively
-defensiveness
-defensor
-defensorship
-defensory
-defer
-deferable
-deference
-deferent
-deferentectomy
-deferential
-deferentiality
-deferentially
-deferentitis
-deferment
-deferrable
-deferral
-deferred
-deferrer
-deferrization
-deferrize
-defervesce
-defervescence
-defervescent
-defeudalize
-defiable
-defial
-defiance
-defiant
-defiantly
-defiantness
-defiber
-defibrinate
-defibrination
-defibrinize
-deficience
-deficiency
-deficient
-deficiently
-deficit
-defier
-defiguration
-defilade
-defile
-defiled
-defiledness
-defilement
-defiler
-defiliation
-defiling
-defilingly
-definability
-definable
-definably
-define
-defined
-definedly
-definement
-definer
-definiendum
-definiens
-definite
-definitely
-definiteness
-definition
-definitional
-definitiones
-definitive
-definitively
-definitiveness
-definitization
-definitize
-definitor
-definitude
-deflagrability
-deflagrable
-deflagrate
-deflagration
-deflagrator
-deflate
-deflation
-deflationary
-deflationist
-deflator
-deflect
-deflectable
-deflected
-deflection
-deflectionization
-deflectionize
-deflective
-deflectometer
-deflector
-deflesh
-deflex
-deflexibility
-deflexible
-deflexion
-deflexure
-deflocculant
-deflocculate
-deflocculation
-deflocculator
-deflorate
-defloration
-deflorescence
-deflower
-deflowerer
-defluent
-defluous
-defluvium
-defluxion
-defoedation
-defog
-defoliage
-defoliate
-defoliated
-defoliation
-defoliator
-deforce
-deforcement
-deforceor
-deforcer
-deforciant
-deforest
-deforestation
-deforester
-deform
-deformability
-deformable
-deformalize
-deformation
-deformational
-deformative
-deformed
-deformedly
-deformedness
-deformer
-deformeter
-deformism
-deformity
-defortify
-defoul
-defraud
-defraudation
-defrauder
-defraudment
-defray
-defrayable
-defrayal
-defrayer
-defrayment
-defreeze
-defrication
-defrock
-defrost
-defroster
-deft
-defterdar
-deftly
-deftness
-defunct
-defunction
-defunctionalization
-defunctionalize
-defunctness
-defuse
-defusion
-defy
-defyingly
-deg
-deganglionate
-degarnish
-degas
-degasification
-degasifier
-degasify
-degasser
-degauss
-degelatinize
-degelation
-degeneracy
-degeneralize
-degenerate
-degenerately
-degenerateness
-degeneration
-degenerationist
-degenerative
-degenerescence
-degenerescent
-degentilize
-degerm
-degerminate
-degerminator
-degged
-degger
-deglaciation
-deglaze
-deglutinate
-deglutination
-deglutition
-deglutitious
-deglutitive
-deglutitory
-deglycerin
-deglycerine
-degorge
-degradable
-degradand
-degradation
-degradational
-degradative
-degrade
-degraded
-degradedly
-degradedness
-degradement
-degrader
-degrading
-degradingly
-degradingness
-degraduate
-degraduation
-degrain
-degrease
-degreaser
-degree
-degreeless
-degreewise
-degression
-degressive
-degressively
-degu
-Deguelia
-deguelin
-degum
-degummer
-degust
-degustation
-dehair
-dehairer
-Dehaites
-deheathenize
-dehematize
-dehepatize
-Dehgan
-dehisce
-dehiscence
-dehiscent
-dehistoricize
-Dehkan
-dehnstufe
-dehonestate
-dehonestation
-dehorn
-dehorner
-dehors
-dehort
-dehortation
-dehortative
-dehortatory
-dehorter
-dehull
-dehumanization
-dehumanize
-dehumidification
-dehumidifier
-dehumidify
-dehusk
-Dehwar
-dehydrant
-dehydrase
-dehydrate
-dehydration
-dehydrator
-dehydroascorbic
-dehydrocorydaline
-dehydrofreezing
-dehydrogenase
-dehydrogenate
-dehydrogenation
-dehydrogenization
-dehydrogenize
-dehydromucic
-dehydrosparteine
-dehypnotize
-deice
-deicer
-deicidal
-deicide
-deictic
-deictical
-deictically
-deidealize
-Deidesheimer
-deific
-deifical
-deification
-deificatory
-deifier
-deiform
-deiformity
-deify
-deign
-Deimos
-deincrustant
-deindividualization
-deindividualize
-deindividuate
-deindustrialization
-deindustrialize
-deink
-Deino
-Deinocephalia
-Deinoceras
-Deinodon
-Deinodontidae
-deinos
-Deinosauria
-Deinotherium
-deinsularize
-deintellectualization
-deintellectualize
-deionize
-Deipara
-deiparous
-Deiphobus
-deipnodiplomatic
-deipnophobia
-deipnosophism
-deipnosophist
-deipnosophistic
-deipotent
-Deirdre
-deiseal
-deisidaimonia
-deism
-deist
-deistic
-deistical
-deistically
-deisticalness
-deity
-deityship
-deject
-dejecta
-dejected
-dejectedly
-dejectedness
-dejectile
-dejection
-dejectly
-dejectory
-dejecture
-dejerate
-dejeration
-dejerator
-dejeune
-dejeuner
-dejunkerize
-Dekabrist
-dekaparsec
-dekapode
-dekko
-dekle
-deknight
-Del
-delabialization
-delabialize
-delacrimation
-delactation
-delaine
-delaminate
-delamination
-delapse
-delapsion
-delate
-delater
-delatinization
-delatinize
-delation
-delator
-delatorian
-Delaware
-Delawarean
-delawn
-delay
-delayable
-delayage
-delayer
-delayful
-delaying
-delayingly
-Delbert
-dele
-delead
-delectability
-delectable
-delectableness
-delectably
-delectate
-delectation
-delectus
-delegable
-delegacy
-delegalize
-delegant
-delegate
-delegatee
-delegateship
-delegation
-delegative
-delegator
-delegatory
-delenda
-Delesseria
-Delesseriaceae
-delesseriaceous
-delete
-deleterious
-deleteriously
-deleteriousness
-deletion
-deletive
-deletory
-delf
-delft
-delftware
-Delhi
-Delia
-Delian
-deliberalization
-deliberalize
-deliberant
-deliberate
-deliberately
-deliberateness
-deliberation
-deliberative
-deliberatively
-deliberativeness
-deliberator
-delible
-delicacy
-delicate
-delicately
-delicateness
-delicatesse
-delicatessen
-delicense
-Delichon
-delicioso
-Delicious
-delicious
-deliciously
-deliciousness
-delict
-delictum
-deligated
-deligation
-delight
-delightable
-delighted
-delightedly
-delightedness
-delighter
-delightful
-delightfully
-delightfulness
-delighting
-delightingly
-delightless
-delightsome
-delightsomely
-delightsomeness
-delignate
-delignification
-Delilah
-delime
-delimit
-delimitate
-delimitation
-delimitative
-delimiter
-delimitize
-delineable
-delineament
-delineate
-delineation
-delineative
-delineator
-delineatory
-delineature
-delinquence
-delinquency
-delinquent
-delinquently
-delint
-delinter
-deliquesce
-deliquescence
-deliquescent
-deliquium
-deliracy
-delirament
-deliration
-deliriant
-delirifacient
-delirious
-deliriously
-deliriousness
-delirium
-delitescence
-delitescency
-delitescent
-deliver
-deliverable
-deliverance
-deliverer
-deliveress
-deliveror
-delivery
-deliveryman
-dell
-Della
-dellenite
-Delobranchiata
-delocalization
-delocalize
-delomorphic
-delomorphous
-deloul
-delouse
-delphacid
-Delphacidae
-Delphian
-Delphin
-Delphinapterus
-delphine
-delphinic
-Delphinid
-Delphinidae
-delphinin
-delphinine
-delphinite
-Delphinium
-Delphinius
-delphinoid
-Delphinoidea
-delphinoidine
-Delphinus
-delphocurarine
-Delsarte
-Delsartean
-Delsartian
-Delta
-delta
-deltafication
-deltaic
-deltal
-deltarium
-deltation
-delthyrial
-delthyrium
-deltic
-deltidial
-deltidium
-deltiology
-deltohedron
-deltoid
-deltoidal
-delubrum
-deludable
-delude
-deluder
-deludher
-deluding
-deludingly
-deluge
-deluminize
-delundung
-delusion
-delusional
-delusionist
-delusive
-delusively
-delusiveness
-delusory
-deluster
-deluxe
-delve
-delver
-demagnetizable
-demagnetization
-demagnetize
-demagnetizer
-demagog
-demagogic
-demagogical
-demagogically
-demagogism
-demagogue
-demagoguery
-demagogy
-demal
-demand
-demandable
-demandant
-demander
-demanding
-demandingly
-demanganization
-demanganize
-demantoid
-demarcate
-demarcation
-demarcator
-demarch
-demarchy
-demargarinate
-demark
-demarkation
-demast
-dematerialization
-dematerialize
-Dematiaceae
-dematiaceous
-deme
-demean
-demeanor
-demegoric
-demency
-dement
-dementate
-dementation
-demented
-dementedly
-dementedness
-dementholize
-dementia
-demephitize
-demerit
-demeritorious
-demeritoriously
-Demerol
-demersal
-demersed
-demersion
-demesman
-demesmerize
-demesne
-demesnial
-demetallize
-demethylate
-demethylation
-Demetrian
-demetricize
-demi
-demiadult
-demiangel
-demiassignation
-demiatheism
-demiatheist
-demibarrel
-demibastion
-demibastioned
-demibath
-demibeast
-demibelt
-demibob
-demibombard
-demibrassart
-demibrigade
-demibrute
-demibuckram
-demicadence
-demicannon
-demicanon
-demicanton
-demicaponier
-demichamfron
-demicircle
-demicircular
-demicivilized
-demicolumn
-demicoronal
-demicritic
-demicuirass
-demiculverin
-demicylinder
-demicylindrical
-demidandiprat
-demideify
-demideity
-demidevil
-demidigested
-demidistance
-demiditone
-demidoctor
-demidog
-demidolmen
-demidome
-demieagle
-demifarthing
-demifigure
-demiflouncing
-demifusion
-demigardebras
-demigauntlet
-demigentleman
-demiglobe
-demigod
-demigoddess
-demigoddessship
-demigorge
-demigriffin
-demigroat
-demihag
-demihearse
-demiheavenly
-demihigh
-demihogshead
-demihorse
-demihuman
-demijambe
-demijohn
-demikindred
-demiking
-demilance
-demilancer
-demilawyer
-demilegato
-demilion
-demilitarization
-demilitarize
-demiliterate
-demilune
-demiluster
-demilustre
-demiman
-demimark
-demimentoniere
-demimetope
-demimillionaire
-demimondaine
-demimonde
-demimonk
-deminatured
-demineralization
-demineralize
-deminude
-deminudity
-demioctagonal
-demioctangular
-demiofficial
-demiorbit
-demiourgoi
-demiowl
-demiox
-demipagan
-demiparallel
-demipauldron
-demipectinate
-demipesade
-demipike
-demipillar
-demipique
-demiplacate
-demiplate
-demipomada
-demipremise
-demipremiss
-demipriest
-demipronation
-demipuppet
-demiquaver
-demiracle
-demiram
-demirelief
-demirep
-demirevetment
-demirhumb
-demirilievo
-demirobe
-demisability
-demisable
-demisacrilege
-demisang
-demisangue
-demisavage
-demise
-demiseason
-demisecond
-demisemiquaver
-demisemitone
-demisheath
-demishirt
-demisovereign
-demisphere
-demiss
-demission
-demissionary
-demissly
-demissness
-demissory
-demisuit
-demit
-demitasse
-demitint
-demitoilet
-demitone
-demitrain
-demitranslucence
-demitube
-demiturned
-demiurge
-demiurgeous
-demiurgic
-demiurgical
-demiurgically
-demiurgism
-demivambrace
-demivirgin
-demivoice
-demivol
-demivolt
-demivotary
-demiwivern
-demiwolf
-demnition
-demob
-demobilization
-demobilize
-democracy
-democrat
-democratian
-democratic
-democratical
-democratically
-democratifiable
-democratism
-democratist
-democratization
-democratize
-demodectic
-demoded
-Demodex
-Demodicidae
-Demodocus
-demodulation
-demodulator
-demogenic
-Demogorgon
-demographer
-demographic
-demographical
-demographically
-demographist
-demography
-demoid
-demoiselle
-demolish
-demolisher
-demolishment
-demolition
-demolitionary
-demolitionist
-demological
-demology
-Demon
-demon
-demonastery
-demoness
-demonetization
-demonetize
-demoniac
-demoniacal
-demoniacally
-demoniacism
-demonial
-demonian
-demonianism
-demoniast
-demonic
-demonical
-demonifuge
-demonish
-demonism
-demonist
-demonize
-demonkind
-demonland
-demonlike
-demonocracy
-demonograph
-demonographer
-demonography
-demonolater
-demonolatrous
-demonolatrously
-demonolatry
-demonologer
-demonologic
-demonological
-demonologically
-demonologist
-demonology
-demonomancy
-demonophobia
-demonry
-demonship
-demonstrability
-demonstrable
-demonstrableness
-demonstrably
-demonstrant
-demonstratable
-demonstrate
-demonstratedly
-demonstrater
-demonstration
-demonstrational
-demonstrationist
-demonstrative
-demonstratively
-demonstrativeness
-demonstrator
-demonstratorship
-demonstratory
-demophil
-demophilism
-demophobe
-Demophon
-Demophoon
-demoralization
-demoralize
-demoralizer
-demorphinization
-demorphism
-demos
-Demospongiae
-Demosthenean
-Demosthenic
-demote
-demotic
-demotics
-demotion
-demotist
-demount
-demountability
-demountable
-dempster
-demulce
-demulcent
-demulsibility
-demulsify
-demulsion
-demure
-demurely
-demureness
-demurity
-demurrable
-demurrage
-demurral
-demurrant
-demurrer
-demurring
-demurringly
-demutization
-demy
-demyship
-den
-denarcotization
-denarcotize
-denarius
-denaro
-denary
-denat
-denationalization
-denationalize
-denaturalization
-denaturalize
-denaturant
-denaturate
-denaturation
-denature
-denaturization
-denaturize
-denaturizer
-denazify
-denda
-dendrachate
-dendral
-Dendraspis
-dendraxon
-dendric
-dendriform
-dendrite
-Dendrites
-dendritic
-dendritical
-dendritically
-dendritiform
-Dendrium
-Dendrobates
-Dendrobatinae
-dendrobe
-Dendrobium
-Dendrocalamus
-Dendroceratina
-dendroceratine
-Dendrochirota
-dendrochronological
-dendrochronologist
-dendrochronology
-dendroclastic
-Dendrocoela
-dendrocoelan
-dendrocoele
-dendrocoelous
-Dendrocolaptidae
-dendrocolaptine
-Dendroctonus
-Dendrocygna
-dendrodont
-Dendrodus
-Dendroeca
-Dendrogaea
-Dendrogaean
-dendrograph
-dendrography
-Dendrohyrax
-Dendroica
-dendroid
-dendroidal
-Dendroidea
-Dendrolagus
-dendrolatry
-Dendrolene
-dendrolite
-dendrologic
-dendrological
-dendrologist
-dendrologous
-dendrology
-Dendromecon
-dendrometer
-dendron
-dendrophil
-dendrophile
-dendrophilous
-Dendropogon
-Dene
-dene
-Deneb
-Denebola
-denegate
-denegation
-denehole
-denervate
-denervation
-deneutralization
-dengue
-deniable
-denial
-denicotinize
-denier
-denierage
-denierer
-denigrate
-denigration
-denigrator
-denim
-Denis
-denitrate
-denitration
-denitrator
-denitrificant
-denitrification
-denitrificator
-denitrifier
-denitrify
-denitrize
-denization
-denizen
-denizenation
-denizenize
-denizenship
-Denmark
-dennet
-Dennis
-Dennstaedtia
-denominable
-denominate
-denomination
-denominational
-denominationalism
-denominationalist
-denominationalize
-denominationally
-denominative
-denominatively
-denominator
-denotable
-denotation
-denotative
-denotatively
-denotativeness
-denotatum
-denote
-denotement
-denotive
-denouement
-denounce
-denouncement
-denouncer
-dense
-densely
-densen
-denseness
-denshare
-densher
-denshire
-densification
-densifier
-densify
-densimeter
-densimetric
-densimetrically
-densimetry
-densitometer
-density
-dent
-dentagra
-dental
-dentale
-dentalgia
-Dentaliidae
-dentalism
-dentality
-Dentalium
-dentalization
-dentalize
-dentally
-dentaphone
-Dentaria
-dentary
-dentata
-dentate
-dentated
-dentately
-dentation
-dentatoangulate
-dentatocillitate
-dentatocostate
-dentatocrenate
-dentatoserrate
-dentatosetaceous
-dentatosinuate
-dentel
-dentelated
-dentelle
-dentelure
-denter
-dentex
-dentical
-denticate
-Denticeti
-denticle
-denticular
-denticulate
-denticulately
-denticulation
-denticule
-dentiferous
-dentification
-dentiform
-dentifrice
-dentigerous
-dentil
-dentilabial
-dentilated
-dentilation
-dentile
-dentilingual
-dentiloquist
-dentiloquy
-dentimeter
-dentin
-dentinal
-dentinalgia
-dentinasal
-dentine
-dentinitis
-dentinoblast
-dentinocemental
-dentinoid
-dentinoma
-dentiparous
-dentiphone
-dentiroster
-dentirostral
-dentirostrate
-Dentirostres
-dentiscalp
-dentist
-dentistic
-dentistical
-dentistry
-dentition
-dentoid
-dentolabial
-dentolingual
-dentonasal
-dentosurgical
-dentural
-denture
-denty
-denucleate
-denudant
-denudate
-denudation
-denudative
-denude
-denuder
-denumerable
-denumerably
-denumeral
-denumerant
-denumerantive
-denumeration
-denumerative
-denunciable
-denunciant
-denunciate
-denunciation
-denunciative
-denunciatively
-denunciator
-denunciatory
-denutrition
-deny
-denyingly
-deobstruct
-deobstruent
-deoccidentalize
-deoculate
-deodand
-deodara
-deodorant
-deodorization
-deodorize
-deodorizer
-deontological
-deontologist
-deontology
-deoperculate
-deoppilant
-deoppilate
-deoppilation
-deoppilative
-deordination
-deorganization
-deorganize
-deorientalize
-deorsumvergence
-deorsumversion
-deorusumduction
-deossification
-deossify
-deota
-deoxidant
-deoxidate
-deoxidation
-deoxidative
-deoxidator
-deoxidization
-deoxidize
-deoxidizer
-deoxygenate
-deoxygenation
-deoxygenization
-deozonization
-deozonize
-deozonizer
-depa
-depaganize
-depaint
-depancreatization
-depancreatize
-depark
-deparliament
-depart
-departed
-departer
-departisanize
-departition
-department
-departmental
-departmentalism
-departmentalization
-departmentalize
-departmentally
-departmentization
-departmentize
-departure
-depas
-depascent
-depass
-depasturable
-depasturage
-depasturation
-depasture
-depatriate
-depauperate
-depauperation
-depauperization
-depauperize
-depencil
-depend
-dependability
-dependable
-dependableness
-dependably
-dependence
-dependency
-dependent
-dependently
-depender
-depending
-dependingly
-depeople
-deperdite
-deperditely
-deperition
-depersonalization
-depersonalize
-depersonize
-depetalize
-depeter
-depetticoat
-dephase
-dephilosophize
-dephlegmate
-dephlegmation
-dephlegmatize
-dephlegmator
-dephlegmatory
-dephlegmedness
-dephlogisticate
-dephlogisticated
-dephlogistication
-dephosphorization
-dephosphorize
-dephysicalization
-dephysicalize
-depickle
-depict
-depicter
-depiction
-depictive
-depicture
-depiedmontize
-depigment
-depigmentate
-depigmentation
-depigmentize
-depilate
-depilation
-depilator
-depilatory
-depilitant
-depilous
-deplaceable
-deplane
-deplasmolysis
-deplaster
-deplenish
-deplete
-deplethoric
-depletion
-depletive
-depletory
-deploitation
-deplorability
-deplorable
-deplorableness
-deplorably
-deploration
-deplore
-deplored
-deploredly
-deploredness
-deplorer
-deploringly
-deploy
-deployment
-deplumate
-deplumated
-deplumation
-deplume
-deplump
-depoetize
-depoh
-depolarization
-depolarize
-depolarizer
-depolish
-depolishing
-depolymerization
-depolymerize
-depone
-deponent
-depopularize
-depopulate
-depopulation
-depopulative
-depopulator
-deport
-deportable
-deportation
-deportee
-deporter
-deportment
-deposable
-deposal
-depose
-deposer
-deposit
-depositary
-depositation
-depositee
-deposition
-depositional
-depositive
-depositor
-depository
-depositum
-depositure
-depot
-depotentiate
-depotentiation
-depravation
-deprave
-depraved
-depravedly
-depravedness
-depraver
-depravingly
-depravity
-deprecable
-deprecate
-deprecatingly
-deprecation
-deprecative
-deprecator
-deprecatorily
-deprecatoriness
-deprecatory
-depreciable
-depreciant
-depreciate
-depreciatingly
-depreciation
-depreciative
-depreciatively
-depreciator
-depreciatoriness
-depreciatory
-depredate
-depredation
-depredationist
-depredator
-depredatory
-depress
-depressant
-depressed
-depressibility
-depressible
-depressing
-depressingly
-depressingness
-depression
-depressive
-depressively
-depressiveness
-depressomotor
-depressor
-depreter
-deprint
-depriorize
-deprivable
-deprival
-deprivate
-deprivation
-deprivative
-deprive
-deprivement
-depriver
-deprovincialize
-depside
-depth
-depthen
-depthing
-depthless
-depthometer
-depthwise
-depullulation
-depurant
-depurate
-depuration
-depurative
-depurator
-depuratory
-depursement
-deputable
-deputation
-deputational
-deputationist
-deputationize
-deputative
-deputatively
-deputator
-depute
-deputize
-deputy
-deputyship
-dequeen
-derabbinize
-deracialize
-deracinate
-deracination
-deradelphus
-deradenitis
-deradenoncus
-derah
-deraign
-derail
-derailer
-derailment
-derange
-derangeable
-deranged
-derangement
-deranger
-derat
-derate
-derater
-derationalization
-derationalize
-deratization
-deray
-Derbend
-Derby
-derby
-derbylite
-dere
-deregister
-deregulationize
-dereism
-dereistic
-dereistically
-Derek
-derelict
-dereliction
-derelictly
-derelictness
-dereligion
-dereligionize
-derencephalocele
-derencephalus
-deresinate
-deresinize
-deric
-deride
-derider
-deridingly
-Deringa
-Deripia
-derisible
-derision
-derisive
-derisively
-derisiveness
-derisory
-derivability
-derivable
-derivably
-derival
-derivant
-derivate
-derivately
-derivation
-derivational
-derivationally
-derivationist
-derivatist
-derivative
-derivatively
-derivativeness
-derive
-derived
-derivedly
-derivedness
-deriver
-derm
-derma
-Dermacentor
-dermad
-dermahemia
-dermal
-dermalgia
-dermalith
-dermamyiasis
-dermanaplasty
-dermapostasis
-Dermaptera
-dermapteran
-dermapterous
-dermaskeleton
-dermasurgery
-dermatagra
-dermatalgia
-dermataneuria
-dermatatrophia
-dermatauxe
-dermathemia
-dermatic
-dermatine
-dermatitis
-Dermatobia
-dermatocele
-dermatocellulitis
-dermatoconiosis
-Dermatocoptes
-dermatocoptic
-dermatocyst
-dermatodynia
-dermatogen
-dermatoglyphics
-dermatograph
-dermatographia
-dermatography
-dermatoheteroplasty
-dermatoid
-dermatological
-dermatologist
-dermatology
-dermatolysis
-dermatoma
-dermatome
-dermatomere
-dermatomic
-dermatomuscular
-dermatomyces
-dermatomycosis
-dermatomyoma
-dermatoneural
-dermatoneurology
-dermatoneurosis
-dermatonosus
-dermatopathia
-dermatopathic
-dermatopathology
-dermatopathophobia
-Dermatophagus
-dermatophobia
-dermatophone
-dermatophony
-dermatophyte
-dermatophytic
-dermatophytosis
-dermatoplasm
-dermatoplast
-dermatoplastic
-dermatoplasty
-dermatopnagic
-dermatopsy
-Dermatoptera
-dermatoptic
-dermatorrhagia
-dermatorrhea
-dermatorrhoea
-dermatosclerosis
-dermatoscopy
-dermatosis
-dermatoskeleton
-dermatotherapy
-dermatotome
-dermatotomy
-dermatotropic
-dermatoxerasia
-dermatozoon
-dermatozoonosis
-dermatrophia
-dermatrophy
-dermenchysis
-Dermestes
-dermestid
-Dermestidae
-dermestoid
-dermic
-dermis
-dermitis
-dermoblast
-Dermobranchia
-dermobranchiata
-dermobranchiate
-Dermochelys
-dermochrome
-dermococcus
-dermogastric
-dermographia
-dermographic
-dermographism
-dermography
-dermohemal
-dermohemia
-dermohumeral
-dermoid
-dermoidal
-dermoidectomy
-dermol
-dermolysis
-dermomuscular
-dermomycosis
-dermoneural
-dermoneurosis
-dermonosology
-dermoosseous
-dermoossification
-dermopathic
-dermopathy
-dermophlebitis
-dermophobe
-dermophyte
-dermophytic
-dermoplasty
-Dermoptera
-dermopteran
-dermopterous
-dermoreaction
-Dermorhynchi
-dermorhynchous
-dermosclerite
-dermoskeletal
-dermoskeleton
-dermostenosis
-dermostosis
-dermosynovitis
-dermotropic
-dermovaccine
-dermutation
-dern
-dernier
-derodidymus
-derogate
-derogately
-derogation
-derogative
-derogatively
-derogator
-derogatorily
-derogatoriness
-derogatory
-Derotrema
-Derotremata
-derotremate
-derotrematous
-derotreme
-derout
-Derrick
-derrick
-derricking
-derrickman
-derride
-derries
-derringer
-Derris
-derry
-dertrotheca
-dertrum
-deruinate
-deruralize
-derust
-dervish
-dervishhood
-dervishism
-dervishlike
-desaccharification
-desacralization
-desacralize
-desalt
-desamidization
-desand
-desaturate
-desaturation
-desaurin
-descale
-descant
-descanter
-descantist
-descend
-descendable
-descendance
-descendant
-descendence
-descendent
-descendental
-descendentalism
-descendentalist
-descendentalistic
-descender
-descendibility
-descendible
-descending
-descendingly
-descension
-descensional
-descensionist
-descensive
-descent
-Deschampsia
-descloizite
-descort
-describability
-describable
-describably
-describe
-describer
-descrier
-descript
-description
-descriptionist
-descriptionless
-descriptive
-descriptively
-descriptiveness
-descriptory
-descrive
-descry
-deseasonalize
-desecrate
-desecrater
-desecration
-desectionalize
-deseed
-desegmentation
-desegmented
-desensitization
-desensitize
-desensitizer
-desentimentalize
-deseret
-desert
-deserted
-desertedly
-desertedness
-deserter
-desertful
-desertfully
-desertic
-deserticolous
-desertion
-desertism
-desertless
-desertlessly
-desertlike
-desertness
-desertress
-desertrice
-desertward
-deserve
-deserved
-deservedly
-deservedness
-deserveless
-deserver
-deserving
-deservingly
-deservingness
-desex
-desexualization
-desexualize
-deshabille
-desi
-desiccant
-desiccate
-desiccation
-desiccative
-desiccator
-desiccatory
-desiderant
-desiderata
-desiderate
-desideration
-desiderative
-desideratum
-desight
-desightment
-design
-designable
-designate
-designation
-designative
-designator
-designatory
-designatum
-designed
-designedly
-designedness
-designee
-designer
-designful
-designfully
-designfulness
-designing
-designingly
-designless
-designlessly
-designlessness
-desilicate
-desilicification
-desilicify
-desiliconization
-desiliconize
-desilver
-desilverization
-desilverize
-desilverizer
-desinence
-desinent
-desiodothyroxine
-desipience
-desipiency
-desipient
-desirability
-desirable
-desirableness
-desirably
-desire
-desired
-desiredly
-desiredness
-desireful
-desirefulness
-desireless
-desirer
-desiringly
-desirous
-desirously
-desirousness
-desist
-desistance
-desistive
-desition
-desize
-desk
-desklike
-deslime
-desma
-desmachymatous
-desmachyme
-desmacyte
-desman
-Desmanthus
-Desmarestia
-Desmarestiaceae
-desmarestiaceous
-Desmatippus
-desmectasia
-desmepithelium
-desmic
-desmid
-Desmidiaceae
-desmidiaceous
-Desmidiales
-desmidiologist
-desmidiology
-desmine
-desmitis
-desmocyte
-desmocytoma
-Desmodactyli
-Desmodium
-desmodont
-Desmodontidae
-Desmodus
-desmodynia
-desmogen
-desmogenous
-Desmognathae
-desmognathism
-desmognathous
-desmography
-desmohemoblast
-desmoid
-desmology
-desmoma
-Desmomyaria
-desmon
-Desmoncus
-desmoneoplasm
-desmonosology
-desmopathologist
-desmopathology
-desmopathy
-desmopelmous
-desmopexia
-desmopyknosis
-desmorrhexis
-Desmoscolecidae
-Desmoscolex
-desmosis
-desmosite
-Desmothoraca
-desmotomy
-desmotrope
-desmotropic
-desmotropism
-desocialization
-desocialize
-desolate
-desolately
-desolateness
-desolater
-desolating
-desolatingly
-desolation
-desolative
-desonation
-desophisticate
-desophistication
-desorption
-desoxalate
-desoxyanisoin
-desoxybenzoin
-desoxycinchonine
-desoxycorticosterone
-desoxymorphine
-desoxyribonucleic
-despair
-despairer
-despairful
-despairfully
-despairfulness
-despairing
-despairingly
-despairingness
-despecialization
-despecialize
-despecificate
-despecification
-despect
-desperacy
-desperado
-desperadoism
-desperate
-desperately
-desperateness
-desperation
-despicability
-despicable
-despicableness
-despicably
-despiritualization
-despiritualize
-despisable
-despisableness
-despisal
-despise
-despisedness
-despisement
-despiser
-despisingly
-despite
-despiteful
-despitefully
-despitefulness
-despiteous
-despiteously
-despoil
-despoiler
-despoilment
-despoliation
-despond
-despondence
-despondency
-despondent
-despondently
-desponder
-desponding
-despondingly
-despot
-despotat
-Despotes
-despotic
-despotically
-despoticalness
-despoticly
-despotism
-despotist
-despotize
-despumate
-despumation
-desquamate
-desquamation
-desquamative
-desquamatory
-dess
-dessa
-dessert
-dessertspoon
-dessertspoonful
-dessiatine
-dessil
-destabilize
-destain
-destandardize
-desterilization
-desterilize
-destinate
-destination
-destine
-destinezite
-destinism
-destinist
-destiny
-destitute
-destitutely
-destituteness
-destitution
-destour
-destress
-destrier
-destroy
-destroyable
-destroyer
-destroyingly
-destructibility
-destructible
-destructibleness
-destruction
-destructional
-destructionism
-destructionist
-destructive
-destructively
-destructiveness
-destructivism
-destructivity
-destructor
-destructuralize
-desubstantiate
-desucration
-desuete
-desuetude
-desugar
-desugarize
-Desulfovibrio
-desulphur
-desulphurate
-desulphuration
-desulphurization
-desulphurize
-desulphurizer
-desultor
-desultorily
-desultoriness
-desultorious
-desultory
-desuperheater
-desyatin
-desyl
-desynapsis
-desynaptic
-desynonymization
-desynonymize
-detach
-detachability
-detachable
-detachableness
-detachably
-detached
-detachedly
-detachedness
-detacher
-detachment
-detail
-detailed
-detailedly
-detailedness
-detailer
-detailism
-detailist
-detain
-detainable
-detainal
-detainer
-detainingly
-detainment
-detar
-detassel
-detax
-detect
-detectability
-detectable
-detectably
-detectaphone
-detecter
-detectible
-detection
-detective
-detectivism
-detector
-detenant
-detent
-detention
-detentive
-deter
-deterge
-detergence
-detergency
-detergent
-detergible
-deteriorate
-deterioration
-deteriorationist
-deteriorative
-deteriorator
-deteriorism
-deteriority
-determent
-determinability
-determinable
-determinableness
-determinably
-determinacy
-determinant
-determinantal
-determinate
-determinately
-determinateness
-determination
-determinative
-determinatively
-determinativeness
-determinator
-determine
-determined
-determinedly
-determinedness
-determiner
-determinism
-determinist
-deterministic
-determinoid
-deterrence
-deterrent
-detersion
-detersive
-detersively
-detersiveness
-detest
-detestability
-detestable
-detestableness
-detestably
-detestation
-detester
-dethronable
-dethrone
-dethronement
-dethroner
-dethyroidism
-detin
-detinet
-detinue
-detonable
-detonate
-detonation
-detonative
-detonator
-detorsion
-detour
-detoxicant
-detoxicate
-detoxication
-detoxicator
-detoxification
-detoxify
-detract
-detracter
-detractingly
-detraction
-detractive
-detractively
-detractiveness
-detractor
-detractory
-detractress
-detrain
-detrainment
-detribalization
-detribalize
-detriment
-detrimental
-detrimentality
-detrimentally
-detrimentalness
-detrital
-detrited
-detrition
-detritus
-Detroiter
-detrude
-detruncate
-detruncation
-detrusion
-detrusive
-detrusor
-detubation
-detumescence
-detune
-detur
-deuce
-deuced
-deucedly
-deul
-deurbanize
-deutencephalic
-deutencephalon
-deuteragonist
-deuteranomal
-deuteranomalous
-deuteranope
-deuteranopia
-deuteranopic
-deuteric
-deuteride
-deuterium
-deuteroalbumose
-deuterocanonical
-deuterocasease
-deuterocone
-deuteroconid
-deuterodome
-deuteroelastose
-deuterofibrinose
-deuterogamist
-deuterogamy
-deuterogelatose
-deuterogenic
-deuteroglobulose
-deuteromorphic
-Deuteromycetes
-deuteromyosinose
-deuteron
-Deuteronomic
-Deuteronomical
-Deuteronomist
-Deuteronomistic
-Deuteronomy
-deuteropathic
-deuteropathy
-deuteroplasm
-deuteroprism
-deuteroproteose
-deuteroscopic
-deuteroscopy
-deuterostoma
-Deuterostomata
-deuterostomatous
-deuterotokous
-deuterotoky
-deuterotype
-deuterovitellose
-deuterozooid
-deutobromide
-deutocarbonate
-deutochloride
-deutomala
-deutomalal
-deutomalar
-deutomerite
-deuton
-deutonephron
-deutonymph
-deutonymphal
-deutoplasm
-deutoplasmic
-deutoplastic
-deutoscolex
-deutoxide
-Deutzia
-dev
-deva
-devachan
-devadasi
-devall
-devaloka
-devalorize
-devaluate
-devaluation
-devalue
-devance
-devaporate
-devaporation
-devast
-devastate
-devastating
-devastatingly
-devastation
-devastative
-devastator
-devastavit
-devaster
-devata
-develin
-develop
-developability
-developable
-developedness
-developer
-developist
-development
-developmental
-developmentalist
-developmentally
-developmentarian
-developmentary
-developmentist
-developoid
-devertebrated
-devest
-deviability
-deviable
-deviancy
-deviant
-deviate
-deviation
-deviationism
-deviationist
-deviative
-deviator
-deviatory
-device
-deviceful
-devicefully
-devicefulness
-devil
-devilbird
-devildom
-deviled
-deviler
-deviless
-devilet
-devilfish
-devilhood
-deviling
-devilish
-devilishly
-devilishness
-devilism
-devilize
-devilkin
-devillike
-devilman
-devilment
-devilmonger
-devilry
-devilship
-deviltry
-devilward
-devilwise
-devilwood
-devily
-devious
-deviously
-deviousness
-devirginate
-devirgination
-devirginator
-devirilize
-devisable
-devisal
-deviscerate
-devisceration
-devise
-devisee
-deviser
-devisor
-devitalization
-devitalize
-devitalized
-devitaminize
-devitrification
-devitrify
-devocalization
-devocalize
-devoice
-devoid
-devoir
-devolatilize
-devolute
-devolution
-devolutionary
-devolutionist
-devolve
-devolvement
-Devon
-Devonian
-Devonic
-devonite
-devonport
-devonshire
-devorative
-devote
-devoted
-devotedly
-devotedness
-devotee
-devoteeism
-devotement
-devoter
-devotion
-devotional
-devotionalism
-devotionalist
-devotionality
-devotionally
-devotionalness
-devotionate
-devotionist
-devour
-devourable
-devourer
-devouress
-devouring
-devouringly
-devouringness
-devourment
-devout
-devoutless
-devoutlessly
-devoutlessness
-devoutly
-devoutness
-devow
-devulcanization
-devulcanize
-devulgarize
-devvel
-dew
-dewan
-dewanee
-dewanship
-dewater
-dewaterer
-dewax
-dewbeam
-dewberry
-dewclaw
-dewclawed
-dewcup
-dewdamp
-dewdrop
-dewdropper
-dewer
-Dewey
-deweylite
-dewfall
-dewflower
-dewily
-dewiness
-dewlap
-dewlapped
-dewless
-dewlight
-dewlike
-dewool
-deworm
-dewret
-dewtry
-dewworm
-dewy
-dexiocardia
-dexiotrope
-dexiotropic
-dexiotropism
-dexiotropous
-Dexter
-dexter
-dexterical
-dexterity
-dexterous
-dexterously
-dexterousness
-dextrad
-dextral
-dextrality
-dextrally
-dextran
-dextraural
-dextrin
-dextrinase
-dextrinate
-dextrinize
-dextrinous
-dextro
-dextroaural
-dextrocardia
-dextrocardial
-dextrocerebral
-dextrocular
-dextrocularity
-dextroduction
-dextroglucose
-dextrogyrate
-dextrogyration
-dextrogyratory
-dextrogyrous
-dextrolactic
-dextrolimonene
-dextropinene
-dextrorotary
-dextrorotatary
-dextrorotation
-dextrorsal
-dextrorse
-dextrorsely
-dextrosazone
-dextrose
-dextrosinistral
-dextrosinistrally
-dextrosuria
-dextrotartaric
-dextrotropic
-dextrotropous
-dextrous
-dextrously
-dextrousness
-dextroversion
-dey
-deyhouse
-deyship
-deywoman
-Dezaley
-dezinc
-dezincation
-dezincification
-dezincify
-dezymotize
-dha
-dhabb
-dhai
-dhak
-dhamnoo
-dhan
-dhangar
-dhanuk
-dhanush
-Dhanvantari
-dharana
-dharani
-dharma
-dharmakaya
-dharmashastra
-dharmasmriti
-dharmasutra
-dharmsala
-dharna
-dhaura
-dhauri
-dhava
-dhaw
-Dheneb
-dheri
-dhobi
-dhole
-dhoni
-dhoon
-dhoti
-dhoul
-dhow
-Dhritarashtra
-dhu
-dhunchee
-dhunchi
-Dhundia
-dhurra
-dhyal
-dhyana
-di
-diabase
-diabasic
-diabetes
-diabetic
-diabetogenic
-diabetogenous
-diabetometer
-diablerie
-diabolarch
-diabolarchy
-diabolatry
-diabolepsy
-diaboleptic
-diabolic
-diabolical
-diabolically
-diabolicalness
-diabolification
-diabolify
-diabolism
-diabolist
-diabolization
-diabolize
-diabological
-diabology
-diabolology
-diabrosis
-diabrotic
-Diabrotica
-diacanthous
-diacaustic
-diacetamide
-diacetate
-diacetic
-diacetin
-diacetine
-diacetonuria
-diaceturia
-diacetyl
-diacetylene
-diachoretic
-diachronic
-diachylon
-diachylum
-diacid
-diacipiperazine
-diaclase
-diaclasis
-diaclastic
-diacle
-diaclinal
-diacodion
-diacoele
-diacoelia
-diaconal
-diaconate
-diaconia
-diaconicon
-diaconicum
-diacope
-diacranterian
-diacranteric
-diacrisis
-diacritic
-diacritical
-diacritically
-Diacromyodi
-diacromyodian
-diact
-diactin
-diactinal
-diactinic
-diactinism
-Diadelphia
-diadelphian
-diadelphic
-diadelphous
-diadem
-Diadema
-Diadematoida
-diaderm
-diadermic
-diadoche
-Diadochi
-Diadochian
-diadochite
-diadochokinesia
-diadochokinetic
-diadromous
-diadumenus
-diaene
-diaereses
-diaeresis
-diaeretic
-diaetetae
-diagenesis
-diagenetic
-diageotropic
-diageotropism
-diaglyph
-diaglyphic
-diagnosable
-diagnose
-diagnoseable
-diagnoses
-diagnosis
-diagnostic
-diagnostically
-diagnosticate
-diagnostication
-diagnostician
-diagnostics
-diagometer
-diagonal
-diagonality
-diagonalize
-diagonally
-diagonalwise
-diagonic
-diagram
-diagrammatic
-diagrammatical
-diagrammatician
-diagrammatize
-diagrammeter
-diagrammitically
-diagraph
-diagraphic
-diagraphical
-diagraphics
-diagredium
-diagrydium
-Diaguitas
-Diaguite
-diaheliotropic
-diaheliotropically
-diaheliotropism
-diakinesis
-dial
-dialcohol
-dialdehyde
-dialect
-dialectal
-dialectalize
-dialectally
-dialectic
-dialectical
-dialectically
-dialectician
-dialecticism
-dialecticize
-dialectics
-dialectologer
-dialectological
-dialectologist
-dialectology
-dialector
-dialer
-dialin
-dialing
-dialist
-Dialister
-dialkyl
-dialkylamine
-diallage
-diallagic
-diallagite
-diallagoid
-diallel
-diallelon
-diallelus
-diallyl
-dialogic
-dialogical
-dialogically
-dialogism
-dialogist
-dialogistic
-dialogistical
-dialogistically
-dialogite
-dialogize
-dialogue
-dialoguer
-Dialonian
-dialuric
-dialycarpous
-Dialypetalae
-dialypetalous
-dialyphyllous
-dialysepalous
-dialysis
-dialystaminous
-dialystelic
-dialystely
-dialytic
-dialytically
-dialyzability
-dialyzable
-dialyzate
-dialyzation
-dialyzator
-dialyze
-dialyzer
-diamagnet
-diamagnetic
-diamagnetically
-diamagnetism
-diamantiferous
-diamantine
-diamantoid
-diamb
-diambic
-diamesogamous
-diameter
-diametral
-diametrally
-diametric
-diametrical
-diametrically
-diamicton
-diamide
-diamidogen
-diamine
-diaminogen
-diaminogene
-diammine
-diamminobromide
-diamminonitrate
-diammonium
-diamond
-diamondback
-diamonded
-diamondiferous
-diamondize
-diamondlike
-diamondwise
-diamondwork
-diamorphine
-diamylose
-Dian
-dian
-Diana
-Diancecht
-diander
-Diandria
-diandrian
-diandrous
-Diane
-dianetics
-Dianil
-dianilid
-dianilide
-dianisidin
-dianisidine
-dianite
-dianodal
-dianoetic
-dianoetical
-dianoetically
-Dianthaceae
-Dianthera
-Dianthus
-diapalma
-diapase
-diapasm
-diapason
-diapasonal
-diapause
-diapedesis
-diapedetic
-Diapensia
-Diapensiaceae
-diapensiaceous
-diapente
-diaper
-diapering
-diaphane
-diaphaneity
-diaphanie
-diaphanometer
-diaphanometric
-diaphanometry
-diaphanoscope
-diaphanoscopy
-diaphanotype
-diaphanous
-diaphanously
-diaphanousness
-diaphany
-diaphone
-diaphonia
-diaphonic
-diaphonical
-diaphony
-diaphoresis
-diaphoretic
-diaphoretical
-diaphorite
-diaphote
-diaphototropic
-diaphototropism
-diaphragm
-diaphragmal
-diaphragmatic
-diaphragmatically
-diaphtherin
-diaphysial
-diaphysis
-diaplasma
-diaplex
-diaplexal
-diaplexus
-diapnoic
-diapnotic
-diapophysial
-diapophysis
-Diaporthe
-diapositive
-diapsid
-Diapsida
-diapsidan
-diapyesis
-diapyetic
-diarch
-diarchial
-diarchic
-diarchy
-diarhemia
-diarial
-diarian
-diarist
-diaristic
-diarize
-diarrhea
-diarrheal
-diarrheic
-diarrhetic
-diarsenide
-diarthric
-diarthrodial
-diarthrosis
-diarticular
-diary
-diaschisis
-diaschisma
-diaschistic
-Diascia
-diascope
-diascopy
-diascord
-diascordium
-diaskeuasis
-diaskeuast
-Diaspidinae
-diaspidine
-Diaspinae
-diaspine
-diaspirin
-Diaspora
-diaspore
-diastaltic
-diastase
-diastasic
-diastasimetry
-diastasis
-diastataxic
-diastataxy
-diastatic
-diastatically
-diastem
-diastema
-diastematic
-diastematomyelia
-diaster
-diastole
-diastolic
-diastomatic
-diastral
-diastrophe
-diastrophic
-diastrophism
-diastrophy
-diasynthesis
-diasyrm
-diatessaron
-diathermacy
-diathermal
-diathermancy
-diathermaneity
-diathermanous
-diathermic
-diathermize
-diathermometer
-diathermotherapy
-diathermous
-diathermy
-diathesic
-diathesis
-diathetic
-diatom
-Diatoma
-Diatomaceae
-diatomacean
-diatomaceoid
-diatomaceous
-Diatomales
-Diatomeae
-diatomean
-diatomic
-diatomicity
-diatomiferous
-diatomin
-diatomist
-diatomite
-diatomous
-diatonic
-diatonical
-diatonically
-diatonous
-diatoric
-diatreme
-diatribe
-diatribist
-diatropic
-diatropism
-Diatryma
-Diatrymiformes
-Diau
-diaulic
-diaulos
-diaxial
-diaxon
-diazenithal
-diazeuctic
-diazeuxis
-diazide
-diazine
-diazoamine
-diazoamino
-diazoaminobenzene
-diazoanhydride
-diazoate
-diazobenzene
-diazohydroxide
-diazoic
-diazoimide
-diazoimido
-diazole
-diazoma
-diazomethane
-diazonium
-diazotate
-diazotic
-diazotizability
-diazotizable
-diazotization
-diazotize
-diazotype
-dib
-dibase
-dibasic
-dibasicity
-dibatag
-Dibatis
-dibber
-dibble
-dibbler
-dibbuk
-dibenzophenazine
-dibenzopyrrole
-dibenzoyl
-dibenzyl
-dibhole
-diblastula
-diborate
-Dibothriocephalus
-dibrach
-dibranch
-Dibranchia
-Dibranchiata
-dibranchiate
-dibranchious
-dibrom
-dibromid
-dibromide
-dibromoacetaldehyde
-dibromobenzene
-dibs
-dibstone
-dibutyrate
-dibutyrin
-dicacodyl
-Dicaeidae
-dicaeology
-dicalcic
-dicalcium
-dicarbonate
-dicarbonic
-dicarboxylate
-dicarboxylic
-dicarpellary
-dicaryon
-dicaryophase
-dicaryophyte
-dicaryotic
-dicast
-dicastery
-dicastic
-dicatalectic
-dicatalexis
-Diccon
-dice
-diceboard
-dicebox
-dicecup
-dicellate
-diceman
-Dicentra
-dicentrine
-dicephalism
-dicephalous
-dicephalus
-diceplay
-dicer
-Diceras
-Diceratidae
-dicerion
-dicerous
-dicetyl
-dich
-Dichapetalaceae
-Dichapetalum
-dichas
-dichasial
-dichasium
-dichastic
-Dichelyma
-dichlamydeous
-dichloramine
-dichlorhydrin
-dichloride
-dichloroacetic
-dichlorohydrin
-dichloromethane
-dichocarpism
-dichocarpous
-dichogamous
-dichogamy
-Dichondra
-Dichondraceae
-dichopodial
-dichoptic
-dichord
-dichoree
-Dichorisandra
-dichotic
-dichotomal
-dichotomic
-dichotomically
-dichotomist
-dichotomistic
-dichotomization
-dichotomize
-dichotomous
-dichotomously
-dichotomy
-dichroic
-dichroiscope
-dichroism
-dichroite
-dichroitic
-dichromasy
-dichromat
-dichromate
-dichromatic
-dichromatism
-dichromic
-dichromism
-dichronous
-dichrooscope
-dichroous
-dichroscope
-dichroscopic
-Dichter
-dicing
-Dick
-dick
-dickcissel
-dickens
-Dickensian
-Dickensiana
-dicker
-dickey
-dickeybird
-dickinsonite
-Dicksonia
-dicky
-Diclidantheraceae
-diclinic
-diclinism
-diclinous
-Diclytra
-dicoccous
-dicodeine
-dicoelious
-dicolic
-dicolon
-dicondylian
-dicot
-dicotyl
-dicotyledon
-dicotyledonary
-Dicotyledones
-dicotyledonous
-Dicotyles
-Dicotylidae
-dicotylous
-dicoumarin
-Dicranaceae
-dicranaceous
-dicranoid
-dicranterian
-Dicranum
-Dicrostonyx
-dicrotal
-dicrotic
-dicrotism
-dicrotous
-Dicruridae
-dicta
-Dictaen
-Dictamnus
-Dictaphone
-dictate
-dictatingly
-dictation
-dictational
-dictative
-dictator
-dictatorial
-dictatorialism
-dictatorially
-dictatorialness
-dictatorship
-dictatory
-dictatress
-dictatrix
-dictature
-dictic
-diction
-dictionary
-Dictograph
-dictum
-dictynid
-Dictynidae
-Dictyoceratina
-dictyoceratine
-dictyodromous
-dictyogen
-dictyogenous
-Dictyograptus
-dictyoid
-Dictyonema
-Dictyonina
-dictyonine
-Dictyophora
-dictyopteran
-Dictyopteris
-Dictyosiphon
-Dictyosiphonaceae
-dictyosiphonaceous
-dictyosome
-dictyostele
-dictyostelic
-Dictyota
-Dictyotaceae
-dictyotaceous
-Dictyotales
-dictyotic
-Dictyoxylon
-dicyanide
-dicyanine
-dicyanodiamide
-dicyanogen
-dicycle
-dicyclic
-Dicyclica
-dicyclist
-Dicyema
-Dicyemata
-dicyemid
-Dicyemida
-Dicyemidae
-Dicynodon
-dicynodont
-Dicynodontia
-Dicynodontidae
-did
-Didache
-Didachist
-didactic
-didactical
-didacticality
-didactically
-didactician
-didacticism
-didacticity
-didactics
-didactive
-didactyl
-didactylism
-didactylous
-didapper
-didascalar
-didascaliae
-didascalic
-didascalos
-didascaly
-didder
-diddle
-diddler
-diddy
-didelph
-Didelphia
-didelphian
-didelphic
-didelphid
-Didelphidae
-didelphine
-Didelphis
-didelphoid
-didelphous
-Didelphyidae
-didepsid
-didepside
-Dididae
-didie
-didine
-Didinium
-didle
-didna
-didnt
-Dido
-didodecahedral
-didodecahedron
-didrachma
-didrachmal
-didromy
-didst
-diductor
-Didunculidae
-Didunculinae
-Didunculus
-Didus
-didym
-didymate
-didymia
-didymitis
-didymium
-didymoid
-didymolite
-didymous
-didymus
-Didynamia
-didynamian
-didynamic
-didynamous
-didynamy
-die
-dieb
-dieback
-diectasis
-diedral
-diedric
-Dieffenbachia
-Diego
-Diegueno
-diehard
-dielectric
-dielectrically
-dielike
-Dielytra
-diem
-diemaker
-diemaking
-diencephalic
-diencephalon
-diene
-dier
-Dieri
-Diervilla
-diesel
-dieselization
-dieselize
-diesinker
-diesinking
-diesis
-diestock
-diet
-dietal
-dietarian
-dietary
-Dieter
-dieter
-dietetic
-dietetically
-dietetics
-dietetist
-diethanolamine
-diethyl
-diethylamine
-diethylenediamine
-diethylstilbestrol
-dietic
-dietician
-dietics
-dietine
-dietist
-dietitian
-dietotherapeutics
-dietotherapy
-dietotoxic
-dietotoxicity
-dietrichite
-dietzeite
-diewise
-Dieyerie
-diezeugmenon
-Difda
-diferrion
-diffame
-diffarreation
-differ
-difference
-differencingly
-different
-differentia
-differentiable
-differential
-differentialize
-differentially
-differentiant
-differentiate
-differentiation
-differentiator
-differently
-differentness
-differingly
-difficile
-difficileness
-difficult
-difficultly
-difficultness
-difficulty
-diffidation
-diffide
-diffidence
-diffident
-diffidently
-diffidentness
-diffinity
-diffluence
-diffluent
-Difflugia
-difform
-difformed
-difformity
-diffract
-diffraction
-diffractive
-diffractively
-diffractiveness
-diffractometer
-diffrangibility
-diffrangible
-diffugient
-diffusate
-diffuse
-diffused
-diffusedly
-diffusely
-diffuseness
-diffuser
-diffusibility
-diffusible
-diffusibleness
-diffusibly
-diffusimeter
-diffusiometer
-diffusion
-diffusionism
-diffusionist
-diffusive
-diffusively
-diffusiveness
-diffusivity
-diffusor
-diformin
-dig
-digallate
-digallic
-digametic
-digamist
-digamma
-digammated
-digammic
-digamous
-digamy
-digastric
-Digenea
-digeneous
-digenesis
-digenetic
-Digenetica
-digenic
-digenous
-digeny
-digerent
-digest
-digestant
-digested
-digestedly
-digestedness
-digester
-digestibility
-digestible
-digestibleness
-digestibly
-digestion
-digestional
-digestive
-digestively
-digestiveness
-digestment
-diggable
-digger
-digging
-diggings
-dight
-dighter
-digit
-digital
-digitalein
-digitalin
-digitalis
-digitalism
-digitalization
-digitalize
-digitally
-Digitaria
-digitate
-digitated
-digitately
-digitation
-digitiform
-Digitigrada
-digitigrade
-digitigradism
-digitinervate
-digitinerved
-digitipinnate
-digitize
-digitizer
-digitogenin
-digitonin
-digitoplantar
-digitorium
-digitoxin
-digitoxose
-digitule
-digitus
-digladiate
-digladiation
-digladiator
-diglossia
-diglot
-diglottic
-diglottism
-diglottist
-diglucoside
-diglyceride
-diglyph
-diglyphic
-digmeat
-dignification
-dignified
-dignifiedly
-dignifiedness
-dignify
-dignitarial
-dignitarian
-dignitary
-dignity
-digoneutic
-digoneutism
-digonoporous
-digonous
-Digor
-digram
-digraph
-digraphic
-digredience
-digrediency
-digredient
-digress
-digressingly
-digression
-digressional
-digressionary
-digressive
-digressively
-digressiveness
-digressory
-digs
-diguanide
-Digynia
-digynian
-digynous
-dihalide
-dihalo
-dihalogen
-dihedral
-dihedron
-dihexagonal
-dihexahedral
-dihexahedron
-dihybrid
-dihybridism
-dihydrate
-dihydrated
-dihydrazone
-dihydric
-dihydride
-dihydrite
-dihydrocupreine
-dihydrocuprin
-dihydrogen
-dihydrol
-dihydronaphthalene
-dihydronicotine
-dihydrotachysterol
-dihydroxy
-dihydroxysuccinic
-dihydroxytoluene
-dihysteria
-diiamb
-diiambus
-diiodide
-diiodo
-diiodoform
-diipenates
-Diipolia
-diisatogen
-dijudicate
-dijudication
-dika
-dikage
-dikamali
-dikaryon
-dikaryophase
-dikaryophasic
-dikaryophyte
-dikaryophytic
-dikaryotic
-Dike
-dike
-dikegrave
-dikelocephalid
-Dikelocephalus
-diker
-dikereeve
-dikeside
-diketo
-diketone
-dikkop
-diktyonite
-dilacerate
-dilaceration
-dilambdodont
-dilamination
-Dilantin
-dilapidate
-dilapidated
-dilapidation
-dilapidator
-dilatability
-dilatable
-dilatableness
-dilatably
-dilatancy
-dilatant
-dilatate
-dilatation
-dilatative
-dilatator
-dilatatory
-dilate
-dilated
-dilatedly
-dilatedness
-dilater
-dilatingly
-dilation
-dilative
-dilatometer
-dilatometric
-dilatometry
-dilator
-dilatorily
-dilatoriness
-dilatory
-dildo
-dilection
-Dilemi
-Dilemite
-dilemma
-dilemmatic
-dilemmatical
-dilemmatically
-dilettant
-dilettante
-dilettanteish
-dilettanteism
-dilettanteship
-dilettanti
-dilettantish
-dilettantism
-dilettantist
-diligence
-diligency
-diligent
-diligentia
-diligently
-diligentness
-dilker
-dill
-Dillenia
-Dilleniaceae
-dilleniaceous
-dilleniad
-dilli
-dillier
-dilligrout
-dilling
-dillseed
-dillue
-dilluer
-dillweed
-dilly
-dillydallier
-dillydally
-dillyman
-dilo
-dilogy
-diluent
-dilute
-diluted
-dilutedly
-dilutedness
-dilutee
-dilutely
-diluteness
-dilutent
-diluter
-dilution
-dilutive
-dilutor
-diluvia
-diluvial
-diluvialist
-diluvian
-diluvianism
-diluvion
-diluvium
-dim
-dimagnesic
-dimanganion
-dimanganous
-Dimaris
-dimastigate
-Dimatis
-dimber
-dimberdamber
-dimble
-dime
-dimensible
-dimension
-dimensional
-dimensionality
-dimensionally
-dimensioned
-dimensionless
-dimensive
-dimer
-Dimera
-dimeran
-dimercuric
-dimercurion
-dimercury
-dimeric
-dimeride
-dimerism
-dimerization
-dimerlie
-dimerous
-dimetallic
-dimeter
-dimethoxy
-dimethyl
-dimethylamine
-dimethylamino
-dimethylaniline
-dimethylbenzene
-dimetria
-dimetric
-Dimetry
-dimication
-dimidiate
-dimidiation
-diminish
-diminishable
-diminishableness
-diminisher
-diminishingly
-diminishment
-diminuendo
-diminutal
-diminute
-diminution
-diminutival
-diminutive
-diminutively
-diminutiveness
-diminutivize
-dimiss
-dimission
-dimissorial
-dimissory
-dimit
-Dimitry
-Dimittis
-dimity
-dimly
-dimmed
-dimmedness
-dimmer
-dimmest
-dimmet
-dimmish
-Dimna
-dimness
-dimolecular
-dimoric
-dimorph
-dimorphic
-dimorphism
-Dimorphotheca
-dimorphous
-dimple
-dimplement
-dimply
-dimps
-dimpsy
-Dimyaria
-dimyarian
-dimyaric
-din
-Dinah
-dinamode
-Dinantian
-dinaphthyl
-dinar
-Dinaric
-Dinarzade
-dinder
-dindle
-Dindymene
-Dindymus
-dine
-diner
-dinergate
-dineric
-dinero
-dinette
-dineuric
-ding
-dingar
-dingbat
-dingdong
-dinge
-dingee
-dinghee
-dinghy
-dingily
-dinginess
-dingle
-dingleberry
-dinglebird
-dingledangle
-dingly
-dingmaul
-dingo
-dingus
-Dingwall
-dingy
-dinheiro
-dinic
-dinical
-Dinichthys
-dining
-dinitrate
-dinitril
-dinitrile
-dinitro
-dinitrobenzene
-dinitrocellulose
-dinitrophenol
-dinitrotoluene
-dink
-Dinka
-dinkey
-dinkum
-dinky
-dinmont
-dinner
-dinnerless
-dinnerly
-dinnertime
-dinnerware
-dinnery
-Dinobryon
-Dinoceras
-Dinocerata
-dinoceratan
-dinoceratid
-Dinoceratidae
-Dinoflagellata
-Dinoflagellatae
-dinoflagellate
-Dinoflagellida
-dinomic
-Dinomys
-Dinophilea
-Dinophilus
-Dinophyceae
-Dinornis
-Dinornithes
-dinornithic
-dinornithid
-Dinornithidae
-Dinornithiformes
-dinornithine
-dinornithoid
-dinosaur
-Dinosauria
-dinosaurian
-dinothere
-Dinotheres
-dinotherian
-Dinotheriidae
-Dinotherium
-dinsome
-dint
-dintless
-dinus
-diobely
-diobol
-diocesan
-diocese
-Diocletian
-dioctahedral
-Dioctophyme
-diode
-Diodia
-Diodon
-diodont
-Diodontidae
-Dioecia
-dioecian
-dioeciodimorphous
-dioeciopolygamous
-dioecious
-dioeciously
-dioeciousness
-dioecism
-dioecy
-dioestrous
-dioestrum
-dioestrus
-Diogenean
-Diogenic
-diogenite
-dioicous
-diol
-diolefin
-diolefinic
-Diomedea
-Diomedeidae
-Dion
-Dionaea
-Dionaeaceae
-Dione
-dionise
-dionym
-dionymal
-Dionysia
-Dionysiac
-Dionysiacal
-Dionysiacally
-Dioon
-Diophantine
-Diopsidae
-diopside
-Diopsis
-dioptase
-diopter
-Dioptidae
-dioptograph
-dioptometer
-dioptometry
-dioptoscopy
-dioptra
-dioptral
-dioptrate
-dioptric
-dioptrical
-dioptrically
-dioptrics
-dioptrometer
-dioptrometry
-dioptroscopy
-dioptry
-diorama
-dioramic
-diordinal
-diorite
-dioritic
-diorthosis
-diorthotic
-Dioscorea
-Dioscoreaceae
-dioscoreaceous
-dioscorein
-dioscorine
-Dioscuri
-Dioscurian
-diose
-Diosma
-diosmin
-diosmose
-diosmosis
-diosmotic
-diosphenol
-Diospyraceae
-diospyraceous
-Diospyros
-diota
-diotic
-Diotocardia
-diovular
-dioxane
-dioxide
-dioxime
-dioxindole
-dioxy
-dip
-Dipala
-diparentum
-dipartite
-dipartition
-dipaschal
-dipentene
-dipeptid
-dipeptide
-dipetalous
-dipetto
-diphase
-diphaser
-diphasic
-diphead
-diphenol
-diphenyl
-diphenylamine
-diphenylchloroarsine
-diphenylene
-diphenylenimide
-diphenylguanidine
-diphenylmethane
-diphenylquinomethane
-diphenylthiourea
-diphosgene
-diphosphate
-diphosphide
-diphosphoric
-diphosphothiamine
-diphrelatic
-diphtheria
-diphtherial
-diphtherian
-diphtheric
-diphtheritic
-diphtheritically
-diphtheritis
-diphtheroid
-diphtheroidal
-diphtherotoxin
-diphthong
-diphthongal
-diphthongalize
-diphthongally
-diphthongation
-diphthongic
-diphthongization
-diphthongize
-diphycercal
-diphycercy
-Diphyes
-diphygenic
-diphyletic
-Diphylla
-Diphylleia
-Diphyllobothrium
-diphyllous
-diphyodont
-diphyozooid
-Diphysite
-Diphysitism
-diphyzooid
-dipicrate
-dipicrylamin
-dipicrylamine
-Diplacanthidae
-Diplacanthus
-diplacusis
-Dipladenia
-diplanar
-diplanetic
-diplanetism
-diplantidian
-diplarthrism
-diplarthrous
-diplasiasmus
-diplasic
-diplasion
-diplegia
-dipleidoscope
-dipleura
-dipleural
-dipleurogenesis
-dipleurogenetic
-diplex
-diplobacillus
-diplobacterium
-diploblastic
-diplocardia
-diplocardiac
-Diplocarpon
-diplocaulescent
-diplocephalous
-diplocephalus
-diplocephaly
-diplochlamydeous
-diplococcal
-diplococcemia
-diplococcic
-diplococcoid
-diplococcus
-diploconical
-diplocoria
-Diplodia
-Diplodocus
-Diplodus
-diploe
-diploetic
-diplogangliate
-diplogenesis
-diplogenetic
-diplogenic
-Diploglossata
-diploglossate
-diplograph
-diplographic
-diplographical
-diplography
-diplohedral
-diplohedron
-diploic
-diploid
-diploidic
-diploidion
-diploidy
-diplois
-diplokaryon
-diploma
-diplomacy
-diplomat
-diplomate
-diplomatic
-diplomatical
-diplomatically
-diplomatics
-diplomatism
-diplomatist
-diplomatize
-diplomatology
-diplomyelia
-diplonema
-diplonephridia
-diploneural
-diplont
-diploperistomic
-diplophase
-diplophyte
-diplopia
-diplopic
-diploplacula
-diploplacular
-diploplaculate
-diplopod
-Diplopoda
-diplopodic
-Diploptera
-diplopterous
-Diplopteryga
-diplopy
-diplosis
-diplosome
-diplosphenal
-diplosphene
-Diplospondyli
-diplospondylic
-diplospondylism
-diplostemonous
-diplostemony
-diplostichous
-Diplotaxis
-diplotegia
-diplotene
-Diplozoon
-diplumbic
-Dipneumona
-Dipneumones
-dipneumonous
-dipneustal
-Dipneusti
-dipnoan
-Dipnoi
-dipnoid
-dipnoous
-dipode
-dipodic
-Dipodidae
-Dipodomyinae
-Dipodomys
-dipody
-dipolar
-dipolarization
-dipolarize
-dipole
-diporpa
-dipotassic
-dipotassium
-dipped
-dipper
-dipperful
-dipping
-diprimary
-diprismatic
-dipropargyl
-dipropyl
-Diprotodon
-diprotodont
-Diprotodontia
-Dipsacaceae
-dipsacaceous
-Dipsaceae
-dipsaceous
-Dipsacus
-Dipsadinae
-dipsas
-dipsetic
-dipsey
-dipsomania
-dipsomaniac
-dipsomaniacal
-Dipsosaurus
-dipsosis
-dipter
-Diptera
-Dipteraceae
-dipteraceous
-dipterad
-dipteral
-dipteran
-dipterist
-dipterocarp
-Dipterocarpaceae
-dipterocarpaceous
-dipterocarpous
-Dipterocarpus
-dipterocecidium
-dipterological
-dipterologist
-dipterology
-dipteron
-dipteros
-dipterous
-Dipteryx
-diptote
-diptych
-Dipus
-dipware
-dipygus
-dipylon
-dipyre
-dipyrenous
-dipyridyl
-Dirca
-Dircaean
-dird
-dirdum
-dire
-direct
-directable
-directed
-directer
-direction
-directional
-directionally
-directionless
-directitude
-directive
-directively
-directiveness
-directivity
-directly
-directness
-Directoire
-director
-directoral
-directorate
-directorial
-directorially
-directorship
-directory
-directress
-directrices
-directrix
-direful
-direfully
-direfulness
-direly
-dirempt
-diremption
-direness
-direption
-dirge
-dirgeful
-dirgelike
-dirgeman
-dirgler
-dirhem
-Dirian
-Dirichletian
-dirigent
-dirigibility
-dirigible
-dirigomotor
-diriment
-Dirk
-dirk
-dirl
-dirndl
-dirt
-dirtbird
-dirtboard
-dirten
-dirtily
-dirtiness
-dirtplate
-dirty
-dis
-Disa
-disability
-disable
-disabled
-disablement
-disabusal
-disabuse
-disacceptance
-disaccharide
-disaccharose
-disaccommodate
-disaccommodation
-disaccord
-disaccordance
-disaccordant
-disaccustom
-disaccustomed
-disaccustomedness
-disacidify
-disacknowledge
-disacknowledgement
-disacquaint
-disacquaintance
-disadjust
-disadorn
-disadvance
-disadvantage
-disadvantageous
-disadvantageously
-disadvantageousness
-disadventure
-disadventurous
-disadvise
-disaffect
-disaffectation
-disaffected
-disaffectedly
-disaffectedness
-disaffection
-disaffectionate
-disaffiliate
-disaffiliation
-disaffirm
-disaffirmance
-disaffirmation
-disaffirmative
-disafforest
-disafforestation
-disafforestment
-disagglomeration
-disaggregate
-disaggregation
-disaggregative
-disagio
-disagree
-disagreeability
-disagreeable
-disagreeableness
-disagreeably
-disagreed
-disagreement
-disagreer
-disalicylide
-disalign
-disalignment
-disalike
-disallow
-disallowable
-disallowableness
-disallowance
-disally
-disamenity
-Disamis
-disanagrammatize
-disanalogous
-disangularize
-disanimal
-disanimate
-disanimation
-disannex
-disannexation
-disannul
-disannuller
-disannulment
-disanoint
-disanswerable
-disapostle
-disapparel
-disappear
-disappearance
-disappearer
-disappearing
-disappoint
-disappointed
-disappointedly
-disappointer
-disappointing
-disappointingly
-disappointingness
-disappointment
-disappreciate
-disappreciation
-disapprobation
-disapprobative
-disapprobatory
-disappropriate
-disappropriation
-disapprovable
-disapproval
-disapprove
-disapprover
-disapprovingly
-disaproned
-disarchbishop
-disarm
-disarmament
-disarmature
-disarmed
-disarmer
-disarming
-disarmingly
-disarrange
-disarrangement
-disarray
-disarticulate
-disarticulation
-disarticulator
-disasinate
-disasinize
-disassemble
-disassembly
-disassimilate
-disassimilation
-disassimilative
-disassociate
-disassociation
-disaster
-disastimeter
-disastrous
-disastrously
-disastrousness
-disattaint
-disattire
-disattune
-disauthenticate
-disauthorize
-disavow
-disavowable
-disavowal
-disavowedly
-disavower
-disavowment
-disawa
-disazo
-disbalance
-disbalancement
-disband
-disbandment
-disbar
-disbark
-disbarment
-disbelief
-disbelieve
-disbeliever
-disbelieving
-disbelievingly
-disbench
-disbenchment
-disbloom
-disbody
-disbosom
-disbowel
-disbrain
-disbranch
-disbud
-disbudder
-disburden
-disburdenment
-disbursable
-disburse
-disbursement
-disburser
-disburthen
-disbury
-disbutton
-disc
-discage
-discal
-discalceate
-discalced
-discanonization
-discanonize
-discanter
-discantus
-discapacitate
-discard
-discardable
-discarder
-discardment
-discarnate
-discarnation
-discase
-discastle
-discept
-disceptation
-disceptator
-discern
-discerner
-discernible
-discernibleness
-discernibly
-discerning
-discerningly
-discernment
-discerp
-discerpibility
-discerpible
-discerpibleness
-discerptibility
-discerptible
-discerptibleness
-discerption
-discharacter
-discharge
-dischargeable
-dischargee
-discharger
-discharging
-discharity
-discharm
-dischase
-Disciflorae
-discifloral
-disciform
-discigerous
-Discina
-discinct
-discinoid
-disciple
-disciplelike
-discipleship
-disciplinability
-disciplinable
-disciplinableness
-disciplinal
-disciplinant
-disciplinarian
-disciplinarianism
-disciplinarily
-disciplinary
-disciplinative
-disciplinatory
-discipline
-discipliner
-discipular
-discircumspection
-discission
-discitis
-disclaim
-disclaimant
-disclaimer
-disclamation
-disclamatory
-disclass
-disclassify
-disclike
-disclimax
-discloister
-disclose
-disclosed
-discloser
-disclosive
-disclosure
-discloud
-discoach
-discoactine
-discoblastic
-discoblastula
-discobolus
-discocarp
-discocarpium
-discocarpous
-discocephalous
-discodactyl
-discodactylous
-discogastrula
-discoglossid
-Discoglossidae
-discoglossoid
-discographical
-discography
-discohexaster
-discoid
-discoidal
-Discoidea
-Discoideae
-discolichen
-discolith
-discolor
-discolorate
-discoloration
-discolored
-discoloredness
-discolorization
-discolorment
-discolourization
-Discomedusae
-discomedusan
-discomedusoid
-discomfit
-discomfiter
-discomfiture
-discomfort
-discomfortable
-discomfortableness
-discomforting
-discomfortingly
-discommend
-discommendable
-discommendableness
-discommendably
-discommendation
-discommender
-discommode
-discommodious
-discommodiously
-discommodiousness
-discommodity
-discommon
-discommons
-discommunity
-discomorula
-discompliance
-discompose
-discomposed
-discomposedly
-discomposedness
-discomposing
-discomposingly
-discomposure
-discomycete
-Discomycetes
-discomycetous
-Disconanthae
-disconanthous
-disconcert
-disconcerted
-disconcertedly
-disconcertedness
-disconcerting
-disconcertingly
-disconcertingness
-disconcertion
-disconcertment
-disconcord
-disconduce
-disconducive
-Disconectae
-disconform
-disconformable
-disconformity
-discongruity
-disconjure
-disconnect
-disconnected
-disconnectedly
-disconnectedness
-disconnecter
-disconnection
-disconnective
-disconnectiveness
-disconnector
-disconsider
-disconsideration
-disconsolate
-disconsolately
-disconsolateness
-disconsolation
-disconsonancy
-disconsonant
-discontent
-discontented
-discontentedly
-discontentedness
-discontentful
-discontenting
-discontentive
-discontentment
-discontiguity
-discontiguous
-discontiguousness
-discontinuable
-discontinuance
-discontinuation
-discontinue
-discontinuee
-discontinuer
-discontinuity
-discontinuor
-discontinuous
-discontinuously
-discontinuousness
-disconula
-disconvenience
-disconvenient
-disconventicle
-discophile
-Discophora
-discophoran
-discophore
-discophorous
-discoplacenta
-discoplacental
-Discoplacentalia
-discoplacentalian
-discoplasm
-discopodous
-discord
-discordance
-discordancy
-discordant
-discordantly
-discordantness
-discordful
-Discordia
-discording
-discorporate
-discorrespondency
-discorrespondent
-discount
-discountable
-discountenance
-discountenancer
-discounter
-discouple
-discourage
-discourageable
-discouragement
-discourager
-discouraging
-discouragingly
-discouragingness
-discourse
-discourseless
-discourser
-discoursive
-discoursively
-discoursiveness
-discourteous
-discourteously
-discourteousness
-discourtesy
-discous
-discovenant
-discover
-discoverability
-discoverable
-discoverably
-discovered
-discoverer
-discovert
-discoverture
-discovery
-discreate
-discreation
-discredence
-discredit
-discreditability
-discreditable
-discreet
-discreetly
-discreetness
-discrepance
-discrepancy
-discrepant
-discrepantly
-discrepate
-discrepation
-discrested
-discrete
-discretely
-discreteness
-discretion
-discretional
-discretionally
-discretionarily
-discretionary
-discretive
-discretively
-discretiveness
-discriminability
-discriminable
-discriminal
-discriminant
-discriminantal
-discriminate
-discriminately
-discriminateness
-discriminating
-discriminatingly
-discrimination
-discriminational
-discriminative
-discriminatively
-discriminator
-discriminatory
-discrown
-disculpate
-disculpation
-disculpatory
-discumber
-discursative
-discursativeness
-discursify
-discursion
-discursive
-discursively
-discursiveness
-discursory
-discursus
-discurtain
-discus
-discuss
-discussable
-discussant
-discusser
-discussible
-discussion
-discussional
-discussionism
-discussionist
-discussive
-discussment
-discutable
-discutient
-disdain
-disdainable
-disdainer
-disdainful
-disdainfully
-disdainfulness
-disdainly
-disdeceive
-disdenominationalize
-disdiaclast
-disdiaclastic
-disdiapason
-disdiazo
-disdiplomatize
-disdodecahedroid
-disdub
-disease
-diseased
-diseasedly
-diseasedness
-diseaseful
-diseasefulness
-disecondary
-disedge
-disedification
-disedify
-diseducate
-diselder
-diselectrification
-diselectrify
-diselenide
-disematism
-disembargo
-disembark
-disembarkation
-disembarkment
-disembarrass
-disembarrassment
-disembattle
-disembed
-disembellish
-disembitter
-disembocation
-disembodiment
-disembody
-disembogue
-disemboguement
-disembosom
-disembowel
-disembowelment
-disembower
-disembroil
-disemburden
-diseme
-disemic
-disemplane
-disemploy
-disemployment
-disempower
-disenable
-disenablement
-disenact
-disenactment
-disenamor
-disenamour
-disenchain
-disenchant
-disenchanter
-disenchantingly
-disenchantment
-disenchantress
-disencharm
-disenclose
-disencumber
-disencumberment
-disencumbrance
-disendow
-disendower
-disendowment
-disenfranchise
-disenfranchisement
-disengage
-disengaged
-disengagedness
-disengagement
-disengirdle
-disenjoy
-disenjoyment
-disenmesh
-disennoble
-disennui
-disenshroud
-disenslave
-disensoul
-disensure
-disentail
-disentailment
-disentangle
-disentanglement
-disentangler
-disenthral
-disenthrall
-disenthrallment
-disenthralment
-disenthrone
-disenthronement
-disentitle
-disentomb
-disentombment
-disentrain
-disentrainment
-disentrammel
-disentrance
-disentrancement
-disentwine
-disenvelop
-disepalous
-disequalize
-disequalizer
-disequilibrate
-disequilibration
-disequilibrium
-disestablish
-disestablisher
-disestablishment
-disestablishmentarian
-disesteem
-disesteemer
-disestimation
-disexcommunicate
-disfaith
-disfame
-disfashion
-disfavor
-disfavorer
-disfeature
-disfeaturement
-disfellowship
-disfen
-disfiguration
-disfigurative
-disfigure
-disfigurement
-disfigurer
-disfiguringly
-disflesh
-disfoliage
-disforest
-disforestation
-disfranchise
-disfranchisement
-disfranchiser
-disfrequent
-disfriar
-disfrock
-disfurnish
-disfurnishment
-disgarland
-disgarnish
-disgarrison
-disgavel
-disgeneric
-disgenius
-disgig
-disglorify
-disglut
-disgood
-disgorge
-disgorgement
-disgorger
-disgospel
-disgown
-disgrace
-disgraceful
-disgracefully
-disgracefulness
-disgracement
-disgracer
-disgracious
-disgradation
-disgrade
-disgregate
-disgregation
-disgruntle
-disgruntlement
-disguisable
-disguisal
-disguise
-disguised
-disguisedly
-disguisedness
-disguiseless
-disguisement
-disguiser
-disguising
-disgulf
-disgust
-disgusted
-disgustedly
-disgustedness
-disguster
-disgustful
-disgustfully
-disgustfulness
-disgusting
-disgustingly
-disgustingness
-dish
-dishabilitate
-dishabilitation
-dishabille
-dishabituate
-dishallow
-dishallucination
-disharmonic
-disharmonical
-disharmonious
-disharmonism
-disharmonize
-disharmony
-dishboard
-dishcloth
-dishclout
-disheart
-dishearten
-disheartener
-disheartening
-dishearteningly
-disheartenment
-disheaven
-dished
-dishellenize
-dishelm
-disher
-disherent
-disherison
-disherit
-disheritment
-dishevel
-disheveled
-dishevelment
-dishexecontahedroid
-dishful
-Dishley
-dishlike
-dishling
-dishmaker
-dishmaking
-dishmonger
-dishome
-dishonest
-dishonestly
-dishonor
-dishonorable
-dishonorableness
-dishonorably
-dishonorary
-dishonorer
-dishorn
-dishorner
-dishorse
-dishouse
-dishpan
-dishpanful
-dishrag
-dishumanize
-dishwasher
-dishwashing
-dishwashings
-dishwater
-dishwatery
-dishwiper
-dishwiping
-disidentify
-disilane
-disilicane
-disilicate
-disilicic
-disilicid
-disilicide
-disillude
-disilluminate
-disillusion
-disillusionist
-disillusionize
-disillusionizer
-disillusionment
-disillusive
-disimagine
-disimbitter
-disimitate
-disimitation
-disimmure
-disimpark
-disimpassioned
-disimprison
-disimprisonment
-disimprove
-disimprovement
-disincarcerate
-disincarceration
-disincarnate
-disincarnation
-disinclination
-disincline
-disincorporate
-disincorporation
-disincrust
-disincrustant
-disincrustion
-disindividualize
-disinfect
-disinfectant
-disinfecter
-disinfection
-disinfective
-disinfector
-disinfest
-disinfestation
-disinfeudation
-disinflame
-disinflate
-disinflation
-disingenuity
-disingenuous
-disingenuously
-disingenuousness
-disinherison
-disinherit
-disinheritable
-disinheritance
-disinhume
-disinsulation
-disinsure
-disintegrable
-disintegrant
-disintegrate
-disintegration
-disintegrationist
-disintegrative
-disintegrator
-disintegratory
-disintegrity
-disintegrous
-disintensify
-disinter
-disinterest
-disinterested
-disinterestedly
-disinterestedness
-disinteresting
-disinterment
-disintertwine
-disintrench
-disintricate
-disinvagination
-disinvest
-disinvestiture
-disinvigorate
-disinvite
-disinvolve
-disjasked
-disject
-disjection
-disjoin
-disjoinable
-disjoint
-disjointed
-disjointedly
-disjointedness
-disjointly
-disjointure
-disjunct
-disjunction
-disjunctive
-disjunctively
-disjunctor
-disjuncture
-disjune
-disk
-diskelion
-diskless
-disklike
-dislaurel
-disleaf
-dislegitimate
-dislevelment
-dislicense
-dislikable
-dislike
-dislikelihood
-disliker
-disliking
-dislimn
-dislink
-dislip
-disload
-dislocability
-dislocable
-dislocate
-dislocated
-dislocatedly
-dislocatedness
-dislocation
-dislocator
-dislocatory
-dislodge
-dislodgeable
-dislodgement
-dislove
-disloyal
-disloyalist
-disloyally
-disloyalty
-disluster
-dismain
-dismal
-dismality
-dismalize
-dismally
-dismalness
-disman
-dismantle
-dismantlement
-dismantler
-dismarble
-dismark
-dismarket
-dismask
-dismast
-dismastment
-dismay
-dismayable
-dismayed
-dismayedness
-dismayful
-dismayfully
-dismayingly
-disme
-dismember
-dismembered
-dismemberer
-dismemberment
-dismembrate
-dismembrator
-disminion
-disminister
-dismiss
-dismissable
-dismissal
-dismissible
-dismissingly
-dismission
-dismissive
-dismissory
-dismoded
-dismount
-dismountable
-dismutation
-disna
-disnaturalization
-disnaturalize
-disnature
-disnest
-disnew
-disniche
-disnosed
-disnumber
-disobedience
-disobedient
-disobediently
-disobey
-disobeyal
-disobeyer
-disobligation
-disoblige
-disobliger
-disobliging
-disobligingly
-disobligingness
-disoccupation
-disoccupy
-disodic
-disodium
-disomatic
-disomatous
-disomic
-disomus
-disoperculate
-disorb
-disorchard
-disordained
-disorder
-disordered
-disorderedly
-disorderedness
-disorderer
-disorderliness
-disorderly
-disordinated
-disordination
-disorganic
-disorganization
-disorganize
-disorganizer
-disorient
-disorientate
-disorientation
-disown
-disownable
-disownment
-disoxygenate
-disoxygenation
-disozonize
-dispapalize
-disparage
-disparageable
-disparagement
-disparager
-disparaging
-disparagingly
-disparate
-disparately
-disparateness
-disparation
-disparity
-dispark
-dispart
-dispartment
-dispassionate
-dispassionately
-dispassionateness
-dispassioned
-dispatch
-dispatcher
-dispatchful
-dispatriated
-dispauper
-dispauperize
-dispeace
-dispeaceful
-dispel
-dispeller
-dispend
-dispender
-dispendious
-dispendiously
-dispenditure
-dispensability
-dispensable
-dispensableness
-dispensary
-dispensate
-dispensation
-dispensational
-dispensative
-dispensatively
-dispensator
-dispensatorily
-dispensatory
-dispensatress
-dispensatrix
-dispense
-dispenser
-dispensingly
-dispeople
-dispeoplement
-dispeopler
-dispergate
-dispergation
-dispergator
-dispericraniate
-disperiwig
-dispermic
-dispermous
-dispermy
-dispersal
-dispersant
-disperse
-dispersed
-dispersedly
-dispersedness
-dispersement
-disperser
-dispersibility
-dispersible
-dispersion
-dispersity
-dispersive
-dispersively
-dispersiveness
-dispersoid
-dispersoidological
-dispersoidology
-dispersonalize
-dispersonate
-dispersonification
-dispersonify
-dispetal
-disphenoid
-dispiece
-dispireme
-dispirit
-dispirited
-dispiritedly
-dispiritedness
-dispiritingly
-dispiritment
-dispiteous
-dispiteously
-dispiteousness
-displace
-displaceability
-displaceable
-displacement
-displacency
-displacer
-displant
-display
-displayable
-displayed
-displayer
-displease
-displeased
-displeasedly
-displeaser
-displeasing
-displeasingly
-displeasingness
-displeasurable
-displeasurably
-displeasure
-displeasurement
-displenish
-displicency
-displume
-displuviate
-dispondaic
-dispondee
-dispone
-disponee
-disponent
-disponer
-dispope
-dispopularize
-disporous
-disport
-disportive
-disportment
-Disporum
-disposability
-disposable
-disposableness
-disposal
-dispose
-disposed
-disposedly
-disposedness
-disposer
-disposingly
-disposition
-dispositional
-dispositioned
-dispositive
-dispositively
-dispossess
-dispossession
-dispossessor
-dispossessory
-dispost
-disposure
-dispowder
-dispractice
-dispraise
-dispraiser
-dispraisingly
-dispread
-dispreader
-disprejudice
-disprepare
-disprince
-disprison
-disprivacied
-disprivilege
-disprize
-disprobabilization
-disprobabilize
-disprobative
-dispromise
-disproof
-disproportion
-disproportionable
-disproportionableness
-disproportionably
-disproportional
-disproportionality
-disproportionally
-disproportionalness
-disproportionate
-disproportionately
-disproportionateness
-disproportionation
-disprovable
-disproval
-disprove
-disprovement
-disproven
-disprover
-dispulp
-dispunct
-dispunishable
-dispunitive
-disputability
-disputable
-disputableness
-disputably
-disputant
-disputation
-disputatious
-disputatiously
-disputatiousness
-disputative
-disputatively
-disputativeness
-disputator
-dispute
-disputeless
-disputer
-disqualification
-disqualify
-disquantity
-disquiet
-disquieted
-disquietedly
-disquietedness
-disquieten
-disquieter
-disquieting
-disquietingly
-disquietly
-disquietness
-disquietude
-disquiparancy
-disquiparant
-disquiparation
-disquisite
-disquisition
-disquisitional
-disquisitionary
-disquisitive
-disquisitively
-disquisitor
-disquisitorial
-disquisitory
-disquixote
-disrank
-disrate
-disrealize
-disrecommendation
-disregard
-disregardable
-disregardance
-disregardant
-disregarder
-disregardful
-disregardfully
-disregardfulness
-disrelated
-disrelation
-disrelish
-disrelishable
-disremember
-disrepair
-disreputability
-disreputable
-disreputableness
-disreputably
-disreputation
-disrepute
-disrespect
-disrespecter
-disrespectful
-disrespectfully
-disrespectfulness
-disrestore
-disring
-disrobe
-disrobement
-disrober
-disroof
-disroost
-disroot
-disrudder
-disrump
-disrupt
-disruptability
-disruptable
-disrupter
-disruption
-disruptionist
-disruptive
-disruptively
-disruptiveness
-disruptment
-disruptor
-disrupture
-diss
-dissatisfaction
-dissatisfactoriness
-dissatisfactory
-dissatisfied
-dissatisfiedly
-dissatisfiedness
-dissatisfy
-dissaturate
-disscepter
-disseat
-dissect
-dissected
-dissectible
-dissecting
-dissection
-dissectional
-dissective
-dissector
-disseize
-disseizee
-disseizin
-disseizor
-disseizoress
-disselboom
-dissemblance
-dissemble
-dissembler
-dissemblingly
-dissembly
-dissemilative
-disseminate
-dissemination
-disseminative
-disseminator
-disseminule
-dissension
-dissensualize
-dissent
-dissentaneous
-dissentaneousness
-dissenter
-dissenterism
-dissentience
-dissentiency
-dissentient
-dissenting
-dissentingly
-dissentious
-dissentiously
-dissentism
-dissentment
-dissepiment
-dissepimental
-dissert
-dissertate
-dissertation
-dissertational
-dissertationist
-dissertative
-dissertator
-disserve
-disservice
-disserviceable
-disserviceableness
-disserviceably
-dissettlement
-dissever
-disseverance
-disseverment
-disshadow
-dissheathe
-disshroud
-dissidence
-dissident
-dissidently
-dissight
-dissightly
-dissiliency
-dissilient
-dissimilar
-dissimilarity
-dissimilarly
-dissimilars
-dissimilate
-dissimilation
-dissimilatory
-dissimile
-dissimilitude
-dissimulate
-dissimulation
-dissimulative
-dissimulator
-dissimule
-dissimuler
-dissipable
-dissipate
-dissipated
-dissipatedly
-dissipatedness
-dissipater
-dissipation
-dissipative
-dissipativity
-dissipator
-dissociability
-dissociable
-dissociableness
-dissocial
-dissociality
-dissocialize
-dissociant
-dissociate
-dissociation
-dissociative
-dissoconch
-dissogeny
-dissogony
-dissolubility
-dissoluble
-dissolubleness
-dissolute
-dissolutely
-dissoluteness
-dissolution
-dissolutional
-dissolutionism
-dissolutionist
-dissolutive
-dissolvable
-dissolvableness
-dissolve
-dissolveability
-dissolvent
-dissolver
-dissolving
-dissolvingly
-dissonance
-dissonancy
-dissonant
-dissonantly
-dissonous
-dissoul
-dissuade
-dissuader
-dissuasion
-dissuasive
-dissuasively
-dissuasiveness
-dissuasory
-dissuit
-dissuitable
-dissuited
-dissyllabic
-dissyllabification
-dissyllabify
-dissyllabism
-dissyllabize
-dissyllable
-dissymmetric
-dissymmetrical
-dissymmetrically
-dissymmetry
-dissympathize
-dissympathy
-distad
-distaff
-distain
-distal
-distale
-distally
-distalwards
-distance
-distanceless
-distancy
-distannic
-distant
-distantly
-distantness
-distaste
-distasted
-distasteful
-distastefully
-distastefulness
-distater
-distemonous
-distemper
-distemperature
-distempered
-distemperedly
-distemperedness
-distemperer
-distenant
-distend
-distendedly
-distender
-distensibility
-distensible
-distensive
-distent
-distention
-disthene
-disthrall
-disthrone
-distich
-Distichlis
-distichous
-distichously
-distill
-distillable
-distillage
-distilland
-distillate
-distillation
-distillatory
-distilled
-distiller
-distillery
-distilling
-distillmint
-distinct
-distinctify
-distinction
-distinctional
-distinctionless
-distinctive
-distinctively
-distinctiveness
-distinctly
-distinctness
-distingue
-distinguish
-distinguishability
-distinguishable
-distinguishableness
-distinguishably
-distinguished
-distinguishedly
-distinguisher
-distinguishing
-distinguishingly
-distinguishment
-distoclusion
-Distoma
-Distomatidae
-distomatosis
-distomatous
-distome
-distomian
-distomiasis
-Distomidae
-Distomum
-distort
-distorted
-distortedly
-distortedness
-distorter
-distortion
-distortional
-distortionist
-distortionless
-distortive
-distract
-distracted
-distractedly
-distractedness
-distracter
-distractibility
-distractible
-distractingly
-distraction
-distractive
-distractively
-distrain
-distrainable
-distrainee
-distrainer
-distrainment
-distrainor
-distraint
-distrait
-distraite
-distraught
-distress
-distressed
-distressedly
-distressedness
-distressful
-distressfully
-distressfulness
-distressing
-distressingly
-distributable
-distributary
-distribute
-distributed
-distributedly
-distributee
-distributer
-distribution
-distributional
-distributionist
-distributival
-distributive
-distributively
-distributiveness
-distributor
-distributress
-district
-distrouser
-distrust
-distruster
-distrustful
-distrustfully
-distrustfulness
-distrustingly
-distune
-disturb
-disturbance
-disturbative
-disturbed
-disturbedly
-disturber
-disturbing
-disturbingly
-disturn
-disturnpike
-disubstituted
-disubstitution
-disulfonic
-disulfuric
-disulphate
-disulphide
-disulphonate
-disulphone
-disulphonic
-disulphoxide
-disulphuret
-disulphuric
-disuniform
-disuniformity
-disunify
-disunion
-disunionism
-disunionist
-disunite
-disuniter
-disunity
-disusage
-disusance
-disuse
-disutility
-disutilize
-disvaluation
-disvalue
-disvertebrate
-disvisage
-disvoice
-disvulnerability
-diswarren
-diswench
-diswood
-disworth
-disyllabic
-disyllable
-disyoke
-dit
-dita
-dital
-ditch
-ditchbank
-ditchbur
-ditchdigger
-ditchdown
-ditcher
-ditchless
-ditchside
-ditchwater
-dite
-diter
-diterpene
-ditertiary
-ditetragonal
-dithalous
-dithecal
-ditheism
-ditheist
-ditheistic
-ditheistical
-dithematic
-dither
-dithery
-dithiobenzoic
-dithioglycol
-dithioic
-dithion
-dithionate
-dithionic
-dithionite
-dithionous
-dithymol
-dithyramb
-dithyrambic
-dithyrambically
-Dithyrambos
-Dithyrambus
-ditokous
-ditolyl
-ditone
-ditrematous
-ditremid
-Ditremidae
-ditrichotomous
-ditriglyph
-ditriglyphic
-ditrigonal
-ditrigonally
-Ditrocha
-ditrochean
-ditrochee
-ditrochous
-ditroite
-dittamy
-dittander
-dittany
-dittay
-dittied
-ditto
-dittogram
-dittograph
-dittographic
-dittography
-dittology
-ditty
-diumvirate
-diuranate
-diureide
-diuresis
-diuretic
-diuretically
-diureticalness
-Diurna
-diurnal
-diurnally
-diurnalness
-diurnation
-diurne
-diurnule
-diuturnal
-diuturnity
-div
-diva
-divagate
-divagation
-divalence
-divalent
-divan
-divariant
-divaricate
-divaricately
-divaricating
-divaricatingly
-divarication
-divaricator
-divata
-dive
-divekeeper
-divel
-divellent
-divellicate
-diver
-diverge
-divergement
-divergence
-divergency
-divergent
-divergently
-diverging
-divergingly
-divers
-diverse
-diversely
-diverseness
-diversicolored
-diversifiability
-diversifiable
-diversification
-diversified
-diversifier
-diversiflorate
-diversiflorous
-diversifoliate
-diversifolious
-diversiform
-diversify
-diversion
-diversional
-diversionary
-diversipedate
-diversisporous
-diversity
-diversly
-diversory
-divert
-divertedly
-diverter
-divertibility
-divertible
-diverticle
-diverticular
-diverticulate
-diverticulitis
-diverticulosis
-diverticulum
-diverting
-divertingly
-divertingness
-divertisement
-divertive
-divertor
-divest
-divestible
-divestitive
-divestiture
-divestment
-divesture
-dividable
-dividableness
-divide
-divided
-dividedly
-dividedness
-dividend
-divider
-dividing
-dividingly
-dividual
-dividualism
-dividually
-dividuity
-dividuous
-divinable
-divinail
-divination
-divinator
-divinatory
-divine
-divinely
-divineness
-diviner
-divineress
-diving
-divinify
-divining
-diviningly
-divinity
-divinityship
-divinization
-divinize
-divinyl
-divisibility
-divisible
-divisibleness
-divisibly
-division
-divisional
-divisionally
-divisionary
-divisionism
-divisionist
-divisionistic
-divisive
-divisively
-divisiveness
-divisor
-divisorial
-divisory
-divisural
-divorce
-divorceable
-divorcee
-divorcement
-divorcer
-divorcible
-divorcive
-divot
-divoto
-divulgate
-divulgater
-divulgation
-divulgatory
-divulge
-divulgement
-divulgence
-divulger
-divulse
-divulsion
-divulsive
-divulsor
-divus
-Divvers
-divvy
-diwata
-dixenite
-Dixie
-dixie
-Dixiecrat
-dixit
-dixy
-dizain
-dizen
-dizenment
-dizoic
-dizygotic
-dizzard
-dizzily
-dizziness
-dizzy
-Djagatay
-djasakid
-djave
-djehad
-djerib
-djersa
-Djuka
-do
-doab
-doable
-doarium
-doat
-doated
-doater
-doating
-doatish
-Dob
-dob
-dobbed
-dobber
-dobbin
-dobbing
-dobby
-dobe
-dobla
-doblon
-dobra
-dobrao
-dobson
-doby
-doc
-docent
-docentship
-Docetae
-Docetic
-Docetically
-Docetism
-Docetist
-Docetistic
-Docetize
-dochmiac
-dochmiacal
-dochmiasis
-dochmius
-docibility
-docible
-docibleness
-docile
-docilely
-docility
-docimasia
-docimastic
-docimastical
-docimasy
-docimology
-docity
-dock
-dockage
-docken
-docker
-docket
-dockhead
-dockhouse
-dockization
-dockize
-dockland
-dockmackie
-dockman
-dockmaster
-dockside
-dockyard
-dockyardman
-docmac
-Docoglossa
-docoglossan
-docoglossate
-docosane
-doctor
-doctoral
-doctorally
-doctorate
-doctorbird
-doctordom
-doctoress
-doctorfish
-doctorhood
-doctorial
-doctorially
-doctorization
-doctorize
-doctorless
-doctorlike
-doctorly
-doctorship
-doctress
-doctrinaire
-doctrinairism
-doctrinal
-doctrinalism
-doctrinalist
-doctrinality
-doctrinally
-doctrinarian
-doctrinarianism
-doctrinarily
-doctrinarity
-doctrinary
-doctrinate
-doctrine
-doctrinism
-doctrinist
-doctrinization
-doctrinize
-doctrix
-document
-documental
-documentalist
-documentarily
-documentary
-documentation
-documentize
-dod
-dodd
-doddart
-dodded
-dodder
-doddered
-dodderer
-doddering
-doddery
-doddie
-dodding
-doddle
-doddy
-doddypoll
-Dode
-dodecade
-dodecadrachm
-dodecafid
-dodecagon
-dodecagonal
-dodecahedral
-dodecahedric
-dodecahedron
-dodecahydrate
-dodecahydrated
-dodecamerous
-dodecane
-Dodecanesian
-dodecanoic
-dodecant
-dodecapartite
-dodecapetalous
-dodecarch
-dodecarchy
-dodecasemic
-dodecastyle
-dodecastylos
-dodecasyllabic
-dodecasyllable
-dodecatemory
-Dodecatheon
-dodecatoic
-dodecatyl
-dodecatylic
-dodecuplet
-dodecyl
-dodecylene
-dodecylic
-dodge
-dodgeful
-dodger
-dodgery
-dodgily
-dodginess
-dodgy
-dodkin
-dodlet
-dodman
-dodo
-dodoism
-Dodona
-Dodonaea
-Dodonaeaceae
-Dodonaean
-Dodonean
-Dodonian
-dodrans
-doe
-doebird
-Doedicurus
-Doeg
-doeglic
-doegling
-doer
-does
-doeskin
-doesnt
-doest
-doff
-doffer
-doftberry
-dog
-dogal
-dogate
-dogbane
-Dogberry
-dogberry
-Dogberrydom
-Dogberryism
-dogbite
-dogblow
-dogboat
-dogbolt
-dogbush
-dogcart
-dogcatcher
-dogdom
-doge
-dogedom
-dogeless
-dogeship
-dogface
-dogfall
-dogfight
-dogfish
-dogfoot
-dogged
-doggedly
-doggedness
-dogger
-doggerel
-doggereler
-doggerelism
-doggerelist
-doggerelize
-doggerelizer
-doggery
-doggess
-doggish
-doggishly
-doggishness
-doggo
-doggone
-doggoned
-doggrel
-doggrelize
-doggy
-doghead
-doghearted
-doghole
-doghood
-doghouse
-dogie
-dogless
-doglike
-dogly
-dogma
-dogman
-dogmata
-dogmatic
-dogmatical
-dogmatically
-dogmaticalness
-dogmatician
-dogmatics
-dogmatism
-dogmatist
-dogmatization
-dogmatize
-dogmatizer
-dogmouth
-dogplate
-dogproof
-Dogra
-Dogrib
-dogs
-dogship
-dogshore
-dogskin
-dogsleep
-dogstone
-dogtail
-dogtie
-dogtooth
-dogtoothing
-dogtrick
-dogtrot
-dogvane
-dogwatch
-dogwood
-dogy
-doigt
-doiled
-doily
-doina
-doing
-doings
-doit
-doited
-doitkin
-doitrified
-doke
-Doketic
-Doketism
-dokhma
-dokimastic
-Dokmarok
-Doko
-Dol
-dola
-dolabra
-dolabrate
-dolabriform
-dolcan
-dolcian
-dolciano
-dolcino
-doldrum
-doldrums
-dole
-dolefish
-doleful
-dolefully
-dolefulness
-dolefuls
-dolent
-dolently
-dolerite
-doleritic
-dolerophanite
-dolesman
-dolesome
-dolesomely
-dolesomeness
-doless
-doli
-dolia
-dolichoblond
-dolichocephal
-dolichocephali
-dolichocephalic
-dolichocephalism
-dolichocephalize
-dolichocephalous
-dolichocephaly
-dolichocercic
-dolichocnemic
-dolichocranial
-dolichofacial
-Dolichoglossus
-dolichohieric
-Dolicholus
-dolichopellic
-dolichopodous
-dolichoprosopic
-Dolichopsyllidae
-Dolichos
-dolichos
-dolichosaur
-Dolichosauri
-Dolichosauria
-Dolichosaurus
-Dolichosoma
-dolichostylous
-dolichotmema
-dolichuric
-dolichurus
-Doliidae
-dolina
-doline
-dolioform
-Doliolidae
-Doliolum
-dolium
-doll
-dollar
-dollarbird
-dollardee
-dollardom
-dollarfish
-dollarleaf
-dollbeer
-dolldom
-dollface
-dollfish
-dollhood
-dollhouse
-dollier
-dolliness
-dollish
-dollishly
-dollishness
-dollmaker
-dollmaking
-dollop
-dollship
-dolly
-dollyman
-dollyway
-dolman
-dolmen
-dolmenic
-Dolomedes
-dolomite
-dolomitic
-dolomitization
-dolomitize
-dolomization
-dolomize
-dolor
-Dolores
-doloriferous
-dolorific
-dolorifuge
-dolorous
-dolorously
-dolorousness
-dolose
-dolous
-Dolph
-dolphin
-dolphinlike
-Dolphus
-dolt
-dolthead
-doltish
-doltishly
-doltishness
-dom
-domain
-domainal
-domal
-domanial
-domatium
-domatophobia
-domba
-Dombeya
-Domdaniel
-dome
-domelike
-doment
-domer
-domesday
-domestic
-domesticable
-domesticality
-domestically
-domesticate
-domestication
-domesticative
-domesticator
-domesticity
-domesticize
-domett
-domeykite
-domic
-domical
-domically
-Domicella
-domicile
-domicilement
-domiciliar
-domiciliary
-domiciliate
-domiciliation
-dominance
-dominancy
-dominant
-dominantly
-dominate
-dominated
-dominatingly
-domination
-dominative
-dominator
-domine
-domineer
-domineerer
-domineering
-domineeringly
-domineeringness
-dominial
-Dominic
-dominical
-dominicale
-Dominican
-Dominick
-dominie
-dominion
-dominionism
-dominionist
-Dominique
-dominium
-domino
-dominus
-domitable
-domite
-Domitian
-domitic
-domn
-domnei
-domoid
-dompt
-domy
-Don
-don
-donable
-Donacidae
-donaciform
-Donal
-Donald
-Donar
-donary
-donatary
-donate
-donated
-donatee
-Donatiaceae
-donation
-Donatism
-Donatist
-Donatistic
-Donatistical
-donative
-donatively
-donator
-donatory
-donatress
-donax
-doncella
-Dondia
-done
-donee
-Donet
-doney
-dong
-donga
-Dongola
-Dongolese
-dongon
-Donia
-donjon
-donkey
-donkeyback
-donkeyish
-donkeyism
-donkeyman
-donkeywork
-Donmeh
-Donn
-Donna
-donna
-Donne
-donnered
-donnert
-Donnie
-donnish
-donnishness
-donnism
-donnot
-donor
-donorship
-donought
-Donovan
-donship
-donsie
-dont
-donum
-doob
-doocot
-doodab
-doodad
-Doodia
-doodle
-doodlebug
-doodler
-doodlesack
-doohickey
-doohickus
-doohinkey
-doohinkus
-dooja
-dook
-dooket
-dookit
-dool
-doolee
-dooley
-dooli
-doolie
-dooly
-doom
-doomage
-doombook
-doomer
-doomful
-dooms
-doomsday
-doomsman
-doomstead
-doon
-door
-doorba
-doorbell
-doorboy
-doorbrand
-doorcase
-doorcheek
-doored
-doorframe
-doorhead
-doorjamb
-doorkeeper
-doorknob
-doorless
-doorlike
-doormaid
-doormaker
-doormaking
-doorman
-doornail
-doorplate
-doorpost
-doorsill
-doorstead
-doorstep
-doorstone
-doorstop
-doorward
-doorway
-doorweed
-doorwise
-dooryard
-dop
-dopa
-dopamelanin
-dopaoxidase
-dopatta
-dope
-dopebook
-doper
-dopester
-dopey
-doppelkummel
-Dopper
-dopper
-doppia
-Doppler
-dopplerite
-Dor
-dor
-Dora
-dorab
-dorad
-Doradidae
-dorado
-doraphobia
-Dorask
-Doraskean
-dorbeetle
-Dorcas
-dorcastry
-Dorcatherium
-Dorcopsis
-doree
-dorestane
-dorhawk
-Dori
-doria
-Dorian
-Doric
-Dorical
-Doricism
-Doricize
-Dorididae
-Dorine
-Doris
-Dorism
-Dorize
-dorje
-Dorking
-dorlach
-dorlot
-dorm
-dormancy
-dormant
-dormer
-dormered
-dormie
-dormient
-dormilona
-dormition
-dormitive
-dormitory
-dormouse
-dormy
-dorn
-dorneck
-dornic
-dornick
-dornock
-Dorobo
-Doronicum
-Dorosoma
-Dorothea
-Dorothy
-dorp
-dorsabdominal
-dorsabdominally
-dorsad
-dorsal
-dorsale
-dorsalgia
-dorsalis
-dorsally
-dorsalmost
-dorsalward
-dorsalwards
-dorsel
-dorser
-dorsibranch
-Dorsibranchiata
-dorsibranchiate
-dorsicollar
-dorsicolumn
-dorsicommissure
-dorsicornu
-dorsiduct
-dorsiferous
-dorsifixed
-dorsiflex
-dorsiflexion
-dorsiflexor
-dorsigrade
-dorsilateral
-dorsilumbar
-dorsimedian
-dorsimesal
-dorsimeson
-dorsiparous
-dorsispinal
-dorsiventral
-dorsiventrality
-dorsiventrally
-dorsoabdominal
-dorsoanterior
-dorsoapical
-Dorsobranchiata
-dorsocaudad
-dorsocaudal
-dorsocentral
-dorsocephalad
-dorsocephalic
-dorsocervical
-dorsocervically
-dorsodynia
-dorsoepitrochlear
-dorsointercostal
-dorsointestinal
-dorsolateral
-dorsolumbar
-dorsomedial
-dorsomedian
-dorsomesal
-dorsonasal
-dorsonuchal
-dorsopleural
-dorsoposteriad
-dorsoposterior
-dorsoradial
-dorsosacral
-dorsoscapular
-dorsosternal
-dorsothoracic
-dorsoventrad
-dorsoventral
-dorsoventrally
-Dorstenia
-dorsulum
-dorsum
-dorsumbonal
-dorter
-dortiness
-dortiship
-dorts
-dorty
-doruck
-Dory
-dory
-Doryanthes
-Dorylinae
-doryphorus
-dos
-dosa
-dosadh
-dosage
-dose
-doser
-dosimeter
-dosimetric
-dosimetrician
-dosimetrist
-dosimetry
-Dosinia
-dosiology
-dosis
-Dositheans
-dosology
-doss
-dossal
-dossel
-dosser
-dosseret
-dossier
-dossil
-dossman
-Dot
-dot
-dotage
-dotal
-dotard
-dotardism
-dotardly
-dotardy
-dotate
-dotation
-dotchin
-dote
-doted
-doter
-Dothideacea
-dothideaceous
-Dothideales
-Dothidella
-dothienenteritis
-Dothiorella
-dotiness
-doting
-dotingly
-dotingness
-dotish
-dotishness
-dotkin
-dotless
-dotlike
-Doto
-Dotonidae
-dotriacontane
-dotted
-dotter
-dotterel
-dottily
-dottiness
-dotting
-dottle
-dottler
-Dottore
-Dotty
-dotty
-doty
-douar
-double
-doubled
-doubledamn
-doubleganger
-doublegear
-doublehanded
-doublehandedly
-doublehandedness
-doublehatching
-doublehearted
-doubleheartedness
-doublehorned
-doubleleaf
-doublelunged
-doubleness
-doubler
-doublet
-doubleted
-doubleton
-doubletone
-doubletree
-doublets
-doubling
-doubloon
-doubly
-doubt
-doubtable
-doubtably
-doubtedly
-doubter
-doubtful
-doubtfully
-doubtfulness
-doubting
-doubtingly
-doubtingness
-doubtless
-doubtlessly
-doubtlessness
-doubtmonger
-doubtous
-doubtsome
-douc
-douce
-doucely
-douceness
-doucet
-douche
-doucin
-doucine
-doudle
-Doug
-dough
-doughbird
-doughboy
-doughface
-doughfaceism
-doughfoot
-doughhead
-doughiness
-doughlike
-doughmaker
-doughmaking
-doughman
-doughnut
-dought
-doughtily
-doughtiness
-doughty
-doughy
-Douglas
-doulocracy
-doum
-doundake
-doup
-douping
-dour
-dourine
-dourly
-dourness
-douse
-douser
-dout
-douter
-doutous
-douzepers
-douzieme
-dove
-dovecot
-doveflower
-dovefoot
-dovehouse
-dovekey
-dovekie
-dovelet
-dovelike
-doveling
-dover
-dovetail
-dovetailed
-dovetailer
-dovetailwise
-doveweed
-dovewood
-dovish
-Dovyalis
-dow
-dowable
-dowager
-dowagerism
-dowcet
-dowd
-dowdily
-dowdiness
-dowdy
-dowdyish
-dowdyism
-dowed
-dowel
-dower
-doweral
-doweress
-dowerless
-dowery
-dowf
-dowie
-Dowieism
-Dowieite
-dowily
-dowiness
-dowitch
-dowitcher
-dowl
-dowlas
-dowless
-down
-downbear
-downbeard
-downbeat
-downby
-downcast
-downcastly
-downcastness
-downcome
-downcomer
-downcoming
-downcry
-downcurved
-downcut
-downdale
-downdraft
-downer
-downface
-downfall
-downfallen
-downfalling
-downfeed
-downflow
-downfold
-downfolded
-downgate
-downgone
-downgrade
-downgrowth
-downhanging
-downhaul
-downheaded
-downhearted
-downheartedly
-downheartedness
-downhill
-downily
-downiness
-Downing
-Downingia
-downland
-downless
-downlie
-downlier
-downligging
-downlike
-downline
-downlooked
-downlooker
-downlying
-downmost
-downness
-downpour
-downpouring
-downright
-downrightly
-downrightness
-downrush
-downrushing
-downset
-downshare
-downshore
-downside
-downsinking
-downsitting
-downsliding
-downslip
-downslope
-downsman
-downspout
-downstage
-downstairs
-downstate
-downstater
-downstream
-downstreet
-downstroke
-downswing
-downtake
-downthrow
-downthrown
-downthrust
-Downton
-downtown
-downtrampling
-downtreading
-downtrend
-downtrodden
-downtroddenness
-downturn
-downward
-downwardly
-downwardness
-downway
-downweed
-downweigh
-downweight
-downweighted
-downwind
-downwith
-downy
-dowp
-dowry
-dowsabel
-dowse
-dowser
-dowset
-doxa
-Doxantha
-doxastic
-doxasticon
-doxographer
-doxographical
-doxography
-doxological
-doxologically
-doxologize
-doxology
-doxy
-Doyle
-doze
-dozed
-dozen
-dozener
-dozenth
-dozer
-dozily
-doziness
-dozy
-dozzled
-drab
-Draba
-drabbet
-drabbish
-drabble
-drabbler
-drabbletail
-drabbletailed
-drabby
-drably
-drabness
-Dracaena
-Dracaenaceae
-drachm
-drachma
-drachmae
-drachmai
-drachmal
-dracma
-Draco
-Dracocephalum
-Draconian
-Draconianism
-Draconic
-draconic
-Draconically
-Draconid
-Draconis
-Draconism
-draconites
-draconitic
-dracontian
-dracontiasis
-dracontic
-dracontine
-dracontites
-Dracontium
-dracunculus
-draegerman
-draff
-draffman
-draffy
-draft
-draftage
-draftee
-drafter
-draftily
-draftiness
-drafting
-draftman
-draftmanship
-draftproof
-draftsman
-draftsmanship
-draftswoman
-draftswomanship
-draftwoman
-drafty
-drag
-dragade
-dragbar
-dragbolt
-dragged
-dragger
-draggily
-dragginess
-dragging
-draggingly
-draggle
-draggletail
-draggletailed
-draggletailedly
-draggletailedness
-draggly
-draggy
-draghound
-dragline
-dragman
-dragnet
-drago
-dragoman
-dragomanate
-dragomanic
-dragomanish
-dragon
-dragonesque
-dragoness
-dragonet
-dragonfish
-dragonfly
-dragonhead
-dragonhood
-dragonish
-dragonism
-dragonize
-dragonkind
-dragonlike
-dragonnade
-dragonroot
-dragontail
-dragonwort
-dragoon
-dragoonable
-dragoonade
-dragoonage
-dragooner
-dragrope
-dragsaw
-dragsawing
-dragsman
-dragstaff
-drail
-drain
-drainable
-drainage
-drainboard
-draine
-drained
-drainer
-drainerman
-drainless
-drainman
-drainpipe
-draintile
-draisine
-drake
-drakestone
-drakonite
-dram
-drama
-dramalogue
-Dramamine
-dramatic
-dramatical
-dramatically
-dramaticism
-dramatics
-dramaticule
-dramatism
-dramatist
-dramatizable
-dramatization
-dramatize
-dramatizer
-dramaturge
-dramaturgic
-dramaturgical
-dramaturgist
-dramaturgy
-dramm
-drammage
-dramme
-drammed
-drammer
-dramming
-drammock
-dramseller
-dramshop
-drang
-drank
-drant
-drapable
-Draparnaldia
-drape
-drapeable
-draper
-draperess
-draperied
-drapery
-drapetomania
-drapping
-drassid
-Drassidae
-drastic
-drastically
-drat
-dratchell
-drate
-dratted
-dratting
-draught
-draughtboard
-draughthouse
-draughtman
-draughtmanship
-draughts
-draughtsman
-draughtsmanship
-draughtswoman
-draughtswomanship
-Dravida
-Dravidian
-Dravidic
-dravya
-draw
-drawable
-drawarm
-drawback
-drawbar
-drawbeam
-drawbench
-drawboard
-drawbolt
-drawbore
-drawboy
-drawbridge
-Drawcansir
-drawcut
-drawdown
-drawee
-drawer
-drawers
-drawfile
-drawfiling
-drawgate
-drawgear
-drawglove
-drawhead
-drawhorse
-drawing
-drawk
-drawknife
-drawknot
-drawl
-drawlatch
-drawler
-drawling
-drawlingly
-drawlingness
-drawlink
-drawloom
-drawly
-drawn
-drawnet
-drawoff
-drawout
-drawplate
-drawpoint
-drawrod
-drawshave
-drawsheet
-drawspan
-drawspring
-drawstop
-drawstring
-drawtongs
-drawtube
-dray
-drayage
-drayman
-drazel
-dread
-dreadable
-dreader
-dreadful
-dreadfully
-dreadfulness
-dreadingly
-dreadless
-dreadlessly
-dreadlessness
-dreadly
-dreadness
-dreadnought
-dream
-dreamage
-dreamer
-dreamery
-dreamful
-dreamfully
-dreamfulness
-dreamhole
-dreamily
-dreaminess
-dreamingly
-dreamish
-dreamland
-dreamless
-dreamlessly
-dreamlessness
-dreamlet
-dreamlike
-dreamlit
-dreamlore
-dreamsily
-dreamsiness
-dreamsy
-dreamt
-dreamtide
-dreamwhile
-dreamwise
-dreamworld
-dreamy
-drear
-drearfully
-drearily
-dreariment
-dreariness
-drearisome
-drearly
-drearness
-dreary
-dredge
-dredgeful
-dredger
-dredging
-dree
-dreep
-dreepiness
-dreepy
-dreg
-dreggily
-dregginess
-dreggish
-dreggy
-dregless
-dregs
-dreiling
-Dreissensia
-dreissiger
-drench
-drencher
-drenching
-drenchingly
-dreng
-drengage
-Drepanaspis
-Drepanidae
-Drepanididae
-drepaniform
-Drepanis
-drepanium
-drepanoid
-Dreparnaudia
-dress
-dressage
-dressed
-dresser
-dressership
-dressily
-dressiness
-dressing
-dressline
-dressmaker
-dressmakership
-dressmakery
-dressmaking
-dressy
-drest
-Drew
-drew
-drewite
-Dreyfusism
-Dreyfusist
-drias
-drib
-dribble
-dribblement
-dribbler
-driblet
-driddle
-dried
-drier
-drierman
-driest
-drift
-driftage
-driftbolt
-drifter
-drifting
-driftingly
-driftland
-driftless
-driftlessness
-driftlet
-driftman
-driftpiece
-driftpin
-driftway
-driftweed
-driftwind
-driftwood
-drifty
-drightin
-drill
-driller
-drillet
-drilling
-drillman
-drillmaster
-drillstock
-Drimys
-dringle
-drink
-drinkability
-drinkable
-drinkableness
-drinkably
-drinker
-drinking
-drinkless
-drinkproof
-drinn
-drip
-dripper
-dripping
-dripple
-dripproof
-drippy
-dripstick
-dripstone
-drisheen
-drisk
-drivable
-drivage
-drive
-driveaway
-driveboat
-drivebolt
-drivehead
-drivel
-driveler
-drivelingly
-driven
-drivepipe
-driver
-driverless
-drivership
-drivescrew
-driveway
-drivewell
-driving
-drivingly
-drizzle
-drizzly
-drochuil
-droddum
-drofland
-drogh
-drogher
-drogherman
-drogue
-droit
-droitsman
-droitural
-droiturel
-Drokpa
-droll
-drollery
-drollingly
-drollish
-drollishness
-drollist
-drollness
-drolly
-Dromaeognathae
-dromaeognathism
-dromaeognathous
-Dromaeus
-drome
-dromedarian
-dromedarist
-dromedary
-drometer
-Dromiacea
-dromic
-Dromiceiidae
-Dromiceius
-Dromicia
-dromograph
-dromomania
-dromometer
-dromond
-Dromornis
-dromos
-dromotropic
-drona
-dronage
-drone
-dronepipe
-droner
-drongo
-droningly
-dronish
-dronishly
-dronishness
-dronkgrass
-drony
-drool
-droop
-drooper
-drooping
-droopingly
-droopingness
-droopt
-droopy
-drop
-dropberry
-dropcloth
-dropflower
-drophead
-droplet
-droplight
-droplike
-dropling
-dropman
-dropout
-dropper
-dropping
-droppingly
-droppy
-dropseed
-dropsical
-dropsically
-dropsicalness
-dropsied
-dropsy
-dropsywort
-dropt
-dropwise
-dropworm
-dropwort
-Droschken
-Drosera
-Droseraceae
-droseraceous
-droshky
-drosky
-drosograph
-drosometer
-Drosophila
-Drosophilidae
-Drosophyllum
-dross
-drossel
-drosser
-drossiness
-drossless
-drossy
-drostdy
-droud
-drought
-droughtiness
-droughty
-drouk
-drove
-drover
-drovy
-drow
-drown
-drowner
-drowningly
-drowse
-drowsily
-drowsiness
-drowsy
-drub
-drubber
-drubbing
-drubbly
-drucken
-drudge
-drudger
-drudgery
-drudgingly
-drudgism
-druery
-drug
-drugeteria
-drugger
-druggery
-drugget
-druggeting
-druggist
-druggister
-druggy
-drugless
-drugman
-drugshop
-drugstore
-druid
-druidess
-druidic
-druidical
-druidism
-druidry
-druith
-Drukpa
-drum
-drumbeat
-drumble
-drumbledore
-drumbler
-drumfire
-drumfish
-drumhead
-drumheads
-drumlike
-drumlin
-drumline
-drumlinoid
-drumloid
-drumloidal
-drumly
-drummer
-drumming
-drummy
-drumskin
-drumstick
-drumwood
-drung
-drungar
-drunk
-drunkard
-drunken
-drunkenly
-drunkenness
-drunkensome
-drunkenwise
-drunkery
-Drupa
-Drupaceae
-drupaceous
-drupal
-drupe
-drupel
-drupelet
-drupeole
-drupetum
-drupiferous
-Druse
-druse
-Drusean
-Drusedom
-drusy
-druxiness
-druxy
-dry
-dryad
-dryadetum
-dryadic
-dryas
-dryasdust
-drybeard
-drybrained
-drycoal
-Drydenian
-Drydenism
-dryfoot
-drygoodsman
-dryhouse
-drying
-dryish
-dryly
-Drynaria
-dryness
-Dryobalanops
-Dryope
-Dryopes
-Dryophyllum
-Dryopians
-dryopithecid
-Dryopithecinae
-dryopithecine
-Dryopithecus
-Dryops
-Dryopteris
-dryopteroid
-drysalter
-drysaltery
-dryster
-dryth
-dryworker
-Dschubba
-duad
-duadic
-dual
-Duala
-duali
-dualin
-dualism
-dualist
-dualistic
-dualistically
-duality
-dualization
-dualize
-dually
-Dualmutef
-dualogue
-Duane
-duarch
-duarchy
-dub
-dubash
-dubb
-dubba
-dubbah
-dubbeltje
-dubber
-dubbing
-dubby
-Dubhe
-Dubhgall
-dubiety
-dubiocrystalline
-dubiosity
-dubious
-dubiously
-dubiousness
-dubitable
-dubitably
-dubitancy
-dubitant
-dubitate
-dubitatingly
-dubitation
-dubitative
-dubitatively
-Duboisia
-duboisin
-duboisine
-Dubonnet
-dubs
-ducal
-ducally
-ducamara
-ducape
-ducat
-ducato
-ducatoon
-ducdame
-duces
-Duchesnea
-Duchess
-duchess
-duchesse
-duchesslike
-duchy
-duck
-duckbill
-duckblind
-duckboard
-duckboat
-ducker
-duckery
-duckfoot
-duckhearted
-duckhood
-duckhouse
-duckhunting
-duckie
-ducking
-duckling
-ducklingship
-duckmeat
-duckpin
-duckpond
-duckstone
-duckweed
-duckwife
-duckwing
-Duco
-duct
-ducted
-ductibility
-ductible
-ductile
-ductilely
-ductileness
-ductilimeter
-ductility
-ductilize
-duction
-ductless
-ductor
-ductule
-Ducula
-Duculinae
-dud
-dudaim
-dudder
-duddery
-duddies
-dude
-dudeen
-dudgeon
-dudine
-dudish
-dudishness
-dudism
-dudler
-dudley
-Dudleya
-dudleyite
-dudman
-due
-duel
-dueler
-dueling
-duelist
-duelistic
-duello
-dueness
-duenna
-duennadom
-duennaship
-duer
-Duessa
-duet
-duettist
-duff
-duffadar
-duffel
-duffer
-dufferdom
-duffing
-dufoil
-dufrenite
-dufrenoysite
-dufter
-dufterdar
-duftery
-dug
-dugal
-dugdug
-duggler
-dugong
-Dugongidae
-dugout
-dugway
-duhat
-Duhr
-duiker
-duikerbok
-duim
-Duit
-duit
-dujan
-Duke
-duke
-dukedom
-dukeling
-dukely
-dukery
-dukeship
-dukhn
-dukker
-dukkeripen
-Dulanganes
-Dulat
-dulbert
-dulcet
-dulcetly
-dulcetness
-dulcian
-dulciana
-dulcification
-dulcifluous
-dulcify
-dulcigenic
-dulcimer
-Dulcin
-Dulcinea
-Dulcinist
-dulcitol
-dulcitude
-dulcose
-duledge
-duler
-dulia
-dull
-dullard
-dullardism
-dullardness
-dullbrained
-duller
-dullery
-dullhead
-dullhearted
-dullification
-dullify
-dullish
-dullity
-dullness
-dullpate
-dullsome
-dully
-dulosis
-dulotic
-dulse
-dulseman
-dult
-dultie
-dulwilly
-duly
-dum
-duma
-dumaist
-dumb
-dumba
-dumbbell
-dumbbeller
-dumbcow
-dumbfounder
-dumbfounderment
-dumbhead
-dumbledore
-dumbly
-dumbness
-dumdum
-dumetose
-dumfound
-dumfounder
-dumfounderment
-dummel
-dummered
-dumminess
-dummy
-dummyism
-dummyweed
-Dumontia
-Dumontiaceae
-dumontite
-dumortierite
-dumose
-dumosity
-dump
-dumpage
-dumpcart
-dumper
-dumpily
-dumpiness
-dumping
-dumpish
-dumpishly
-dumpishness
-dumple
-dumpling
-dumpoke
-dumpy
-dumsola
-dun
-dunair
-dunal
-dunbird
-Duncan
-dunce
-duncedom
-duncehood
-duncery
-dunch
-Dunciad
-duncical
-duncify
-duncish
-duncishly
-duncishness
-dundasite
-dunder
-dunderhead
-dunderheaded
-dunderheadedness
-dunderpate
-dune
-dunelike
-dunfish
-dung
-Dungan
-dungannonite
-dungaree
-dungbeck
-dungbird
-dungbred
-dungeon
-dungeoner
-dungeonlike
-dunger
-dunghill
-dunghilly
-dungol
-dungon
-dungy
-dungyard
-dunite
-dunk
-dunkadoo
-Dunkard
-Dunker
-dunker
-Dunkirk
-Dunkirker
-Dunlap
-dunlin
-Dunlop
-dunnage
-dunne
-dunner
-dunness
-dunnish
-dunnite
-dunnock
-dunny
-dunpickle
-Duns
-dunst
-dunstable
-dunt
-duntle
-duny
-dunziekte
-duo
-duocosane
-duodecahedral
-duodecahedron
-duodecane
-duodecennial
-duodecillion
-duodecimal
-duodecimality
-duodecimally
-duodecimfid
-duodecimo
-duodecimole
-duodecuple
-duodena
-duodenal
-duodenary
-duodenate
-duodenation
-duodene
-duodenectomy
-duodenitis
-duodenocholangitis
-duodenocholecystostomy
-duodenocholedochotomy
-duodenocystostomy
-duodenoenterostomy
-duodenogram
-duodenojejunal
-duodenojejunostomy
-duodenopancreatectomy
-duodenoscopy
-duodenostomy
-duodenotomy
-duodenum
-duodrama
-duograph
-duogravure
-duole
-duoliteral
-duologue
-duomachy
-duopod
-duopolistic
-duopoly
-duopsonistic
-duopsony
-duosecant
-duotone
-duotriacontane
-duotype
-dup
-dupability
-dupable
-dupe
-dupedom
-duper
-dupery
-dupion
-dupla
-duplation
-duple
-duplet
-duplex
-duplexity
-duplicability
-duplicable
-duplicand
-duplicate
-duplication
-duplicative
-duplicator
-duplicature
-duplicia
-duplicident
-Duplicidentata
-duplicidentate
-duplicipennate
-duplicitas
-duplicity
-duplification
-duplify
-duplone
-dupondius
-duppy
-dura
-durability
-durable
-durableness
-durably
-durain
-dural
-Duralumin
-duramatral
-duramen
-durance
-Durandarte
-durangite
-Durango
-Durani
-durant
-Duranta
-duraplasty
-duraquara
-duraspinalis
-duration
-durational
-durationless
-durative
-durax
-durbachite
-Durban
-durbar
-durdenite
-dure
-durene
-durenol
-duress
-duressor
-durgan
-Durham
-durian
-duridine
-Durindana
-during
-duringly
-Durio
-durity
-durmast
-durn
-duro
-Duroc
-durometer
-duroquinone
-durra
-durrie
-durrin
-durry
-durst
-durukuli
-durwaun
-duryl
-Duryodhana
-Durzada
-dusack
-duscle
-dush
-dusio
-dusk
-dusken
-duskily
-duskiness
-duskingtide
-duskish
-duskishly
-duskishness
-duskly
-duskness
-dusky
-dust
-dustbin
-dustbox
-dustcloth
-dustee
-duster
-dusterman
-dustfall
-dustily
-Dustin
-dustiness
-dusting
-dustless
-dustlessness
-dustman
-dustpan
-dustproof
-dustuck
-dustwoman
-dusty
-dustyfoot
-Dusun
-Dutch
-dutch
-Dutcher
-Dutchify
-Dutchman
-Dutchy
-duteous
-duteously
-duteousness
-dutiability
-dutiable
-dutied
-dutiful
-dutifully
-dutifulness
-dutra
-duty
-dutymonger
-duumvir
-duumviral
-duumvirate
-duvet
-duvetyn
-dux
-duyker
-dvaita
-dvandva
-dwale
-dwalm
-Dwamish
-dwang
-dwarf
-dwarfish
-dwarfishly
-dwarfishness
-dwarfism
-dwarfling
-dwarfness
-dwarfy
-dwayberry
-Dwayne
-dwell
-dwelled
-dweller
-dwelling
-dwelt
-Dwight
-dwindle
-dwindlement
-dwine
-Dwyka
-dyad
-dyadic
-Dyak
-dyakisdodecahedron
-Dyakish
-dyarchic
-dyarchical
-dyarchy
-Dyas
-Dyassic
-dyaster
-Dyaus
-dyce
-dye
-dyeable
-dyehouse
-dyeing
-dyeleaves
-dyemaker
-dyemaking
-dyer
-dyester
-dyestuff
-dyeware
-dyeweed
-dyewood
-dygogram
-dying
-dyingly
-dyingness
-dyke
-dykehopper
-dyker
-dykereeve
-Dylan
-dynagraph
-dynameter
-dynametric
-dynametrical
-dynamic
-dynamical
-dynamically
-dynamics
-dynamis
-dynamism
-dynamist
-dynamistic
-dynamitard
-dynamite
-dynamiter
-dynamitic
-dynamitical
-dynamitically
-dynamiting
-dynamitish
-dynamitism
-dynamitist
-dynamization
-dynamize
-dynamo
-dynamoelectric
-dynamoelectrical
-dynamogenesis
-dynamogenic
-dynamogenous
-dynamogenously
-dynamogeny
-dynamometamorphic
-dynamometamorphism
-dynamometamorphosed
-dynamometer
-dynamometric
-dynamometrical
-dynamometry
-dynamomorphic
-dynamoneure
-dynamophone
-dynamostatic
-dynamotor
-dynast
-Dynastes
-dynastical
-dynastically
-dynasticism
-dynastid
-dynastidan
-Dynastides
-Dynastinae
-dynasty
-dynatron
-dyne
-dyophone
-Dyophysite
-Dyophysitic
-Dyophysitical
-Dyophysitism
-dyotheism
-Dyothelete
-Dyotheletian
-Dyotheletic
-Dyotheletical
-Dyotheletism
-Dyothelism
-dyphone
-dysacousia
-dysacousis
-dysanalyte
-dysaphia
-dysarthria
-dysarthric
-dysarthrosis
-dysbulia
-dysbulic
-dyschiria
-dyschroa
-dyschroia
-dyschromatopsia
-dyschromatoptic
-dyschronous
-dyscrasia
-dyscrasial
-dyscrasic
-dyscrasite
-dyscratic
-dyscrystalline
-dysenteric
-dysenterical
-dysentery
-dysepulotic
-dysepulotical
-dyserethisia
-dysergasia
-dysergia
-dysesthesia
-dysesthetic
-dysfunction
-dysgenesic
-dysgenesis
-dysgenetic
-dysgenic
-dysgenical
-dysgenics
-dysgeogenous
-dysgnosia
-dysgraphia
-dysidrosis
-dyskeratosis
-dyskinesia
-dyskinetic
-dyslalia
-dyslexia
-dyslogia
-dyslogistic
-dyslogistically
-dyslogy
-dysluite
-dyslysin
-dysmenorrhea
-dysmenorrheal
-dysmerism
-dysmeristic
-dysmerogenesis
-dysmerogenetic
-dysmeromorph
-dysmeromorphic
-dysmetria
-dysmnesia
-dysmorphism
-dysmorphophobia
-dysneuria
-dysnomy
-dysodile
-dysodontiasis
-dysorexia
-dysorexy
-dysoxidation
-dysoxidizable
-dysoxidize
-dyspathetic
-dyspathy
-dyspepsia
-dyspepsy
-dyspeptic
-dyspeptical
-dyspeptically
-dysphagia
-dysphagic
-dysphasia
-dysphasic
-dysphemia
-dysphonia
-dysphonic
-dysphoria
-dysphoric
-dysphotic
-dysphrasia
-dysphrenia
-dyspituitarism
-dysplasia
-dysplastic
-dyspnea
-dyspneal
-dyspneic
-dyspnoic
-dysprosia
-dysprosium
-dysraphia
-dyssnite
-Dyssodia
-dysspermatism
-dyssynergia
-dyssystole
-dystaxia
-dystectic
-dysteleological
-dysteleologist
-dysteleology
-dysthyroidism
-dystocia
-dystocial
-dystome
-dystomic
-dystomous
-dystrophia
-dystrophic
-dystrophy
-dysuria
-dysuric
-dysyntribite
-dytiscid
-Dytiscidae
-Dytiscus
-dzeren
-Dzungar
-E
-e
-ea
-each
-eachwhere
-eager
-eagerly
-eagerness
-eagle
-eaglelike
-eagless
-eaglestone
-eaglet
-eaglewood
-eagre
-ean
-ear
-earache
-earbob
-earcap
-earcockle
-eardrop
-eardropper
-eardrum
-eared
-earflower
-earful
-earhole
-earing
-earjewel
-Earl
-earl
-earlap
-earldom
-Earle
-earless
-earlet
-earlike
-earliness
-earlish
-earlock
-earlship
-early
-earmark
-earn
-earner
-earnest
-earnestly
-earnestness
-earnful
-Earnie
-earning
-earnings
-earphone
-earpick
-earpiece
-earplug
-earreach
-earring
-earringed
-earscrew
-earshot
-earsore
-earsplitting
-eartab
-earth
-earthboard
-earthborn
-earthbred
-earthdrake
-earthed
-earthen
-earthenhearted
-earthenware
-earthfall
-earthfast
-earthgall
-earthgrubber
-earthian
-earthiness
-earthkin
-earthless
-earthlight
-earthlike
-earthliness
-earthling
-earthly
-earthmaker
-earthmaking
-earthnut
-earthpea
-earthquake
-earthquaked
-earthquaken
-earthquaking
-Earthshaker
-earthshine
-earthshock
-earthslide
-earthsmoke
-earthstar
-earthtongue
-earthwall
-earthward
-earthwards
-earthwork
-earthworm
-earthy
-earwax
-earwig
-earwigginess
-earwiggy
-earwitness
-earworm
-earwort
-ease
-easeful
-easefully
-easefulness
-easel
-easeless
-easement
-easer
-easier
-easiest
-easily
-easiness
-easing
-east
-eastabout
-eastbound
-Easter
-easter
-easterling
-easterly
-Eastern
-eastern
-easterner
-Easternism
-Easternly
-easternmost
-Eastertide
-easting
-Eastlake
-eastland
-eastmost
-Eastre
-eastward
-eastwardly
-easy
-easygoing
-easygoingness
-eat
-eatability
-eatable
-eatableness
-eatage
-Eatanswill
-eatberry
-eaten
-eater
-eatery
-eating
-eats
-eave
-eaved
-eavedrop
-eaver
-eaves
-eavesdrop
-eavesdropper
-eavesdropping
-ebb
-ebbman
-Eben
-Ebenaceae
-ebenaceous
-Ebenales
-ebeneous
-Ebenezer
-Eberthella
-Ebionism
-Ebionite
-Ebionitic
-Ebionitism
-Ebionize
-Eboe
-eboe
-ebon
-ebonist
-ebonite
-ebonize
-ebony
-ebracteate
-ebracteolate
-ebriate
-ebriety
-ebriosity
-ebrious
-ebriously
-ebullate
-ebullience
-ebulliency
-ebullient
-ebulliently
-ebulliometer
-ebullioscope
-ebullioscopic
-ebullioscopy
-ebullition
-ebullitive
-ebulus
-eburated
-eburine
-Eburna
-eburnated
-eburnation
-eburnean
-eburneoid
-eburneous
-eburnian
-eburnification
-ecad
-ecalcarate
-ecanda
-ecardinal
-Ecardines
-ecarinate
-ecarte
-Ecaudata
-ecaudate
-Ecballium
-ecbatic
-ecblastesis
-ecbole
-ecbolic
-Ecca
-eccaleobion
-eccentrate
-eccentric
-eccentrical
-eccentrically
-eccentricity
-eccentring
-eccentrometer
-ecchondroma
-ecchondrosis
-ecchondrotome
-ecchymoma
-ecchymose
-ecchymosis
-ecclesia
-ecclesial
-ecclesiarch
-ecclesiarchy
-ecclesiast
-Ecclesiastes
-ecclesiastic
-ecclesiastical
-ecclesiastically
-ecclesiasticism
-ecclesiasticize
-ecclesiastics
-Ecclesiasticus
-ecclesiastry
-ecclesioclastic
-ecclesiography
-ecclesiolater
-ecclesiolatry
-ecclesiologic
-ecclesiological
-ecclesiologically
-ecclesiologist
-ecclesiology
-ecclesiophobia
-eccoprotic
-eccoproticophoric
-eccrinology
-eccrisis
-eccritic
-eccyclema
-eccyesis
-ecdemic
-ecdemite
-ecderon
-ecderonic
-ecdysiast
-ecdysis
-ecesic
-ecesis
-ecgonine
-eche
-echea
-echelette
-echelon
-echelonment
-Echeloot
-Echeneidae
-echeneidid
-Echeneididae
-echeneidoid
-Echeneis
-Echeveria
-echidna
-Echidnidae
-Echimys
-Echinacea
-echinal
-echinate
-echinid
-Echinidea
-echinital
-echinite
-Echinocactus
-Echinocaris
-Echinocereus
-Echinochloa
-echinochrome
-echinococcus
-Echinoderes
-Echinoderidae
-echinoderm
-Echinoderma
-echinodermal
-Echinodermata
-echinodermatous
-echinodermic
-Echinodorus
-echinoid
-Echinoidea
-echinologist
-echinology
-Echinomys
-Echinopanax
-Echinops
-echinopsine
-Echinorhinidae
-Echinorhinus
-Echinorhynchus
-Echinospermum
-Echinosphaerites
-Echinosphaeritidae
-Echinostoma
-Echinostomatidae
-echinostome
-echinostomiasis
-Echinozoa
-echinulate
-echinulated
-echinulation
-echinuliform
-echinus
-Echis
-echitamine
-Echites
-Echium
-echiurid
-Echiurida
-echiuroid
-Echiuroidea
-Echiurus
-echo
-echoer
-echoic
-echoingly
-echoism
-echoist
-echoize
-echolalia
-echolalic
-echoless
-echometer
-echopractic
-echopraxia
-echowise
-Echuca
-eciliate
-Eciton
-ecize
-Eckehart
-ecklein
-eclair
-eclampsia
-eclamptic
-eclat
-eclectic
-eclectical
-eclectically
-eclecticism
-eclecticize
-Eclectics
-eclectism
-eclectist
-eclegm
-eclegma
-eclipsable
-eclipsareon
-eclipsation
-eclipse
-eclipser
-eclipsis
-ecliptic
-ecliptical
-ecliptically
-eclogite
-eclogue
-eclosion
-ecmnesia
-ecoid
-ecole
-ecologic
-ecological
-ecologically
-ecologist
-ecology
-econometer
-econometric
-econometrician
-econometrics
-economic
-economical
-economically
-economics
-economism
-economist
-Economite
-economization
-economize
-economizer
-economy
-ecophene
-ecophobia
-ecorticate
-ecospecies
-ecospecific
-ecospecifically
-ecostate
-ecosystem
-ecotonal
-ecotone
-ecotype
-ecotypic
-ecotypically
-ecphonesis
-ecphorable
-ecphore
-ecphoria
-ecphorization
-ecphorize
-ecphrasis
-ecrasite
-ecru
-ecrustaceous
-ecstasis
-ecstasize
-ecstasy
-ecstatic
-ecstatica
-ecstatical
-ecstatically
-ecstaticize
-ecstrophy
-ectad
-ectadenia
-ectal
-ectally
-ectasia
-ectasis
-ectatic
-ectene
-ectental
-ectepicondylar
-ectethmoid
-ectethmoidal
-Ecthesis
-ecthetically
-ecthlipsis
-ecthyma
-ectiris
-ectobatic
-ectoblast
-ectoblastic
-ectobronchium
-ectocardia
-Ectocarpaceae
-ectocarpaceous
-Ectocarpales
-ectocarpic
-ectocarpous
-Ectocarpus
-ectocinerea
-ectocinereal
-ectocoelic
-ectocondylar
-ectocondyle
-ectocondyloid
-ectocornea
-ectocranial
-ectocuneiform
-ectocuniform
-ectocyst
-ectodactylism
-ectoderm
-ectodermal
-ectodermic
-ectodermoidal
-ectodermosis
-ectodynamomorphic
-ectoentad
-ectoenzyme
-ectoethmoid
-ectogenesis
-ectogenic
-ectogenous
-ectoglia
-Ectognatha
-ectolecithal
-ectoloph
-ectomere
-ectomeric
-ectomesoblast
-ectomorph
-ectomorphic
-ectomorphy
-ectonephridium
-ectoparasite
-ectoparasitic
-Ectoparasitica
-ectopatagium
-ectophloic
-ectophyte
-ectophytic
-ectopia
-ectopic
-Ectopistes
-ectoplacenta
-ectoplasm
-ectoplasmatic
-ectoplasmic
-ectoplastic
-ectoplasy
-Ectoprocta
-ectoproctan
-ectoproctous
-ectopterygoid
-ectopy
-ectoretina
-ectorganism
-ectorhinal
-ectosarc
-ectosarcous
-ectoskeleton
-ectosomal
-ectosome
-ectosphenoid
-ectosphenotic
-ectosphere
-ectosteal
-ectosteally
-ectostosis
-ectotheca
-ectotoxin
-Ectotrophi
-ectotrophic
-ectozoa
-ectozoan
-ectozoic
-ectozoon
-ectrodactylia
-ectrodactylism
-ectrodactyly
-ectrogenic
-ectrogeny
-ectromelia
-ectromelian
-ectromelic
-ectromelus
-ectropion
-ectropium
-ectropometer
-ectrosyndactyly
-ectypal
-ectype
-ectypography
-Ecuadoran
-Ecuadorian
-ecuelling
-ecumenic
-ecumenical
-ecumenicalism
-ecumenicality
-ecumenically
-ecumenicity
-ecyphellate
-eczema
-eczematization
-eczematoid
-eczematosis
-eczematous
-Ed
-edacious
-edaciously
-edaciousness
-edacity
-Edana
-edaphic
-edaphology
-edaphon
-Edaphosauria
-Edaphosaurus
-Edda
-Eddaic
-edder
-Eddic
-Eddie
-eddish
-eddo
-Eddy
-eddy
-eddyroot
-edea
-edeagra
-edeitis
-edelweiss
-edema
-edematous
-edemic
-Eden
-Edenic
-edenite
-Edenization
-Edenize
-edental
-edentalous
-Edentata
-edentate
-edentulate
-edentulous
-edeodynia
-edeology
-edeomania
-edeoscopy
-edeotomy
-Edessan
-edestan
-edestin
-Edestosaurus
-Edgar
-edge
-edgebone
-edged
-edgeless
-edgemaker
-edgemaking
-edgeman
-edger
-edgerman
-edgeshot
-edgestone
-edgeways
-edgeweed
-edgewise
-edginess
-edging
-edgingly
-edgrew
-edgy
-edh
-edibility
-edible
-edibleness
-edict
-edictal
-edictally
-edicule
-edificable
-edification
-edificator
-edificatory
-edifice
-edificial
-edifier
-edify
-edifying
-edifyingly
-edifyingness
-edingtonite
-edit
-edital
-Edith
-edition
-editor
-editorial
-editorialize
-editorially
-editorship
-editress
-Ediya
-Edmond
-Edmund
-Edna
-Edo
-Edomite
-Edomitish
-Edoni
-Edriasteroidea
-Edrioasteroid
-Edrioasteroidea
-Edriophthalma
-edriophthalmatous
-edriophthalmian
-edriophthalmic
-edriophthalmous
-Eduardo
-Educabilia
-educabilian
-educability
-educable
-educand
-educatable
-educate
-educated
-educatee
-education
-educationable
-educational
-educationalism
-educationalist
-educationally
-educationary
-educationist
-educative
-educator
-educatory
-educatress
-educe
-educement
-educible
-educive
-educt
-eduction
-eductive
-eductor
-edulcorate
-edulcoration
-edulcorative
-edulcorator
-Eduskunta
-Edward
-Edwardean
-Edwardeanism
-Edwardian
-Edwardine
-Edwardsia
-Edwardsiidae
-Edwin
-Edwina
-eegrass
-eel
-eelboat
-eelbob
-eelbobber
-eelcake
-eelcatcher
-eeler
-eelery
-eelfare
-eelfish
-eelgrass
-eellike
-eelpot
-eelpout
-eelshop
-eelskin
-eelspear
-eelware
-eelworm
-eely
-eer
-eerie
-eerily
-eeriness
-eerisome
-effable
-efface
-effaceable
-effacement
-effacer
-effect
-effecter
-effectful
-effectible
-effective
-effectively
-effectiveness
-effectivity
-effectless
-effector
-effects
-effectual
-effectuality
-effectualize
-effectually
-effectualness
-effectuate
-effectuation
-effeminacy
-effeminate
-effeminately
-effeminateness
-effemination
-effeminatize
-effeminization
-effeminize
-effendi
-efferent
-effervesce
-effervescence
-effervescency
-effervescent
-effervescible
-effervescingly
-effervescive
-effete
-effeteness
-effetman
-efficacious
-efficaciously
-efficaciousness
-efficacity
-efficacy
-efficience
-efficiency
-efficient
-efficiently
-Effie
-effigial
-effigiate
-effigiation
-effigurate
-effiguration
-effigy
-efflate
-efflation
-effloresce
-efflorescence
-efflorescency
-efflorescent
-efflower
-effluence
-effluency
-effluent
-effluvia
-effluvial
-effluviate
-effluviography
-effluvious
-effluvium
-efflux
-effluxion
-effodient
-Effodientia
-efform
-efformation
-efformative
-effort
-effortful
-effortless
-effortlessly
-effossion
-effraction
-effranchise
-effranchisement
-effrontery
-effulge
-effulgence
-effulgent
-effulgently
-effund
-effuse
-effusiometer
-effusion
-effusive
-effusively
-effusiveness
-Efik
-eflagelliferous
-efoliolate
-efoliose
-efoveolate
-eft
-eftest
-eftsoons
-egad
-egalitarian
-egalitarianism
-egality
-Egba
-Egbert
-Egbo
-egence
-egeran
-Egeria
-egest
-egesta
-egestion
-egestive
-egg
-eggberry
-eggcup
-eggcupful
-eggeater
-egger
-eggfish
-eggfruit
-egghead
-egghot
-egging
-eggler
-eggless
-egglike
-eggnog
-eggplant
-eggshell
-eggy
-egilops
-egipto
-Eglamore
-eglandular
-eglandulose
-eglantine
-eglatere
-eglestonite
-egma
-ego
-egocentric
-egocentricity
-egocentrism
-Egocerus
-egohood
-egoism
-egoist
-egoistic
-egoistical
-egoistically
-egoity
-egoize
-egoizer
-egol
-egolatrous
-egomania
-egomaniac
-egomaniacal
-egomism
-egophonic
-egophony
-egosyntonic
-egotheism
-egotism
-egotist
-egotistic
-egotistical
-egotistically
-egotize
-egregious
-egregiously
-egregiousness
-egress
-egression
-egressive
-egressor
-egret
-Egretta
-egrimony
-egueiite
-egurgitate
-eguttulate
-Egypt
-Egyptian
-Egyptianism
-Egyptianization
-Egyptianize
-Egyptize
-Egyptologer
-Egyptologic
-Egyptological
-Egyptologist
-Egyptology
-eh
-Ehatisaht
-eheu
-ehlite
-Ehretia
-Ehretiaceae
-ehrwaldite
-ehuawa
-eichbergite
-Eichhornia
-eichwaldite
-eicosane
-eident
-eidently
-eider
-eidetic
-eidograph
-eidolic
-eidolism
-eidology
-eidolology
-eidolon
-eidoptometry
-eidouranion
-eigenfunction
-eigenvalue
-eight
-eighteen
-eighteenfold
-eighteenmo
-eighteenth
-eighteenthly
-eightfoil
-eightfold
-eighth
-eighthly
-eightieth
-eightling
-eightpenny
-eightscore
-eightsman
-eightsome
-eighty
-eightyfold
-eigne
-Eikonogen
-eikonology
-Eileen
-Eimak
-eimer
-Eimeria
-einkorn
-Einsteinian
-Eireannach
-Eirene
-eiresione
-eisegesis
-eisegetical
-eisodic
-eisteddfod
-eisteddfodic
-eisteddfodism
-either
-ejaculate
-ejaculation
-ejaculative
-ejaculator
-ejaculatory
-Ejam
-eject
-ejecta
-ejectable
-ejection
-ejective
-ejectively
-ejectivity
-ejectment
-ejector
-ejicient
-ejoo
-ekaboron
-ekacaesium
-ekaha
-ekamanganese
-ekasilicon
-ekatantalum
-eke
-ekebergite
-eker
-ekerite
-eking
-ekka
-Ekoi
-ekphore
-Ekron
-Ekronite
-ektene
-ektenes
-ektodynamorphic
-el
-elaborate
-elaborately
-elaborateness
-elaboration
-elaborative
-elaborator
-elaboratory
-elabrate
-Elachista
-Elachistaceae
-elachistaceous
-Elaeagnaceae
-elaeagnaceous
-Elaeagnus
-Elaeis
-elaeoblast
-elaeoblastic
-Elaeocarpaceae
-elaeocarpaceous
-Elaeocarpus
-Elaeococca
-Elaeodendron
-elaeodochon
-elaeomargaric
-elaeometer
-elaeoptene
-elaeosaccharum
-elaeothesium
-elaidate
-elaidic
-elaidin
-elaidinic
-elain
-Elaine
-elaine
-elaioleucite
-elaioplast
-elaiosome
-Elamite
-Elamitic
-Elamitish
-elance
-eland
-elanet
-Elanus
-Elaphe
-Elaphebolion
-elaphine
-Elaphodus
-Elaphoglossum
-Elaphomyces
-Elaphomycetaceae
-Elaphrium
-elaphure
-elaphurine
-Elaphurus
-elapid
-Elapidae
-Elapinae
-elapine
-elapoid
-Elaps
-elapse
-Elapsoidea
-elasmobranch
-elasmobranchian
-elasmobranchiate
-Elasmobranchii
-elasmosaur
-Elasmosaurus
-elasmothere
-Elasmotherium
-elastance
-elastic
-elastica
-elastically
-elastician
-elasticin
-elasticity
-elasticize
-elasticizer
-elasticness
-elastin
-elastivity
-elastomer
-elastomeric
-elastometer
-elastometry
-elastose
-elatcha
-elate
-elated
-elatedly
-elatedness
-elater
-elaterid
-Elateridae
-elaterin
-elaterite
-elaterium
-elateroid
-Elatha
-Elatinaceae
-elatinaceous
-Elatine
-elation
-elative
-elator
-elatrometer
-elb
-Elbert
-Elberta
-elbow
-elbowboard
-elbowbush
-elbowchair
-elbowed
-elbower
-elbowpiece
-elbowroom
-elbowy
-elcaja
-elchee
-eld
-elder
-elderberry
-elderbrotherhood
-elderbrotherish
-elderbrotherly
-elderbush
-elderhood
-elderliness
-elderly
-elderman
-eldership
-eldersisterly
-elderwoman
-elderwood
-elderwort
-eldest
-eldin
-elding
-Eldred
-eldress
-eldritch
-Elean
-Eleanor
-Eleatic
-Eleaticism
-Eleazar
-elecampane
-elect
-electable
-electee
-electicism
-election
-electionary
-electioneer
-electioneerer
-elective
-electively
-electiveness
-electivism
-electivity
-electly
-elector
-electoral
-electorally
-electorate
-electorial
-electorship
-Electra
-electragist
-electragy
-electralize
-electrepeter
-electress
-electret
-electric
-electrical
-electricalize
-electrically
-electricalness
-electrician
-electricity
-electricize
-electrics
-electriferous
-electrifiable
-electrification
-electrifier
-electrify
-electrion
-electrionic
-electrizable
-electrization
-electrize
-electrizer
-electro
-electroacoustic
-electroaffinity
-electroamalgamation
-electroanalysis
-electroanalytic
-electroanalytical
-electroanesthesia
-electroballistic
-electroballistics
-electrobath
-electrobiological
-electrobiologist
-electrobiology
-electrobioscopy
-electroblasting
-electrobrasser
-electrobus
-electrocapillarity
-electrocapillary
-electrocardiogram
-electrocardiograph
-electrocardiographic
-electrocardiography
-electrocatalysis
-electrocatalytic
-electrocataphoresis
-electrocataphoretic
-electrocauterization
-electrocautery
-electroceramic
-electrochemical
-electrochemically
-electrochemist
-electrochemistry
-electrochronograph
-electrochronographic
-electrochronometer
-electrochronometric
-electrocoagulation
-electrocoating
-electrocolloidal
-electrocontractility
-electrocorticogram
-electroculture
-electrocute
-electrocution
-electrocutional
-electrocutioner
-electrocystoscope
-electrode
-electrodeless
-electrodentistry
-electrodeposit
-electrodepositable
-electrodeposition
-electrodepositor
-electrodesiccate
-electrodesiccation
-electrodiagnosis
-electrodialysis
-electrodialyze
-electrodialyzer
-electrodiplomatic
-electrodispersive
-electrodissolution
-electrodynamic
-electrodynamical
-electrodynamics
-electrodynamism
-electrodynamometer
-electroencephalogram
-electroencephalograph
-electroencephalography
-electroendosmose
-electroendosmosis
-electroendosmotic
-electroengrave
-electroengraving
-electroergometer
-electroetching
-electroethereal
-electroextraction
-electroform
-electroforming
-electrofuse
-electrofused
-electrofusion
-electrogalvanic
-electrogalvanize
-electrogenesis
-electrogenetic
-electrogild
-electrogilding
-electrogilt
-electrograph
-electrographic
-electrographite
-electrography
-electroharmonic
-electrohemostasis
-electrohomeopathy
-electrohorticulture
-electrohydraulic
-electroimpulse
-electroindustrial
-electroionic
-electroirrigation
-electrokinematics
-electrokinetic
-electrokinetics
-electrolier
-electrolithotrity
-electrologic
-electrological
-electrologist
-electrology
-electroluminescence
-electroluminescent
-electrolysis
-electrolyte
-electrolytic
-electrolytical
-electrolytically
-electrolyzability
-electrolyzable
-electrolyzation
-electrolyze
-electrolyzer
-electromagnet
-electromagnetic
-electromagnetical
-electromagnetically
-electromagnetics
-electromagnetism
-electromagnetist
-electromassage
-electromechanical
-electromechanics
-electromedical
-electromer
-electromeric
-electromerism
-electrometallurgical
-electrometallurgist
-electrometallurgy
-electrometer
-electrometric
-electrometrical
-electrometrically
-electrometry
-electromobile
-electromobilism
-electromotion
-electromotive
-electromotivity
-electromotograph
-electromotor
-electromuscular
-electromyographic
-electron
-electronarcosis
-electronegative
-electronervous
-electronic
-electronics
-electronographic
-electrooptic
-electrooptical
-electrooptically
-electrooptics
-electroosmosis
-electroosmotic
-electroosmotically
-electrootiatrics
-electropathic
-electropathology
-electropathy
-electropercussive
-electrophobia
-electrophone
-electrophore
-electrophoresis
-electrophoretic
-electrophoric
-Electrophoridae
-electrophorus
-electrophotometer
-electrophotometry
-electrophototherapy
-electrophrenic
-electrophysics
-electrophysiological
-electrophysiologist
-electrophysiology
-electropism
-electroplate
-electroplater
-electroplating
-electroplax
-electropneumatic
-electropneumatically
-electropoion
-electropolar
-electropositive
-electropotential
-electropower
-electropsychrometer
-electropult
-electropuncturation
-electropuncture
-electropuncturing
-electropyrometer
-electroreceptive
-electroreduction
-electrorefine
-electroscission
-electroscope
-electroscopic
-electrosherardizing
-electroshock
-electrosmosis
-electrostatic
-electrostatical
-electrostatically
-electrostatics
-electrosteel
-electrostenolysis
-electrostenolytic
-electrostereotype
-electrostriction
-electrosurgery
-electrosurgical
-electrosynthesis
-electrosynthetic
-electrosynthetically
-electrotactic
-electrotautomerism
-electrotaxis
-electrotechnic
-electrotechnical
-electrotechnician
-electrotechnics
-electrotechnology
-electrotelegraphic
-electrotelegraphy
-electrotelethermometer
-electrotellurograph
-electrotest
-electrothanasia
-electrothanatosis
-electrotherapeutic
-electrotherapeutical
-electrotherapeutics
-electrotherapeutist
-electrotherapist
-electrotherapy
-electrothermal
-electrothermancy
-electrothermic
-electrothermics
-electrothermometer
-electrothermostat
-electrothermostatic
-electrothermotic
-electrotitration
-electrotonic
-electrotonicity
-electrotonize
-electrotonus
-electrotrephine
-electrotropic
-electrotropism
-electrotype
-electrotyper
-electrotypic
-electrotyping
-electrotypist
-electrotypy
-electrovalence
-electrovalency
-electrovection
-electroviscous
-electrovital
-electrowin
-electrum
-electuary
-eleemosynarily
-eleemosynariness
-eleemosynary
-elegance
-elegancy
-elegant
-elegantly
-elegiac
-elegiacal
-elegiambic
-elegiambus
-elegiast
-elegist
-elegit
-elegize
-elegy
-eleidin
-element
-elemental
-elementalism
-elementalist
-elementalistic
-elementalistically
-elementality
-elementalize
-elementally
-elementarily
-elementariness
-elementary
-elementoid
-elemi
-elemicin
-elemin
-elench
-elenchi
-elenchic
-elenchical
-elenchically
-elenchize
-elenchtic
-elenchtical
-elenctic
-elenge
-eleoblast
-Eleocharis
-eleolite
-eleomargaric
-eleometer
-eleonorite
-eleoptene
-eleostearate
-eleostearic
-elephant
-elephanta
-elephantiac
-elephantiasic
-elephantiasis
-elephantic
-elephanticide
-Elephantidae
-elephantine
-elephantlike
-elephantoid
-elephantoidal
-Elephantopus
-elephantous
-elephantry
-Elephas
-Elettaria
-Eleusine
-Eleusinia
-Eleusinian
-Eleusinion
-Eleut
-eleutherarch
-Eleutheri
-Eleutheria
-Eleutherian
-Eleutherios
-eleutherism
-eleutherodactyl
-Eleutherodactyli
-Eleutherodactylus
-eleutheromania
-eleutheromaniac
-eleutheromorph
-eleutheropetalous
-eleutherophyllous
-eleutherosepalous
-Eleutherozoa
-eleutherozoan
-elevate
-elevated
-elevatedly
-elevatedness
-elevating
-elevatingly
-elevation
-elevational
-elevator
-elevatory
-eleven
-elevener
-elevenfold
-eleventh
-eleventhly
-elevon
-elf
-elfenfolk
-elfhood
-elfic
-elfin
-elfinwood
-elfish
-elfishly
-elfishness
-elfkin
-elfland
-elflike
-elflock
-elfship
-elfwife
-elfwort
-Eli
-Elia
-Elian
-Elianic
-Elias
-eliasite
-elicit
-elicitable
-elicitate
-elicitation
-elicitor
-elicitory
-elide
-elidible
-eligibility
-eligible
-eligibleness
-eligibly
-Elihu
-Elijah
-eliminable
-eliminand
-eliminant
-eliminate
-elimination
-eliminative
-eliminator
-eliminatory
-Elinor
-Elinvar
-Eliot
-Eliphalet
-eliquate
-eliquation
-Elisabeth
-Elisha
-Elishah
-elision
-elisor
-Elissa
-elite
-elixir
-Eliza
-Elizabeth
-Elizabethan
-Elizabethanism
-Elizabethanize
-elk
-Elkanah
-Elkdom
-Elkesaite
-elkhorn
-elkhound
-Elkoshite
-elkslip
-Elkuma
-elkwood
-ell
-Ella
-ellachick
-ellagate
-ellagic
-ellagitannin
-Ellasar
-elle
-elleck
-Ellen
-ellenyard
-Ellerian
-ellfish
-Ellice
-Ellick
-Elliot
-Elliott
-ellipse
-ellipses
-ellipsis
-ellipsograph
-ellipsoid
-ellipsoidal
-ellipsone
-ellipsonic
-elliptic
-elliptical
-elliptically
-ellipticalness
-ellipticity
-elliptograph
-elliptoid
-ellops
-ellwand
-elm
-Elmer
-elmy
-Eloah
-elocular
-elocute
-elocution
-elocutionary
-elocutioner
-elocutionist
-elocutionize
-elod
-Elodea
-Elodeaceae
-Elodes
-eloge
-elogium
-Elohim
-Elohimic
-Elohism
-Elohist
-Elohistic
-eloign
-eloigner
-eloignment
-Eloise
-Elon
-elongate
-elongated
-elongation
-elongative
-Elonite
-elope
-elopement
-eloper
-Elopidae
-elops
-eloquence
-eloquent
-eloquential
-eloquently
-eloquentness
-Elotherium
-elotillo
-elpasolite
-elpidite
-Elric
-els
-Elsa
-else
-elsehow
-elsewards
-elseways
-elsewhen
-elsewhere
-elsewheres
-elsewhither
-elsewise
-Elsholtzia
-elsin
-elt
-eluate
-elucidate
-elucidation
-elucidative
-elucidator
-elucidatory
-elucubrate
-elucubration
-elude
-eluder
-elusion
-elusive
-elusively
-elusiveness
-elusoriness
-elusory
-elute
-elution
-elutor
-elutriate
-elutriation
-elutriator
-eluvial
-eluviate
-eluviation
-eluvium
-elvan
-elvanite
-elvanitic
-elver
-elves
-elvet
-Elvira
-Elvis
-elvish
-elvishly
-Elwood
-elydoric
-Elymi
-Elymus
-Elysee
-Elysia
-elysia
-Elysian
-Elysiidae
-Elysium
-elytral
-elytriferous
-elytriform
-elytrigerous
-elytrin
-elytrocele
-elytroclasia
-elytroid
-elytron
-elytroplastic
-elytropolypus
-elytroposis
-elytrorhagia
-elytrorrhagia
-elytrorrhaphy
-elytrostenosis
-elytrotomy
-elytrous
-elytrum
-Elzevir
-Elzevirian
-Em
-em
-emaciate
-emaciation
-emajagua
-emanant
-emanate
-emanation
-emanational
-emanationism
-emanationist
-emanatism
-emanatist
-emanatistic
-emanativ
-emanative
-emanatively
-emanator
-emanatory
-emancipate
-emancipation
-emancipationist
-emancipatist
-emancipative
-emancipator
-emancipatory
-emancipatress
-emancipist
-emandibulate
-emanium
-emarcid
-emarginate
-emarginately
-emargination
-Emarginula
-emasculate
-emasculation
-emasculative
-emasculator
-emasculatory
-Embadomonas
-emball
-emballonurid
-Emballonuridae
-emballonurine
-embalm
-embalmer
-embalmment
-embank
-embankment
-embannered
-embar
-embargo
-embargoist
-embark
-embarkation
-embarkment
-embarras
-embarrass
-embarrassed
-embarrassedly
-embarrassing
-embarrassingly
-embarrassment
-embarrel
-embassage
-embassy
-embastioned
-embathe
-embatholithic
-embattle
-embattled
-embattlement
-embay
-embayment
-Embden
-embed
-embedment
-embeggar
-Embelia
-embelic
-embellish
-embellisher
-embellishment
-ember
-embergoose
-Emberiza
-emberizidae
-Emberizinae
-emberizine
-embezzle
-embezzlement
-embezzler
-Embiidae
-Embiidina
-embind
-Embiodea
-Embioptera
-embiotocid
-Embiotocidae
-embiotocoid
-embira
-embitter
-embitterer
-embitterment
-emblaze
-emblazer
-emblazon
-emblazoner
-emblazonment
-emblazonry
-emblem
-emblema
-emblematic
-emblematical
-emblematically
-emblematicalness
-emblematicize
-emblematist
-emblematize
-emblematology
-emblement
-emblemist
-emblemize
-emblemology
-emblic
-emblossom
-embodier
-embodiment
-embody
-embog
-emboitement
-embolden
-emboldener
-embole
-embolectomy
-embolemia
-embolic
-emboliform
-embolism
-embolismic
-embolismus
-embolite
-embolium
-embolize
-embolo
-embololalia
-Embolomeri
-embolomerism
-embolomerous
-embolomycotic
-embolum
-embolus
-emboly
-emborder
-emboscata
-embosom
-emboss
-embossage
-embosser
-embossing
-embossman
-embossment
-embosture
-embottle
-embouchure
-embound
-embow
-embowed
-embowel
-emboweler
-embowelment
-embower
-embowerment
-embowment
-embox
-embrace
-embraceable
-embraceably
-embracement
-embraceor
-embracer
-embracery
-embracing
-embracingly
-embracingness
-embracive
-embrail
-embranchment
-embrangle
-embranglement
-embrasure
-embreathe
-embreathement
-Embrica
-embright
-embrittle
-embrittlement
-embroaden
-embrocate
-embrocation
-embroider
-embroiderer
-embroideress
-embroidery
-embroil
-embroiler
-embroilment
-embronze
-embrown
-embryectomy
-embryo
-embryocardia
-embryoctonic
-embryoctony
-embryoferous
-embryogenesis
-embryogenetic
-embryogenic
-embryogeny
-embryogony
-embryographer
-embryographic
-embryography
-embryoid
-embryoism
-embryologic
-embryological
-embryologically
-embryologist
-embryology
-embryoma
-embryon
-embryonal
-embryonary
-embryonate
-embryonated
-embryonic
-embryonically
-embryoniferous
-embryoniform
-embryony
-embryopathology
-embryophagous
-embryophore
-Embryophyta
-embryophyte
-embryoplastic
-embryoscope
-embryoscopic
-embryotega
-embryotic
-embryotome
-embryotomy
-embryotrophic
-embryotrophy
-embryous
-embryulcia
-embryulcus
-embubble
-embuia
-embus
-embusk
-embuskin
-emcee
-eme
-emeer
-emeership
-Emeline
-emend
-emendable
-emendandum
-emendate
-emendation
-emendator
-emendatory
-emender
-emerald
-emeraldine
-emeraude
-emerge
-emergence
-emergency
-emergent
-emergently
-emergentness
-Emerita
-emerited
-emeritus
-emerize
-emerse
-emersed
-emersion
-Emersonian
-Emersonianism
-Emery
-emery
-Emesa
-Emesidae
-emesis
-emetatrophia
-emetic
-emetically
-emetine
-emetocathartic
-emetology
-emetomorphine
-emgalla
-emication
-emiction
-emictory
-emigrant
-emigrate
-emigration
-emigrational
-emigrationist
-emigrative
-emigrator
-emigratory
-emigree
-Emil
-Emilia
-Emily
-Emim
-eminence
-eminency
-eminent
-eminently
-emir
-emirate
-emirship
-emissarium
-emissary
-emissaryship
-emissile
-emission
-emissive
-emissivity
-emit
-emittent
-emitter
-Emm
-Emma
-emma
-Emmanuel
-emmarble
-emmarvel
-emmenagogic
-emmenagogue
-emmenic
-emmeniopathy
-emmenology
-emmensite
-Emmental
-emmer
-emmergoose
-emmet
-emmetrope
-emmetropia
-emmetropic
-emmetropism
-emmetropy
-Emmett
-emodin
-emollescence
-emolliate
-emollient
-emoloa
-emolument
-emolumental
-emolumentary
-emote
-emotion
-emotionable
-emotional
-emotionalism
-emotionalist
-emotionality
-emotionalization
-emotionalize
-emotionally
-emotioned
-emotionist
-emotionize
-emotionless
-emotionlessness
-emotive
-emotively
-emotiveness
-emotivity
-empacket
-empaistic
-empall
-empanel
-empanelment
-empanoply
-empaper
-emparadise
-emparchment
-empark
-empasm
-empathic
-empathically
-empathize
-empathy
-Empedoclean
-empeirema
-Empeo
-emperor
-emperorship
-empery
-Empetraceae
-empetraceous
-Empetrum
-emphases
-emphasis
-emphasize
-emphatic
-emphatical
-emphatically
-emphaticalness
-emphlysis
-emphractic
-emphraxis
-emphysema
-emphysematous
-emphyteusis
-emphyteuta
-emphyteutic
-empicture
-Empididae
-Empidonax
-empiecement
-Empire
-empire
-empirema
-empiric
-empirical
-empiricalness
-empiricism
-empiricist
-empirics
-empiriocritcism
-empiriocritical
-empiriological
-empirism
-empiristic
-emplace
-emplacement
-emplane
-emplastic
-emplastration
-emplastrum
-emplectite
-empleomania
-employ
-employability
-employable
-employed
-employee
-employer
-employless
-employment
-emplume
-empocket
-empodium
-empoison
-empoisonment
-emporetic
-emporeutic
-emporia
-emporial
-emporium
-empower
-empowerment
-empress
-emprise
-emprosthotonic
-emprosthotonos
-emprosthotonus
-empt
-emptier
-emptily
-emptiness
-emptings
-emptins
-emption
-emptional
-emptor
-empty
-emptyhearted
-emptysis
-empurple
-Empusa
-empyema
-empyemic
-empyesis
-empyocele
-empyreal
-empyrean
-empyreuma
-empyreumatic
-empyreumatical
-empyreumatize
-empyromancy
-emu
-emulable
-emulant
-emulate
-emulation
-emulative
-emulatively
-emulator
-emulatory
-emulatress
-emulgence
-emulgent
-emulous
-emulously
-emulousness
-emulsibility
-emulsible
-emulsifiability
-emulsifiable
-emulsification
-emulsifier
-emulsify
-emulsin
-emulsion
-emulsionize
-emulsive
-emulsoid
-emulsor
-emunctory
-emundation
-emyd
-Emydea
-emydian
-Emydidae
-Emydinae
-Emydosauria
-emydosaurian
-Emys
-en
-enable
-enablement
-enabler
-enact
-enactable
-enaction
-enactive
-enactment
-enactor
-enactory
-enaena
-enage
-Enajim
-enalid
-Enaliornis
-enaliosaur
-Enaliosauria
-enaliosaurian
-enallachrome
-enallage
-enaluron
-enam
-enamber
-enambush
-enamdar
-enamel
-enameler
-enameling
-enamelist
-enamelless
-enamellist
-enameloma
-enamelware
-enamor
-enamorato
-enamored
-enamoredness
-enamorment
-enamourment
-enanguish
-enanthem
-enanthema
-enanthematous
-enanthesis
-enantiobiosis
-enantioblastic
-enantioblastous
-enantiomer
-enantiomeride
-enantiomorph
-enantiomorphic
-enantiomorphism
-enantiomorphous
-enantiomorphously
-enantiomorphy
-enantiopathia
-enantiopathic
-enantiopathy
-enantiosis
-enantiotropic
-enantiotropy
-enantobiosis
-enapt
-enarbor
-enarbour
-enarch
-enarched
-enargite
-enarm
-enarme
-enarthrodia
-enarthrodial
-enarthrosis
-enate
-enatic
-enation
-enbrave
-encaenia
-encage
-encake
-encalendar
-encallow
-encamp
-encampment
-encanker
-encanthis
-encapsulate
-encapsulation
-encapsule
-encarditis
-encarnadine
-encarnalize
-encarpium
-encarpus
-encase
-encasement
-encash
-encashable
-encashment
-encasserole
-encastage
-encatarrhaphy
-encauma
-encaustes
-encaustic
-encaustically
-encave
-encefalon
-Encelia
-encell
-encenter
-encephala
-encephalalgia
-Encephalartos
-encephalasthenia
-encephalic
-encephalin
-encephalitic
-encephalitis
-encephalocele
-encephalocoele
-encephalodialysis
-encephalogram
-encephalograph
-encephalography
-encephaloid
-encephalolith
-encephalology
-encephaloma
-encephalomalacia
-encephalomalacosis
-encephalomalaxis
-encephalomeningitis
-encephalomeningocele
-encephalomere
-encephalomeric
-encephalometer
-encephalometric
-encephalomyelitis
-encephalomyelopathy
-encephalon
-encephalonarcosis
-encephalopathia
-encephalopathic
-encephalopathy
-encephalophyma
-encephalopsychesis
-encephalopyosis
-encephalorrhagia
-encephalosclerosis
-encephaloscope
-encephaloscopy
-encephalosepsis
-encephalospinal
-encephalothlipsis
-encephalotome
-encephalotomy
-encephalous
-enchain
-enchainment
-enchair
-enchalice
-enchannel
-enchant
-enchanter
-enchanting
-enchantingly
-enchantingness
-enchantment
-enchantress
-encharge
-encharnel
-enchase
-enchaser
-enchasten
-Enchelycephali
-enchequer
-enchest
-enchilada
-enchiridion
-Enchodontid
-Enchodontidae
-Enchodontoid
-Enchodus
-enchondroma
-enchondromatous
-enchondrosis
-enchorial
-enchurch
-enchylema
-enchylematous
-enchymatous
-enchytrae
-enchytraeid
-Enchytraeidae
-Enchytraeus
-encina
-encinal
-encincture
-encinder
-encinillo
-encipher
-encircle
-encirclement
-encircler
-encist
-encitadel
-enclaret
-enclasp
-enclave
-enclavement
-enclisis
-enclitic
-enclitical
-enclitically
-encloak
-encloister
-enclose
-encloser
-enclosure
-enclothe
-encloud
-encoach
-encode
-encoffin
-encoignure
-encoil
-encolden
-encollar
-encolor
-encolpion
-encolumn
-encomendero
-encomia
-encomiast
-encomiastic
-encomiastical
-encomiastically
-encomic
-encomienda
-encomiologic
-encomium
-encommon
-encompass
-encompasser
-encompassment
-encoop
-encorbelment
-encore
-encoronal
-encoronate
-encoronet
-encounter
-encounterable
-encounterer
-encourage
-encouragement
-encourager
-encouraging
-encouragingly
-encowl
-encraal
-encradle
-encranial
-encratic
-Encratism
-Encratite
-encraty
-encreel
-encrimson
-encrinal
-encrinic
-Encrinidae
-encrinidae
-encrinital
-encrinite
-encrinitic
-encrinitical
-encrinoid
-Encrinoidea
-Encrinus
-encrisp
-encroach
-encroacher
-encroachingly
-encroachment
-encrotchet
-encrown
-encrownment
-encrust
-encrustment
-encrypt
-encryption
-encuirassed
-encumber
-encumberer
-encumberingly
-encumberment
-encumbrance
-encumbrancer
-encup
-encurl
-encurtain
-encushion
-encyclic
-encyclical
-encyclopedia
-encyclopediac
-encyclopediacal
-encyclopedial
-encyclopedian
-encyclopediast
-encyclopedic
-encyclopedically
-encyclopedism
-encyclopedist
-encyclopedize
-encyrtid
-Encyrtidae
-encyst
-encystation
-encystment
-end
-endable
-endamage
-endamageable
-endamagement
-endamask
-endameba
-endamebic
-Endamoeba
-endamoebiasis
-endamoebic
-Endamoebidae
-endanger
-endangerer
-endangerment
-endangium
-endaortic
-endaortitis
-endarch
-endarchy
-endarterial
-endarteritis
-endarterium
-endaspidean
-endaze
-endboard
-endbrain
-endear
-endearance
-endeared
-endearedly
-endearedness
-endearing
-endearingly
-endearingness
-endearment
-endeavor
-endeavorer
-ended
-endeictic
-endellionite
-endemial
-endemic
-endemically
-endemicity
-endemiological
-endemiology
-endemism
-endenizen
-ender
-endere
-endermatic
-endermic
-endermically
-enderon
-enderonic
-endevil
-endew
-endgate
-endiadem
-endiaper
-ending
-endite
-endive
-endless
-endlessly
-endlessness
-endlichite
-endlong
-endmatcher
-endmost
-endoabdominal
-endoangiitis
-endoaortitis
-endoappendicitis
-endoarteritis
-endoauscultation
-endobatholithic
-endobiotic
-endoblast
-endoblastic
-endobronchial
-endobronchially
-endobronchitis
-endocannibalism
-endocardiac
-endocardial
-endocarditic
-endocarditis
-endocardium
-endocarp
-endocarpal
-endocarpic
-endocarpoid
-endocellular
-endocentric
-Endoceras
-Endoceratidae
-endoceratite
-endoceratitic
-endocervical
-endocervicitis
-endochondral
-endochorion
-endochorionic
-endochrome
-endochylous
-endoclinal
-endocline
-endocoelar
-endocoele
-endocoeliac
-endocolitis
-endocolpitis
-endocondensation
-endocone
-endoconidium
-endocorpuscular
-endocortex
-endocranial
-endocranium
-endocrinal
-endocrine
-endocrinic
-endocrinism
-endocrinological
-endocrinologist
-endocrinology
-endocrinopathic
-endocrinopathy
-endocrinotherapy
-endocrinous
-endocritic
-endocycle
-endocyclic
-endocyemate
-endocyst
-endocystitis
-endoderm
-endodermal
-endodermic
-endodermis
-endodontia
-endodontic
-endodontist
-endodynamomorphic
-endoenteritis
-endoenzyme
-endoesophagitis
-endofaradism
-endogalvanism
-endogamic
-endogamous
-endogamy
-endogastric
-endogastrically
-endogastritis
-endogen
-Endogenae
-endogenesis
-endogenetic
-endogenic
-endogenous
-endogenously
-endogeny
-endoglobular
-endognath
-endognathal
-endognathion
-endogonidium
-endointoxication
-endokaryogamy
-endolabyrinthitis
-endolaryngeal
-endolemma
-endolumbar
-endolymph
-endolymphangial
-endolymphatic
-endolymphic
-endolysin
-endomastoiditis
-endome
-endomesoderm
-endometrial
-endometritis
-endometrium
-endometry
-endomitosis
-endomitotic
-endomixis
-endomorph
-endomorphic
-endomorphism
-endomorphy
-Endomyces
-Endomycetaceae
-endomysial
-endomysium
-endoneurial
-endoneurium
-endonuclear
-endonucleolus
-endoparasite
-endoparasitic
-Endoparasitica
-endopathic
-endopelvic
-endopericarditis
-endoperidial
-endoperidium
-endoperitonitis
-endophagous
-endophagy
-endophasia
-endophasic
-endophlebitis
-endophragm
-endophragmal
-Endophyllaceae
-endophyllous
-Endophyllum
-endophytal
-endophyte
-endophytic
-endophytically
-endophytous
-endoplasm
-endoplasma
-endoplasmic
-endoplast
-endoplastron
-endoplastular
-endoplastule
-endopleura
-endopleural
-endopleurite
-endopleuritic
-endopod
-endopodite
-endopoditic
-endoproct
-Endoprocta
-endoproctous
-endopsychic
-Endopterygota
-endopterygote
-endopterygotic
-endopterygotism
-endopterygotous
-endorachis
-endoral
-endore
-endorhinitis
-endorsable
-endorsation
-endorse
-endorsed
-endorsee
-endorsement
-endorser
-endorsingly
-endosalpingitis
-endosarc
-endosarcode
-endosarcous
-endosclerite
-endoscope
-endoscopic
-endoscopy
-endosecretory
-endosepsis
-endosiphon
-endosiphonal
-endosiphonate
-endosiphuncle
-endoskeletal
-endoskeleton
-endosmometer
-endosmometric
-endosmosic
-endosmosis
-endosmotic
-endosmotically
-endosome
-endosperm
-endospermic
-endospore
-endosporium
-endosporous
-endoss
-endosteal
-endosteally
-endosteitis
-endosteoma
-endosternite
-endosternum
-endosteum
-endostitis
-endostoma
-endostome
-endostosis
-endostracal
-endostracum
-endostylar
-endostyle
-endostylic
-endotheca
-endothecal
-endothecate
-endothecial
-endothecium
-endothelia
-endothelial
-endothelioblastoma
-endotheliocyte
-endothelioid
-endotheliolysin
-endotheliolytic
-endothelioma
-endotheliomyoma
-endotheliomyxoma
-endotheliotoxin
-endothelium
-endothermal
-endothermic
-endothermous
-endothermy
-Endothia
-endothoracic
-endothorax
-Endothrix
-endothys
-endotoxic
-endotoxin
-endotoxoid
-endotracheitis
-endotrachelitis
-Endotrophi
-endotrophic
-endotys
-endovaccination
-endovasculitis
-endovenous
-endow
-endower
-endowment
-endozoa
-endpiece
-Endromididae
-Endromis
-endue
-enduement
-endungeon
-endura
-endurability
-endurable
-endurableness
-endurably
-endurance
-endurant
-endure
-endurer
-enduring
-enduringly
-enduringness
-endways
-endwise
-endyma
-endymal
-Endymion
-endysis
-Eneas
-eneclann
-enema
-enemy
-enemylike
-enemyship
-enepidermic
-energeia
-energesis
-energetic
-energetical
-energetically
-energeticalness
-energeticist
-energetics
-energetistic
-energic
-energical
-energid
-energism
-energist
-energize
-energizer
-energumen
-energumenon
-energy
-enervate
-enervation
-enervative
-enervator
-eneuch
-eneugh
-enface
-enfacement
-enfamous
-enfasten
-enfatico
-enfeature
-enfeeble
-enfeeblement
-enfeebler
-enfelon
-enfeoff
-enfeoffment
-enfester
-enfetter
-enfever
-enfigure
-enfilade
-enfilading
-enfile
-enfiled
-enflagellate
-enflagellation
-enflesh
-enfleurage
-enflower
-enfoil
-enfold
-enfolden
-enfolder
-enfoldment
-enfonced
-enforce
-enforceability
-enforceable
-enforced
-enforcedly
-enforcement
-enforcer
-enforcibility
-enforcible
-enforcingly
-enfork
-enfoul
-enframe
-enframement
-enfranchisable
-enfranchise
-enfranchisement
-enfranchiser
-enfree
-enfrenzy
-enfuddle
-enfurrow
-engage
-engaged
-engagedly
-engagedness
-engagement
-engager
-engaging
-engagingly
-engagingness
-engaol
-engarb
-engarble
-engarland
-engarment
-engarrison
-engastrimyth
-engastrimythic
-engaud
-engaze
-Engelmannia
-engem
-engender
-engenderer
-engenderment
-engerminate
-enghosted
-engild
-engine
-engineer
-engineering
-engineership
-enginehouse
-engineless
-enginelike
-engineman
-enginery
-enginous
-engird
-engirdle
-engirt
-engjateigur
-englacial
-englacially
-englad
-engladden
-Englander
-Engler
-Englerophoenix
-Englifier
-Englify
-English
-Englishable
-Englisher
-Englishhood
-Englishism
-Englishize
-Englishly
-Englishman
-Englishness
-Englishry
-Englishwoman
-englobe
-englobement
-engloom
-englory
-englut
-englyn
-engnessang
-engobe
-engold
-engolden
-engore
-engorge
-engorgement
-engouled
-engrace
-engraff
-engraft
-engraftation
-engrafter
-engraftment
-engrail
-engrailed
-engrailment
-engrain
-engrained
-engrainedly
-engrainer
-engram
-engramma
-engrammatic
-engrammic
-engrandize
-engrandizement
-engraphia
-engraphic
-engraphically
-engraphy
-engrapple
-engrasp
-Engraulidae
-Engraulis
-engrave
-engraved
-engravement
-engraver
-engraving
-engreen
-engrieve
-engroove
-engross
-engrossed
-engrossedly
-engrosser
-engrossing
-engrossingly
-engrossingness
-engrossment
-enguard
-engulf
-engulfment
-engyscope
-engysseismology
-Engystomatidae
-enhallow
-enhalo
-enhamper
-enhance
-enhanced
-enhancement
-enhancer
-enhancive
-enharmonic
-enharmonical
-enharmonically
-enhat
-enhaunt
-enhearse
-enheart
-enhearten
-enhedge
-enhelm
-enhemospore
-enherit
-enheritage
-enheritance
-enhorror
-enhunger
-enhusk
-Enhydra
-Enhydrinae
-Enhydris
-enhydrite
-enhydritic
-enhydros
-enhydrous
-enhypostasia
-enhypostasis
-enhypostatic
-enhypostatize
-eniac
-Enicuridae
-Enid
-Enif
-enigma
-enigmatic
-enigmatical
-enigmatically
-enigmaticalness
-enigmatist
-enigmatization
-enigmatize
-enigmatographer
-enigmatography
-enigmatology
-enisle
-enjail
-enjamb
-enjambed
-enjambment
-enjelly
-enjeopard
-enjeopardy
-enjewel
-enjoin
-enjoinder
-enjoiner
-enjoinment
-enjoy
-enjoyable
-enjoyableness
-enjoyably
-enjoyer
-enjoying
-enjoyingly
-enjoyment
-enkerchief
-enkernel
-Enki
-Enkidu
-enkindle
-enkindler
-enkraal
-enlace
-enlacement
-enlard
-enlarge
-enlargeable
-enlargeableness
-enlarged
-enlargedly
-enlargedness
-enlargement
-enlarger
-enlarging
-enlargingly
-enlaurel
-enleaf
-enleague
-enlevement
-enlief
-enlife
-enlight
-enlighten
-enlightened
-enlightenedly
-enlightenedness
-enlightener
-enlightening
-enlighteningly
-enlightenment
-enlink
-enlinkment
-enlist
-enlisted
-enlister
-enlistment
-enliven
-enlivener
-enlivening
-enliveningly
-enlivenment
-enlock
-enlodge
-enlodgement
-enmarble
-enmask
-enmass
-enmesh
-enmeshment
-enmist
-enmity
-enmoss
-enmuffle
-enneacontahedral
-enneacontahedron
-ennead
-enneadianome
-enneadic
-enneagon
-enneagynous
-enneahedral
-enneahedria
-enneahedron
-enneapetalous
-enneaphyllous
-enneasemic
-enneasepalous
-enneaspermous
-enneastyle
-enneastylos
-enneasyllabic
-enneateric
-enneatic
-enneatical
-ennerve
-enniche
-ennoble
-ennoblement
-ennobler
-ennobling
-ennoblingly
-ennoic
-ennomic
-ennui
-Enoch
-Enochic
-enocyte
-enodal
-enodally
-enoil
-enol
-enolate
-enolic
-enolizable
-enolization
-enolize
-enomania
-enomaniac
-enomotarch
-enomoty
-enophthalmos
-enophthalmus
-Enopla
-enoplan
-enoptromancy
-enorganic
-enorm
-enormity
-enormous
-enormously
-enormousness
-Enos
-enostosis
-enough
-enounce
-enouncement
-enow
-enphytotic
-enplane
-enquicken
-enquire
-enquirer
-enquiry
-enrace
-enrage
-enraged
-enragedly
-enragement
-enrange
-enrank
-enrapt
-enrapture
-enrapturer
-enravish
-enravishingly
-enravishment
-enray
-enregiment
-enregister
-enregistration
-enregistry
-enrib
-enrich
-enricher
-enriching
-enrichingly
-enrichment
-enring
-enrive
-enrobe
-enrobement
-enrober
-enrockment
-enrol
-enroll
-enrolled
-enrollee
-enroller
-enrollment
-enrolment
-enroot
-enrough
-enruin
-enrut
-ens
-ensaffron
-ensaint
-ensample
-ensand
-ensandal
-ensanguine
-ensate
-enscene
-ensconce
-enscroll
-ensculpture
-ense
-enseam
-enseat
-enseem
-ensellure
-ensemble
-ensepulcher
-ensepulchre
-enseraph
-enserf
-ensete
-enshade
-enshadow
-enshawl
-ensheathe
-enshell
-enshelter
-enshield
-enshrine
-enshrinement
-enshroud
-Ensiferi
-ensiform
-ensign
-ensigncy
-ensignhood
-ensignment
-ensignry
-ensignship
-ensilage
-ensilate
-ensilation
-ensile
-ensilist
-ensilver
-ensisternum
-ensky
-enslave
-enslavedness
-enslavement
-enslaver
-ensmall
-ensnare
-ensnarement
-ensnarer
-ensnaring
-ensnaringly
-ensnarl
-ensnow
-ensorcelize
-ensorcell
-ensoul
-enspell
-ensphere
-enspirit
-enstamp
-enstar
-enstate
-enstatite
-enstatitic
-enstatolite
-ensteel
-enstool
-enstore
-enstrengthen
-ensuable
-ensuance
-ensuant
-ensue
-ensuer
-ensuingly
-ensulphur
-ensure
-ensurer
-enswathe
-enswathement
-ensweep
-entablature
-entablatured
-entablement
-entach
-entad
-Entada
-entail
-entailable
-entailer
-entailment
-ental
-entame
-Entamoeba
-entamoebiasis
-entamoebic
-entangle
-entangled
-entangledly
-entangledness
-entanglement
-entangler
-entangling
-entanglingly
-entapophysial
-entapophysis
-entarthrotic
-entasia
-entasis
-entelam
-entelechy
-entellus
-Entelodon
-entelodont
-entempest
-entemple
-entente
-Ententophil
-entepicondylar
-enter
-enterable
-enteraden
-enteradenographic
-enteradenography
-enteradenological
-enteradenology
-enteral
-enteralgia
-enterate
-enterauxe
-enterclose
-enterectomy
-enterer
-entergogenic
-enteria
-enteric
-entericoid
-entering
-enteritidis
-enteritis
-entermete
-enteroanastomosis
-enterobiliary
-enterocele
-enterocentesis
-enterochirurgia
-enterochlorophyll
-enterocholecystostomy
-enterocinesia
-enterocinetic
-enterocleisis
-enteroclisis
-enteroclysis
-Enterocoela
-enterocoele
-enterocoelic
-enterocoelous
-enterocolitis
-enterocolostomy
-enterocrinin
-enterocyst
-enterocystoma
-enterodynia
-enteroepiplocele
-enterogastritis
-enterogastrone
-enterogenous
-enterogram
-enterograph
-enterography
-enterohelcosis
-enterohemorrhage
-enterohepatitis
-enterohydrocele
-enteroid
-enterointestinal
-enteroischiocele
-enterokinase
-enterokinesia
-enterokinetic
-enterolith
-enterolithiasis
-Enterolobium
-enterology
-enteromegalia
-enteromegaly
-enteromere
-enteromesenteric
-Enteromorpha
-enteromycosis
-enteromyiasis
-enteron
-enteroneuritis
-enteroparalysis
-enteroparesis
-enteropathy
-enteropexia
-enteropexy
-enterophthisis
-enteroplasty
-enteroplegia
-enteropneust
-Enteropneusta
-enteropneustan
-enteroptosis
-enteroptotic
-enterorrhagia
-enterorrhaphy
-enterorrhea
-enteroscope
-enterosepsis
-enterospasm
-enterostasis
-enterostenosis
-enterostomy
-enterosyphilis
-enterotome
-enterotomy
-enterotoxemia
-enterotoxication
-enterozoa
-enterozoan
-enterozoic
-enterprise
-enterpriseless
-enterpriser
-enterprising
-enterprisingly
-enterritoriality
-entertain
-entertainable
-entertainer
-entertaining
-entertainingly
-entertainingness
-entertainment
-enthalpy
-entheal
-enthelmintha
-enthelminthes
-enthelminthic
-enthetic
-enthral
-enthraldom
-enthrall
-enthralldom
-enthraller
-enthralling
-enthrallingly
-enthrallment
-enthralment
-enthrone
-enthronement
-enthronization
-enthronize
-enthuse
-enthusiasm
-enthusiast
-enthusiastic
-enthusiastical
-enthusiastically
-enthusiastly
-enthymematic
-enthymematical
-enthymeme
-entia
-entice
-enticeable
-enticeful
-enticement
-enticer
-enticing
-enticingly
-enticingness
-entifical
-entification
-entify
-entincture
-entire
-entirely
-entireness
-entirety
-entiris
-entitative
-entitatively
-entitle
-entitlement
-entity
-entoblast
-entoblastic
-entobranchiate
-entobronchium
-entocalcaneal
-entocarotid
-entocele
-entocnemial
-entocoele
-entocoelic
-entocondylar
-entocondyle
-entocondyloid
-entocone
-entoconid
-entocornea
-entocranial
-entocuneiform
-entocuniform
-entocyemate
-entocyst
-entoderm
-entodermal
-entodermic
-entogastric
-entogenous
-entoglossal
-entohyal
-entoil
-entoilment
-Entoloma
-entomb
-entombment
-entomere
-entomeric
-entomic
-entomical
-entomion
-entomogenous
-entomoid
-entomologic
-entomological
-entomologically
-entomologist
-entomologize
-entomology
-Entomophaga
-entomophagan
-entomophagous
-Entomophila
-entomophilous
-entomophily
-Entomophthora
-Entomophthoraceae
-entomophthoraceous
-Entomophthorales
-entomophthorous
-entomophytous
-Entomosporium
-Entomostraca
-entomostracan
-entomostracous
-entomotaxy
-entomotomist
-entomotomy
-entone
-entonement
-entoolitic
-entoparasite
-entoparasitic
-entoperipheral
-entophytal
-entophyte
-entophytic
-entophytically
-entophytous
-entopic
-entopical
-entoplasm
-entoplastic
-entoplastral
-entoplastron
-entopopliteal
-Entoprocta
-entoproctous
-entopterygoid
-entoptic
-entoptical
-entoptically
-entoptics
-entoptoscope
-entoptoscopic
-entoptoscopy
-entoretina
-entorganism
-entosarc
-entosclerite
-entosphenal
-entosphenoid
-entosphere
-entosternal
-entosternite
-entosternum
-entothorax
-entotic
-Entotrophi
-entotympanic
-entourage
-entozoa
-entozoal
-entozoan
-entozoarian
-entozoic
-entozoological
-entozoologically
-entozoologist
-entozoology
-entozoon
-entracte
-entrail
-entrails
-entrain
-entrainer
-entrainment
-entrammel
-entrance
-entrancedly
-entrancement
-entranceway
-entrancing
-entrancingly
-entrant
-entrap
-entrapment
-entrapper
-entrappingly
-entreasure
-entreat
-entreating
-entreatingly
-entreatment
-entreaty
-entree
-entremets
-entrench
-entrenchment
-entrepas
-entrepot
-entrepreneur
-entrepreneurial
-entrepreneurship
-entresol
-entrochite
-entrochus
-entropion
-entropionize
-entropium
-entropy
-entrough
-entrust
-entrustment
-entry
-entryman
-entryway
-enturret
-entwine
-entwinement
-entwist
-Entyloma
-enucleate
-enucleation
-enucleator
-Enukki
-enumerable
-enumerate
-enumeration
-enumerative
-enumerator
-enunciability
-enunciable
-enunciate
-enunciation
-enunciative
-enunciatively
-enunciator
-enunciatory
-enure
-enuresis
-enuretic
-enurny
-envapor
-envapour
-envassal
-envassalage
-envault
-enveil
-envelop
-envelope
-enveloper
-envelopment
-envenom
-envenomation
-enverdure
-envermeil
-enviable
-enviableness
-enviably
-envied
-envier
-envineyard
-envious
-enviously
-enviousness
-environ
-environage
-environal
-environic
-environment
-environmental
-environmentalism
-environmentalist
-environmentally
-environs
-envisage
-envisagement
-envision
-envolume
-envoy
-envoyship
-envy
-envying
-envyingly
-enwallow
-enwiden
-enwind
-enwisen
-enwoman
-enwomb
-enwood
-enworthed
-enwound
-enwrap
-enwrapment
-enwreathe
-enwrite
-enwrought
-enzone
-enzootic
-enzooty
-enzym
-enzymatic
-enzyme
-enzymic
-enzymically
-enzymologist
-enzymology
-enzymolysis
-enzymolytic
-enzymosis
-enzymotic
-eoan
-Eoanthropus
-Eocarboniferous
-Eocene
-Eodevonian
-Eogaea
-Eogaean
-Eoghanacht
-Eohippus
-eolation
-eolith
-eolithic
-Eomecon
-eon
-eonism
-Eopalaeozoic
-Eopaleozoic
-eophyte
-eophytic
-eophyton
-eorhyolite
-eosate
-Eosaurus
-eoside
-eosin
-eosinate
-eosinic
-eosinoblast
-eosinophile
-eosinophilia
-eosinophilic
-eosinophilous
-eosphorite
-Eozoic
-eozoon
-eozoonal
-epacmaic
-epacme
-epacrid
-Epacridaceae
-epacridaceous
-Epacris
-epact
-epactal
-epagoge
-epagogic
-epagomenae
-epagomenal
-epagomenic
-epagomenous
-epaleaceous
-epalpate
-epanadiplosis
-Epanagoge
-epanalepsis
-epanaleptic
-epanaphora
-epanaphoral
-epanastrophe
-epanisognathism
-epanisognathous
-epanodos
-epanody
-Epanorthidae
-epanorthosis
-epanorthotic
-epanthous
-epapillate
-epappose
-eparch
-eparchate
-Eparchean
-eparchial
-eparchy
-eparcuale
-eparterial
-epaule
-epaulement
-epaulet
-epauleted
-epauletted
-epauliere
-epaxial
-epaxially
-epedaphic
-epee
-epeeist
-Epeira
-epeiric
-epeirid
-Epeiridae
-epeirogenesis
-epeirogenetic
-epeirogenic
-epeirogeny
-epeisodion
-epembryonic
-epencephal
-epencephalic
-epencephalon
-ependyma
-ependymal
-ependyme
-ependymitis
-ependymoma
-ependytes
-epenthesis
-epenthesize
-epenthetic
-epephragmal
-epepophysial
-epepophysis
-epergne
-eperotesis
-Eperua
-epexegesis
-epexegetic
-epexegetical
-epexegetically
-epha
-ephah
-epharmonic
-epharmony
-ephebe
-ephebeion
-ephebeum
-ephebic
-ephebos
-ephebus
-ephectic
-Ephedra
-Ephedraceae
-ephedrine
-ephelcystic
-ephelis
-Ephemera
-ephemera
-ephemerae
-ephemeral
-ephemerality
-ephemerally
-ephemeralness
-ephemeran
-ephemerid
-Ephemerida
-Ephemeridae
-ephemerides
-ephemeris
-ephemerist
-ephemeromorph
-ephemeromorphic
-ephemeron
-Ephemeroptera
-ephemerous
-Ephesian
-Ephesine
-ephetae
-ephete
-ephetic
-ephialtes
-ephidrosis
-ephippial
-ephippium
-ephod
-ephor
-ephoral
-ephoralty
-ephorate
-ephoric
-ephorship
-ephorus
-ephphatha
-Ephraim
-Ephraimite
-Ephraimitic
-Ephraimitish
-Ephraitic
-Ephrathite
-Ephthalite
-Ephthianura
-ephthianure
-Ephydra
-ephydriad
-ephydrid
-Ephydridae
-ephymnium
-ephyra
-ephyrula
-epibasal
-Epibaterium
-epibatholithic
-epibenthic
-epibenthos
-epiblast
-epiblastema
-epiblastic
-epiblema
-epibole
-epibolic
-epibolism
-epiboly
-epiboulangerite
-epibranchial
-epic
-epical
-epically
-epicalyx
-epicanthic
-epicanthus
-epicardia
-epicardiac
-epicardial
-epicardium
-epicarid
-epicaridan
-Epicaridea
-Epicarides
-epicarp
-Epicauta
-epicede
-epicedial
-epicedian
-epicedium
-epicele
-epicene
-epicenism
-epicenity
-epicenter
-epicentral
-epicentrum
-Epiceratodus
-epicerebral
-epicheirema
-epichil
-epichile
-epichilium
-epichindrotic
-epichirema
-epichondrosis
-epichordal
-epichorial
-epichoric
-epichorion
-epichoristic
-Epichristian
-epicism
-epicist
-epiclastic
-epicleidian
-epicleidium
-epiclesis
-epiclidal
-epiclinal
-epicly
-epicnemial
-Epicoela
-epicoelar
-epicoele
-epicoelia
-epicoeliac
-epicoelian
-epicoeloma
-epicoelous
-epicolic
-epicondylar
-epicondyle
-epicondylian
-epicondylic
-epicontinental
-epicoracohumeral
-epicoracoid
-epicoracoidal
-epicormic
-epicorolline
-epicortical
-epicostal
-epicotyl
-epicotyleal
-epicotyledonary
-epicranial
-epicranium
-epicranius
-Epicrates
-epicrisis
-epicritic
-epicrystalline
-Epictetian
-epicure
-Epicurean
-Epicureanism
-epicurish
-epicurishly
-Epicurism
-Epicurize
-epicycle
-epicyclic
-epicyclical
-epicycloid
-epicycloidal
-epicyemate
-epicyesis
-epicystotomy
-epicyte
-epideictic
-epideictical
-epideistic
-epidemic
-epidemical
-epidemically
-epidemicalness
-epidemicity
-epidemiographist
-epidemiography
-epidemiological
-epidemiologist
-epidemiology
-epidemy
-epidendral
-epidendric
-Epidendron
-Epidendrum
-epiderm
-epiderma
-epidermal
-epidermatic
-epidermatoid
-epidermatous
-epidermic
-epidermical
-epidermically
-epidermidalization
-epidermis
-epidermization
-epidermoid
-epidermoidal
-epidermolysis
-epidermomycosis
-Epidermophyton
-epidermophytosis
-epidermose
-epidermous
-epidesmine
-epidialogue
-epidiascope
-epidiascopic
-epidictic
-epidictical
-epididymal
-epididymectomy
-epididymis
-epididymite
-epididymitis
-epididymodeferentectomy
-epididymodeferential
-epididymovasostomy
-epidiorite
-epidiorthosis
-epidosite
-epidote
-epidotic
-epidotiferous
-epidotization
-epidural
-epidymides
-epifascial
-epifocal
-epifolliculitis
-Epigaea
-epigamic
-epigaster
-epigastraeum
-epigastral
-epigastrial
-epigastric
-epigastrical
-epigastriocele
-epigastrium
-epigastrocele
-epigeal
-epigean
-epigeic
-epigene
-epigenesis
-epigenesist
-epigenetic
-epigenetically
-epigenic
-epigenist
-epigenous
-epigeous
-epiglottal
-epiglottic
-epiglottidean
-epiglottiditis
-epiglottis
-epiglottitis
-epignathous
-epigonal
-epigonation
-epigone
-Epigoni
-epigonic
-Epigonichthyidae
-Epigonichthys
-epigonium
-epigonos
-epigonous
-Epigonus
-epigram
-epigrammatic
-epigrammatical
-epigrammatically
-epigrammatism
-epigrammatist
-epigrammatize
-epigrammatizer
-epigraph
-epigrapher
-epigraphic
-epigraphical
-epigraphically
-epigraphist
-epigraphy
-epiguanine
-epigyne
-epigynous
-epigynum
-epigyny
-Epihippus
-epihyal
-epihydric
-epihydrinic
-epikeia
-epiklesis
-Epikouros
-epilabrum
-Epilachna
-Epilachnides
-epilamellar
-epilaryngeal
-epilate
-epilation
-epilatory
-epilegomenon
-epilemma
-epilemmal
-epilepsy
-epileptic
-epileptically
-epileptiform
-epileptogenic
-epileptogenous
-epileptoid
-epileptologist
-epileptology
-epilimnion
-epilobe
-Epilobiaceae
-Epilobium
-epilogation
-epilogic
-epilogical
-epilogist
-epilogistic
-epilogize
-epilogue
-Epimachinae
-epimacus
-epimandibular
-epimanikia
-Epimedium
-Epimenidean
-epimer
-epimeral
-epimere
-epimeric
-epimeride
-epimerite
-epimeritic
-epimeron
-epimerum
-epimorphic
-epimorphosis
-epimysium
-epimyth
-epinaos
-epinastic
-epinastically
-epinasty
-epineolithic
-Epinephelidae
-Epinephelus
-epinephrine
-epinette
-epineural
-epineurial
-epineurium
-epinglette
-epinicial
-epinician
-epinicion
-epinine
-epiopticon
-epiotic
-Epipactis
-epipaleolithic
-epiparasite
-epiparodos
-epipastic
-epiperipheral
-epipetalous
-epiphanous
-Epiphany
-epipharyngeal
-epipharynx
-Epiphegus
-epiphenomenal
-epiphenomenalism
-epiphenomenalist
-epiphenomenon
-epiphloedal
-epiphloedic
-epiphloeum
-epiphonema
-epiphora
-epiphragm
-epiphylline
-epiphyllous
-Epiphyllum
-epiphysary
-epiphyseal
-epiphyseolysis
-epiphysial
-epiphysis
-epiphysitis
-epiphytal
-epiphyte
-epiphytic
-epiphytical
-epiphytically
-epiphytism
-epiphytology
-epiphytotic
-epiphytous
-epipial
-epiplankton
-epiplanktonic
-epiplasm
-epiplasmic
-epiplastral
-epiplastron
-epiplectic
-epipleura
-epipleural
-epiplexis
-epiploce
-epiplocele
-epiploic
-epiploitis
-epiploon
-epiplopexy
-epipodial
-epipodiale
-epipodite
-epipoditic
-epipodium
-epipolic
-epipolism
-epipolize
-epiprecoracoid
-Epipsychidion
-epipteric
-epipterous
-epipterygoid
-epipubic
-epipubis
-epirhizous
-epirogenic
-epirogeny
-Epirote
-Epirotic
-epirotulian
-epirrhema
-epirrhematic
-epirrheme
-episarcine
-episcenium
-episclera
-episcleral
-episcleritis
-episcopable
-episcopacy
-Episcopal
-episcopal
-episcopalian
-Episcopalianism
-Episcopalianize
-episcopalism
-episcopality
-Episcopally
-episcopally
-episcopate
-episcopature
-episcope
-episcopicide
-episcopization
-episcopize
-episcopolatry
-episcotister
-episematic
-episepalous
-episiocele
-episiohematoma
-episioplasty
-episiorrhagia
-episiorrhaphy
-episiostenosis
-episiotomy
-episkeletal
-episkotister
-episodal
-episode
-episodial
-episodic
-episodical
-episodically
-epispadiac
-epispadias
-epispastic
-episperm
-epispermic
-epispinal
-episplenitis
-episporangium
-epispore
-episporium
-epistapedial
-epistasis
-epistatic
-epistaxis
-epistemic
-epistemolog
-epistemological
-epistemologically
-epistemologist
-epistemology
-epistemonic
-epistemonical
-epistemophilia
-epistemophiliac
-epistemophilic
-episternal
-episternalia
-episternite
-episternum
-epistilbite
-epistlar
-epistle
-epistler
-epistolarian
-epistolarily
-epistolary
-epistolatory
-epistoler
-epistolet
-epistolic
-epistolical
-epistolist
-epistolizable
-epistolization
-epistolize
-epistolizer
-epistolographer
-epistolographic
-epistolographist
-epistolography
-epistoma
-epistomal
-epistome
-epistomian
-epistroma
-epistrophe
-epistropheal
-epistropheus
-epistrophic
-epistrophy
-epistylar
-epistyle
-Epistylis
-episyllogism
-episynaloephe
-episynthetic
-episyntheton
-epitactic
-epitaph
-epitapher
-epitaphial
-epitaphian
-epitaphic
-epitaphical
-epitaphist
-epitaphize
-epitaphless
-epitasis
-epitela
-epitendineum
-epitenon
-epithalamia
-epithalamial
-epithalamiast
-epithalamic
-epithalamion
-epithalamium
-epithalamize
-epithalamus
-epithalamy
-epithalline
-epitheca
-epithecal
-epithecate
-epithecium
-epithelia
-epithelial
-epithelioblastoma
-epithelioceptor
-epitheliogenetic
-epithelioglandular
-epithelioid
-epitheliolysin
-epitheliolysis
-epitheliolytic
-epithelioma
-epitheliomatous
-epitheliomuscular
-epitheliosis
-epitheliotoxin
-epithelium
-epithelization
-epithelize
-epitheloid
-epithem
-epithesis
-epithet
-epithetic
-epithetical
-epithetically
-epithetician
-epithetize
-epitheton
-epithumetic
-epithyme
-epithymetic
-epithymetical
-epitimesis
-epitoke
-epitomator
-epitomatory
-epitome
-epitomic
-epitomical
-epitomically
-epitomist
-epitomization
-epitomize
-epitomizer
-epitonic
-Epitoniidae
-epitonion
-Epitonium
-epitoxoid
-epitrachelion
-epitrichial
-epitrichium
-epitrite
-epitritic
-epitrochlea
-epitrochlear
-epitrochoid
-epitrochoidal
-epitrope
-epitrophic
-epitrophy
-epituberculosis
-epituberculous
-epitympanic
-epitympanum
-epityphlitis
-epityphlon
-epiural
-epivalve
-epixylous
-epizeuxis
-Epizoa
-epizoa
-epizoal
-epizoan
-epizoarian
-epizoic
-epizoicide
-epizoon
-epizootic
-epizootiology
-epoch
-epocha
-epochal
-epochally
-epochism
-epochist
-epode
-epodic
-epollicate
-Epomophorus
-eponychium
-eponym
-eponymic
-eponymism
-eponymist
-eponymize
-eponymous
-eponymus
-eponymy
-epoophoron
-epopee
-epopoean
-epopoeia
-epopoeist
-epopt
-epoptes
-epoptic
-epoptist
-epornitic
-epornitically
-epos
-Eppie
-Eppy
-Eproboscidea
-epruinose
-epsilon
-Epsom
-epsomite
-Eptatretidae
-Eptatretus
-epulary
-epulation
-epulis
-epulo
-epuloid
-epulosis
-epulotic
-epupillate
-epural
-epurate
-epuration
-epyllion
-equability
-equable
-equableness
-equably
-equaeval
-equal
-equalable
-equaling
-equalist
-equalitarian
-equalitarianism
-equality
-equalization
-equalize
-equalizer
-equalizing
-equalling
-equally
-equalness
-equangular
-equanimity
-equanimous
-equanimously
-equanimousness
-equant
-equatable
-equate
-equation
-equational
-equationally
-equationism
-equationist
-equator
-equatorial
-equatorially
-equatorward
-equatorwards
-equerry
-equerryship
-equestrial
-equestrian
-equestrianism
-equestrianize
-equestrianship
-equestrienne
-equianchorate
-equiangle
-equiangular
-equiangularity
-equianharmonic
-equiarticulate
-equiatomic
-equiaxed
-equiaxial
-equibalance
-equibiradiate
-equicellular
-equichangeable
-equicohesive
-equiconvex
-equicostate
-equicrural
-equicurve
-equid
-equidense
-equidensity
-equidiagonal
-equidifferent
-equidimensional
-equidistance
-equidistant
-equidistantial
-equidistantly
-equidistribution
-equidiurnal
-equidivision
-equidominant
-equidurable
-equielliptical
-equiexcellency
-equiform
-equiformal
-equiformity
-equiglacial
-equigranular
-equijacent
-equilateral
-equilaterally
-equilibrant
-equilibrate
-equilibration
-equilibrative
-equilibrator
-equilibratory
-equilibria
-equilibrial
-equilibriate
-equilibrio
-equilibrious
-equilibrist
-equilibristat
-equilibristic
-equilibrity
-equilibrium
-equilibrize
-equilobate
-equilobed
-equilocation
-equilucent
-equimodal
-equimolar
-equimolecular
-equimomental
-equimultiple
-equinate
-equine
-equinecessary
-equinely
-equinia
-equinity
-equinoctial
-equinoctially
-equinovarus
-equinox
-equinumerally
-equinus
-equiomnipotent
-equip
-equipaga
-equipage
-equiparant
-equiparate
-equiparation
-equipartile
-equipartisan
-equipartition
-equiped
-equipedal
-equiperiodic
-equipluve
-equipment
-equipoise
-equipollence
-equipollency
-equipollent
-equipollently
-equipollentness
-equiponderance
-equiponderancy
-equiponderant
-equiponderate
-equiponderation
-equipostile
-equipotent
-equipotential
-equipotentiality
-equipper
-equiprobabilism
-equiprobabilist
-equiprobability
-equiproducing
-equiproportional
-equiproportionality
-equiradial
-equiradiate
-equiradical
-equirotal
-equisegmented
-Equisetaceae
-equisetaceous
-Equisetales
-equisetic
-Equisetum
-equisided
-equisignal
-equisized
-equison
-equisonance
-equisonant
-equispaced
-equispatial
-equisufficiency
-equisurface
-equitable
-equitableness
-equitably
-equitangential
-equitant
-equitation
-equitative
-equitemporal
-equitemporaneous
-equites
-equitist
-equitriangular
-equity
-equivalence
-equivalenced
-equivalency
-equivalent
-equivalently
-equivaliant
-equivalue
-equivaluer
-equivalve
-equivalved
-equivalvular
-equivelocity
-equivocacy
-equivocal
-equivocality
-equivocally
-equivocalness
-equivocate
-equivocatingly
-equivocation
-equivocator
-equivocatory
-equivoluminal
-equivoque
-equivorous
-equivote
-equoid
-equoidean
-equuleus
-Equus
-er
-era
-erade
-eradiate
-eradiation
-eradicable
-eradicant
-eradicate
-eradication
-eradicative
-eradicator
-eradicatory
-eradiculose
-Eragrostis
-eral
-eranist
-Eranthemum
-Eranthis
-erasable
-erase
-erased
-erasement
-eraser
-erasion
-Erasmian
-Erasmus
-Erastian
-Erastianism
-Erastianize
-Erastus
-erasure
-Erava
-erbia
-erbium
-erd
-erdvark
-ere
-Erechtheum
-Erechtheus
-Erechtites
-erect
-erectable
-erecter
-erectile
-erectility
-erecting
-erection
-erective
-erectly
-erectness
-erectopatent
-erector
-erelong
-eremacausis
-Eremian
-eremic
-eremital
-eremite
-eremiteship
-eremitic
-eremitical
-eremitish
-eremitism
-Eremochaeta
-eremochaetous
-eremology
-eremophyte
-Eremopteris
-Eremurus
-erenach
-erenow
-erepsin
-erept
-ereptase
-ereptic
-ereption
-erethic
-erethisia
-erethism
-erethismic
-erethistic
-erethitic
-Erethizon
-Erethizontidae
-Eretrian
-erewhile
-erewhiles
-erg
-ergal
-ergamine
-Ergane
-ergasia
-ergasterion
-ergastic
-ergastoplasm
-ergastoplasmic
-ergastulum
-ergatandromorph
-ergatandromorphic
-ergatandrous
-ergatandry
-ergates
-ergatocracy
-ergatocrat
-ergatogyne
-ergatogynous
-ergatogyny
-ergatoid
-ergatomorph
-ergatomorphic
-ergatomorphism
-ergmeter
-ergodic
-ergogram
-ergograph
-ergographic
-ergoism
-ergology
-ergomaniac
-ergometer
-ergometric
-ergometrine
-ergon
-ergonovine
-ergophile
-ergophobia
-ergophobiac
-ergoplasm
-ergostat
-ergosterin
-ergosterol
-ergot
-ergotamine
-ergotaminine
-ergoted
-ergothioneine
-ergotic
-ergotin
-ergotinine
-ergotism
-ergotist
-ergotization
-ergotize
-ergotoxin
-ergotoxine
-ergusia
-eria
-Erian
-Erianthus
-Eric
-eric
-Erica
-Ericaceae
-ericaceous
-ericad
-erical
-Ericales
-ericetal
-ericeticolous
-ericetum
-erichthus
-erichtoid
-ericineous
-ericius
-Erick
-ericoid
-ericolin
-ericophyte
-Eridanid
-Erie
-Erigenia
-Erigeron
-erigible
-Eriglossa
-eriglossate
-Erik
-erika
-erikite
-Erinaceidae
-erinaceous
-Erinaceus
-erineum
-erinite
-Erinize
-erinose
-Eriobotrya
-Eriocaulaceae
-eriocaulaceous
-Eriocaulon
-Eriocomi
-Eriodendron
-Eriodictyon
-erioglaucine
-Eriogonum
-eriometer
-erionite
-Eriophorum
-Eriophyes
-Eriophyidae
-eriophyllous
-Eriosoma
-Eriphyle
-Eristalis
-eristic
-eristical
-eristically
-Erithacus
-Eritrean
-erizo
-erlking
-Erma
-Ermanaric
-Ermani
-Ermanrich
-ermelin
-ermine
-ermined
-erminee
-ermines
-erminites
-erminois
-erne
-Ernest
-Ernestine
-Ernie
-Ernst
-erode
-eroded
-erodent
-erodible
-Erodium
-erogeneity
-erogenesis
-erogenetic
-erogenic
-erogenous
-erogeny
-Eros
-eros
-erose
-erosely
-erosible
-erosion
-erosional
-erosionist
-erosive
-erostrate
-eroteme
-erotesis
-erotetic
-erotic
-erotica
-erotical
-erotically
-eroticism
-eroticize
-eroticomania
-erotism
-erotogenesis
-erotogenetic
-erotogenic
-erotogenicity
-erotomania
-erotomaniac
-erotopath
-erotopathic
-erotopathy
-Erotylidae
-Erpetoichthys
-erpetologist
-err
-errability
-errable
-errableness
-errabund
-errancy
-errand
-errant
-Errantia
-errantly
-errantness
-errantry
-errata
-erratic
-erratical
-erratically
-erraticalness
-erraticism
-erraticness
-erratum
-errhine
-erring
-erringly
-errite
-erroneous
-erroneously
-erroneousness
-error
-errorful
-errorist
-errorless
-ers
-Ersar
-ersatz
-Erse
-Ertebolle
-erth
-erthen
-erthling
-erthly
-erubescence
-erubescent
-erubescite
-eruc
-Eruca
-eruca
-erucic
-eruciform
-erucin
-erucivorous
-eruct
-eructance
-eructation
-eructative
-eruction
-erudit
-erudite
-eruditely
-eruditeness
-eruditical
-erudition
-eruditional
-eruditionist
-erugate
-erugation
-erugatory
-erumpent
-erupt
-eruption
-eruptional
-eruptive
-eruptively
-eruptiveness
-eruptivity
-ervenholder
-Ervipiame
-Ervum
-Erwin
-Erwinia
-eryhtrism
-Erymanthian
-Eryngium
-eryngo
-Eryon
-Eryops
-Erysibe
-Erysimum
-erysipelas
-erysipelatoid
-erysipelatous
-erysipeloid
-Erysipelothrix
-erysipelous
-Erysiphaceae
-Erysiphe
-Erythea
-erythema
-erythematic
-erythematous
-erythemic
-Erythraea
-Erythraean
-Erythraeidae
-erythrasma
-erythrean
-erythremia
-erythremomelalgia
-erythrene
-erythrin
-Erythrina
-erythrine
-Erythrinidae
-Erythrinus
-erythrismal
-erythristic
-erythrite
-erythritic
-erythritol
-erythroblast
-erythroblastic
-erythroblastosis
-erythrocarpous
-erythrocatalysis
-Erythrochaete
-erythrochroic
-erythrochroism
-erythroclasis
-erythroclastic
-erythrocyte
-erythrocytic
-erythrocytoblast
-erythrocytolysin
-erythrocytolysis
-erythrocytolytic
-erythrocytometer
-erythrocytorrhexis
-erythrocytoschisis
-erythrocytosis
-erythrodegenerative
-erythrodermia
-erythrodextrin
-erythrogenesis
-erythrogenic
-erythroglucin
-erythrogonium
-erythroid
-erythrol
-erythrolein
-erythrolitmin
-erythrolysin
-erythrolysis
-erythrolytic
-erythromelalgia
-erythron
-erythroneocytosis
-Erythronium
-erythronium
-erythropenia
-erythrophage
-erythrophagous
-erythrophilous
-erythrophleine
-erythrophobia
-erythrophore
-erythrophyll
-erythrophyllin
-erythropia
-erythroplastid
-erythropoiesis
-erythropoietic
-erythropsia
-erythropsin
-erythrorrhexis
-erythroscope
-erythrose
-erythrosiderite
-erythrosin
-erythrosinophile
-erythrosis
-Erythroxylaceae
-erythroxylaceous
-erythroxyline
-Erythroxylon
-Erythroxylum
-erythrozincite
-erythrozyme
-erythrulose
-Eryx
-es
-esca
-escadrille
-escalade
-escalader
-escalado
-escalan
-escalate
-Escalator
-escalator
-escalin
-Escallonia
-Escalloniaceae
-escalloniaceous
-escalop
-escaloped
-escambio
-escambron
-escapable
-escapade
-escapage
-escape
-escapee
-escapeful
-escapeless
-escapement
-escaper
-escapingly
-escapism
-escapist
-escarbuncle
-escargatoire
-escarole
-escarp
-escarpment
-eschalot
-eschar
-eschara
-escharine
-escharoid
-escharotic
-eschatocol
-eschatological
-eschatologist
-eschatology
-escheat
-escheatable
-escheatage
-escheatment
-escheator
-escheatorship
-Escherichia
-eschew
-eschewal
-eschewance
-eschewer
-Eschscholtzia
-eschynite
-esclavage
-escoba
-escobadura
-escobilla
-escobita
-escolar
-esconson
-escopette
-Escorial
-escort
-escortage
-escortee
-escortment
-escribe
-escritoire
-escritorial
-escrol
-escropulo
-escrow
-escruage
-escudo
-Esculapian
-esculent
-esculetin
-esculin
-escutcheon
-escutcheoned
-escutellate
-esdragol
-Esdras
-Esebrias
-esemplastic
-esemplasy
-eseptate
-esere
-eserine
-esexual
-eshin
-esiphonal
-esker
-Eskimauan
-Eskimo
-Eskimoic
-Eskimoid
-Eskimoized
-Eskualdun
-Eskuara
-Esmeralda
-Esmeraldan
-esmeraldite
-esne
-esoanhydride
-esocataphoria
-Esocidae
-esociform
-esocyclic
-esodic
-esoenteritis
-esoethmoiditis
-esogastritis
-esonarthex
-esoneural
-esophagal
-esophagalgia
-esophageal
-esophagean
-esophagectasia
-esophagectomy
-esophagi
-esophagism
-esophagismus
-esophagitis
-esophago
-esophagocele
-esophagodynia
-esophagogastroscopy
-esophagogastrostomy
-esophagomalacia
-esophagometer
-esophagomycosis
-esophagopathy
-esophagoplasty
-esophagoplegia
-esophagoplication
-esophagoptosis
-esophagorrhagia
-esophagoscope
-esophagoscopy
-esophagospasm
-esophagostenosis
-esophagostomy
-esophagotome
-esophagotomy
-esophagus
-esophoria
-esophoric
-Esopus
-esoteric
-esoterica
-esoterical
-esoterically
-esotericism
-esotericist
-esoterics
-esoterism
-esoterist
-esoterize
-esotery
-esothyropexy
-esotrope
-esotropia
-esotropic
-Esox
-espacement
-espadon
-espalier
-espantoon
-esparcet
-esparsette
-esparto
-espathate
-espave
-especial
-especially
-especialness
-esperance
-Esperantic
-Esperantidist
-Esperantido
-Esperantism
-Esperantist
-Esperanto
-espial
-espichellite
-espier
-espinal
-espingole
-espinillo
-espino
-espionage
-esplanade
-esplees
-esponton
-espousal
-espouse
-espousement
-espouser
-Espriella
-espringal
-espundia
-espy
-esquamate
-esquamulose
-Esquiline
-esquire
-esquirearchy
-esquiredom
-esquireship
-ess
-essang
-essay
-essayer
-essayette
-essayical
-essayish
-essayism
-essayist
-essayistic
-essayistical
-essaylet
-essed
-Essedones
-Esselen
-Esselenian
-essence
-essency
-Essene
-Essenian
-Essenianism
-Essenic
-Essenical
-Essenis
-Essenism
-Essenize
-essentia
-essential
-essentialism
-essentialist
-essentiality
-essentialize
-essentially
-essentialness
-essenwood
-Essex
-essexite
-Essie
-essling
-essoin
-essoinee
-essoiner
-essoinment
-essonite
-essorant
-establish
-establishable
-established
-establisher
-establishment
-establishmentarian
-establishmentarianism
-establishmentism
-estacade
-estadal
-estadio
-estado
-estafette
-estafetted
-estamene
-estamp
-estampage
-estampede
-estampedero
-estate
-estatesman
-esteem
-esteemable
-esteemer
-Estella
-ester
-esterase
-esterellite
-esteriferous
-esterification
-esterify
-esterization
-esterize
-esterlin
-esterling
-estevin
-Esth
-Esthacyte
-esthematology
-Esther
-Estheria
-estherian
-Estheriidae
-esthesia
-esthesio
-esthesioblast
-esthesiogen
-esthesiogenic
-esthesiogeny
-esthesiography
-esthesiology
-esthesiometer
-esthesiometric
-esthesiometry
-esthesioneurosis
-esthesiophysiology
-esthesis
-esthetology
-esthetophore
-esthiomene
-estimable
-estimableness
-estimably
-estimate
-estimatingly
-estimation
-estimative
-estimator
-estipulate
-estivage
-estival
-estivate
-estivation
-estivator
-estmark
-estoc
-estoile
-Estonian
-estop
-estoppage
-estoppel
-Estotiland
-estovers
-estrade
-estradiol
-estradiot
-estragole
-estrange
-estrangedness
-estrangement
-estranger
-estrapade
-estray
-estre
-estreat
-estrepe
-estrepement
-estriate
-estriche
-estrin
-estriol
-estrogen
-estrogenic
-estrone
-estrous
-estrual
-estruate
-estruation
-estuarial
-estuarine
-estuary
-estufa
-estuous
-estus
-esugarization
-esurience
-esurient
-esuriently
-eta
-etaballi
-etacism
-etacist
-etalon
-Etamin
-etamine
-etch
-Etchareottine
-etcher
-Etchimin
-etching
-Eteoclus
-Eteocretes
-Eteocreton
-eternal
-eternalism
-eternalist
-eternalization
-eternalize
-eternally
-eternalness
-eternity
-eternization
-eternize
-etesian
-ethal
-ethaldehyde
-Ethan
-ethanal
-ethanamide
-ethane
-ethanedial
-ethanediol
-ethanedithiol
-ethanethial
-ethanethiol
-Ethanim
-ethanol
-ethanolamine
-ethanolysis
-ethanoyl
-Ethel
-ethel
-ethene
-Etheneldeli
-ethenic
-ethenoid
-ethenoidal
-ethenol
-ethenyl
-Etheostoma
-Etheostomidae
-Etheostominae
-etheostomoid
-ether
-etherate
-ethereal
-etherealism
-ethereality
-etherealization
-etherealize
-ethereally
-etherealness
-etherean
-ethered
-ethereous
-Etheria
-etheric
-etherification
-etheriform
-etherify
-Etheriidae
-etherin
-etherion
-etherism
-etherization
-etherize
-etherizer
-etherolate
-etherous
-ethic
-ethical
-ethicalism
-ethicality
-ethically
-ethicalness
-ethician
-ethicism
-ethicist
-ethicize
-ethicoaesthetic
-ethicophysical
-ethicopolitical
-ethicoreligious
-ethicosocial
-ethics
-ethid
-ethide
-ethidene
-ethine
-ethiodide
-ethionic
-Ethiop
-Ethiopia
-Ethiopian
-Ethiopic
-ethiops
-ethmofrontal
-ethmoid
-ethmoidal
-ethmoiditis
-ethmolachrymal
-ethmolith
-ethmomaxillary
-ethmonasal
-ethmopalatal
-ethmopalatine
-ethmophysal
-ethmopresphenoidal
-ethmosphenoid
-ethmosphenoidal
-ethmoturbinal
-ethmoturbinate
-ethmovomer
-ethmovomerine
-ethmyphitis
-ethnal
-ethnarch
-ethnarchy
-ethnic
-ethnical
-ethnically
-ethnicism
-ethnicist
-ethnicize
-ethnicon
-ethnize
-ethnobiological
-ethnobiology
-ethnobotanic
-ethnobotanical
-ethnobotanist
-ethnobotany
-ethnocentric
-ethnocentrism
-ethnocracy
-ethnodicy
-ethnoflora
-ethnogenic
-ethnogeny
-ethnogeographer
-ethnogeographic
-ethnogeographical
-ethnogeographically
-ethnogeography
-ethnographer
-ethnographic
-ethnographical
-ethnographically
-ethnographist
-ethnography
-ethnologer
-ethnologic
-ethnological
-ethnologically
-ethnologist
-ethnology
-ethnomaniac
-ethnopsychic
-ethnopsychological
-ethnopsychology
-ethnos
-ethnotechnics
-ethnotechnography
-ethnozoological
-ethnozoology
-ethography
-etholide
-ethologic
-ethological
-ethology
-ethonomic
-ethonomics
-ethopoeia
-ethos
-ethoxide
-ethoxycaffeine
-ethoxyl
-ethrog
-ethyl
-ethylamide
-ethylamine
-ethylate
-ethylation
-ethylene
-ethylenediamine
-ethylenic
-ethylenimine
-ethylenoid
-ethylhydrocupreine
-ethylic
-ethylidene
-ethylidyne
-ethylin
-ethylmorphine
-ethylsulphuric
-ethyne
-ethynyl
-etiogenic
-etiolate
-etiolation
-etiolin
-etiolize
-etiological
-etiologically
-etiologist
-etiologue
-etiology
-etiophyllin
-etioporphyrin
-etiotropic
-etiotropically
-etiquette
-etiquettical
-etna
-Etnean
-Etonian
-Etrurian
-Etruscan
-Etruscologist
-Etruscology
-Etta
-Ettarre
-ettle
-etua
-etude
-etui
-etym
-etymic
-etymography
-etymologer
-etymologic
-etymological
-etymologically
-etymologicon
-etymologist
-etymologization
-etymologize
-etymology
-etymon
-etymonic
-etypic
-etypical
-etypically
-eu
-Euahlayi
-euangiotic
-Euascomycetes
-euaster
-Eubacteriales
-eubacterium
-Eubasidii
-Euboean
-Euboic
-Eubranchipus
-eucaine
-eucairite
-eucalypt
-eucalypteol
-eucalyptian
-eucalyptic
-eucalyptography
-eucalyptol
-eucalyptole
-Eucalyptus
-eucalyptus
-Eucarida
-eucatropine
-eucephalous
-Eucharis
-Eucharist
-eucharistial
-eucharistic
-eucharistical
-Eucharistically
-eucharistically
-eucharistize
-Eucharitidae
-Euchite
-Euchlaena
-euchlorhydria
-euchloric
-euchlorine
-Euchlorophyceae
-euchological
-euchologion
-euchology
-Euchorda
-euchre
-euchred
-euchroic
-euchroite
-euchromatic
-euchromatin
-euchrome
-euchromosome
-euchrone
-Eucirripedia
-euclase
-Euclea
-Eucleidae
-Euclid
-Euclidean
-Euclideanism
-Eucnemidae
-eucolite
-Eucommia
-Eucommiaceae
-eucone
-euconic
-Euconjugatae
-Eucopepoda
-Eucosia
-eucosmid
-Eucosmidae
-eucrasia
-eucrasite
-eucrasy
-eucrite
-Eucryphia
-Eucryphiaceae
-eucryphiaceous
-eucryptite
-eucrystalline
-euctical
-eucyclic
-eudaemon
-eudaemonia
-eudaemonic
-eudaemonical
-eudaemonics
-eudaemonism
-eudaemonist
-eudaemonistic
-eudaemonistical
-eudaemonistically
-eudaemonize
-eudaemony
-eudaimonia
-eudaimonism
-eudaimonist
-Eudemian
-Eudendrium
-Eudeve
-eudiagnostic
-eudialyte
-eudiaphoresis
-eudidymite
-eudiometer
-eudiometric
-eudiometrical
-eudiometrically
-eudiometry
-eudipleural
-Eudist
-Eudora
-Eudorina
-Eudoxian
-Eudromias
-Eudyptes
-Euergetes
-euge
-Eugene
-eugenesic
-eugenesis
-eugenetic
-Eugenia
-eugenic
-eugenical
-eugenically
-eugenicist
-eugenics
-Eugenie
-eugenism
-eugenist
-eugenol
-eugenolate
-eugeny
-Euglandina
-Euglena
-Euglenaceae
-Euglenales
-Euglenida
-Euglenidae
-Euglenineae
-euglenoid
-Euglenoidina
-euglobulin
-eugranitic
-Eugregarinida
-Eugubine
-Eugubium
-euharmonic
-euhedral
-euhemerism
-euhemerist
-euhemeristic
-euhemeristically
-euhemerize
-euhyostylic
-euhyostyly
-euktolite
-eulachon
-Eulalia
-eulalia
-eulamellibranch
-Eulamellibranchia
-Eulamellibranchiata
-Eulima
-Eulimidae
-eulogia
-eulogic
-eulogical
-eulogically
-eulogious
-eulogism
-eulogist
-eulogistic
-eulogistical
-eulogistically
-eulogium
-eulogization
-eulogize
-eulogizer
-eulogy
-eulysite
-eulytine
-eulytite
-Eumenes
-eumenid
-Eumenidae
-Eumenidean
-Eumenides
-eumenorrhea
-eumerism
-eumeristic
-eumerogenesis
-eumerogenetic
-eumeromorph
-eumeromorphic
-eumitosis
-eumitotic
-eumoiriety
-eumoirous
-Eumolpides
-Eumolpus
-eumorphous
-eumycete
-Eumycetes
-eumycetic
-Eunectes
-Eunice
-eunicid
-Eunicidae
-Eunomia
-Eunomian
-Eunomianism
-eunomy
-eunuch
-eunuchal
-eunuchism
-eunuchize
-eunuchoid
-eunuchoidism
-eunuchry
-euomphalid
-Euomphalus
-euonym
-euonymin
-euonymous
-Euonymus
-euonymy
-Euornithes
-euornithic
-Euorthoptera
-euosmite
-euouae
-eupad
-Eupanorthidae
-Eupanorthus
-eupathy
-eupatoriaceous
-eupatorin
-Eupatorium
-eupatory
-eupatrid
-eupatridae
-eupepsia
-eupepsy
-eupeptic
-eupepticism
-eupepticity
-Euphausia
-Euphausiacea
-euphausiid
-Euphausiidae
-Euphemia
-euphemian
-euphemious
-euphemiously
-euphemism
-euphemist
-euphemistic
-euphemistical
-euphemistically
-euphemize
-euphemizer
-euphemous
-euphemy
-euphon
-euphone
-euphonetic
-euphonetics
-euphonia
-euphonic
-euphonical
-euphonically
-euphonicalness
-euphonious
-euphoniously
-euphoniousness
-euphonism
-euphonium
-euphonize
-euphonon
-euphonous
-euphony
-euphonym
-Euphorbia
-Euphorbiaceae
-euphorbiaceous
-euphorbium
-euphoria
-euphoric
-euphory
-Euphrasia
-euphrasy
-Euphratean
-euphroe
-Euphrosyne
-Euphues
-euphuism
-euphuist
-euphuistic
-euphuistical
-euphuistically
-euphuize
-Euphyllopoda
-eupione
-eupittonic
-euplastic
-Euplectella
-Euplexoptera
-Euplocomi
-Euploeinae
-euploid
-euploidy
-eupnea
-Eupolidean
-Eupolyzoa
-eupolyzoan
-Eupomatia
-Eupomatiaceae
-eupractic
-eupraxia
-Euprepia
-Euproctis
-eupsychics
-Euptelea
-Eupterotidae
-eupyrchroite
-eupyrene
-eupyrion
-Eurafric
-Eurafrican
-Euraquilo
-Eurasian
-Eurasianism
-Eurasiatic
-eureka
-eurhodine
-eurhodol
-Eurindic
-Euripidean
-euripus
-eurite
-Euroaquilo
-eurobin
-Euroclydon
-Europa
-Europasian
-European
-Europeanism
-Europeanization
-Europeanize
-Europeanly
-Europeward
-europium
-Europocentric
-Eurus
-Euryalae
-Euryale
-Euryaleae
-euryalean
-Euryalida
-euryalidan
-Euryalus
-eurybathic
-eurybenthic
-eurycephalic
-eurycephalous
-Eurycerotidae
-Euryclea
-Eurydice
-Eurygaea
-Eurygaean
-eurygnathic
-eurygnathism
-eurygnathous
-euryhaline
-Eurylaimi
-Eurylaimidae
-eurylaimoid
-Eurylaimus
-Eurymus
-euryon
-Eurypelma
-Eurypharyngidae
-Eurypharynx
-euryprognathous
-euryprosopic
-eurypterid
-Eurypterida
-eurypteroid
-Eurypteroidea
-Eurypterus
-Eurypyga
-Eurypygae
-Eurypygidae
-eurypylous
-euryscope
-Eurystheus
-eurystomatous
-eurythermal
-eurythermic
-eurythmic
-eurythmical
-eurythmics
-eurythmy
-eurytomid
-Eurytomidae
-Eurytus
-euryzygous
-Euscaro
-Eusebian
-Euselachii
-Euskaldun
-Euskara
-Euskarian
-Euskaric
-Euskera
-eusol
-Euspongia
-eusporangiate
-Eustace
-Eustachian
-eustachium
-Eustathian
-eustatic
-Eusthenopteron
-eustomatous
-eustyle
-Eusuchia
-eusuchian
-eusynchite
-Eutaenia
-eutannin
-eutaxic
-eutaxite
-eutaxitic
-eutaxy
-eutechnic
-eutechnics
-eutectic
-eutectoid
-Euterpe
-Euterpean
-eutexia
-Euthamia
-euthanasia
-euthanasy
-euthenics
-euthenist
-Eutheria
-eutherian
-euthermic
-Euthycomi
-euthycomic
-Euthyneura
-euthyneural
-euthyneurous
-euthytatic
-euthytropic
-eutomous
-eutony
-Eutopia
-Eutopian
-eutrophic
-eutrophy
-eutropic
-eutropous
-Eutychian
-Eutychianism
-euxanthate
-euxanthic
-euxanthone
-euxenite
-Euxine
-Eva
-evacuant
-evacuate
-evacuation
-evacuative
-evacuator
-evacue
-evacuee
-evadable
-evade
-evader
-evadingly
-Evadne
-evagation
-evaginable
-evaginate
-evagination
-evaluable
-evaluate
-evaluation
-evaluative
-evalue
-Evan
-evanesce
-evanescence
-evanescency
-evanescent
-evanescently
-evanescible
-evangel
-evangelary
-evangelian
-evangeliarium
-evangeliary
-evangelical
-evangelicalism
-evangelicality
-evangelically
-evangelicalness
-evangelican
-evangelicism
-evangelicity
-Evangeline
-evangelion
-evangelism
-evangelist
-evangelistarion
-evangelistarium
-evangelistary
-evangelistic
-evangelistically
-evangelistics
-evangelistship
-evangelium
-evangelization
-evangelize
-evangelizer
-Evaniidae
-evanish
-evanishment
-evanition
-evansite
-evaporability
-evaporable
-evaporate
-evaporation
-evaporative
-evaporativity
-evaporator
-evaporimeter
-evaporize
-evaporometer
-evase
-evasible
-evasion
-evasional
-evasive
-evasively
-evasiveness
-Eve
-eve
-Evea
-evechurr
-evection
-evectional
-Evehood
-evejar
-Eveless
-evelight
-Evelina
-Eveline
-evelong
-Evelyn
-even
-evenblush
-evendown
-evener
-evenfall
-evenforth
-evenglow
-evenhanded
-evenhandedly
-evenhandedness
-evening
-evenlight
-evenlong
-evenly
-evenmete
-evenminded
-evenmindedness
-evenness
-evens
-evensong
-event
-eventful
-eventfully
-eventfulness
-eventide
-eventime
-eventless
-eventlessly
-eventlessness
-eventognath
-Eventognathi
-eventognathous
-eventration
-eventual
-eventuality
-eventualize
-eventually
-eventuate
-eventuation
-evenwise
-evenworthy
-eveque
-ever
-Everard
-everbearer
-everbearing
-everbloomer
-everblooming
-everduring
-Everett
-everglade
-evergreen
-evergreenery
-evergreenite
-everlasting
-everlastingly
-everlastingness
-everliving
-evermore
-Evernia
-evernioid
-eversible
-eversion
-eversive
-eversporting
-evert
-evertebral
-Evertebrata
-evertebrate
-evertile
-evertor
-everwhich
-everwho
-every
-everybody
-everyday
-everydayness
-everyhow
-everylike
-Everyman
-everyman
-everyness
-everyone
-everything
-everywhen
-everywhence
-everywhere
-everywhereness
-everywheres
-everywhither
-evestar
-evetide
-eveweed
-evict
-eviction
-evictor
-evidence
-evidencive
-evident
-evidential
-evidentially
-evidentiary
-evidently
-evidentness
-evil
-evildoer
-evilhearted
-evilly
-evilmouthed
-evilness
-evilproof
-evilsayer
-evilspeaker
-evilspeaking
-evilwishing
-evince
-evincement
-evincible
-evincibly
-evincingly
-evincive
-evirate
-eviration
-eviscerate
-evisceration
-evisite
-evitable
-evitate
-evitation
-evittate
-evocable
-evocate
-evocation
-evocative
-evocatively
-evocator
-evocatory
-evocatrix
-Evodia
-evoe
-evoke
-evoker
-evolute
-evolution
-evolutional
-evolutionally
-evolutionary
-evolutionism
-evolutionist
-evolutionize
-evolutive
-evolutoid
-evolvable
-evolve
-evolvement
-evolvent
-evolver
-Evonymus
-evovae
-evulgate
-evulgation
-evulse
-evulsion
-evzone
-ewder
-Ewe
-ewe
-ewelease
-ewer
-ewerer
-ewery
-ewry
-ex
-exacerbate
-exacerbation
-exacerbescence
-exacerbescent
-exact
-exactable
-exacter
-exacting
-exactingly
-exactingness
-exaction
-exactitude
-exactive
-exactiveness
-exactly
-exactment
-exactness
-exactor
-exactress
-exadversum
-exaggerate
-exaggerated
-exaggeratedly
-exaggerating
-exaggeratingly
-exaggeration
-exaggerative
-exaggeratively
-exaggerativeness
-exaggerator
-exaggeratory
-exagitate
-exagitation
-exairesis
-exalate
-exalbuminose
-exalbuminous
-exallotriote
-exalt
-exaltation
-exaltative
-exalted
-exaltedly
-exaltedness
-exalter
-exam
-examen
-examinability
-examinable
-examinant
-examinate
-examination
-examinational
-examinationism
-examinationist
-examinative
-examinator
-examinatorial
-examinatory
-examine
-examinee
-examiner
-examinership
-examining
-examiningly
-example
-exampleless
-exampleship
-exanimate
-exanimation
-exanthem
-exanthema
-exanthematic
-exanthematous
-exappendiculate
-exarate
-exaration
-exarch
-exarchal
-exarchate
-exarchateship
-Exarchic
-Exarchist
-exarchist
-exarchy
-exareolate
-exarillate
-exaristate
-exarteritis
-exarticulate
-exarticulation
-exasperate
-exasperated
-exasperatedly
-exasperater
-exasperating
-exasperatingly
-exasperation
-exasperative
-exaspidean
-Exaudi
-exaugurate
-exauguration
-excalate
-excalation
-excalcarate
-excalceate
-excalceation
-Excalibur
-excamb
-excamber
-excambion
-excandescence
-excandescency
-excandescent
-excantation
-excarnate
-excarnation
-excathedral
-excaudate
-excavate
-excavation
-excavationist
-excavator
-excavatorial
-excavatory
-excave
-excecate
-excecation
-excedent
-exceed
-exceeder
-exceeding
-exceedingly
-exceedingness
-excel
-excelente
-excellence
-excellency
-excellent
-excellently
-excelsin
-Excelsior
-excelsior
-excelsitude
-excentral
-excentric
-excentrical
-excentricity
-except
-exceptant
-excepting
-exception
-exceptionable
-exceptionableness
-exceptionably
-exceptional
-exceptionality
-exceptionally
-exceptionalness
-exceptionary
-exceptionless
-exceptious
-exceptiousness
-exceptive
-exceptively
-exceptiveness
-exceptor
-excerebration
-excerpt
-excerptible
-excerption
-excerptive
-excerptor
-excess
-excessive
-excessively
-excessiveness
-excessman
-exchange
-exchangeability
-exchangeable
-exchangeably
-exchanger
-Exchangite
-Exchequer
-exchequer
-excide
-excipient
-exciple
-Excipulaceae
-excipular
-excipule
-excipuliform
-excipulum
-excircle
-excisable
-excise
-exciseman
-excisemanship
-excision
-excisor
-excitability
-excitable
-excitableness
-excitancy
-excitant
-excitation
-excitative
-excitator
-excitatory
-excite
-excited
-excitedly
-excitedness
-excitement
-exciter
-exciting
-excitingly
-excitive
-excitoglandular
-excitometabolic
-excitomotion
-excitomotor
-excitomotory
-excitomuscular
-excitonutrient
-excitor
-excitory
-excitosecretory
-excitovascular
-exclaim
-exclaimer
-exclaiming
-exclaimingly
-exclamation
-exclamational
-exclamative
-exclamatively
-exclamatorily
-exclamatory
-exclave
-exclosure
-excludable
-exclude
-excluder
-excluding
-excludingly
-exclusion
-exclusionary
-exclusioner
-exclusionism
-exclusionist
-exclusive
-exclusively
-exclusiveness
-exclusivism
-exclusivist
-exclusivity
-exclusory
-Excoecaria
-excogitable
-excogitate
-excogitation
-excogitative
-excogitator
-excommunicable
-excommunicant
-excommunicate
-excommunication
-excommunicative
-excommunicator
-excommunicatory
-exconjugant
-excoriable
-excoriate
-excoriation
-excoriator
-excorticate
-excortication
-excrement
-excremental
-excrementary
-excrementitial
-excrementitious
-excrementitiously
-excrementitiousness
-excrementive
-excresce
-excrescence
-excrescency
-excrescent
-excrescential
-excreta
-excretal
-excrete
-excreter
-excretes
-excretion
-excretionary
-excretitious
-excretive
-excretory
-excriminate
-excruciable
-excruciate
-excruciating
-excruciatingly
-excruciation
-excruciator
-excubant
-excudate
-exculpable
-exculpate
-exculpation
-exculpative
-exculpatorily
-exculpatory
-excurrent
-excurse
-excursion
-excursional
-excursionary
-excursioner
-excursionism
-excursionist
-excursionize
-excursive
-excursively
-excursiveness
-excursory
-excursus
-excurvate
-excurvated
-excurvation
-excurvature
-excurved
-excusability
-excusable
-excusableness
-excusably
-excusal
-excusative
-excusator
-excusatory
-excuse
-excuseful
-excusefully
-excuseless
-excuser
-excusing
-excusingly
-excusive
-excuss
-excyst
-excystation
-excysted
-excystment
-exdelicto
-exdie
-exeat
-execrable
-execrableness
-execrably
-execrate
-execration
-execrative
-execratively
-execrator
-execratory
-executable
-executancy
-executant
-execute
-executed
-executer
-execution
-executional
-executioneering
-executioner
-executioneress
-executionist
-executive
-executively
-executiveness
-executiveship
-executor
-executorial
-executorship
-executory
-executress
-executrices
-executrix
-executrixship
-executry
-exedent
-exedra
-exegeses
-exegesis
-exegesist
-exegete
-exegetic
-exegetical
-exegetically
-exegetics
-exegetist
-exemplar
-exemplaric
-exemplarily
-exemplariness
-exemplarism
-exemplarity
-exemplary
-exemplifiable
-exemplification
-exemplificational
-exemplificative
-exemplificator
-exemplifier
-exemplify
-exempt
-exemptible
-exemptile
-exemption
-exemptionist
-exemptive
-exencephalia
-exencephalic
-exencephalous
-exencephalus
-exendospermic
-exendospermous
-exenterate
-exenteration
-exequatur
-exequial
-exequy
-exercisable
-exercise
-exerciser
-exercitant
-exercitation
-exercitor
-exercitorial
-exercitorian
-exeresis
-exergual
-exergue
-exert
-exertion
-exertionless
-exertive
-exes
-exeunt
-exfiguration
-exfigure
-exfiltration
-exflagellate
-exflagellation
-exflect
-exfodiate
-exfodiation
-exfoliate
-exfoliation
-exfoliative
-exfoliatory
-exgorgitation
-exhalable
-exhalant
-exhalation
-exhalatory
-exhale
-exhaust
-exhausted
-exhaustedly
-exhaustedness
-exhauster
-exhaustibility
-exhaustible
-exhausting
-exhaustingly
-exhaustion
-exhaustive
-exhaustively
-exhaustiveness
-exhaustless
-exhaustlessly
-exhaustlessness
-exheredate
-exheredation
-exhibit
-exhibitable
-exhibitant
-exhibiter
-exhibition
-exhibitional
-exhibitioner
-exhibitionism
-exhibitionist
-exhibitionistic
-exhibitionize
-exhibitive
-exhibitively
-exhibitor
-exhibitorial
-exhibitorship
-exhibitory
-exhilarant
-exhilarate
-exhilarating
-exhilaratingly
-exhilaration
-exhilarative
-exhilarator
-exhilaratory
-exhort
-exhortation
-exhortative
-exhortatively
-exhortator
-exhortatory
-exhorter
-exhortingly
-exhumate
-exhumation
-exhumator
-exhumatory
-exhume
-exhumer
-exigence
-exigency
-exigent
-exigenter
-exigently
-exigible
-exiguity
-exiguous
-exiguously
-exiguousness
-exilarch
-exilarchate
-exile
-exiledom
-exilement
-exiler
-exilian
-exilic
-exility
-eximious
-eximiously
-eximiousness
-exinanite
-exinanition
-exindusiate
-exinguinal
-exist
-existability
-existence
-existent
-existential
-existentialism
-existentialist
-existentialistic
-existentialize
-existentially
-existently
-exister
-existibility
-existible
-existlessness
-exit
-exite
-exition
-exitus
-exlex
-exmeridian
-Exmoor
-exoarteritis
-Exoascaceae
-exoascaceous
-Exoascales
-Exoascus
-Exobasidiaceae
-Exobasidiales
-Exobasidium
-exocannibalism
-exocardia
-exocardiac
-exocardial
-exocarp
-exocataphoria
-exoccipital
-exocentric
-Exochorda
-exochorion
-exoclinal
-exocline
-exocoelar
-exocoele
-exocoelic
-exocoelom
-Exocoetidae
-Exocoetus
-exocolitis
-exocone
-exocrine
-exoculate
-exoculation
-exocyclic
-Exocyclica
-Exocycloida
-exode
-exoderm
-exodermis
-exodic
-exodist
-exodontia
-exodontist
-exodos
-exodromic
-exodromy
-exodus
-exody
-exoenzyme
-exoenzymic
-exoerythrocytic
-exogamic
-exogamous
-exogamy
-exogastric
-exogastrically
-exogastritis
-exogen
-Exogenae
-exogenetic
-exogenic
-exogenous
-exogenously
-exogeny
-exognathion
-exognathite
-Exogonium
-Exogyra
-exolemma
-exometritis
-exomion
-exomis
-exomologesis
-exomorphic
-exomorphism
-exomphalos
-exomphalous
-exomphalus
-Exon
-exon
-exonarthex
-exoner
-exonerate
-exoneration
-exonerative
-exonerator
-exoneural
-Exonian
-exonship
-exopathic
-exoperidium
-exophagous
-exophagy
-exophasia
-exophasic
-exophoria
-exophoric
-exophthalmic
-exophthalmos
-exoplasm
-exopod
-exopodite
-exopoditic
-Exopterygota
-exopterygotic
-exopterygotism
-exopterygotous
-exorability
-exorable
-exorableness
-exorbital
-exorbitance
-exorbitancy
-exorbitant
-exorbitantly
-exorbitate
-exorbitation
-exorcisation
-exorcise
-exorcisement
-exorciser
-exorcism
-exorcismal
-exorcisory
-exorcist
-exorcistic
-exorcistical
-exordia
-exordial
-exordium
-exordize
-exorganic
-exorhason
-exormia
-exornation
-exosepsis
-exoskeletal
-exoskeleton
-exosmic
-exosmose
-exosmosis
-exosmotic
-exosperm
-exosporal
-exospore
-exosporium
-exosporous
-Exostema
-exostome
-exostosed
-exostosis
-exostotic
-exostra
-exostracism
-exostracize
-exoteric
-exoterical
-exoterically
-exotericism
-exoterics
-exotheca
-exothecal
-exothecate
-exothecium
-exothermal
-exothermic
-exothermous
-exotic
-exotically
-exoticalness
-exoticism
-exoticist
-exoticity
-exoticness
-exotism
-exotospore
-exotoxic
-exotoxin
-exotropia
-exotropic
-exotropism
-expalpate
-expand
-expanded
-expandedly
-expandedness
-expander
-expanding
-expandingly
-expanse
-expansibility
-expansible
-expansibleness
-expansibly
-expansile
-expansion
-expansional
-expansionary
-expansionism
-expansionist
-expansive
-expansively
-expansiveness
-expansivity
-expansometer
-expansure
-expatiate
-expatiater
-expatiatingly
-expatiation
-expatiative
-expatiator
-expatiatory
-expatriate
-expatriation
-expect
-expectable
-expectance
-expectancy
-expectant
-expectantly
-expectation
-expectative
-expectedly
-expecter
-expectingly
-expective
-expectorant
-expectorate
-expectoration
-expectorative
-expectorator
-expede
-expediate
-expedience
-expediency
-expedient
-expediential
-expedientially
-expedientist
-expediently
-expeditate
-expeditation
-expedite
-expedited
-expeditely
-expediteness
-expediter
-expedition
-expeditionary
-expeditionist
-expeditious
-expeditiously
-expeditiousness
-expel
-expellable
-expellant
-expellee
-expeller
-expend
-expendability
-expendable
-expender
-expendible
-expenditor
-expenditrix
-expenditure
-expense
-expenseful
-expensefully
-expensefulness
-expenseless
-expensilation
-expensive
-expensively
-expensiveness
-expenthesis
-expergefacient
-expergefaction
-experience
-experienceable
-experienced
-experienceless
-experiencer
-experiencible
-experient
-experiential
-experientialism
-experientialist
-experientially
-experiment
-experimental
-experimentalism
-experimentalist
-experimentalize
-experimentally
-experimentarian
-experimentation
-experimentative
-experimentator
-experimented
-experimentee
-experimenter
-experimentist
-experimentize
-experimently
-expert
-expertism
-expertize
-expertly
-expertness
-expertship
-expiable
-expiate
-expiation
-expiational
-expiatist
-expiative
-expiator
-expiatoriness
-expiatory
-expilate
-expilation
-expilator
-expirable
-expirant
-expirate
-expiration
-expirator
-expiratory
-expire
-expiree
-expirer
-expiring
-expiringly
-expiry
-expiscate
-expiscation
-expiscator
-expiscatory
-explain
-explainable
-explainer
-explaining
-explainingly
-explanate
-explanation
-explanative
-explanatively
-explanator
-explanatorily
-explanatoriness
-explanatory
-explant
-explantation
-explement
-explemental
-expletive
-expletively
-expletiveness
-expletory
-explicable
-explicableness
-explicate
-explication
-explicative
-explicatively
-explicator
-explicatory
-explicit
-explicitly
-explicitness
-explodable
-explode
-exploded
-explodent
-exploder
-exploit
-exploitable
-exploitage
-exploitation
-exploitationist
-exploitative
-exploiter
-exploitive
-exploiture
-explorable
-exploration
-explorational
-explorative
-exploratively
-explorativeness
-explorator
-exploratory
-explore
-explorement
-explorer
-exploring
-exploringly
-explosibility
-explosible
-explosion
-explosionist
-explosive
-explosively
-explosiveness
-expone
-exponence
-exponency
-exponent
-exponential
-exponentially
-exponentiation
-exponible
-export
-exportability
-exportable
-exportation
-exporter
-exposal
-expose
-exposed
-exposedness
-exposer
-exposit
-exposition
-expositional
-expositionary
-expositive
-expositively
-expositor
-expositorial
-expositorially
-expositorily
-expositoriness
-expository
-expositress
-expostulate
-expostulating
-expostulatingly
-expostulation
-expostulative
-expostulatively
-expostulator
-expostulatory
-exposure
-expound
-expoundable
-expounder
-express
-expressable
-expressage
-expressed
-expresser
-expressibility
-expressible
-expressibly
-expression
-expressionable
-expressional
-expressionful
-expressionism
-expressionist
-expressionistic
-expressionless
-expressionlessly
-expressionlessness
-expressive
-expressively
-expressiveness
-expressivism
-expressivity
-expressless
-expressly
-expressman
-expressness
-expressway
-exprimable
-exprobrate
-exprobration
-exprobratory
-expromission
-expromissor
-expropriable
-expropriate
-expropriation
-expropriator
-expugn
-expugnable
-expuition
-expulsatory
-expulse
-expulser
-expulsion
-expulsionist
-expulsive
-expulsory
-expunction
-expunge
-expungeable
-expungement
-expunger
-expurgate
-expurgation
-expurgative
-expurgator
-expurgatorial
-expurgatory
-expurge
-exquisite
-exquisitely
-exquisiteness
-exquisitism
-exquisitively
-exradio
-exradius
-exrupeal
-exsanguinate
-exsanguination
-exsanguine
-exsanguineous
-exsanguinity
-exsanguinous
-exsanguious
-exscind
-exscissor
-exscriptural
-exsculptate
-exscutellate
-exsect
-exsectile
-exsection
-exsector
-exsequatur
-exsert
-exserted
-exsertile
-exsertion
-exship
-exsibilate
-exsibilation
-exsiccant
-exsiccatae
-exsiccate
-exsiccation
-exsiccative
-exsiccator
-exsiliency
-exsomatic
-exspuition
-exsputory
-exstipulate
-exstrophy
-exsuccous
-exsuction
-exsufflate
-exsufflation
-exsufflicate
-exsurge
-exsurgent
-extant
-extemporal
-extemporally
-extemporalness
-extemporaneity
-extemporaneous
-extemporaneously
-extemporaneousness
-extemporarily
-extemporariness
-extemporary
-extempore
-extemporization
-extemporize
-extemporizer
-extend
-extended
-extendedly
-extendedness
-extender
-extendibility
-extendible
-extending
-extense
-extensibility
-extensible
-extensibleness
-extensile
-extensimeter
-extension
-extensional
-extensionist
-extensity
-extensive
-extensively
-extensiveness
-extensometer
-extensor
-extensory
-extensum
-extent
-extenuate
-extenuating
-extenuatingly
-extenuation
-extenuative
-extenuator
-extenuatory
-exter
-exterior
-exteriorate
-exterioration
-exteriority
-exteriorization
-exteriorize
-exteriorly
-exteriorness
-exterminable
-exterminate
-extermination
-exterminative
-exterminator
-exterminatory
-exterminatress
-exterminatrix
-exterminist
-extern
-external
-externalism
-externalist
-externalistic
-externality
-externalization
-externalize
-externally
-externals
-externate
-externation
-externe
-externity
-externization
-externize
-externomedian
-externum
-exteroceptist
-exteroceptive
-exteroceptor
-exterraneous
-exterrestrial
-exterritorial
-exterritoriality
-exterritorialize
-exterritorially
-extima
-extinct
-extinction
-extinctionist
-extinctive
-extinctor
-extine
-extinguish
-extinguishable
-extinguishant
-extinguished
-extinguisher
-extinguishment
-extipulate
-extirpate
-extirpation
-extirpationist
-extirpative
-extirpator
-extirpatory
-extispex
-extispicious
-extispicy
-extogenous
-extol
-extoll
-extollation
-extoller
-extollingly
-extollment
-extolment
-extoolitic
-extorsive
-extorsively
-extort
-extorter
-extortion
-extortionary
-extortionate
-extortionately
-extortioner
-extortionist
-extortive
-extra
-extrabold
-extrabranchial
-extrabronchial
-extrabuccal
-extrabulbar
-extrabureau
-extraburghal
-extracalendar
-extracalicular
-extracanonical
-extracapsular
-extracardial
-extracarpal
-extracathedral
-extracellular
-extracellularly
-extracerebral
-extracivic
-extracivically
-extraclassroom
-extraclaustral
-extracloacal
-extracollegiate
-extracolumella
-extraconscious
-extraconstellated
-extraconstitutional
-extracorporeal
-extracorpuscular
-extracosmic
-extracosmical
-extracostal
-extracranial
-extract
-extractable
-extractant
-extracted
-extractible
-extractiform
-extraction
-extractive
-extractor
-extractorship
-extracultural
-extracurial
-extracurricular
-extracurriculum
-extracutaneous
-extracystic
-extradecretal
-extradialectal
-extraditable
-extradite
-extradition
-extradomestic
-extrados
-extradosed
-extradotal
-extraduction
-extradural
-extraembryonic
-extraenteric
-extraepiphyseal
-extraequilibrium
-extraessential
-extraessentially
-extrafascicular
-extrafloral
-extrafocal
-extrafoliaceous
-extraforaneous
-extraformal
-extragalactic
-extragastric
-extrait
-extrajudicial
-extrajudicially
-extralateral
-extralite
-extrality
-extramarginal
-extramatrical
-extramedullary
-extramental
-extrameridian
-extrameridional
-extrametaphysical
-extrametrical
-extrametropolitan
-extramodal
-extramolecular
-extramorainal
-extramorainic
-extramoral
-extramoralist
-extramundane
-extramural
-extramurally
-extramusical
-extranational
-extranatural
-extranean
-extraneity
-extraneous
-extraneously
-extraneousness
-extranidal
-extranormal
-extranuclear
-extraocular
-extraofficial
-extraoral
-extraorbital
-extraorbitally
-extraordinarily
-extraordinariness
-extraordinary
-extraorganismal
-extraovate
-extraovular
-extraparenchymal
-extraparental
-extraparietal
-extraparliamentary
-extraparochial
-extraparochially
-extrapatriarchal
-extrapelvic
-extraperineal
-extraperiodic
-extraperiosteal
-extraperitoneal
-extraphenomenal
-extraphysical
-extraphysiological
-extrapituitary
-extraplacental
-extraplanetary
-extrapleural
-extrapoetical
-extrapolar
-extrapolate
-extrapolation
-extrapolative
-extrapolator
-extrapopular
-extraprofessional
-extraprostatic
-extraprovincial
-extrapulmonary
-extrapyramidal
-extraquiz
-extrared
-extraregarding
-extraregular
-extraregularly
-extrarenal
-extraretinal
-extrarhythmical
-extrasacerdotal
-extrascholastic
-extraschool
-extrascientific
-extrascriptural
-extrascripturality
-extrasensible
-extrasensory
-extrasensuous
-extraserous
-extrasocial
-extrasolar
-extrasomatic
-extraspectral
-extraspherical
-extraspinal
-extrastapedial
-extrastate
-extrasterile
-extrastomachal
-extrasyllabic
-extrasyllogistic
-extrasyphilitic
-extrasystole
-extrasystolic
-extratabular
-extratarsal
-extratellurian
-extratelluric
-extratemporal
-extratension
-extratensive
-extraterrene
-extraterrestrial
-extraterritorial
-extraterritoriality
-extraterritorially
-extrathecal
-extratheistic
-extrathermodynamic
-extrathoracic
-extratorrid
-extratracheal
-extratribal
-extratropical
-extratubal
-extratympanic
-extrauterine
-extravagance
-extravagancy
-extravagant
-Extravagantes
-extravagantly
-extravagantness
-extravaganza
-extravagate
-extravaginal
-extravasate
-extravasation
-extravascular
-extraventricular
-extraversion
-extravert
-extravillar
-extraviolet
-extravisceral
-extrazodiacal
-extreme
-extremeless
-extremely
-extremeness
-extremism
-extremist
-extremistic
-extremital
-extremity
-extricable
-extricably
-extricate
-extricated
-extrication
-extrinsic
-extrinsical
-extrinsicality
-extrinsically
-extrinsicalness
-extrinsicate
-extrinsication
-extroitive
-extropical
-extrorsal
-extrorse
-extrorsely
-extrospect
-extrospection
-extrospective
-extroversion
-extroversive
-extrovert
-extrovertish
-extrude
-extruder
-extruding
-extrusile
-extrusion
-extrusive
-extrusory
-extubate
-extubation
-extumescence
-extund
-extusion
-exuberance
-exuberancy
-exuberant
-exuberantly
-exuberantness
-exuberate
-exuberation
-exudate
-exudation
-exudative
-exude
-exudence
-exulcerate
-exulceration
-exulcerative
-exulceratory
-exult
-exultance
-exultancy
-exultant
-exultantly
-exultation
-exultet
-exultingly
-exululate
-exumbral
-exumbrella
-exumbrellar
-exundance
-exundancy
-exundate
-exundation
-exuviability
-exuviable
-exuviae
-exuvial
-exuviate
-exuviation
-exzodiacal
-ey
-eyah
-eyalet
-eyas
-eye
-eyeball
-eyebalm
-eyebar
-eyebeam
-eyeberry
-eyeblink
-eyebolt
-eyebree
-eyebridled
-eyebright
-eyebrow
-eyecup
-eyed
-eyedness
-eyedot
-eyedrop
-eyeflap
-eyeful
-eyeglance
-eyeglass
-eyehole
-Eyeish
-eyelash
-eyeless
-eyelessness
-eyelet
-eyeleteer
-eyeletter
-eyelid
-eyelight
-eyelike
-eyeline
-eyemark
-eyen
-eyepiece
-eyepit
-eyepoint
-eyer
-eyereach
-eyeroot
-eyesalve
-eyeseed
-eyeservant
-eyeserver
-eyeservice
-eyeshade
-eyeshield
-eyeshot
-eyesight
-eyesome
-eyesore
-eyespot
-eyestalk
-eyestone
-eyestrain
-eyestring
-eyetooth
-eyewaiter
-eyewash
-eyewater
-eyewear
-eyewink
-eyewinker
-eyewitness
-eyewort
-eyey
-eying
-eyn
-eyne
-eyot
-eyoty
-eyra
-eyre
-eyrie
-eyrir
-ezba
-Ezekiel
-Ezra
-F
-f
-fa
-Faba
-Fabaceae
-fabaceous
-fabella
-fabes
-Fabian
-Fabianism
-Fabianist
-fabiform
-fable
-fabled
-fabledom
-fableist
-fableland
-fablemaker
-fablemonger
-fablemongering
-fabler
-fabliau
-fabling
-Fabraea
-fabric
-fabricant
-fabricate
-fabrication
-fabricative
-fabricator
-fabricatress
-Fabrikoid
-fabrikoid
-Fabronia
-Fabroniaceae
-fabular
-fabulist
-fabulosity
-fabulous
-fabulously
-fabulousness
-faburden
-facadal
-facade
-face
-faceable
-facebread
-facecloth
-faced
-faceless
-facellite
-facemaker
-facemaking
-faceman
-facemark
-facepiece
-faceplate
-facer
-facet
-facete
-faceted
-facetely
-faceteness
-facetiae
-facetiation
-facetious
-facetiously
-facetiousness
-facewise
-facework
-facia
-facial
-facially
-faciation
-faciend
-facient
-facies
-facile
-facilely
-facileness
-facilitate
-facilitation
-facilitative
-facilitator
-facility
-facing
-facingly
-facinorous
-facinorousness
-faciobrachial
-faciocervical
-faciolingual
-facioplegia
-facioscapulohumeral
-fack
-fackeltanz
-fackings
-fackins
-facks
-facsimile
-facsimilist
-facsimilize
-fact
-factable
-factabling
-factful
-Factice
-facticide
-faction
-factional
-factionalism
-factionary
-factioneer
-factionist
-factionistism
-factious
-factiously
-factiousness
-factish
-factitial
-factitious
-factitiously
-factitive
-factitively
-factitude
-factive
-factor
-factorability
-factorable
-factorage
-factordom
-factoress
-factorial
-factorially
-factorist
-factorization
-factorize
-factorship
-factory
-factoryship
-factotum
-factrix
-factual
-factuality
-factually
-factualness
-factum
-facture
-facty
-facula
-facular
-faculous
-facultate
-facultative
-facultatively
-facultied
-facultize
-faculty
-facund
-facy
-fad
-fadable
-faddiness
-faddish
-faddishness
-faddism
-faddist
-faddle
-faddy
-fade
-fadeaway
-faded
-fadedly
-fadedness
-fadeless
-faden
-fader
-fadge
-fading
-fadingly
-fadingness
-fadmonger
-fadmongering
-fadmongery
-fadridden
-fady
-fae
-faerie
-Faeroe
-faery
-faeryland
-faff
-faffle
-faffy
-fag
-Fagaceae
-fagaceous
-fagald
-Fagales
-Fagara
-fage
-Fagelia
-fager
-fagger
-faggery
-fagging
-faggingly
-fagine
-fagopyrism
-fagopyrismus
-Fagopyrum
-fagot
-fagoter
-fagoting
-fagottino
-fagottist
-fagoty
-Fagus
-faham
-fahlerz
-fahlore
-fahlunite
-Fahrenheit
-faience
-fail
-failing
-failingly
-failingness
-faille
-failure
-fain
-fainaigue
-fainaiguer
-faineance
-faineancy
-faineant
-faineantism
-fainly
-fainness
-fains
-faint
-fainter
-faintful
-faintheart
-fainthearted
-faintheartedly
-faintheartedness
-fainting
-faintingly
-faintish
-faintishness
-faintly
-faintness
-faints
-fainty
-faipule
-fair
-fairer
-fairfieldite
-fairgoer
-fairgoing
-fairgrass
-fairground
-fairily
-fairing
-fairish
-fairishly
-fairkeeper
-fairlike
-fairling
-fairly
-fairm
-fairness
-fairstead
-fairtime
-fairwater
-fairway
-fairy
-fairydom
-fairyfolk
-fairyhood
-fairyish
-fairyism
-fairyland
-fairylike
-fairyologist
-fairyology
-fairyship
-faith
-faithbreach
-faithbreaker
-faithful
-faithfully
-faithfulness
-faithless
-faithlessly
-faithlessness
-faithwise
-faithworthiness
-faithworthy
-faitour
-fake
-fakement
-faker
-fakery
-fakiness
-fakir
-fakirism
-Fakofo
-faky
-falanaka
-Falange
-Falangism
-Falangist
-Falasha
-falbala
-falcade
-Falcata
-falcate
-falcated
-falcation
-falcer
-falces
-falchion
-falcial
-Falcidian
-falciform
-Falcinellus
-falciparum
-Falco
-falcon
-falconbill
-falconelle
-falconer
-Falcones
-falconet
-Falconidae
-Falconiformes
-Falconinae
-falconine
-falconlike
-falconoid
-falconry
-falcopern
-falcula
-falcular
-falculate
-Falcunculus
-faldage
-falderal
-faldfee
-faldstool
-Falerian
-Falernian
-Falerno
-Faliscan
-Falisci
-Falkland
-fall
-fallace
-fallacious
-fallaciously
-fallaciousness
-fallacy
-fallage
-fallation
-fallaway
-fallback
-fallectomy
-fallen
-fallenness
-faller
-fallfish
-fallibility
-fallible
-fallibleness
-fallibly
-falling
-Fallopian
-fallostomy
-fallotomy
-fallow
-fallowist
-fallowness
-falltime
-fallway
-fally
-falsary
-false
-falsehearted
-falseheartedly
-falseheartedness
-falsehood
-falsely
-falsen
-falseness
-falser
-falsettist
-falsetto
-falsework
-falsidical
-falsie
-falsifiable
-falsificate
-falsification
-falsificator
-falsifier
-falsify
-falsism
-Falstaffian
-faltboat
-faltche
-falter
-falterer
-faltering
-falteringly
-Falunian
-Faluns
-falutin
-falx
-fam
-Fama
-famatinite
-famble
-fame
-fameflower
-fameful
-fameless
-famelessly
-famelessness
-Fameuse
-fameworthy
-familia
-familial
-familiar
-familiarism
-familiarity
-familiarization
-familiarize
-familiarizer
-familiarizingly
-familiarly
-familiarness
-familism
-familist
-familistery
-familistic
-familistical
-family
-familyish
-famine
-famish
-famishment
-famous
-famously
-famousness
-famulary
-famulus
-Fan
-fan
-fana
-fanal
-fanam
-fanatic
-fanatical
-fanatically
-fanaticalness
-fanaticism
-fanaticize
-fanback
-fanbearer
-fanciable
-fancical
-fancied
-fancier
-fanciful
-fancifully
-fancifulness
-fancify
-fanciless
-fancy
-fancymonger
-fancysick
-fancywork
-fand
-fandangle
-fandango
-fandom
-fanega
-fanegada
-fanfarade
-Fanfare
-fanfare
-fanfaron
-fanfaronade
-fanfaronading
-fanflower
-fanfoot
-fang
-fanged
-fangle
-fangled
-fanglement
-fangless
-fanglet
-fanglomerate
-fangot
-fangy
-fanhouse
-faniente
-fanion
-fanioned
-fanlight
-fanlike
-fanmaker
-fanmaking
-fanman
-fannel
-fanner
-Fannia
-fannier
-fanning
-Fanny
-fanon
-fant
-fantail
-fantasia
-fantasie
-fantasied
-fantasist
-fantasque
-fantassin
-fantast
-fantastic
-fantastical
-fantasticality
-fantastically
-fantasticalness
-fantasticate
-fantastication
-fantasticism
-fantasticly
-fantasticness
-fantastico
-fantastry
-fantasy
-Fanti
-fantigue
-fantoccini
-fantocine
-fantod
-fantoddish
-Fanwe
-fanweed
-fanwise
-fanwork
-fanwort
-fanwright
-Fany
-faon
-Fapesmo
-far
-farad
-faradaic
-faraday
-faradic
-faradism
-faradization
-faradize
-faradizer
-faradmeter
-faradocontractility
-faradomuscular
-faradonervous
-faradopalpation
-farandole
-farasula
-faraway
-farawayness
-farce
-farcelike
-farcer
-farcetta
-farcial
-farcialize
-farcical
-farcicality
-farcically
-farcicalness
-farcied
-farcify
-farcing
-farcinoma
-farcist
-farctate
-farcy
-farde
-fardel
-fardelet
-fardh
-fardo
-fare
-farer
-farewell
-farfara
-farfel
-farfetched
-farfetchedness
-Farfugium
-fargoing
-fargood
-farina
-farinaceous
-farinaceously
-faring
-farinometer
-farinose
-farinosely
-farinulent
-Farish
-farish
-farkleberry
-farl
-farleu
-farm
-farmable
-farmage
-farmer
-farmeress
-farmerette
-farmerlike
-farmership
-farmery
-farmhold
-farmhouse
-farmhousey
-farming
-farmost
-farmplace
-farmstead
-farmsteading
-farmtown
-farmy
-farmyard
-farmyardy
-farnesol
-farness
-Farnovian
-faro
-Faroeish
-Faroese
-farolito
-Farouk
-farraginous
-farrago
-farrand
-farrandly
-farrantly
-farreate
-farreation
-farrier
-farrierlike
-farriery
-farrisite
-farrow
-farruca
-farsalah
-farse
-farseeing
-farseeingness
-farseer
-farset
-Farsi
-farsighted
-farsightedly
-farsightedness
-farther
-farthermost
-farthest
-farthing
-farthingale
-farthingless
-farweltered
-fasces
-fascet
-fascia
-fascial
-fasciate
-fasciated
-fasciately
-fasciation
-fascicle
-fascicled
-fascicular
-fascicularly
-fasciculate
-fasciculated
-fasciculately
-fasciculation
-fascicule
-fasciculus
-fascinate
-fascinated
-fascinatedly
-fascinating
-fascinatingly
-fascination
-fascinative
-fascinator
-fascinatress
-fascine
-fascinery
-Fascio
-fasciodesis
-fasciola
-fasciolar
-Fasciolaria
-Fasciolariidae
-fasciole
-fasciolet
-fascioliasis
-Fasciolidae
-fascioloid
-fascioplasty
-fasciotomy
-fascis
-fascism
-fascist
-Fascista
-Fascisti
-fascisticization
-fascisticize
-fascistization
-fascistize
-fash
-fasher
-fashery
-fashion
-fashionability
-fashionable
-fashionableness
-fashionably
-fashioned
-fashioner
-fashionist
-fashionize
-fashionless
-fashionmonger
-fashionmonging
-fashious
-fashiousness
-fasibitikite
-fasinite
-fass
-fassalite
-fast
-fasten
-fastener
-fastening
-faster
-fastgoing
-fasthold
-fastidiosity
-fastidious
-fastidiously
-fastidiousness
-fastidium
-fastigate
-fastigated
-fastigiate
-fastigium
-fasting
-fastingly
-fastish
-fastland
-fastness
-fastuous
-fastuously
-fastuousness
-fastus
-fat
-Fatagaga
-fatal
-fatalism
-fatalist
-fatalistic
-fatalistically
-fatality
-fatalize
-fatally
-fatalness
-fatbird
-fatbrained
-fate
-fated
-fateful
-fatefully
-fatefulness
-fatelike
-fathead
-fatheaded
-fatheadedness
-fathearted
-father
-fathercraft
-fathered
-fatherhood
-fatherland
-fatherlandish
-fatherless
-fatherlessness
-fatherlike
-fatherliness
-fatherling
-fatherly
-fathership
-fathmur
-fathom
-fathomable
-fathomage
-fathomer
-Fathometer
-fathomless
-fathomlessly
-fathomlessness
-fatidic
-fatidical
-fatidically
-fatiferous
-fatigability
-fatigable
-fatigableness
-fatigue
-fatigueless
-fatiguesome
-fatiguing
-fatiguingly
-fatiha
-fatil
-fatiloquent
-Fatima
-Fatimid
-fatiscence
-fatiscent
-fatless
-fatling
-fatly
-fatness
-fatsia
-fattable
-fatten
-fattenable
-fattener
-fatter
-fattily
-fattiness
-fattish
-fattishness
-fattrels
-fatty
-fatuism
-fatuitous
-fatuitousness
-fatuity
-fatuoid
-fatuous
-fatuously
-fatuousness
-fatwood
-faucal
-faucalize
-fauces
-faucet
-fauchard
-faucial
-faucitis
-faucre
-faugh
-faujasite
-fauld
-Faulkland
-fault
-faultage
-faulter
-faultfind
-faultfinder
-faultfinding
-faultful
-faultfully
-faultily
-faultiness
-faulting
-faultless
-faultlessly
-faultlessness
-faultsman
-faulty
-faun
-Fauna
-faunal
-faunally
-faunated
-faunish
-faunist
-faunistic
-faunistical
-faunistically
-faunlike
-faunological
-faunology
-faunule
-fause
-faussebraie
-faussebrayed
-faust
-Faustian
-fauterer
-fautor
-fautorship
-fauve
-Fauvism
-Fauvist
-favaginous
-favella
-favellidium
-favelloid
-Faventine
-faveolate
-faveolus
-faviform
-favilla
-favillous
-favism
-favissa
-favn
-favonian
-Favonius
-favor
-favorable
-favorableness
-favorably
-favored
-favoredly
-favoredness
-favorer
-favoress
-favoring
-favoringly
-favorite
-favoritism
-favorless
-favose
-favosely
-favosite
-Favosites
-Favositidae
-favositoid
-favous
-favus
-fawn
-fawner
-fawnery
-fawning
-fawningly
-fawningness
-fawnlike
-fawnskin
-fawny
-Fay
-fay
-Fayal
-fayalite
-Fayettism
-fayles
-Fayumic
-faze
-fazenda
-fe
-feaberry
-feague
-feak
-feal
-fealty
-fear
-fearable
-feared
-fearedly
-fearedness
-fearer
-fearful
-fearfully
-fearfulness
-fearingly
-fearless
-fearlessly
-fearlessness
-fearnought
-fearsome
-fearsomely
-fearsomeness
-feasance
-feasibility
-feasible
-feasibleness
-feasibly
-feasor
-feast
-feasten
-feaster
-feastful
-feastfully
-feastless
-feat
-feather
-featherback
-featherbed
-featherbedding
-featherbird
-featherbone
-featherbrain
-featherbrained
-featherdom
-feathered
-featheredge
-featheredged
-featherer
-featherfew
-featherfoil
-featherhead
-featherheaded
-featheriness
-feathering
-featherleaf
-featherless
-featherlessness
-featherlet
-featherlike
-featherman
-feathermonger
-featherpate
-featherpated
-featherstitch
-featherstitching
-feathertop
-featherway
-featherweed
-featherweight
-featherwing
-featherwise
-featherwood
-featherwork
-featherworker
-feathery
-featliness
-featly
-featness
-featous
-featural
-featurally
-feature
-featured
-featureful
-featureless
-featureliness
-featurely
-featy
-feaze
-feazings
-febricant
-febricide
-febricity
-febricula
-febrifacient
-febriferous
-febrific
-febrifugal
-febrifuge
-febrile
-febrility
-Febronian
-Febronianism
-Februarius
-February
-februation
-fecal
-fecalith
-fecaloid
-feces
-Fechnerian
-feck
-feckful
-feckfully
-feckless
-fecklessly
-fecklessness
-feckly
-fecula
-feculence
-feculency
-feculent
-fecund
-fecundate
-fecundation
-fecundative
-fecundator
-fecundatory
-fecundify
-fecundity
-fecundize
-fed
-feddan
-federacy
-Federal
-federal
-federalism
-federalist
-federalization
-federalize
-federally
-federalness
-federate
-federation
-federationist
-federatist
-federative
-federatively
-federator
-Fedia
-Fedora
-fee
-feeable
-feeble
-feeblebrained
-feeblehearted
-feebleheartedly
-feebleheartedness
-feebleness
-feebling
-feeblish
-feebly
-feed
-feedable
-feedback
-feedbin
-feedboard
-feedbox
-feeder
-feedhead
-feeding
-feedman
-feedsman
-feedstuff
-feedway
-feedy
-feel
-feelable
-feeler
-feeless
-feeling
-feelingful
-feelingless
-feelinglessly
-feelingly
-feelingness
-feer
-feere
-feering
-feetage
-feetless
-feeze
-fefnicute
-fegary
-Fegatella
-Fehmic
-fei
-feif
-feigher
-feign
-feigned
-feignedly
-feignedness
-feigner
-feigning
-feigningly
-Feijoa
-feil
-feint
-feis
-feist
-feisty
-Felapton
-feldsher
-feldspar
-feldsparphyre
-feldspathic
-feldspathization
-feldspathoid
-Felichthys
-felicide
-felicific
-felicitate
-felicitation
-felicitator
-felicitous
-felicitously
-felicitousness
-felicity
-felid
-Felidae
-feliform
-Felinae
-feline
-felinely
-felineness
-felinity
-felinophile
-felinophobe
-Felis
-Felix
-fell
-fellable
-fellage
-fellah
-fellaheen
-fellahin
-Fellani
-Fellata
-Fellatah
-fellatio
-fellation
-fellen
-feller
-fellic
-felliducous
-fellifluous
-felling
-fellingbird
-fellinic
-fellmonger
-fellmongering
-fellmongery
-fellness
-felloe
-fellow
-fellowcraft
-fellowess
-fellowheirship
-fellowless
-fellowlike
-fellowship
-fellside
-fellsman
-felly
-feloid
-felon
-feloness
-felonious
-feloniously
-feloniousness
-felonry
-felonsetter
-felonsetting
-felonweed
-felonwood
-felonwort
-felony
-fels
-felsite
-felsitic
-felsobanyite
-felsophyre
-felsophyric
-felsosphaerite
-felstone
-felt
-felted
-felter
-felting
-feltlike
-feltmaker
-feltmaking
-feltmonger
-feltness
-feltwork
-feltwort
-felty
-feltyfare
-felucca
-Felup
-felwort
-female
-femalely
-femaleness
-femality
-femalize
-Feme
-feme
-femerell
-femic
-femicide
-feminacy
-feminal
-feminality
-feminate
-femineity
-feminie
-feminility
-feminin
-feminine
-femininely
-feminineness
-femininism
-femininity
-feminism
-feminist
-feministic
-feministics
-feminity
-feminization
-feminize
-feminologist
-feminology
-feminophobe
-femora
-femoral
-femorocaudal
-femorocele
-femorococcygeal
-femorofibular
-femoropopliteal
-femororotulian
-femorotibial
-femur
-fen
-fenbank
-fenberry
-fence
-fenceful
-fenceless
-fencelessness
-fencelet
-fenceplay
-fencer
-fenceress
-fenchene
-fenchone
-fenchyl
-fencible
-fencing
-fend
-fendable
-fender
-fendering
-fenderless
-fendillate
-fendillation
-fendy
-feneration
-fenestella
-Fenestellidae
-fenestra
-fenestral
-fenestrate
-fenestrated
-fenestration
-fenestrato
-fenestrule
-Fenian
-Fenianism
-fenite
-fenks
-fenland
-fenlander
-fenman
-fennec
-fennel
-fennelflower
-fennig
-fennish
-Fennoman
-fenny
-fenouillet
-Fenrir
-fensive
-fent
-fenter
-fenugreek
-Fenzelia
-feod
-feodal
-feodality
-feodary
-feodatory
-feoff
-feoffee
-feoffeeship
-feoffment
-feoffor
-feower
-feracious
-feracity
-Ferae
-Ferahan
-feral
-feralin
-Feramorz
-ferash
-ferberite
-Ferdiad
-ferdwit
-feretory
-feretrum
-ferfathmur
-ferfet
-ferganite
-Fergus
-fergusite
-Ferguson
-fergusonite
-feria
-ferial
-feridgi
-ferie
-ferine
-ferinely
-ferineness
-Feringi
-Ferio
-Ferison
-ferity
-ferk
-ferling
-ferly
-fermail
-Fermatian
-ferme
-ferment
-fermentability
-fermentable
-fermentarian
-fermentation
-fermentative
-fermentatively
-fermentativeness
-fermentatory
-fermenter
-fermentescible
-fermentitious
-fermentive
-fermentology
-fermentor
-fermentum
-fermerer
-fermery
-fermila
-fermorite
-fern
-fernandinite
-Fernando
-fernbird
-fernbrake
-ferned
-fernery
-ferngale
-ferngrower
-fernland
-fernleaf
-fernless
-fernlike
-fernshaw
-fernsick
-ferntickle
-ferntickled
-fernwort
-ferny
-Ferocactus
-ferocious
-ferociously
-ferociousness
-ferocity
-feroher
-Feronia
-ferrado
-ferrament
-Ferrara
-Ferrarese
-ferrate
-ferrated
-ferrateen
-ferratin
-ferrean
-ferreous
-ferret
-ferreter
-ferreting
-ferretto
-ferrety
-ferri
-ferriage
-ferric
-ferrichloride
-ferricyanate
-ferricyanhydric
-ferricyanic
-ferricyanide
-ferricyanogen
-ferrier
-ferriferous
-ferrihydrocyanic
-ferriprussiate
-ferriprussic
-ferrite
-ferritization
-ferritungstite
-ferrivorous
-ferroalloy
-ferroaluminum
-ferroboron
-ferrocalcite
-ferrocerium
-ferrochrome
-ferrochromium
-ferroconcrete
-ferroconcretor
-ferrocyanate
-ferrocyanhydric
-ferrocyanic
-ferrocyanide
-ferrocyanogen
-ferroglass
-ferrogoslarite
-ferrohydrocyanic
-ferroinclave
-ferromagnesian
-ferromagnetic
-ferromagnetism
-ferromanganese
-ferromolybdenum
-ferronatrite
-ferronickel
-ferrophosphorus
-ferroprint
-ferroprussiate
-ferroprussic
-ferrosilicon
-ferrotitanium
-ferrotungsten
-ferrotype
-ferrotyper
-ferrous
-ferrovanadium
-ferrozirconium
-ferruginate
-ferrugination
-ferruginean
-ferruginous
-ferrule
-ferruler
-ferrum
-ferruminate
-ferrumination
-ferry
-ferryboat
-ferryhouse
-ferryman
-ferryway
-ferthumlungur
-Fertil
-fertile
-fertilely
-fertileness
-fertility
-fertilizable
-fertilization
-fertilizational
-fertilize
-fertilizer
-feru
-ferula
-ferulaceous
-ferule
-ferulic
-fervanite
-fervency
-fervent
-fervently
-ferventness
-fervescence
-fervescent
-fervid
-fervidity
-fervidly
-fervidness
-Fervidor
-fervor
-fervorless
-Fesapo
-Fescennine
-fescenninity
-fescue
-fess
-fessely
-fesswise
-fest
-festal
-festally
-Feste
-fester
-festerment
-festilogy
-festinance
-festinate
-festinately
-festination
-festine
-Festino
-festival
-festivally
-festive
-festively
-festiveness
-festivity
-festivous
-festology
-festoon
-festoonery
-festoony
-festuca
-festucine
-fet
-fetal
-fetalism
-fetalization
-fetation
-fetch
-fetched
-fetcher
-fetching
-fetchingly
-feteless
-feterita
-fetial
-fetiales
-fetichmonger
-feticidal
-feticide
-fetid
-fetidity
-fetidly
-fetidness
-fetiferous
-fetiparous
-fetish
-fetisheer
-fetishic
-fetishism
-fetishist
-fetishistic
-fetishization
-fetishize
-fetishmonger
-fetishry
-fetlock
-fetlocked
-fetlow
-fetography
-fetometry
-fetoplacental
-fetor
-fetter
-fetterbush
-fetterer
-fetterless
-fetterlock
-fetticus
-fettle
-fettler
-fettling
-fetus
-feu
-feuage
-feuar
-feucht
-feud
-feudal
-feudalism
-feudalist
-feudalistic
-feudality
-feudalizable
-feudalization
-feudalize
-feudally
-feudatorial
-feudatory
-feudee
-feudist
-feudovassalism
-feued
-Feuillants
-feuille
-feuilletonism
-feuilletonist
-feuilletonistic
-feulamort
-fever
-feverberry
-feverbush
-fevercup
-feveret
-feverfew
-fevergum
-feverish
-feverishly
-feverishness
-feverless
-feverlike
-feverous
-feverously
-feverroot
-fevertrap
-fevertwig
-fevertwitch
-feverweed
-feverwort
-few
-fewness
-fewsome
-fewter
-fewterer
-fewtrils
-fey
-feyness
-fez
-Fezzan
-fezzed
-Fezziwig
-fezzy
-fi
-fiacre
-fiance
-fiancee
-fianchetto
-Fianna
-fiar
-fiard
-fiasco
-fiat
-fiatconfirmatio
-fib
-fibber
-fibbery
-fibdom
-Fiber
-fiber
-fiberboard
-fibered
-Fiberglas
-fiberize
-fiberizer
-fiberless
-fiberware
-fibration
-fibreless
-fibreware
-fibriform
-fibril
-fibrilla
-fibrillar
-fibrillary
-fibrillate
-fibrillated
-fibrillation
-fibrilled
-fibrilliferous
-fibrilliform
-fibrillose
-fibrillous
-fibrin
-fibrinate
-fibrination
-fibrine
-fibrinemia
-fibrinoalbuminous
-fibrinocellular
-fibrinogen
-fibrinogenetic
-fibrinogenic
-fibrinogenous
-fibrinolysin
-fibrinolysis
-fibrinolytic
-fibrinoplastic
-fibrinoplastin
-fibrinopurulent
-fibrinose
-fibrinosis
-fibrinous
-fibrinuria
-fibroadenia
-fibroadenoma
-fibroadipose
-fibroangioma
-fibroareolar
-fibroblast
-fibroblastic
-fibrobronchitis
-fibrocalcareous
-fibrocarcinoma
-fibrocartilage
-fibrocartilaginous
-fibrocaseose
-fibrocaseous
-fibrocellular
-fibrochondritis
-fibrochondroma
-fibrochondrosteal
-fibrocrystalline
-fibrocyst
-fibrocystic
-fibrocystoma
-fibrocyte
-fibroelastic
-fibroenchondroma
-fibrofatty
-fibroferrite
-fibroglia
-fibroglioma
-fibrohemorrhagic
-fibroid
-fibroin
-fibrointestinal
-fibroligamentous
-fibrolipoma
-fibrolipomatous
-fibrolite
-fibrolitic
-fibroma
-fibromata
-fibromatoid
-fibromatosis
-fibromatous
-fibromembrane
-fibromembranous
-fibromucous
-fibromuscular
-fibromyectomy
-fibromyitis
-fibromyoma
-fibromyomatous
-fibromyomectomy
-fibromyositis
-fibromyotomy
-fibromyxoma
-fibromyxosarcoma
-fibroneuroma
-fibronuclear
-fibronucleated
-fibropapilloma
-fibropericarditis
-fibroplastic
-fibropolypus
-fibropsammoma
-fibropurulent
-fibroreticulate
-fibrosarcoma
-fibrose
-fibroserous
-fibrosis
-fibrositis
-Fibrospongiae
-fibrotic
-fibrotuberculosis
-fibrous
-fibrously
-fibrousness
-fibrovasal
-fibrovascular
-fibry
-fibster
-fibula
-fibulae
-fibular
-fibulare
-fibulocalcaneal
-Ficaria
-ficary
-fice
-ficelle
-fiche
-Fichtean
-Fichteanism
-fichtelite
-fichu
-ficiform
-fickle
-ficklehearted
-fickleness
-ficklety
-ficklewise
-fickly
-fico
-ficoid
-Ficoidaceae
-Ficoideae
-ficoides
-fictation
-fictile
-fictileness
-fictility
-fiction
-fictional
-fictionalize
-fictionally
-fictionary
-fictioneer
-fictioner
-fictionist
-fictionistic
-fictionization
-fictionize
-fictionmonger
-fictious
-fictitious
-fictitiously
-fictitiousness
-fictive
-fictively
-Ficula
-Ficus
-fid
-Fidac
-fidalgo
-fidate
-fidation
-fiddle
-fiddleback
-fiddlebrained
-fiddlecome
-fiddledeedee
-fiddlefaced
-fiddlehead
-fiddleheaded
-fiddler
-fiddlerfish
-fiddlery
-fiddlestick
-fiddlestring
-fiddlewood
-fiddley
-fiddling
-fide
-fideicommiss
-fideicommissary
-fideicommission
-fideicommissioner
-fideicommissor
-fideicommissum
-fideism
-fideist
-fidejussion
-fidejussionary
-fidejussor
-fidejussory
-Fidele
-Fidelia
-Fidelio
-fidelity
-fidepromission
-fidepromissor
-Fides
-Fidessa
-fidfad
-fidge
-fidget
-fidgeter
-fidgetily
-fidgetiness
-fidgeting
-fidgetingly
-fidgety
-Fidia
-fidicinal
-fidicinales
-fidicula
-Fido
-fiducia
-fiducial
-fiducially
-fiduciarily
-fiduciary
-fiducinales
-fie
-fiedlerite
-fiefdom
-field
-fieldball
-fieldbird
-fielded
-fielder
-fieldfare
-fieldish
-fieldman
-fieldpiece
-fieldsman
-fieldward
-fieldwards
-fieldwork
-fieldworker
-fieldwort
-fieldy
-fiend
-fiendful
-fiendfully
-fiendhead
-fiendish
-fiendishly
-fiendishness
-fiendism
-fiendlike
-fiendliness
-fiendly
-fiendship
-fient
-Fierabras
-Fierasfer
-fierasferid
-Fierasferidae
-fierasferoid
-fierce
-fiercehearted
-fiercely
-fiercen
-fierceness
-fierding
-fierily
-fieriness
-fiery
-fiesta
-fieulamort
-Fife
-fife
-fifer
-fifie
-fifish
-fifo
-fifteen
-fifteener
-fifteenfold
-fifteenth
-fifteenthly
-fifth
-fifthly
-fiftieth
-fifty
-fiftyfold
-fig
-figaro
-figbird
-figeater
-figent
-figged
-figgery
-figging
-figgle
-figgy
-fight
-fightable
-fighter
-fighteress
-fighting
-fightingly
-fightwite
-Figitidae
-figless
-figlike
-figment
-figmental
-figpecker
-figshell
-figulate
-figulated
-figuline
-figurability
-figurable
-figural
-figurant
-figurante
-figurate
-figurately
-figuration
-figurative
-figuratively
-figurativeness
-figure
-figured
-figuredly
-figurehead
-figureheadless
-figureheadship
-figureless
-figurer
-figuresome
-figurette
-figurial
-figurine
-figurism
-figurist
-figurize
-figury
-figworm
-figwort
-Fiji
-Fijian
-fike
-fikie
-filace
-filaceous
-filacer
-Filago
-filament
-filamentar
-filamentary
-filamented
-filamentiferous
-filamentoid
-filamentose
-filamentous
-filamentule
-filander
-filanders
-filao
-filar
-Filaria
-filaria
-filarial
-filarian
-filariasis
-filaricidal
-filariform
-filariid
-Filariidae
-filarious
-filasse
-filate
-filator
-filature
-filbert
-filch
-filcher
-filchery
-filching
-filchingly
-file
-filefish
-filelike
-filemaker
-filemaking
-filemot
-filer
-filesmith
-filet
-filial
-filiality
-filially
-filialness
-filiate
-filiation
-filibeg
-filibranch
-Filibranchia
-filibranchiate
-filibuster
-filibusterer
-filibusterism
-filibusterous
-filical
-Filicales
-filicauline
-Filices
-filicic
-filicidal
-filicide
-filiciform
-filicin
-Filicineae
-filicinean
-filicite
-Filicites
-filicologist
-filicology
-Filicornia
-filiety
-filiferous
-filiform
-filiformed
-Filigera
-filigerous
-filigree
-filing
-filings
-filionymic
-filiopietistic
-filioque
-Filipendula
-filipendulous
-Filipina
-Filipiniana
-Filipinization
-Filipinize
-Filipino
-filippo
-filipuncture
-filite
-Filix
-fill
-fillable
-filled
-fillemot
-filler
-fillercap
-fillet
-filleter
-filleting
-filletlike
-filletster
-filleul
-filling
-fillingly
-fillingness
-fillip
-fillipeen
-fillister
-fillmass
-fillock
-fillowite
-filly
-film
-filmable
-filmdom
-filmet
-filmgoer
-filmgoing
-filmic
-filmiform
-filmily
-filminess
-filmish
-filmist
-filmize
-filmland
-filmlike
-filmogen
-filmslide
-filmstrip
-filmy
-filo
-filoplumaceous
-filoplume
-filopodium
-Filosa
-filose
-filoselle
-fils
-filter
-filterability
-filterable
-filterableness
-filterer
-filtering
-filterman
-filth
-filthify
-filthily
-filthiness
-filthless
-filthy
-filtrability
-filtrable
-filtratable
-filtrate
-filtration
-fimble
-fimbria
-fimbrial
-fimbriate
-fimbriated
-fimbriation
-fimbriatum
-fimbricate
-fimbricated
-fimbrilla
-fimbrillate
-fimbrilliferous
-fimbrillose
-fimbriodentate
-Fimbristylis
-fimetarious
-fimicolous
-Fin
-fin
-finable
-finableness
-finagle
-finagler
-final
-finale
-finalism
-finalist
-finality
-finalize
-finally
-finance
-financial
-financialist
-financially
-financier
-financiery
-financist
-finback
-finch
-finchbacked
-finched
-finchery
-find
-findability
-findable
-findal
-finder
-findfault
-finding
-findjan
-fine
-fineable
-finebent
-fineish
-fineleaf
-fineless
-finely
-finement
-fineness
-finer
-finery
-finespun
-finesse
-finesser
-finestill
-finestiller
-finetop
-finfish
-finfoot
-Fingal
-Fingall
-Fingallian
-fingent
-finger
-fingerable
-fingerberry
-fingerbreadth
-fingered
-fingerer
-fingerfish
-fingerflower
-fingerhold
-fingerhook
-fingering
-fingerleaf
-fingerless
-fingerlet
-fingerlike
-fingerling
-fingernail
-fingerparted
-fingerprint
-fingerprinting
-fingerroot
-fingersmith
-fingerspin
-fingerstall
-fingerstone
-fingertip
-fingerwise
-fingerwork
-fingery
-fingrigo
-Fingu
-finial
-finialed
-finical
-finicality
-finically
-finicalness
-finicism
-finick
-finickily
-finickiness
-finicking
-finickingly
-finickingness
-finific
-finify
-Finiglacial
-finikin
-finiking
-fining
-finis
-finish
-finishable
-finished
-finisher
-finishing
-finite
-finitely
-finiteness
-finitesimal
-finitive
-finitude
-finity
-finjan
-fink
-finkel
-finland
-Finlander
-finless
-finlet
-finlike
-Finmark
-Finn
-finnac
-finned
-finner
-finnesko
-Finnic
-Finnicize
-finnip
-Finnish
-finny
-finochio
-Fionnuala
-fiord
-fiorded
-Fioretti
-fiorin
-fiorite
-Fiot
-fip
-fipenny
-fipple
-fique
-fir
-Firbolg
-firca
-fire
-fireable
-firearm
-firearmed
-fireback
-fireball
-firebird
-fireblende
-fireboard
-fireboat
-firebolt
-firebolted
-firebote
-firebox
-fireboy
-firebrand
-firebrat
-firebreak
-firebrick
-firebug
-fireburn
-firecoat
-firecracker
-firecrest
-fired
-firedamp
-firedog
-firedrake
-firefall
-firefang
-firefanged
-fireflaught
-fireflirt
-fireflower
-firefly
-fireguard
-firehouse
-fireless
-firelight
-firelike
-fireling
-firelit
-firelock
-fireman
-firemanship
-firemaster
-fireplace
-fireplug
-firepower
-fireproof
-fireproofing
-fireproofness
-firer
-fireroom
-firesafe
-firesafeness
-firesafety
-fireshaft
-fireshine
-fireside
-firesider
-firesideship
-firespout
-firestone
-firestopping
-firetail
-firetop
-firetrap
-firewarden
-firewater
-fireweed
-firewood
-firework
-fireworkless
-fireworky
-fireworm
-firing
-firk
-firker
-firkin
-firlot
-firm
-firmament
-firmamental
-firman
-firmance
-firmer
-firmhearted
-firmisternal
-Firmisternia
-firmisternial
-firmisternous
-firmly
-firmness
-firn
-Firnismalerei
-Firoloida
-firring
-firry
-first
-firstcomer
-firsthand
-firstling
-firstly
-firstness
-firstship
-firth
-fisc
-fiscal
-fiscalify
-fiscalism
-fiscalization
-fiscalize
-fiscally
-fischerite
-fise
-fisetin
-fish
-fishable
-fishback
-fishbed
-fishberry
-fishbolt
-fishbone
-fisheater
-fished
-fisher
-fisherboat
-fisherboy
-fisheress
-fisherfolk
-fishergirl
-fisherman
-fisherpeople
-fisherwoman
-fishery
-fishet
-fisheye
-fishfall
-fishful
-fishgarth
-fishgig
-fishhood
-fishhook
-fishhooks
-fishhouse
-fishify
-fishily
-fishiness
-fishing
-fishingly
-fishless
-fishlet
-fishlike
-fishline
-fishling
-fishman
-fishmonger
-fishmouth
-fishplate
-fishpond
-fishpool
-fishpot
-fishpotter
-fishpound
-fishskin
-fishtail
-fishway
-fishweed
-fishweir
-fishwife
-fishwoman
-fishwood
-fishworker
-fishworks
-fishworm
-fishy
-fishyard
-fisnoga
-fissate
-fissicostate
-fissidactyl
-Fissidens
-Fissidentaceae
-fissidentaceous
-fissile
-fissileness
-fissilingual
-Fissilinguia
-fissility
-fission
-fissionable
-fissipalmate
-fissipalmation
-fissiparation
-fissiparism
-fissiparity
-fissiparous
-fissiparously
-fissiparousness
-fissiped
-Fissipeda
-fissipedal
-fissipedate
-Fissipedia
-fissipedial
-Fissipes
-fissirostral
-fissirostrate
-Fissirostres
-fissive
-fissural
-fissuration
-fissure
-fissureless
-Fissurella
-Fissurellidae
-fissuriform
-fissury
-fist
-fisted
-fister
-fistful
-fistiana
-fistic
-fistical
-fisticuff
-fisticuffer
-fisticuffery
-fistify
-fistiness
-fisting
-fistlike
-fistmele
-fistnote
-fistuca
-fistula
-Fistulana
-fistular
-Fistularia
-Fistulariidae
-fistularioid
-fistulate
-fistulated
-fistulatome
-fistulatous
-fistule
-fistuliform
-Fistulina
-fistulize
-fistulose
-fistulous
-fistwise
-fisty
-fit
-fitch
-fitched
-fitchee
-fitcher
-fitchery
-fitchet
-fitchew
-fitful
-fitfully
-fitfulness
-fitly
-fitment
-fitness
-fitout
-fitroot
-fittable
-fittage
-fitted
-fittedness
-fitten
-fitter
-fitters
-fittily
-fittiness
-fitting
-fittingly
-fittingness
-Fittonia
-fitty
-fittyfied
-fittyways
-fittywise
-fitweed
-Fitzclarence
-Fitzroy
-Fitzroya
-Fiuman
-five
-fivebar
-fivefold
-fivefoldness
-fiveling
-fivepence
-fivepenny
-fivepins
-fiver
-fives
-fivescore
-fivesome
-fivestones
-fix
-fixable
-fixage
-fixate
-fixatif
-fixation
-fixative
-fixator
-fixature
-fixed
-fixedly
-fixedness
-fixer
-fixidity
-fixing
-fixity
-fixture
-fixtureless
-fixure
-fizelyite
-fizgig
-fizz
-fizzer
-fizzle
-fizzy
-fjarding
-fjeld
-fjerding
-Fjorgyn
-flabbergast
-flabbergastation
-flabbily
-flabbiness
-flabby
-flabellarium
-flabellate
-flabellation
-flabellifoliate
-flabelliform
-flabellinerved
-flabellum
-flabrum
-flaccid
-flaccidity
-flaccidly
-flaccidness
-flacherie
-Flacian
-Flacianism
-Flacianist
-flack
-flacked
-flacker
-flacket
-Flacourtia
-Flacourtiaceae
-flacourtiaceous
-flaff
-flaffer
-flag
-flagboat
-flagellant
-flagellantism
-flagellar
-Flagellaria
-Flagellariaceae
-flagellariaceous
-Flagellata
-Flagellatae
-flagellate
-flagellated
-flagellation
-flagellative
-flagellator
-flagellatory
-flagelliferous
-flagelliform
-flagellist
-flagellosis
-flagellula
-flagellum
-flageolet
-flagfall
-flagger
-flaggery
-flaggily
-flagginess
-flagging
-flaggingly
-flaggish
-flaggy
-flagitate
-flagitation
-flagitious
-flagitiously
-flagitiousness
-flagleaf
-flagless
-flaglet
-flaglike
-flagmaker
-flagmaking
-flagman
-flagon
-flagonet
-flagonless
-flagpole
-flagrance
-flagrancy
-flagrant
-flagrantly
-flagrantness
-flagroot
-flagship
-flagstaff
-flagstick
-flagstone
-flagworm
-flail
-flaillike
-flair
-flaith
-flaithship
-flajolotite
-flak
-flakage
-flake
-flakeless
-flakelet
-flaker
-flakily
-flakiness
-flaky
-flam
-Flamandization
-Flamandize
-flamant
-flamb
-flambeau
-flambeaux
-flamberg
-flamboyance
-flamboyancy
-flamboyant
-flamboyantism
-flamboyantize
-flamboyantly
-flamboyer
-flame
-flamed
-flameflower
-flameless
-flamelet
-flamelike
-flamen
-flamenco
-flamenship
-flameproof
-flamer
-flamfew
-flamineous
-flaming
-Flamingant
-flamingly
-flamingo
-Flaminian
-flaminica
-flaminical
-flammability
-flammable
-flammeous
-flammiferous
-flammulated
-flammulation
-flammule
-flamy
-flan
-flancard
-flanch
-flanched
-flanconade
-flandan
-flandowser
-flane
-flange
-flangeless
-flanger
-flangeway
-flank
-flankard
-flanked
-flanker
-flanking
-flankwise
-flanky
-flannel
-flannelbush
-flanneled
-flannelette
-flannelflower
-flannelleaf
-flannelly
-flannelmouth
-flannelmouthed
-flannels
-flanque
-flap
-flapcake
-flapdock
-flapdoodle
-flapdragon
-flapjack
-flapmouthed
-flapper
-flapperdom
-flapperhood
-flapperish
-flapperism
-flare
-flareback
-flareboard
-flareless
-flaring
-flaringly
-flary
-flaser
-flash
-flashboard
-flasher
-flashet
-flashily
-flashiness
-flashing
-flashingly
-flashlight
-flashlike
-flashly
-flashness
-flashover
-flashpan
-flashproof
-flashtester
-flashy
-flask
-flasker
-flasket
-flasklet
-flasque
-flat
-flatboat
-flatbottom
-flatcap
-flatcar
-flatdom
-flated
-flatfish
-flatfoot
-flathat
-flathead
-flatiron
-flatland
-flatlet
-flatling
-flatly
-flatman
-flatness
-flatnose
-flatten
-flattener
-flattening
-flatter
-flatterable
-flattercap
-flatterdock
-flatterer
-flattering
-flatteringly
-flatteringness
-flattery
-flattie
-flatting
-flattish
-flattop
-flatulence
-flatulency
-flatulent
-flatulently
-flatulentness
-flatus
-flatware
-flatway
-flatways
-flatweed
-flatwise
-flatwoods
-flatwork
-flatworm
-Flaubertian
-flaught
-flaughter
-flaunt
-flaunter
-flauntily
-flauntiness
-flaunting
-flauntingly
-flaunty
-flautino
-flautist
-flavanilin
-flavaniline
-flavanthrene
-flavanthrone
-flavedo
-Flaveria
-flavescence
-flavescent
-Flavia
-Flavian
-flavic
-flavicant
-flavid
-flavin
-flavine
-Flavius
-flavo
-Flavobacterium
-flavone
-flavoprotein
-flavopurpurin
-flavor
-flavored
-flavorer
-flavorful
-flavoring
-flavorless
-flavorous
-flavorsome
-flavory
-flavour
-flaw
-flawed
-flawflower
-flawful
-flawless
-flawlessly
-flawlessness
-flawn
-flawy
-flax
-flaxboard
-flaxbush
-flaxdrop
-flaxen
-flaxlike
-flaxman
-flaxseed
-flaxtail
-flaxweed
-flaxwench
-flaxwife
-flaxwoman
-flaxwort
-flaxy
-flay
-flayer
-flayflint
-flea
-fleabane
-fleabite
-fleadock
-fleam
-fleaseed
-fleaweed
-fleawood
-fleawort
-fleay
-flebile
-fleche
-flechette
-fleck
-flecken
-flecker
-fleckiness
-fleckled
-fleckless
-flecklessly
-flecky
-flecnodal
-flecnode
-flection
-flectional
-flectionless
-flector
-fled
-fledge
-fledgeless
-fledgling
-fledgy
-flee
-fleece
-fleeceable
-fleeced
-fleeceflower
-fleeceless
-fleecelike
-fleecer
-fleech
-fleechment
-fleecily
-fleeciness
-fleecy
-fleer
-fleerer
-fleering
-fleeringly
-fleet
-fleeter
-fleetful
-fleeting
-fleetingly
-fleetingness
-fleetings
-fleetly
-fleetness
-fleetwing
-Flem
-Fleming
-Flemish
-flemish
-flench
-flense
-flenser
-flerry
-flesh
-fleshbrush
-fleshed
-fleshen
-flesher
-fleshful
-fleshhood
-fleshhook
-fleshiness
-fleshing
-fleshings
-fleshless
-fleshlike
-fleshlily
-fleshliness
-fleshly
-fleshment
-fleshmonger
-fleshpot
-fleshy
-flet
-Fleta
-fletch
-Fletcher
-fletcher
-Fletcherism
-Fletcherite
-Fletcherize
-flether
-fleuret
-fleurettee
-fleuronnee
-fleury
-flew
-flewed
-flewit
-flews
-flex
-flexanimous
-flexed
-flexibility
-flexible
-flexibleness
-flexibly
-flexile
-flexility
-flexion
-flexionless
-flexor
-flexuose
-flexuosity
-flexuous
-flexuously
-flexuousness
-flexural
-flexure
-flexured
-fley
-fleyedly
-fleyedness
-fleyland
-fleysome
-flibbertigibbet
-flicflac
-flick
-flicker
-flickering
-flickeringly
-flickerproof
-flickertail
-flickery
-flicky
-flidder
-flier
-fligger
-flight
-flighted
-flighter
-flightful
-flightily
-flightiness
-flighting
-flightless
-flightshot
-flighty
-flimflam
-flimflammer
-flimflammery
-flimmer
-flimp
-flimsily
-flimsiness
-flimsy
-flinch
-flincher
-flinching
-flinchingly
-flinder
-Flindersia
-flindosa
-flindosy
-fling
-flinger
-flingy
-flinkite
-flint
-flinter
-flinthearted
-flintify
-flintily
-flintiness
-flintless
-flintlike
-flintlock
-flintwood
-flintwork
-flintworker
-flinty
-flioma
-flip
-flipe
-flipjack
-flippancy
-flippant
-flippantly
-flippantness
-flipper
-flipperling
-flippery
-flirt
-flirtable
-flirtation
-flirtational
-flirtationless
-flirtatious
-flirtatiously
-flirtatiousness
-flirter
-flirtigig
-flirting
-flirtingly
-flirtish
-flirtishness
-flirtling
-flirty
-flisk
-flisky
-flit
-flitch
-flitchen
-flite
-flitfold
-fliting
-flitter
-flitterbat
-flittermouse
-flittern
-flitting
-flittingly
-flitwite
-flivver
-flix
-flixweed
-Flo
-float
-floatability
-floatable
-floatage
-floatation
-floatative
-floatboard
-floater
-floatiness
-floating
-floatingly
-floative
-floatless
-floatmaker
-floatman
-floatplane
-floatsman
-floatstone
-floaty
-flob
-flobby
-floc
-floccillation
-floccipend
-floccose
-floccosely
-flocculable
-flocculant
-floccular
-flocculate
-flocculation
-flocculator
-floccule
-flocculence
-flocculency
-flocculent
-flocculently
-flocculose
-flocculus
-floccus
-flock
-flocker
-flocking
-flockless
-flocklike
-flockman
-flockmaster
-flockowner
-flockwise
-flocky
-flocoon
-flodge
-floe
-floeberg
-Floerkea
-floey
-flog
-floggable
-flogger
-flogging
-floggingly
-flogmaster
-flogster
-flokite
-flong
-flood
-floodable
-floodage
-floodboard
-floodcock
-flooded
-flooder
-floodgate
-flooding
-floodless
-floodlet
-floodlight
-floodlighting
-floodlike
-floodmark
-floodometer
-floodproof
-floodtime
-floodwater
-floodway
-floodwood
-floody
-floor
-floorage
-floorcloth
-floorer
-floorhead
-flooring
-floorless
-floorman
-floorwalker
-floorward
-floorway
-floorwise
-floozy
-flop
-flophouse
-flopover
-flopper
-floppers
-floppily
-floppiness
-floppy
-flopwing
-Flora
-flora
-floral
-Floralia
-floralize
-florally
-floramor
-floran
-florate
-floreal
-floreate
-Florence
-florence
-florent
-Florentine
-Florentinism
-florentium
-flores
-florescence
-florescent
-floressence
-floret
-floreted
-floretum
-Floria
-Florian
-floriate
-floriated
-floriation
-florican
-floricin
-floricultural
-floriculturally
-floriculture
-floriculturist
-florid
-Florida
-Floridan
-Florideae
-floridean
-florideous
-Floridian
-floridity
-floridly
-floridness
-floriferous
-floriferously
-floriferousness
-florification
-floriform
-florigen
-florigenic
-florigraphy
-florikan
-floriken
-florilegium
-florimania
-florimanist
-florin
-Florinda
-floriparous
-floripondio
-floriscope
-Florissant
-florist
-floristic
-floristically
-floristics
-floristry
-florisugent
-florivorous
-floroon
-floroscope
-florula
-florulent
-flory
-floscular
-Floscularia
-floscularian
-Flosculariidae
-floscule
-flosculose
-flosculous
-flosh
-floss
-flosser
-flossflower
-Flossie
-flossification
-flossing
-flossy
-flot
-flota
-flotage
-flotant
-flotation
-flotative
-flotilla
-flotorial
-flotsam
-flounce
-flouncey
-flouncing
-flounder
-floundering
-flounderingly
-flour
-flourish
-flourishable
-flourisher
-flourishing
-flourishingly
-flourishment
-flourishy
-flourlike
-floury
-flouse
-flout
-flouter
-flouting
-floutingly
-flow
-flowable
-flowage
-flower
-flowerage
-flowered
-flowerer
-floweret
-flowerful
-flowerily
-floweriness
-flowering
-flowerist
-flowerless
-flowerlessness
-flowerlet
-flowerlike
-flowerpecker
-flowerpot
-flowerwork
-flowery
-flowing
-flowingly
-flowingness
-flowmanostat
-flowmeter
-flown
-flowoff
-Floyd
-flu
-fluate
-fluavil
-flub
-flubdub
-flubdubbery
-flucan
-fluctiferous
-fluctigerous
-fluctisonant
-fluctisonous
-fluctuability
-fluctuable
-fluctuant
-fluctuate
-fluctuation
-fluctuosity
-fluctuous
-flue
-flued
-flueless
-fluellen
-fluellite
-flueman
-fluency
-fluent
-fluently
-fluentness
-fluer
-fluework
-fluey
-fluff
-fluffer
-fluffily
-fluffiness
-fluffy
-Flugelhorn
-flugelman
-fluible
-fluid
-fluidacetextract
-fluidal
-fluidally
-fluidextract
-fluidglycerate
-fluidible
-fluidic
-fluidification
-fluidifier
-fluidify
-fluidimeter
-fluidism
-fluidist
-fluidity
-fluidization
-fluidize
-fluidly
-fluidness
-fluidram
-fluigram
-fluitant
-fluke
-fluked
-flukeless
-flukeworm
-flukewort
-flukily
-flukiness
-fluking
-fluky
-flumdiddle
-flume
-flumerin
-fluminose
-flummadiddle
-flummer
-flummery
-flummox
-flummydiddle
-flump
-flung
-flunk
-flunker
-flunkeydom
-flunkeyhood
-flunkeyish
-flunkeyize
-flunky
-flunkydom
-flunkyhood
-flunkyish
-flunkyism
-flunkyistic
-flunkyite
-flunkyize
-fluoaluminate
-fluoaluminic
-fluoarsenate
-fluoborate
-fluoboric
-fluoborid
-fluoboride
-fluoborite
-fluobromide
-fluocarbonate
-fluocerine
-fluocerite
-fluochloride
-fluohydric
-fluophosphate
-fluor
-fluoran
-fluoranthene
-fluorapatite
-fluorate
-fluorbenzene
-fluorene
-fluorenyl
-fluoresage
-fluoresce
-fluorescein
-fluorescence
-fluorescent
-fluorescigenic
-fluorescigenous
-fluorescin
-fluorhydric
-fluoric
-fluoridate
-fluoridation
-fluoride
-fluoridization
-fluoridize
-fluorimeter
-fluorinate
-fluorination
-fluorindine
-fluorine
-fluorite
-fluormeter
-fluorobenzene
-fluoroborate
-fluoroform
-fluoroformol
-fluorogen
-fluorogenic
-fluorography
-fluoroid
-fluorometer
-fluoroscope
-fluoroscopic
-fluoroscopy
-fluorosis
-fluorotype
-fluorspar
-fluoryl
-fluosilicate
-fluosilicic
-fluotantalate
-fluotantalic
-fluotitanate
-fluotitanic
-fluozirconic
-flurn
-flurr
-flurried
-flurriedly
-flurriment
-flurry
-flush
-flushboard
-flusher
-flusherman
-flushgate
-flushing
-flushingly
-flushness
-flushy
-flusk
-flusker
-fluster
-flusterate
-flusteration
-flusterer
-flusterment
-flustery
-Flustra
-flustrine
-flustroid
-flustrum
-flute
-flutebird
-fluted
-flutelike
-flutemouth
-fluter
-flutework
-Flutidae
-flutina
-fluting
-flutist
-flutter
-flutterable
-flutteration
-flutterer
-fluttering
-flutteringly
-flutterless
-flutterment
-fluttersome
-fluttery
-fluty
-fluvial
-fluvialist
-fluviatic
-fluviatile
-fluvicoline
-fluvioglacial
-fluviograph
-fluviolacustrine
-fluviology
-fluviomarine
-fluviometer
-fluviose
-fluvioterrestrial
-fluviovolcanic
-flux
-fluxation
-fluxer
-fluxibility
-fluxible
-fluxibleness
-fluxibly
-fluxile
-fluxility
-fluxion
-fluxional
-fluxionally
-fluxionary
-fluxionist
-fluxmeter
-fluxroot
-fluxweed
-fly
-flyable
-flyaway
-flyback
-flyball
-flybane
-flybelt
-flyblow
-flyblown
-flyboat
-flyboy
-flycatcher
-flyeater
-flyer
-flyflap
-flyflapper
-flyflower
-flying
-flyingly
-flyleaf
-flyless
-flyman
-flyness
-flypaper
-flype
-flyproof
-Flysch
-flyspeck
-flytail
-flytier
-flytrap
-flyway
-flyweight
-flywheel
-flywinch
-flywort
-Fo
-foal
-foalfoot
-foalhood
-foaly
-foam
-foambow
-foamer
-foamflower
-foamily
-foaminess
-foaming
-foamingly
-foamless
-foamlike
-foamy
-fob
-focal
-focalization
-focalize
-focally
-focaloid
-foci
-focimeter
-focimetry
-focoids
-focometer
-focometry
-focsle
-focus
-focusable
-focuser
-focusless
-fod
-fodda
-fodder
-fodderer
-foddering
-fodderless
-foder
-fodge
-fodgel
-fodient
-Fodientia
-foe
-foehn
-foehnlike
-foeish
-foeless
-foelike
-foeman
-foemanship
-Foeniculum
-foenngreek
-foeship
-foetalization
-fog
-fogbound
-fogbow
-fogdog
-fogdom
-fogeater
-fogey
-fogfruit
-foggage
-fogged
-fogger
-foggily
-fogginess
-foggish
-foggy
-foghorn
-fogle
-fogless
-fogman
-fogo
-fogon
-fogou
-fogproof
-fogram
-fogramite
-fogramity
-fogscoffer
-fogus
-fogy
-fogydom
-fogyish
-fogyism
-fohat
-foible
-foil
-foilable
-foiler
-foiling
-foilsman
-foining
-foiningly
-Foism
-foison
-foisonless
-Foist
-foist
-foister
-foistiness
-foisty
-foiter
-Fokker
-fold
-foldable
-foldage
-foldboat
-foldcourse
-folded
-foldedly
-folden
-folder
-folding
-foldless
-foldskirt
-foldure
-foldwards
-foldy
-fole
-folgerite
-folia
-foliaceous
-foliaceousness
-foliage
-foliaged
-foliageous
-folial
-foliar
-foliary
-foliate
-foliated
-foliation
-foliature
-folie
-foliicolous
-foliiferous
-foliiform
-folio
-foliobranch
-foliobranchiate
-foliocellosis
-foliolate
-foliole
-folioliferous
-foliolose
-foliose
-foliosity
-foliot
-folious
-foliously
-folium
-folk
-folkcraft
-folkfree
-folkland
-folklore
-folkloric
-folklorish
-folklorism
-folklorist
-folkloristic
-folkmoot
-folkmooter
-folkmot
-folkmote
-folkmoter
-folkright
-folksiness
-folksy
-Folkvang
-Folkvangr
-folkway
-folky
-folles
-folletage
-follicle
-follicular
-folliculate
-folliculated
-follicule
-folliculin
-Folliculina
-folliculitis
-folliculose
-folliculosis
-folliculous
-folliful
-follis
-follow
-followable
-follower
-followership
-following
-followingly
-folly
-follyproof
-Fomalhaut
-foment
-fomentation
-fomenter
-fomes
-fomites
-Fon
-fondak
-fondant
-fondish
-fondle
-fondler
-fondlesome
-fondlike
-fondling
-fondlingly
-fondly
-fondness
-fondu
-fondue
-fonduk
-fonly
-fonnish
-fono
-fons
-font
-Fontainea
-fontal
-fontally
-fontanel
-fontange
-fonted
-fontful
-fonticulus
-fontinal
-Fontinalaceae
-fontinalaceous
-Fontinalis
-fontlet
-foo
-Foochow
-Foochowese
-food
-fooder
-foodful
-foodless
-foodlessness
-foodstuff
-foody
-foofaraw
-fool
-fooldom
-foolery
-fooless
-foolfish
-foolhardihood
-foolhardily
-foolhardiness
-foolhardiship
-foolhardy
-fooling
-foolish
-foolishly
-foolishness
-foollike
-foolocracy
-foolproof
-foolproofness
-foolscap
-foolship
-fooner
-fooster
-foosterer
-foot
-footage
-footback
-football
-footballer
-footballist
-footband
-footblower
-footboard
-footboy
-footbreadth
-footbridge
-footcloth
-footed
-footeite
-footer
-footfall
-footfarer
-footfault
-footfolk
-footful
-footganger
-footgear
-footgeld
-foothalt
-foothill
-foothold
-foothook
-foothot
-footing
-footingly
-footings
-footle
-footler
-footless
-footlicker
-footlight
-footlights
-footling
-footlining
-footlock
-footmaker
-footman
-footmanhood
-footmanry
-footmanship
-footmark
-footnote
-footnoted
-footpace
-footpad
-footpaddery
-footpath
-footpick
-footplate
-footprint
-footrail
-footrest
-footrill
-footroom
-footrope
-foots
-footscald
-footslog
-footslogger
-footsore
-footsoreness
-footstalk
-footstall
-footstep
-footstick
-footstock
-footstone
-footstool
-footwalk
-footwall
-footway
-footwear
-footwork
-footworn
-footy
-fooyoung
-foozle
-foozler
-fop
-fopling
-foppery
-foppish
-foppishly
-foppishness
-foppy
-fopship
-For
-for
-fora
-forage
-foragement
-forager
-foralite
-foramen
-foraminated
-foramination
-foraminifer
-Foraminifera
-foraminiferal
-foraminiferan
-foraminiferous
-foraminose
-foraminous
-foraminulate
-foraminule
-foraminulose
-foraminulous
-forane
-foraneen
-foraneous
-forasmuch
-foray
-forayer
-forb
-forbade
-forbar
-forbathe
-forbear
-forbearable
-forbearance
-forbearant
-forbearantly
-forbearer
-forbearing
-forbearingly
-forbearingness
-forbesite
-forbid
-forbiddable
-forbiddal
-forbiddance
-forbidden
-forbiddenly
-forbiddenness
-forbidder
-forbidding
-forbiddingly
-forbiddingness
-forbit
-forbled
-forblow
-forbore
-forborne
-forbow
-forby
-force
-forceable
-forced
-forcedly
-forcedness
-forceful
-forcefully
-forcefulness
-forceless
-forcemeat
-forcement
-forceps
-forcepslike
-forcer
-forchase
-forche
-forcibility
-forcible
-forcibleness
-forcibly
-forcing
-forcingly
-forcipate
-forcipated
-forcipes
-forcipiform
-forcipressure
-Forcipulata
-forcipulate
-forcleave
-forconceit
-ford
-fordable
-fordableness
-fordays
-Fordicidia
-fording
-fordless
-fordo
-fordone
-fordwine
-fordy
-fore
-foreaccounting
-foreaccustom
-foreacquaint
-foreact
-foreadapt
-foreadmonish
-foreadvertise
-foreadvice
-foreadvise
-foreallege
-foreallot
-foreannounce
-foreannouncement
-foreanswer
-foreappoint
-foreappointment
-forearm
-foreassign
-foreassurance
-forebackwardly
-forebay
-forebear
-forebemoan
-forebemoaned
-forebespeak
-forebitt
-forebitten
-forebitter
-forebless
-foreboard
-forebode
-forebodement
-foreboder
-foreboding
-forebodingly
-forebodingness
-forebody
-foreboot
-forebowels
-forebowline
-forebrace
-forebrain
-forebreast
-forebridge
-foreburton
-forebush
-forecar
-forecarriage
-forecast
-forecaster
-forecasting
-forecastingly
-forecastle
-forecastlehead
-forecastleman
-forecatching
-forecatharping
-forechamber
-forechase
-forechoice
-forechoose
-forechurch
-forecited
-foreclaw
-foreclosable
-foreclose
-foreclosure
-forecome
-forecomingness
-forecommend
-foreconceive
-foreconclude
-forecondemn
-foreconscious
-foreconsent
-foreconsider
-forecontrive
-forecool
-forecooler
-forecounsel
-forecount
-forecourse
-forecourt
-forecover
-forecovert
-foredate
-foredawn
-foreday
-foredeck
-foredeclare
-foredecree
-foredeep
-foredefeated
-foredefine
-foredenounce
-foredescribe
-foredeserved
-foredesign
-foredesignment
-foredesk
-foredestine
-foredestiny
-foredetermination
-foredetermine
-foredevised
-foredevote
-forediscern
-foredispose
-foredivine
-foredone
-foredoom
-foredoomer
-foredoor
-foreface
-forefather
-forefatherly
-forefault
-forefeel
-forefeeling
-forefeelingly
-forefelt
-forefield
-forefigure
-forefin
-forefinger
-forefit
-foreflank
-foreflap
-foreflipper
-forefoot
-forefront
-foregallery
-foregame
-foreganger
-foregate
-foregift
-foregirth
-foreglance
-foregleam
-foreglimpse
-foreglow
-forego
-foregoer
-foregoing
-foregone
-foregoneness
-foreground
-foreguess
-foreguidance
-forehalf
-forehall
-forehammer
-forehand
-forehanded
-forehandedness
-forehandsel
-forehard
-forehatch
-forehatchway
-forehead
-foreheaded
-forehear
-forehearth
-foreheater
-forehill
-forehinting
-forehold
-forehood
-forehoof
-forehook
-foreign
-foreigneering
-foreigner
-foreignership
-foreignism
-foreignization
-foreignize
-foreignly
-foreignness
-foreimagination
-foreimagine
-foreimpressed
-foreimpression
-foreinclined
-foreinstruct
-foreintend
-foreiron
-forejudge
-forejudgment
-forekeel
-foreking
-foreknee
-foreknow
-foreknowable
-foreknower
-foreknowing
-foreknowingly
-foreknowledge
-forel
-forelady
-foreland
-forelay
-foreleech
-foreleg
-forelimb
-forelive
-forellenstein
-forelock
-forelook
-foreloop
-forelooper
-foreloper
-foremade
-foreman
-foremanship
-foremarch
-foremark
-foremartyr
-foremast
-foremasthand
-foremastman
-foremean
-foremeant
-foremelt
-foremention
-forementioned
-foremessenger
-foremilk
-foremisgiving
-foremistress
-foremost
-foremostly
-foremother
-forename
-forenamed
-forenews
-forenight
-forenoon
-forenote
-forenoted
-forenotice
-forenotion
-forensal
-forensic
-forensical
-forensicality
-forensically
-foreordain
-foreordainment
-foreorder
-foreordinate
-foreordination
-foreorlop
-forepad
-forepale
-foreparents
-forepart
-forepassed
-forepast
-forepaw
-forepayment
-forepeak
-foreperiod
-forepiece
-foreplace
-foreplan
-foreplanting
-forepole
-foreporch
-forepossessed
-forepost
-forepredicament
-forepreparation
-foreprepare
-forepretended
-foreproduct
-foreproffer
-forepromise
-forepromised
-foreprovided
-foreprovision
-forepurpose
-forequarter
-forequoted
-foreran
-forerank
-forereach
-forereaching
-foreread
-forereading
-forerecited
-forereckon
-forerehearsed
-foreremembered
-forereport
-forerequest
-forerevelation
-forerib
-forerigging
-foreright
-foreroom
-foreroyal
-forerun
-forerunner
-forerunnership
-forerunnings
-foresaddle
-foresaid
-foresail
-foresay
-forescene
-forescent
-foreschool
-foreschooling
-forescript
-foreseason
-foreseat
-foresee
-foreseeability
-foreseeable
-foreseeingly
-foreseer
-foreseize
-foresend
-foresense
-foresentence
-foreset
-foresettle
-foresettled
-foreshadow
-foreshadower
-foreshaft
-foreshank
-foreshape
-foresheet
-foreshift
-foreship
-foreshock
-foreshoe
-foreshop
-foreshore
-foreshorten
-foreshortening
-foreshot
-foreshoulder
-foreshow
-foreshower
-foreshroud
-foreside
-foresight
-foresighted
-foresightedness
-foresightful
-foresightless
-foresign
-foresignify
-foresin
-foresing
-foresinger
-foreskin
-foreskirt
-foresleeve
-foresound
-forespeak
-forespecified
-forespeed
-forespencer
-forest
-forestaff
-forestage
-forestair
-forestal
-forestall
-forestaller
-forestallment
-forestarling
-forestate
-forestation
-forestay
-forestaysail
-forestcraft
-forested
-foresteep
-forestem
-forestep
-forester
-forestership
-forestful
-forestial
-Forestian
-forestick
-Forestiera
-forestine
-forestish
-forestless
-forestlike
-forestology
-forestral
-forestress
-forestry
-forestside
-forestudy
-forestwards
-foresty
-foresummer
-foresummon
-foresweat
-foretack
-foretackle
-foretalk
-foretalking
-foretaste
-foretaster
-foretell
-foretellable
-foreteller
-forethink
-forethinker
-forethought
-forethoughted
-forethoughtful
-forethoughtfully
-forethoughtfulness
-forethoughtless
-forethrift
-foretime
-foretimed
-foretoken
-foretold
-foretop
-foretopman
-foretrace
-foretrysail
-foreturn
-foretype
-foretypified
-foreuse
-foreutter
-forevalue
-forever
-forevermore
-foreview
-forevision
-forevouch
-forevouched
-forevow
-forewarm
-forewarmer
-forewarn
-forewarner
-forewarning
-forewarningly
-forewaters
-foreween
-foreweep
-foreweigh
-forewing
-forewinning
-forewisdom
-forewish
-forewoman
-forewonted
-foreword
-foreworld
-foreworn
-forewritten
-forewrought
-foreyard
-foreyear
-forfairn
-forfar
-forfare
-forfars
-forfault
-forfaulture
-forfeit
-forfeiter
-forfeits
-forfeiture
-forfend
-forficate
-forficated
-forfication
-forficiform
-Forficula
-forficulate
-Forficulidae
-forfouchten
-forfoughen
-forfoughten
-forgainst
-forgather
-forge
-forgeability
-forgeable
-forged
-forgedly
-forgeful
-forgeman
-forger
-forgery
-forget
-forgetful
-forgetfully
-forgetfulness
-forgetive
-forgetness
-forgettable
-forgetter
-forgetting
-forgettingly
-forgie
-forging
-forgivable
-forgivableness
-forgivably
-forgive
-forgiveless
-forgiveness
-forgiver
-forgiving
-forgivingly
-forgivingness
-forgo
-forgoer
-forgot
-forgotten
-forgottenness
-forgrow
-forgrown
-forhoo
-forhooy
-forhow
-forinsec
-forint
-forisfamiliate
-forisfamiliation
-forjesket
-forjudge
-forjudger
-fork
-forkable
-forkbeard
-forked
-forkedly
-forkedness
-forker
-forkful
-forkhead
-forkiness
-forkless
-forklike
-forkman
-forksmith
-forktail
-forkwise
-forky
-forleft
-forlet
-forlorn
-forlornity
-forlornly
-forlornness
-form
-formability
-formable
-formably
-formagen
-formagenic
-formal
-formalazine
-formaldehyde
-formaldehydesulphoxylate
-formaldehydesulphoxylic
-formaldoxime
-formalesque
-Formalin
-formalism
-formalist
-formalistic
-formalith
-formality
-formalization
-formalize
-formalizer
-formally
-formalness
-formamide
-formamidine
-formamido
-formamidoxime
-formanilide
-formant
-format
-formate
-formation
-formational
-formative
-formatively
-formativeness
-formature
-formazyl
-forme
-formed
-formedon
-formee
-formel
-formene
-formenic
-former
-formeret
-formerly
-formerness
-formful
-formiate
-formic
-Formica
-formican
-Formicariae
-formicarian
-Formicariidae
-formicarioid
-formicarium
-formicaroid
-formicary
-formicate
-formication
-formicative
-formicicide
-formicid
-Formicidae
-formicide
-Formicina
-Formicinae
-formicine
-Formicivora
-formicivorous
-Formicoidea
-formidability
-formidable
-formidableness
-formidably
-formin
-forminate
-forming
-formless
-formlessly
-formlessness
-Formol
-formolite
-formonitrile
-Formosan
-formose
-formoxime
-formula
-formulable
-formulae
-formulaic
-formular
-formularism
-formularist
-formularistic
-formularization
-formularize
-formulary
-formulate
-formulation
-formulator
-formulatory
-formule
-formulism
-formulist
-formulistic
-formulization
-formulize
-formulizer
-formwork
-formy
-formyl
-formylal
-formylate
-formylation
-fornacic
-Fornax
-fornaxid
-fornenst
-fornent
-fornical
-fornicate
-fornicated
-fornication
-fornicator
-fornicatress
-fornicatrix
-forniciform
-forninst
-fornix
-forpet
-forpine
-forpit
-forprise
-forrad
-forrard
-forride
-forrit
-forritsome
-forrue
-forsake
-forsaken
-forsakenly
-forsakenness
-forsaker
-forset
-forslow
-forsooth
-forspeak
-forspend
-forspread
-Forst
-forsterite
-forswear
-forswearer
-forsworn
-forswornness
-Forsythia
-fort
-fortalice
-forte
-fortescue
-fortescure
-forth
-forthbring
-forthbringer
-forthcome
-forthcomer
-forthcoming
-forthcomingness
-forthcut
-forthfare
-forthfigured
-forthgaze
-forthgo
-forthgoing
-forthink
-forthputting
-forthright
-forthrightly
-forthrightness
-forthrights
-forthtell
-forthteller
-forthwith
-forthy
-forties
-fortieth
-fortifiable
-fortification
-fortifier
-fortify
-fortifying
-fortifyingly
-fortin
-fortis
-fortissimo
-fortitude
-fortitudinous
-fortlet
-fortnight
-fortnightly
-fortravail
-fortread
-fortress
-fortuitism
-fortuitist
-fortuitous
-fortuitously
-fortuitousness
-fortuity
-fortunate
-fortunately
-fortunateness
-fortune
-fortuned
-fortuneless
-Fortunella
-fortunetell
-fortuneteller
-fortunetelling
-fortunite
-forty
-fortyfold
-forum
-forumize
-forwander
-forward
-forwardal
-forwardation
-forwarder
-forwarding
-forwardly
-forwardness
-forwards
-forwean
-forweend
-forwent
-forwoden
-forworden
-fosh
-fosie
-Fosite
-fossa
-fossage
-fossane
-fossarian
-fosse
-fossed
-fossette
-fossick
-fossicker
-fossiform
-fossil
-fossilage
-fossilated
-fossilation
-fossildom
-fossiled
-fossiliferous
-fossilification
-fossilify
-fossilism
-fossilist
-fossilizable
-fossilization
-fossilize
-fossillike
-fossilogist
-fossilogy
-fossilological
-fossilologist
-fossilology
-fossor
-Fossores
-Fossoria
-fossorial
-fossorious
-fossula
-fossulate
-fossule
-fossulet
-fostell
-Foster
-foster
-fosterable
-fosterage
-fosterer
-fosterhood
-fostering
-fosteringly
-fosterite
-fosterland
-fosterling
-fostership
-fostress
-fot
-fotch
-fother
-Fothergilla
-fotmal
-fotui
-fou
-foud
-foudroyant
-fouette
-fougade
-fougasse
-fought
-foughten
-foughty
-foujdar
-foujdary
-foul
-foulage
-foulard
-fouler
-fouling
-foulish
-foully
-foulmouthed
-foulmouthedly
-foulmouthedness
-foulness
-foulsome
-foumart
-foun
-found
-foundation
-foundational
-foundationally
-foundationary
-foundationed
-foundationer
-foundationless
-foundationlessness
-founder
-founderous
-foundership
-foundery
-founding
-foundling
-foundress
-foundry
-foundryman
-fount
-fountain
-fountained
-fountaineer
-fountainhead
-fountainless
-fountainlet
-fountainous
-fountainously
-fountainwise
-fountful
-Fouquieria
-Fouquieriaceae
-fouquieriaceous
-four
-fourble
-fourche
-fourchee
-fourcher
-fourchette
-fourchite
-fourer
-fourflusher
-fourfold
-Fourierian
-Fourierism
-Fourierist
-Fourieristic
-Fourierite
-fourling
-fourpence
-fourpenny
-fourpounder
-fourre
-fourrier
-fourscore
-foursome
-foursquare
-foursquarely
-foursquareness
-fourstrand
-fourteen
-fourteener
-fourteenfold
-fourteenth
-fourteenthly
-fourth
-fourther
-fourthly
-foussa
-foute
-fouter
-fouth
-fovea
-foveal
-foveate
-foveated
-foveation
-foveiform
-foveola
-foveolarious
-foveolate
-foveolated
-foveole
-foveolet
-fow
-fowk
-fowl
-fowler
-fowlerite
-fowlery
-fowlfoot
-fowling
-fox
-foxbane
-foxberry
-foxchop
-foxer
-foxery
-foxfeet
-foxfinger
-foxfish
-foxglove
-foxhole
-foxhound
-foxily
-foxiness
-foxing
-foxish
-foxlike
-foxproof
-foxship
-foxskin
-foxtail
-foxtailed
-foxtongue
-foxwood
-foxy
-foy
-foyaite
-foyaitic
-foyboat
-foyer
-foziness
-fozy
-fra
-frab
-frabbit
-frabjous
-frabjously
-frabous
-fracas
-fracedinous
-frache
-frack
-fractable
-fractabling
-fracted
-Fracticipita
-fractile
-fraction
-fractional
-fractionalism
-fractionalize
-fractionally
-fractionary
-fractionate
-fractionating
-fractionation
-fractionator
-fractionization
-fractionize
-fractionlet
-fractious
-fractiously
-fractiousness
-fractocumulus
-fractonimbus
-fractostratus
-fractuosity
-fracturable
-fractural
-fracture
-fractureproof
-frae
-Fragaria
-fraghan
-Fragilaria
-Fragilariaceae
-fragile
-fragilely
-fragileness
-fragility
-fragment
-fragmental
-fragmentally
-fragmentarily
-fragmentariness
-fragmentary
-fragmentation
-fragmented
-fragmentist
-fragmentitious
-fragmentize
-fragrance
-fragrancy
-fragrant
-fragrantly
-fragrantness
-fraid
-fraik
-frail
-frailejon
-frailish
-frailly
-frailness
-frailty
-fraise
-fraiser
-Fram
-framable
-framableness
-frambesia
-frame
-framea
-frameable
-frameableness
-framed
-frameless
-framer
-framesmith
-framework
-framing
-frammit
-frampler
-frampold
-franc
-Frances
-franchisal
-franchise
-franchisement
-franchiser
-Francic
-Francis
-francisc
-francisca
-Franciscan
-Franciscanism
-Francisco
-francium
-Francize
-franco
-Francois
-francolin
-francolite
-Francomania
-Franconian
-Francophile
-Francophilism
-Francophobe
-Francophobia
-frangent
-Frangi
-frangibility
-frangible
-frangibleness
-frangipane
-frangipani
-frangula
-Frangulaceae
-frangulic
-frangulin
-frangulinic
-Frank
-frank
-frankability
-frankable
-frankalmoign
-Frankenia
-Frankeniaceae
-frankeniaceous
-Frankenstein
-franker
-frankfurter
-frankhearted
-frankheartedly
-frankheartedness
-Frankify
-frankincense
-frankincensed
-franking
-Frankish
-Frankist
-franklandite
-Franklin
-franklin
-Franklinia
-Franklinian
-Frankliniana
-Franklinic
-Franklinism
-Franklinist
-franklinite
-Franklinization
-frankly
-frankmarriage
-frankness
-frankpledge
-frantic
-frantically
-franticly
-franticness
-franzy
-frap
-frappe
-frapping
-frasco
-frase
-Frasera
-frasier
-frass
-frat
-fratch
-fratched
-fratcheous
-fratcher
-fratchety
-fratchy
-frater
-Fratercula
-fraternal
-fraternalism
-fraternalist
-fraternality
-fraternally
-fraternate
-fraternation
-fraternism
-fraternity
-fraternization
-fraternize
-fraternizer
-fratery
-Fraticelli
-Fraticellian
-fratority
-Fratricelli
-fratricidal
-fratricide
-fratry
-fraud
-fraudful
-fraudfully
-fraudless
-fraudlessly
-fraudlessness
-fraudproof
-fraudulence
-fraudulency
-fraudulent
-fraudulently
-fraudulentness
-fraughan
-fraught
-frawn
-fraxetin
-fraxin
-fraxinella
-Fraxinus
-fray
-frayed
-frayedly
-frayedness
-fraying
-frayn
-frayproof
-fraze
-frazer
-frazil
-frazzle
-frazzling
-freak
-freakdom
-freakery
-freakful
-freakily
-freakiness
-freakish
-freakishly
-freakishness
-freaky
-fream
-freath
-freck
-frecken
-freckened
-frecket
-freckle
-freckled
-freckledness
-freckleproof
-freckling
-frecklish
-freckly
-Fred
-Freddie
-Freddy
-Frederic
-Frederica
-Frederick
-frederik
-fredricite
-free
-freeboard
-freeboot
-freebooter
-freebootery
-freebooting
-freeborn
-Freechurchism
-freed
-freedman
-freedom
-freedwoman
-freehand
-freehanded
-freehandedly
-freehandedness
-freehearted
-freeheartedly
-freeheartedness
-freehold
-freeholder
-freeholdership
-freeholding
-freeing
-freeish
-Freekirker
-freelage
-freeloving
-freelovism
-freely
-freeman
-freemanship
-freemartin
-freemason
-freemasonic
-freemasonical
-freemasonism
-freemasonry
-freeness
-freer
-Freesia
-freesilverism
-freesilverite
-freestanding
-freestone
-freet
-freethinker
-freethinking
-freetrader
-freety
-freeward
-freeway
-freewheel
-freewheeler
-freewheeling
-freewill
-freewoman
-freezable
-freeze
-freezer
-freezing
-freezingly
-Fregata
-Fregatae
-Fregatidae
-freibergite
-freieslebenite
-freight
-freightage
-freighter
-freightless
-freightment
-freir
-freit
-freity
-fremd
-fremdly
-fremdness
-fremescence
-fremescent
-fremitus
-Fremontia
-Fremontodendron
-frenal
-Frenatae
-frenate
-French
-frenched
-Frenchification
-frenchification
-Frenchify
-frenchify
-Frenchily
-Frenchiness
-frenching
-Frenchism
-Frenchize
-Frenchless
-Frenchly
-Frenchman
-Frenchness
-Frenchwise
-Frenchwoman
-Frenchy
-frenetic
-frenetical
-frenetically
-Frenghi
-frenular
-frenulum
-frenum
-frenzelite
-frenzied
-frenziedly
-frenzy
-Freon
-frequence
-frequency
-frequent
-frequentable
-frequentage
-frequentation
-frequentative
-frequenter
-frequently
-frequentness
-frescade
-fresco
-frescoer
-frescoist
-fresh
-freshen
-freshener
-freshet
-freshhearted
-freshish
-freshly
-freshman
-freshmanhood
-freshmanic
-freshmanship
-freshness
-freshwoman
-Fresison
-fresnel
-fresno
-fret
-fretful
-fretfully
-fretfulness
-fretless
-fretsome
-frett
-frettage
-frettation
-frette
-fretted
-fretter
-fretting
-frettingly
-fretty
-fretum
-fretways
-fretwise
-fretwork
-fretworked
-Freudian
-Freudianism
-Freudism
-Freudist
-Freya
-freyalite
-Freycinetia
-Freyja
-Freyr
-friability
-friable
-friableness
-friand
-friandise
-friar
-friarbird
-friarhood
-friarling
-friarly
-friary
-frib
-fribble
-fribbleism
-fribbler
-fribblery
-fribbling
-fribblish
-fribby
-fricandeau
-fricandel
-fricassee
-frication
-fricative
-fricatrice
-friction
-frictionable
-frictional
-frictionally
-frictionize
-frictionless
-frictionlessly
-frictionproof
-Friday
-Fridila
-fridstool
-fried
-Frieda
-friedcake
-friedelite
-friedrichsdor
-friend
-friended
-friendless
-friendlessness
-friendlike
-friendlily
-friendliness
-friendliwise
-friendly
-friendship
-frier
-frieseite
-Friesian
-Friesic
-Friesish
-frieze
-friezer
-friezy
-frig
-frigate
-frigatoon
-friggle
-fright
-frightable
-frighten
-frightenable
-frightened
-frightenedly
-frightenedness
-frightener
-frightening
-frighteningly
-frighter
-frightful
-frightfully
-frightfulness
-frightless
-frightment
-frighty
-frigid
-Frigidaire
-frigidarium
-frigidity
-frigidly
-frigidness
-frigiferous
-frigolabile
-frigoric
-frigorific
-frigorifical
-frigorify
-frigorimeter
-frigostable
-frigotherapy
-Frija
-frijol
-frijolillo
-frijolito
-frike
-frill
-frillback
-frilled
-friller
-frillery
-frillily
-frilliness
-frilling
-frilly
-frim
-Frimaire
-fringe
-fringed
-fringeflower
-fringeless
-fringelet
-fringent
-fringepod
-Fringetail
-Fringilla
-fringillaceous
-Fringillidae
-fringilliform
-Fringilliformes
-fringilline
-fringilloid
-fringing
-fringy
-fripperer
-frippery
-frisca
-Frisesomorum
-frisette
-Frisian
-Frisii
-frisk
-frisker
-frisket
-friskful
-friskily
-friskiness
-frisking
-friskingly
-frisky
-frisolee
-frison
-frist
-frisure
-frit
-frith
-frithborh
-frithbot
-frithles
-frithsoken
-frithstool
-frithwork
-Fritillaria
-fritillary
-fritt
-fritter
-fritterer
-Fritz
-Friulian
-frivol
-frivoler
-frivolism
-frivolist
-frivolity
-frivolize
-frivolous
-frivolously
-frivolousness
-frixion
-friz
-frize
-frizer
-frizz
-frizzer
-frizzily
-frizziness
-frizzing
-frizzle
-frizzler
-frizzly
-frizzy
-fro
-frock
-frocking
-frockless
-frocklike
-frockmaker
-froe
-Froebelian
-Froebelism
-Froebelist
-frog
-frogbit
-frogeater
-frogeye
-frogface
-frogfish
-frogflower
-frogfoot
-frogged
-froggery
-frogginess
-frogging
-froggish
-froggy
-froghood
-froghopper
-frogland
-frogleaf
-frogleg
-froglet
-froglike
-frogling
-frogman
-frogmouth
-frognose
-frogskin
-frogstool
-frogtongue
-frogwort
-froise
-frolic
-frolicful
-frolicker
-frolicky
-frolicly
-frolicness
-frolicsome
-frolicsomely
-frolicsomeness
-from
-fromward
-fromwards
-frond
-frondage
-fronded
-frondent
-frondesce
-frondescence
-frondescent
-frondiferous
-frondiform
-frondigerous
-frondivorous
-frondlet
-frondose
-frondosely
-frondous
-front
-frontad
-frontage
-frontager
-frontal
-frontalis
-frontality
-frontally
-frontbencher
-fronted
-fronter
-frontier
-frontierlike
-frontierman
-frontiersman
-Frontignan
-fronting
-frontingly
-Frontirostria
-frontispiece
-frontless
-frontlessly
-frontlessness
-frontlet
-frontoauricular
-frontoethmoid
-frontogenesis
-frontolysis
-frontomallar
-frontomaxillary
-frontomental
-frontonasal
-frontooccipital
-frontoorbital
-frontoparietal
-frontopontine
-frontosphenoidal
-frontosquamosal
-frontotemporal
-frontozygomatic
-frontpiece
-frontsman
-frontstall
-frontward
-frontways
-frontwise
-froom
-frore
-frory
-frosh
-frost
-frostation
-frostbird
-frostbite
-frostbow
-frosted
-froster
-frostfish
-frostflower
-frostily
-frostiness
-frosting
-frostless
-frostlike
-frostproof
-frostproofing
-frostroot
-frostweed
-frostwork
-frostwort
-frosty
-frot
-froth
-frother
-Frothi
-frothily
-frothiness
-frothing
-frothless
-frothsome
-frothy
-frotton
-froufrou
-frough
-froughy
-frounce
-frounceless
-frow
-froward
-frowardly
-frowardness
-frower
-frowl
-frown
-frowner
-frownful
-frowning
-frowningly
-frownless
-frowny
-frowst
-frowstily
-frowstiness
-frowsty
-frowy
-frowze
-frowzily
-frowziness
-frowzled
-frowzly
-frowzy
-froze
-frozen
-frozenhearted
-frozenly
-frozenness
-fruchtschiefer
-fructed
-fructescence
-fructescent
-fructicultural
-fructiculture
-Fructidor
-fructiferous
-fructiferously
-fructification
-fructificative
-fructifier
-fructiform
-fructify
-fructiparous
-fructivorous
-fructose
-fructoside
-fructuary
-fructuosity
-fructuous
-fructuously
-fructuousness
-frugal
-frugalism
-frugalist
-frugality
-frugally
-frugalness
-fruggan
-Frugivora
-frugivorous
-fruit
-fruitade
-fruitage
-fruitarian
-fruitarianism
-fruitcake
-fruited
-fruiter
-fruiterer
-fruiteress
-fruitery
-fruitful
-fruitfullness
-fruitfully
-fruitgrower
-fruitgrowing
-fruitiness
-fruiting
-fruition
-fruitist
-fruitive
-fruitless
-fruitlessly
-fruitlessness
-fruitlet
-fruitling
-fruitstalk
-fruittime
-fruitwise
-fruitwoman
-fruitwood
-fruitworm
-fruity
-frumentaceous
-frumentarious
-frumentation
-frumenty
-frump
-frumpery
-frumpily
-frumpiness
-frumpish
-frumpishly
-frumpishness
-frumple
-frumpy
-frush
-frustrate
-frustrately
-frustrater
-frustration
-frustrative
-frustratory
-frustule
-frustulent
-frustulose
-frustum
-frutescence
-frutescent
-fruticetum
-fruticose
-fruticous
-fruticulose
-frutify
-fry
-fryer
-fu
-fub
-fubby
-fubsy
-Fucaceae
-fucaceous
-Fucales
-fucate
-fucation
-fucatious
-Fuchsia
-Fuchsian
-fuchsin
-fuchsine
-fuchsinophil
-fuchsinophilous
-fuchsite
-fuchsone
-fuci
-fucinita
-fuciphagous
-fucoid
-fucoidal
-Fucoideae
-fucosan
-fucose
-fucous
-fucoxanthin
-fucus
-fud
-fuddle
-fuddler
-fuder
-fudge
-fudger
-fudgy
-Fuegian
-fuel
-fueler
-fuelizer
-fuerte
-fuff
-fuffy
-fugacious
-fugaciously
-fugaciousness
-fugacity
-fugal
-fugally
-fuggy
-fugient
-fugitate
-fugitation
-fugitive
-fugitively
-fugitiveness
-fugitivism
-fugitivity
-fugle
-fugleman
-fuglemanship
-fugler
-fugu
-fugue
-fuguist
-fuidhir
-fuirdays
-Fuirena
-fuji
-Fulah
-fulciform
-fulcral
-fulcrate
-fulcrum
-fulcrumage
-fulfill
-fulfiller
-fulfillment
-Fulfulde
-fulgent
-fulgently
-fulgentness
-fulgid
-fulgide
-fulgidity
-fulgor
-Fulgora
-fulgorid
-Fulgoridae
-Fulgoroidea
-fulgorous
-Fulgur
-fulgural
-fulgurant
-fulgurantly
-fulgurata
-fulgurate
-fulgurating
-fulguration
-fulgurator
-fulgurite
-fulgurous
-fulham
-Fulica
-Fulicinae
-fulicine
-fuliginosity
-fuliginous
-fuliginously
-fuliginousness
-Fuligula
-Fuligulinae
-fuliguline
-fulk
-full
-fullam
-fullback
-fuller
-fullering
-fullery
-fullface
-fullhearted
-fulling
-fullish
-fullmouth
-fullmouthed
-fullmouthedly
-fullness
-fullom
-Fullonian
-fully
-fulmar
-Fulmarus
-fulmicotton
-fulminancy
-fulminant
-fulminate
-fulminating
-fulmination
-fulminator
-fulminatory
-fulmine
-fulmineous
-fulminic
-fulminous
-fulminurate
-fulminuric
-fulsome
-fulsomely
-fulsomeness
-fulth
-Fultz
-Fulup
-fulvene
-fulvescent
-fulvid
-fulvidness
-fulvous
-fulwa
-fulyie
-fulzie
-fum
-fumacious
-fumado
-fumage
-fumagine
-Fumago
-fumarate
-Fumaria
-Fumariaceae
-fumariaceous
-fumaric
-fumarine
-fumarium
-fumaroid
-fumaroidal
-fumarole
-fumarolic
-fumaryl
-fumatorium
-fumatory
-fumble
-fumbler
-fumbling
-fume
-fumeless
-fumer
-fumeroot
-fumet
-fumette
-fumewort
-fumiduct
-fumiferous
-fumigant
-fumigate
-fumigation
-fumigator
-fumigatorium
-fumigatory
-fumily
-fuminess
-fuming
-fumingly
-fumistery
-fumitory
-fumose
-fumosity
-fumous
-fumously
-fumy
-fun
-funambulate
-funambulation
-funambulator
-funambulatory
-funambulic
-funambulism
-funambulist
-funambulo
-Funaria
-Funariaceae
-funariaceous
-function
-functional
-functionalism
-functionalist
-functionality
-functionalize
-functionally
-functionarism
-functionary
-functionate
-functionation
-functionize
-functionless
-fund
-fundable
-fundal
-fundament
-fundamental
-fundamentalism
-fundamentalist
-fundamentality
-fundamentally
-fundamentalness
-fundatorial
-fundatrix
-funded
-funder
-fundholder
-fundi
-fundic
-fundiform
-funditor
-fundless
-fundmonger
-fundmongering
-funds
-Fundulinae
-funduline
-Fundulus
-fundungi
-fundus
-funebrial
-funeral
-funeralize
-funerary
-funereal
-funereally
-funest
-fungaceous
-fungal
-Fungales
-fungate
-fungation
-fungi
-Fungia
-fungian
-fungibility
-fungible
-fungic
-fungicidal
-fungicide
-fungicolous
-fungiferous
-fungiform
-fungilliform
-fungin
-fungistatic
-fungivorous
-fungo
-fungoid
-fungoidal
-fungological
-fungologist
-fungology
-fungose
-fungosity
-fungous
-fungus
-fungused
-funguslike
-fungusy
-funicle
-funicular
-funiculate
-funicule
-funiculitis
-funiculus
-funiform
-funipendulous
-funis
-Funje
-funk
-funker
-Funkia
-funkiness
-funky
-funmaker
-funmaking
-funnel
-funneled
-funnelform
-funnellike
-funnelwise
-funnily
-funniment
-funniness
-funny
-funnyman
-funori
-funt
-Funtumia
-Fur
-fur
-furacious
-furaciousness
-furacity
-fural
-furaldehyde
-furan
-furanoid
-furazan
-furazane
-furbelow
-furbish
-furbishable
-furbisher
-furbishment
-furca
-furcal
-furcate
-furcately
-furcation
-Furcellaria
-furcellate
-furciferine
-furciferous
-furciform
-Furcraea
-furcula
-furcular
-furculum
-furdel
-Furfooz
-furfur
-furfuraceous
-furfuraceously
-furfural
-furfuralcohol
-furfuraldehyde
-furfuramide
-furfuran
-furfuration
-furfurine
-furfuroid
-furfurole
-furfurous
-furfuryl
-furfurylidene
-furiant
-furibund
-furied
-Furies
-furify
-furil
-furilic
-furiosa
-furiosity
-furioso
-furious
-furiously
-furiousness
-furison
-furl
-furlable
-Furlan
-furler
-furless
-furlong
-furlough
-furnace
-furnacelike
-furnaceman
-furnacer
-furnacite
-furnage
-Furnariidae
-Furnariides
-Furnarius
-furner
-furnish
-furnishable
-furnished
-furnisher
-furnishing
-furnishment
-furniture
-furnitureless
-furodiazole
-furoic
-furoid
-furoin
-furole
-furomethyl
-furomonazole
-furor
-furore
-furphy
-furred
-furrier
-furriered
-furriery
-furrily
-furriness
-furring
-furrow
-furrower
-furrowless
-furrowlike
-furrowy
-furry
-furstone
-further
-furtherance
-furtherer
-furtherest
-furtherly
-furthermore
-furthermost
-furthersome
-furthest
-furtive
-furtively
-furtiveness
-Furud
-furuncle
-furuncular
-furunculoid
-furunculosis
-furunculous
-fury
-furyl
-furze
-furzechat
-furzed
-furzeling
-furzery
-furzetop
-furzy
-fusain
-fusarial
-fusariose
-fusariosis
-Fusarium
-fusarole
-fusate
-fusc
-fuscescent
-fuscin
-fuscohyaline
-fuscous
-fuse
-fuseboard
-fused
-fusee
-fuselage
-fuseplug
-fusht
-fusibility
-fusible
-fusibleness
-fusibly
-Fusicladium
-Fusicoccum
-fusiform
-Fusiformis
-fusil
-fusilier
-fusillade
-fusilly
-fusinist
-fusion
-fusional
-fusionism
-fusionist
-fusionless
-fusoid
-fuss
-fusser
-fussification
-fussify
-fussily
-fussiness
-fussock
-fussy
-fust
-fustanella
-fustee
-fusteric
-fustet
-fustian
-fustianish
-fustianist
-fustianize
-fustic
-fustigate
-fustigation
-fustigator
-fustigatory
-fustilugs
-fustily
-fustin
-fustiness
-fustle
-fusty
-Fusulina
-fusuma
-fusure
-Fusus
-fut
-futchel
-fute
-futhorc
-futile
-futilely
-futileness
-futilitarian
-futilitarianism
-futility
-futilize
-futtermassel
-futtock
-futural
-future
-futureless
-futureness
-futuric
-futurism
-futurist
-futuristic
-futurition
-futurity
-futurize
-futwa
-fuye
-fuze
-fuzz
-fuzzball
-fuzzily
-fuzziness
-fuzzy
-fyke
-fylfot
-fyrd
-G
-g
-Ga
-ga
-gab
-gabardine
-gabbard
-gabber
-gabble
-gabblement
-gabbler
-gabbro
-gabbroic
-gabbroid
-gabbroitic
-gabby
-Gabe
-gabelle
-gabelled
-gabelleman
-gabeller
-gaberdine
-gaberlunzie
-gabgab
-gabi
-gabion
-gabionade
-gabionage
-gabioned
-gablatores
-gable
-gableboard
-gablelike
-gablet
-gablewise
-gablock
-Gaboon
-Gabriel
-Gabriella
-Gabrielrache
-Gabunese
-gaby
-Gad
-gad
-Gadaba
-gadabout
-Gadarene
-Gadaria
-gadbee
-gadbush
-Gaddang
-gadded
-gadder
-Gaddi
-gaddi
-gadding
-gaddingly
-gaddish
-gaddishness
-gade
-gadfly
-gadge
-gadger
-gadget
-gadid
-Gadidae
-gadinine
-Gaditan
-gadling
-gadman
-gadoid
-Gadoidea
-gadolinia
-gadolinic
-gadolinite
-gadolinium
-gadroon
-gadroonage
-Gadsbodikins
-Gadsbud
-Gadslid
-gadsman
-Gadswoons
-gaduin
-Gadus
-gadwall
-Gadzooks
-Gael
-Gaeldom
-Gaelic
-Gaelicism
-Gaelicist
-Gaelicization
-Gaelicize
-Gaeltacht
-gaen
-Gaertnerian
-gaet
-Gaetulan
-Gaetuli
-Gaetulian
-gaff
-gaffe
-gaffer
-Gaffkya
-gaffle
-gaffsman
-gag
-gagate
-gage
-gageable
-gagee
-gageite
-gagelike
-gager
-gagership
-gagger
-gaggery
-gaggle
-gaggler
-gagman
-gagor
-gagroot
-gagtooth
-gahnite
-Gahrwali
-Gaia
-gaiassa
-Gaidropsaridae
-gaiety
-Gail
-Gaillardia
-gaily
-gain
-gainable
-gainage
-gainbirth
-gaincall
-gaincome
-gaine
-gainer
-gainful
-gainfully
-gainfulness
-gaining
-gainless
-gainlessness
-gainliness
-gainly
-gains
-gainsay
-gainsayer
-gainset
-gainsome
-gainspeaker
-gainspeaking
-gainst
-gainstrive
-gainturn
-gaintwist
-gainyield
-gair
-gairfish
-gaisling
-gait
-gaited
-gaiter
-gaiterless
-gaiting
-gaize
-gaj
-gal
-gala
-Galacaceae
-galactagogue
-galactagoguic
-galactan
-galactase
-galactemia
-galacthidrosis
-Galactia
-galactic
-galactidrosis
-galactite
-galactocele
-galactodendron
-galactodensimeter
-galactogenetic
-galactohemia
-galactoid
-galactolipide
-galactolipin
-galactolysis
-galactolytic
-galactoma
-galactometer
-galactometry
-galactonic
-galactopathy
-galactophagist
-galactophagous
-galactophlebitis
-galactophlysis
-galactophore
-galactophoritis
-galactophorous
-galactophthysis
-galactophygous
-galactopoiesis
-galactopoietic
-galactopyra
-galactorrhea
-galactorrhoea
-galactoscope
-galactose
-galactoside
-galactosis
-galactostasis
-galactosuria
-galactotherapy
-galactotrophy
-galacturia
-galagala
-Galaginae
-Galago
-galah
-galanas
-galanga
-galangin
-galant
-Galanthus
-galantine
-galany
-galapago
-Galatae
-galatea
-Galatian
-Galatic
-galatotrophic
-Galax
-galaxian
-Galaxias
-Galaxiidae
-galaxy
-galban
-galbanum
-Galbula
-Galbulae
-Galbulidae
-Galbulinae
-galbulus
-Galcha
-Galchic
-Gale
-gale
-galea
-galeage
-galeate
-galeated
-galee
-galeeny
-Galega
-galegine
-Galei
-galeid
-Galeidae
-galeiform
-galempung
-Galen
-galena
-Galenian
-Galenic
-galenic
-Galenical
-galenical
-Galenism
-Galenist
-galenite
-galenobismutite
-galenoid
-Galeodes
-Galeodidae
-galeoid
-Galeopithecus
-Galeopsis
-Galeorchis
-Galeorhinidae
-Galeorhinus
-galeproof
-galera
-galericulate
-galerum
-galerus
-Galesaurus
-galet
-Galeus
-galewort
-galey
-Galga
-galgal
-Galgulidae
-gali
-Galibi
-Galician
-Galictis
-Galidia
-Galidictis
-Galik
-Galilean
-galilee
-galimatias
-galingale
-Galinsoga
-galiongee
-galiot
-galipidine
-galipine
-galipoidin
-galipoidine
-galipoipin
-galipot
-Galium
-gall
-Galla
-galla
-gallacetophenone
-gallah
-gallanilide
-gallant
-gallantize
-gallantly
-gallantness
-gallantry
-gallate
-gallature
-gallberry
-gallbush
-galleass
-galled
-Gallegan
-gallein
-galleon
-galler
-Galleria
-gallerian
-galleried
-Galleriidae
-gallery
-gallerylike
-gallet
-galley
-galleylike
-galleyman
-galleyworm
-gallflower
-gallfly
-Galli
-galliambic
-galliambus
-Gallian
-galliard
-galliardise
-galliardly
-galliardness
-Gallic
-gallic
-Gallican
-Gallicanism
-Gallicism
-Gallicization
-Gallicize
-Gallicizer
-gallicola
-Gallicolae
-gallicole
-gallicolous
-galliferous
-Gallification
-gallification
-galliform
-Galliformes
-Gallify
-galligaskin
-gallimaufry
-Gallinaceae
-gallinacean
-Gallinacei
-gallinaceous
-Gallinae
-Gallinago
-gallinazo
-galline
-galling
-gallingly
-gallingness
-gallinipper
-Gallinula
-gallinule
-Gallinulinae
-gallinuline
-gallipot
-Gallirallus
-gallisin
-gallium
-gallivant
-gallivanter
-gallivat
-gallivorous
-galliwasp
-gallnut
-gallocyanin
-gallocyanine
-galloflavine
-galloglass
-Galloman
-Gallomania
-Gallomaniac
-gallon
-gallonage
-galloner
-galloon
-gallooned
-gallop
-gallopade
-galloper
-Galloperdix
-Gallophile
-Gallophilism
-Gallophobe
-Gallophobia
-galloping
-galloptious
-gallotannate
-gallotannic
-gallotannin
-gallous
-Gallovidian
-Galloway
-galloway
-gallowglass
-gallows
-gallowsmaker
-gallowsness
-gallowsward
-gallstone
-Gallus
-galluses
-gallweed
-gallwort
-gally
-gallybagger
-gallybeggar
-gallycrow
-Galoisian
-galoot
-galop
-galore
-galosh
-galp
-galravage
-galravitch
-galt
-Galtonia
-Galtonian
-galuchat
-galumph
-galumptious
-Galusha
-galuth
-galvanic
-galvanical
-galvanically
-galvanism
-galvanist
-galvanization
-galvanize
-galvanized
-galvanizer
-galvanocauterization
-galvanocautery
-galvanocontractility
-galvanofaradization
-galvanoglyph
-galvanoglyphy
-galvanograph
-galvanographic
-galvanography
-galvanologist
-galvanology
-galvanolysis
-galvanomagnet
-galvanomagnetic
-galvanomagnetism
-galvanometer
-galvanometric
-galvanometrical
-galvanometrically
-galvanometry
-galvanoplastic
-galvanoplastical
-galvanoplastically
-galvanoplastics
-galvanoplasty
-galvanopsychic
-galvanopuncture
-galvanoscope
-galvanoscopic
-galvanoscopy
-galvanosurgery
-galvanotactic
-galvanotaxis
-galvanotherapy
-galvanothermometer
-galvanothermy
-galvanotonic
-galvanotropic
-galvanotropism
-galvayne
-galvayning
-Galways
-Galwegian
-galyac
-galyak
-galziekte
-gam
-gamahe
-Gamaliel
-gamashes
-gamasid
-Gamasidae
-Gamasoidea
-gamb
-gamba
-gambade
-gambado
-gambang
-gambeer
-gambeson
-gambet
-gambette
-gambia
-gambier
-gambist
-gambit
-gamble
-gambler
-gamblesome
-gamblesomeness
-gambling
-gambodic
-gamboge
-gambogian
-gambogic
-gamboised
-gambol
-gambrel
-gambreled
-gambroon
-Gambusia
-gamdeboo
-game
-gamebag
-gameball
-gamecock
-gamecraft
-gameful
-gamekeeper
-gamekeeping
-gamelang
-gameless
-gamelike
-Gamelion
-gamelotte
-gamely
-gamene
-gameness
-gamesome
-gamesomely
-gamesomeness
-gamester
-gamestress
-gametal
-gametange
-gametangium
-gamete
-gametic
-gametically
-gametocyst
-gametocyte
-gametogenesis
-gametogenic
-gametogenous
-gametogeny
-gametogonium
-gametogony
-gametoid
-gametophagia
-gametophore
-gametophyll
-gametophyte
-gametophytic
-gamic
-gamily
-gamin
-gaminesque
-gaminess
-gaming
-gaminish
-gamma
-gammacism
-gammacismus
-gammadion
-gammarid
-Gammaridae
-gammarine
-gammaroid
-Gammarus
-gammation
-gammelost
-gammer
-gammerel
-gammerstang
-Gammexane
-gammick
-gammock
-gammon
-gammoner
-gammoning
-gammy
-gamobium
-gamodesmic
-gamodesmy
-gamogenesis
-gamogenetic
-gamogenetical
-gamogenetically
-gamogony
-Gamolepis
-gamomania
-gamont
-Gamopetalae
-gamopetalous
-gamophagia
-gamophagy
-gamophyllous
-gamori
-gamosepalous
-gamostele
-gamostelic
-gamostely
-gamotropic
-gamotropism
-gamp
-gamphrel
-gamut
-gamy
-gan
-ganam
-ganancial
-Ganapati
-ganch
-Ganda
-gander
-ganderess
-gandergoose
-gandermooner
-ganderteeth
-Gandhara
-Gandharva
-Gandhiism
-Gandhism
-Gandhist
-gandul
-gandum
-gandurah
-gane
-ganef
-gang
-Ganga
-ganga
-Gangamopteris
-gangan
-gangava
-gangboard
-gangdom
-gange
-ganger
-Gangetic
-ganggang
-ganging
-gangism
-gangland
-ganglander
-ganglia
-gangliac
-ganglial
-gangliar
-gangliasthenia
-gangliate
-gangliated
-gangliectomy
-gangliform
-gangliitis
-gangling
-ganglioblast
-gangliocyte
-ganglioform
-ganglioid
-ganglioma
-ganglion
-ganglionary
-ganglionate
-ganglionectomy
-ganglioneural
-ganglioneure
-ganglioneuroma
-ganglioneuron
-ganglionic
-ganglionitis
-ganglionless
-ganglioplexus
-gangly
-gangman
-gangmaster
-gangplank
-gangrel
-gangrene
-gangrenescent
-gangrenous
-gangsman
-gangster
-gangsterism
-gangtide
-gangue
-Ganguela
-gangway
-gangwayman
-ganister
-ganja
-ganner
-gannet
-Ganocephala
-ganocephalan
-ganocephalous
-ganodont
-Ganodonta
-Ganodus
-ganoid
-ganoidal
-ganoidean
-Ganoidei
-ganoidian
-ganoin
-ganomalite
-ganophyllite
-ganosis
-Ganowanian
-gansel
-gansey
-gansy
-gant
-ganta
-gantang
-gantlet
-gantline
-ganton
-gantries
-gantry
-gantryman
-gantsl
-Ganymede
-Ganymedes
-ganza
-ganzie
-gaol
-gaolbird
-gaoler
-Gaon
-Gaonate
-Gaonic
-gap
-Gapa
-gapa
-gape
-gaper
-gapes
-gapeseed
-gapeworm
-gaping
-gapingly
-gapingstock
-gapo
-gappy
-gapy
-gar
-gara
-garabato
-garad
-garage
-garageman
-Garamond
-garance
-garancine
-garapata
-garava
-garavance
-garawi
-garb
-garbage
-garbardine
-garbel
-garbell
-garbill
-garble
-garbleable
-garbler
-garbless
-garbling
-garboard
-garboil
-garbure
-garce
-Garcinia
-gardant
-gardeen
-garden
-gardenable
-gardencraft
-gardened
-gardener
-gardenership
-gardenesque
-gardenful
-gardenhood
-Gardenia
-gardenin
-gardening
-gardenize
-gardenless
-gardenlike
-gardenly
-gardenmaker
-gardenmaking
-gardenwards
-gardenwise
-gardeny
-garderobe
-gardevin
-gardy
-gardyloo
-gare
-garefowl
-gareh
-garetta
-garewaite
-garfish
-garganey
-Gargantua
-Gargantuan
-garget
-gargety
-gargle
-gargol
-gargoyle
-gargoyled
-gargoyley
-gargoylish
-gargoylishly
-gargoylism
-Garhwali
-garial
-gariba
-garibaldi
-Garibaldian
-garish
-garishly
-garishness
-garland
-garlandage
-garlandless
-garlandlike
-garlandry
-garlandwise
-garle
-garlic
-garlicky
-garliclike
-garlicmonger
-garlicwort
-garment
-garmentless
-garmentmaker
-garmenture
-garmentworker
-garn
-garnel
-garner
-garnerage
-garnet
-garnetberry
-garneter
-garnetiferous
-garnets
-garnett
-garnetter
-garnetwork
-garnetz
-garnice
-garniec
-garnierite
-garnish
-garnishable
-garnished
-garnishee
-garnisheement
-garnisher
-garnishment
-garnishry
-garniture
-Garo
-garoo
-garookuh
-garrafa
-garran
-Garret
-garret
-garreted
-garreteer
-garretmaster
-garrison
-Garrisonian
-Garrisonism
-garrot
-garrote
-garroter
-Garrulinae
-garruline
-garrulity
-garrulous
-garrulously
-garrulousness
-Garrulus
-garrupa
-Garrya
-Garryaceae
-garse
-Garshuni
-garsil
-garston
-garten
-garter
-gartered
-gartering
-garterless
-garth
-garthman
-Garuda
-garum
-garvanzo
-garvey
-garvock
-Gary
-gas
-Gasan
-gasbag
-gascoigny
-Gascon
-gasconade
-gasconader
-Gasconism
-gascromh
-gaseity
-gaselier
-gaseosity
-gaseous
-gaseousness
-gasfiring
-gash
-gashes
-gashful
-gashliness
-gashly
-gasholder
-gashouse
-gashy
-gasifiable
-gasification
-gasifier
-gasiform
-gasify
-gasket
-gaskin
-gasking
-gaskins
-gasless
-gaslight
-gaslighted
-gaslighting
-gaslit
-gaslock
-gasmaker
-gasman
-gasogenic
-gasoliery
-gasoline
-gasolineless
-gasoliner
-gasometer
-gasometric
-gasometrical
-gasometry
-gasp
-Gaspar
-gasparillo
-gasper
-gaspereau
-gaspergou
-gaspiness
-gasping
-gaspingly
-gasproof
-gaspy
-gasser
-Gasserian
-gassiness
-gassing
-gassy
-gast
-gastaldite
-gastaldo
-gaster
-gasteralgia
-Gasterolichenes
-gasteromycete
-Gasteromycetes
-gasteromycetous
-Gasterophilus
-gasteropod
-Gasteropoda
-gasterosteid
-Gasterosteidae
-gasterosteiform
-gasterosteoid
-Gasterosteus
-gasterotheca
-gasterothecal
-Gasterotricha
-gasterotrichan
-gasterozooid
-gastight
-gastightness
-Gastornis
-Gastornithidae
-gastradenitis
-gastraea
-gastraead
-Gastraeadae
-gastraeal
-gastraeum
-gastral
-gastralgia
-gastralgic
-gastralgy
-gastraneuria
-gastrasthenia
-gastratrophia
-gastrectasia
-gastrectasis
-gastrectomy
-gastrelcosis
-gastric
-gastricism
-gastrilegous
-gastriloquial
-gastriloquism
-gastriloquist
-gastriloquous
-gastriloquy
-gastrin
-gastritic
-gastritis
-gastroadenitis
-gastroadynamic
-gastroalbuminorrhea
-gastroanastomosis
-gastroarthritis
-gastroatonia
-gastroatrophia
-gastroblennorrhea
-gastrocatarrhal
-gastrocele
-gastrocentrous
-Gastrochaena
-Gastrochaenidae
-gastrocnemial
-gastrocnemian
-gastrocnemius
-gastrocoel
-gastrocolic
-gastrocoloptosis
-gastrocolostomy
-gastrocolotomy
-gastrocolpotomy
-gastrocystic
-gastrocystis
-gastrodialysis
-gastrodiaphanoscopy
-gastrodidymus
-gastrodisk
-gastroduodenal
-gastroduodenitis
-gastroduodenoscopy
-gastroduodenotomy
-gastrodynia
-gastroelytrotomy
-gastroenteralgia
-gastroenteric
-gastroenteritic
-gastroenteritis
-gastroenteroanastomosis
-gastroenterocolitis
-gastroenterocolostomy
-gastroenterological
-gastroenterologist
-gastroenterology
-gastroenteroptosis
-gastroenterostomy
-gastroenterotomy
-gastroepiploic
-gastroesophageal
-gastroesophagostomy
-gastrogastrotomy
-gastrogenital
-gastrograph
-gastrohelcosis
-gastrohepatic
-gastrohepatitis
-gastrohydrorrhea
-gastrohyperneuria
-gastrohypertonic
-gastrohysterectomy
-gastrohysteropexy
-gastrohysterorrhaphy
-gastrohysterotomy
-gastroid
-gastrointestinal
-gastrojejunal
-gastrojejunostomy
-gastrolater
-gastrolatrous
-gastrolienal
-gastrolith
-Gastrolobium
-gastrologer
-gastrological
-gastrologist
-gastrology
-gastrolysis
-gastrolytic
-gastromalacia
-gastromancy
-gastromelus
-gastromenia
-gastromyces
-gastromycosis
-gastromyxorrhea
-gastronephritis
-gastronome
-gastronomer
-gastronomic
-gastronomical
-gastronomically
-gastronomist
-gastronomy
-gastronosus
-gastropancreatic
-gastropancreatitis
-gastroparalysis
-gastroparesis
-gastroparietal
-gastropathic
-gastropathy
-gastroperiodynia
-gastropexy
-gastrophile
-gastrophilism
-gastrophilist
-gastrophilite
-Gastrophilus
-gastrophrenic
-gastrophthisis
-gastroplasty
-gastroplenic
-gastropleuritis
-gastroplication
-gastropneumatic
-gastropneumonic
-gastropod
-Gastropoda
-gastropodan
-gastropodous
-gastropore
-gastroptosia
-gastroptosis
-gastropulmonary
-gastropulmonic
-gastropyloric
-gastrorrhagia
-gastrorrhaphy
-gastrorrhea
-gastroschisis
-gastroscope
-gastroscopic
-gastroscopy
-gastrosoph
-gastrosopher
-gastrosophy
-gastrospasm
-gastrosplenic
-gastrostaxis
-gastrostegal
-gastrostege
-gastrostenosis
-gastrostomize
-Gastrostomus
-gastrostomy
-gastrosuccorrhea
-gastrotheca
-gastrothecal
-gastrotome
-gastrotomic
-gastrotomy
-Gastrotricha
-gastrotrichan
-gastrotubotomy
-gastrotympanites
-gastrovascular
-gastroxynsis
-gastrozooid
-gastrula
-gastrular
-gastrulate
-gastrulation
-gasworker
-gasworks
-gat
-gata
-gatch
-gatchwork
-gate
-gateado
-gateage
-gated
-gatehouse
-gatekeeper
-gateless
-gatelike
-gatemaker
-gateman
-gatepost
-gater
-gatetender
-gateward
-gatewards
-gateway
-gatewayman
-gatewise
-gatewoman
-gateworks
-gatewright
-Gatha
-gather
-gatherable
-gatherer
-gathering
-Gathic
-gating
-gator
-gatter
-gatteridge
-gau
-gaub
-gauby
-gauche
-gauchely
-gaucheness
-gaucherie
-Gaucho
-gaud
-gaudery
-Gaudete
-gaudful
-gaudily
-gaudiness
-gaudless
-gaudsman
-gaudy
-gaufer
-gauffer
-gauffered
-gauffre
-gaufre
-gaufrette
-gauge
-gaugeable
-gauger
-gaugership
-gauging
-Gaul
-gaulding
-gauleiter
-Gaulic
-gaulin
-Gaulish
-Gaullism
-Gaullist
-Gault
-gault
-gaulter
-gaultherase
-Gaultheria
-gaultherin
-gaum
-gaumish
-gaumless
-gaumlike
-gaumy
-gaun
-gaunt
-gaunted
-gauntlet
-gauntleted
-gauntly
-gauntness
-gauntry
-gaunty
-gaup
-gaupus
-gaur
-Gaura
-Gaurian
-gaus
-gauss
-gaussage
-gaussbergite
-Gaussian
-gauster
-gausterer
-gaut
-gauteite
-gauze
-gauzelike
-gauzewing
-gauzily
-gauziness
-gauzy
-gavall
-gave
-gavel
-gaveler
-gavelkind
-gavelkinder
-gavelman
-gavelock
-Gavia
-Gaviae
-gavial
-Gavialis
-gavialoid
-Gaviiformes
-gavotte
-gavyuti
-gaw
-gawby
-gawcie
-gawk
-gawkhammer
-gawkihood
-gawkily
-gawkiness
-gawkish
-gawkishly
-gawkishness
-gawky
-gawm
-gawn
-gawney
-gawsie
-gay
-gayal
-gayatri
-gaybine
-gaycat
-gaydiang
-gayish
-Gaylussacia
-gaylussite
-gayment
-gayness
-Gaypoo
-gaysome
-gaywings
-gayyou
-gaz
-gazabo
-gazangabin
-Gazania
-gaze
-gazebo
-gazee
-gazehound
-gazel
-gazeless
-Gazella
-gazelle
-gazelline
-gazement
-gazer
-gazettal
-gazette
-gazetteer
-gazetteerage
-gazetteerish
-gazetteership
-gazi
-gazing
-gazingly
-gazingstock
-gazogene
-gazon
-gazophylacium
-gazy
-gazzetta
-Ge
-ge
-Geadephaga
-geadephagous
-geal
-gean
-geanticlinal
-geanticline
-gear
-gearbox
-geared
-gearing
-gearksutite
-gearless
-gearman
-gearset
-gearshift
-gearwheel
-gease
-geason
-Geaster
-Geat
-geat
-Geatas
-gebang
-gebanga
-gebbie
-gebur
-Gecarcinidae
-Gecarcinus
-geck
-gecko
-geckoid
-geckotian
-geckotid
-Geckotidae
-geckotoid
-Ged
-ged
-gedackt
-gedanite
-gedder
-gedeckt
-gedecktwork
-Gederathite
-Gederite
-gedrite
-Gee
-gee
-geebong
-geebung
-Geechee
-geejee
-geek
-geelbec
-geeldikkop
-geelhout
-geepound
-geerah
-geest
-geet
-Geez
-geezer
-Gegenschein
-gegg
-geggee
-gegger
-geggery
-Geheimrat
-Gehenna
-gehlenite
-Geikia
-geikielite
-gein
-geira
-Geisenheimer
-geisha
-geison
-geisotherm
-geisothermal
-Geissoloma
-Geissolomataceae
-Geissolomataceous
-Geissorhiza
-geissospermin
-geissospermine
-geitjie
-geitonogamous
-geitonogamy
-Gekko
-Gekkones
-gekkonid
-Gekkonidae
-gekkonoid
-Gekkota
-gel
-gelable
-gelada
-gelandejump
-gelandelaufer
-gelandesprung
-Gelasian
-Gelasimus
-gelastic
-Gelastocoridae
-gelatification
-gelatigenous
-gelatin
-gelatinate
-gelatination
-gelatined
-gelatiniferous
-gelatiniform
-gelatinify
-gelatinigerous
-gelatinity
-gelatinizability
-gelatinizable
-gelatinization
-gelatinize
-gelatinizer
-gelatinobromide
-gelatinochloride
-gelatinoid
-gelatinotype
-gelatinous
-gelatinously
-gelatinousness
-gelation
-gelatose
-geld
-geldability
-geldable
-geldant
-gelder
-gelding
-Gelechia
-gelechiid
-Gelechiidae
-Gelfomino
-gelid
-Gelidiaceae
-gelidity
-Gelidium
-gelidly
-gelidness
-gelignite
-gelilah
-gelinotte
-gell
-Gellert
-gelly
-gelogenic
-gelong
-geloscopy
-gelose
-gelosin
-gelotherapy
-gelotometer
-gelotoscopy
-gelototherapy
-gelsemic
-gelsemine
-gelseminic
-gelseminine
-Gelsemium
-gelt
-gem
-Gemara
-Gemaric
-Gemarist
-gematria
-gematrical
-gemauve
-gemel
-gemeled
-gemellione
-gemellus
-geminate
-geminated
-geminately
-gemination
-geminative
-Gemini
-Geminid
-geminiflorous
-geminiform
-geminous
-Gemitores
-gemitorial
-gemless
-gemlike
-Gemma
-gemma
-gemmaceous
-gemmae
-gemmate
-gemmation
-gemmative
-gemmeous
-gemmer
-gemmiferous
-gemmiferousness
-gemmification
-gemmiform
-gemmily
-gemminess
-Gemmingia
-gemmipara
-gemmipares
-gemmiparity
-gemmiparous
-gemmiparously
-gemmoid
-gemmology
-gemmula
-gemmulation
-gemmule
-gemmuliferous
-gemmy
-gemot
-gemsbok
-gemsbuck
-gemshorn
-gemul
-gemuti
-gemwork
-gen
-gena
-genal
-genapp
-genapper
-genarch
-genarcha
-genarchaship
-genarchship
-gendarme
-gendarmery
-gender
-genderer
-genderless
-Gene
-gene
-genealogic
-genealogical
-genealogically
-genealogist
-genealogize
-genealogizer
-genealogy
-genear
-geneat
-genecologic
-genecological
-genecologically
-genecologist
-genecology
-geneki
-genep
-genera
-generability
-generable
-generableness
-general
-generalate
-generalcy
-generale
-generalia
-Generalidad
-generalific
-generalism
-generalissima
-generalissimo
-generalist
-generalistic
-generality
-generalizable
-generalization
-generalize
-generalized
-generalizer
-generall
-generally
-generalness
-generalship
-generalty
-generant
-generate
-generating
-generation
-generational
-generationism
-generative
-generatively
-generativeness
-generator
-generatrix
-generic
-generical
-generically
-genericalness
-generification
-generosity
-generous
-generously
-generousness
-Genesee
-geneserine
-Genesiac
-Genesiacal
-genesial
-genesic
-genesiology
-genesis
-Genesitic
-genesiurgic
-genet
-genethliac
-genethliacal
-genethliacally
-genethliacon
-genethliacs
-genethlialogic
-genethlialogical
-genethlialogy
-genethlic
-genetic
-genetical
-genetically
-geneticism
-geneticist
-genetics
-genetmoil
-genetous
-Genetrix
-genetrix
-Genetta
-Geneura
-Geneva
-geneva
-Genevan
-Genevese
-Genevieve
-Genevois
-genevoise
-genial
-geniality
-genialize
-genially
-genialness
-genian
-genic
-genicular
-geniculate
-geniculated
-geniculately
-geniculation
-geniculum
-genie
-genii
-genin
-genioglossal
-genioglossi
-genioglossus
-geniohyoglossal
-geniohyoglossus
-geniohyoid
-geniolatry
-genion
-genioplasty
-genip
-Genipa
-genipa
-genipap
-genipapada
-genisaro
-Genista
-genista
-genistein
-genital
-genitalia
-genitals
-genitival
-genitivally
-genitive
-genitocrural
-genitofemoral
-genitor
-genitorial
-genitory
-genitourinary
-geniture
-genius
-genizah
-genizero
-Genny
-Genoa
-genoblast
-genoblastic
-genocidal
-genocide
-Genoese
-genoese
-genom
-genome
-genomic
-genonema
-genos
-genotype
-genotypic
-genotypical
-genotypically
-Genoveva
-genovino
-genre
-genro
-gens
-genson
-gent
-genteel
-genteelish
-genteelism
-genteelize
-genteelly
-genteelness
-gentes
-genthite
-gentian
-Gentiana
-Gentianaceae
-gentianaceous
-Gentianales
-gentianella
-gentianic
-gentianin
-gentianose
-gentianwort
-gentile
-gentiledom
-gentilesse
-gentilic
-gentilism
-gentilitial
-gentilitian
-gentilitious
-gentility
-gentilization
-gentilize
-gentiobiose
-gentiopicrin
-gentisein
-gentisic
-gentisin
-gentle
-gentlefolk
-gentlehearted
-gentleheartedly
-gentleheartedness
-gentlehood
-gentleman
-gentlemanhood
-gentlemanism
-gentlemanize
-gentlemanlike
-gentlemanlikeness
-gentlemanliness
-gentlemanly
-gentlemanship
-gentlemens
-gentlemouthed
-gentleness
-gentlepeople
-gentleship
-gentlewoman
-gentlewomanhood
-gentlewomanish
-gentlewomanlike
-gentlewomanliness
-gentlewomanly
-gently
-gentman
-Gentoo
-gentrice
-gentry
-genty
-genu
-genua
-genual
-genuclast
-genuflect
-genuflection
-genuflector
-genuflectory
-genuflex
-genuflexuous
-genuine
-genuinely
-genuineness
-genus
-genyantrum
-Genyophrynidae
-genyoplasty
-genys
-geo
-geoaesthesia
-geoagronomic
-geobiologic
-geobiology
-geobiont
-geobios
-geoblast
-geobotanic
-geobotanical
-geobotanist
-geobotany
-geocarpic
-geocentric
-geocentrical
-geocentrically
-geocentricism
-geocerite
-geochemical
-geochemist
-geochemistry
-geochronic
-geochronology
-geochrony
-Geococcyx
-geocoronium
-geocratic
-geocronite
-geocyclic
-geodaesia
-geodal
-geode
-geodesic
-geodesical
-geodesist
-geodesy
-geodete
-geodetic
-geodetical
-geodetically
-geodetician
-geodetics
-geodiatropism
-geodic
-geodiferous
-geodist
-geoduck
-geodynamic
-geodynamical
-geodynamics
-geoethnic
-Geoff
-Geoffrey
-geoffroyin
-geoffroyine
-geoform
-geogenesis
-geogenetic
-geogenic
-geogenous
-geogeny
-Geoglossaceae
-Geoglossum
-geoglyphic
-geognosis
-geognosist
-geognost
-geognostic
-geognostical
-geognostically
-geognosy
-geogonic
-geogonical
-geogony
-geographer
-geographic
-geographical
-geographically
-geographics
-geographism
-geographize
-geography
-geohydrologist
-geohydrology
-geoid
-geoidal
-geoisotherm
-geolatry
-geologer
-geologian
-geologic
-geological
-geologically
-geologician
-geologist
-geologize
-geology
-geomagnetic
-geomagnetician
-geomagnetics
-geomagnetist
-geomalic
-geomalism
-geomaly
-geomance
-geomancer
-geomancy
-geomant
-geomantic
-geomantical
-geomantically
-geometer
-geometric
-geometrical
-geometrically
-geometrician
-geometricize
-geometrid
-Geometridae
-geometriform
-Geometrina
-geometrine
-geometrize
-geometroid
-Geometroidea
-geometry
-geomoroi
-geomorphic
-geomorphist
-geomorphogenic
-geomorphogenist
-geomorphogeny
-geomorphological
-geomorphology
-geomorphy
-geomyid
-Geomyidae
-Geomys
-Geon
-geonavigation
-geonegative
-Geonic
-Geonim
-Geonoma
-geonoma
-geonyctinastic
-geonyctitropic
-geoparallelotropic
-geophagia
-geophagism
-geophagist
-geophagous
-geophagy
-Geophila
-geophilid
-Geophilidae
-geophilous
-Geophilus
-Geophone
-geophone
-geophysical
-geophysicist
-geophysics
-geophyte
-geophytic
-geoplagiotropism
-Geoplana
-Geoplanidae
-geopolar
-geopolitic
-geopolitical
-geopolitically
-geopolitician
-geopolitics
-Geopolitik
-geoponic
-geoponical
-geoponics
-geopony
-geopositive
-Geoprumnon
-georama
-Geordie
-George
-Georgemas
-Georgette
-Georgia
-georgiadesite
-Georgian
-Georgiana
-georgic
-Georgie
-geoscopic
-geoscopy
-geoselenic
-geosid
-geoside
-geosphere
-Geospiza
-geostatic
-geostatics
-geostrategic
-geostrategist
-geostrategy
-geostrophic
-geosynclinal
-geosyncline
-geotactic
-geotactically
-geotaxis
-geotaxy
-geotechnic
-geotechnics
-geotectology
-geotectonic
-geotectonics
-Geoteuthis
-geotherm
-geothermal
-geothermic
-geothermometer
-Geothlypis
-geotic
-geotical
-geotilla
-geotonic
-geotonus
-geotropic
-geotropically
-geotropism
-geotropy
-geoty
-Gepeoo
-Gephyrea
-gephyrean
-gephyrocercal
-gephyrocercy
-Gepidae
-ger
-gerah
-Gerald
-Geraldine
-Geraniaceae
-geraniaceous
-geranial
-Geraniales
-geranic
-geraniol
-Geranium
-geranium
-geranomorph
-Geranomorphae
-geranomorphic
-geranyl
-Gerard
-gerardia
-Gerasene
-gerastian
-gerate
-gerated
-geratic
-geratologic
-geratologous
-geratology
-geraty
-gerb
-gerbe
-Gerbera
-Gerberia
-gerbil
-Gerbillinae
-Gerbillus
-gercrow
-gereagle
-gerefa
-gerenda
-gerendum
-gerent
-gerenuk
-gerfalcon
-gerhardtite
-geriatric
-geriatrician
-geriatrics
-gerim
-gerip
-germ
-germal
-German
-german
-germander
-germane
-germanely
-germaneness
-Germanesque
-Germanhood
-Germania
-Germanic
-germanic
-Germanical
-Germanically
-Germanics
-Germanification
-Germanify
-germanious
-Germanish
-Germanism
-Germanist
-Germanistic
-germanite
-Germanity
-germanity
-germanium
-Germanization
-germanization
-Germanize
-germanize
-Germanizer
-Germanly
-Germanness
-Germanocentric
-Germanomania
-Germanomaniac
-Germanophile
-Germanophilist
-Germanophobe
-Germanophobia
-Germanophobic
-Germanophobist
-germanous
-Germantown
-germanyl
-germarium
-germen
-germfree
-germicidal
-germicide
-germifuge
-germigenous
-germin
-germina
-germinability
-germinable
-Germinal
-germinal
-germinally
-germinance
-germinancy
-germinant
-germinate
-germination
-germinative
-germinatively
-germinator
-germing
-germinogony
-germiparity
-germless
-germlike
-germling
-germon
-germproof
-germule
-germy
-gernitz
-gerocomia
-gerocomical
-gerocomy
-geromorphism
-Geronomite
-geront
-gerontal
-gerontes
-gerontic
-gerontine
-gerontism
-geronto
-gerontocracy
-gerontocrat
-gerontocratic
-gerontogeous
-gerontology
-gerontophilia
-gerontoxon
-Gerres
-gerrhosaurid
-Gerrhosauridae
-Gerridae
-gerrymander
-gerrymanderer
-gers
-gersdorffite
-Gershom
-Gershon
-Gershonite
-gersum
-Gertie
-Gertrude
-gerund
-gerundial
-gerundially
-gerundival
-gerundive
-gerundively
-gerusia
-Gervais
-gervao
-Gervas
-Gervase
-Gerygone
-gerygone
-Geryonia
-geryonid
-Geryonidae
-Geryoniidae
-Ges
-Gesan
-Geshurites
-gesith
-gesithcund
-gesithcundman
-Gesnera
-Gesneraceae
-gesneraceous
-Gesneria
-gesneria
-Gesneriaceae
-gesneriaceous
-Gesnerian
-gesning
-gessamine
-gesso
-gest
-Gestalt
-gestalter
-gestaltist
-gestant
-Gestapo
-gestate
-gestation
-gestational
-gestative
-gestatorial
-gestatorium
-gestatory
-geste
-gested
-gesten
-gestening
-gestic
-gestical
-gesticulacious
-gesticulant
-gesticular
-gesticularious
-gesticulate
-gesticulation
-gesticulative
-gesticulatively
-gesticulator
-gesticulatory
-gestion
-gestning
-gestural
-gesture
-gestureless
-gesturer
-get
-geta
-Getae
-getah
-getaway
-gether
-Gethsemane
-gethsemane
-Gethsemanic
-gethsemanic
-Getic
-getling
-getpenny
-Getsul
-gettable
-getter
-getting
-getup
-Geullah
-Geum
-geum
-gewgaw
-gewgawed
-gewgawish
-gewgawry
-gewgawy
-gey
-geyan
-geyerite
-geyser
-geyseral
-geyseric
-geyserine
-geyserish
-geyserite
-gez
-ghafir
-ghaist
-ghalva
-Ghan
-gharial
-gharnao
-gharry
-Ghassanid
-ghastily
-ghastlily
-ghastliness
-ghastly
-ghat
-ghatti
-ghatwal
-ghatwazi
-ghazi
-ghazism
-Ghaznevid
-Gheber
-ghebeta
-Ghedda
-ghee
-Gheg
-Ghegish
-gheleem
-Ghent
-gherkin
-ghetchoo
-ghetti
-ghetto
-ghettoization
-ghettoize
-Ghibelline
-Ghibellinism
-Ghilzai
-Ghiordes
-ghizite
-ghoom
-ghost
-ghostcraft
-ghostdom
-ghoster
-ghostess
-ghostfish
-ghostflower
-ghosthood
-ghostified
-ghostily
-ghostish
-ghostism
-ghostland
-ghostless
-ghostlet
-ghostlify
-ghostlike
-ghostlily
-ghostliness
-ghostly
-ghostmonger
-ghostology
-ghostship
-ghostweed
-ghostwrite
-ghosty
-ghoul
-ghoulery
-ghoulish
-ghoulishly
-ghoulishness
-ghrush
-ghurry
-Ghuz
-Gi
-Giansar
-giant
-giantesque
-giantess
-gianthood
-giantish
-giantism
-giantize
-giantkind
-giantlike
-giantly
-giantry
-giantship
-Giardia
-giardia
-giardiasis
-giarra
-giarre
-Gib
-gib
-gibaro
-gibbals
-gibbed
-gibber
-Gibberella
-gibbergunyah
-gibberish
-gibberose
-gibberosity
-gibbet
-gibbetwise
-Gibbi
-gibblegabble
-gibblegabbler
-gibbles
-gibbon
-gibbose
-gibbosity
-gibbous
-gibbously
-gibbousness
-gibbsite
-gibbus
-gibby
-gibe
-gibel
-gibelite
-Gibeonite
-giber
-gibing
-gibingly
-gibleh
-giblet
-giblets
-Gibraltar
-Gibson
-gibstaff
-gibus
-gid
-giddap
-giddea
-giddify
-giddily
-giddiness
-giddy
-giddyberry
-giddybrain
-giddyhead
-giddyish
-Gideon
-Gideonite
-gidgee
-gie
-gied
-gien
-Gienah
-gieseckite
-gif
-giffgaff
-Gifola
-gift
-gifted
-giftedly
-giftedness
-giftie
-giftless
-giftling
-giftware
-gig
-gigantean
-gigantesque
-gigantic
-gigantical
-gigantically
-giganticidal
-giganticide
-giganticness
-gigantism
-gigantize
-gigantoblast
-gigantocyte
-gigantolite
-gigantological
-gigantology
-gigantomachy
-Gigantopithecus
-Gigantosaurus
-Gigantostraca
-gigantostracan
-gigantostracous
-Gigartina
-Gigartinaceae
-gigartinaceous
-Gigartinales
-gigback
-gigelira
-gigeria
-gigerium
-gigful
-gigger
-giggish
-giggit
-giggle
-giggledom
-gigglement
-giggler
-gigglesome
-giggling
-gigglingly
-gigglish
-giggly
-Gigi
-giglet
-gigliato
-giglot
-gigman
-gigmaness
-gigmanhood
-gigmania
-gigmanic
-gigmanically
-gigmanism
-gigmanity
-gignate
-gignitive
-gigolo
-gigot
-gigsman
-gigster
-gigtree
-gigunu
-Gil
-Gila
-Gilaki
-Gilbert
-gilbert
-gilbertage
-Gilbertese
-Gilbertian
-Gilbertianism
-gilbertite
-gild
-gildable
-gilded
-gilden
-gilder
-gilding
-Gileadite
-Gileno
-Giles
-gilguy
-Gilia
-gilia
-Giliak
-gilim
-Gill
-gill
-gillaroo
-gillbird
-gilled
-Gillenia
-giller
-Gilles
-gillflirt
-gillhooter
-Gillian
-gillie
-gilliflirt
-gilling
-gilliver
-gillotage
-gillotype
-gillstoup
-gilly
-gillyflower
-gillygaupus
-gilo
-gilpy
-gilravage
-gilravager
-gilse
-gilsonite
-gilt
-giltcup
-gilthead
-gilttail
-gim
-gimbal
-gimbaled
-gimbaljawed
-gimberjawed
-gimble
-gimcrack
-gimcrackery
-gimcrackiness
-gimcracky
-gimel
-Gimirrai
-gimlet
-gimleteyed
-gimlety
-gimmal
-gimmer
-gimmerpet
-gimmick
-gimp
-gimped
-gimper
-gimping
-gin
-ging
-ginger
-gingerade
-gingerberry
-gingerbread
-gingerbready
-gingerin
-gingerleaf
-gingerline
-gingerliness
-gingerly
-gingerness
-gingernut
-gingerol
-gingerous
-gingerroot
-gingersnap
-gingerspice
-gingerwork
-gingerwort
-gingery
-gingham
-ginghamed
-gingili
-gingiva
-gingivae
-gingival
-gingivalgia
-gingivectomy
-gingivitis
-gingivoglossitis
-gingivolabial
-ginglyform
-ginglymoarthrodia
-ginglymoarthrodial
-Ginglymodi
-ginglymodian
-ginglymoid
-ginglymoidal
-Ginglymostoma
-ginglymostomoid
-ginglymus
-ginglyni
-ginhouse
-gink
-Ginkgo
-ginkgo
-Ginkgoaceae
-ginkgoaceous
-Ginkgoales
-ginned
-ginner
-ginners
-ginnery
-ginney
-ginning
-ginnle
-Ginny
-ginny
-ginseng
-ginward
-gio
-giobertite
-giornata
-giornatate
-Giottesque
-Giovanni
-gip
-gipon
-gipper
-Gippy
-gipser
-gipsire
-gipsyweed
-Giraffa
-giraffe
-giraffesque
-Giraffidae
-giraffine
-giraffoid
-girandola
-girandole
-girasol
-girasole
-girba
-gird
-girder
-girderage
-girderless
-girding
-girdingly
-girdle
-girdlecake
-girdlelike
-girdler
-girdlestead
-girdling
-girdlingly
-Girella
-Girellidae
-Girgashite
-Girgasite
-girl
-girleen
-girlery
-girlfully
-girlhood
-girlie
-girliness
-girling
-girlish
-girlishly
-girlishness
-girlism
-girllike
-girly
-girn
-girny
-giro
-giroflore
-Girondin
-Girondism
-Girondist
-girouette
-girouettism
-girr
-girse
-girsh
-girsle
-girt
-girth
-girtline
-gisarme
-gish
-gisla
-gisler
-gismondine
-gismondite
-gist
-git
-gitaligenin
-gitalin
-Gitanemuck
-gith
-Gitksan
-gitonin
-gitoxigenin
-gitoxin
-gittern
-Gittite
-gittith
-Giuseppe
-giustina
-give
-giveable
-giveaway
-given
-givenness
-giver
-givey
-giving
-gizz
-gizzard
-gizzen
-gizzern
-glabella
-glabellae
-glabellar
-glabellous
-glabellum
-glabrate
-glabrescent
-glabrous
-glace
-glaceed
-glaceing
-glaciable
-glacial
-glacialism
-glacialist
-glacialize
-glacially
-glaciaria
-glaciarium
-glaciate
-glaciation
-glacier
-glaciered
-glacieret
-glacierist
-glacification
-glacioaqueous
-glaciolacustrine
-glaciological
-glaciologist
-glaciology
-glaciomarine
-glaciometer
-glacionatant
-glacis
-glack
-glad
-gladden
-gladdener
-gladdon
-gladdy
-glade
-gladelike
-gladeye
-gladful
-gladfully
-gladfulness
-gladhearted
-gladiate
-gladiator
-gladiatorial
-gladiatorism
-gladiatorship
-gladiatrix
-gladify
-gladii
-gladiola
-gladiolar
-gladiole
-gladioli
-gladiolus
-gladius
-gladkaite
-gladless
-gladly
-gladness
-gladsome
-gladsomely
-gladsomeness
-Gladstone
-Gladstonian
-Gladstonianism
-glady
-Gladys
-glaga
-Glagol
-Glagolic
-Glagolitic
-Glagolitsa
-glaieul
-glaik
-glaiket
-glaiketness
-glair
-glaireous
-glairiness
-glairy
-glaister
-glaive
-glaived
-glaked
-glaky
-glam
-glamberry
-glamorize
-glamorous
-glamorously
-glamour
-glamoury
-glance
-glancer
-glancing
-glancingly
-gland
-glandaceous
-glandarious
-glandered
-glanderous
-glanders
-glandes
-glandiferous
-glandiform
-glandless
-glandlike
-glandular
-glandularly
-glandule
-glanduliferous
-glanduliform
-glanduligerous
-glandulose
-glandulosity
-glandulous
-glandulousness
-Glaniostomi
-glans
-glar
-glare
-glareless
-Glareola
-glareole
-Glareolidae
-glareous
-glareproof
-glareworm
-glarily
-glariness
-glaring
-glaringly
-glaringness
-glarry
-glary
-Glaserian
-glaserite
-glashan
-glass
-glassen
-glasser
-glasses
-glassfish
-glassful
-glasshouse
-glassie
-glassily
-glassine
-glassiness
-Glassite
-glassless
-glasslike
-glassmaker
-glassmaking
-glassman
-glassophone
-glassrope
-glassteel
-glassware
-glassweed
-glasswork
-glassworker
-glassworking
-glassworks
-glasswort
-glassy
-Glaswegian
-Glathsheim
-Glathsheimr
-glauberite
-glaucescence
-glaucescent
-Glaucidium
-glaucin
-glaucine
-Glaucionetta
-Glaucium
-glaucochroite
-glaucodot
-glaucolite
-glaucoma
-glaucomatous
-Glaucomys
-Glauconia
-glauconiferous
-Glauconiidae
-glauconite
-glauconitic
-glauconitization
-glaucophane
-glaucophanite
-glaucophanization
-glaucophanize
-glaucophyllous
-Glaucopis
-glaucosuria
-glaucous
-glaucously
-Glauke
-glaum
-glaumrie
-glaur
-glaury
-Glaux
-glaver
-glaze
-glazed
-glazen
-glazer
-glazework
-glazier
-glaziery
-glazily
-glaziness
-glazing
-glazy
-gleam
-gleamily
-gleaminess
-gleaming
-gleamingly
-gleamless
-gleamy
-glean
-gleanable
-gleaner
-gleaning
-gleary
-gleba
-glebal
-glebe
-glebeless
-glebous
-Glecoma
-glede
-Gleditsia
-gledy
-glee
-gleed
-gleeful
-gleefully
-gleefulness
-gleeishly
-gleek
-gleemaiden
-gleeman
-gleesome
-gleesomely
-gleesomeness
-gleet
-gleety
-gleewoman
-gleg
-glegly
-glegness
-Glen
-glen
-Glengarry
-Glenn
-glenohumeral
-glenoid
-glenoidal
-glent
-glessite
-gleyde
-glia
-gliadin
-glial
-glib
-glibbery
-glibly
-glibness
-glidder
-gliddery
-glide
-glideless
-glideness
-glider
-gliderport
-glidewort
-gliding
-glidingly
-gliff
-gliffing
-glime
-glimmer
-glimmering
-glimmeringly
-glimmerite
-glimmerous
-glimmery
-glimpse
-glimpser
-glink
-glint
-glioma
-gliomatous
-gliosa
-gliosis
-Glires
-Gliridae
-gliriform
-Gliriformia
-glirine
-Glis
-glisk
-glisky
-glissade
-glissader
-glissando
-glissette
-glisten
-glistening
-glisteningly
-glister
-glisteringly
-Glitnir
-glitter
-glitterance
-glittering
-glitteringly
-glittersome
-glittery
-gloam
-gloaming
-gloat
-gloater
-gloating
-gloatingly
-global
-globally
-globate
-globated
-globe
-globed
-globefish
-globeflower
-globeholder
-globelet
-Globicephala
-globiferous
-Globigerina
-globigerine
-Globigerinidae
-globin
-Globiocephalus
-globoid
-globose
-globosely
-globoseness
-globosite
-globosity
-globosphaerite
-globous
-globously
-globousness
-globular
-Globularia
-Globulariaceae
-globulariaceous
-globularity
-globularly
-globularness
-globule
-globulet
-globulicidal
-globulicide
-globuliferous
-globuliform
-globulimeter
-globulin
-globulinuria
-globulite
-globulitic
-globuloid
-globulolysis
-globulose
-globulous
-globulousness
-globulysis
-globy
-glochid
-glochideous
-glochidia
-glochidial
-glochidian
-glochidiate
-glochidium
-glochis
-glockenspiel
-gloea
-gloeal
-Gloeocapsa
-gloeocapsoid
-gloeosporiose
-Gloeosporium
-Gloiopeltis
-Gloiosiphonia
-Gloiosiphoniaceae
-glom
-glome
-glomerate
-glomeration
-Glomerella
-glomeroporphyritic
-glomerular
-glomerulate
-glomerule
-glomerulitis
-glomerulonephritis
-glomerulose
-glomerulus
-glommox
-glomus
-glonoin
-glonoine
-gloom
-gloomful
-gloomfully
-gloomily
-gloominess
-glooming
-gloomingly
-gloomless
-gloomth
-gloomy
-glop
-gloppen
-glor
-glore
-Gloria
-Gloriana
-gloriation
-gloriette
-glorifiable
-glorification
-glorifier
-glorify
-gloriole
-Gloriosa
-gloriosity
-glorious
-gloriously
-gloriousness
-glory
-gloryful
-glorying
-gloryingly
-gloryless
-gloss
-glossa
-glossagra
-glossal
-glossalgia
-glossalgy
-glossanthrax
-glossarial
-glossarially
-glossarian
-glossarist
-glossarize
-glossary
-Glossata
-glossate
-glossator
-glossatorial
-glossectomy
-glossed
-glosser
-glossic
-glossily
-Glossina
-glossiness
-glossing
-glossingly
-Glossiphonia
-Glossiphonidae
-glossist
-glossitic
-glossitis
-glossless
-glossmeter
-glossocarcinoma
-glossocele
-glossocoma
-glossocomon
-glossodynamometer
-glossodynia
-glossoepiglottic
-glossoepiglottidean
-glossograph
-glossographer
-glossographical
-glossography
-glossohyal
-glossoid
-glossokinesthetic
-glossolabial
-glossolabiolaryngeal
-glossolabiopharyngeal
-glossolalia
-glossolalist
-glossolaly
-glossolaryngeal
-glossological
-glossologist
-glossology
-glossolysis
-glossoncus
-glossopalatine
-glossopalatinus
-glossopathy
-glossopetra
-Glossophaga
-glossophagine
-glossopharyngeal
-glossopharyngeus
-Glossophora
-glossophorous
-glossophytia
-glossoplasty
-glossoplegia
-glossopode
-glossopodium
-Glossopteris
-glossoptosis
-glossopyrosis
-glossorrhaphy
-glossoscopia
-glossoscopy
-glossospasm
-glossosteresis
-Glossotherium
-glossotomy
-glossotype
-glossy
-glost
-glottal
-glottalite
-glottalize
-glottic
-glottid
-glottidean
-glottis
-glottiscope
-glottogonic
-glottogonist
-glottogony
-glottologic
-glottological
-glottologist
-glottology
-Gloucester
-glout
-glove
-gloveless
-glovelike
-glovemaker
-glovemaking
-glover
-gloveress
-glovey
-gloving
-glow
-glower
-glowerer
-glowering
-gloweringly
-glowfly
-glowing
-glowingly
-glowworm
-Gloxinia
-gloy
-gloze
-glozing
-glozingly
-glub
-glucase
-glucemia
-glucid
-glucide
-glucidic
-glucina
-glucine
-glucinic
-glucinium
-glucinum
-gluck
-glucofrangulin
-glucokinin
-glucolipid
-glucolipide
-glucolipin
-glucolipine
-glucolysis
-glucosaemia
-glucosamine
-glucosan
-glucosane
-glucosazone
-glucose
-glucosemia
-glucosic
-glucosid
-glucosidal
-glucosidase
-glucoside
-glucosidic
-glucosidically
-glucosin
-glucosine
-glucosone
-glucosuria
-glucuronic
-glue
-glued
-gluemaker
-gluemaking
-gluepot
-gluer
-gluey
-glueyness
-glug
-gluish
-gluishness
-glum
-gluma
-Glumaceae
-glumaceous
-glumal
-Glumales
-glume
-glumiferous
-Glumiflorae
-glumly
-glummy
-glumness
-glumose
-glumosity
-glump
-glumpily
-glumpiness
-glumpish
-glumpy
-glunch
-Gluneamie
-glusid
-gluside
-glut
-glutamic
-glutamine
-glutaminic
-glutaric
-glutathione
-glutch
-gluteal
-glutelin
-gluten
-glutenin
-glutenous
-gluteofemoral
-gluteoinguinal
-gluteoperineal
-gluteus
-glutin
-glutinate
-glutination
-glutinative
-glutinize
-glutinose
-glutinosity
-glutinous
-glutinously
-glutinousness
-glutition
-glutoid
-glutose
-glutter
-gluttery
-glutting
-gluttingly
-glutton
-gluttoness
-gluttonish
-gluttonism
-gluttonize
-gluttonous
-gluttonously
-gluttonousness
-gluttony
-glyceraldehyde
-glycerate
-Glyceria
-glyceric
-glyceride
-glycerin
-glycerinate
-glycerination
-glycerine
-glycerinize
-glycerite
-glycerize
-glycerizin
-glycerizine
-glycerogel
-glycerogelatin
-glycerol
-glycerolate
-glycerole
-glycerolize
-glycerophosphate
-glycerophosphoric
-glycerose
-glyceroxide
-glyceryl
-glycid
-glycide
-glycidic
-glycidol
-Glycine
-glycine
-glycinin
-glycocholate
-glycocholic
-glycocin
-glycocoll
-glycogelatin
-glycogen
-glycogenesis
-glycogenetic
-glycogenic
-glycogenize
-glycogenolysis
-glycogenous
-glycogeny
-glycohaemia
-glycohemia
-glycol
-glycolaldehyde
-glycolate
-glycolic
-glycolide
-glycolipid
-glycolipide
-glycolipin
-glycolipine
-glycoluric
-glycoluril
-glycolyl
-glycolylurea
-glycolysis
-glycolytic
-glycolytically
-Glyconian
-Glyconic
-glyconic
-glyconin
-glycoproteid
-glycoprotein
-glycosaemia
-glycose
-glycosemia
-glycosin
-glycosine
-glycosuria
-glycosuric
-glycuresis
-glycuronic
-glycyl
-glycyphyllin
-Glycyrrhiza
-glycyrrhizin
-Glynn
-glyoxal
-glyoxalase
-glyoxalic
-glyoxalin
-glyoxaline
-glyoxim
-glyoxime
-glyoxyl
-glyoxylic
-glyph
-glyphic
-glyphograph
-glyphographer
-glyphographic
-glyphography
-glyptic
-glyptical
-glyptician
-Glyptodon
-glyptodont
-Glyptodontidae
-glyptodontoid
-glyptograph
-glyptographer
-glyptographic
-glyptography
-glyptolith
-glyptological
-glyptologist
-glyptology
-glyptotheca
-Glyptotherium
-glyster
-Gmelina
-gmelinite
-gnabble
-Gnaeus
-gnaphalioid
-Gnaphalium
-gnar
-gnarl
-gnarled
-gnarliness
-gnarly
-gnash
-gnashingly
-gnat
-gnatcatcher
-gnatflower
-gnathal
-gnathalgia
-gnathic
-gnathidium
-gnathion
-gnathism
-gnathite
-gnathitis
-Gnatho
-gnathobase
-gnathobasic
-Gnathobdellae
-Gnathobdellida
-gnathometer
-gnathonic
-gnathonical
-gnathonically
-gnathonism
-gnathonize
-gnathophorous
-gnathoplasty
-gnathopod
-Gnathopoda
-gnathopodite
-gnathopodous
-gnathostegite
-Gnathostoma
-Gnathostomata
-gnathostomatous
-gnathostome
-Gnathostomi
-gnathostomous
-gnathotheca
-gnatling
-gnatproof
-gnatsnap
-gnatsnapper
-gnatter
-gnatty
-gnatworm
-gnaw
-gnawable
-gnawer
-gnawing
-gnawingly
-gnawn
-gneiss
-gneissic
-gneissitic
-gneissoid
-gneissose
-gneissy
-Gnetaceae
-gnetaceous
-Gnetales
-Gnetum
-gnocchetti
-gnome
-gnomed
-gnomesque
-gnomic
-gnomical
-gnomically
-gnomide
-gnomish
-gnomist
-gnomologic
-gnomological
-gnomologist
-gnomology
-gnomon
-Gnomonia
-Gnomoniaceae
-gnomonic
-gnomonical
-gnomonics
-gnomonological
-gnomonologically
-gnomonology
-gnosiological
-gnosiology
-gnosis
-Gnostic
-gnostic
-gnostical
-gnostically
-Gnosticism
-gnosticity
-gnosticize
-gnosticizer
-gnostology
-gnu
-go
-goa
-goad
-goadsman
-goadster
-goaf
-Goajiro
-goal
-Goala
-goalage
-goalee
-goalie
-goalkeeper
-goalkeeping
-goalless
-goalmouth
-Goan
-Goanese
-goanna
-Goasila
-goat
-goatbeard
-goatbrush
-goatbush
-goatee
-goateed
-goatfish
-goatherd
-goatherdess
-goatish
-goatishly
-goatishness
-goatland
-goatlike
-goatling
-goatly
-goatroot
-goatsbane
-goatsbeard
-goatsfoot
-goatskin
-goatstone
-goatsucker
-goatweed
-goaty
-goave
-gob
-goback
-goban
-gobang
-gobbe
-gobber
-gobbet
-gobbin
-gobbing
-gobble
-gobbledygook
-gobbler
-gobby
-Gobelin
-gobelin
-gobernadora
-gobi
-Gobia
-Gobian
-gobiesocid
-Gobiesocidae
-gobiesociform
-Gobiesox
-gobiid
-Gobiidae
-gobiiform
-Gobiiformes
-Gobinism
-Gobinist
-Gobio
-gobioid
-Gobioidea
-Gobioidei
-goblet
-gobleted
-gobletful
-goblin
-gobline
-goblinesque
-goblinish
-goblinism
-goblinize
-goblinry
-gobmouthed
-gobo
-gobonated
-gobony
-gobstick
-goburra
-goby
-gobylike
-gocart
-Goclenian
-God
-god
-godchild
-Goddam
-Goddard
-goddard
-goddaughter
-godded
-goddess
-goddesshood
-goddessship
-goddikin
-goddize
-gode
-godet
-Godetia
-godfather
-godfatherhood
-godfathership
-Godforsaken
-Godfrey
-Godful
-godhead
-godhood
-Godiva
-godkin
-godless
-godlessly
-godlessness
-godlet
-godlike
-godlikeness
-godlily
-godliness
-godling
-godly
-godmaker
-godmaking
-godmamma
-godmother
-godmotherhood
-godmothership
-godown
-godpapa
-godparent
-Godsake
-godsend
-godship
-godson
-godsonship
-Godspeed
-Godward
-Godwin
-Godwinian
-godwit
-goeduck
-goel
-goelism
-Goemagot
-Goemot
-goer
-goes
-Goetae
-Goethian
-goetia
-goetic
-goetical
-goety
-goff
-goffer
-goffered
-gofferer
-goffering
-goffle
-gog
-gogga
-goggan
-goggle
-goggled
-goggler
-gogglers
-goggly
-goglet
-Gogo
-gogo
-Gohila
-goi
-goiabada
-Goidel
-Goidelic
-going
-goitcho
-goiter
-goitered
-goitral
-goitrogen
-goitrogenic
-goitrous
-Gokuraku
-gol
-gola
-golach
-goladar
-golandaas
-golandause
-Golaseccan
-Golconda
-Gold
-gold
-goldbeater
-goldbeating
-Goldbird
-goldbrick
-goldbricker
-goldbug
-goldcrest
-goldcup
-golden
-goldenback
-goldeneye
-goldenfleece
-goldenhair
-goldenknop
-goldenlocks
-goldenly
-Goldenmouth
-goldenmouthed
-goldenness
-goldenpert
-goldenrod
-goldenseal
-goldentop
-goldenwing
-golder
-goldfielder
-goldfinch
-goldfinny
-goldfish
-goldflower
-goldhammer
-goldhead
-Goldi
-Goldic
-goldie
-goldilocks
-goldin
-goldish
-goldless
-goldlike
-Goldonian
-goldseed
-goldsinny
-goldsmith
-goldsmithery
-goldsmithing
-goldspink
-goldstone
-goldtail
-goldtit
-goldwater
-goldweed
-goldwork
-goldworker
-Goldy
-goldy
-golee
-golem
-golf
-golfdom
-golfer
-Golgi
-Golgotha
-goli
-goliard
-goliardery
-goliardic
-Goliath
-goliath
-goliathize
-golkakra
-Goll
-golland
-gollar
-golliwogg
-golly
-Golo
-goloe
-golpe
-Goma
-gomari
-Gomarian
-Gomarist
-Gomarite
-gomart
-gomashta
-gomavel
-gombay
-gombeen
-gombeenism
-gombroon
-Gomeisa
-gomer
-gomeral
-gomlah
-gommelin
-Gomontia
-Gomorrhean
-Gomphocarpus
-gomphodont
-Gompholobium
-gomphosis
-Gomphrena
-gomuti
-gon
-Gona
-gonad
-gonadal
-gonadial
-gonadic
-gonadotropic
-gonadotropin
-gonaduct
-gonagra
-gonakie
-gonal
-gonalgia
-gonangial
-gonangium
-gonapod
-gonapophysal
-gonapophysial
-gonapophysis
-gonarthritis
-Gond
-gondang
-Gondi
-gondite
-gondola
-gondolet
-gondolier
-gone
-goneness
-goneoclinic
-gonepoiesis
-gonepoietic
-goner
-Goneril
-gonesome
-gonfalcon
-gonfalonier
-gonfalonierate
-gonfaloniership
-gonfanon
-gong
-gongman
-Gongoresque
-Gongorism
-Gongorist
-gongoristic
-gonia
-goniac
-gonial
-goniale
-Goniaster
-goniatite
-Goniatites
-goniatitic
-goniatitid
-Goniatitidae
-goniatitoid
-gonid
-gonidangium
-gonidia
-gonidial
-gonidic
-gonidiferous
-gonidiogenous
-gonidioid
-gonidiophore
-gonidiose
-gonidiospore
-gonidium
-gonimic
-gonimium
-gonimolobe
-gonimous
-goniocraniometry
-Goniodoridae
-Goniodorididae
-Goniodoris
-goniometer
-goniometric
-goniometrical
-goniometrically
-goniometry
-gonion
-Goniopholidae
-Goniopholis
-goniostat
-goniotropous
-gonitis
-Gonium
-gonium
-gonnardite
-gonne
-gonoblast
-gonoblastic
-gonoblastidial
-gonoblastidium
-gonocalycine
-gonocalyx
-gonocheme
-gonochorism
-gonochorismal
-gonochorismus
-gonochoristic
-gonococcal
-gonococcic
-gonococcoid
-gonococcus
-gonocoel
-gonocyte
-gonoecium
-Gonolobus
-gonomere
-gonomery
-gonophore
-gonophoric
-gonophorous
-gonoplasm
-gonopoietic
-gonorrhea
-gonorrheal
-gonorrheic
-gonosomal
-gonosome
-gonosphere
-gonostyle
-gonotheca
-gonothecal
-gonotokont
-gonotome
-gonotype
-gonozooid
-gony
-gonyalgia
-gonydeal
-gonydial
-gonyocele
-gonyoncus
-gonys
-Gonystylaceae
-gonystylaceous
-Gonystylus
-gonytheca
-Gonzalo
-goo
-goober
-good
-Goodenia
-Goodeniaceae
-goodeniaceous
-Goodenoviaceae
-goodhearted
-goodheartedly
-goodheartedness
-gooding
-goodish
-goodishness
-goodlihead
-goodlike
-goodliness
-goodly
-goodman
-goodmanship
-goodness
-goods
-goodsome
-goodwife
-goodwill
-goodwillit
-goodwilly
-goody
-goodyear
-Goodyera
-goodyish
-goodyism
-goodyness
-goodyship
-goof
-goofer
-goofily
-goofiness
-goofy
-googly
-googol
-googolplex
-googul
-gook
-gool
-goolah
-gools
-gooma
-goon
-goondie
-goonie
-Goop
-goosander
-goose
-goosebeak
-gooseberry
-goosebill
-goosebird
-goosebone
-gooseboy
-goosecap
-goosefish
-gooseflower
-goosefoot
-goosegirl
-goosegog
-gooseherd
-goosehouse
-gooselike
-goosemouth
-gooseneck
-goosenecked
-gooserumped
-goosery
-goosetongue
-gooseweed
-goosewing
-goosewinged
-goosish
-goosishly
-goosishness
-goosy
-gopher
-gopherberry
-gopherroot
-gopherwood
-gopura
-Gor
-gor
-gora
-goracco
-goral
-goran
-gorb
-gorbal
-gorbellied
-gorbelly
-gorbet
-gorble
-gorblimy
-gorce
-gorcock
-gorcrow
-Gordiacea
-gordiacean
-gordiaceous
-Gordian
-Gordiidae
-Gordioidea
-Gordius
-gordolobo
-Gordon
-Gordonia
-gordunite
-Gordyaean
-gore
-gorer
-gorevan
-gorfly
-gorge
-gorgeable
-gorged
-gorgedly
-gorgelet
-gorgeous
-gorgeously
-gorgeousness
-gorger
-gorgerin
-gorget
-gorgeted
-gorglin
-Gorgon
-Gorgonacea
-gorgonacean
-gorgonaceous
-gorgonesque
-gorgoneum
-Gorgonia
-Gorgoniacea
-gorgoniacean
-gorgoniaceous
-Gorgonian
-gorgonian
-gorgonin
-gorgonize
-gorgonlike
-Gorgonzola
-Gorgosaurus
-gorhen
-goric
-gorilla
-gorillaship
-gorillian
-gorilline
-gorilloid
-gorily
-goriness
-goring
-Gorkhali
-Gorkiesque
-gorlin
-gorlois
-gormandize
-gormandizer
-gormaw
-gormed
-gorra
-gorraf
-gorry
-gorse
-gorsebird
-gorsechat
-gorsedd
-gorsehatch
-gorsy
-Gortonian
-Gortonite
-gory
-gos
-gosain
-goschen
-gosh
-goshawk
-Goshen
-goshenite
-goslarite
-goslet
-gosling
-gosmore
-gospel
-gospeler
-gospelist
-gospelize
-gospellike
-gospelly
-gospelmonger
-gospelwards
-Gosplan
-gospodar
-gosport
-gossamer
-gossamered
-gossamery
-gossampine
-gossan
-gossaniferous
-gossard
-gossip
-gossipdom
-gossipee
-gossiper
-gossiphood
-gossipiness
-gossiping
-gossipingly
-gossipmonger
-gossipred
-gossipry
-gossipy
-gossoon
-gossy
-gossypine
-Gossypium
-gossypol
-gossypose
-got
-gotch
-gote
-Goth
-Gotha
-Gotham
-Gothamite
-Gothic
-Gothically
-Gothicism
-Gothicist
-Gothicity
-Gothicize
-Gothicizer
-Gothicness
-Gothish
-Gothism
-gothite
-Gothlander
-Gothonic
-Gotiglacial
-gotra
-gotraja
-gotten
-Gottfried
-Gottlieb
-gouaree
-Gouda
-Goudy
-gouge
-gouger
-goujon
-goulash
-goumi
-goup
-Goura
-gourami
-gourd
-gourde
-gourdful
-gourdhead
-gourdiness
-gourdlike
-gourdworm
-gourdy
-Gourinae
-gourmand
-gourmander
-gourmanderie
-gourmandism
-gourmet
-gourmetism
-gourounut
-goustrous
-gousty
-gout
-goutify
-goutily
-goutiness
-goutish
-goutte
-goutweed
-goutwort
-gouty
-gove
-govern
-governability
-governable
-governableness
-governably
-governail
-governance
-governess
-governessdom
-governesshood
-governessy
-governing
-governingly
-government
-governmental
-governmentalism
-governmentalist
-governmentalize
-governmentally
-governmentish
-governor
-governorate
-governorship
-gowan
-gowdnie
-gowf
-gowfer
-gowiddie
-gowk
-gowked
-gowkedly
-gowkedness
-gowkit
-gowl
-gown
-gownlet
-gownsman
-gowpen
-goy
-Goyana
-goyazite
-Goyetian
-goyim
-goyin
-goyle
-gozell
-gozzard
-gra
-Graafian
-grab
-grabbable
-grabber
-grabble
-grabbler
-grabbling
-grabbots
-graben
-grabhook
-grabouche
-Grace
-grace
-graceful
-gracefully
-gracefulness
-graceless
-gracelessly
-gracelessness
-gracelike
-gracer
-Gracilaria
-gracilariid
-Gracilariidae
-gracile
-gracileness
-gracilescent
-gracilis
-gracility
-graciosity
-gracioso
-gracious
-graciously
-graciousness
-grackle
-Graculus
-grad
-gradable
-gradal
-gradate
-gradation
-gradational
-gradationally
-gradationately
-gradative
-gradatively
-gradatory
-graddan
-grade
-graded
-gradefinder
-gradely
-grader
-Gradgrind
-gradgrind
-Gradgrindian
-Gradgrindish
-Gradgrindism
-gradient
-gradienter
-Gradientia
-gradin
-gradine
-grading
-gradiometer
-gradiometric
-gradometer
-gradual
-gradualism
-gradualist
-gradualistic
-graduality
-gradually
-gradualness
-graduand
-graduate
-graduated
-graduateship
-graduatical
-graduating
-graduation
-graduator
-gradus
-Graeae
-Graeculus
-Graeme
-graff
-graffage
-graffer
-Graffias
-graffito
-grafship
-graft
-graftage
-graftdom
-grafted
-grafter
-grafting
-graftonite
-graftproof
-Graham
-graham
-grahamite
-Graian
-grail
-grailer
-grailing
-grain
-grainage
-grained
-grainedness
-grainer
-grainering
-grainery
-grainfield
-graininess
-graining
-grainland
-grainless
-grainman
-grainsick
-grainsickness
-grainsman
-grainways
-grainy
-graip
-graisse
-graith
-Grallae
-Grallatores
-grallatorial
-grallatory
-grallic
-Grallina
-gralline
-gralloch
-gram
-grama
-gramarye
-gramashes
-grame
-gramenite
-gramicidin
-Graminaceae
-graminaceous
-Gramineae
-gramineal
-gramineous
-gramineousness
-graminicolous
-graminiferous
-graminifolious
-graminiform
-graminin
-graminivore
-graminivorous
-graminological
-graminology
-graminous
-grammalogue
-grammar
-grammarian
-grammarianism
-grammarless
-grammatic
-grammatical
-grammatically
-grammaticalness
-grammaticaster
-grammaticism
-grammaticize
-grammatics
-grammatist
-grammatistical
-grammatite
-grammatolator
-grammatolatry
-Grammatophyllum
-gramme
-Grammontine
-gramoches
-Gramophone
-gramophone
-gramophonic
-gramophonical
-gramophonically
-gramophonist
-gramp
-grampa
-grampus
-granada
-granadilla
-granadillo
-Granadine
-granage
-granary
-granate
-granatum
-granch
-grand
-grandam
-grandame
-grandaunt
-grandchild
-granddad
-granddaddy
-granddaughter
-granddaughterly
-grandee
-grandeeism
-grandeeship
-grandesque
-grandeur
-grandeval
-grandfather
-grandfatherhood
-grandfatherish
-grandfatherless
-grandfatherly
-grandfathership
-grandfer
-grandfilial
-grandiloquence
-grandiloquent
-grandiloquently
-grandiloquous
-grandiose
-grandiosely
-grandiosity
-grandisonant
-Grandisonian
-Grandisonianism
-grandisonous
-grandly
-grandma
-grandmaternal
-Grandmontine
-grandmother
-grandmotherhood
-grandmotherism
-grandmotherliness
-grandmotherly
-grandnephew
-grandness
-grandniece
-grandpa
-grandparent
-grandparentage
-grandparental
-grandpaternal
-grandsire
-grandson
-grandsonship
-grandstand
-grandstander
-granduncle
-grane
-grange
-granger
-grangerism
-grangerite
-grangerization
-grangerize
-grangerizer
-Grangousier
-graniform
-granilla
-granite
-granitelike
-graniteware
-granitic
-granitical
-graniticoline
-granitiferous
-granitification
-granitiform
-granitite
-granitization
-granitize
-granitoid
-granivore
-granivorous
-granjeno
-grank
-grannom
-granny
-grannybush
-grano
-granoblastic
-granodiorite
-granogabbro
-granolite
-granolith
-granolithic
-granomerite
-granophyre
-granophyric
-granose
-granospherite
-Grant
-grant
-grantable
-grantedly
-grantee
-granter
-Granth
-Grantha
-Grantia
-Grantiidae
-grantor
-granula
-granular
-granularity
-granularly
-granulary
-granulate
-granulated
-granulater
-granulation
-granulative
-granulator
-granule
-granulet
-granuliferous
-granuliform
-granulite
-granulitic
-granulitis
-granulitization
-granulitize
-granulize
-granuloadipose
-granulocyte
-granuloma
-granulomatous
-granulometric
-granulosa
-granulose
-granulous
-Granville
-granza
-granzita
-grape
-graped
-grapeflower
-grapefruit
-grapeful
-grapeless
-grapelet
-grapelike
-grapenuts
-graperoot
-grapery
-grapeshot
-grapeskin
-grapestalk
-grapestone
-grapevine
-grapewise
-grapewort
-graph
-graphalloy
-graphic
-graphical
-graphically
-graphicalness
-graphicly
-graphicness
-graphics
-Graphidiaceae
-Graphiola
-graphiological
-graphiologist
-graphiology
-Graphis
-graphite
-graphiter
-graphitic
-graphitization
-graphitize
-graphitoid
-graphitoidal
-Graphium
-graphologic
-graphological
-graphologist
-graphology
-graphomania
-graphomaniac
-graphometer
-graphometric
-graphometrical
-graphometry
-graphomotor
-Graphophone
-graphophone
-graphophonic
-graphorrhea
-graphoscope
-graphospasm
-graphostatic
-graphostatical
-graphostatics
-graphotype
-graphotypic
-graphy
-graping
-grapnel
-grappa
-grapple
-grappler
-grappling
-Grapsidae
-grapsoid
-Grapsus
-Grapta
-graptolite
-Graptolitha
-Graptolithida
-Graptolithina
-graptolitic
-Graptolitoidea
-Graptoloidea
-graptomancy
-grapy
-grasp
-graspable
-grasper
-grasping
-graspingly
-graspingness
-graspless
-grass
-grassant
-grassation
-grassbird
-grasschat
-grasscut
-grasscutter
-grassed
-grasser
-grasset
-grassflat
-grassflower
-grasshop
-grasshopper
-grasshopperdom
-grasshopperish
-grasshouse
-grassiness
-grassing
-grassland
-grassless
-grasslike
-grassman
-grassnut
-grassplot
-grassquit
-grasswards
-grassweed
-grasswidowhood
-grasswork
-grassworm
-grassy
-grat
-grate
-grateful
-gratefully
-gratefulness
-grateless
-grateman
-grater
-gratewise
-grather
-Gratia
-Gratiano
-graticulate
-graticulation
-graticule
-gratification
-gratified
-gratifiedly
-gratifier
-gratify
-gratifying
-gratifyingly
-gratility
-gratillity
-gratinate
-grating
-Gratiola
-gratiolin
-gratiosolin
-gratis
-gratitude
-gratten
-grattoir
-gratuitant
-gratuitous
-gratuitously
-gratuitousness
-gratuity
-gratulant
-gratulate
-gratulation
-gratulatorily
-gratulatory
-graupel
-gravamen
-gravamina
-grave
-graveclod
-gravecloth
-graveclothes
-graved
-gravedigger
-gravegarth
-gravel
-graveless
-gravelike
-graveling
-gravelish
-gravelliness
-gravelly
-gravelroot
-gravelstone
-gravelweed
-gravely
-gravemaker
-gravemaking
-graveman
-gravemaster
-graven
-graveness
-Gravenstein
-graveolence
-graveolency
-graveolent
-graver
-Graves
-graveship
-graveside
-gravestead
-gravestone
-graveward
-gravewards
-graveyard
-gravic
-gravicembalo
-gravid
-gravidity
-gravidly
-gravidness
-Gravigrada
-gravigrade
-gravimeter
-gravimetric
-gravimetrical
-gravimetrically
-gravimetry
-graving
-gravitate
-gravitater
-gravitation
-gravitational
-gravitationally
-gravitative
-gravitometer
-gravity
-gravure
-gravy
-grawls
-gray
-grayback
-graybeard
-graycoat
-grayfish
-grayfly
-grayhead
-grayish
-graylag
-grayling
-grayly
-graymalkin
-graymill
-grayness
-graypate
-graywacke
-grayware
-graywether
-grazable
-graze
-grazeable
-grazer
-grazier
-grazierdom
-graziery
-grazing
-grazingly
-grease
-greasebush
-greasehorn
-greaseless
-greaselessness
-greaseproof
-greaseproofness
-greaser
-greasewood
-greasily
-greasiness
-greasy
-great
-greatcoat
-greatcoated
-greaten
-greater
-greathead
-greatheart
-greathearted
-greatheartedness
-greatish
-greatly
-greatmouthed
-greatness
-greave
-greaved
-greaves
-grebe
-Grebo
-grece
-Grecian
-Grecianize
-Grecism
-Grecize
-Grecomania
-Grecomaniac
-Grecophil
-gree
-greed
-greedily
-greediness
-greedless
-greedsome
-greedy
-greedygut
-greedyguts
-Greek
-Greekdom
-Greekery
-Greekess
-Greekish
-Greekism
-Greekist
-Greekize
-Greekless
-Greekling
-green
-greenable
-greenage
-greenalite
-greenback
-Greenbacker
-Greenbackism
-greenbark
-greenbone
-greenbrier
-Greencloth
-greencoat
-greener
-greenery
-greeney
-greenfinch
-greenfish
-greengage
-greengill
-greengrocer
-greengrocery
-greenhead
-greenheaded
-greenheart
-greenhearted
-greenhew
-greenhide
-greenhood
-greenhorn
-greenhornism
-greenhouse
-greening
-greenish
-greenishness
-greenkeeper
-greenkeeping
-Greenland
-Greenlander
-Greenlandic
-Greenlandish
-greenlandite
-Greenlandman
-greenleek
-greenless
-greenlet
-greenling
-greenly
-greenness
-greenockite
-greenovite
-greenroom
-greensand
-greensauce
-greenshank
-greensick
-greensickness
-greenside
-greenstone
-greenstuff
-greensward
-greenswarded
-greentail
-greenth
-greenuk
-greenweed
-Greenwich
-greenwing
-greenwithe
-greenwood
-greenwort
-greeny
-greenyard
-greet
-greeter
-greeting
-greetingless
-greetingly
-greffier
-greffotome
-Greg
-gregal
-gregale
-gregaloid
-gregarian
-gregarianism
-Gregarina
-Gregarinae
-Gregarinaria
-gregarine
-Gregarinida
-gregarinidal
-gregariniform
-Gregarinina
-Gregarinoidea
-gregarinosis
-gregarinous
-gregarious
-gregariously
-gregariousness
-gregaritic
-grege
-Gregg
-Gregge
-greggle
-grego
-Gregor
-Gregorian
-Gregorianist
-Gregorianize
-Gregorianizer
-Gregory
-greige
-grein
-greisen
-gremial
-gremlin
-grenade
-Grenadian
-grenadier
-grenadierial
-grenadierly
-grenadiership
-grenadin
-grenadine
-Grendel
-Grenelle
-Gressoria
-gressorial
-gressorious
-Greta
-Gretchen
-Gretel
-greund
-Grevillea
-grew
-grewhound
-Grewia
-grey
-greyhound
-Greyiaceae
-greyly
-greyness
-gribble
-grice
-grid
-griddle
-griddlecake
-griddler
-gride
-gridelin
-gridiron
-griece
-grieced
-grief
-griefful
-grieffully
-griefless
-grieflessness
-grieshoch
-grievance
-grieve
-grieved
-grievedly
-griever
-grieveship
-grieving
-grievingly
-grievous
-grievously
-grievousness
-Griff
-griff
-griffade
-griffado
-griffaun
-griffe
-griffin
-griffinage
-griffinesque
-griffinhood
-griffinish
-griffinism
-Griffith
-griffithite
-Griffon
-griffon
-griffonage
-griffonne
-grift
-grifter
-grig
-griggles
-grignet
-grigri
-grihastha
-grihyasutra
-grike
-grill
-grillade
-grillage
-grille
-grilled
-griller
-grillroom
-grillwork
-grilse
-grim
-grimace
-grimacer
-grimacier
-grimacing
-grimacingly
-grimalkin
-grime
-grimful
-grimgribber
-grimily
-griminess
-grimliness
-grimly
-grimme
-Grimmia
-Grimmiaceae
-grimmiaceous
-grimmish
-grimness
-grimp
-grimy
-grin
-grinagog
-grinch
-grind
-grindable
-Grindelia
-grinder
-grinderman
-grindery
-grinding
-grindingly
-grindle
-grindstone
-gringo
-gringolee
-gringophobia
-Grinnellia
-grinner
-grinning
-grinningly
-grinny
-grintern
-grip
-gripe
-gripeful
-griper
-gripgrass
-griphite
-Griphosaurus
-griping
-gripingly
-gripless
-gripman
-gripment
-grippal
-grippe
-gripper
-grippiness
-gripping
-grippingly
-grippingness
-gripple
-grippleness
-grippotoxin
-grippy
-gripsack
-gripy
-Griqua
-griquaite
-Griqualander
-gris
-grisaille
-grisard
-Griselda
-griseous
-grisette
-grisettish
-grisgris
-griskin
-grisliness
-grisly
-Grison
-grison
-grisounite
-grisoutine
-Grissel
-grissens
-grissons
-grist
-gristbite
-grister
-Gristhorbia
-gristle
-gristliness
-gristly
-gristmill
-gristmiller
-gristmilling
-gristy
-grit
-grith
-grithbreach
-grithman
-gritless
-gritrock
-grits
-gritstone
-gritten
-gritter
-grittily
-grittiness
-grittle
-gritty
-grivet
-grivna
-Grizel
-Grizzel
-grizzle
-grizzled
-grizzler
-grizzly
-grizzlyman
-groan
-groaner
-groanful
-groaning
-groaningly
-groat
-groats
-groatsworth
-grobian
-grobianism
-grocer
-grocerdom
-groceress
-grocerly
-grocerwise
-grocery
-groceryman
-Groenendael
-groff
-grog
-groggery
-groggily
-grogginess
-groggy
-grogram
-grogshop
-groin
-groined
-groinery
-groining
-Grolier
-Grolieresque
-gromatic
-gromatics
-Gromia
-grommet
-gromwell
-groom
-groomer
-groomish
-groomishly
-groomlet
-groomling
-groomsman
-groomy
-groop
-groose
-groot
-grooty
-groove
-grooveless
-groovelike
-groover
-grooverhead
-grooviness
-grooving
-groovy
-grope
-groper
-groping
-gropingly
-gropple
-grorudite
-gros
-grosbeak
-groschen
-groser
-groset
-grosgrain
-grosgrained
-gross
-grossart
-grossen
-grosser
-grossification
-grossify
-grossly
-grossness
-grosso
-grossulaceous
-grossular
-Grossularia
-grossularia
-Grossulariaceae
-grossulariaceous
-grossularious
-grossularite
-grosz
-groszy
-grot
-grotesque
-grotesquely
-grotesqueness
-grotesquerie
-grothine
-grothite
-Grotian
-Grotianism
-grottesco
-grotto
-grottoed
-grottolike
-grottowork
-grouch
-grouchily
-grouchiness
-grouchingly
-grouchy
-grouf
-grough
-ground
-groundable
-groundably
-groundage
-groundberry
-groundbird
-grounded
-groundedly
-groundedness
-groundenell
-grounder
-groundflower
-grounding
-groundless
-groundlessly
-groundlessness
-groundliness
-groundling
-groundly
-groundman
-groundmass
-groundneedle
-groundnut
-groundplot
-grounds
-groundsel
-groundsill
-groundsman
-groundward
-groundwood
-groundwork
-groundy
-group
-groupage
-groupageness
-grouped
-grouper
-grouping
-groupist
-grouplet
-groupment
-groupwise
-grouse
-grouseberry
-grouseless
-grouser
-grouseward
-grousewards
-grousy
-grout
-grouter
-grouthead
-grouts
-grouty
-grouze
-grove
-groved
-grovel
-groveler
-groveless
-groveling
-grovelingly
-grovelings
-grovy
-grow
-growable
-growan
-growed
-grower
-growing
-growingly
-growingupness
-growl
-growler
-growlery
-growling
-growlingly
-growly
-grown
-grownup
-growse
-growsome
-growth
-growthful
-growthiness
-growthless
-growthy
-grozart
-grozet
-grr
-grub
-grubbed
-grubber
-grubbery
-grubbily
-grubbiness
-grubby
-grubhood
-grubless
-grubroot
-grubs
-grubstake
-grubstaker
-Grubstreet
-grubstreet
-grubworm
-grudge
-grudgeful
-grudgefully
-grudgekin
-grudgeless
-grudger
-grudgery
-grudging
-grudgingly
-grudgingness
-grudgment
-grue
-gruel
-grueler
-grueling
-gruelly
-Grues
-gruesome
-gruesomely
-gruesomeness
-gruff
-gruffily
-gruffiness
-gruffish
-gruffly
-gruffness
-gruffs
-gruffy
-grufted
-grugru
-Gruidae
-gruiform
-Gruiformes
-gruine
-Gruis
-grum
-grumble
-grumbler
-grumblesome
-Grumbletonian
-grumbling
-grumblingly
-grumbly
-grume
-Grumium
-grumly
-grummel
-grummels
-grummet
-grummeter
-grumness
-grumose
-grumous
-grumousness
-grump
-grumph
-grumphie
-grumphy
-grumpily
-grumpiness
-grumpish
-grumpy
-grun
-Grundified
-Grundlov
-grundy
-Grundyism
-Grundyist
-Grundyite
-grunerite
-gruneritization
-grunion
-grunt
-grunter
-Grunth
-grunting
-gruntingly
-gruntle
-gruntled
-gruntling
-Grus
-grush
-grushie
-Grusian
-Grusinian
-gruss
-grutch
-grutten
-gryde
-grylli
-gryllid
-Gryllidae
-gryllos
-Gryllotalpa
-Gryllus
-gryllus
-grypanian
-Gryphaea
-Gryphosaurus
-gryposis
-Grypotherium
-grysbok
-guaba
-guacacoa
-guachamaca
-guacharo
-guachipilin
-Guacho
-Guacico
-guacimo
-guacin
-guaco
-guaconize
-Guadagnini
-guadalcazarite
-Guaharibo
-Guahiban
-Guahibo
-Guahivo
-guaiac
-guaiacol
-guaiacolize
-guaiaconic
-guaiacum
-guaiaretic
-guaiasanol
-guaiol
-guaka
-Gualaca
-guama
-guan
-Guana
-guana
-guanabana
-guanabano
-guanaco
-guanajuatite
-guanamine
-guanase
-guanay
-Guanche
-guaneide
-guango
-guanidine
-guanidopropionic
-guaniferous
-guanine
-guanize
-guano
-guanophore
-guanosine
-guanyl
-guanylic
-guao
-guapena
-guapilla
-guapinol
-Guaque
-guar
-guara
-guarabu
-guaracha
-guaraguao
-guarana
-Guarani
-guarani
-Guaranian
-guaranine
-guarantee
-guaranteeship
-guarantor
-guarantorship
-guaranty
-guarapucu
-Guaraunan
-Guarauno
-guard
-guardable
-guardant
-guarded
-guardedly
-guardedness
-guardeen
-guarder
-guardfish
-guardful
-guardfully
-guardhouse
-guardian
-guardiancy
-guardianess
-guardianless
-guardianly
-guardianship
-guarding
-guardingly
-guardless
-guardlike
-guardo
-guardrail
-guardroom
-guardship
-guardsman
-guardstone
-Guarea
-guariba
-guarinite
-guarneri
-Guarnerius
-Guarnieri
-Guarrau
-guarri
-Guaruan
-guasa
-Guastalline
-guatambu
-Guatemalan
-Guatemaltecan
-guativere
-Guato
-Guatoan
-Guatusan
-Guatuso
-Guauaenok
-guava
-guavaberry
-guavina
-guayaba
-guayabi
-guayabo
-guayacan
-Guayaqui
-Guaycuru
-Guaycuruan
-Guaymie
-guayroto
-guayule
-guaza
-Guazuma
-gubbertush
-Gubbin
-gubbo
-gubernacula
-gubernacular
-gubernaculum
-gubernative
-gubernator
-gubernatorial
-gubernatrix
-guberniya
-gucki
-gud
-gudame
-guddle
-gude
-gudebrother
-gudefather
-gudemother
-gudesake
-gudesakes
-gudesire
-gudewife
-gudge
-gudgeon
-gudget
-gudok
-gue
-guebucu
-guejarite
-Guelph
-Guelphic
-Guelphish
-Guelphism
-guemal
-guenepe
-guenon
-guepard
-guerdon
-guerdonable
-guerdoner
-guerdonless
-guereza
-Guerickian
-Guerinet
-Guernsey
-guernsey
-guernseyed
-guerrilla
-guerrillaism
-guerrillaship
-Guesdism
-Guesdist
-guess
-guessable
-guesser
-guessing
-guessingly
-guesswork
-guessworker
-guest
-guestchamber
-guesten
-guester
-guesthouse
-guesting
-guestive
-guestless
-Guestling
-guestling
-guestmaster
-guestship
-guestwise
-Guetar
-Guetare
-gufa
-guff
-guffaw
-guffer
-guffin
-guffy
-gugal
-guggle
-gugglet
-guglet
-guglia
-guglio
-gugu
-Guha
-Guhayna
-guhr
-Guiana
-Guianan
-Guianese
-guib
-guiba
-guidable
-guidage
-guidance
-guide
-guideboard
-guidebook
-guidebookish
-guidecraft
-guideless
-guideline
-guidepost
-guider
-guideress
-guidership
-guideship
-guideway
-guidman
-Guido
-guidon
-Guidonian
-guidwilly
-guige
-Guignardia
-guignol
-guijo
-Guilandina
-guild
-guilder
-guildhall
-guildic
-guildry
-guildship
-guildsman
-guile
-guileful
-guilefully
-guilefulness
-guileless
-guilelessly
-guilelessness
-guilery
-guillemet
-guillemot
-Guillermo
-guillevat
-guilloche
-guillochee
-guillotinade
-guillotine
-guillotinement
-guillotiner
-guillotinism
-guillotinist
-guilt
-guiltily
-guiltiness
-guiltless
-guiltlessly
-guiltlessness
-guiltsick
-guilty
-guily
-guimbard
-guimpe
-Guinea
-guinea
-Guineaman
-Guinean
-Guinevere
-guipure
-Guisard
-guisard
-guise
-guiser
-Guisian
-guising
-guitar
-guitarfish
-guitarist
-guitermanite
-guitguit
-Guittonian
-Gujar
-Gujarati
-Gujrati
-gul
-gula
-gulae
-gulaman
-gulancha
-Gulanganes
-gular
-gularis
-gulch
-gulden
-guldengroschen
-gule
-gules
-Gulf
-gulf
-gulflike
-gulfside
-gulfwards
-gulfweed
-gulfy
-gulgul
-gulinula
-gulinulae
-gulinular
-gulix
-gull
-Gullah
-gullery
-gullet
-gulleting
-gullibility
-gullible
-gullibly
-gullion
-gullish
-gullishly
-gullishness
-gully
-gullyhole
-Gulo
-gulonic
-gulose
-gulosity
-gulp
-gulper
-gulpin
-gulping
-gulpingly
-gulpy
-gulravage
-gulsach
-Gum
-gum
-gumbo
-gumboil
-gumbotil
-gumby
-gumchewer
-gumdigger
-gumdigging
-gumdrop
-gumfield
-gumflower
-gumihan
-gumless
-gumlike
-gumly
-gumma
-gummage
-gummaker
-gummaking
-gummata
-gummatous
-gummed
-gummer
-gummiferous
-gumminess
-gumming
-gummite
-gummose
-gummosis
-gummosity
-gummous
-gummy
-gump
-gumphion
-gumption
-gumptionless
-gumptious
-gumpus
-gumshoe
-gumweed
-gumwood
-gun
-guna
-gunate
-gunation
-gunbearer
-gunboat
-gunbright
-gunbuilder
-guncotton
-gundi
-gundy
-gunebo
-gunfire
-gunflint
-gunge
-gunhouse
-Gunite
-gunite
-gunj
-gunk
-gunl
-gunless
-gunlock
-gunmaker
-gunmaking
-gunman
-gunmanship
-gunnage
-Gunnar
-gunne
-gunnel
-gunner
-Gunnera
-Gunneraceae
-gunneress
-gunnership
-gunnery
-gunnies
-gunning
-gunnung
-gunny
-gunocracy
-gunong
-gunpaper
-gunplay
-gunpowder
-gunpowderous
-gunpowdery
-gunpower
-gunrack
-gunreach
-gunrunner
-gunrunning
-gunsel
-gunshop
-gunshot
-gunsman
-gunsmith
-gunsmithery
-gunsmithing
-gunster
-gunstick
-gunstock
-gunstocker
-gunstocking
-gunstone
-Gunter
-gunter
-Gunther
-gunwale
-gunyah
-gunyang
-gunyeh
-Gunz
-Gunzian
-gup
-guppy
-guptavidya
-gur
-Guran
-gurdfish
-gurdle
-gurdwara
-gurge
-gurgeon
-gurgeons
-gurges
-gurgitation
-gurgle
-gurglet
-gurgling
-gurglingly
-gurgly
-gurgoyle
-gurgulation
-Gurian
-Guric
-Gurish
-Gurjara
-gurjun
-gurk
-Gurkha
-gurl
-gurly
-Gurmukhi
-gurnard
-gurnet
-gurnetty
-Gurneyite
-gurniad
-gurr
-gurrah
-gurry
-gurt
-guru
-guruship
-Gus
-gush
-gusher
-gushet
-gushily
-gushiness
-gushing
-gushingly
-gushingness
-gushy
-gusla
-gusle
-guss
-gusset
-Gussie
-gussie
-gust
-gustable
-gustation
-gustative
-gustativeness
-gustatory
-Gustavus
-gustful
-gustfully
-gustfulness
-gustily
-gustiness
-gustless
-gusto
-gustoish
-Gustus
-gusty
-gut
-Guti
-Gutium
-gutless
-gutlike
-gutling
-Gutnic
-Gutnish
-gutt
-gutta
-guttable
-guttate
-guttated
-guttatim
-guttation
-gutte
-gutter
-Guttera
-gutterblood
-guttering
-gutterlike
-gutterling
-gutterman
-guttersnipe
-guttersnipish
-gutterspout
-gutterwise
-guttery
-gutti
-guttide
-guttie
-Guttiferae
-guttiferal
-Guttiferales
-guttiferous
-guttiform
-guttiness
-guttle
-guttler
-guttula
-guttulae
-guttular
-guttulate
-guttule
-guttural
-gutturalism
-gutturality
-gutturalization
-gutturalize
-gutturally
-gutturalness
-gutturize
-gutturonasal
-gutturopalatal
-gutturopalatine
-gutturotetany
-guttus
-gutty
-gutweed
-gutwise
-gutwort
-guvacine
-guvacoline
-Guy
-guy
-Guyandot
-guydom
-guyer
-guytrash
-guz
-guze
-Guzmania
-guzmania
-Guzul
-guzzle
-guzzledom
-guzzler
-gwag
-gweduc
-gweed
-gweeon
-gwely
-Gwen
-Gwendolen
-gwine
-gwyniad
-Gyarung
-gyascutus
-Gyges
-Gygis
-gyle
-gym
-gymel
-gymkhana
-Gymnadenia
-Gymnadeniopsis
-Gymnanthes
-gymnanthous
-Gymnarchidae
-Gymnarchus
-gymnasia
-gymnasial
-gymnasiarch
-gymnasiarchy
-gymnasiast
-gymnasic
-gymnasium
-gymnast
-gymnastic
-gymnastically
-gymnastics
-gymnemic
-gymnetrous
-gymnic
-gymnical
-gymnics
-gymnite
-Gymnoblastea
-gymnoblastic
-Gymnocalycium
-gymnocarpic
-gymnocarpous
-Gymnocerata
-gymnoceratous
-gymnocidium
-Gymnocladus
-Gymnoconia
-Gymnoderinae
-Gymnodiniaceae
-gymnodiniaceous
-Gymnodiniidae
-Gymnodinium
-gymnodont
-Gymnodontes
-gymnogen
-gymnogenous
-Gymnoglossa
-gymnoglossate
-gymnogynous
-Gymnogyps
-Gymnolaema
-Gymnolaemata
-gymnolaematous
-Gymnonoti
-Gymnopaedes
-gymnopaedic
-gymnophiona
-gymnoplast
-Gymnorhina
-gymnorhinal
-Gymnorhininae
-gymnosoph
-gymnosophist
-gymnosophy
-gymnosperm
-Gymnospermae
-gymnospermal
-gymnospermic
-gymnospermism
-Gymnospermous
-gymnospermy
-Gymnosporangium
-gymnospore
-gymnosporous
-Gymnostomata
-Gymnostomina
-gymnostomous
-Gymnothorax
-gymnotid
-Gymnotidae
-Gymnotoka
-gymnotokous
-Gymnotus
-Gymnura
-gymnure
-Gymnurinae
-gymnurine
-gympie
-gyn
-gynaecea
-gynaeceum
-gynaecocoenic
-gynander
-gynandrarchic
-gynandrarchy
-Gynandria
-gynandria
-gynandrian
-gynandrism
-gynandroid
-gynandromorph
-gynandromorphic
-gynandromorphism
-gynandromorphous
-gynandromorphy
-gynandrophore
-gynandrosporous
-gynandrous
-gynandry
-gynantherous
-gynarchic
-gynarchy
-gyne
-gynecic
-gynecidal
-gynecide
-gynecocentric
-gynecocracy
-gynecocrat
-gynecocratic
-gynecocratical
-gynecoid
-gynecolatry
-gynecologic
-gynecological
-gynecologist
-gynecology
-gynecomania
-gynecomastia
-gynecomastism
-gynecomasty
-gynecomazia
-gynecomorphous
-gyneconitis
-gynecopathic
-gynecopathy
-gynecophore
-gynecophoric
-gynecophorous
-gynecotelic
-gynecratic
-gyneocracy
-gyneolater
-gyneolatry
-gynephobia
-Gynerium
-gynethusia
-gyniatrics
-gyniatry
-gynic
-gynics
-gynobase
-gynobaseous
-gynobasic
-gynocardia
-gynocardic
-gynocracy
-gynocratic
-gynodioecious
-gynodioeciously
-gynodioecism
-gynoecia
-gynoecium
-gynogenesis
-gynomonecious
-gynomonoeciously
-gynomonoecism
-gynophagite
-gynophore
-gynophoric
-gynosporangium
-gynospore
-gynostegia
-gynostegium
-gynostemium
-Gynura
-gyp
-Gypaetus
-gype
-gypper
-Gyppo
-Gyps
-gyps
-gypseian
-gypseous
-gypsiferous
-gypsine
-gypsiologist
-gypsite
-gypsography
-gypsologist
-gypsology
-Gypsophila
-gypsophila
-gypsophilous
-gypsophily
-gypsoplast
-gypsous
-gypster
-gypsum
-Gypsy
-gypsy
-gypsydom
-gypsyesque
-gypsyfy
-gypsyhead
-gypsyhood
-gypsyish
-gypsyism
-gypsylike
-gypsyry
-gypsyweed
-gypsywise
-gypsywort
-Gyracanthus
-gyral
-gyrally
-gyrant
-gyrate
-gyration
-gyrational
-gyrator
-gyratory
-gyre
-Gyrencephala
-gyrencephalate
-gyrencephalic
-gyrencephalous
-gyrene
-gyrfalcon
-gyri
-gyric
-gyrinid
-Gyrinidae
-Gyrinus
-gyro
-gyrocar
-gyroceracone
-gyroceran
-Gyroceras
-gyrochrome
-gyrocompass
-Gyrodactylidae
-Gyrodactylus
-gyrogonite
-gyrograph
-gyroidal
-gyroidally
-gyrolite
-gyrolith
-gyroma
-gyromagnetic
-gyromancy
-gyromele
-gyrometer
-Gyromitra
-gyron
-gyronny
-Gyrophora
-Gyrophoraceae
-Gyrophoraceous
-gyrophoric
-gyropigeon
-gyroplane
-gyroscope
-gyroscopic
-gyroscopically
-gyroscopics
-gyrose
-gyrostabilizer
-Gyrostachys
-gyrostat
-gyrostatic
-gyrostatically
-gyrostatics
-Gyrotheca
-gyrous
-gyrovagi
-gyrovagues
-gyrowheel
-gyrus
-gyte
-gytling
-gyve
-H
-h
-ha
-haab
-haaf
-Habab
-habanera
-Habbe
-habble
-habdalah
-Habe
-habeas
-habena
-habenal
-habenar
-Habenaria
-habendum
-habenula
-habenular
-haberdash
-haberdasher
-haberdasheress
-haberdashery
-haberdine
-habergeon
-habilable
-habilatory
-habile
-habiliment
-habilimentation
-habilimented
-habilitate
-habilitation
-habilitator
-hability
-habille
-Habiri
-Habiru
-habit
-habitability
-habitable
-habitableness
-habitably
-habitacle
-habitacule
-habitally
-habitan
-habitance
-habitancy
-habitant
-habitat
-habitate
-habitation
-habitational
-habitative
-habited
-habitual
-habituality
-habitualize
-habitually
-habitualness
-habituate
-habituation
-habitude
-habitudinal
-habitue
-habitus
-habnab
-haboob
-Habronema
-habronemiasis
-habronemic
-habu
-habutai
-habutaye
-hache
-Hachiman
-hachure
-hacienda
-hack
-hackamatak
-hackamore
-hackbarrow
-hackberry
-hackbolt
-hackbush
-hackbut
-hackbuteer
-hacked
-hackee
-hacker
-hackery
-hackin
-hacking
-hackingly
-hackle
-hackleback
-hackler
-hacklog
-hackly
-hackmack
-hackman
-hackmatack
-hackney
-hackneyed
-hackneyer
-hackneyism
-hackneyman
-hacksaw
-hacksilber
-hackster
-hackthorn
-hacktree
-hackwood
-hacky
-had
-Hadassah
-hadbot
-hadden
-haddie
-haddo
-haddock
-haddocker
-hade
-Hadean
-Hadendoa
-Hadendowa
-hadentomoid
-Hadentomoidea
-Hades
-Hadhramautian
-hading
-Hadith
-hadj
-Hadjemi
-hadji
-hadland
-Hadramautian
-hadrome
-Hadromerina
-hadromycosis
-hadrosaur
-Hadrosaurus
-haec
-haecceity
-Haeckelian
-Haeckelism
-haem
-Haemamoeba
-Haemanthus
-Haemaphysalis
-haemaspectroscope
-haematherm
-haemathermal
-haemathermous
-haematinon
-haematinum
-haematite
-Haematobranchia
-haematobranchiate
-Haematocrya
-haematocryal
-Haematophilina
-haematophiline
-Haematopus
-haematorrhachis
-haematosepsis
-Haematotherma
-haematothermal
-haematoxylic
-haematoxylin
-Haematoxylon
-haemoconcentration
-haemodilution
-Haemodoraceae
-haemodoraceous
-haemoglobin
-haemogram
-Haemogregarina
-Haemogregarinidae
-haemonchiasis
-haemonchosis
-Haemonchus
-haemony
-haemophile
-Haemoproteus
-haemorrhage
-haemorrhagia
-haemorrhagic
-haemorrhoid
-haemorrhoidal
-haemosporid
-Haemosporidia
-haemosporidian
-Haemosporidium
-Haemulidae
-haemuloid
-haeremai
-haet
-haff
-haffet
-haffkinize
-haffle
-Hafgan
-hafiz
-hafnium
-hafnyl
-haft
-hafter
-hag
-Haganah
-Hagarite
-hagberry
-hagboat
-hagborn
-hagbush
-hagdon
-hageen
-Hagenia
-hagfish
-haggada
-haggaday
-haggadic
-haggadical
-haggadist
-haggadistic
-haggard
-haggardly
-haggardness
-hagged
-hagger
-haggis
-haggish
-haggishly
-haggishness
-haggister
-haggle
-haggler
-haggly
-haggy
-hagi
-hagia
-hagiarchy
-hagiocracy
-Hagiographa
-hagiographal
-hagiographer
-hagiographic
-hagiographical
-hagiographist
-hagiography
-hagiolater
-hagiolatrous
-hagiolatry
-hagiologic
-hagiological
-hagiologist
-hagiology
-hagiophobia
-hagioscope
-hagioscopic
-haglet
-haglike
-haglin
-hagride
-hagrope
-hagseed
-hagship
-hagstone
-hagtaper
-hagweed
-hagworm
-hah
-Hahnemannian
-Hahnemannism
-Haiathalah
-Haida
-Haidan
-Haidee
-haidingerite
-Haiduk
-haik
-haikai
-haikal
-Haikh
-haikwan
-hail
-hailer
-hailproof
-hailse
-hailshot
-hailstone
-hailstorm
-hailweed
-haily
-Haimavati
-hain
-Hainai
-Hainan
-Hainanese
-hainberry
-haine
-hair
-hairband
-hairbeard
-hairbird
-hairbrain
-hairbreadth
-hairbrush
-haircloth
-haircut
-haircutter
-haircutting
-hairdo
-hairdress
-hairdresser
-hairdressing
-haire
-haired
-hairen
-hairhoof
-hairhound
-hairif
-hairiness
-hairlace
-hairless
-hairlessness
-hairlet
-hairline
-hairlock
-hairmeal
-hairmonger
-hairpin
-hairsplitter
-hairsplitting
-hairspring
-hairstone
-hairstreak
-hairtail
-hairup
-hairweed
-hairwood
-hairwork
-hairworm
-hairy
-Haisla
-Haithal
-Haitian
-haje
-hajib
-hajilij
-hak
-hakam
-hakdar
-hake
-Hakea
-hakeem
-hakenkreuz
-Hakenkreuzler
-hakim
-Hakka
-hako
-haku
-Hal
-hala
-halakah
-halakic
-halakist
-halakistic
-halal
-halalcor
-halation
-Halawi
-halazone
-halberd
-halberdier
-halberdman
-halberdsman
-halbert
-halch
-halcyon
-halcyonian
-halcyonic
-Halcyonidae
-Halcyoninae
-halcyonine
-Haldanite
-hale
-halebi
-Halecomorphi
-haleness
-Halenia
-haler
-halerz
-Halesia
-halesome
-half
-halfback
-halfbeak
-halfer
-halfheaded
-halfhearted
-halfheartedly
-halfheartedness
-halfling
-halfman
-halfness
-halfpace
-halfpaced
-halfpenny
-halfpennyworth
-halfway
-halfwise
-Haliaeetus
-halibios
-halibiotic
-halibiu
-halibut
-halibuter
-Halicarnassean
-Halicarnassian
-Halichondriae
-halichondrine
-halichondroid
-Halicore
-Halicoridae
-halide
-halidom
-halieutic
-halieutically
-halieutics
-Haligonian
-Halimeda
-halimous
-halinous
-haliographer
-haliography
-Haliotidae
-Haliotis
-haliotoid
-haliplankton
-haliplid
-Haliplidae
-Haliserites
-halisteresis
-halisteretic
-halite
-Halitheriidae
-Halitherium
-halitosis
-halituosity
-halituous
-halitus
-hall
-hallabaloo
-hallage
-hallah
-hallan
-hallanshaker
-hallebardier
-hallecret
-halleflinta
-halleflintoid
-hallel
-hallelujah
-hallelujatic
-hallex
-Halleyan
-halliblash
-halling
-hallman
-hallmark
-hallmarked
-hallmarker
-hallmoot
-halloo
-Hallopididae
-hallopodous
-Hallopus
-hallow
-Hallowday
-hallowed
-hallowedly
-hallowedness
-Halloween
-hallower
-Hallowmas
-Hallowtide
-halloysite
-Hallstatt
-Hallstattian
-hallucal
-hallucinate
-hallucination
-hallucinational
-hallucinative
-hallucinator
-hallucinatory
-hallucined
-hallucinosis
-hallux
-hallway
-halma
-halmalille
-halmawise
-halo
-Haloa
-Halobates
-halobios
-halobiotic
-halochromism
-halochromy
-Halocynthiidae
-haloesque
-halogen
-halogenate
-halogenation
-halogenoid
-halogenous
-Halogeton
-halohydrin
-haloid
-halolike
-halolimnic
-halomancy
-halometer
-halomorphic
-halophile
-halophilism
-halophilous
-halophyte
-halophytic
-halophytism
-Halopsyche
-Halopsychidae
-Haloragidaceae
-haloragidaceous
-Halosauridae
-Halosaurus
-haloscope
-Halosphaera
-halotrichite
-haloxene
-hals
-halse
-halsen
-halsfang
-halt
-halter
-halterbreak
-halteres
-Halteridium
-halterproof
-Haltica
-halting
-haltingly
-haltingness
-haltless
-halucket
-halukkah
-halurgist
-halurgy
-halutz
-halvaner
-halvans
-halve
-halved
-halvelings
-halver
-halves
-halyard
-Halysites
-ham
-hamacratic
-Hamadan
-hamadryad
-Hamal
-hamal
-hamald
-Hamamelidaceae
-hamamelidaceous
-Hamamelidanthemum
-hamamelidin
-Hamamelidoxylon
-hamamelin
-Hamamelis
-Hamamelites
-hamartiologist
-hamartiology
-hamartite
-hamate
-hamated
-Hamathite
-hamatum
-hambergite
-hamble
-hambroline
-hamburger
-hame
-hameil
-hamel
-Hamelia
-hamesucken
-hamewith
-hamfat
-hamfatter
-hami
-Hamidian
-Hamidieh
-hamiform
-Hamilton
-Hamiltonian
-Hamiltonianism
-Hamiltonism
-hamingja
-hamirostrate
-Hamital
-Hamite
-Hamites
-Hamitic
-Hamiticized
-Hamitism
-Hamitoid
-hamlah
-hamlet
-hamleted
-hamleteer
-hamletization
-hamletize
-hamlinite
-hammada
-hammam
-hammer
-hammerable
-hammerbird
-hammercloth
-hammerdress
-hammerer
-hammerfish
-hammerhead
-hammerheaded
-hammering
-hammeringly
-hammerkop
-hammerless
-hammerlike
-hammerman
-hammersmith
-hammerstone
-hammertoe
-hammerwise
-hammerwork
-hammerwort
-hammochrysos
-hammock
-hammy
-hamose
-hamous
-hamper
-hamperedly
-hamperedness
-hamperer
-hamperman
-Hampshire
-hamrongite
-hamsa
-hamshackle
-hamster
-hamstring
-hamular
-hamulate
-hamule
-Hamulites
-hamulose
-hamulus
-hamus
-hamza
-han
-Hanafi
-Hanafite
-hanaper
-hanaster
-Hanbalite
-hanbury
-hance
-hanced
-hanch
-hancockite
-hand
-handbag
-handball
-handballer
-handbank
-handbanker
-handbarrow
-handbill
-handblow
-handbolt
-handbook
-handbow
-handbreadth
-handcar
-handcart
-handclap
-handclasp
-handcloth
-handcraft
-handcraftman
-handcraftsman
-handcuff
-handed
-handedness
-Handelian
-hander
-handersome
-handfast
-handfasting
-handfastly
-handfastness
-handflower
-handful
-handgrasp
-handgravure
-handgrip
-handgriping
-handgun
-handhaving
-handhold
-handhole
-handicap
-handicapped
-handicapper
-handicraft
-handicraftship
-handicraftsman
-handicraftsmanship
-handicraftswoman
-handicuff
-handily
-handiness
-handistroke
-handiwork
-handkercher
-handkerchief
-handkerchiefful
-handlaid
-handle
-handleable
-handled
-handleless
-handler
-handless
-handlike
-handling
-handmade
-handmaid
-handmaiden
-handmaidenly
-handout
-handpost
-handprint
-handrail
-handrailing
-handreader
-handreading
-handsale
-handsaw
-handsbreadth
-handscrape
-handsel
-handseller
-handset
-handshake
-handshaker
-handshaking
-handsmooth
-handsome
-handsomeish
-handsomely
-handsomeness
-handspade
-handspike
-handspoke
-handspring
-handstaff
-handstand
-handstone
-handstroke
-handwear
-handwheel
-handwhile
-handwork
-handworkman
-handwrist
-handwrite
-handwriting
-handy
-handyblow
-handybook
-handygrip
-hangability
-hangable
-hangalai
-hangar
-hangbird
-hangby
-hangdog
-hange
-hangee
-hanger
-hangfire
-hangie
-hanging
-hangingly
-hangkang
-hangle
-hangman
-hangmanship
-hangment
-hangnail
-hangnest
-hangout
-hangul
-hangwoman
-hangworm
-hangworthy
-hanif
-hanifism
-hanifite
-hanifiya
-Hank
-hank
-hanker
-hankerer
-hankering
-hankeringly
-hankie
-hankle
-hanksite
-hanky
-hanna
-hannayite
-Hannibal
-Hannibalian
-Hannibalic
-Hano
-Hanoverian
-Hanoverianize
-Hanoverize
-Hans
-hansa
-Hansard
-Hansardization
-Hansardize
-Hanse
-hanse
-Hanseatic
-hansel
-hansgrave
-hansom
-hant
-hantle
-Hanukkah
-Hanuman
-hao
-haole
-haoma
-haori
-hap
-Hapale
-Hapalidae
-hapalote
-Hapalotis
-hapaxanthous
-haphazard
-haphazardly
-haphazardness
-haphtarah
-Hapi
-hapless
-haplessly
-haplessness
-haplite
-haplocaulescent
-haplochlamydeous
-Haplodoci
-Haplodon
-haplodont
-haplodonty
-haplography
-haploid
-haploidic
-haploidy
-haplolaly
-haplologic
-haplology
-haploma
-Haplomi
-haplomid
-haplomous
-haplont
-haploperistomic
-haploperistomous
-haplopetalous
-haplophase
-haplophyte
-haploscope
-haploscopic
-haplosis
-haplostemonous
-haplotype
-haply
-happen
-happening
-happenstance
-happier
-happiest
-happify
-happiless
-happily
-happiness
-happing
-happy
-hapten
-haptene
-haptenic
-haptere
-hapteron
-haptic
-haptics
-haptometer
-haptophor
-haptophoric
-haptophorous
-haptotropic
-haptotropically
-haptotropism
-hapu
-hapuku
-haqueton
-harakeke
-harangue
-harangueful
-haranguer
-Hararese
-Harari
-harass
-harassable
-harassedly
-harasser
-harassingly
-harassment
-haratch
-Haratin
-Haraya
-Harb
-harbergage
-harbi
-harbinge
-harbinger
-harbingership
-harbingery
-harbor
-harborage
-harborer
-harborless
-harborous
-harborside
-harborward
-hard
-hardanger
-hardback
-hardbake
-hardbeam
-hardberry
-harden
-hardenable
-Hardenbergia
-hardener
-hardening
-hardenite
-harder
-Harderian
-hardfern
-hardfist
-hardfisted
-hardfistedness
-hardhack
-hardhanded
-hardhandedness
-hardhead
-hardheaded
-hardheadedly
-hardheadedness
-hardhearted
-hardheartedly
-hardheartedness
-hardihood
-hardily
-hardim
-hardiment
-hardiness
-hardish
-hardishrew
-hardly
-hardmouth
-hardmouthed
-hardness
-hardock
-hardpan
-hardship
-hardstand
-hardstanding
-hardtack
-hardtail
-hardware
-hardwareman
-Hardwickia
-hardwood
-hardy
-hardystonite
-hare
-harebell
-harebottle
-harebrain
-harebrained
-harebrainedly
-harebrainedness
-harebur
-harefoot
-harefooted
-harehearted
-harehound
-Harelda
-harelike
-harelip
-harelipped
-harem
-haremism
-haremlik
-harengiform
-harfang
-haricot
-harigalds
-hariolate
-hariolation
-hariolize
-harish
-hark
-harka
-harl
-Harleian
-Harlemese
-Harlemite
-harlequin
-harlequina
-harlequinade
-harlequinery
-harlequinesque
-harlequinic
-harlequinism
-harlequinize
-harling
-harlock
-harlot
-harlotry
-harm
-Harmachis
-harmal
-harmala
-harmaline
-harman
-harmattan
-harmel
-harmer
-harmful
-harmfully
-harmfulness
-harmine
-harminic
-harmless
-harmlessly
-harmlessness
-Harmon
-harmonia
-harmoniacal
-harmonial
-harmonic
-harmonica
-harmonical
-harmonically
-harmonicalness
-harmonichord
-harmonici
-harmonicism
-harmonicon
-harmonics
-harmonious
-harmoniously
-harmoniousness
-harmoniphon
-harmoniphone
-harmonist
-harmonistic
-harmonistically
-Harmonite
-harmonium
-harmonizable
-harmonization
-harmonize
-harmonizer
-harmonogram
-harmonograph
-harmonometer
-harmony
-harmost
-harmotome
-harmotomic
-harmproof
-harn
-harness
-harnesser
-harnessry
-harnpan
-Harold
-harp
-Harpa
-harpago
-harpagon
-Harpagornis
-Harpalides
-Harpalinae
-Harpalus
-harper
-harperess
-Harpidae
-harpier
-harpings
-harpist
-harpless
-harplike
-Harpocrates
-harpoon
-harpooner
-Harporhynchus
-harpress
-harpsichord
-harpsichordist
-harpula
-Harpullia
-harpwaytuning
-harpwise
-Harpy
-Harpyia
-harpylike
-harquebus
-harquebusade
-harquebusier
-harr
-harrateen
-harridan
-harrier
-Harris
-Harrisia
-harrisite
-Harrovian
-harrow
-harrower
-harrowing
-harrowingly
-harrowingness
-harrowment
-Harry
-harry
-harsh
-harshen
-harshish
-harshly
-harshness
-harshweed
-harstigite
-hart
-hartal
-hartberry
-hartebeest
-hartin
-hartite
-Hartleian
-Hartleyan
-Hartmann
-Hartmannia
-Hartogia
-hartshorn
-hartstongue
-harttite
-Hartungen
-haruspex
-haruspical
-haruspicate
-haruspication
-haruspice
-haruspices
-haruspicy
-Harv
-Harvard
-Harvardian
-Harvardize
-Harveian
-harvest
-harvestbug
-harvester
-harvestless
-harvestman
-harvestry
-harvesttime
-Harvey
-Harveyize
-harzburgite
-hasan
-hasenpfeffer
-hash
-hashab
-hasher
-Hashimite
-hashish
-Hashiya
-hashy
-Hasidean
-Hasidic
-Hasidim
-Hasidism
-Hasinai
-hask
-Haskalah
-haskness
-hasky
-haslet
-haslock
-Hasmonaean
-hasp
-hassar
-hassel
-hassle
-hassock
-hassocky
-hasta
-hastate
-hastately
-hastati
-hastatolanceolate
-hastatosagittate
-haste
-hasteful
-hastefully
-hasteless
-hastelessness
-hasten
-hastener
-hasteproof
-haster
-hastilude
-hastily
-hastiness
-hastings
-hastingsite
-hastish
-hastler
-hasty
-hat
-hatable
-hatband
-hatbox
-hatbrim
-hatbrush
-hatch
-hatchability
-hatchable
-hatchel
-hatcheler
-hatcher
-hatchery
-hatcheryman
-hatchet
-hatchetback
-hatchetfish
-hatchetlike
-hatchetman
-hatchettine
-hatchettolite
-hatchety
-hatchgate
-hatching
-hatchling
-hatchman
-hatchment
-hatchminder
-hatchway
-hatchwayman
-hate
-hateable
-hateful
-hatefully
-hatefulness
-hateless
-hatelessness
-hater
-hatful
-hath
-hatherlite
-hathi
-Hathor
-Hathoric
-Hati
-Hatikvah
-hatless
-hatlessness
-hatlike
-hatmaker
-hatmaking
-hatpin
-hatrack
-hatrail
-hatred
-hatress
-hatstand
-hatt
-hatted
-Hattemist
-hatter
-Hatteria
-hattery
-Hatti
-Hattic
-Hattie
-hatting
-Hattism
-Hattize
-hattock
-Hatty
-hatty
-hau
-hauberget
-hauberk
-hauchecornite
-hauerite
-haugh
-haughland
-haught
-haughtily
-haughtiness
-haughtly
-haughtness
-haughtonite
-haughty
-haul
-haulabout
-haulage
-haulageway
-haulback
-hauld
-hauler
-haulier
-haulm
-haulmy
-haulster
-haunch
-haunched
-hauncher
-haunching
-haunchless
-haunchy
-haunt
-haunter
-hauntingly
-haunty
-Hauranitic
-hauriant
-haurient
-Hausa
-hause
-hausen
-hausmannite
-hausse
-Haussmannization
-Haussmannize
-haustellate
-haustellated
-haustellous
-haustellum
-haustement
-haustorial
-haustorium
-haustral
-haustrum
-hautboy
-hautboyist
-hauteur
-hauynite
-hauynophyre
-havage
-Havaiki
-Havaikian
-Havana
-Havanese
-have
-haveable
-haveage
-havel
-haveless
-havelock
-haven
-havenage
-havener
-havenership
-havenet
-havenful
-havenless
-havent
-havenward
-haver
-havercake
-haverel
-haverer
-havergrass
-havermeal
-havers
-haversack
-Haversian
-haversine
-havier
-havildar
-havingness
-havoc
-havocker
-haw
-Hawaiian
-hawaiite
-hawbuck
-hawcubite
-hawer
-hawfinch
-Hawiya
-hawk
-hawkbill
-hawkbit
-hawked
-hawker
-hawkery
-Hawkeye
-hawkie
-hawking
-hawkish
-hawklike
-hawknut
-hawkweed
-hawkwise
-hawky
-hawm
-hawok
-Haworthia
-hawse
-hawsehole
-hawseman
-hawsepiece
-hawsepipe
-hawser
-hawserwise
-hawthorn
-hawthorned
-hawthorny
-hay
-haya
-hayband
-haybird
-haybote
-haycap
-haycart
-haycock
-haydenite
-hayey
-hayfield
-hayfork
-haygrower
-haylift
-hayloft
-haymaker
-haymaking
-haymarket
-haymow
-hayrack
-hayrake
-hayraker
-hayrick
-hayseed
-haysel
-haystack
-haysuck
-haytime
-hayward
-hayweed
-haywire
-hayz
-Hazara
-hazard
-hazardable
-hazarder
-hazardful
-hazardize
-hazardless
-hazardous
-hazardously
-hazardousness
-hazardry
-haze
-Hazel
-hazel
-hazeled
-hazeless
-hazelly
-hazelnut
-hazelwood
-hazelwort
-hazen
-hazer
-hazily
-haziness
-hazing
-hazle
-haznadar
-hazy
-hazzan
-he
-head
-headache
-headachy
-headband
-headbander
-headboard
-headborough
-headcap
-headchair
-headcheese
-headchute
-headcloth
-headdress
-headed
-headender
-header
-headfirst
-headforemost
-headframe
-headful
-headgear
-headily
-headiness
-heading
-headkerchief
-headland
-headledge
-headless
-headlessness
-headlight
-headlighting
-headlike
-headline
-headliner
-headlock
-headlong
-headlongly
-headlongs
-headlongwise
-headman
-headmark
-headmaster
-headmasterly
-headmastership
-headmistress
-headmistressship
-headmold
-headmost
-headnote
-headpenny
-headphone
-headpiece
-headplate
-headpost
-headquarter
-headquarters
-headrace
-headrail
-headreach
-headrent
-headrest
-headright
-headring
-headroom
-headrope
-headsail
-headset
-headshake
-headship
-headsill
-headskin
-headsman
-headspring
-headstall
-headstand
-headstick
-headstock
-headstone
-headstream
-headstrong
-headstrongly
-headstrongness
-headwaiter
-headwall
-headward
-headwark
-headwater
-headway
-headwear
-headwork
-headworker
-headworking
-heady
-heaf
-heal
-healable
-heald
-healder
-healer
-healful
-healing
-healingly
-healless
-healsome
-healsomeness
-health
-healthcraft
-healthful
-healthfully
-healthfulness
-healthguard
-healthily
-healthiness
-healthless
-healthlessness
-healthsome
-healthsomely
-healthsomeness
-healthward
-healthy
-heap
-heaper
-heaps
-heapstead
-heapy
-hear
-hearable
-hearer
-hearing
-hearingless
-hearken
-hearkener
-hearsay
-hearse
-hearsecloth
-hearselike
-hearst
-heart
-heartache
-heartaching
-heartbeat
-heartbird
-heartblood
-heartbreak
-heartbreaker
-heartbreaking
-heartbreakingly
-heartbroken
-heartbrokenly
-heartbrokenness
-heartburn
-heartburning
-heartdeep
-heartease
-hearted
-heartedly
-heartedness
-hearten
-heartener
-heartening
-hearteningly
-heartfelt
-heartful
-heartfully
-heartfulness
-heartgrief
-hearth
-hearthless
-hearthman
-hearthpenny
-hearthrug
-hearthstead
-hearthstone
-hearthward
-hearthwarming
-heartikin
-heartily
-heartiness
-hearting
-heartland
-heartleaf
-heartless
-heartlessly
-heartlessness
-heartlet
-heartling
-heartly
-heartnut
-heartpea
-heartquake
-heartroot
-hearts
-heartscald
-heartsease
-heartseed
-heartsette
-heartsick
-heartsickening
-heartsickness
-heartsome
-heartsomely
-heartsomeness
-heartsore
-heartstring
-heartthrob
-heartward
-heartwater
-heartweed
-heartwise
-heartwood
-heartwort
-hearty
-heat
-heatable
-heatdrop
-heatedly
-heater
-heaterman
-heatful
-heath
-heathberry
-heathbird
-heathen
-heathendom
-heatheness
-heathenesse
-heathenhood
-heathenish
-heathenishly
-heathenishness
-heathenism
-heathenize
-heathenness
-heathenry
-heathenship
-Heather
-heather
-heathered
-heatheriness
-heathery
-heathless
-heathlike
-heathwort
-heathy
-heating
-heatingly
-heatless
-heatlike
-heatmaker
-heatmaking
-heatproof
-heatronic
-heatsman
-heatstroke
-heaume
-heaumer
-heautarit
-heautomorphism
-Heautontimorumenos
-heautophany
-heave
-heaveless
-heaven
-Heavenese
-heavenful
-heavenhood
-heavenish
-heavenishly
-heavenize
-heavenless
-heavenlike
-heavenliness
-heavenly
-heavens
-heavenward
-heavenwardly
-heavenwardness
-heavenwards
-heaver
-heavies
-heavily
-heaviness
-heaving
-heavisome
-heavity
-heavy
-heavyback
-heavyhanded
-heavyhandedness
-heavyheaded
-heavyhearted
-heavyheartedness
-heavyweight
-hebamic
-hebdomad
-hebdomadal
-hebdomadally
-hebdomadary
-hebdomader
-hebdomarian
-hebdomary
-hebeanthous
-hebecarpous
-hebecladous
-hebegynous
-hebenon
-hebeosteotomy
-hebepetalous
-hebephrenia
-hebephrenic
-hebetate
-hebetation
-hebetative
-hebete
-hebetic
-hebetomy
-hebetude
-hebetudinous
-Hebraean
-Hebraic
-Hebraica
-Hebraical
-Hebraically
-Hebraicize
-Hebraism
-Hebraist
-Hebraistic
-Hebraistical
-Hebraistically
-Hebraization
-Hebraize
-Hebraizer
-Hebrew
-Hebrewdom
-Hebrewess
-Hebrewism
-Hebrician
-Hebridean
-Hebronite
-hebronite
-hecastotheism
-Hecate
-Hecatean
-Hecatic
-Hecatine
-hecatomb
-Hecatombaeon
-hecatomped
-hecatompedon
-hecatonstylon
-hecatontarchy
-hecatontome
-hecatophyllous
-hech
-Hechtia
-heck
-heckelphone
-Heckerism
-heckimal
-heckle
-heckler
-hectare
-hecte
-hectic
-hectical
-hectically
-hecticly
-hecticness
-hectocotyl
-hectocotyle
-hectocotyliferous
-hectocotylization
-hectocotylize
-hectocotylus
-hectogram
-hectograph
-hectographic
-hectography
-hectoliter
-hectometer
-Hector
-hector
-Hectorean
-Hectorian
-hectoringly
-hectorism
-hectorly
-hectorship
-hectostere
-hectowatt
-heddle
-heddlemaker
-heddler
-hedebo
-hedenbergite
-Hedeoma
-heder
-Hedera
-hederaceous
-hederaceously
-hederated
-hederic
-hederiferous
-hederiform
-hederigerent
-hederin
-hederose
-hedge
-hedgeberry
-hedgeborn
-hedgebote
-hedgebreaker
-hedgehog
-hedgehoggy
-hedgehop
-hedgehopper
-hedgeless
-hedgemaker
-hedgemaking
-hedger
-hedgerow
-hedgesmith
-hedgeweed
-hedgewise
-hedgewood
-hedging
-hedgingly
-hedgy
-hedonic
-hedonical
-hedonically
-hedonics
-hedonism
-hedonist
-hedonistic
-hedonistically
-hedonology
-hedriophthalmous
-hedrocele
-hedrumite
-Hedychium
-hedyphane
-Hedysarum
-heed
-heeder
-heedful
-heedfully
-heedfulness
-heedily
-heediness
-heedless
-heedlessly
-heedlessness
-heedy
-heehaw
-heel
-heelball
-heelband
-heelcap
-heeled
-heeler
-heelgrip
-heelless
-heelmaker
-heelmaking
-heelpath
-heelpiece
-heelplate
-heelpost
-heelprint
-heelstrap
-heeltap
-heeltree
-heemraad
-heer
-heeze
-heezie
-heezy
-heft
-hefter
-heftily
-heftiness
-hefty
-hegari
-Hegelian
-Hegelianism
-Hegelianize
-Hegelizer
-hegemon
-hegemonic
-hegemonical
-hegemonist
-hegemonizer
-hegemony
-hegira
-hegumen
-hegumene
-Hehe
-hei
-heiau
-Heidi
-heifer
-heiferhood
-heigh
-heighday
-height
-heighten
-heightener
-heii
-Heikum
-Heiltsuk
-heimin
-Hein
-Heinesque
-Heinie
-heinous
-heinously
-heinousness
-Heinrich
-heintzite
-Heinz
-heir
-heirdom
-heiress
-heiressdom
-heiresshood
-heirless
-heirloom
-heirship
-heirskip
-heitiki
-Hejazi
-Hejazian
-hekteus
-helbeh
-helcoid
-helcology
-helcoplasty
-helcosis
-helcotic
-heldentenor
-helder
-Helderbergian
-hele
-Helen
-Helena
-helenin
-helenioid
-Helenium
-Helenus
-helepole
-Helge
-heliacal
-heliacally
-Heliaea
-heliaean
-Heliamphora
-Heliand
-helianthaceous
-Helianthemum
-helianthic
-helianthin
-Helianthium
-Helianthoidea
-Helianthoidean
-Helianthus
-heliast
-heliastic
-heliazophyte
-helical
-helically
-heliced
-helices
-helichryse
-helichrysum
-Helicidae
-heliciform
-helicin
-Helicina
-helicine
-Helicinidae
-helicitic
-helicline
-helicograph
-helicogyrate
-helicogyre
-helicoid
-helicoidal
-helicoidally
-helicometry
-helicon
-Heliconia
-Heliconian
-Heliconiidae
-Heliconiinae
-heliconist
-Heliconius
-helicoprotein
-helicopter
-helicorubin
-helicotrema
-Helicteres
-helictite
-helide
-Heligmus
-heling
-helio
-heliocentric
-heliocentrical
-heliocentrically
-heliocentricism
-heliocentricity
-heliochrome
-heliochromic
-heliochromoscope
-heliochromotype
-heliochromy
-helioculture
-heliodon
-heliodor
-helioelectric
-helioengraving
-heliofugal
-Heliogabalize
-Heliogabalus
-heliogram
-heliograph
-heliographer
-heliographic
-heliographical
-heliographically
-heliography
-heliogravure
-helioid
-heliolater
-heliolatrous
-heliolatry
-heliolite
-Heliolites
-heliolithic
-Heliolitidae
-heliologist
-heliology
-heliometer
-heliometric
-heliometrical
-heliometrically
-heliometry
-heliomicrometer
-Helion
-heliophilia
-heliophiliac
-heliophilous
-heliophobe
-heliophobia
-heliophobic
-heliophobous
-heliophotography
-heliophyllite
-heliophyte
-Heliopora
-Helioporidae
-Heliopsis
-heliopticon
-Heliornis
-Heliornithes
-Heliornithidae
-Helios
-helioscope
-helioscopic
-helioscopy
-heliosis
-heliostat
-heliostatic
-heliotactic
-heliotaxis
-heliotherapy
-heliothermometer
-Heliothis
-heliotrope
-heliotroper
-Heliotropiaceae
-heliotropian
-heliotropic
-heliotropical
-heliotropically
-heliotropine
-heliotropism
-Heliotropium
-heliotropy
-heliotype
-heliotypic
-heliotypically
-heliotypography
-heliotypy
-Heliozoa
-heliozoan
-heliozoic
-heliport
-Helipterum
-helispheric
-helispherical
-helium
-helix
-helizitic
-hell
-Helladian
-Helladic
-Helladotherium
-hellandite
-hellanodic
-hellbender
-hellborn
-hellbox
-hellbred
-hellbroth
-hellcat
-helldog
-helleboraceous
-helleboraster
-hellebore
-helleborein
-helleboric
-helleborin
-Helleborine
-helleborism
-Helleborus
-Hellelt
-Hellen
-Hellene
-Hellenian
-Hellenic
-Hellenically
-Hellenicism
-Hellenism
-Hellenist
-Hellenistic
-Hellenistical
-Hellenistically
-Hellenisticism
-Hellenization
-Hellenize
-Hellenizer
-Hellenocentric
-Hellenophile
-heller
-helleri
-Hellespont
-Hellespontine
-hellgrammite
-hellhag
-hellhole
-hellhound
-hellicat
-hellier
-hellion
-hellish
-hellishly
-hellishness
-hellkite
-hellness
-hello
-hellroot
-hellship
-helluo
-hellward
-hellweed
-helly
-helm
-helmage
-helmed
-helmet
-helmeted
-helmetlike
-helmetmaker
-helmetmaking
-Helmholtzian
-helminth
-helminthagogic
-helminthagogue
-Helminthes
-helminthiasis
-helminthic
-helminthism
-helminthite
-Helminthocladiaceae
-helminthoid
-helminthologic
-helminthological
-helminthologist
-helminthology
-helminthosporiose
-Helminthosporium
-helminthosporoid
-helminthous
-helmless
-helmsman
-helmsmanship
-helobious
-heloderm
-Heloderma
-Helodermatidae
-helodermatoid
-helodermatous
-helodes
-heloe
-heloma
-Helonias
-helonin
-helosis
-Helot
-helotage
-helotism
-helotize
-helotomy
-helotry
-help
-helpable
-helper
-helpful
-helpfully
-helpfulness
-helping
-helpingly
-helpless
-helplessly
-helplessness
-helply
-helpmate
-helpmeet
-helpsome
-helpworthy
-helsingkite
-helve
-helvell
-Helvella
-Helvellaceae
-helvellaceous
-Helvellales
-helvellic
-helver
-Helvetia
-Helvetian
-Helvetic
-Helvetii
-Helvidian
-helvite
-hem
-hemabarometer
-hemachate
-hemachrome
-hemachrosis
-hemacite
-hemad
-hemadrometer
-hemadrometry
-hemadromograph
-hemadromometer
-hemadynameter
-hemadynamic
-hemadynamics
-hemadynamometer
-hemafibrite
-hemagglutinate
-hemagglutination
-hemagglutinative
-hemagglutinin
-hemagogic
-hemagogue
-hemal
-hemalbumen
-hemamoeba
-hemangioma
-hemangiomatosis
-hemangiosarcoma
-hemaphein
-hemapod
-hemapodous
-hemapoiesis
-hemapoietic
-hemapophyseal
-hemapophysial
-hemapophysis
-hemarthrosis
-hemase
-hemaspectroscope
-hemastatics
-hematachometer
-hematachometry
-hematal
-hematein
-hematemesis
-hematemetic
-hematencephalon
-hematherapy
-hematherm
-hemathermal
-hemathermous
-hemathidrosis
-hematic
-hematid
-hematidrosis
-hematimeter
-hematin
-hematinic
-hematinometer
-hematinometric
-hematinuria
-hematite
-hematitic
-hematobic
-hematobious
-hematobium
-hematoblast
-hematobranchiate
-hematocatharsis
-hematocathartic
-hematocele
-hematochezia
-hematochrome
-hematochyluria
-hematoclasia
-hematoclasis
-hematocolpus
-hematocrit
-hematocryal
-hematocrystallin
-hematocyanin
-hematocyst
-hematocystis
-hematocyte
-hematocytoblast
-hematocytogenesis
-hematocytometer
-hematocytotripsis
-hematocytozoon
-hematocyturia
-hematodynamics
-hematodynamometer
-hematodystrophy
-hematogen
-hematogenesis
-hematogenetic
-hematogenic
-hematogenous
-hematoglobulin
-hematography
-hematohidrosis
-hematoid
-hematoidin
-hematolin
-hematolite
-hematological
-hematologist
-hematology
-hematolymphangioma
-hematolysis
-hematolytic
-hematoma
-hematomancy
-hematometer
-hematometra
-hematometry
-hematomphalocele
-hematomyelia
-hematomyelitis
-hematonephrosis
-hematonic
-hematopathology
-hematopericardium
-hematopexis
-hematophobia
-hematophyte
-hematoplast
-hematoplastic
-hematopoiesis
-hematopoietic
-hematoporphyrin
-hematoporphyrinuria
-hematorrhachis
-hematorrhea
-hematosalpinx
-hematoscope
-hematoscopy
-hematose
-hematosepsis
-hematosin
-hematosis
-hematospectrophotometer
-hematospectroscope
-hematospermatocele
-hematospermia
-hematostibiite
-hematotherapy
-hematothermal
-hematothorax
-hematoxic
-hematozoal
-hematozoan
-hematozoic
-hematozoon
-hematozymosis
-hematozymotic
-hematuresis
-hematuria
-hematuric
-hemautogram
-hemautograph
-hemautographic
-hemautography
-heme
-hemellitene
-hemellitic
-hemelytral
-hemelytron
-hemen
-hemera
-hemeralope
-hemeralopia
-hemeralopic
-Hemerobaptism
-Hemerobaptist
-Hemerobian
-Hemerobiid
-Hemerobiidae
-Hemerobius
-Hemerocallis
-hemerologium
-hemerology
-hemerythrin
-hemiablepsia
-hemiacetal
-hemiachromatopsia
-hemiageusia
-hemiageustia
-hemialbumin
-hemialbumose
-hemialbumosuria
-hemialgia
-hemiamaurosis
-hemiamb
-hemiamblyopia
-hemiamyosthenia
-hemianacusia
-hemianalgesia
-hemianatropous
-hemianesthesia
-hemianopia
-hemianopic
-hemianopsia
-hemianoptic
-hemianosmia
-hemiapraxia
-Hemiascales
-Hemiasci
-Hemiascomycetes
-hemiasynergia
-hemiataxia
-hemiataxy
-hemiathetosis
-hemiatrophy
-hemiazygous
-Hemibasidiales
-Hemibasidii
-Hemibasidiomycetes
-hemibasidium
-hemibathybian
-hemibenthic
-hemibenthonic
-hemibranch
-hemibranchiate
-Hemibranchii
-hemic
-hemicanities
-hemicardia
-hemicardiac
-hemicarp
-hemicatalepsy
-hemicataleptic
-hemicellulose
-hemicentrum
-hemicephalous
-hemicerebrum
-Hemichorda
-hemichordate
-hemichorea
-hemichromatopsia
-hemicircle
-hemicircular
-hemiclastic
-hemicollin
-hemicrane
-hemicrania
-hemicranic
-hemicrany
-hemicrystalline
-hemicycle
-hemicyclic
-hemicyclium
-hemicylindrical
-hemidactylous
-Hemidactylus
-hemidemisemiquaver
-hemidiapente
-hemidiaphoresis
-hemiditone
-hemidomatic
-hemidome
-hemidrachm
-hemidysergia
-hemidysesthesia
-hemidystrophy
-hemiekton
-hemielliptic
-hemiepilepsy
-hemifacial
-hemiform
-Hemigale
-Hemigalus
-Hemiganus
-hemigastrectomy
-hemigeusia
-hemiglossal
-hemiglossitis
-hemiglyph
-hemignathous
-hemihdry
-hemihedral
-hemihedrally
-hemihedric
-hemihedrism
-hemihedron
-hemiholohedral
-hemihydrate
-hemihydrated
-hemihydrosis
-hemihypalgesia
-hemihyperesthesia
-hemihyperidrosis
-hemihypertonia
-hemihypertrophy
-hemihypesthesia
-hemihypoesthesia
-hemihypotonia
-hemikaryon
-hemikaryotic
-hemilaminectomy
-hemilaryngectomy
-Hemileia
-hemilethargy
-hemiligulate
-hemilingual
-hemimellitene
-hemimellitic
-hemimelus
-Hemimeridae
-Hemimerus
-Hemimetabola
-hemimetabole
-hemimetabolic
-hemimetabolism
-hemimetabolous
-hemimetaboly
-hemimetamorphic
-hemimetamorphosis
-hemimetamorphous
-hemimorph
-hemimorphic
-hemimorphism
-hemimorphite
-hemimorphy
-Hemimyaria
-hemin
-hemina
-hemine
-heminee
-hemineurasthenia
-hemiobol
-hemiolia
-hemiolic
-hemionus
-hemiope
-hemiopia
-hemiopic
-hemiorthotype
-hemiparalysis
-hemiparanesthesia
-hemiparaplegia
-hemiparasite
-hemiparasitic
-hemiparasitism
-hemiparesis
-hemiparesthesia
-hemiparetic
-hemipenis
-hemipeptone
-hemiphrase
-hemipic
-hemipinnate
-hemiplane
-hemiplankton
-hemiplegia
-hemiplegic
-hemiplegy
-hemipodan
-hemipode
-Hemipodii
-Hemipodius
-hemiprism
-hemiprismatic
-hemiprotein
-hemipter
-Hemiptera
-hemipteral
-hemipteran
-hemipteroid
-hemipterological
-hemipterology
-hemipteron
-hemipterous
-hemipyramid
-hemiquinonoid
-hemiramph
-Hemiramphidae
-Hemiramphinae
-hemiramphine
-Hemiramphus
-hemisaprophyte
-hemisaprophytic
-hemiscotosis
-hemisect
-hemisection
-hemispasm
-hemispheral
-hemisphere
-hemisphered
-hemispherical
-hemispherically
-hemispheroid
-hemispheroidal
-hemispherule
-hemistater
-hemistich
-hemistichal
-hemistrumectomy
-hemisymmetrical
-hemisymmetry
-hemisystole
-hemiterata
-hemiteratic
-hemiteratics
-hemiteria
-hemiterpene
-hemitery
-hemithyroidectomy
-hemitone
-hemitremor
-hemitrichous
-hemitriglyph
-hemitropal
-hemitrope
-hemitropic
-hemitropism
-hemitropous
-hemitropy
-hemitype
-hemitypic
-hemivagotony
-heml
-hemlock
-hemmel
-hemmer
-hemoalkalimeter
-hemoblast
-hemochromatosis
-hemochrome
-hemochromogen
-hemochromometer
-hemochromometry
-hemoclasia
-hemoclasis
-hemoclastic
-hemocoel
-hemocoele
-hemocoelic
-hemocoelom
-hemoconcentration
-hemoconia
-hemoconiosis
-hemocry
-hemocrystallin
-hemoculture
-hemocyanin
-hemocyte
-hemocytoblast
-hemocytogenesis
-hemocytolysis
-hemocytometer
-hemocytotripsis
-hemocytozoon
-hemocyturia
-hemodiagnosis
-hemodilution
-hemodrometer
-hemodrometry
-hemodromograph
-hemodromometer
-hemodynameter
-hemodynamic
-hemodynamics
-hemodystrophy
-hemoerythrin
-hemoflagellate
-hemofuscin
-hemogastric
-hemogenesis
-hemogenetic
-hemogenic
-hemogenous
-hemoglobic
-hemoglobin
-hemoglobinemia
-hemoglobiniferous
-hemoglobinocholia
-hemoglobinometer
-hemoglobinophilic
-hemoglobinous
-hemoglobinuria
-hemoglobinuric
-hemoglobulin
-hemogram
-hemogregarine
-hemoid
-hemokonia
-hemokoniosis
-hemol
-hemoleucocyte
-hemoleucocytic
-hemologist
-hemology
-hemolymph
-hemolymphatic
-hemolysin
-hemolysis
-hemolytic
-hemolyze
-hemomanometer
-hemometer
-hemometry
-hemonephrosis
-hemopathology
-hemopathy
-hemopericardium
-hemoperitoneum
-hemopexis
-hemophage
-hemophagia
-hemophagocyte
-hemophagocytosis
-hemophagous
-hemophagy
-hemophile
-Hemophileae
-hemophilia
-hemophiliac
-hemophilic
-Hemophilus
-hemophobia
-hemophthalmia
-hemophthisis
-hemopiezometer
-hemoplasmodium
-hemoplastic
-hemopneumothorax
-hemopod
-hemopoiesis
-hemopoietic
-hemoproctia
-hemoptoe
-hemoptysis
-hemopyrrole
-hemorrhage
-hemorrhagic
-hemorrhagin
-hemorrhea
-hemorrhodin
-hemorrhoid
-hemorrhoidal
-hemorrhoidectomy
-hemosalpinx
-hemoscope
-hemoscopy
-hemosiderin
-hemosiderosis
-hemospasia
-hemospastic
-hemospermia
-hemosporid
-hemosporidian
-hemostasia
-hemostasis
-hemostat
-hemostatic
-hemotachometer
-hemotherapeutics
-hemotherapy
-hemothorax
-hemotoxic
-hemotoxin
-hemotrophe
-hemotropic
-hemozoon
-hemp
-hempbush
-hempen
-hemplike
-hempseed
-hempstring
-hempweed
-hempwort
-hempy
-hemstitch
-hemstitcher
-hen
-henad
-henbane
-henbill
-henbit
-hence
-henceforth
-henceforward
-henceforwards
-henchboy
-henchman
-henchmanship
-hencoop
-hencote
-hend
-hendecacolic
-hendecagon
-hendecagonal
-hendecahedron
-hendecane
-hendecasemic
-hendecasyllabic
-hendecasyllable
-hendecatoic
-hendecoic
-hendecyl
-hendiadys
-hendly
-hendness
-heneicosane
-henequen
-henfish
-henhearted
-henhouse
-henhussy
-henism
-henlike
-henmoldy
-henna
-Hennebique
-hennery
-hennin
-hennish
-henny
-henogeny
-henotheism
-henotheist
-henotheistic
-henotic
-henpeck
-henpen
-Henrician
-Henrietta
-henroost
-Henry
-henry
-hent
-Hentenian
-henter
-hentriacontane
-henware
-henwife
-henwise
-henwoodite
-henyard
-heortological
-heortologion
-heortology
-hep
-hepar
-heparin
-heparinize
-hepatalgia
-hepatatrophia
-hepatatrophy
-hepatauxe
-hepatectomy
-hepatic
-Hepatica
-hepatica
-Hepaticae
-hepatical
-hepaticoduodenostomy
-hepaticoenterostomy
-hepaticogastrostomy
-hepaticologist
-hepaticology
-hepaticopulmonary
-hepaticostomy
-hepaticotomy
-hepatite
-hepatitis
-hepatization
-hepatize
-hepatocele
-hepatocirrhosis
-hepatocolic
-hepatocystic
-hepatoduodenal
-hepatoduodenostomy
-hepatodynia
-hepatodysentery
-hepatoenteric
-hepatoflavin
-hepatogastric
-hepatogenic
-hepatogenous
-hepatography
-hepatoid
-hepatolenticular
-hepatolith
-hepatolithiasis
-hepatolithic
-hepatological
-hepatologist
-hepatology
-hepatolysis
-hepatolytic
-hepatoma
-hepatomalacia
-hepatomegalia
-hepatomegaly
-hepatomelanosis
-hepatonephric
-hepatopathy
-hepatoperitonitis
-hepatopexia
-hepatopexy
-hepatophlebitis
-hepatophlebotomy
-hepatophyma
-hepatopneumonic
-hepatoportal
-hepatoptosia
-hepatoptosis
-hepatopulmonary
-hepatorenal
-hepatorrhagia
-hepatorrhaphy
-hepatorrhea
-hepatorrhexis
-hepatorrhoea
-hepatoscopy
-hepatostomy
-hepatotherapy
-hepatotomy
-hepatotoxemia
-hepatoumbilical
-hepcat
-Hephaesteum
-Hephaestian
-Hephaestic
-Hephaestus
-hephthemimer
-hephthemimeral
-hepialid
-Hepialidae
-Hepialus
-heppen
-hepper
-heptacapsular
-heptace
-heptachord
-heptachronous
-heptacolic
-heptacosane
-heptad
-heptadecane
-heptadecyl
-heptaglot
-heptagon
-heptagonal
-heptagynous
-heptahedral
-heptahedrical
-heptahedron
-heptahexahedral
-heptahydrate
-heptahydrated
-heptahydric
-heptahydroxy
-heptal
-heptameride
-Heptameron
-heptamerous
-heptameter
-heptamethylene
-heptametrical
-heptanaphthene
-Heptanchus
-heptandrous
-heptane
-Heptanesian
-heptangular
-heptanoic
-heptanone
-heptapetalous
-heptaphyllous
-heptaploid
-heptaploidy
-heptapodic
-heptapody
-heptarch
-heptarchal
-heptarchic
-heptarchical
-heptarchist
-heptarchy
-heptasemic
-heptasepalous
-heptaspermous
-heptastich
-heptastrophic
-heptastylar
-heptastyle
-heptasulphide
-heptasyllabic
-Heptateuch
-heptatomic
-heptatonic
-Heptatrema
-heptavalent
-heptene
-hepteris
-heptine
-heptite
-heptitol
-heptoic
-heptorite
-heptose
-heptoxide
-Heptranchias
-heptyl
-heptylene
-heptylic
-heptyne
-her
-Heraclean
-Heracleidan
-Heracleonite
-Heracleopolitan
-Heracleopolite
-Heracleum
-Heraclid
-Heraclidae
-Heraclidan
-Heraclitean
-Heracliteanism
-Heraclitic
-Heraclitical
-Heraclitism
-Herakles
-herald
-heraldess
-heraldic
-heraldical
-heraldically
-heraldist
-heraldize
-heraldress
-heraldry
-heraldship
-herapathite
-Herat
-Herb
-herb
-herbaceous
-herbaceously
-herbage
-herbaged
-herbager
-herbagious
-herbal
-herbalism
-herbalist
-herbalize
-herbane
-herbaria
-herbarial
-herbarian
-herbarism
-herbarist
-herbarium
-herbarize
-Herbartian
-Herbartianism
-herbary
-Herbert
-herbescent
-herbicidal
-herbicide
-herbicolous
-herbiferous
-herbish
-herbist
-Herbivora
-herbivore
-herbivority
-herbivorous
-herbless
-herblet
-herblike
-herbman
-herborist
-herborization
-herborize
-herborizer
-herbose
-herbosity
-herbous
-herbwife
-herbwoman
-herby
-hercogamous
-hercogamy
-Herculanean
-Herculanensian
-Herculanian
-Herculean
-Hercules
-Herculid
-Hercynian
-hercynite
-herd
-herdbook
-herdboy
-herder
-herderite
-herdic
-herding
-herdship
-herdsman
-herdswoman
-herdwick
-here
-hereabout
-hereadays
-hereafter
-hereafterward
-hereamong
-hereat
-hereaway
-hereaways
-herebefore
-hereby
-heredipetous
-heredipety
-hereditability
-hereditable
-hereditably
-hereditament
-hereditarian
-hereditarianism
-hereditarily
-hereditariness
-hereditarist
-hereditary
-hereditation
-hereditative
-hereditism
-hereditist
-hereditivity
-heredity
-heredium
-heredofamilial
-heredolues
-heredoluetic
-heredosyphilis
-heredosyphilitic
-heredosyphilogy
-heredotuberculosis
-Hereford
-herefrom
-heregeld
-herein
-hereinabove
-hereinafter
-hereinbefore
-hereinto
-herem
-hereness
-hereniging
-hereof
-hereon
-hereright
-Herero
-heresiarch
-heresimach
-heresiographer
-heresiography
-heresiologer
-heresiologist
-heresiology
-heresy
-heresyphobia
-heresyproof
-heretic
-heretical
-heretically
-hereticalness
-hereticate
-heretication
-hereticator
-hereticide
-hereticize
-hereto
-heretoch
-heretofore
-heretoforetime
-heretoga
-heretrix
-hereunder
-hereunto
-hereupon
-hereward
-herewith
-herewithal
-herile
-heriot
-heriotable
-herisson
-heritability
-heritable
-heritably
-heritage
-heritance
-Heritiera
-heritor
-heritress
-heritrix
-herl
-herling
-herma
-hermaean
-hermaic
-Herman
-hermaphrodite
-hermaphroditic
-hermaphroditical
-hermaphroditically
-hermaphroditish
-hermaphroditism
-hermaphroditize
-Hermaphroditus
-hermeneut
-hermeneutic
-hermeneutical
-hermeneutically
-hermeneutics
-hermeneutist
-Hermes
-Hermesian
-Hermesianism
-Hermetic
-hermetic
-hermetical
-hermetically
-hermeticism
-Hermetics
-Hermetism
-Hermetist
-hermidin
-Herminone
-Hermione
-Hermit
-hermit
-hermitage
-hermitary
-hermitess
-hermitic
-hermitical
-hermitically
-hermitish
-hermitism
-hermitize
-hermitry
-hermitship
-Hermo
-hermodact
-hermodactyl
-Hermogenian
-hermoglyphic
-hermoglyphist
-hermokopid
-hern
-Hernandia
-Hernandiaceae
-hernandiaceous
-hernanesell
-hernani
-hernant
-herne
-hernia
-hernial
-Herniaria
-herniarin
-herniary
-herniate
-herniated
-herniation
-hernioenterotomy
-hernioid
-herniology
-herniopuncture
-herniorrhaphy
-herniotome
-herniotomist
-herniotomy
-hero
-heroarchy
-Herodian
-herodian
-Herodianic
-Herodii
-Herodiones
-herodionine
-heroess
-herohead
-herohood
-heroic
-heroical
-heroically
-heroicalness
-heroicity
-heroicly
-heroicness
-heroicomic
-heroicomical
-heroid
-Heroides
-heroify
-Heroin
-heroin
-heroine
-heroineship
-heroinism
-heroinize
-heroism
-heroistic
-heroization
-heroize
-herolike
-heromonger
-heron
-heroner
-heronite
-heronry
-heroogony
-heroologist
-heroology
-Herophile
-Herophilist
-heroship
-herotheism
-herpes
-Herpestes
-Herpestinae
-herpestine
-herpetic
-herpetiform
-herpetism
-herpetography
-herpetoid
-herpetologic
-herpetological
-herpetologically
-herpetologist
-herpetology
-herpetomonad
-Herpetomonas
-herpetophobia
-herpetotomist
-herpetotomy
-herpolhode
-Herpotrichia
-herrengrundite
-Herrenvolk
-herring
-herringbone
-herringer
-Herrnhuter
-hers
-Herschelian
-herschelite
-herse
-hersed
-herself
-hership
-hersir
-hertz
-hertzian
-Heruli
-Herulian
-Hervati
-Herve
-Herzegovinian
-Hesiodic
-Hesione
-Hesionidae
-hesitance
-hesitancy
-hesitant
-hesitantly
-hesitate
-hesitater
-hesitating
-hesitatingly
-hesitatingness
-hesitation
-hesitative
-hesitatively
-hesitatory
-Hesper
-Hespera
-Hesperia
-Hesperian
-Hesperic
-Hesperid
-hesperid
-hesperidate
-hesperidene
-hesperideous
-Hesperides
-Hesperidian
-hesperidin
-hesperidium
-hesperiid
-Hesperiidae
-hesperinon
-Hesperis
-hesperitin
-Hesperornis
-Hesperornithes
-hesperornithid
-Hesperornithiformes
-hesperornithoid
-Hesperus
-Hessian
-hessite
-hessonite
-hest
-Hester
-hestern
-hesternal
-Hesther
-hesthogenous
-Hesychasm
-Hesychast
-hesychastic
-het
-hetaera
-hetaeria
-hetaeric
-hetaerism
-Hetaerist
-hetaerist
-hetaeristic
-hetaerocracy
-hetaerolite
-hetaery
-heteradenia
-heteradenic
-heterakid
-Heterakis
-Heteralocha
-heterandrous
-heterandry
-heteratomic
-heterauxesis
-heteraxial
-heteric
-heterically
-hetericism
-hetericist
-heterism
-heterization
-heterize
-hetero
-heteroagglutinin
-heteroalbumose
-heteroauxin
-heteroblastic
-heteroblastically
-heteroblasty
-heterocarpism
-heterocarpous
-Heterocarpus
-heterocaseose
-heterocellular
-heterocentric
-heterocephalous
-Heterocera
-heterocerc
-heterocercal
-heterocercality
-heterocercy
-heterocerous
-heterochiral
-heterochlamydeous
-Heterochloridales
-heterochromatic
-heterochromatin
-heterochromatism
-heterochromatization
-heterochromatized
-heterochrome
-heterochromia
-heterochromic
-heterochromosome
-heterochromous
-heterochromy
-heterochronic
-heterochronism
-heterochronistic
-heterochronous
-heterochrony
-heterochrosis
-heterochthon
-heterochthonous
-heterocline
-heteroclinous
-heteroclital
-heteroclite
-heteroclitica
-heteroclitous
-Heterocoela
-heterocoelous
-Heterocotylea
-heterocycle
-heterocyclic
-heterocyst
-heterocystous
-heterodactyl
-Heterodactylae
-heterodactylous
-Heterodera
-Heterodon
-heterodont
-Heterodonta
-Heterodontidae
-heterodontism
-heterodontoid
-Heterodontus
-heterodox
-heterodoxal
-heterodoxical
-heterodoxly
-heterodoxness
-heterodoxy
-heterodromous
-heterodromy
-heterodyne
-heteroecious
-heteroeciously
-heteroeciousness
-heteroecism
-heteroecismal
-heteroecy
-heteroepic
-heteroepy
-heteroerotic
-heteroerotism
-heterofermentative
-heterofertilization
-heterogalactic
-heterogamete
-heterogametic
-heterogametism
-heterogamety
-heterogamic
-heterogamous
-heterogamy
-heterogangliate
-heterogen
-heterogene
-heterogeneal
-heterogenean
-heterogeneity
-heterogeneous
-heterogeneously
-heterogeneousness
-heterogenesis
-heterogenetic
-heterogenic
-heterogenicity
-heterogenist
-heterogenous
-heterogeny
-heteroglobulose
-heterognath
-Heterognathi
-heterogone
-heterogonism
-heterogonous
-heterogonously
-heterogony
-heterograft
-heterographic
-heterographical
-heterography
-Heterogyna
-heterogynal
-heterogynous
-heteroicous
-heteroimmune
-heteroinfection
-heteroinoculable
-heteroinoculation
-heterointoxication
-heterokaryon
-heterokaryosis
-heterokaryotic
-heterokinesis
-heterokinetic
-Heterokontae
-heterokontan
-heterolalia
-heterolateral
-heterolecithal
-heterolith
-heterolobous
-heterologic
-heterological
-heterologically
-heterologous
-heterology
-heterolysin
-heterolysis
-heterolytic
-heteromallous
-heteromastigate
-heteromastigote
-Heteromeles
-Heteromera
-heteromeral
-Heteromeran
-Heteromeri
-heteromeric
-heteromerous
-Heterometabola
-heterometabole
-heterometabolic
-heterometabolism
-heterometabolous
-heterometaboly
-heterometric
-Heteromi
-Heteromita
-Heteromorpha
-Heteromorphae
-heteromorphic
-heteromorphism
-heteromorphite
-heteromorphosis
-heteromorphous
-heteromorphy
-Heteromya
-Heteromyaria
-heteromyarian
-Heteromyidae
-Heteromys
-heteronereid
-heteronereis
-Heteroneura
-heteronomous
-heteronomously
-heteronomy
-heteronuclear
-heteronym
-heteronymic
-heteronymous
-heteronymously
-heteronymy
-heteroousia
-Heteroousian
-heteroousian
-Heteroousiast
-heteroousious
-heteropathic
-heteropathy
-heteropelmous
-heteropetalous
-Heterophaga
-Heterophagi
-heterophagous
-heterophasia
-heterophemism
-heterophemist
-heterophemistic
-heterophemize
-heterophemy
-heterophile
-heterophoria
-heterophoric
-heterophylesis
-heterophyletic
-heterophyllous
-heterophylly
-heterophyly
-heterophyte
-heterophytic
-Heteropia
-Heteropidae
-heteroplasia
-heteroplasm
-heteroplastic
-heteroplasty
-heteroploid
-heteroploidy
-heteropod
-Heteropoda
-heteropodal
-heteropodous
-heteropolar
-heteropolarity
-heteropoly
-heteroproteide
-heteroproteose
-heteropter
-Heteroptera
-heteropterous
-heteroptics
-heteropycnosis
-Heterorhachis
-heteroscope
-heteroscopy
-heterosexual
-heterosexuality
-heteroside
-Heterosiphonales
-heterosis
-Heterosomata
-Heterosomati
-heterosomatous
-heterosome
-Heterosomi
-heterosomous
-Heterosporeae
-heterosporic
-Heterosporium
-heterosporous
-heterospory
-heterostatic
-heterostemonous
-Heterostraca
-heterostracan
-Heterostraci
-heterostrophic
-heterostrophous
-heterostrophy
-heterostyled
-heterostylism
-heterostylous
-heterostyly
-heterosuggestion
-heterosyllabic
-heterotactic
-heterotactous
-heterotaxia
-heterotaxic
-heterotaxis
-heterotaxy
-heterotelic
-heterothallic
-heterothallism
-heterothermal
-heterothermic
-heterotic
-heterotopia
-heterotopic
-heterotopism
-heterotopous
-heterotopy
-heterotransplant
-heterotransplantation
-heterotrich
-Heterotricha
-Heterotrichales
-Heterotrichida
-heterotrichosis
-heterotrichous
-heterotropal
-heterotroph
-heterotrophic
-heterotrophy
-heterotropia
-heterotropic
-heterotropous
-heterotype
-heterotypic
-heterotypical
-heteroxanthine
-heteroxenous
-heterozetesis
-heterozygosis
-heterozygosity
-heterozygote
-heterozygotic
-heterozygous
-heterozygousness
-hething
-hetman
-hetmanate
-hetmanship
-hetter
-hetterly
-Hettie
-Hetty
-heuau
-Heuchera
-heugh
-heulandite
-heumite
-heuretic
-heuristic
-heuristically
-Hevea
-hevi
-hew
-hewable
-hewel
-hewer
-hewettite
-hewhall
-hewn
-hewt
-hex
-hexa
-hexabasic
-Hexabiblos
-hexabiose
-hexabromide
-hexacanth
-hexacanthous
-hexacapsular
-hexacarbon
-hexace
-hexachloride
-hexachlorocyclohexane
-hexachloroethane
-hexachord
-hexachronous
-hexacid
-hexacolic
-Hexacoralla
-hexacorallan
-Hexacorallia
-hexacosane
-hexacosihedroid
-hexact
-hexactinal
-hexactine
-hexactinellid
-Hexactinellida
-hexactinellidan
-hexactinelline
-hexactinian
-hexacyclic
-hexad
-hexadactyle
-hexadactylic
-hexadactylism
-hexadactylous
-hexadactyly
-hexadecahedroid
-hexadecane
-hexadecanoic
-hexadecene
-hexadecyl
-hexadic
-hexadiene
-hexadiyne
-hexafoil
-hexaglot
-hexagon
-hexagonal
-hexagonally
-hexagonial
-hexagonical
-hexagonous
-hexagram
-Hexagrammidae
-hexagrammoid
-Hexagrammos
-hexagyn
-Hexagynia
-hexagynian
-hexagynous
-hexahedral
-hexahedron
-hexahydrate
-hexahydrated
-hexahydric
-hexahydride
-hexahydrite
-hexahydrobenzene
-hexahydroxy
-hexakisoctahedron
-hexakistetrahedron
-hexameral
-hexameric
-hexamerism
-hexameron
-hexamerous
-hexameter
-hexamethylenamine
-hexamethylene
-hexamethylenetetramine
-hexametral
-hexametric
-hexametrical
-hexametrist
-hexametrize
-hexametrographer
-Hexamita
-hexamitiasis
-hexammine
-hexammino
-hexanaphthene
-Hexanchidae
-Hexanchus
-Hexandria
-hexandric
-hexandrous
-hexandry
-hexane
-hexanedione
-hexangular
-hexangularly
-hexanitrate
-hexanitrodiphenylamine
-hexapartite
-hexaped
-hexapetaloid
-hexapetaloideous
-hexapetalous
-hexaphyllous
-hexapla
-hexaplar
-hexaplarian
-hexaplaric
-hexaploid
-hexaploidy
-hexapod
-Hexapoda
-hexapodal
-hexapodan
-hexapodous
-hexapody
-hexapterous
-hexaradial
-hexarch
-hexarchy
-hexaseme
-hexasemic
-hexasepalous
-hexaspermous
-hexastemonous
-hexaster
-hexastich
-hexastichic
-hexastichon
-hexastichous
-hexastichy
-hexastigm
-hexastylar
-hexastyle
-hexastylos
-hexasulphide
-hexasyllabic
-hexatetrahedron
-Hexateuch
-Hexateuchal
-hexathlon
-hexatomic
-hexatriacontane
-hexatriose
-hexavalent
-hexecontane
-hexenbesen
-hexene
-hexer
-hexerei
-hexeris
-hexestrol
-hexicological
-hexicology
-hexine
-hexiological
-hexiology
-hexis
-hexitol
-hexoctahedral
-hexoctahedron
-hexode
-hexoestrol
-hexogen
-hexoic
-hexokinase
-hexone
-hexonic
-hexosamine
-hexosaminic
-hexosan
-hexose
-hexosediphosphoric
-hexosemonophosphoric
-hexosephosphatase
-hexosephosphoric
-hexoylene
-hexpartite
-hexyl
-hexylene
-hexylic
-hexylresorcinol
-hexyne
-hey
-heyday
-Hezron
-Hezronites
-hi
-hia
-Hianakoto
-hiant
-hiatal
-hiate
-hiation
-hiatus
-Hibbertia
-hibbin
-hibernacle
-hibernacular
-hibernaculum
-hibernal
-hibernate
-hibernation
-hibernator
-Hibernia
-Hibernian
-Hibernianism
-Hibernic
-Hibernical
-Hibernically
-Hibernicism
-Hibernicize
-Hibernization
-Hibernize
-Hibernologist
-Hibernology
-Hibiscus
-Hibito
-Hibitos
-Hibunci
-hic
-hicatee
-hiccup
-hick
-hickey
-hickory
-Hicksite
-hickwall
-Hicoria
-hidable
-hidage
-hidalgism
-hidalgo
-hidalgoism
-hidated
-hidation
-Hidatsa
-hidden
-hiddenite
-hiddenly
-hiddenmost
-hiddenness
-hide
-hideaway
-hidebind
-hidebound
-hideboundness
-hided
-hideland
-hideless
-hideling
-hideosity
-hideous
-hideously
-hideousness
-hider
-hidling
-hidlings
-hidradenitis
-hidrocystoma
-hidromancy
-hidropoiesis
-hidrosis
-hidrotic
-hie
-hieder
-hielaman
-hield
-hielmite
-hiemal
-hiemation
-Hienz
-Hieracian
-Hieracium
-hieracosphinx
-hierapicra
-hierarch
-hierarchal
-hierarchic
-hierarchical
-hierarchically
-hierarchism
-hierarchist
-hierarchize
-hierarchy
-hieratic
-hieratical
-hieratically
-hieraticism
-hieratite
-Hierochloe
-hierocracy
-hierocratic
-hierocratical
-hierodule
-hierodulic
-Hierofalco
-hierogamy
-hieroglyph
-hieroglypher
-hieroglyphic
-hieroglyphical
-hieroglyphically
-hieroglyphist
-hieroglyphize
-hieroglyphology
-hieroglyphy
-hierogram
-hierogrammat
-hierogrammate
-hierogrammateus
-hierogrammatic
-hierogrammatical
-hierogrammatist
-hierograph
-hierographer
-hierographic
-hierographical
-hierography
-hierolatry
-hierologic
-hierological
-hierologist
-hierology
-hieromachy
-hieromancy
-hieromnemon
-hieromonach
-hieron
-Hieronymic
-Hieronymite
-hieropathic
-hierophancy
-hierophant
-hierophantes
-hierophantic
-hierophantically
-hierophanticly
-hieros
-hieroscopy
-Hierosolymitan
-Hierosolymite
-hierurgical
-hierurgy
-hifalutin
-higdon
-higgaion
-higginsite
-higgle
-higglehaggle
-higgler
-higglery
-high
-highball
-highbelia
-highbinder
-highborn
-highboy
-highbred
-higher
-highermost
-highest
-highfalutin
-highfaluting
-highfalutinism
-highflying
-highhanded
-highhandedly
-highhandedness
-highhearted
-highheartedly
-highheartedness
-highish
-highjack
-highjacker
-highland
-highlander
-highlandish
-Highlandman
-Highlandry
-highlight
-highliving
-highly
-highman
-highmoor
-highmost
-highness
-highroad
-hight
-hightoby
-hightop
-highway
-highwayman
-higuero
-hijack
-hike
-hiker
-Hilaria
-hilarious
-hilariously
-hilariousness
-hilarity
-Hilary
-Hilarymas
-Hilarytide
-hilasmic
-hilch
-Hilda
-Hildebrand
-Hildebrandian
-Hildebrandic
-Hildebrandine
-Hildebrandism
-Hildebrandist
-Hildebrandslied
-Hildegarde
-hilding
-hiliferous
-hill
-Hillary
-hillberry
-hillbilly
-hillculture
-hillebrandite
-Hillel
-hiller
-hillet
-Hillhousia
-hilliness
-hillman
-hillock
-hillocked
-hillocky
-hillsale
-hillsalesman
-hillside
-hillsman
-hilltop
-hilltrot
-hillward
-hillwoman
-hilly
-hilsa
-hilt
-hiltless
-hilum
-hilus
-him
-Hima
-Himalaya
-Himalayan
-Himantopus
-himation
-Himawan
-himp
-himself
-himward
-himwards
-Himyaric
-Himyarite
-Himyaritic
-hin
-hinau
-Hinayana
-hinch
-hind
-hindberry
-hindbrain
-hindcast
-hinddeck
-hinder
-hinderance
-hinderer
-hinderest
-hinderful
-hinderfully
-hinderingly
-hinderlands
-hinderlings
-hinderlins
-hinderly
-hinderment
-hindermost
-hindersome
-hindhand
-hindhead
-Hindi
-hindmost
-hindquarter
-hindrance
-hindsaddle
-hindsight
-Hindu
-Hinduism
-Hinduize
-Hindustani
-hindward
-hing
-hinge
-hingecorner
-hingeflower
-hingeless
-hingelike
-hinger
-hingeways
-hingle
-hinney
-hinnible
-Hinnites
-hinny
-hinoid
-hinoideous
-hinoki
-hinsdalite
-hint
-hintedly
-hinter
-hinterland
-hintingly
-hintproof
-hintzeite
-Hiodon
-hiodont
-Hiodontidae
-hiortdahlite
-hip
-hipbone
-hipe
-hiper
-hiphalt
-hipless
-hipmold
-Hippa
-hippalectryon
-hipparch
-Hipparion
-Hippeastrum
-hipped
-Hippelates
-hippen
-Hippia
-hippian
-hippiater
-hippiatric
-hippiatrical
-hippiatrics
-hippiatrist
-hippiatry
-hippic
-Hippidae
-Hippidion
-Hippidium
-hipping
-hippish
-hipple
-hippo
-Hippobosca
-hippoboscid
-Hippoboscidae
-hippocamp
-hippocampal
-hippocampi
-hippocampine
-hippocampus
-Hippocastanaceae
-hippocastanaceous
-hippocaust
-hippocentaur
-hippocentauric
-hippocerf
-hippocoprosterol
-hippocras
-Hippocratea
-Hippocrateaceae
-hippocrateaceous
-Hippocratian
-Hippocratic
-Hippocratical
-Hippocratism
-Hippocrene
-Hippocrenian
-hippocrepian
-hippocrepiform
-Hippodamia
-hippodamous
-hippodrome
-hippodromic
-hippodromist
-hippogastronomy
-Hippoglosinae
-Hippoglossidae
-Hippoglossus
-hippogriff
-hippogriffin
-hippoid
-hippolite
-hippolith
-hippological
-hippologist
-hippology
-Hippolytan
-Hippolyte
-Hippolytidae
-Hippolytus
-hippomachy
-hippomancy
-hippomanes
-Hippomedon
-hippomelanin
-Hippomenes
-hippometer
-hippometric
-hippometry
-Hipponactean
-hipponosological
-hipponosology
-hippopathological
-hippopathology
-hippophagi
-hippophagism
-hippophagist
-hippophagistical
-hippophagous
-hippophagy
-hippophile
-hippophobia
-hippopod
-hippopotami
-hippopotamian
-hippopotamic
-Hippopotamidae
-hippopotamine
-hippopotamoid
-hippopotamus
-Hipposelinum
-hippotigrine
-Hippotigris
-hippotomical
-hippotomist
-hippotomy
-hippotragine
-Hippotragus
-hippurate
-hippuric
-hippurid
-Hippuridaceae
-Hippuris
-hippurite
-Hippurites
-hippuritic
-Hippuritidae
-hippuritoid
-hippus
-hippy
-hipshot
-hipwort
-hirable
-hiragana
-Hiram
-Hiramite
-hircarra
-hircine
-hircinous
-hircocerf
-hircocervus
-hircosity
-hire
-hired
-hireless
-hireling
-hireman
-Hiren
-hirer
-hirmologion
-hirmos
-Hirneola
-hiro
-Hirofumi
-hirondelle
-Hirotoshi
-Hiroyuki
-hirple
-hirrient
-hirse
-hirsel
-hirsle
-hirsute
-hirsuteness
-hirsuties
-hirsutism
-hirsutulous
-Hirtella
-hirtellous
-Hirudin
-hirudine
-Hirudinea
-hirudinean
-hirudiniculture
-Hirudinidae
-hirudinize
-hirudinoid
-Hirudo
-hirundine
-Hirundinidae
-hirundinous
-Hirundo
-his
-hish
-hisingerite
-hisn
-Hispa
-Hispania
-Hispanic
-Hispanicism
-Hispanicize
-hispanidad
-Hispaniolate
-Hispaniolize
-Hispanist
-Hispanize
-Hispanophile
-Hispanophobe
-hispid
-hispidity
-hispidulate
-hispidulous
-Hispinae
-hiss
-hisser
-hissing
-hissingly
-hissproof
-hist
-histaminase
-histamine
-histaminic
-histidine
-histie
-histiocyte
-histiocytic
-histioid
-histiology
-Histiophoridae
-Histiophorus
-histoblast
-histochemic
-histochemical
-histochemistry
-histoclastic
-histocyte
-histodiagnosis
-histodialysis
-histodialytic
-histogen
-histogenesis
-histogenetic
-histogenetically
-histogenic
-histogenous
-histogeny
-histogram
-histographer
-histographic
-histographical
-histography
-histoid
-histologic
-histological
-histologically
-histologist
-histology
-histolysis
-histolytic
-histometabasis
-histomorphological
-histomorphologically
-histomorphology
-histon
-histonal
-histone
-histonomy
-histopathologic
-histopathological
-histopathologist
-histopathology
-histophyly
-histophysiological
-histophysiology
-Histoplasma
-histoplasmin
-histoplasmosis
-historial
-historian
-historiated
-historic
-historical
-historically
-historicalness
-historician
-historicism
-historicity
-historicize
-historicocabbalistical
-historicocritical
-historicocultural
-historicodogmatic
-historicogeographical
-historicophilosophica
-historicophysical
-historicopolitical
-historicoprophetic
-historicoreligious
-historics
-historicus
-historied
-historier
-historiette
-historify
-historiograph
-historiographer
-historiographership
-historiographic
-historiographical
-historiographically
-historiography
-historiological
-historiology
-historiometric
-historiometry
-historionomer
-historious
-historism
-historize
-history
-histotherapist
-histotherapy
-histotome
-histotomy
-histotrophic
-histotrophy
-histotropic
-histozoic
-histozyme
-histrio
-Histriobdella
-Histriomastix
-histrion
-histrionic
-histrionical
-histrionically
-histrionicism
-histrionism
-hit
-hitch
-hitcher
-hitchhike
-hitchhiker
-hitchily
-hitchiness
-Hitchiti
-hitchproof
-hitchy
-hithe
-hither
-hithermost
-hitherto
-hitherward
-Hitlerism
-Hitlerite
-hitless
-Hitoshi
-hittable
-hitter
-Hittite
-Hittitics
-Hittitology
-Hittology
-hive
-hiveless
-hiver
-hives
-hiveward
-Hivite
-hizz
-Hler
-Hlidhskjalf
-Hlithskjalf
-Hlorrithi
-Ho
-ho
-hoar
-hoard
-hoarder
-hoarding
-hoardward
-hoarfrost
-hoarhead
-hoarheaded
-hoarhound
-hoarily
-hoariness
-hoarish
-hoarness
-hoarse
-hoarsely
-hoarsen
-hoarseness
-hoarstone
-hoarwort
-hoary
-hoaryheaded
-hoast
-hoastman
-hoatzin
-hoax
-hoaxee
-hoaxer
-hoaxproof
-hob
-hobber
-Hobbesian
-hobbet
-Hobbian
-hobbil
-Hobbism
-Hobbist
-Hobbistical
-hobble
-hobblebush
-hobbledehoy
-hobbledehoydom
-hobbledehoyhood
-hobbledehoyish
-hobbledehoyishness
-hobbledehoyism
-hobbledygee
-hobbler
-hobbling
-hobblingly
-hobbly
-hobby
-hobbyhorse
-hobbyhorsical
-hobbyhorsically
-hobbyism
-hobbyist
-hobbyless
-hobgoblin
-hoblike
-hobnail
-hobnailed
-hobnailer
-hobnob
-hobo
-hoboism
-Hobomoco
-hobthrush
-hocco
-Hochelaga
-Hochheimer
-hock
-Hockday
-hockelty
-hocker
-hocket
-hockey
-hockshin
-Hocktide
-hocky
-hocus
-hod
-hodden
-hodder
-hoddle
-hoddy
-hodening
-hodful
-hodgepodge
-Hodgkin
-hodgkinsonite
-hodiernal
-hodman
-hodmandod
-hodograph
-hodometer
-hodometrical
-hoe
-hoecake
-hoedown
-hoeful
-hoer
-hoernesite
-Hoffmannist
-Hoffmannite
-hog
-hoga
-hogan
-Hogarthian
-hogback
-hogbush
-hogfish
-hogframe
-hogged
-hogger
-hoggerel
-hoggery
-hogget
-hoggie
-hoggin
-hoggish
-hoggishly
-hoggishness
-hoggism
-hoggy
-hogherd
-hoghide
-hoghood
-hoglike
-hogling
-hogmace
-hogmanay
-Hogni
-hognose
-hognut
-hogpen
-hogreeve
-hogrophyte
-hogshead
-hogship
-hogshouther
-hogskin
-hogsty
-hogward
-hogwash
-hogweed
-hogwort
-hogyard
-Hohe
-Hohenzollern
-Hohenzollernism
-Hohn
-Hohokam
-hoi
-hoick
-hoin
-hoise
-hoist
-hoistaway
-hoister
-hoisting
-hoistman
-hoistway
-hoit
-hoju
-Hokan
-hokey
-hokeypokey
-hokum
-holagogue
-holarctic
-holard
-holarthritic
-holarthritis
-holaspidean
-holcad
-holcodont
-Holconoti
-Holcus
-hold
-holdable
-holdall
-holdback
-holden
-holdenite
-holder
-holdership
-holdfast
-holdfastness
-holding
-holdingly
-holdout
-holdover
-holdsman
-holdup
-hole
-holeable
-Holectypina
-holectypoid
-holeless
-holeman
-holeproof
-holer
-holethnic
-holethnos
-holewort
-holey
-holia
-holiday
-holidayer
-holidayism
-holidaymaker
-holidaymaking
-holily
-holiness
-holing
-holinight
-holism
-holistic
-holistically
-holl
-holla
-hollaite
-Holland
-hollandaise
-Hollander
-Hollandish
-hollandite
-Hollands
-Hollantide
-holler
-hollin
-holliper
-hollo
-hollock
-hollong
-hollow
-hollower
-hollowfaced
-hollowfoot
-hollowhearted
-hollowheartedness
-hollowly
-hollowness
-holluschick
-Holly
-holly
-hollyhock
-Hollywood
-Hollywooder
-Hollywoodize
-holm
-holmberry
-holmgang
-holmia
-holmic
-holmium
-holmos
-holobaptist
-holobenthic
-holoblastic
-holoblastically
-holobranch
-holocaine
-holocarpic
-holocarpous
-holocaust
-holocaustal
-holocaustic
-Holocene
-holocentrid
-Holocentridae
-holocentroid
-Holocentrus
-Holocephala
-holocephalan
-Holocephali
-holocephalian
-holocephalous
-Holochoanites
-holochoanitic
-holochoanoid
-Holochoanoida
-holochoanoidal
-holochordate
-holochroal
-holoclastic
-holocrine
-holocryptic
-holocrystalline
-holodactylic
-holodedron
-Holodiscus
-hologamous
-hologamy
-hologastrula
-hologastrular
-Holognatha
-holognathous
-hologonidium
-holograph
-holographic
-holographical
-holohedral
-holohedric
-holohedrism
-holohemihedral
-holohyaline
-holomastigote
-Holometabola
-holometabole
-holometabolian
-holometabolic
-holometabolism
-holometabolous
-holometaboly
-holometer
-holomorph
-holomorphic
-holomorphism
-holomorphosis
-holomorphy
-Holomyaria
-holomyarian
-Holomyarii
-holoparasite
-holoparasitic
-Holophane
-holophane
-holophotal
-holophote
-holophotometer
-holophrase
-holophrasis
-holophrasm
-holophrastic
-holophyte
-holophytic
-holoplankton
-holoplanktonic
-holoplexia
-holopneustic
-holoproteide
-holoptic
-holoptychian
-holoptychiid
-Holoptychiidae
-Holoptychius
-holoquinoid
-holoquinoidal
-holoquinonic
-holoquinonoid
-holorhinal
-holosaprophyte
-holosaprophytic
-holosericeous
-holoside
-holosiderite
-Holosiphona
-holosiphonate
-Holosomata
-holosomatous
-holospondaic
-holostean
-Holostei
-holosteous
-holosteric
-Holosteum
-Holostomata
-holostomate
-holostomatous
-holostome
-holostomous
-holostylic
-holosymmetric
-holosymmetrical
-holosymmetry
-holosystematic
-holosystolic
-holothecal
-holothoracic
-Holothuria
-holothurian
-Holothuridea
-holothurioid
-Holothurioidea
-holotonia
-holotonic
-holotony
-holotrich
-Holotricha
-holotrichal
-Holotrichida
-holotrichous
-holotype
-holour
-holozoic
-Holstein
-holster
-holstered
-holt
-holy
-holyday
-holyokeite
-holystone
-holytide
-homage
-homageable
-homager
-Homalocenchrus
-homalogonatous
-homalographic
-homaloid
-homaloidal
-Homalonotus
-Homalopsinae
-Homaloptera
-Homalopterous
-homalosternal
-Homalosternii
-Homam
-Homaridae
-homarine
-homaroid
-Homarus
-homatomic
-homaxial
-homaxonial
-homaxonic
-Homburg
-home
-homebody
-homeborn
-homebound
-homebred
-homecomer
-homecraft
-homecroft
-homecrofter
-homecrofting
-homefarer
-homefelt
-homegoer
-homekeeper
-homekeeping
-homeland
-homelander
-homeless
-homelessly
-homelessness
-homelet
-homelike
-homelikeness
-homelily
-homeliness
-homeling
-homely
-homelyn
-homemade
-homemaker
-homemaking
-homeoblastic
-homeochromatic
-homeochromatism
-homeochronous
-homeocrystalline
-homeogenic
-homeogenous
-homeoid
-homeoidal
-homeoidality
-homeokinesis
-homeokinetic
-homeomerous
-homeomorph
-homeomorphic
-homeomorphism
-homeomorphous
-homeomorphy
-homeopath
-homeopathic
-homeopathically
-homeopathician
-homeopathicity
-homeopathist
-homeopathy
-homeophony
-homeoplasia
-homeoplastic
-homeoplasy
-homeopolar
-homeosis
-homeostasis
-homeostatic
-homeotic
-homeotransplant
-homeotransplantation
-homeotype
-homeotypic
-homeotypical
-homeowner
-homeozoic
-Homer
-homer
-Homerian
-Homeric
-Homerical
-Homerically
-Homerid
-Homeridae
-Homeridian
-Homerist
-Homerologist
-Homerology
-Homeromastix
-homeseeker
-homesick
-homesickly
-homesickness
-homesite
-homesome
-homespun
-homestall
-homestead
-homesteader
-homester
-homestretch
-homeward
-homewardly
-homework
-homeworker
-homewort
-homey
-homeyness
-homicidal
-homicidally
-homicide
-homicidious
-homiculture
-homilete
-homiletic
-homiletical
-homiletically
-homiletics
-homiliarium
-homiliary
-homilist
-homilite
-homilize
-homily
-hominal
-hominess
-Hominian
-hominid
-Hominidae
-hominiform
-hominify
-hominine
-hominisection
-hominivorous
-hominoid
-hominy
-homish
-homishness
-homo
-homoanisaldehyde
-homoanisic
-homoarecoline
-homobaric
-homoblastic
-homoblasty
-homocarpous
-homocategoric
-homocentric
-homocentrical
-homocentrically
-homocerc
-homocercal
-homocercality
-homocercy
-homocerebrin
-homochiral
-homochlamydeous
-homochromatic
-homochromatism
-homochrome
-homochromic
-homochromosome
-homochromous
-homochromy
-homochronous
-homoclinal
-homocline
-Homocoela
-homocoelous
-homocreosol
-homocyclic
-homodermic
-homodermy
-homodont
-homodontism
-homodox
-homodoxian
-homodromal
-homodrome
-homodromous
-homodromy
-homodynamic
-homodynamous
-homodynamy
-homodyne
-Homoean
-Homoeanism
-homoecious
-homoeoarchy
-homoeoblastic
-homoeochromatic
-homoeochronous
-homoeocrystalline
-homoeogenic
-homoeogenous
-homoeography
-homoeokinesis
-homoeomerae
-Homoeomeri
-homoeomeria
-homoeomerian
-homoeomerianism
-homoeomeric
-homoeomerical
-homoeomerous
-homoeomery
-homoeomorph
-homoeomorphic
-homoeomorphism
-homoeomorphous
-homoeomorphy
-homoeopath
-homoeopathic
-homoeopathically
-homoeopathician
-homoeopathicity
-homoeopathist
-homoeopathy
-homoeophony
-homoeophyllous
-homoeoplasia
-homoeoplastic
-homoeoplasy
-homoeopolar
-homoeosis
-homoeotel
-homoeoteleutic
-homoeoteleuton
-homoeotic
-homoeotopy
-homoeotype
-homoeotypic
-homoeotypical
-homoeozoic
-homoerotic
-homoerotism
-homofermentative
-homogametic
-homogamic
-homogamous
-homogamy
-homogangliate
-homogen
-homogenate
-homogene
-homogeneal
-homogenealness
-homogeneate
-homogeneity
-homogeneization
-homogeneize
-homogeneous
-homogeneously
-homogeneousness
-homogenesis
-homogenetic
-homogenetical
-homogenic
-homogenization
-homogenize
-homogenizer
-homogenous
-homogentisic
-homogeny
-homoglot
-homogone
-homogonous
-homogonously
-homogony
-homograft
-homograph
-homographic
-homography
-homohedral
-homoiotherm
-homoiothermal
-homoiothermic
-homoiothermism
-homoiothermous
-homoiousia
-Homoiousian
-homoiousian
-Homoiousianism
-homoiousious
-homolateral
-homolecithal
-homolegalis
-homologate
-homologation
-homologic
-homological
-homologically
-homologist
-homologize
-homologizer
-homologon
-homologoumena
-homologous
-homolographic
-homolography
-homologue
-homology
-homolosine
-homolysin
-homolysis
-homomallous
-homomeral
-homomerous
-homometrical
-homometrically
-homomorph
-Homomorpha
-homomorphic
-homomorphism
-homomorphosis
-homomorphous
-homomorphy
-Homoneura
-homonomous
-homonomy
-homonuclear
-homonym
-homonymic
-homonymous
-homonymously
-homonymy
-homoousia
-Homoousian
-Homoousianism
-Homoousianist
-Homoousiast
-Homoousion
-homoousious
-homopathy
-homoperiodic
-homopetalous
-homophene
-homophenous
-homophone
-homophonic
-homophonous
-homophony
-homophthalic
-homophylic
-homophyllous
-homophyly
-homopiperonyl
-homoplasis
-homoplasmic
-homoplasmy
-homoplast
-homoplastic
-homoplasy
-homopolar
-homopolarity
-homopolic
-homopter
-Homoptera
-homopteran
-homopteron
-homopterous
-Homorelaps
-homorganic
-homoseismal
-homosexual
-homosexualism
-homosexualist
-homosexuality
-homosporous
-homospory
-Homosteus
-homostyled
-homostylic
-homostylism
-homostylous
-homostyly
-homosystemic
-homotactic
-homotatic
-homotaxeous
-homotaxia
-homotaxial
-homotaxially
-homotaxic
-homotaxis
-homotaxy
-homothallic
-homothallism
-homothetic
-homothety
-homotonic
-homotonous
-homotonously
-homotony
-homotopic
-homotransplant
-homotransplantation
-homotropal
-homotropous
-homotypal
-homotype
-homotypic
-homotypical
-homotypy
-homovanillic
-homovanillin
-homoveratric
-homoveratrole
-homozygosis
-homozygosity
-homozygote
-homozygous
-homozygousness
-homrai
-homuncle
-homuncular
-homunculus
-homy
-Hon
-honda
-hondo
-Honduran
-Honduranean
-Honduranian
-Hondurean
-Hondurian
-hone
-honest
-honestly
-honestness
-honestone
-honesty
-honewort
-honey
-honeybee
-honeyberry
-honeybind
-honeyblob
-honeybloom
-honeycomb
-honeycombed
-honeydew
-honeydewed
-honeydrop
-honeyed
-honeyedly
-honeyedness
-honeyfall
-honeyflower
-honeyfogle
-honeyful
-honeyhearted
-honeyless
-honeylike
-honeylipped
-honeymoon
-honeymooner
-honeymoonlight
-honeymoonshine
-honeymoonstruck
-honeymoony
-honeymouthed
-honeypod
-honeypot
-honeystone
-honeysuck
-honeysucker
-honeysuckle
-honeysuckled
-honeysweet
-honeyware
-Honeywood
-honeywood
-honeywort
-hong
-honied
-honily
-honk
-honker
-honor
-Honora
-honorability
-honorable
-honorableness
-honorableship
-honorably
-honorance
-honoraria
-honorarily
-honorarium
-honorary
-honoree
-honorer
-honoress
-honorific
-honorifically
-honorless
-honorous
-honorsman
-honorworthy
-hontish
-hontous
-Honzo
-hooch
-hoochinoo
-hood
-hoodcap
-hooded
-hoodedness
-hoodful
-hoodie
-hoodless
-hoodlike
-hoodlum
-hoodlumish
-hoodlumism
-hoodlumize
-hoodman
-hoodmold
-hoodoo
-hoodsheaf
-hoodshy
-hoodshyness
-hoodwink
-hoodwinkable
-hoodwinker
-hoodwise
-hoodwort
-hooey
-hoof
-hoofbeat
-hoofbound
-hoofed
-hoofer
-hoofiness
-hoofish
-hoofless
-hooflet
-hooflike
-hoofmark
-hoofprint
-hoofrot
-hoofs
-hoofworm
-hoofy
-hook
-hookah
-hookaroon
-hooked
-hookedness
-hookedwise
-hooker
-Hookera
-hookerman
-hookers
-hookheal
-hookish
-hookless
-hooklet
-hooklike
-hookmaker
-hookmaking
-hookman
-hooknose
-hooksmith
-hooktip
-hookum
-hookup
-hookweed
-hookwise
-hookworm
-hookwormer
-hookwormy
-hooky
-hooligan
-hooliganism
-hooliganize
-hoolock
-hooly
-hoon
-hoonoomaun
-hoop
-hooped
-hooper
-hooping
-hoopla
-hoople
-hoopless
-hooplike
-hoopmaker
-hoopman
-hoopoe
-hoopstick
-hoopwood
-hoose
-hoosegow
-hoosh
-Hoosier
-Hoosierdom
-Hoosierese
-Hoosierize
-hoot
-hootay
-hooter
-hootingly
-hoove
-hooven
-Hooverism
-Hooverize
-hoovey
-hop
-hopbine
-hopbush
-Hopcalite
-hopcrease
-hope
-hoped
-hopeful
-hopefully
-hopefulness
-hopeite
-hopeless
-hopelessly
-hopelessness
-hoper
-Hopi
-hopi
-hopingly
-Hopkinsian
-Hopkinsianism
-Hopkinsonian
-hoplite
-hoplitic
-hoplitodromos
-Hoplocephalus
-hoplology
-hoplomachic
-hoplomachist
-hoplomachos
-hoplomachy
-Hoplonemertea
-hoplonemertean
-hoplonemertine
-Hoplonemertini
-hopoff
-hopped
-hopper
-hopperburn
-hopperdozer
-hopperette
-hoppergrass
-hopperings
-hopperman
-hoppers
-hoppestere
-hoppet
-hoppingly
-hoppity
-hopple
-hoppy
-hopscotch
-hopscotcher
-hoptoad
-hopvine
-hopyard
-hora
-horal
-horary
-Horatian
-Horatio
-Horatius
-horbachite
-hordarian
-hordary
-horde
-hordeaceous
-hordeiform
-hordein
-hordenine
-Hordeum
-horehound
-Horim
-horismology
-horizometer
-horizon
-horizonless
-horizontal
-horizontalism
-horizontality
-horizontalization
-horizontalize
-horizontally
-horizontalness
-horizontic
-horizontical
-horizontically
-horizonward
-horme
-hormic
-hormigo
-hormion
-hormist
-hormogon
-Hormogonales
-Hormogoneae
-Hormogoneales
-hormogonium
-hormogonous
-hormonal
-hormone
-hormonic
-hormonize
-hormonogenesis
-hormonogenic
-hormonology
-hormonopoiesis
-hormonopoietic
-hormos
-horn
-hornbeam
-hornbill
-hornblende
-hornblendic
-hornblendite
-hornblendophyre
-hornblower
-hornbook
-horned
-hornedness
-horner
-hornerah
-hornet
-hornety
-hornfair
-hornfels
-hornfish
-hornful
-horngeld
-Hornie
-hornify
-hornily
-horniness
-horning
-hornish
-hornist
-hornito
-hornless
-hornlessness
-hornlet
-hornlike
-hornotine
-hornpipe
-hornplant
-hornsman
-hornstay
-hornstone
-hornswoggle
-horntail
-hornthumb
-horntip
-hornwood
-hornwork
-hornworm
-hornwort
-horny
-hornyhanded
-hornyhead
-horograph
-horographer
-horography
-horokaka
-horologe
-horologer
-horologic
-horological
-horologically
-horologiography
-horologist
-horologium
-horologue
-horology
-horometrical
-horometry
-Horonite
-horopito
-horopter
-horopteric
-horoptery
-horoscopal
-horoscope
-horoscoper
-horoscopic
-horoscopical
-horoscopist
-horoscopy
-Horouta
-horrendous
-horrendously
-horrent
-horrescent
-horreum
-horribility
-horrible
-horribleness
-horribly
-horrid
-horridity
-horridly
-horridness
-horrific
-horrifically
-horrification
-horrify
-horripilant
-horripilate
-horripilation
-horrisonant
-horror
-horrorful
-horrorish
-horrorist
-horrorize
-horrormonger
-horrormongering
-horrorous
-horrorsome
-horse
-horseback
-horsebacker
-horseboy
-horsebreaker
-horsecar
-horsecloth
-horsecraft
-horsedom
-horsefair
-horsefettler
-horsefight
-horsefish
-horseflesh
-horsefly
-horsefoot
-horsegate
-horsehair
-horsehaired
-horsehead
-horseherd
-horsehide
-horsehood
-horsehoof
-horsejockey
-horsekeeper
-horselaugh
-horselaugher
-horselaughter
-horseleech
-horseless
-horselike
-horseload
-horseman
-horsemanship
-horsemastership
-horsemint
-horsemonger
-horseplay
-horseplayful
-horsepond
-horsepower
-horsepox
-horser
-horseshoe
-horseshoer
-horsetail
-horsetongue
-Horsetown
-horsetree
-horseway
-horseweed
-horsewhip
-horsewhipper
-horsewoman
-horsewomanship
-horsewood
-horsfordite
-horsify
-horsily
-horsiness
-horsing
-Horst
-horst
-horsy
-horsyism
-hortation
-hortative
-hortatively
-hortator
-hortatorily
-hortatory
-Hortense
-Hortensia
-hortensial
-Hortensian
-hortensian
-horticultural
-horticulturally
-horticulture
-horticulturist
-hortite
-hortonolite
-hortulan
-Horvatian
-hory
-Hosackia
-hosanna
-hose
-hosed
-hosel
-hoseless
-hoselike
-hoseman
-hosier
-hosiery
-hosiomartyr
-hospice
-hospitable
-hospitableness
-hospitably
-hospitage
-hospital
-hospitalary
-hospitaler
-hospitalism
-hospitality
-hospitalization
-hospitalize
-hospitant
-hospitate
-hospitation
-hospitator
-hospitious
-hospitium
-hospitize
-hospodar
-hospodariat
-hospodariate
-host
-Hosta
-hostage
-hostager
-hostageship
-hostel
-hosteler
-hostelry
-hoster
-hostess
-hostie
-hostile
-hostilely
-hostileness
-hostility
-hostilize
-hosting
-hostler
-hostlership
-hostlerwife
-hostless
-hostly
-hostry
-hostship
-hot
-hotbed
-hotblood
-hotbox
-hotbrained
-hotch
-hotchpot
-hotchpotch
-hotchpotchly
-hotel
-hoteldom
-hotelhood
-hotelier
-hotelization
-hotelize
-hotelkeeper
-hotelless
-hotelward
-hotfoot
-hothead
-hotheaded
-hotheadedly
-hotheadedness
-hothearted
-hotheartedly
-hotheartedness
-hothouse
-hoti
-hotly
-hotmouthed
-hotness
-hotspur
-hotspurred
-Hotta
-Hottentot
-Hottentotese
-Hottentotic
-Hottentotish
-Hottentotism
-hotter
-hottery
-hottish
-Hottonia
-houbara
-Houdan
-hough
-houghband
-hougher
-houghite
-houghmagandy
-Houghton
-hounce
-hound
-hounder
-houndfish
-hounding
-houndish
-houndlike
-houndman
-houndsbane
-houndsberry
-houndshark
-houndy
-houppelande
-hour
-hourful
-hourglass
-houri
-hourless
-hourly
-housage
-housal
-Housatonic
-house
-houseball
-houseboat
-houseboating
-housebote
-housebound
-houseboy
-housebreak
-housebreaker
-housebreaking
-housebroke
-housebroken
-housebug
-housebuilder
-housebuilding
-housecarl
-housecoat
-housecraft
-housefast
-housefather
-housefly
-houseful
-housefurnishings
-household
-householder
-householdership
-householding
-householdry
-housekeep
-housekeeper
-housekeeperlike
-housekeeperly
-housekeeping
-housel
-houseleek
-houseless
-houselessness
-houselet
-houseline
-houseling
-housemaid
-housemaidenly
-housemaiding
-housemaidy
-houseman
-housemaster
-housemastership
-housemate
-housemating
-houseminder
-housemistress
-housemother
-housemotherly
-houseowner
-houser
-houseridden
-houseroom
-housesmith
-housetop
-houseward
-housewares
-housewarm
-housewarmer
-housewarming
-housewear
-housewife
-housewifeliness
-housewifely
-housewifery
-housewifeship
-housewifish
-housewive
-housework
-housewright
-housing
-Houstonia
-housty
-housy
-houtou
-houvari
-Hova
-hove
-hovedance
-hovel
-hoveler
-hoven
-Hovenia
-hover
-hoverer
-hovering
-hoveringly
-hoverly
-how
-howadji
-Howard
-howardite
-howbeit
-howdah
-howder
-howdie
-howdy
-howe
-Howea
-howel
-however
-howff
-howish
-howitzer
-howk
-howkit
-howl
-howler
-howlet
-howling
-howlingly
-howlite
-howso
-howsoever
-howsomever
-hox
-hoy
-Hoya
-hoyden
-hoydenhood
-hoydenish
-hoydenism
-hoyle
-hoyman
-Hrimfaxi
-Hrothgar
-Hsi
-Hsuan
-Hu
-huaca
-huaco
-huajillo
-huamuchil
-huantajayite
-huaracho
-Huari
-huarizo
-Huashi
-Huastec
-Huastecan
-Huave
-Huavean
-hub
-hubb
-hubba
-hubber
-Hubbite
-hubble
-hubbly
-hubbub
-hubbuboo
-hubby
-Hubert
-hubmaker
-hubmaking
-hubnerite
-hubristic
-hubshi
-huccatoon
-huchen
-Huchnom
-hucho
-huck
-huckaback
-huckle
-huckleback
-hucklebacked
-huckleberry
-hucklebone
-huckmuck
-huckster
-hucksterage
-hucksterer
-hucksteress
-hucksterize
-huckstery
-hud
-huddle
-huddledom
-huddlement
-huddler
-huddling
-huddlingly
-huddock
-huddroun
-huddup
-Hudibras
-Hudibrastic
-Hudibrastically
-Hudsonia
-Hudsonian
-hudsonite
-hue
-hued
-hueful
-hueless
-huelessness
-huer
-Huey
-huff
-huffier
-huffily
-huffiness
-huffingly
-huffish
-huffishly
-huffishness
-huffle
-huffler
-huffy
-hug
-huge
-Hugelia
-hugelite
-hugely
-hugeness
-hugeous
-hugeously
-hugeousness
-huggable
-hugger
-huggermugger
-huggermuggery
-Huggin
-hugging
-huggingly
-huggle
-Hugh
-Hughes
-Hughoc
-Hugo
-Hugoesque
-hugsome
-Huguenot
-Huguenotic
-Huguenotism
-huh
-Hui
-huia
-huipil
-huisache
-huiscoyol
-huitain
-Huk
-Hukbalahap
-huke
-hula
-Huldah
-huldee
-hulk
-hulkage
-hulking
-hulky
-hull
-hullabaloo
-huller
-hullock
-hulloo
-hulotheism
-Hulsean
-hulsite
-hulster
-hulu
-hulver
-hulverhead
-hulverheaded
-hum
-Huma
-human
-humane
-humanely
-humaneness
-humanhood
-humanics
-humanification
-humaniform
-humaniformian
-humanify
-humanish
-humanism
-humanist
-humanistic
-humanistical
-humanistically
-humanitarian
-humanitarianism
-humanitarianist
-humanitarianize
-humanitary
-humanitian
-humanity
-humanitymonger
-humanization
-humanize
-humanizer
-humankind
-humanlike
-humanly
-humanness
-humanoid
-humate
-humble
-humblebee
-humblehearted
-humblemouthed
-humbleness
-humbler
-humblie
-humblingly
-humbly
-humbo
-humboldtilite
-humboldtine
-humboldtite
-humbug
-humbugability
-humbugable
-humbugger
-humbuggery
-humbuggism
-humbuzz
-humdinger
-humdrum
-humdrumminess
-humdrummish
-humdrummishness
-humdudgeon
-Hume
-Humean
-humect
-humectant
-humectate
-humectation
-humective
-humeral
-humeri
-humeroabdominal
-humerocubital
-humerodigital
-humerodorsal
-humerometacarpal
-humeroradial
-humeroscapular
-humeroulnar
-humerus
-humet
-humetty
-humhum
-humic
-humicubation
-humid
-humidate
-humidification
-humidifier
-humidify
-humidistat
-humidity
-humidityproof
-humidly
-humidness
-humidor
-humific
-humification
-humifuse
-humify
-humiliant
-humiliate
-humiliating
-humiliatingly
-humiliation
-humiliative
-humiliator
-humiliatory
-humilific
-humilitude
-humility
-humin
-Humiria
-Humiriaceae
-Humiriaceous
-Humism
-Humist
-humistratous
-humite
-humlie
-hummel
-hummeler
-hummer
-hummie
-humming
-hummingbird
-hummock
-hummocky
-humor
-humoral
-humoralism
-humoralist
-humoralistic
-humoresque
-humoresquely
-humorful
-humorific
-humorism
-humorist
-humoristic
-humoristical
-humorize
-humorless
-humorlessness
-humorology
-humorous
-humorously
-humorousness
-humorproof
-humorsome
-humorsomely
-humorsomeness
-humourful
-humous
-hump
-humpback
-humpbacked
-humped
-humph
-Humphrey
-humpiness
-humpless
-humpty
-humpy
-humstrum
-humulene
-humulone
-Humulus
-humus
-humuslike
-Hun
-Hunanese
-hunch
-Hunchakist
-hunchback
-hunchbacked
-hunchet
-hunchy
-hundi
-hundred
-hundredal
-hundredary
-hundreder
-hundredfold
-hundredman
-hundredpenny
-hundredth
-hundredweight
-hundredwork
-hung
-Hungaria
-Hungarian
-hungarite
-hunger
-hungerer
-hungeringly
-hungerless
-hungerly
-hungerproof
-hungerweed
-hungrify
-hungrily
-hungriness
-hungry
-hunh
-hunk
-Hunker
-hunker
-Hunkerism
-hunkerous
-hunkerousness
-hunkers
-hunkies
-Hunkpapa
-hunks
-hunky
-Hunlike
-Hunnian
-Hunnic
-Hunnican
-Hunnish
-Hunnishness
-hunt
-huntable
-huntedly
-Hunter
-Hunterian
-hunterlike
-huntilite
-hunting
-huntress
-huntsman
-huntsmanship
-huntswoman
-Hunyak
-hup
-Hupa
-hupaithric
-Hura
-hura
-hurcheon
-hurdies
-hurdis
-hurdle
-hurdleman
-hurdler
-hurdlewise
-hurds
-hure
-hureaulite
-hureek
-Hurf
-hurgila
-hurkle
-hurl
-hurlbarrow
-hurled
-hurler
-hurley
-hurleyhouse
-hurling
-hurlock
-hurly
-Huron
-huron
-Huronian
-hurr
-hurrah
-Hurri
-Hurrian
-hurricane
-hurricanize
-hurricano
-hurried
-hurriedly
-hurriedness
-hurrier
-hurrisome
-hurrock
-hurroo
-hurroosh
-hurry
-hurryingly
-hurryproof
-hursinghar
-hurst
-hurt
-hurtable
-hurted
-hurter
-hurtful
-hurtfully
-hurtfulness
-hurting
-hurtingest
-hurtle
-hurtleberry
-hurtless
-hurtlessly
-hurtlessness
-hurtlingly
-hurtsome
-hurty
-husband
-husbandable
-husbandage
-husbander
-husbandfield
-husbandhood
-husbandland
-husbandless
-husbandlike
-husbandliness
-husbandly
-husbandman
-husbandress
-husbandry
-husbandship
-huse
-hush
-hushable
-hushaby
-hushcloth
-hushedly
-husheen
-hushel
-husher
-hushful
-hushfully
-hushing
-hushingly
-hushion
-husho
-husk
-huskanaw
-husked
-huskened
-husker
-huskershredder
-huskily
-huskiness
-husking
-huskroot
-huskwort
-Husky
-husky
-huso
-huspil
-huss
-hussar
-Hussite
-Hussitism
-hussy
-hussydom
-hussyness
-husting
-hustle
-hustlecap
-hustlement
-hustler
-hut
-hutch
-hutcher
-hutchet
-Hutchinsonian
-Hutchinsonianism
-hutchinsonite
-Huterian
-huthold
-hutholder
-hutia
-hutkeeper
-hutlet
-hutment
-Hutsulian
-Hutterites
-Huttonian
-Huttonianism
-huttoning
-huttonweed
-hutukhtu
-huvelyk
-Huxleian
-Huygenian
-huzoor
-Huzvaresh
-huzz
-huzza
-huzzard
-Hwa
-Hy
-hyacinth
-Hyacinthia
-hyacinthian
-hyacinthine
-Hyacinthus
-Hyades
-hyaena
-Hyaenanche
-Hyaenarctos
-Hyaenidae
-Hyaenodon
-hyaenodont
-hyaenodontoid
-Hyakume
-hyalescence
-hyalescent
-hyaline
-hyalinization
-hyalinize
-hyalinocrystalline
-hyalinosis
-hyalite
-hyalitis
-hyaloandesite
-hyalobasalt
-hyalocrystalline
-hyalodacite
-hyalogen
-hyalograph
-hyalographer
-hyalography
-hyaloid
-hyaloiditis
-hyaloliparite
-hyalolith
-hyalomelan
-hyalomucoid
-Hyalonema
-hyalophagia
-hyalophane
-hyalophyre
-hyalopilitic
-hyaloplasm
-hyaloplasma
-hyaloplasmic
-hyalopsite
-hyalopterous
-hyalosiderite
-Hyalospongia
-hyalotekite
-hyalotype
-hyaluronic
-hyaluronidase
-Hybanthus
-Hybla
-Hyblaea
-Hyblaean
-Hyblan
-hybodont
-Hybodus
-hybosis
-hybrid
-hybridal
-hybridation
-hybridism
-hybridist
-hybridity
-hybridizable
-hybridization
-hybridize
-hybridizer
-hybridous
-hydantoate
-hydantoic
-hydantoin
-hydathode
-hydatid
-hydatidiform
-hydatidinous
-hydatidocele
-hydatiform
-hydatigenous
-Hydatina
-hydatogenesis
-hydatogenic
-hydatogenous
-hydatoid
-hydatomorphic
-hydatomorphism
-hydatopneumatic
-hydatopneumatolytic
-hydatopyrogenic
-hydatoscopy
-Hydnaceae
-hydnaceous
-hydnocarpate
-hydnocarpic
-Hydnocarpus
-hydnoid
-Hydnora
-Hydnoraceae
-hydnoraceous
-Hydnum
-Hydra
-hydracetin
-Hydrachna
-hydrachnid
-Hydrachnidae
-hydracid
-hydracoral
-hydracrylate
-hydracrylic
-Hydractinia
-hydractinian
-Hydradephaga
-hydradephagan
-hydradephagous
-hydragogue
-hydragogy
-hydramine
-hydramnion
-hydramnios
-Hydrangea
-Hydrangeaceae
-hydrangeaceous
-hydrant
-hydranth
-hydrarch
-hydrargillite
-hydrargyrate
-hydrargyria
-hydrargyriasis
-hydrargyric
-hydrargyrism
-hydrargyrosis
-hydrargyrum
-hydrarthrosis
-hydrarthrus
-hydrastine
-Hydrastis
-hydrate
-hydrated
-hydration
-hydrator
-hydratropic
-hydraucone
-hydraulic
-hydraulically
-hydraulician
-hydraulicity
-hydraulicked
-hydraulicon
-hydraulics
-hydraulist
-hydraulus
-hydrazide
-hydrazidine
-hydrazimethylene
-hydrazine
-hydrazino
-hydrazo
-hydrazoate
-hydrazobenzene
-hydrazoic
-hydrazone
-hydrazyl
-hydremia
-hydremic
-hydrencephalocele
-hydrencephaloid
-hydrencephalus
-hydria
-hydriatric
-hydriatrist
-hydriatry
-hydric
-hydrically
-Hydrid
-hydride
-hydriform
-hydrindene
-hydriodate
-hydriodic
-hydriodide
-hydriotaphia
-Hydriote
-hydro
-hydroa
-hydroadipsia
-hydroaeric
-hydroalcoholic
-hydroaromatic
-hydroatmospheric
-hydroaviation
-hydrobarometer
-Hydrobates
-Hydrobatidae
-hydrobenzoin
-hydrobilirubin
-hydrobiological
-hydrobiologist
-hydrobiology
-hydrobiosis
-hydrobiplane
-hydrobomb
-hydroboracite
-hydroborofluoric
-hydrobranchiate
-hydrobromate
-hydrobromic
-hydrobromide
-hydrocarbide
-hydrocarbon
-hydrocarbonaceous
-hydrocarbonate
-hydrocarbonic
-hydrocarbonous
-hydrocarbostyril
-hydrocardia
-Hydrocaryaceae
-hydrocaryaceous
-hydrocatalysis
-hydrocauline
-hydrocaulus
-hydrocele
-hydrocellulose
-hydrocephalic
-hydrocephalocele
-hydrocephaloid
-hydrocephalous
-hydrocephalus
-hydrocephaly
-hydroceramic
-hydrocerussite
-Hydrocharidaceae
-hydrocharidaceous
-Hydrocharis
-Hydrocharitaceae
-hydrocharitaceous
-Hydrochelidon
-hydrochemical
-hydrochemistry
-hydrochlorate
-hydrochlorauric
-hydrochloric
-hydrochloride
-hydrochlorplatinic
-hydrochlorplatinous
-Hydrochoerus
-hydrocholecystis
-hydrocinchonine
-hydrocinnamic
-hydrocirsocele
-hydrocladium
-hydroclastic
-Hydrocleis
-hydroclimate
-hydrocobalticyanic
-hydrocoele
-hydrocollidine
-hydroconion
-Hydrocorallia
-Hydrocorallinae
-hydrocoralline
-Hydrocores
-Hydrocorisae
-hydrocorisan
-hydrocotarnine
-Hydrocotyle
-hydrocoumaric
-hydrocupreine
-hydrocyanate
-hydrocyanic
-hydrocyanide
-hydrocycle
-hydrocyclic
-hydrocyclist
-Hydrocyon
-hydrocyst
-hydrocystic
-Hydrodamalidae
-Hydrodamalis
-Hydrodictyaceae
-Hydrodictyon
-hydrodrome
-Hydrodromica
-hydrodromican
-hydrodynamic
-hydrodynamical
-hydrodynamics
-hydrodynamometer
-hydroeconomics
-hydroelectric
-hydroelectricity
-hydroelectrization
-hydroergotinine
-hydroextract
-hydroextractor
-hydroferricyanic
-hydroferrocyanate
-hydroferrocyanic
-hydrofluate
-hydrofluoboric
-hydrofluoric
-hydrofluorid
-hydrofluoride
-hydrofluosilicate
-hydrofluosilicic
-hydrofluozirconic
-hydrofoil
-hydroforming
-hydrofranklinite
-hydrofuge
-hydrogalvanic
-hydrogel
-hydrogen
-hydrogenase
-hydrogenate
-hydrogenation
-hydrogenator
-hydrogenic
-hydrogenide
-hydrogenium
-hydrogenization
-hydrogenize
-hydrogenolysis
-Hydrogenomonas
-hydrogenous
-hydrogeological
-hydrogeology
-hydroglider
-hydrognosy
-hydrogode
-hydrograph
-hydrographer
-hydrographic
-hydrographical
-hydrographically
-hydrography
-hydrogymnastics
-hydrohalide
-hydrohematite
-hydrohemothorax
-hydroid
-Hydroida
-Hydroidea
-hydroidean
-hydroiodic
-hydrokinetic
-hydrokinetical
-hydrokinetics
-hydrol
-hydrolase
-hydrolatry
-Hydrolea
-Hydroleaceae
-hydrolize
-hydrologic
-hydrological
-hydrologically
-hydrologist
-hydrology
-hydrolysis
-hydrolyst
-hydrolyte
-hydrolytic
-hydrolyzable
-hydrolyzate
-hydrolyzation
-hydrolyze
-hydromagnesite
-hydromancer
-hydromancy
-hydromania
-hydromaniac
-hydromantic
-hydromantical
-hydromantically
-hydrome
-hydromechanical
-hydromechanics
-hydromedusa
-Hydromedusae
-hydromedusan
-hydromedusoid
-hydromel
-hydromeningitis
-hydromeningocele
-hydrometallurgical
-hydrometallurgically
-hydrometallurgy
-hydrometamorphism
-hydrometeor
-hydrometeorological
-hydrometeorology
-hydrometer
-hydrometra
-hydrometric
-hydrometrical
-hydrometrid
-Hydrometridae
-hydrometry
-hydromica
-hydromicaceous
-hydromonoplane
-hydromorph
-hydromorphic
-hydromorphous
-hydromorphy
-hydromotor
-hydromyelia
-hydromyelocele
-hydromyoma
-Hydromys
-hydrone
-hydronegative
-hydronephelite
-hydronephrosis
-hydronephrotic
-hydronitric
-hydronitroprussic
-hydronitrous
-hydronium
-hydroparacoumaric
-Hydroparastatae
-hydropath
-hydropathic
-hydropathical
-hydropathist
-hydropathy
-hydropericarditis
-hydropericardium
-hydroperiod
-hydroperitoneum
-hydroperitonitis
-hydroperoxide
-hydrophane
-hydrophanous
-hydrophid
-Hydrophidae
-hydrophil
-hydrophile
-hydrophilic
-hydrophilid
-Hydrophilidae
-hydrophilism
-hydrophilite
-hydrophiloid
-hydrophilous
-hydrophily
-Hydrophinae
-Hydrophis
-hydrophobe
-hydrophobia
-hydrophobic
-hydrophobical
-hydrophobist
-hydrophobophobia
-hydrophobous
-hydrophoby
-hydrophoid
-hydrophone
-Hydrophora
-hydrophoran
-hydrophore
-hydrophoria
-hydrophorous
-hydrophthalmia
-hydrophthalmos
-hydrophthalmus
-hydrophylacium
-hydrophyll
-Hydrophyllaceae
-hydrophyllaceous
-hydrophylliaceous
-hydrophyllium
-Hydrophyllum
-hydrophysometra
-hydrophyte
-hydrophytic
-hydrophytism
-hydrophyton
-hydrophytous
-hydropic
-hydropical
-hydropically
-hydropigenous
-hydroplane
-hydroplanula
-hydroplatinocyanic
-hydroplutonic
-hydropneumatic
-hydropneumatosis
-hydropneumopericardium
-hydropneumothorax
-hydropolyp
-hydroponic
-hydroponicist
-hydroponics
-hydroponist
-hydropositive
-hydropot
-Hydropotes
-hydropropulsion
-hydrops
-hydropsy
-Hydropterideae
-hydroptic
-hydropult
-hydropultic
-hydroquinine
-hydroquinol
-hydroquinoline
-hydroquinone
-hydrorachis
-hydrorhiza
-hydrorhizal
-hydrorrhachis
-hydrorrhachitis
-hydrorrhea
-hydrorrhoea
-hydrorubber
-hydrosalpinx
-hydrosalt
-hydrosarcocele
-hydroscope
-hydroscopic
-hydroscopical
-hydroscopicity
-hydroscopist
-hydroselenic
-hydroselenide
-hydroselenuret
-hydroseparation
-hydrosilicate
-hydrosilicon
-hydrosol
-hydrosomal
-hydrosomatous
-hydrosome
-hydrosorbic
-hydrosphere
-hydrospire
-hydrospiric
-hydrostat
-hydrostatic
-hydrostatical
-hydrostatically
-hydrostatician
-hydrostatics
-hydrostome
-hydrosulphate
-hydrosulphide
-hydrosulphite
-hydrosulphocyanic
-hydrosulphurated
-hydrosulphuret
-hydrosulphureted
-hydrosulphuric
-hydrosulphurous
-hydrosulphuryl
-hydrotachymeter
-hydrotactic
-hydrotalcite
-hydrotasimeter
-hydrotaxis
-hydrotechnic
-hydrotechnical
-hydrotechnologist
-hydrotechny
-hydroterpene
-hydrotheca
-hydrothecal
-hydrotherapeutic
-hydrotherapeutics
-hydrotherapy
-hydrothermal
-hydrothoracic
-hydrothorax
-hydrotic
-hydrotical
-hydrotimeter
-hydrotimetric
-hydrotimetry
-hydrotomy
-hydrotropic
-hydrotropism
-hydroturbine
-hydrotype
-hydrous
-hydrovane
-hydroxamic
-hydroxamino
-hydroxide
-hydroximic
-hydroxy
-hydroxyacetic
-hydroxyanthraquinone
-hydroxybutyricacid
-hydroxyketone
-hydroxyl
-hydroxylactone
-hydroxylamine
-hydroxylate
-hydroxylation
-hydroxylic
-hydroxylization
-hydroxylize
-hydrozincite
-Hydrozoa
-hydrozoal
-hydrozoan
-hydrozoic
-hydrozoon
-hydrula
-Hydruntine
-Hydrurus
-Hydrus
-hydurilate
-hydurilic
-hyena
-hyenadog
-hyenanchin
-hyenic
-hyeniform
-hyenine
-hyenoid
-hyetal
-hyetograph
-hyetographic
-hyetographical
-hyetographically
-hyetography
-hyetological
-hyetology
-hyetometer
-hyetometrograph
-Hygeia
-Hygeian
-hygeiolatry
-hygeist
-hygeistic
-hygeology
-hygiantic
-hygiantics
-hygiastic
-hygiastics
-hygieist
-hygienal
-hygiene
-hygienic
-hygienical
-hygienically
-hygienics
-hygienist
-hygienization
-hygienize
-hygiologist
-hygiology
-hygric
-hygrine
-hygroblepharic
-hygrodeik
-hygroexpansivity
-hygrograph
-hygrology
-hygroma
-hygromatous
-hygrometer
-hygrometric
-hygrometrical
-hygrometrically
-hygrometry
-hygrophaneity
-hygrophanous
-hygrophilous
-hygrophobia
-hygrophthalmic
-hygrophyte
-hygrophytic
-hygroplasm
-hygroplasma
-hygroscope
-hygroscopic
-hygroscopical
-hygroscopically
-hygroscopicity
-hygroscopy
-hygrostat
-hygrostatics
-hygrostomia
-hygrothermal
-hygrothermograph
-hying
-hyke
-Hyla
-hylactic
-hylactism
-hylarchic
-hylarchical
-hyle
-hyleg
-hylegiacal
-hylic
-hylicism
-hylicist
-Hylidae
-hylism
-hylist
-Hyllus
-Hylobates
-hylobatian
-hylobatic
-hylobatine
-Hylocereus
-Hylocichla
-Hylocomium
-Hylodes
-hylogenesis
-hylogeny
-hyloid
-hylology
-hylomorphic
-hylomorphical
-hylomorphism
-hylomorphist
-hylomorphous
-Hylomys
-hylopathism
-hylopathist
-hylopathy
-hylophagous
-hylotheism
-hylotheist
-hylotheistic
-hylotheistical
-hylotomous
-hylozoic
-hylozoism
-hylozoist
-hylozoistic
-hylozoistically
-hymen
-Hymenaea
-Hymenaeus
-Hymenaic
-hymenal
-hymeneal
-hymeneally
-hymeneals
-hymenean
-hymenial
-hymenic
-hymenicolar
-hymeniferous
-hymeniophore
-hymenium
-Hymenocallis
-Hymenochaete
-Hymenogaster
-Hymenogastraceae
-hymenogeny
-hymenoid
-Hymenolepis
-hymenomycetal
-hymenomycete
-Hymenomycetes
-hymenomycetoid
-hymenomycetous
-hymenophore
-hymenophorum
-Hymenophyllaceae
-hymenophyllaceous
-Hymenophyllites
-Hymenophyllum
-hymenopter
-Hymenoptera
-hymenopteran
-hymenopterist
-hymenopterological
-hymenopterologist
-hymenopterology
-hymenopteron
-hymenopterous
-hymenotomy
-Hymettian
-Hymettic
-hymn
-hymnal
-hymnarium
-hymnary
-hymnbook
-hymner
-hymnic
-hymnist
-hymnless
-hymnlike
-hymnode
-hymnodical
-hymnodist
-hymnody
-hymnographer
-hymnography
-hymnologic
-hymnological
-hymnologically
-hymnologist
-hymnology
-hymnwise
-hynde
-hyne
-hyobranchial
-hyocholalic
-hyocholic
-hyoepiglottic
-hyoepiglottidean
-hyoglossal
-hyoglossus
-hyoglycocholic
-hyoid
-hyoidal
-hyoidan
-hyoideal
-hyoidean
-hyoides
-Hyolithes
-hyolithid
-Hyolithidae
-hyolithoid
-hyomandibula
-hyomandibular
-hyomental
-hyoplastral
-hyoplastron
-hyoscapular
-hyoscine
-hyoscyamine
-Hyoscyamus
-hyosternal
-hyosternum
-hyostylic
-hyostyly
-hyothere
-Hyotherium
-hyothyreoid
-hyothyroid
-hyp
-hypabyssal
-hypaethral
-hypaethron
-hypaethros
-hypaethrum
-hypalgesia
-hypalgia
-hypalgic
-hypallactic
-hypallage
-hypanthial
-hypanthium
-hypantrum
-Hypapante
-hypapophysial
-hypapophysis
-hyparterial
-hypaspist
-hypate
-hypaton
-hypautomorphic
-hypaxial
-Hypenantron
-hyper
-hyperabelian
-hyperabsorption
-hyperaccurate
-hyperacid
-hyperacidaminuria
-hyperacidity
-hyperacoustics
-hyperaction
-hyperactive
-hyperactivity
-hyperacuity
-hyperacusia
-hyperacusis
-hyperacute
-hyperacuteness
-hyperadenosis
-hyperadiposis
-hyperadiposity
-hyperadrenalemia
-hyperaeolism
-hyperalbuminosis
-hyperalgebra
-hyperalgesia
-hyperalgesic
-hyperalgesis
-hyperalgetic
-hyperalimentation
-hyperalkalinity
-hyperaltruism
-hyperaminoacidemia
-hyperanabolic
-hyperanarchy
-hyperangelical
-hyperaphia
-hyperaphic
-hyperapophyseal
-hyperapophysial
-hyperapophysis
-hyperarchaeological
-hyperarchepiscopal
-hyperazotemia
-hyperbarbarous
-hyperbatic
-hyperbatically
-hyperbaton
-hyperbola
-hyperbolaeon
-hyperbole
-hyperbolic
-hyperbolically
-hyperbolicly
-hyperbolism
-hyperbolize
-hyperboloid
-hyperboloidal
-hyperboreal
-Hyperborean
-hyperborean
-hyperbrachycephal
-hyperbrachycephalic
-hyperbrachycephaly
-hyperbrachycranial
-hyperbrachyskelic
-hyperbranchia
-hyperbrutal
-hyperbulia
-hypercalcemia
-hypercarbamidemia
-hypercarbureted
-hypercarburetted
-hypercarnal
-hypercatalectic
-hypercatalexis
-hypercatharsis
-hypercathartic
-hypercathexis
-hypercenosis
-hyperchamaerrhine
-hyperchlorhydria
-hyperchloric
-hypercholesterinemia
-hypercholesterolemia
-hypercholia
-hypercivilization
-hypercivilized
-hyperclassical
-hyperclimax
-hypercoagulability
-hypercoagulable
-hypercomplex
-hypercomposite
-hyperconcentration
-hypercone
-hyperconfident
-hyperconformist
-hyperconscientious
-hyperconscientiousness
-hyperconscious
-hyperconsciousness
-hyperconservatism
-hyperconstitutional
-hypercoracoid
-hypercorrect
-hypercorrection
-hypercorrectness
-hypercosmic
-hypercreaturely
-hypercritic
-hypercritical
-hypercritically
-hypercriticism
-hypercriticize
-hypercryalgesia
-hypercube
-hypercyanotic
-hypercycle
-hypercylinder
-hyperdactyl
-hyperdactylia
-hyperdactyly
-hyperdeify
-hyperdelicacy
-hyperdelicate
-hyperdemocracy
-hyperdemocratic
-hyperdeterminant
-hyperdiabolical
-hyperdialectism
-hyperdiapason
-hyperdiapente
-hyperdiastole
-hyperdiatessaron
-hyperdiazeuxis
-hyperdicrotic
-hyperdicrotism
-hyperdicrotous
-hyperdimensional
-hyperdimensionality
-hyperdissyllable
-hyperdistention
-hyperditone
-hyperdivision
-hyperdolichocephal
-hyperdolichocephalic
-hyperdolichocephaly
-hyperdolichocranial
-hyperdoricism
-hyperdulia
-hyperdulic
-hyperdulical
-hyperelegant
-hyperelliptic
-hyperemesis
-hyperemetic
-hyperemia
-hyperemic
-hyperemotivity
-hyperemphasize
-hyperenthusiasm
-hypereosinophilia
-hyperephidrosis
-hyperequatorial
-hypererethism
-hyperessence
-hyperesthesia
-hyperesthetic
-hyperethical
-hypereuryprosopic
-hypereutectic
-hypereutectoid
-hyperexaltation
-hyperexcitability
-hyperexcitable
-hyperexcitement
-hyperexcursive
-hyperexophoria
-hyperextend
-hyperextension
-hyperfastidious
-hyperfederalist
-hyperfine
-hyperflexion
-hyperfocal
-hyperfunction
-hyperfunctional
-hyperfunctioning
-hypergalactia
-hypergamous
-hypergamy
-hypergenesis
-hypergenetic
-hypergeometric
-hypergeometrical
-hypergeometry
-hypergeusia
-hypergeustia
-hyperglycemia
-hyperglycemic
-hyperglycorrhachia
-hyperglycosuria
-hypergoddess
-hypergol
-hypergolic
-Hypergon
-hypergrammatical
-hyperhedonia
-hyperhemoglobinemia
-hyperhilarious
-hyperhypocrisy
-Hypericaceae
-hypericaceous
-Hypericales
-hypericin
-hypericism
-Hypericum
-hypericum
-hyperidealistic
-hyperideation
-hyperimmune
-hyperimmunity
-hyperimmunization
-hyperimmunize
-hyperingenuity
-hyperinosis
-hyperinotic
-hyperinsulinization
-hyperinsulinize
-hyperintellectual
-hyperintelligence
-hyperinvolution
-hyperirritability
-hyperirritable
-hyperisotonic
-hyperite
-hyperkeratosis
-hyperkinesia
-hyperkinesis
-hyperkinetic
-hyperlactation
-hyperleptoprosopic
-hyperleucocytosis
-hyperlipemia
-hyperlipoidemia
-hyperlithuria
-hyperlogical
-hyperlustrous
-hypermagical
-hypermakroskelic
-hypermedication
-hypermenorrhea
-hypermetabolism
-hypermetamorphic
-hypermetamorphism
-hypermetamorphosis
-hypermetamorphotic
-hypermetaphorical
-hypermetaphysical
-hypermetaplasia
-hypermeter
-hypermetric
-hypermetrical
-hypermetron
-hypermetrope
-hypermetropia
-hypermetropic
-hypermetropical
-hypermetropy
-hypermiraculous
-hypermixolydian
-hypermnesia
-hypermnesic
-hypermnesis
-hypermnestic
-hypermodest
-hypermonosyllable
-hypermoral
-hypermorph
-hypermorphism
-hypermorphosis
-hypermotile
-hypermotility
-hypermyotonia
-hypermyotrophy
-hypermyriorama
-hypermystical
-hypernatural
-hypernephroma
-hyperneuria
-hyperneurotic
-hypernic
-hypernitrogenous
-hypernomian
-hypernomic
-hypernormal
-hypernote
-hypernutrition
-Hyperoartia
-hyperoartian
-hyperobtrusive
-hyperodontogeny
-Hyperoodon
-hyperoon
-hyperope
-hyperopia
-hyperopic
-hyperorganic
-hyperorthognathic
-hyperorthognathous
-hyperorthognathy
-hyperosmia
-hyperosmic
-hyperostosis
-hyperostotic
-hyperothodox
-hyperothodoxy
-Hyperotreta
-hyperotretan
-Hyperotreti
-hyperotretous
-hyperoxidation
-hyperoxide
-hyperoxygenate
-hyperoxygenation
-hyperoxygenize
-hyperpanegyric
-hyperparasite
-hyperparasitic
-hyperparasitism
-hyperparasitize
-hyperparoxysm
-hyperpathetic
-hyperpatriotic
-hyperpencil
-hyperpepsinia
-hyperper
-hyperperistalsis
-hyperperistaltic
-hyperpersonal
-hyperphalangeal
-hyperphalangism
-hyperpharyngeal
-hyperphenomena
-hyperphoria
-hyperphoric
-hyperphosphorescence
-hyperphysical
-hyperphysically
-hyperphysics
-hyperpiesia
-hyperpiesis
-hyperpietic
-hyperpietist
-hyperpigmentation
-hyperpigmented
-hyperpinealism
-hyperpituitarism
-hyperplagiarism
-hyperplane
-hyperplasia
-hyperplasic
-hyperplastic
-hyperplatyrrhine
-hyperploid
-hyperploidy
-hyperpnea
-hyperpnoea
-hyperpolysyllabic
-hyperpredator
-hyperprism
-hyperproduction
-hyperprognathous
-hyperprophetical
-hyperprosexia
-hyperpulmonary
-hyperpure
-hyperpurist
-hyperpyramid
-hyperpyretic
-hyperpyrexia
-hyperpyrexial
-hyperquadric
-hyperrational
-hyperreactive
-hyperrealize
-hyperresonance
-hyperresonant
-hyperreverential
-hyperrhythmical
-hyperridiculous
-hyperritualism
-hypersacerdotal
-hypersaintly
-hypersalivation
-hypersceptical
-hyperscholastic
-hyperscrupulosity
-hypersecretion
-hypersensibility
-hypersensitive
-hypersensitiveness
-hypersensitivity
-hypersensitization
-hypersensitize
-hypersensual
-hypersensualism
-hypersensuous
-hypersentimental
-hypersolid
-hypersomnia
-hypersonic
-hypersophisticated
-hyperspace
-hyperspatial
-hyperspeculative
-hypersphere
-hyperspherical
-hyperspiritualizing
-hypersplenia
-hypersplenism
-hypersthene
-hypersthenia
-hypersthenic
-hypersthenite
-hyperstoic
-hyperstrophic
-hypersubtlety
-hypersuggestibility
-hypersuperlative
-hypersurface
-hypersusceptibility
-hypersusceptible
-hypersystole
-hypersystolic
-hypertechnical
-hypertelic
-hypertely
-hypertense
-hypertensin
-hypertension
-hypertensive
-hyperterrestrial
-hypertetrahedron
-hyperthermal
-hyperthermalgesia
-hyperthermesthesia
-hyperthermia
-hyperthermic
-hyperthermy
-hyperthesis
-hyperthetic
-hyperthetical
-hyperthyreosis
-hyperthyroid
-hyperthyroidism
-hyperthyroidization
-hyperthyroidize
-hypertonia
-hypertonic
-hypertonicity
-hypertonus
-hypertorrid
-hypertoxic
-hypertoxicity
-hypertragical
-hypertragically
-hypertranscendent
-hypertrichosis
-hypertridimensional
-hypertrophic
-hypertrophied
-hypertrophous
-hypertrophy
-hypertropia
-hypertropical
-hypertype
-hypertypic
-hypertypical
-hyperurbanism
-hyperuresis
-hypervascular
-hypervascularity
-hypervenosity
-hyperventilate
-hyperventilation
-hypervigilant
-hyperviscosity
-hypervitalization
-hypervitalize
-hypervitaminosis
-hypervolume
-hyperwrought
-hypesthesia
-hypesthesic
-hypethral
-hypha
-Hyphaene
-hyphaeresis
-hyphal
-hyphedonia
-hyphema
-hyphen
-hyphenate
-hyphenated
-hyphenation
-hyphenic
-hyphenism
-hyphenization
-hyphenize
-hypho
-hyphodrome
-Hyphomycetales
-hyphomycete
-Hyphomycetes
-hyphomycetic
-hyphomycetous
-hyphomycosis
-hypidiomorphic
-hypidiomorphically
-hypinosis
-hypinotic
-Hypnaceae
-hypnaceous
-hypnagogic
-hypnesthesis
-hypnesthetic
-hypnoanalysis
-hypnobate
-hypnocyst
-hypnody
-hypnoetic
-hypnogenesis
-hypnogenetic
-hypnoid
-hypnoidal
-hypnoidization
-hypnoidize
-hypnologic
-hypnological
-hypnologist
-hypnology
-hypnone
-hypnophobia
-hypnophobic
-hypnophoby
-hypnopompic
-Hypnos
-hypnoses
-hypnosis
-hypnosperm
-hypnosporangium
-hypnospore
-hypnosporic
-hypnotherapy
-hypnotic
-hypnotically
-hypnotism
-hypnotist
-hypnotistic
-hypnotizability
-hypnotizable
-hypnotization
-hypnotize
-hypnotizer
-hypnotoid
-hypnotoxin
-Hypnum
-hypo
-hypoacid
-hypoacidity
-hypoactive
-hypoactivity
-hypoadenia
-hypoadrenia
-hypoaeolian
-hypoalimentation
-hypoalkaline
-hypoalkalinity
-hypoaminoacidemia
-hypoantimonate
-hypoazoturia
-hypobasal
-hypobatholithic
-hypobenthonic
-hypobenthos
-hypoblast
-hypoblastic
-hypobole
-hypobranchial
-hypobranchiate
-hypobromite
-hypobromous
-hypobulia
-hypobulic
-hypocalcemia
-hypocarp
-hypocarpium
-hypocarpogean
-hypocatharsis
-hypocathartic
-hypocathexis
-hypocaust
-hypocentrum
-hypocephalus
-Hypochaeris
-hypochil
-hypochilium
-hypochlorhydria
-hypochlorhydric
-hypochloric
-hypochlorite
-hypochlorous
-hypochloruria
-Hypochnaceae
-hypochnose
-Hypochnus
-hypochondria
-hypochondriac
-hypochondriacal
-hypochondriacally
-hypochondriacism
-hypochondrial
-hypochondriasis
-hypochondriast
-hypochondrium
-hypochondry
-hypochordal
-hypochromia
-hypochrosis
-hypochylia
-hypocist
-hypocleidian
-hypocleidium
-hypocoelom
-hypocondylar
-hypocone
-hypoconid
-hypoconule
-hypoconulid
-hypocoracoid
-hypocorism
-hypocoristic
-hypocoristical
-hypocoristically
-hypocotyl
-hypocotyleal
-hypocotyledonary
-hypocotyledonous
-hypocotylous
-hypocrater
-hypocrateriform
-hypocraterimorphous
-Hypocreaceae
-hypocreaceous
-Hypocreales
-hypocrisis
-hypocrisy
-hypocrital
-hypocrite
-hypocritic
-hypocritical
-hypocritically
-hypocrize
-hypocrystalline
-hypocycloid
-hypocycloidal
-hypocystotomy
-hypocytosis
-hypodactylum
-hypoderm
-hypoderma
-hypodermal
-hypodermatic
-hypodermatically
-hypodermatoclysis
-hypodermatomy
-Hypodermella
-hypodermic
-hypodermically
-hypodermis
-hypodermoclysis
-hypodermosis
-hypodermous
-hypodiapason
-hypodiapente
-hypodiastole
-hypodiatessaron
-hypodiazeuxis
-hypodicrotic
-hypodicrotous
-hypoditone
-hypodorian
-hypodynamia
-hypodynamic
-hypoeliminator
-hypoendocrinism
-hypoeosinophilia
-hypoeutectic
-hypoeutectoid
-hypofunction
-hypogastric
-hypogastrium
-hypogastrocele
-hypogeal
-hypogean
-hypogee
-hypogeic
-hypogeiody
-hypogene
-hypogenesis
-hypogenetic
-hypogenic
-hypogenous
-hypogeocarpous
-hypogeous
-hypogeum
-hypogeusia
-hypoglobulia
-hypoglossal
-hypoglossitis
-hypoglossus
-hypoglottis
-hypoglycemia
-hypoglycemic
-hypognathism
-hypognathous
-hypogonation
-hypogynic
-hypogynium
-hypogynous
-hypogyny
-hypohalous
-hypohemia
-hypohidrosis
-Hypohippus
-hypohyal
-hypohyaline
-hypoid
-hypoiodite
-hypoiodous
-hypoionian
-hypoischium
-hypoisotonic
-hypokeimenometry
-hypokinesia
-hypokinesis
-hypokinetic
-hypokoristikon
-hypolemniscus
-hypoleptically
-hypoleucocytosis
-hypolimnion
-hypolocrian
-hypolydian
-hypomania
-hypomanic
-hypomelancholia
-hypomeral
-hypomere
-hypomeron
-hypometropia
-hypomixolydian
-hypomnematic
-hypomnesis
-hypomochlion
-hypomorph
-hypomotility
-hypomyotonia
-hyponastic
-hyponastically
-hyponasty
-hyponeuria
-hyponitric
-hyponitrite
-hyponitrous
-hyponoetic
-hyponoia
-hyponome
-hyponomic
-hyponychial
-hyponychium
-hyponym
-hyponymic
-hyponymous
-Hypoparia
-hypopepsia
-hypopepsinia
-hypopepsy
-hypopetalous
-hypopetaly
-hypophalangism
-hypophamin
-hypophamine
-hypophare
-hypopharyngeal
-hypopharynx
-hypophloeodal
-hypophloeodic
-hypophloeous
-hypophonic
-hypophonous
-hypophora
-hypophoria
-hypophosphate
-hypophosphite
-hypophosphoric
-hypophosphorous
-hypophrenia
-hypophrenic
-hypophrenosis
-hypophrygian
-hypophyge
-hypophyll
-hypophyllium
-hypophyllous
-hypophyllum
-hypophyse
-hypophyseal
-hypophysectomize
-hypophysectomy
-hypophyseoprivic
-hypophyseoprivous
-hypophysial
-hypophysical
-hypophysics
-hypophysis
-hypopial
-hypopinealism
-hypopituitarism
-Hypopitys
-hypoplankton
-hypoplanktonic
-hypoplasia
-hypoplastic
-hypoplastral
-hypoplastron
-hypoplasty
-hypoplasy
-hypoploid
-hypoploidy
-hypopodium
-hypopraxia
-hypoprosexia
-hypopselaphesia
-hypopteral
-hypopteron
-hypoptilar
-hypoptilum
-hypoptosis
-hypoptyalism
-hypopus
-hypopygial
-hypopygidium
-hypopygium
-hypopyon
-hyporadial
-hyporadiolus
-hyporadius
-hyporchema
-hyporchematic
-hyporcheme
-hyporchesis
-hyporhachidian
-hyporhachis
-hyporhined
-hyporit
-hyporrhythmic
-hyposcenium
-hyposcleral
-hyposcope
-hyposecretion
-hyposensitization
-hyposensitize
-hyposkeletal
-hyposmia
-hypospadiac
-hypospadias
-hyposphene
-hypospray
-hypostase
-hypostasis
-hypostasization
-hypostasize
-hypostasy
-hypostatic
-hypostatical
-hypostatically
-hypostatization
-hypostatize
-hyposternal
-hyposternum
-hyposthenia
-hyposthenic
-hyposthenuria
-hypostigma
-hypostilbite
-hypostoma
-Hypostomata
-hypostomatic
-hypostomatous
-hypostome
-hypostomial
-Hypostomides
-hypostomous
-hypostrophe
-hypostyle
-hypostypsis
-hypostyptic
-hyposulphite
-hyposulphurous
-hyposuprarenalism
-hyposyllogistic
-hyposynaphe
-hyposynergia
-hyposystole
-hypotactic
-hypotarsal
-hypotarsus
-hypotaxia
-hypotaxic
-hypotaxis
-hypotension
-hypotensive
-hypotensor
-hypotenusal
-hypotenuse
-hypothalamic
-hypothalamus
-hypothalline
-hypothallus
-hypothec
-hypotheca
-hypothecal
-hypothecary
-hypothecate
-hypothecation
-hypothecative
-hypothecator
-hypothecatory
-hypothecial
-hypothecium
-hypothenal
-hypothenar
-Hypotheria
-hypothermal
-hypothermia
-hypothermic
-hypothermy
-hypotheses
-hypothesis
-hypothesist
-hypothesize
-hypothesizer
-hypothetic
-hypothetical
-hypothetically
-hypothetics
-hypothetist
-hypothetize
-hypothetizer
-hypothyreosis
-hypothyroid
-hypothyroidism
-hypotonia
-hypotonic
-hypotonicity
-hypotonus
-hypotony
-hypotoxic
-hypotoxicity
-hypotrachelium
-Hypotremata
-hypotrich
-Hypotricha
-Hypotrichida
-hypotrichosis
-hypotrichous
-hypotrochanteric
-hypotrochoid
-hypotrochoidal
-hypotrophic
-hypotrophy
-hypotympanic
-hypotypic
-hypotypical
-hypotyposis
-hypovalve
-hypovanadate
-hypovanadic
-hypovanadious
-hypovanadous
-hypovitaminosis
-hypoxanthic
-hypoxanthine
-Hypoxis
-Hypoxylon
-hypozeugma
-hypozeuxis
-Hypozoa
-hypozoan
-hypozoic
-hyppish
-hypsibrachycephalic
-hypsibrachycephalism
-hypsibrachycephaly
-hypsicephalic
-hypsicephaly
-hypsidolichocephalic
-hypsidolichocephalism
-hypsidolichocephaly
-hypsiliform
-hypsiloid
-Hypsilophodon
-hypsilophodont
-hypsilophodontid
-Hypsilophodontidae
-hypsilophodontoid
-Hypsiprymninae
-Hypsiprymnodontinae
-Hypsiprymnus
-Hypsistarian
-hypsistenocephalic
-hypsistenocephalism
-hypsistenocephaly
-hypsobathymetric
-hypsocephalous
-hypsochrome
-hypsochromic
-hypsochromy
-hypsodont
-hypsodontism
-hypsodonty
-hypsographic
-hypsographical
-hypsography
-hypsoisotherm
-hypsometer
-hypsometric
-hypsometrical
-hypsometrically
-hypsometrist
-hypsometry
-hypsophobia
-hypsophonous
-hypsophyll
-hypsophyllar
-hypsophyllary
-hypsophyllous
-hypsophyllum
-hypsothermometer
-hypural
-hyraces
-hyraceum
-Hyrachyus
-hyracid
-Hyracidae
-hyraciform
-Hyracina
-Hyracodon
-hyracodont
-hyracodontid
-Hyracodontidae
-hyracodontoid
-hyracoid
-Hyracoidea
-hyracoidean
-hyracothere
-hyracotherian
-Hyracotheriinae
-Hyracotherium
-hyrax
-Hyrcan
-Hyrcanian
-hyson
-hyssop
-Hyssopus
-hystazarin
-hysteralgia
-hysteralgic
-hysteranthous
-hysterectomy
-hysterelcosis
-hysteresial
-hysteresis
-hysteretic
-hysteretically
-hysteria
-hysteriac
-Hysteriales
-hysteric
-hysterical
-hysterically
-hystericky
-hysterics
-hysteriform
-hysterioid
-Hysterocarpus
-hysterocatalepsy
-hysterocele
-hysterocleisis
-hysterocrystalline
-hysterocystic
-hysterodynia
-hysterogen
-hysterogenetic
-hysterogenic
-hysterogenous
-hysterogeny
-hysteroid
-hysterolaparotomy
-hysterolith
-hysterolithiasis
-hysterology
-hysterolysis
-hysteromania
-hysterometer
-hysterometry
-hysteromorphous
-hysteromyoma
-hysteromyomectomy
-hysteron
-hysteroneurasthenia
-hysteropathy
-hysteropexia
-hysteropexy
-hysterophore
-Hysterophyta
-hysterophytal
-hysterophyte
-hysteroproterize
-hysteroptosia
-hysteroptosis
-hysterorrhaphy
-hysterorrhexis
-hysteroscope
-hysterosis
-hysterotome
-hysterotomy
-hysterotraumatism
-hystriciasis
-hystricid
-Hystricidae
-Hystricinae
-hystricine
-hystricism
-hystricismus
-hystricoid
-hystricomorph
-Hystricomorpha
-hystricomorphic
-hystricomorphous
-Hystrix
-I
-i
-Iacchic
-Iacchos
-Iacchus
-Iachimo
-iamatology
-iamb
-Iambe
-iambelegus
-iambi
-iambic
-iambically
-iambist
-iambize
-iambographer
-iambus
-Ian
-Ianthina
-ianthine
-ianthinite
-Ianus
-iao
-Iapetus
-Iapyges
-Iapygian
-Iapygii
-iatraliptic
-iatraliptics
-iatric
-iatrical
-iatrochemic
-iatrochemical
-iatrochemist
-iatrochemistry
-iatrological
-iatrology
-iatromathematical
-iatromathematician
-iatromathematics
-iatromechanical
-iatromechanist
-iatrophysical
-iatrophysicist
-iatrophysics
-iatrotechnics
-iba
-Ibad
-Ibadite
-Iban
-Ibanag
-Iberes
-Iberi
-Iberia
-Iberian
-Iberic
-Iberis
-Iberism
-iberite
-ibex
-ibices
-ibid
-Ibididae
-Ibidinae
-ibidine
-Ibidium
-Ibilao
-ibis
-ibisbill
-Ibo
-ibolium
-ibota
-Ibsenian
-Ibsenic
-Ibsenish
-Ibsenism
-Ibsenite
-Ibycter
-Ibycus
-Icacinaceae
-icacinaceous
-icaco
-Icacorea
-Icaria
-Icarian
-Icarianism
-Icarus
-ice
-iceberg
-iceblink
-iceboat
-icebone
-icebound
-icebox
-icebreaker
-icecap
-icecraft
-iced
-icefall
-icefish
-icehouse
-Iceland
-iceland
-Icelander
-Icelandian
-Icelandic
-iceleaf
-iceless
-Icelidae
-icelike
-iceman
-Iceni
-icequake
-iceroot
-Icerya
-icework
-ich
-Ichneumia
-ichneumon
-ichneumoned
-Ichneumones
-ichneumonid
-Ichneumonidae
-ichneumonidan
-Ichneumonides
-ichneumoniform
-ichneumonized
-ichneumonoid
-Ichneumonoidea
-ichneumonology
-ichneumous
-ichneutic
-ichnite
-ichnographic
-ichnographical
-ichnographically
-ichnography
-ichnolite
-ichnolithology
-ichnolitic
-ichnological
-ichnology
-ichnomancy
-icho
-ichoglan
-ichor
-ichorous
-ichorrhea
-ichorrhemia
-ichthulin
-ichthulinic
-ichthus
-ichthyal
-ichthyic
-ichthyism
-ichthyismus
-ichthyization
-ichthyized
-ichthyobatrachian
-Ichthyocephali
-ichthyocephalous
-ichthyocol
-ichthyocolla
-ichthyocoprolite
-Ichthyodea
-Ichthyodectidae
-ichthyodian
-ichthyodont
-ichthyodorulite
-ichthyofauna
-ichthyoform
-ichthyographer
-ichthyographia
-ichthyographic
-ichthyography
-ichthyoid
-ichthyoidal
-Ichthyoidea
-Ichthyol
-ichthyolatrous
-ichthyolatry
-ichthyolite
-ichthyolitic
-ichthyologic
-ichthyological
-ichthyologically
-ichthyologist
-ichthyology
-ichthyomancy
-ichthyomantic
-Ichthyomorpha
-ichthyomorphic
-ichthyomorphous
-ichthyonomy
-ichthyopaleontology
-ichthyophagan
-ichthyophagi
-ichthyophagian
-ichthyophagist
-ichthyophagize
-ichthyophagous
-ichthyophagy
-ichthyophile
-ichthyophobia
-ichthyophthalmite
-ichthyophthiriasis
-ichthyopolism
-ichthyopolist
-ichthyopsid
-Ichthyopsida
-ichthyopsidan
-Ichthyopterygia
-ichthyopterygian
-ichthyopterygium
-Ichthyornis
-Ichthyornithes
-ichthyornithic
-Ichthyornithidae
-Ichthyornithiformes
-ichthyornithoid
-ichthyosaur
-Ichthyosauria
-ichthyosaurian
-ichthyosaurid
-Ichthyosauridae
-ichthyosauroid
-Ichthyosaurus
-ichthyosis
-ichthyosism
-ichthyotic
-Ichthyotomi
-ichthyotomist
-ichthyotomous
-ichthyotomy
-ichthyotoxin
-ichthyotoxism
-ichthytaxidermy
-ichu
-icica
-icicle
-icicled
-icily
-iciness
-icing
-icon
-Iconian
-iconic
-iconical
-iconism
-iconoclasm
-iconoclast
-iconoclastic
-iconoclastically
-iconoclasticism
-iconodule
-iconodulic
-iconodulist
-iconoduly
-iconograph
-iconographer
-iconographic
-iconographical
-iconographist
-iconography
-iconolater
-iconolatrous
-iconolatry
-iconological
-iconologist
-iconology
-iconomachal
-iconomachist
-iconomachy
-iconomania
-iconomatic
-iconomatically
-iconomaticism
-iconomatography
-iconometer
-iconometric
-iconometrical
-iconometrically
-iconometry
-iconophile
-iconophilism
-iconophilist
-iconophily
-iconoplast
-iconoscope
-iconostas
-iconostasion
-iconostasis
-iconotype
-icosahedral
-Icosandria
-icosasemic
-icosian
-icositetrahedron
-icosteid
-Icosteidae
-icosteine
-Icosteus
-icotype
-icteric
-icterical
-Icteridae
-icterine
-icteritious
-icterode
-icterogenetic
-icterogenic
-icterogenous
-icterohematuria
-icteroid
-icterus
-ictic
-Ictonyx
-ictuate
-ictus
-icy
-id
-Ida
-Idaean
-Idaho
-Idahoan
-Idaic
-idalia
-Idalian
-idant
-iddat
-Iddio
-ide
-idea
-ideaed
-ideaful
-ideagenous
-ideal
-idealess
-idealism
-idealist
-idealistic
-idealistical
-idealistically
-ideality
-idealization
-idealize
-idealizer
-idealless
-ideally
-idealness
-ideamonger
-Idean
-ideate
-ideation
-ideational
-ideationally
-ideative
-ideist
-idempotent
-identic
-identical
-identicalism
-identically
-identicalness
-identifiable
-identifiableness
-identification
-identifier
-identify
-identism
-identity
-ideogenetic
-ideogenical
-ideogenous
-ideogeny
-ideoglyph
-ideogram
-ideogrammic
-ideograph
-ideographic
-ideographical
-ideographically
-ideography
-ideolatry
-ideologic
-ideological
-ideologically
-ideologist
-ideologize
-ideologue
-ideology
-ideomotion
-ideomotor
-ideophone
-ideophonetics
-ideophonous
-ideoplastia
-ideoplastic
-ideoplastics
-ideoplasty
-ideopraxist
-ides
-idgah
-idiasm
-idic
-idiobiology
-idioblast
-idioblastic
-idiochromatic
-idiochromatin
-idiochromosome
-idiocrasis
-idiocrasy
-idiocratic
-idiocratical
-idiocy
-idiocyclophanous
-idioelectric
-idioelectrical
-Idiogastra
-idiogenesis
-idiogenetic
-idiogenous
-idioglossia
-idioglottic
-idiograph
-idiographic
-idiographical
-idiohypnotism
-idiolalia
-idiolatry
-idiologism
-idiolysin
-idiom
-idiomatic
-idiomatical
-idiomatically
-idiomaticalness
-idiomelon
-idiometer
-idiomography
-idiomology
-idiomorphic
-idiomorphically
-idiomorphism
-idiomorphous
-idiomuscular
-idiopathetic
-idiopathic
-idiopathical
-idiopathically
-idiopathy
-idiophanism
-idiophanous
-idiophonic
-idioplasm
-idioplasmatic
-idioplasmic
-idiopsychological
-idiopsychology
-idioreflex
-idiorepulsive
-idioretinal
-idiorrhythmic
-Idiosepiidae
-Idiosepion
-idiosome
-idiospasm
-idiospastic
-idiostatic
-idiosyncrasy
-idiosyncratic
-idiosyncratical
-idiosyncratically
-idiot
-idiotcy
-idiothalamous
-idiothermous
-idiothermy
-idiotic
-idiotical
-idiotically
-idioticalness
-idioticon
-idiotish
-idiotism
-idiotize
-idiotropian
-idiotry
-idiotype
-idiotypic
-Idism
-Idist
-Idistic
-idite
-iditol
-idle
-idleful
-idleheaded
-idlehood
-idleman
-idlement
-idleness
-idler
-idleset
-idleship
-idlety
-idlish
-idly
-Ido
-idocrase
-Idoism
-Idoist
-Idoistic
-idol
-idola
-idolaster
-idolater
-idolatress
-idolatric
-idolatrize
-idolatrizer
-idolatrous
-idolatrously
-idolatrousness
-idolatry
-idolify
-idolism
-idolist
-idolistic
-idolization
-idolize
-idolizer
-idoloclast
-idoloclastic
-idolodulia
-idolographical
-idololatrical
-idololatry
-idolomancy
-idolomania
-idolothyte
-idolothytic
-idolous
-idolum
-Idomeneus
-idoneal
-idoneity
-idoneous
-idoneousness
-idorgan
-idosaccharic
-idose
-Idotea
-Idoteidae
-Idothea
-Idotheidae
-idrialin
-idrialine
-idrialite
-Idrisid
-Idrisite
-idryl
-Idumaean
-idyl
-idyler
-idylism
-idylist
-idylize
-idyllian
-idyllic
-idyllical
-idyllically
-idyllicism
-ie
-Ierne
-if
-ife
-iffy
-Ifugao
-Igara
-Igbira
-Igdyr
-igelstromite
-igloo
-Iglulirmiut
-ignatia
-Ignatian
-Ignatianist
-Ignatius
-ignavia
-igneoaqueous
-igneous
-ignescent
-ignicolist
-igniferous
-igniferousness
-igniform
-ignifuge
-ignify
-ignigenous
-ignipotent
-ignipuncture
-ignitability
-ignite
-igniter
-ignitibility
-ignitible
-ignition
-ignitive
-ignitor
-ignitron
-ignivomous
-ignivomousness
-ignobility
-ignoble
-ignobleness
-ignoblesse
-ignobly
-ignominious
-ignominiously
-ignominiousness
-ignominy
-ignorable
-ignoramus
-ignorance
-ignorant
-Ignorantine
-ignorantism
-ignorantist
-ignorantly
-ignorantness
-ignoration
-ignore
-ignorement
-ignorer
-ignote
-Igorot
-iguana
-Iguania
-iguanian
-iguanid
-Iguanidae
-iguaniform
-Iguanodon
-iguanodont
-Iguanodontia
-Iguanodontidae
-iguanodontoid
-Iguanodontoidea
-iguanoid
-Iguvine
-ihi
-Ihlat
-ihleite
-ihram
-iiwi
-ijma
-Ijo
-ijolite
-Ijore
-ijussite
-ikat
-Ike
-ikey
-ikeyness
-Ikhwan
-ikona
-ikra
-Ila
-ileac
-ileectomy
-ileitis
-ileocaecal
-ileocaecum
-ileocolic
-ileocolitis
-ileocolostomy
-ileocolotomy
-ileon
-ileosigmoidostomy
-ileostomy
-ileotomy
-ilesite
-ileum
-ileus
-ilex
-ilia
-Iliac
-iliac
-iliacus
-Iliad
-Iliadic
-Iliadist
-Iliadize
-iliahi
-ilial
-Ilian
-iliau
-Ilicaceae
-ilicaceous
-ilicic
-ilicin
-ilima
-iliocaudal
-iliocaudalis
-iliococcygeal
-iliococcygeus
-iliococcygian
-iliocostal
-iliocostalis
-iliodorsal
-iliofemoral
-iliohypogastric
-ilioinguinal
-ilioischiac
-ilioischiatic
-iliolumbar
-iliopectineal
-iliopelvic
-ilioperoneal
-iliopsoas
-iliopsoatic
-iliopubic
-iliosacral
-iliosciatic
-ilioscrotal
-iliospinal
-iliotibial
-iliotrochanteric
-Ilissus
-ilium
-ilk
-ilka
-ilkane
-ill
-illaborate
-illachrymable
-illachrymableness
-Illaenus
-Illano
-Illanun
-illapsable
-illapse
-illapsive
-illaqueate
-illaqueation
-illation
-illative
-illatively
-illaudable
-illaudably
-illaudation
-illaudatory
-Illecebraceae
-illecebrous
-illeck
-illegal
-illegality
-illegalize
-illegally
-illegalness
-illegibility
-illegible
-illegibleness
-illegibly
-illegitimacy
-illegitimate
-illegitimately
-illegitimateness
-illegitimation
-illegitimatize
-illeism
-illeist
-illess
-illfare
-illguide
-illiberal
-illiberalism
-illiberality
-illiberalize
-illiberally
-illiberalness
-illicit
-illicitly
-illicitness
-Illicium
-illimitability
-illimitable
-illimitableness
-illimitably
-illimitate
-illimitation
-illimited
-illimitedly
-illimitedness
-illinition
-illinium
-Illinoian
-Illinois
-Illinoisan
-Illinoisian
-Illipe
-illipene
-illiquation
-illiquid
-illiquidity
-illiquidly
-illish
-illision
-illiteracy
-illiteral
-illiterate
-illiterately
-illiterateness
-illiterature
-illium
-illness
-illocal
-illocality
-illocally
-illogic
-illogical
-illogicality
-illogically
-illogicalness
-illogician
-illogicity
-Illoricata
-illoricate
-illoricated
-illoyal
-illoyalty
-illth
-illucidate
-illucidation
-illucidative
-illude
-illudedly
-illuder
-illume
-illumer
-illuminability
-illuminable
-illuminance
-illuminant
-illuminate
-illuminated
-illuminati
-illuminating
-illuminatingly
-illumination
-illuminational
-illuminatism
-illuminatist
-illuminative
-illuminato
-illuminator
-illuminatory
-illuminatus
-illumine
-illuminee
-illuminer
-Illuminism
-illuminist
-Illuministic
-Illuminize
-illuminometer
-illuminous
-illupi
-illure
-illurement
-illusible
-illusion
-illusionable
-illusional
-illusionary
-illusioned
-illusionism
-illusionist
-illusionistic
-illusive
-illusively
-illusiveness
-illusor
-illusorily
-illusoriness
-illusory
-illustrable
-illustratable
-illustrate
-illustration
-illustrational
-illustrative
-illustratively
-illustrator
-illustratory
-illustratress
-illustre
-illustricity
-illustrious
-illustriously
-illustriousness
-illutate
-illutation
-illuvial
-illuviate
-illuviation
-illy
-Illyrian
-Illyric
-ilmenite
-ilmenitite
-ilmenorutile
-Ilocano
-Ilokano
-Iloko
-Ilongot
-ilot
-Ilpirra
-ilvaite
-Ilya
-Ilysanthes
-Ilysia
-Ilysiidae
-ilysioid
-Ima
-image
-imageable
-imageless
-imager
-imagerial
-imagerially
-imagery
-imaginability
-imaginable
-imaginableness
-imaginably
-imaginal
-imaginant
-imaginarily
-imaginariness
-imaginary
-imaginate
-imagination
-imaginational
-imaginationalism
-imaginative
-imaginatively
-imaginativeness
-imaginator
-imagine
-imaginer
-imagines
-imaginist
-imaginous
-imagism
-imagist
-imagistic
-imago
-imam
-imamah
-imamate
-imambarah
-imamic
-imamship
-Imantophyllum
-imaret
-imbalance
-imban
-imband
-imbannered
-imbarge
-imbark
-imbarn
-imbased
-imbastardize
-imbat
-imbauba
-imbe
-imbecile
-imbecilely
-imbecilic
-imbecilitate
-imbecility
-imbed
-imbellious
-imber
-imbibe
-imbiber
-imbibition
-imbibitional
-imbibitory
-imbirussu
-imbitter
-imbitterment
-imbolish
-imbondo
-imbonity
-imbordure
-imborsation
-imbosom
-imbower
-imbreathe
-imbreviate
-imbrex
-imbricate
-imbricated
-imbricately
-imbrication
-imbricative
-imbroglio
-imbrue
-imbruement
-imbrute
-imbrutement
-imbue
-imbuement
-imburse
-imbursement
-Imer
-Imerina
-Imeritian
-imi
-imidazole
-imidazolyl
-imide
-imidic
-imidogen
-iminazole
-imine
-imino
-iminohydrin
-imitability
-imitable
-imitableness
-imitancy
-imitant
-imitate
-imitatee
-imitation
-imitational
-imitationist
-imitative
-imitatively
-imitativeness
-imitator
-imitatorship
-imitatress
-imitatrix
-immaculacy
-immaculance
-immaculate
-immaculately
-immaculateness
-immalleable
-immanacle
-immanation
-immane
-immanely
-immanence
-immanency
-immaneness
-immanent
-immanental
-immanentism
-immanentist
-immanently
-Immanes
-immanifest
-immanifestness
-immanity
-immantle
-Immanuel
-immarble
-immarcescible
-immarcescibly
-immarcibleness
-immarginate
-immask
-immatchable
-immaterial
-immaterialism
-immaterialist
-immateriality
-immaterialize
-immaterially
-immaterialness
-immaterials
-immateriate
-immatriculate
-immatriculation
-immature
-immatured
-immaturely
-immatureness
-immaturity
-immeability
-immeasurability
-immeasurable
-immeasurableness
-immeasurably
-immeasured
-immechanical
-immechanically
-immediacy
-immedial
-immediate
-immediately
-immediateness
-immediatism
-immediatist
-immedicable
-immedicableness
-immedicably
-immelodious
-immember
-immemorable
-immemorial
-immemorially
-immense
-immensely
-immenseness
-immensity
-immensive
-immensurability
-immensurable
-immensurableness
-immensurate
-immerd
-immerge
-immergence
-immergent
-immerit
-immerited
-immeritorious
-immeritoriously
-immeritous
-immerse
-immersement
-immersible
-immersion
-immersionism
-immersionist
-immersive
-immethodic
-immethodical
-immethodically
-immethodicalness
-immethodize
-immetrical
-immetrically
-immetricalness
-immew
-immi
-immigrant
-immigrate
-immigration
-immigrator
-immigratory
-imminence
-imminency
-imminent
-imminently
-imminentness
-immingle
-imminution
-immiscibility
-immiscible
-immiscibly
-immission
-immit
-immitigability
-immitigable
-immitigably
-immix
-immixable
-immixture
-immobile
-immobility
-immobilization
-immobilize
-immoderacy
-immoderate
-immoderately
-immoderateness
-immoderation
-immodest
-immodestly
-immodesty
-immodulated
-immolate
-immolation
-immolator
-immoment
-immomentous
-immonastered
-immoral
-immoralism
-immoralist
-immorality
-immoralize
-immorally
-immorigerous
-immorigerousness
-immortability
-immortable
-immortal
-immortalism
-immortalist
-immortality
-immortalizable
-immortalization
-immortalize
-immortalizer
-immortally
-immortalness
-immortalship
-immortelle
-immortification
-immortified
-immotile
-immotioned
-immotive
-immound
-immovability
-immovable
-immovableness
-immovably
-immund
-immundity
-immune
-immunist
-immunity
-immunization
-immunize
-immunochemistry
-immunogen
-immunogenetic
-immunogenetics
-immunogenic
-immunogenically
-immunogenicity
-immunologic
-immunological
-immunologically
-immunologist
-immunology
-immunoreaction
-immunotoxin
-immuration
-immure
-immurement
-immusical
-immusically
-immutability
-immutable
-immutableness
-immutably
-immutation
-immute
-immutilate
-immutual
-Imogen
-Imolinda
-imonium
-imp
-impacability
-impacable
-impack
-impackment
-impact
-impacted
-impaction
-impactionize
-impactment
-impactual
-impages
-impaint
-impair
-impairable
-impairer
-impairment
-impala
-impalace
-impalatable
-impale
-impalement
-impaler
-impall
-impalm
-impalpability
-impalpable
-impalpably
-impalsy
-impaludism
-impanate
-impanation
-impanator
-impane
-impanel
-impanelment
-impapase
-impapyrate
-impar
-imparadise
-imparalleled
-imparasitic
-impardonable
-impardonably
-imparidigitate
-imparipinnate
-imparisyllabic
-imparity
-impark
-imparkation
-imparl
-imparlance
-imparsonee
-impart
-impartable
-impartance
-impartation
-imparter
-impartial
-impartialism
-impartialist
-impartiality
-impartially
-impartialness
-impartibilibly
-impartibility
-impartible
-impartibly
-imparticipable
-impartite
-impartive
-impartivity
-impartment
-impassability
-impassable
-impassableness
-impassably
-impasse
-impassibilibly
-impassibility
-impassible
-impassibleness
-impassion
-impassionable
-impassionate
-impassionately
-impassioned
-impassionedly
-impassionedness
-impassionment
-impassive
-impassively
-impassiveness
-impassivity
-impastation
-impaste
-impasto
-impasture
-impaternate
-impatible
-impatience
-impatiency
-Impatiens
-impatient
-Impatientaceae
-impatientaceous
-impatiently
-impatientness
-impatronize
-impave
-impavid
-impavidity
-impavidly
-impawn
-impayable
-impeach
-impeachability
-impeachable
-impeacher
-impeachment
-impearl
-impeccability
-impeccable
-impeccably
-impeccance
-impeccancy
-impeccant
-impectinate
-impecuniary
-impecuniosity
-impecunious
-impecuniously
-impecuniousness
-impedance
-impede
-impeder
-impedibility
-impedible
-impedient
-impediment
-impedimenta
-impedimental
-impedimentary
-impeding
-impedingly
-impedite
-impedition
-impeditive
-impedometer
-impeevish
-impel
-impellent
-impeller
-impen
-impend
-impendence
-impendency
-impendent
-impending
-impenetrability
-impenetrable
-impenetrableness
-impenetrably
-impenetrate
-impenetration
-impenetrative
-impenitence
-impenitent
-impenitently
-impenitentness
-impenitible
-impenitibleness
-impennate
-Impennes
-impent
-imperance
-imperant
-Imperata
-imperate
-imperation
-imperatival
-imperative
-imperatively
-imperativeness
-imperator
-imperatorial
-imperatorially
-imperatorian
-imperatorious
-imperatorship
-imperatory
-imperatrix
-imperceivable
-imperceivableness
-imperceivably
-imperceived
-imperceiverant
-imperceptibility
-imperceptible
-imperceptibleness
-imperceptibly
-imperception
-imperceptive
-imperceptiveness
-imperceptivity
-impercipience
-impercipient
-imperence
-imperent
-imperfect
-imperfected
-imperfectibility
-imperfectible
-imperfection
-imperfectious
-imperfective
-imperfectly
-imperfectness
-imperforable
-Imperforata
-imperforate
-imperforated
-imperforation
-imperformable
-imperia
-imperial
-imperialin
-imperialine
-imperialism
-imperialist
-imperialistic
-imperialistically
-imperiality
-imperialization
-imperialize
-imperially
-imperialness
-imperialty
-imperil
-imperilment
-imperious
-imperiously
-imperiousness
-imperish
-imperishability
-imperishable
-imperishableness
-imperishably
-imperite
-imperium
-impermanence
-impermanency
-impermanent
-impermanently
-impermeability
-impermeabilization
-impermeabilize
-impermeable
-impermeableness
-impermeably
-impermeated
-impermeator
-impermissible
-impermutable
-imperscriptible
-imperscrutable
-impersonable
-impersonal
-impersonality
-impersonalization
-impersonalize
-impersonally
-impersonate
-impersonation
-impersonative
-impersonator
-impersonatress
-impersonatrix
-impersonification
-impersonify
-impersonization
-impersonize
-imperspicuity
-imperspicuous
-imperspirability
-imperspirable
-impersuadable
-impersuadableness
-impersuasibility
-impersuasible
-impersuasibleness
-impersuasibly
-impertinacy
-impertinence
-impertinency
-impertinent
-impertinently
-impertinentness
-impertransible
-imperturbability
-imperturbable
-imperturbableness
-imperturbably
-imperturbation
-imperturbed
-imperverse
-impervertible
-impervestigable
-imperviability
-imperviable
-imperviableness
-impervial
-impervious
-imperviously
-imperviousness
-impest
-impestation
-impester
-impeticos
-impetiginous
-impetigo
-impetition
-impetrate
-impetration
-impetrative
-impetrator
-impetratory
-impetre
-impetulant
-impetulantly
-impetuosity
-impetuous
-impetuously
-impetuousness
-impetus
-Impeyan
-imphee
-impi
-impicture
-impierceable
-impiety
-impignorate
-impignoration
-impinge
-impingement
-impingence
-impingent
-impinger
-impinguate
-impious
-impiously
-impiousness
-impish
-impishly
-impishness
-impiteous
-impitiably
-implacability
-implacable
-implacableness
-implacably
-implacement
-implacental
-Implacentalia
-implacentate
-implant
-implantation
-implanter
-implastic
-implasticity
-implate
-implausibility
-implausible
-implausibleness
-implausibly
-impleach
-implead
-impleadable
-impleader
-impledge
-implement
-implemental
-implementation
-implementiferous
-implete
-impletion
-impletive
-implex
-impliable
-implial
-implicant
-implicate
-implicately
-implicateness
-implication
-implicational
-implicative
-implicatively
-implicatory
-implicit
-implicitly
-implicitness
-impliedly
-impliedness
-impling
-implode
-implodent
-implorable
-imploration
-implorator
-imploratory
-implore
-implorer
-imploring
-imploringly
-imploringness
-implosion
-implosive
-implosively
-implume
-implumed
-implunge
-impluvium
-imply
-impocket
-impofo
-impoison
-impoisoner
-impolarizable
-impolicy
-impolished
-impolite
-impolitely
-impoliteness
-impolitic
-impolitical
-impolitically
-impoliticalness
-impoliticly
-impoliticness
-impollute
-imponderabilia
-imponderability
-imponderable
-imponderableness
-imponderably
-imponderous
-impone
-imponent
-impoor
-impopular
-impopularly
-imporosity
-imporous
-import
-importability
-importable
-importableness
-importably
-importance
-importancy
-important
-importantly
-importation
-importer
-importless
-importment
-importraiture
-importray
-importunacy
-importunance
-importunate
-importunately
-importunateness
-importunator
-importune
-importunely
-importunement
-importuner
-importunity
-imposable
-imposableness
-imposal
-impose
-imposement
-imposer
-imposing
-imposingly
-imposingness
-imposition
-impositional
-impositive
-impossibilification
-impossibilism
-impossibilist
-impossibilitate
-impossibility
-impossible
-impossibleness
-impossibly
-impost
-imposter
-imposterous
-impostor
-impostorism
-impostorship
-impostress
-impostrix
-impostrous
-impostumate
-impostumation
-impostume
-imposture
-imposturism
-imposturous
-imposure
-impot
-impotable
-impotence
-impotency
-impotent
-impotently
-impotentness
-impound
-impoundable
-impoundage
-impounder
-impoundment
-impoverish
-impoverisher
-impoverishment
-impracticability
-impracticable
-impracticableness
-impracticably
-impractical
-impracticality
-impracticalness
-imprecant
-imprecate
-imprecation
-imprecator
-imprecatorily
-imprecatory
-imprecise
-imprecisely
-imprecision
-impredicability
-impredicable
-impreg
-impregn
-impregnability
-impregnable
-impregnableness
-impregnably
-impregnant
-impregnate
-impregnation
-impregnative
-impregnator
-impregnatory
-imprejudice
-impremeditate
-impreparation
-impresa
-impresario
-imprescience
-imprescribable
-imprescriptibility
-imprescriptible
-imprescriptibly
-imprese
-impress
-impressable
-impressedly
-impresser
-impressibility
-impressible
-impressibleness
-impressibly
-impression
-impressionability
-impressionable
-impressionableness
-impressionably
-impressional
-impressionalist
-impressionality
-impressionally
-impressionary
-impressionism
-impressionist
-impressionistic
-impressionistically
-impressionless
-impressive
-impressively
-impressiveness
-impressment
-impressor
-impressure
-imprest
-imprestable
-impreventability
-impreventable
-imprevisibility
-imprevisible
-imprevision
-imprimatur
-imprime
-imprimitive
-imprimitivity
-imprint
-imprinter
-imprison
-imprisonable
-imprisoner
-imprisonment
-improbability
-improbabilize
-improbable
-improbableness
-improbably
-improbation
-improbative
-improbatory
-improbity
-improcreant
-improcurability
-improcurable
-improducible
-improficience
-improficiency
-improgressive
-improgressively
-improgressiveness
-improlificical
-impromptitude
-impromptu
-impromptuary
-impromptuist
-improof
-improper
-improperation
-improperly
-improperness
-impropriate
-impropriation
-impropriator
-impropriatrix
-impropriety
-improvability
-improvable
-improvableness
-improvably
-improve
-improvement
-improver
-improvership
-improvidence
-improvident
-improvidentially
-improvidently
-improving
-improvingly
-improvisate
-improvisation
-improvisational
-improvisator
-improvisatorial
-improvisatorially
-improvisatorize
-improvisatory
-improvise
-improvisedly
-improviser
-improvision
-improviso
-improvisor
-imprudence
-imprudency
-imprudent
-imprudential
-imprudently
-imprudentness
-impship
-impuberal
-impuberate
-impuberty
-impubic
-impudence
-impudency
-impudent
-impudently
-impudentness
-impudicity
-impugn
-impugnability
-impugnable
-impugnation
-impugner
-impugnment
-impuissance
-impuissant
-impulse
-impulsion
-impulsive
-impulsively
-impulsiveness
-impulsivity
-impulsory
-impunctate
-impunctual
-impunctuality
-impunely
-impunible
-impunibly
-impunity
-impure
-impurely
-impureness
-impuritan
-impuritanism
-impurity
-imputability
-imputable
-imputableness
-imputably
-imputation
-imputative
-imputatively
-imputativeness
-impute
-imputedly
-imputer
-imputrescence
-imputrescibility
-imputrescible
-imputrid
-impy
-imshi
-imsonic
-imu
-in
-inability
-inabordable
-inabstinence
-inaccentuated
-inaccentuation
-inacceptable
-inaccessibility
-inaccessible
-inaccessibleness
-inaccessibly
-inaccordance
-inaccordancy
-inaccordant
-inaccordantly
-inaccuracy
-inaccurate
-inaccurately
-inaccurateness
-inachid
-Inachidae
-inachoid
-Inachus
-inacquaintance
-inacquiescent
-inactinic
-inaction
-inactionist
-inactivate
-inactivation
-inactive
-inactively
-inactiveness
-inactivity
-inactuate
-inactuation
-inadaptability
-inadaptable
-inadaptation
-inadaptive
-inadept
-inadequacy
-inadequate
-inadequately
-inadequateness
-inadequation
-inadequative
-inadequatively
-inadherent
-inadhesion
-inadhesive
-inadjustability
-inadjustable
-inadmissibility
-inadmissible
-inadmissibly
-inadventurous
-inadvertence
-inadvertency
-inadvertent
-inadvertently
-inadvisability
-inadvisable
-inadvisableness
-inadvisedly
-inaesthetic
-inaffability
-inaffable
-inaffectation
-inagglutinability
-inagglutinable
-inaggressive
-inagile
-inaidable
-inaja
-inalacrity
-inalienability
-inalienable
-inalienableness
-inalienably
-inalimental
-inalterability
-inalterable
-inalterableness
-inalterably
-inamissibility
-inamissible
-inamissibleness
-inamorata
-inamorate
-inamoration
-inamorato
-inamovability
-inamovable
-inane
-inanely
-inanga
-inangulate
-inanimadvertence
-inanimate
-inanimated
-inanimately
-inanimateness
-inanimation
-inanition
-inanity
-inantherate
-inapathy
-inapostate
-inapparent
-inappealable
-inappeasable
-inappellability
-inappellable
-inappendiculate
-inapperceptible
-inappertinent
-inappetence
-inappetency
-inappetent
-inappetible
-inapplicability
-inapplicable
-inapplicableness
-inapplicably
-inapplication
-inapposite
-inappositely
-inappositeness
-inappreciable
-inappreciably
-inappreciation
-inappreciative
-inappreciatively
-inappreciativeness
-inapprehensible
-inapprehension
-inapprehensive
-inapprehensiveness
-inapproachability
-inapproachable
-inapproachably
-inappropriable
-inappropriableness
-inappropriate
-inappropriately
-inappropriateness
-inapt
-inaptitude
-inaptly
-inaptness
-inaqueous
-inarable
-inarch
-inarculum
-inarguable
-inarguably
-inarm
-inarticulacy
-Inarticulata
-inarticulate
-inarticulated
-inarticulately
-inarticulateness
-inarticulation
-inartificial
-inartificiality
-inartificially
-inartificialness
-inartistic
-inartistical
-inartisticality
-inartistically
-inasmuch
-inassimilable
-inassimilation
-inassuageable
-inattackable
-inattention
-inattentive
-inattentively
-inattentiveness
-inaudibility
-inaudible
-inaudibleness
-inaudibly
-inaugur
-inaugural
-inaugurate
-inauguration
-inaugurative
-inaugurator
-inauguratory
-inaugurer
-inaurate
-inauration
-inauspicious
-inauspiciously
-inauspiciousness
-inauthentic
-inauthenticity
-inauthoritative
-inauthoritativeness
-inaxon
-inbe
-inbeaming
-inbearing
-inbeing
-inbending
-inbent
-inbirth
-inblow
-inblowing
-inblown
-inboard
-inbond
-inborn
-inbound
-inbread
-inbreak
-inbreaking
-inbreathe
-inbreather
-inbred
-inbreed
-inbring
-inbringer
-inbuilt
-inburning
-inburnt
-inburst
-inby
-Inca
-Incaic
-incalculability
-incalculable
-incalculableness
-incalculably
-incalescence
-incalescency
-incalescent
-incaliculate
-incalver
-incalving
-incameration
-Incan
-incandent
-incandesce
-incandescence
-incandescency
-incandescent
-incandescently
-incanous
-incantation
-incantational
-incantator
-incantatory
-incanton
-incapability
-incapable
-incapableness
-incapably
-incapacious
-incapaciousness
-incapacitate
-incapacitation
-incapacity
-incapsulate
-incapsulation
-incaptivate
-incarcerate
-incarceration
-incarcerator
-incardinate
-incardination
-Incarial
-incarmined
-incarn
-incarnadine
-incarnant
-incarnate
-incarnation
-incarnational
-incarnationist
-incarnative
-Incarvillea
-incase
-incasement
-incast
-incatenate
-incatenation
-incaution
-incautious
-incautiously
-incautiousness
-incavate
-incavated
-incavation
-incavern
-incedingly
-incelebrity
-incendiarism
-incendiary
-incendivity
-incensation
-incense
-incenseless
-incensement
-incensory
-incensurable
-incensurably
-incenter
-incentive
-incentively
-incentor
-incept
-inception
-inceptive
-inceptively
-inceptor
-inceration
-incertitude
-incessable
-incessably
-incessancy
-incessant
-incessantly
-incessantness
-incest
-incestuous
-incestuously
-incestuousness
-inch
-inched
-inchmeal
-inchoacy
-inchoant
-inchoate
-inchoately
-inchoateness
-inchoation
-inchoative
-inchpin
-inchworm
-incide
-incidence
-incident
-incidental
-incidentalist
-incidentally
-incidentalness
-incidentless
-incidently
-incinerable
-incinerate
-incineration
-incinerator
-incipience
-incipient
-incipiently
-incircumscription
-incircumspect
-incircumspection
-incircumspectly
-incircumspectness
-incisal
-incise
-incisely
-incisiform
-incision
-incisive
-incisively
-incisiveness
-incisor
-incisorial
-incisory
-incisure
-incitability
-incitable
-incitant
-incitation
-incite
-incitement
-inciter
-incitingly
-incitive
-incitress
-incivic
-incivility
-incivilization
-incivism
-inclemency
-inclement
-inclemently
-inclementness
-inclinable
-inclinableness
-inclination
-inclinational
-inclinator
-inclinatorily
-inclinatorium
-inclinatory
-incline
-incliner
-inclinograph
-inclinometer
-inclip
-inclose
-inclosure
-includable
-include
-included
-includedness
-includer
-inclusa
-incluse
-inclusion
-inclusionist
-inclusive
-inclusively
-inclusiveness
-inclusory
-incoagulable
-incoalescence
-incoercible
-incog
-incogent
-incogitability
-incogitable
-incogitancy
-incogitant
-incogitantly
-incogitative
-incognita
-incognitive
-incognito
-incognizability
-incognizable
-incognizance
-incognizant
-incognoscent
-incognoscibility
-incognoscible
-incoherence
-incoherency
-incoherent
-incoherentific
-incoherently
-incoherentness
-incohering
-incohesion
-incohesive
-incoincidence
-incoincident
-incombustibility
-incombustible
-incombustibleness
-incombustibly
-incombustion
-income
-incomeless
-incomer
-incoming
-incommensurability
-incommensurable
-incommensurableness
-incommensurably
-incommensurate
-incommensurately
-incommensurateness
-incommiscibility
-incommiscible
-incommodate
-incommodation
-incommode
-incommodement
-incommodious
-incommodiously
-incommodiousness
-incommodity
-incommunicability
-incommunicable
-incommunicableness
-incommunicably
-incommunicado
-incommunicative
-incommunicatively
-incommunicativeness
-incommutability
-incommutable
-incommutableness
-incommutably
-incompact
-incompactly
-incompactness
-incomparability
-incomparable
-incomparableness
-incomparably
-incompassionate
-incompassionately
-incompassionateness
-incompatibility
-incompatible
-incompatibleness
-incompatibly
-incompendious
-incompensated
-incompensation
-incompetence
-incompetency
-incompetent
-incompetently
-incompetentness
-incompletability
-incompletable
-incompletableness
-incomplete
-incompleted
-incompletely
-incompleteness
-incompletion
-incomplex
-incompliance
-incompliancy
-incompliant
-incompliantly
-incomplicate
-incomplying
-incomposed
-incomposedly
-incomposedness
-incomposite
-incompossibility
-incompossible
-incomprehended
-incomprehending
-incomprehendingly
-incomprehensibility
-incomprehensible
-incomprehensibleness
-incomprehensibly
-incomprehension
-incomprehensive
-incomprehensively
-incomprehensiveness
-incompressibility
-incompressible
-incompressibleness
-incompressibly
-incomputable
-inconcealable
-inconceivability
-inconceivable
-inconceivableness
-inconceivably
-inconcinnate
-inconcinnately
-inconcinnity
-inconcinnous
-inconcludent
-inconcluding
-inconclusion
-inconclusive
-inconclusively
-inconclusiveness
-inconcrete
-inconcurrent
-inconcurring
-incondensability
-incondensable
-incondensibility
-incondensible
-incondite
-inconditionate
-inconditioned
-inconducive
-inconfirm
-inconformable
-inconformably
-inconformity
-inconfused
-inconfusedly
-inconfusion
-inconfutable
-inconfutably
-incongealable
-incongealableness
-incongenerous
-incongenial
-incongeniality
-inconglomerate
-incongruence
-incongruent
-incongruently
-incongruity
-incongruous
-incongruously
-incongruousness
-inconjoinable
-inconnected
-inconnectedness
-inconnu
-inconscience
-inconscient
-inconsciently
-inconscious
-inconsciously
-inconsecutive
-inconsecutively
-inconsecutiveness
-inconsequence
-inconsequent
-inconsequential
-inconsequentiality
-inconsequentially
-inconsequently
-inconsequentness
-inconsiderable
-inconsiderableness
-inconsiderably
-inconsiderate
-inconsiderately
-inconsiderateness
-inconsideration
-inconsidered
-inconsistence
-inconsistency
-inconsistent
-inconsistently
-inconsistentness
-inconsolability
-inconsolable
-inconsolableness
-inconsolably
-inconsolate
-inconsolately
-inconsonance
-inconsonant
-inconsonantly
-inconspicuous
-inconspicuously
-inconspicuousness
-inconstancy
-inconstant
-inconstantly
-inconstantness
-inconstruable
-inconsultable
-inconsumable
-inconsumably
-inconsumed
-incontaminable
-incontaminate
-incontaminateness
-incontemptible
-incontestability
-incontestable
-incontestableness
-incontestably
-incontinence
-incontinency
-incontinent
-incontinently
-incontinuity
-incontinuous
-incontracted
-incontractile
-incontraction
-incontrollable
-incontrollably
-incontrolled
-incontrovertibility
-incontrovertible
-incontrovertibleness
-incontrovertibly
-inconvenience
-inconveniency
-inconvenient
-inconveniently
-inconvenientness
-inconversable
-inconversant
-inconversibility
-inconvertibility
-inconvertible
-inconvertibleness
-inconvertibly
-inconvinced
-inconvincedly
-inconvincibility
-inconvincible
-inconvincibly
-incopresentability
-incopresentable
-incoronate
-incoronated
-incoronation
-incorporable
-incorporate
-incorporated
-incorporatedness
-incorporation
-incorporative
-incorporator
-incorporeal
-incorporealism
-incorporealist
-incorporeality
-incorporealize
-incorporeally
-incorporeity
-incorporeous
-incorpse
-incorrect
-incorrection
-incorrectly
-incorrectness
-incorrespondence
-incorrespondency
-incorrespondent
-incorresponding
-incorrigibility
-incorrigible
-incorrigibleness
-incorrigibly
-incorrodable
-incorrodible
-incorrosive
-incorrupt
-incorrupted
-incorruptibility
-Incorruptible
-incorruptible
-incorruptibleness
-incorruptibly
-incorruption
-incorruptly
-incorruptness
-incourteous
-incourteously
-incrash
-incrassate
-incrassated
-incrassation
-incrassative
-increasable
-increasableness
-increase
-increasedly
-increaseful
-increasement
-increaser
-increasing
-increasingly
-increate
-increately
-increative
-incredibility
-incredible
-incredibleness
-incredibly
-increditable
-incredited
-incredulity
-incredulous
-incredulously
-incredulousness
-increep
-incremate
-incremation
-increment
-incremental
-incrementation
-increpate
-increpation
-increscence
-increscent
-increst
-incretion
-incretionary
-incretory
-incriminate
-incrimination
-incriminator
-incriminatory
-incross
-incrossbred
-incrossing
-incrotchet
-incruent
-incruental
-incruentous
-incrust
-incrustant
-Incrustata
-incrustate
-incrustation
-incrustator
-incrustive
-incrustment
-incrystal
-incrystallizable
-incubate
-incubation
-incubational
-incubative
-incubator
-incubatorium
-incubatory
-incubi
-incubous
-incubus
-incudal
-incudate
-incudectomy
-incudes
-incudomalleal
-incudostapedial
-inculcate
-inculcation
-inculcative
-inculcator
-inculcatory
-inculpability
-inculpable
-inculpableness
-inculpably
-inculpate
-inculpation
-inculpative
-inculpatory
-incult
-incultivation
-inculture
-incumbence
-incumbency
-incumbent
-incumbentess
-incumbently
-incumber
-incumberment
-incumbrance
-incumbrancer
-incunable
-incunabula
-incunabular
-incunabulist
-incunabulum
-incuneation
-incur
-incurability
-incurable
-incurableness
-incurably
-incuriosity
-incurious
-incuriously
-incuriousness
-incurrable
-incurrence
-incurrent
-incurse
-incursion
-incursionist
-incursive
-incurvate
-incurvation
-incurvature
-incurve
-incus
-incuse
-incut
-incutting
-Ind
-indaba
-indaconitine
-indagate
-indagation
-indagative
-indagator
-indagatory
-indamine
-indan
-indane
-Indanthrene
-indanthrene
-indart
-indazin
-indazine
-indazol
-indazole
-inde
-indebt
-indebted
-indebtedness
-indebtment
-indecence
-indecency
-indecent
-indecently
-indecentness
-Indecidua
-indeciduate
-indeciduous
-indecipherability
-indecipherable
-indecipherableness
-indecipherably
-indecision
-indecisive
-indecisively
-indecisiveness
-indeclinable
-indeclinableness
-indeclinably
-indecomponible
-indecomposable
-indecomposableness
-indecorous
-indecorously
-indecorousness
-indecorum
-indeed
-indeedy
-indefaceable
-indefatigability
-indefatigable
-indefatigableness
-indefatigably
-indefeasibility
-indefeasible
-indefeasibleness
-indefeasibly
-indefeatable
-indefectibility
-indefectible
-indefectibly
-indefective
-indefensibility
-indefensible
-indefensibleness
-indefensibly
-indefensive
-indeficiency
-indeficient
-indeficiently
-indefinable
-indefinableness
-indefinably
-indefinite
-indefinitely
-indefiniteness
-indefinitive
-indefinitively
-indefinitiveness
-indefinitude
-indefinity
-indeflectible
-indefluent
-indeformable
-indehiscence
-indehiscent
-indelectable
-indelegability
-indelegable
-indeliberate
-indeliberately
-indeliberateness
-indeliberation
-indelibility
-indelible
-indelibleness
-indelibly
-indelicacy
-indelicate
-indelicately
-indelicateness
-indemnification
-indemnificator
-indemnificatory
-indemnifier
-indemnify
-indemnitee
-indemnitor
-indemnity
-indemnization
-indemoniate
-indemonstrability
-indemonstrable
-indemonstrableness
-indemonstrably
-indene
-indent
-indentation
-indented
-indentedly
-indentee
-indenter
-indention
-indentment
-indentor
-indenture
-indentured
-indentureship
-indentwise
-independable
-independence
-independency
-independent
-independentism
-independently
-Independista
-indeposable
-indeprehensible
-indeprivability
-indeprivable
-inderivative
-indescribability
-indescribable
-indescribableness
-indescribably
-indescript
-indescriptive
-indesert
-indesignate
-indesirable
-indestructibility
-indestructible
-indestructibleness
-indestructibly
-indetectable
-indeterminable
-indeterminableness
-indeterminably
-indeterminacy
-indeterminate
-indeterminately
-indeterminateness
-indetermination
-indeterminative
-indetermined
-indeterminism
-indeterminist
-indeterministic
-indevirginate
-indevoted
-indevotion
-indevotional
-indevout
-indevoutly
-indevoutness
-index
-indexed
-indexer
-indexical
-indexically
-indexing
-indexless
-indexlessness
-indexterity
-India
-indiadem
-Indiaman
-Indian
-Indiana
-indianaite
-Indianan
-Indianeer
-Indianesque
-Indianhood
-Indianian
-Indianism
-Indianist
-indianite
-indianization
-indianize
-Indic
-indic
-indicable
-indican
-indicant
-indicanuria
-indicate
-indication
-indicative
-indicatively
-indicator
-Indicatoridae
-Indicatorinae
-indicatory
-indicatrix
-indices
-indicia
-indicial
-indicible
-indicium
-indicolite
-indict
-indictable
-indictably
-indictee
-indicter
-indiction
-indictional
-indictive
-indictment
-indictor
-Indies
-indiferous
-indifference
-indifferency
-indifferent
-indifferential
-indifferentism
-indifferentist
-indifferentistic
-indifferently
-indigena
-indigenal
-indigenate
-indigence
-indigency
-indigene
-indigeneity
-Indigenismo
-indigenist
-indigenity
-indigenous
-indigenously
-indigenousness
-indigent
-indigently
-indigested
-indigestedness
-indigestibility
-indigestible
-indigestibleness
-indigestibly
-indigestion
-indigestive
-indigitamenta
-indigitate
-indigitation
-indign
-indignance
-indignancy
-indignant
-indignantly
-indignation
-indignatory
-indignify
-indignity
-indignly
-indigo
-indigoberry
-Indigofera
-indigoferous
-indigoid
-indigotic
-indigotin
-indigotindisulphonic
-indiguria
-indimensible
-indimensional
-indiminishable
-indimple
-indirect
-indirected
-indirection
-indirectly
-indirectness
-indirubin
-indiscernibility
-indiscernible
-indiscernibleness
-indiscernibly
-indiscerptibility
-indiscerptible
-indiscerptibleness
-indiscerptibly
-indisciplinable
-indiscipline
-indisciplined
-indiscoverable
-indiscoverably
-indiscovered
-indiscreet
-indiscreetly
-indiscreetness
-indiscrete
-indiscretely
-indiscretion
-indiscretionary
-indiscriminate
-indiscriminated
-indiscriminately
-indiscriminateness
-indiscriminating
-indiscriminatingly
-indiscrimination
-indiscriminative
-indiscriminatively
-indiscriminatory
-indiscussable
-indiscussible
-indispellable
-indispensability
-indispensable
-indispensableness
-indispensably
-indispose
-indisposed
-indisposedness
-indisposition
-indisputability
-indisputable
-indisputableness
-indisputably
-indissipable
-indissociable
-indissolubility
-indissoluble
-indissolubleness
-indissolubly
-indissolute
-indissolvability
-indissolvable
-indissolvableness
-indissolvably
-indissuadable
-indissuadably
-indistinct
-indistinction
-indistinctive
-indistinctively
-indistinctiveness
-indistinctly
-indistinctness
-indistinguishability
-indistinguishable
-indistinguishableness
-indistinguishably
-indistinguished
-indistortable
-indistributable
-indisturbable
-indisturbance
-indisturbed
-indite
-inditement
-inditer
-indium
-indivertible
-indivertibly
-individable
-individua
-individual
-individualism
-individualist
-individualistic
-individualistically
-individuality
-individualization
-individualize
-individualizer
-individualizingly
-individually
-individuate
-individuation
-individuative
-individuator
-individuity
-individuum
-indivinable
-indivisibility
-indivisible
-indivisibleness
-indivisibly
-indivision
-indocibility
-indocible
-indocibleness
-indocile
-indocility
-indoctrinate
-indoctrination
-indoctrinator
-indoctrine
-indoctrinization
-indoctrinize
-Indogaea
-Indogaean
-indogen
-indogenide
-indole
-indolence
-indolent
-indolently
-indoles
-indoline
-Indologian
-Indologist
-Indologue
-Indology
-indoloid
-indolyl
-indomitability
-indomitable
-indomitableness
-indomitably
-Indone
-Indonesian
-indoor
-indoors
-indophenin
-indophenol
-Indophile
-Indophilism
-Indophilist
-indorsation
-indorse
-indoxyl
-indoxylic
-indoxylsulphuric
-Indra
-indraft
-indraught
-indrawal
-indrawing
-indrawn
-indri
-Indris
-indubious
-indubiously
-indubitable
-indubitableness
-indubitably
-indubitatively
-induce
-induced
-inducedly
-inducement
-inducer
-induciae
-inducible
-inducive
-induct
-inductance
-inductee
-inducteous
-inductile
-inductility
-induction
-inductional
-inductionally
-inductionless
-inductive
-inductively
-inductiveness
-inductivity
-inductometer
-inductophone
-inductor
-inductorium
-inductory
-inductoscope
-indue
-induement
-indulge
-indulgeable
-indulgement
-indulgence
-indulgenced
-indulgency
-indulgent
-indulgential
-indulgentially
-indulgently
-indulgentness
-indulger
-indulging
-indulgingly
-induline
-indult
-indulto
-indument
-indumentum
-induna
-induplicate
-induplication
-induplicative
-indurable
-indurate
-induration
-indurative
-indurite
-Indus
-indusial
-indusiate
-indusiated
-indusiform
-indusioid
-indusium
-industrial
-industrialism
-industrialist
-industrialization
-industrialize
-industrially
-industrialness
-industrious
-industriously
-industriousness
-industrochemical
-industry
-induviae
-induvial
-induviate
-indwell
-indweller
-indy
-indyl
-indylic
-inearth
-inebriacy
-inebriant
-inebriate
-inebriation
-inebriative
-inebriety
-inebrious
-ineconomic
-ineconomy
-inedibility
-inedible
-inedited
-Ineducabilia
-ineducabilian
-ineducability
-ineducable
-ineducation
-ineffability
-ineffable
-ineffableness
-ineffably
-ineffaceability
-ineffaceable
-ineffaceably
-ineffectible
-ineffectibly
-ineffective
-ineffectively
-ineffectiveness
-ineffectual
-ineffectuality
-ineffectually
-ineffectualness
-ineffervescence
-ineffervescent
-ineffervescibility
-ineffervescible
-inefficacious
-inefficaciously
-inefficaciousness
-inefficacity
-inefficacy
-inefficience
-inefficiency
-inefficient
-inefficiently
-ineffulgent
-inelaborate
-inelaborated
-inelaborately
-inelastic
-inelasticate
-inelasticity
-inelegance
-inelegancy
-inelegant
-inelegantly
-ineligibility
-ineligible
-ineligibleness
-ineligibly
-ineliminable
-ineloquence
-ineloquent
-ineloquently
-ineluctability
-ineluctable
-ineluctably
-ineludible
-ineludibly
-inembryonate
-inemendable
-inemotivity
-inemulous
-inenarrable
-inenergetic
-inenubilable
-inenucleable
-inept
-ineptitude
-ineptly
-ineptness
-inequable
-inequal
-inequalitarian
-inequality
-inequally
-inequalness
-inequation
-inequiaxial
-inequicostate
-inequidistant
-inequigranular
-inequilateral
-inequilibrium
-inequilobate
-inequilobed
-inequipotential
-inequipotentiality
-inequitable
-inequitableness
-inequitably
-inequity
-inequivalent
-inequivalve
-inequivalvular
-ineradicable
-ineradicableness
-ineradicably
-inerasable
-inerasableness
-inerasably
-inerasible
-Ineri
-inerm
-Inermes
-Inermi
-Inermia
-inermous
-inerrability
-inerrable
-inerrableness
-inerrably
-inerrancy
-inerrant
-inerrantly
-inerratic
-inerring
-inerringly
-inerroneous
-inert
-inertance
-inertia
-inertial
-inertion
-inertly
-inertness
-inerubescent
-inerudite
-ineruditely
-inerudition
-inescapable
-inescapableness
-inescapably
-inesculent
-inescutcheon
-inesite
-inessential
-inessentiality
-inestimability
-inestimable
-inestimableness
-inestimably
-inestivation
-inethical
-ineunt
-ineuphonious
-inevadible
-inevadibly
-inevaporable
-inevasible
-inevidence
-inevident
-inevitability
-inevitable
-inevitableness
-inevitably
-inexact
-inexacting
-inexactitude
-inexactly
-inexactness
-inexcellence
-inexcitability
-inexcitable
-inexclusive
-inexclusively
-inexcommunicable
-inexcusability
-inexcusable
-inexcusableness
-inexcusably
-inexecutable
-inexecution
-inexertion
-inexhausted
-inexhaustedly
-inexhaustibility
-inexhaustible
-inexhaustibleness
-inexhaustibly
-inexhaustive
-inexhaustively
-inexigible
-inexist
-inexistence
-inexistency
-inexistent
-inexorability
-inexorable
-inexorableness
-inexorably
-inexpansible
-inexpansive
-inexpectancy
-inexpectant
-inexpectation
-inexpected
-inexpectedly
-inexpectedness
-inexpedience
-inexpediency
-inexpedient
-inexpediently
-inexpensive
-inexpensively
-inexpensiveness
-inexperience
-inexperienced
-inexpert
-inexpertly
-inexpertness
-inexpiable
-inexpiableness
-inexpiably
-inexpiate
-inexplainable
-inexplicability
-inexplicable
-inexplicableness
-inexplicables
-inexplicably
-inexplicit
-inexplicitly
-inexplicitness
-inexplorable
-inexplosive
-inexportable
-inexposable
-inexposure
-inexpress
-inexpressibility
-inexpressible
-inexpressibleness
-inexpressibles
-inexpressibly
-inexpressive
-inexpressively
-inexpressiveness
-inexpugnability
-inexpugnable
-inexpugnableness
-inexpugnably
-inexpungeable
-inexpungible
-inextant
-inextended
-inextensibility
-inextensible
-inextensile
-inextension
-inextensional
-inextensive
-inexterminable
-inextinct
-inextinguishable
-inextinguishably
-inextirpable
-inextirpableness
-inextricability
-inextricable
-inextricableness
-inextricably
-Inez
-inface
-infall
-infallibilism
-infallibilist
-infallibility
-infallible
-infallibleness
-infallibly
-infalling
-infalsificable
-infame
-infamiliar
-infamiliarity
-infamize
-infamonize
-infamous
-infamously
-infamousness
-infamy
-infancy
-infand
-infandous
-infang
-infanglement
-infangthief
-infant
-infanta
-infantado
-infante
-infanthood
-infanticidal
-infanticide
-infantile
-infantilism
-infantility
-infantine
-infantlike
-infantry
-infantryman
-infarct
-infarctate
-infarcted
-infarction
-infare
-infatuate
-infatuatedly
-infatuation
-infatuator
-infaust
-infeasibility
-infeasible
-infeasibleness
-infect
-infectant
-infected
-infectedness
-infecter
-infectible
-infection
-infectionist
-infectious
-infectiously
-infectiousness
-infective
-infectiveness
-infectivity
-infector
-infectress
-infectuous
-infecund
-infecundity
-infeed
-infeft
-infeftment
-infelicific
-infelicitous
-infelicitously
-infelicitousness
-infelicity
-infelonious
-infelt
-infeminine
-infer
-inferable
-inference
-inferent
-inferential
-inferentialism
-inferentialist
-inferentially
-inferior
-inferiorism
-inferiority
-inferiorize
-inferiorly
-infern
-infernal
-infernalism
-infernality
-infernalize
-infernally
-infernalry
-infernalship
-inferno
-inferoanterior
-inferobranchiate
-inferofrontal
-inferolateral
-inferomedian
-inferoposterior
-inferrer
-inferribility
-inferrible
-inferringly
-infertile
-infertilely
-infertileness
-infertility
-infest
-infestant
-infestation
-infester
-infestive
-infestivity
-infestment
-infeudation
-infibulate
-infibulation
-inficete
-infidel
-infidelic
-infidelical
-infidelism
-infidelistic
-infidelity
-infidelize
-infidelly
-infield
-infielder
-infieldsman
-infighter
-infighting
-infill
-infilling
-infilm
-infilter
-infiltrate
-infiltration
-infiltrative
-infinitant
-infinitarily
-infinitary
-infinitate
-infinitation
-infinite
-infinitely
-infiniteness
-infinitesimal
-infinitesimalism
-infinitesimality
-infinitesimally
-infinitesimalness
-infiniteth
-infinitieth
-infinitival
-infinitivally
-infinitive
-infinitively
-infinitize
-infinitude
-infinituple
-infinity
-infirm
-infirmarer
-infirmaress
-infirmarian
-infirmary
-infirmate
-infirmation
-infirmative
-infirmity
-infirmly
-infirmness
-infissile
-infit
-infitter
-infix
-infixion
-inflame
-inflamed
-inflamedly
-inflamedness
-inflamer
-inflaming
-inflamingly
-inflammability
-inflammable
-inflammableness
-inflammably
-inflammation
-inflammative
-inflammatorily
-inflammatory
-inflatable
-inflate
-inflated
-inflatedly
-inflatedness
-inflater
-inflatile
-inflatingly
-inflation
-inflationary
-inflationism
-inflationist
-inflative
-inflatus
-inflect
-inflected
-inflectedness
-inflection
-inflectional
-inflectionally
-inflectionless
-inflective
-inflector
-inflex
-inflexed
-inflexibility
-inflexible
-inflexibleness
-inflexibly
-inflexive
-inflict
-inflictable
-inflicter
-infliction
-inflictive
-inflood
-inflorescence
-inflorescent
-inflow
-inflowering
-influence
-influenceable
-influencer
-influencive
-influent
-influential
-influentiality
-influentially
-influenza
-influenzal
-influenzic
-influx
-influxable
-influxible
-influxibly
-influxion
-influxionism
-infold
-infolder
-infolding
-infoldment
-infoliate
-inform
-informable
-informal
-informality
-informalize
-informally
-informant
-information
-informational
-informative
-informatively
-informatory
-informed
-informedly
-informer
-informidable
-informingly
-informity
-infortiate
-infortitude
-infortunate
-infortunately
-infortunateness
-infortune
-infra
-infrabasal
-infrabestial
-infrabranchial
-infrabuccal
-infracanthal
-infracaudal
-infracelestial
-infracentral
-infracephalic
-infraclavicle
-infraclavicular
-infraclusion
-infraconscious
-infracortical
-infracostal
-infracostalis
-infracotyloid
-infract
-infractible
-infraction
-infractor
-infradentary
-infradiaphragmatic
-infragenual
-infraglacial
-infraglenoid
-infraglottic
-infragrant
-infragular
-infrahuman
-infrahyoid
-infralabial
-infralapsarian
-infralapsarianism
-infralinear
-infralittoral
-inframammary
-inframammillary
-inframandibular
-inframarginal
-inframaxillary
-inframedian
-inframercurial
-inframercurian
-inframolecular
-inframontane
-inframundane
-infranatural
-infranaturalism
-infrangibility
-infrangible
-infrangibleness
-infrangibly
-infranodal
-infranuclear
-infraoccipital
-infraocclusion
-infraocular
-infraoral
-infraorbital
-infraordinary
-infrapapillary
-infrapatellar
-infraperipherial
-infrapose
-infraposition
-infraprotein
-infrapubian
-infraradular
-infrared
-infrarenal
-infrarenally
-infrarimal
-infrascapular
-infrascapularis
-infrascientific
-infraspinal
-infraspinate
-infraspinatus
-infraspinous
-infrastapedial
-infrasternal
-infrastigmatal
-infrastipular
-infrastructure
-infrasutral
-infratemporal
-infraterrene
-infraterritorial
-infrathoracic
-infratonsillar
-infratracheal
-infratrochanteric
-infratrochlear
-infratubal
-infraturbinal
-infravaginal
-infraventral
-infrequency
-infrequent
-infrequently
-infrigidate
-infrigidation
-infrigidative
-infringe
-infringement
-infringer
-infringible
-infructiferous
-infructuose
-infructuosity
-infructuous
-infructuously
-infrugal
-infrustrable
-infrustrably
-infula
-infumate
-infumated
-infumation
-infundibular
-Infundibulata
-infundibulate
-infundibuliform
-infundibulum
-infuriate
-infuriately
-infuriatingly
-infuriation
-infuscate
-infuscation
-infuse
-infusedly
-infuser
-infusibility
-infusible
-infusibleness
-infusile
-infusion
-infusionism
-infusionist
-infusive
-Infusoria
-infusorial
-infusorian
-infusoriform
-infusorioid
-infusorium
-infusory
-Ing
-ing
-Inga
-Ingaevones
-Ingaevonic
-ingallantry
-ingate
-ingather
-ingatherer
-ingathering
-ingeldable
-ingeminate
-ingemination
-ingenerability
-ingenerable
-ingenerably
-ingenerate
-ingenerately
-ingeneration
-ingenerative
-ingeniosity
-ingenious
-ingeniously
-ingeniousness
-ingenit
-ingenue
-ingenuity
-ingenuous
-ingenuously
-ingenuousness
-Inger
-ingerminate
-ingest
-ingesta
-ingestible
-ingestion
-ingestive
-Inghamite
-Inghilois
-ingiver
-ingiving
-ingle
-inglenook
-ingleside
-inglobate
-inglobe
-inglorious
-ingloriously
-ingloriousness
-inglutition
-ingluvial
-ingluvies
-ingluviitis
-ingoing
-Ingomar
-ingot
-ingotman
-ingraft
-ingrain
-ingrained
-ingrainedly
-ingrainedness
-Ingram
-ingrammaticism
-ingrandize
-ingrate
-ingrateful
-ingratefully
-ingratefulness
-ingrately
-ingratiate
-ingratiating
-ingratiatingly
-ingratiation
-ingratiatory
-ingratitude
-ingravescent
-ingravidate
-ingravidation
-ingredient
-ingress
-ingression
-ingressive
-ingressiveness
-ingross
-ingrow
-ingrown
-ingrownness
-ingrowth
-inguen
-inguinal
-inguinoabdominal
-inguinocrural
-inguinocutaneous
-inguinodynia
-inguinolabial
-inguinoscrotal
-Inguklimiut
-ingulf
-ingulfment
-ingurgitate
-ingurgitation
-Ingush
-inhabit
-inhabitability
-inhabitable
-inhabitancy
-inhabitant
-inhabitation
-inhabitative
-inhabitativeness
-inhabited
-inhabitedness
-inhabiter
-inhabitiveness
-inhabitress
-inhalant
-inhalation
-inhalator
-inhale
-inhalement
-inhalent
-inhaler
-inharmonic
-inharmonical
-inharmonious
-inharmoniously
-inharmoniousness
-inharmony
-inhaul
-inhauler
-inhaust
-inhaustion
-inhearse
-inheaven
-inhere
-inherence
-inherency
-inherent
-inherently
-inherit
-inheritability
-inheritable
-inheritableness
-inheritably
-inheritage
-inheritance
-inheritor
-inheritress
-inheritrice
-inheritrix
-inhesion
-inhiate
-inhibit
-inhibitable
-inhibiter
-inhibition
-inhibitionist
-inhibitive
-inhibitor
-inhibitory
-inhomogeneity
-inhomogeneous
-inhomogeneously
-inhospitable
-inhospitableness
-inhospitably
-inhospitality
-inhuman
-inhumane
-inhumanely
-inhumanism
-inhumanity
-inhumanize
-inhumanly
-inhumanness
-inhumate
-inhumation
-inhumationist
-inhume
-inhumer
-inhumorous
-inhumorously
-Inia
-inial
-inidoneity
-inidoneous
-Inigo
-inimicable
-inimical
-inimicality
-inimically
-inimicalness
-inimitability
-inimitable
-inimitableness
-inimitably
-iniome
-Iniomi
-iniomous
-inion
-iniquitable
-iniquitably
-iniquitous
-iniquitously
-iniquitousness
-iniquity
-inirritability
-inirritable
-inirritant
-inirritative
-inissuable
-initial
-initialer
-initialist
-initialize
-initially
-initiant
-initiary
-initiate
-initiation
-initiative
-initiatively
-initiator
-initiatorily
-initiatory
-initiatress
-initiatrix
-initis
-initive
-inject
-injectable
-injection
-injector
-injelly
-injudicial
-injudicially
-injudicious
-injudiciously
-injudiciousness
-Injun
-injunct
-injunction
-injunctive
-injunctively
-injurable
-injure
-injured
-injuredly
-injuredness
-injurer
-injurious
-injuriously
-injuriousness
-injury
-injustice
-ink
-inkberry
-inkbush
-inken
-inker
-Inkerman
-inket
-inkfish
-inkholder
-inkhorn
-inkhornism
-inkhornist
-inkhornize
-inkhornizer
-inkindle
-inkiness
-inkish
-inkle
-inkless
-inklike
-inkling
-inkmaker
-inkmaking
-inknot
-inkosi
-inkpot
-Inkra
-inkroot
-inks
-inkshed
-inkslinger
-inkslinging
-inkstain
-inkstand
-inkstandish
-inkstone
-inkweed
-inkwell
-inkwood
-inkwriter
-inky
-inlagation
-inlaid
-inlaik
-inlake
-inland
-inlander
-inlandish
-inlaut
-inlaw
-inlawry
-inlay
-inlayer
-inlaying
-inleague
-inleak
-inleakage
-inlet
-inlier
-inlook
-inlooker
-inly
-inlying
-inmate
-inmeats
-inmixture
-inmost
-inn
-innascibility
-innascible
-innate
-innately
-innateness
-innatism
-innative
-innatural
-innaturality
-innaturally
-inneity
-inner
-innerly
-innermore
-innermost
-innermostly
-innerness
-innervate
-innervation
-innervational
-innerve
-inness
-innest
-innet
-innholder
-inning
-inninmorite
-Innisfail
-innkeeper
-innless
-innocence
-innocency
-innocent
-innocently
-innocentness
-innocuity
-innocuous
-innocuously
-innocuousness
-innominable
-innominables
-innominata
-innominate
-innominatum
-innovant
-innovate
-innovation
-innovational
-innovationist
-innovative
-innovator
-innovatory
-innoxious
-innoxiously
-innoxiousness
-innuendo
-Innuit
-innumerability
-innumerable
-innumerableness
-innumerably
-innumerous
-innutrient
-innutrition
-innutritious
-innutritive
-innyard
-Ino
-inobedience
-inobedient
-inobediently
-inoblast
-inobnoxious
-inobscurable
-inobservable
-inobservance
-inobservancy
-inobservant
-inobservantly
-inobservantness
-inobservation
-inobtainable
-inobtrusive
-inobtrusively
-inobtrusiveness
-inobvious
-Inocarpus
-inoccupation
-Inoceramus
-inochondritis
-inochondroma
-inoculability
-inoculable
-inoculant
-inocular
-inoculate
-inoculation
-inoculative
-inoculator
-inoculum
-inocystoma
-inocyte
-Inodes
-inodorous
-inodorously
-inodorousness
-inoepithelioma
-inoffending
-inoffensive
-inoffensively
-inoffensiveness
-inofficial
-inofficially
-inofficiosity
-inofficious
-inofficiously
-inofficiousness
-inogen
-inogenesis
-inogenic
-inogenous
-inoglia
-inohymenitic
-inolith
-inoma
-inominous
-inomyoma
-inomyositis
-inomyxoma
-inone
-inoneuroma
-inoperable
-inoperative
-inoperativeness
-inopercular
-Inoperculata
-inoperculate
-inopinable
-inopinate
-inopinately
-inopine
-inopportune
-inopportunely
-inopportuneness
-inopportunism
-inopportunist
-inopportunity
-inoppressive
-inoppugnable
-inopulent
-inorb
-inorderly
-inordinacy
-inordinary
-inordinate
-inordinately
-inordinateness
-inorganic
-inorganical
-inorganically
-inorganizable
-inorganization
-inorganized
-inoriginate
-inornate
-inosclerosis
-inoscopy
-inosculate
-inosculation
-inosic
-inosin
-inosinic
-inosite
-inositol
-inostensible
-inostensibly
-inotropic
-inower
-inoxidability
-inoxidable
-inoxidizable
-inoxidize
-inparabola
-inpardonable
-inpatient
-inpayment
-inpensioner
-inphase
-inpolygon
-inpolyhedron
-inport
-inpour
-inpush
-input
-inquaintance
-inquartation
-inquest
-inquestual
-inquiet
-inquietation
-inquietly
-inquietness
-inquietude
-Inquilinae
-inquiline
-inquilinism
-inquilinity
-inquilinous
-inquinate
-inquination
-inquirable
-inquirant
-inquiration
-inquire
-inquirendo
-inquirent
-inquirer
-inquiring
-inquiringly
-inquiry
-inquisite
-inquisition
-inquisitional
-inquisitionist
-inquisitive
-inquisitively
-inquisitiveness
-inquisitor
-inquisitorial
-inquisitorially
-inquisitorialness
-inquisitorious
-inquisitorship
-inquisitory
-inquisitress
-inquisitrix
-inquisiturient
-inradius
-inreality
-inrigged
-inrigger
-inrighted
-inring
-inro
-inroad
-inroader
-inroll
-inrooted
-inrub
-inrun
-inrunning
-inruption
-inrush
-insack
-insagacity
-insalivate
-insalivation
-insalubrious
-insalubrity
-insalutary
-insalvability
-insalvable
-insane
-insanely
-insaneness
-insanify
-insanitariness
-insanitary
-insanitation
-insanity
-insapiency
-insapient
-insatiability
-insatiable
-insatiableness
-insatiably
-insatiate
-insatiated
-insatiately
-insatiateness
-insatiety
-insatisfaction
-insatisfactorily
-insaturable
-inscenation
-inscibile
-inscience
-inscient
-inscribable
-inscribableness
-inscribe
-inscriber
-inscript
-inscriptible
-inscription
-inscriptional
-inscriptioned
-inscriptionist
-inscriptionless
-inscriptive
-inscriptively
-inscriptured
-inscroll
-inscrutability
-inscrutable
-inscrutableness
-inscrutables
-inscrutably
-insculp
-insculpture
-insea
-inseam
-insect
-Insecta
-insectan
-insectarium
-insectary
-insectean
-insected
-insecticidal
-insecticide
-insectiferous
-insectiform
-insectifuge
-insectile
-insectine
-insection
-insectival
-Insectivora
-insectivore
-insectivorous
-insectlike
-insectmonger
-insectologer
-insectologist
-insectology
-insectproof
-insecure
-insecurely
-insecureness
-insecurity
-insee
-inseer
-inselberg
-inseminate
-insemination
-insenescible
-insensate
-insensately
-insensateness
-insense
-insensibility
-insensibilization
-insensibilize
-insensibilizer
-insensible
-insensibleness
-insensibly
-insensitive
-insensitiveness
-insensitivity
-insensuous
-insentience
-insentiency
-insentient
-inseparability
-inseparable
-inseparableness
-inseparably
-inseparate
-inseparately
-insequent
-insert
-insertable
-inserted
-inserter
-insertion
-insertional
-insertive
-inserviceable
-insessor
-Insessores
-insessorial
-inset
-insetter
-inseverable
-inseverably
-inshave
-insheathe
-inshell
-inshining
-inship
-inshoe
-inshoot
-inshore
-inside
-insider
-insidiosity
-insidious
-insidiously
-insidiousness
-insight
-insightful
-insigne
-insignia
-insignificance
-insignificancy
-insignificant
-insignificantly
-insimplicity
-insincere
-insincerely
-insincerity
-insinking
-insinuant
-insinuate
-insinuating
-insinuatingly
-insinuation
-insinuative
-insinuatively
-insinuativeness
-insinuator
-insinuatory
-insinuendo
-insipid
-insipidity
-insipidly
-insipidness
-insipience
-insipient
-insipiently
-insist
-insistence
-insistency
-insistent
-insistently
-insister
-insistingly
-insistive
-insititious
-insnare
-insnarement
-insnarer
-insobriety
-insociability
-insociable
-insociableness
-insociably
-insocial
-insocially
-insofar
-insolate
-insolation
-insole
-insolence
-insolency
-insolent
-insolently
-insolentness
-insolid
-insolidity
-insolubility
-insoluble
-insolubleness
-insolubly
-insolvability
-insolvable
-insolvably
-insolvence
-insolvency
-insolvent
-insomnia
-insomniac
-insomnious
-insomnolence
-insomnolency
-insomnolent
-insomuch
-insonorous
-insooth
-insorb
-insorbent
-insouciance
-insouciant
-insouciantly
-insoul
-inspan
-inspeak
-inspect
-inspectability
-inspectable
-inspectingly
-inspection
-inspectional
-inspectioneer
-inspective
-inspector
-inspectoral
-inspectorate
-inspectorial
-inspectorship
-inspectress
-inspectrix
-inspheration
-insphere
-inspirability
-inspirable
-inspirant
-inspiration
-inspirational
-inspirationalism
-inspirationally
-inspirationist
-inspirative
-inspirator
-inspiratory
-inspiratrix
-inspire
-inspired
-inspiredly
-inspirer
-inspiring
-inspiringly
-inspirit
-inspiriter
-inspiriting
-inspiritingly
-inspiritment
-inspirometer
-inspissant
-inspissate
-inspissation
-inspissator
-inspissosis
-inspoke
-inspoken
-inspreith
-instability
-instable
-install
-installant
-installation
-installer
-installment
-instance
-instancy
-instanding
-instant
-instantaneity
-instantaneous
-instantaneously
-instantaneousness
-instanter
-instantial
-instantly
-instantness
-instar
-instate
-instatement
-instaurate
-instauration
-instaurator
-instead
-instealing
-insteam
-insteep
-instellation
-instep
-instigant
-instigate
-instigatingly
-instigation
-instigative
-instigator
-instigatrix
-instill
-instillation
-instillator
-instillatory
-instiller
-instillment
-instinct
-instinctive
-instinctively
-instinctivist
-instinctivity
-instinctual
-instipulate
-institor
-institorial
-institorian
-institory
-institute
-instituter
-institution
-institutional
-institutionalism
-institutionalist
-institutionality
-institutionalization
-institutionalize
-institutionally
-institutionary
-institutionize
-institutive
-institutively
-institutor
-institutress
-institutrix
-instonement
-instratified
-instreaming
-instrengthen
-instressed
-instroke
-instruct
-instructed
-instructedly
-instructedness
-instructer
-instructible
-instruction
-instructional
-instructionary
-instructive
-instructively
-instructiveness
-instructor
-instructorship
-instructress
-instrument
-instrumental
-instrumentalism
-instrumentalist
-instrumentality
-instrumentalize
-instrumentally
-instrumentary
-instrumentate
-instrumentation
-instrumentative
-instrumentist
-instrumentman
-insuavity
-insubduable
-insubjection
-insubmergible
-insubmersible
-insubmission
-insubmissive
-insubordinate
-insubordinately
-insubordinateness
-insubordination
-insubstantial
-insubstantiality
-insubstantiate
-insubstantiation
-insubvertible
-insuccess
-insuccessful
-insucken
-insuetude
-insufferable
-insufferableness
-insufferably
-insufficience
-insufficiency
-insufficient
-insufficiently
-insufflate
-insufflation
-insufflator
-insula
-insulance
-insulant
-insular
-insularism
-insularity
-insularize
-insularly
-insulary
-insulate
-insulated
-insulating
-insulation
-insulator
-insulin
-insulize
-insulse
-insulsity
-insult
-insultable
-insultant
-insultation
-insulter
-insulting
-insultingly
-insultproof
-insunk
-insuperability
-insuperable
-insuperableness
-insuperably
-insupportable
-insupportableness
-insupportably
-insupposable
-insuppressible
-insuppressibly
-insuppressive
-insurability
-insurable
-insurance
-insurant
-insure
-insured
-insurer
-insurge
-insurgence
-insurgency
-insurgent
-insurgentism
-insurgescence
-insurmountability
-insurmountable
-insurmountableness
-insurmountably
-insurpassable
-insurrect
-insurrection
-insurrectional
-insurrectionally
-insurrectionary
-insurrectionism
-insurrectionist
-insurrectionize
-insurrectory
-insusceptibility
-insusceptible
-insusceptibly
-insusceptive
-inswamp
-inswarming
-insweeping
-inswell
-inswept
-inswing
-inswinger
-intabulate
-intact
-intactile
-intactly
-intactness
-intagliated
-intagliation
-intaglio
-intagliotype
-intake
-intaker
-intangibility
-intangible
-intangibleness
-intangibly
-intarissable
-intarsia
-intarsiate
-intarsist
-intastable
-intaxable
-intechnicality
-integer
-integrability
-integrable
-integral
-integrality
-integralization
-integralize
-integrally
-integrand
-integrant
-integraph
-integrate
-integration
-integrative
-integrator
-integrifolious
-integrious
-integriously
-integripalliate
-integrity
-integrodifferential
-integropallial
-Integropallialia
-Integropalliata
-integropalliate
-integument
-integumental
-integumentary
-integumentation
-inteind
-intellect
-intellectation
-intellected
-intellectible
-intellection
-intellective
-intellectively
-intellectual
-intellectualism
-intellectualist
-intellectualistic
-intellectualistically
-intellectuality
-intellectualization
-intellectualize
-intellectualizer
-intellectually
-intellectualness
-intelligence
-intelligenced
-intelligencer
-intelligency
-intelligent
-intelligential
-intelligently
-intelligentsia
-intelligibility
-intelligible
-intelligibleness
-intelligibly
-intelligize
-intemerate
-intemerately
-intemerateness
-intemeration
-intemperable
-intemperably
-intemperament
-intemperance
-intemperate
-intemperately
-intemperateness
-intemperature
-intempestive
-intempestively
-intempestivity
-intemporal
-intemporally
-intenability
-intenable
-intenancy
-intend
-intendance
-intendancy
-intendant
-intendantism
-intendantship
-intended
-intendedly
-intendedness
-intendence
-intender
-intendible
-intending
-intendingly
-intendit
-intendment
-intenerate
-inteneration
-intenible
-intensate
-intensation
-intensative
-intense
-intensely
-intenseness
-intensification
-intensifier
-intensify
-intension
-intensional
-intensionally
-intensitive
-intensity
-intensive
-intensively
-intensiveness
-intent
-intention
-intentional
-intentionalism
-intentionality
-intentionally
-intentioned
-intentionless
-intentive
-intentively
-intentiveness
-intently
-intentness
-inter
-interabsorption
-interacademic
-interaccessory
-interaccuse
-interacinar
-interacinous
-interact
-interaction
-interactional
-interactionism
-interactionist
-interactive
-interactivity
-interadaptation
-interadditive
-interadventual
-interaffiliation
-interagency
-interagent
-interagglutinate
-interagglutination
-interagree
-interagreement
-interalar
-interallied
-interally
-interalveolar
-interambulacral
-interambulacrum
-interamnian
-interangular
-interanimate
-interannular
-interantagonism
-interantennal
-interantennary
-interapophyseal
-interapplication
-interarboration
-interarch
-interarcualis
-interarmy
-interarticular
-interartistic
-interarytenoid
-interassociation
-interassure
-interasteroidal
-interastral
-interatomic
-interatrial
-interattrition
-interaulic
-interaural
-interauricular
-interavailability
-interavailable
-interaxal
-interaxial
-interaxillary
-interaxis
-interbalance
-interbanded
-interbank
-interbedded
-interbelligerent
-interblend
-interbody
-interbonding
-interborough
-interbourse
-interbrachial
-interbrain
-interbranch
-interbranchial
-interbreath
-interbreed
-interbrigade
-interbring
-interbronchial
-intercadence
-intercadent
-intercalare
-intercalarily
-intercalarium
-intercalary
-intercalate
-intercalation
-intercalative
-intercalatory
-intercale
-intercalm
-intercanal
-intercanalicular
-intercapillary
-intercardinal
-intercarotid
-intercarpal
-intercarpellary
-intercarrier
-intercartilaginous
-intercaste
-intercatenated
-intercausative
-intercavernous
-intercede
-interceder
-intercellular
-intercensal
-intercentral
-intercentrum
-intercept
-intercepter
-intercepting
-interception
-interceptive
-interceptor
-interceptress
-intercerebral
-intercession
-intercessional
-intercessionary
-intercessionment
-intercessive
-intercessor
-intercessorial
-intercessory
-interchaff
-interchange
-interchangeability
-interchangeable
-interchangeableness
-interchangeably
-interchanger
-interchapter
-intercharge
-interchase
-intercheck
-interchoke
-interchondral
-interchurch
-Intercidona
-interciliary
-intercilium
-intercircle
-intercirculate
-intercirculation
-intercision
-intercitizenship
-intercity
-intercivic
-intercivilization
-interclash
-interclasp
-interclass
-interclavicle
-interclavicular
-interclerical
-intercloud
-interclub
-intercoastal
-intercoccygeal
-intercoccygean
-intercohesion
-intercollege
-intercollegian
-intercollegiate
-intercolline
-intercolonial
-intercolonially
-intercolonization
-intercolumn
-intercolumnal
-intercolumnar
-intercolumniation
-intercom
-intercombat
-intercombination
-intercombine
-intercome
-intercommission
-intercommon
-intercommonable
-intercommonage
-intercommoner
-intercommunal
-intercommune
-intercommuner
-intercommunicability
-intercommunicable
-intercommunicate
-intercommunication
-intercommunicative
-intercommunicator
-intercommunion
-intercommunity
-intercompany
-intercomparable
-intercompare
-intercomparison
-intercomplexity
-intercomplimentary
-interconal
-interconciliary
-intercondenser
-intercondylar
-intercondylic
-intercondyloid
-interconfessional
-interconfound
-interconnect
-interconnection
-intercontinental
-intercontorted
-intercontradiction
-intercontradictory
-interconversion
-interconvertibility
-interconvertible
-interconvertibly
-intercooler
-intercooling
-intercoracoid
-intercorporate
-intercorpuscular
-intercorrelate
-intercorrelation
-intercortical
-intercosmic
-intercosmically
-intercostal
-intercostally
-intercostobrachial
-intercostohumeral
-intercotylar
-intercounty
-intercourse
-intercoxal
-intercranial
-intercreate
-intercrescence
-intercrinal
-intercrop
-intercross
-intercrural
-intercrust
-intercrystalline
-intercrystallization
-intercrystallize
-intercultural
-interculture
-intercurl
-intercurrence
-intercurrent
-intercurrently
-intercursation
-intercuspidal
-intercutaneous
-intercystic
-interdash
-interdebate
-interdenominational
-interdental
-interdentally
-interdentil
-interdepartmental
-interdepartmentally
-interdepend
-interdependable
-interdependence
-interdependency
-interdependent
-interdependently
-interderivative
-interdespise
-interdestructive
-interdestructiveness
-interdetermination
-interdetermine
-interdevour
-interdict
-interdiction
-interdictive
-interdictor
-interdictory
-interdictum
-interdifferentiation
-interdiffuse
-interdiffusion
-interdiffusive
-interdiffusiveness
-interdigital
-interdigitate
-interdigitation
-interdine
-interdiscal
-interdispensation
-interdistinguish
-interdistrict
-interdivision
-interdome
-interdorsal
-interdrink
-intereat
-interelectrode
-interelectrodic
-interempire
-interenjoy
-interentangle
-interentanglement
-interepidemic
-interepimeral
-interepithelial
-interequinoctial
-interessee
-interest
-interested
-interestedly
-interestedness
-interester
-interesting
-interestingly
-interestingness
-interestless
-interestuarine
-interface
-interfacial
-interfactional
-interfamily
-interfascicular
-interfault
-interfector
-interfederation
-interfemoral
-interfenestral
-interfenestration
-interferant
-interfere
-interference
-interferent
-interferential
-interferer
-interfering
-interferingly
-interferingness
-interferometer
-interferometry
-interferric
-interfertile
-interfertility
-interfibrillar
-interfibrillary
-interfibrous
-interfilamentar
-interfilamentary
-interfilamentous
-interfilar
-interfiltrate
-interfinger
-interflange
-interflashing
-interflow
-interfluence
-interfluent
-interfluminal
-interfluous
-interfluve
-interfluvial
-interflux
-interfold
-interfoliaceous
-interfoliar
-interfoliate
-interfollicular
-interforce
-interfraternal
-interfraternity
-interfret
-interfretted
-interfriction
-interfrontal
-interfruitful
-interfulgent
-interfuse
-interfusion
-interganglionic
-intergenerant
-intergenerating
-intergeneration
-intergential
-intergesture
-intergilt
-interglacial
-interglandular
-interglobular
-interglyph
-intergossip
-intergovernmental
-intergradation
-intergrade
-intergradient
-intergraft
-intergranular
-intergrapple
-intergrave
-intergroupal
-intergrow
-intergrown
-intergrowth
-intergular
-intergyral
-interhabitation
-interhemal
-interhemispheric
-interhostile
-interhuman
-interhyal
-interhybridize
-interim
-interimist
-interimistic
-interimistical
-interimistically
-interimperial
-interincorporation
-interindependence
-interindicate
-interindividual
-interinfluence
-interinhibition
-interinhibitive
-interinsert
-interinsular
-interinsurance
-interinsurer
-interinvolve
-interionic
-interior
-interiority
-interiorize
-interiorly
-interiorness
-interirrigation
-interisland
-interjacence
-interjacency
-interjacent
-interjaculate
-interjaculatory
-interjangle
-interjealousy
-interject
-interjection
-interjectional
-interjectionalize
-interjectionally
-interjectionary
-interjectionize
-interjectiveness
-interjector
-interjectorily
-interjectory
-interjectural
-interjoin
-interjoist
-interjudgment
-interjunction
-interkinesis
-interkinetic
-interknit
-interknot
-interknow
-interknowledge
-interlaboratory
-interlace
-interlaced
-interlacedly
-interlacement
-interlacery
-interlacustrine
-interlaid
-interlake
-interlamellar
-interlamellation
-interlaminar
-interlaminate
-interlamination
-interlanguage
-interlap
-interlapse
-interlard
-interlardation
-interlardment
-interlatitudinal
-interlaudation
-interlay
-interleaf
-interleague
-interleave
-interleaver
-interlibel
-interlibrary
-interlie
-interligamentary
-interligamentous
-interlight
-interlimitation
-interline
-interlineal
-interlineally
-interlinear
-interlinearily
-interlinearly
-interlineary
-interlineate
-interlineation
-interlinement
-interliner
-Interlingua
-interlingual
-interlinguist
-interlinguistic
-interlining
-interlink
-interloan
-interlobar
-interlobate
-interlobular
-interlocal
-interlocally
-interlocate
-interlocation
-interlock
-interlocker
-interlocular
-interloculus
-interlocution
-interlocutive
-interlocutor
-interlocutorily
-interlocutory
-interlocutress
-interlocutrice
-interlocutrix
-interloop
-interlope
-interloper
-interlot
-interlucation
-interlucent
-interlude
-interluder
-interludial
-interlunar
-interlunation
-interlying
-intermalleolar
-intermammary
-intermammillary
-intermandibular
-intermanorial
-intermarginal
-intermarine
-intermarriage
-intermarriageable
-intermarry
-intermason
-intermastoid
-intermat
-intermatch
-intermaxilla
-intermaxillar
-intermaxillary
-intermaze
-intermeasurable
-intermeasure
-intermeddle
-intermeddlement
-intermeddler
-intermeddlesome
-intermeddlesomeness
-intermeddling
-intermeddlingly
-intermediacy
-intermediae
-intermedial
-intermediary
-intermediate
-intermediately
-intermediateness
-intermediation
-intermediator
-intermediatory
-intermedium
-intermedius
-intermeet
-intermelt
-intermembral
-intermembranous
-intermeningeal
-intermenstrual
-intermenstruum
-interment
-intermental
-intermention
-intermercurial
-intermesenterial
-intermesenteric
-intermesh
-intermessage
-intermessenger
-intermetacarpal
-intermetallic
-intermetameric
-intermetatarsal
-intermew
-intermewed
-intermewer
-intermezzo
-intermigration
-interminability
-interminable
-interminableness
-interminably
-interminant
-interminate
-intermine
-intermingle
-intermingledom
-interminglement
-interminister
-interministerial
-interministerium
-intermission
-intermissive
-intermit
-intermitted
-intermittedly
-intermittence
-intermittency
-intermittent
-intermittently
-intermitter
-intermitting
-intermittingly
-intermix
-intermixedly
-intermixtly
-intermixture
-intermobility
-intermodification
-intermodillion
-intermodulation
-intermolar
-intermolecular
-intermomentary
-intermontane
-intermorainic
-intermotion
-intermountain
-intermundane
-intermundial
-intermundian
-intermundium
-intermunicipal
-intermunicipality
-intermural
-intermuscular
-intermutation
-intermutual
-intermutually
-intermutule
-intern
-internal
-internality
-internalization
-internalize
-internally
-internalness
-internals
-internarial
-internasal
-internation
-international
-internationalism
-internationalist
-internationality
-internationalization
-internationalize
-internationally
-interneciary
-internecinal
-internecine
-internecion
-internecive
-internee
-internetted
-interneural
-interneuronic
-internidal
-internist
-internment
-internobasal
-internodal
-internode
-internodial
-internodian
-internodium
-internodular
-internship
-internuclear
-internuncial
-internunciary
-internunciatory
-internuncio
-internuncioship
-internuncius
-internuptial
-interobjective
-interoceanic
-interoceptive
-interoceptor
-interocular
-interoffice
-interolivary
-interopercle
-interopercular
-interoperculum
-interoptic
-interorbital
-interorbitally
-interoscillate
-interosculant
-interosculate
-interosculation
-interosseal
-interosseous
-interownership
-interpage
-interpalatine
-interpalpebral
-interpapillary
-interparenchymal
-interparental
-interparenthetical
-interparenthetically
-interparietal
-interparietale
-interparliament
-interparliamentary
-interparoxysmal
-interparty
-interpause
-interpave
-interpeal
-interpectoral
-interpeduncular
-interpel
-interpellant
-interpellate
-interpellation
-interpellator
-interpenetrable
-interpenetrant
-interpenetrate
-interpenetration
-interpenetrative
-interpenetratively
-interpermeate
-interpersonal
-interpervade
-interpetaloid
-interpetiolar
-interpetiolary
-interphalangeal
-interphase
-interphone
-interpiece
-interpilaster
-interpilastering
-interplacental
-interplait
-interplanetary
-interplant
-interplanting
-interplay
-interplea
-interplead
-interpleader
-interpledge
-interpleural
-interplical
-interplicate
-interplication
-interplight
-interpoint
-interpolable
-interpolar
-interpolary
-interpolate
-interpolater
-interpolation
-interpolative
-interpolatively
-interpolator
-interpole
-interpolitical
-interpolity
-interpollinate
-interpolymer
-interpone
-interportal
-interposable
-interposal
-interpose
-interposer
-interposing
-interposingly
-interposition
-interposure
-interpour
-interprater
-interpressure
-interpret
-interpretability
-interpretable
-interpretableness
-interpretably
-interpretament
-interpretation
-interpretational
-interpretative
-interpretatively
-interpreter
-interpretership
-interpretive
-interpretively
-interpretorial
-interpretress
-interprismatic
-interproduce
-interprofessional
-interproglottidal
-interproportional
-interprotoplasmic
-interprovincial
-interproximal
-interproximate
-interpterygoid
-interpubic
-interpulmonary
-interpunct
-interpunction
-interpunctuate
-interpunctuation
-interpupillary
-interquarrel
-interquarter
-interrace
-interracial
-interracialism
-interradial
-interradially
-interradiate
-interradiation
-interradium
-interradius
-interrailway
-interramal
-interramicorn
-interramification
-interreceive
-interreflection
-interregal
-interregimental
-interregional
-interregna
-interregnal
-interregnum
-interreign
-interrelate
-interrelated
-interrelatedly
-interrelatedness
-interrelation
-interrelationship
-interreligious
-interrenal
-interrenalism
-interrepellent
-interrepulsion
-interrer
-interresponsibility
-interresponsible
-interreticular
-interreticulation
-interrex
-interrhyme
-interright
-interriven
-interroad
-interrogability
-interrogable
-interrogant
-interrogate
-interrogatedness
-interrogatee
-interrogatingly
-interrogation
-interrogational
-interrogative
-interrogatively
-interrogator
-interrogatorily
-interrogatory
-interrogatrix
-interrogee
-interroom
-interrule
-interrun
-interrupt
-interrupted
-interruptedly
-interruptedness
-interrupter
-interruptible
-interrupting
-interruptingly
-interruption
-interruptive
-interruptively
-interruptor
-interruptory
-intersale
-intersalute
-interscapilium
-interscapular
-interscapulum
-interscene
-interscholastic
-interschool
-interscience
-interscribe
-interscription
-interseaboard
-interseamed
-intersect
-intersectant
-intersection
-intersectional
-intersegmental
-interseminal
-intersentimental
-interseptal
-intersertal
-intersesamoid
-intersession
-intersessional
-interset
-intersex
-intersexual
-intersexualism
-intersexuality
-intershade
-intershifting
-intershock
-intershoot
-intershop
-intersidereal
-intersituate
-intersocial
-intersocietal
-intersociety
-intersole
-intersolubility
-intersoluble
-intersomnial
-intersomnious
-intersonant
-intersow
-interspace
-interspatial
-interspatially
-interspeaker
-interspecial
-interspecific
-interspersal
-intersperse
-interspersedly
-interspersion
-interspheral
-intersphere
-interspicular
-interspinal
-interspinalis
-interspinous
-interspiral
-interspiration
-intersporal
-intersprinkle
-intersqueeze
-interstadial
-interstage
-interstaminal
-interstapedial
-interstate
-interstation
-interstellar
-interstellary
-intersterile
-intersterility
-intersternal
-interstice
-intersticed
-interstimulate
-interstimulation
-interstitial
-interstitially
-interstitious
-interstratification
-interstratify
-interstreak
-interstream
-interstreet
-interstrial
-interstriation
-interstrive
-intersubjective
-intersubsistence
-intersubstitution
-intersuperciliary
-intersusceptation
-intersystem
-intersystematical
-intertalk
-intertangle
-intertanglement
-intertarsal
-interteam
-intertentacular
-intertergal
-interterminal
-interterritorial
-intertessellation
-intertexture
-interthing
-interthreaded
-interthronging
-intertidal
-intertie
-intertill
-intertillage
-intertinge
-intertissued
-intertone
-intertongue
-intertonic
-intertouch
-intertown
-intertrabecular
-intertrace
-intertrade
-intertrading
-intertraffic
-intertragian
-intertransformability
-intertransformable
-intertransmissible
-intertransmission
-intertranspicuous
-intertransversal
-intertransversalis
-intertransversary
-intertransverse
-intertrappean
-intertribal
-intertriginous
-intertriglyph
-intertrigo
-intertrinitarian
-intertrochanteric
-intertropic
-intertropical
-intertropics
-intertrude
-intertuberal
-intertubercular
-intertubular
-intertwin
-intertwine
-intertwinement
-intertwining
-intertwiningly
-intertwist
-intertwistingly
-Intertype
-interungular
-interungulate
-interunion
-interuniversity
-interurban
-interureteric
-intervaginal
-interval
-intervale
-intervalley
-intervallic
-intervallum
-intervalvular
-intervarietal
-intervary
-intervascular
-intervein
-interveinal
-intervenant
-intervene
-intervener
-intervenience
-interveniency
-intervenient
-intervenium
-intervention
-interventional
-interventionism
-interventionist
-interventive
-interventor
-interventral
-interventralia
-interventricular
-intervenular
-interverbal
-interversion
-intervert
-intervertebra
-intervertebral
-intervertebrally
-intervesicular
-interview
-interviewable
-interviewee
-interviewer
-intervillous
-intervisibility
-intervisible
-intervisit
-intervisitation
-intervital
-intervocal
-intervocalic
-intervolute
-intervolution
-intervolve
-interwar
-interweave
-interweavement
-interweaver
-interweaving
-interweavingly
-interwed
-interweld
-interwhiff
-interwhile
-interwhistle
-interwind
-interwish
-interword
-interwork
-interworks
-interworld
-interworry
-interwound
-interwove
-interwoven
-interwovenly
-interwrap
-interwreathe
-interwrought
-interxylary
-interzonal
-interzone
-interzooecial
-interzygapophysial
-intestable
-intestacy
-intestate
-intestation
-intestinal
-intestinally
-intestine
-intestineness
-intestiniform
-intestinovesical
-intext
-intextine
-intexture
-inthrall
-inthrallment
-inthrong
-inthronistic
-inthronization
-inthronize
-inthrow
-inthrust
-intil
-intima
-intimacy
-intimal
-intimate
-intimately
-intimateness
-intimater
-intimation
-intimidate
-intimidation
-intimidator
-intimidatory
-intimidity
-intimity
-intinction
-intine
-intitule
-into
-intoed
-intolerability
-intolerable
-intolerableness
-intolerably
-intolerance
-intolerancy
-intolerant
-intolerantly
-intolerantness
-intolerated
-intolerating
-intoleration
-intonable
-intonate
-intonation
-intonator
-intone
-intonement
-intoner
-intoothed
-intorsion
-intort
-intortillage
-intown
-intoxation
-intoxicable
-intoxicant
-intoxicate
-intoxicated
-intoxicatedly
-intoxicatedness
-intoxicating
-intoxicatingly
-intoxication
-intoxicative
-intoxicator
-intrabiontic
-intrabranchial
-intrabred
-intrabronchial
-intrabuccal
-intracalicular
-intracanalicular
-intracanonical
-intracapsular
-intracardiac
-intracardial
-intracarpal
-intracarpellary
-intracartilaginous
-intracellular
-intracellularly
-intracephalic
-intracerebellar
-intracerebral
-intracerebrally
-intracervical
-intrachordal
-intracistern
-intracity
-intraclitelline
-intracloacal
-intracoastal
-intracoelomic
-intracolic
-intracollegiate
-intracommunication
-intracompany
-intracontinental
-intracorporeal
-intracorpuscular
-intracortical
-intracosmic
-intracosmical
-intracosmically
-intracostal
-intracranial
-intracranially
-intractability
-intractable
-intractableness
-intractably
-intractile
-intracutaneous
-intracystic
-intrada
-intradepartmental
-intradermal
-intradermally
-intradermic
-intradermically
-intradermo
-intradistrict
-intradivisional
-intrados
-intraduodenal
-intradural
-intraecclesiastical
-intraepiphyseal
-intraepithelial
-intrafactory
-intrafascicular
-intrafissural
-intrafistular
-intrafoliaceous
-intraformational
-intrafusal
-intragastric
-intragemmal
-intraglacial
-intraglandular
-intraglobular
-intragroup
-intragroupal
-intragyral
-intrahepatic
-intrahyoid
-intraimperial
-intrait
-intrajugular
-intralamellar
-intralaryngeal
-intralaryngeally
-intraleukocytic
-intraligamentary
-intraligamentous
-intralingual
-intralobar
-intralobular
-intralocular
-intralogical
-intralumbar
-intramammary
-intramarginal
-intramastoid
-intramatrical
-intramatrically
-intramedullary
-intramembranous
-intrameningeal
-intramental
-intrametropolitan
-intramolecular
-intramontane
-intramorainic
-intramundane
-intramural
-intramuralism
-intramuscular
-intramuscularly
-intramyocardial
-intranarial
-intranasal
-intranatal
-intranational
-intraneous
-intraneural
-intranidal
-intranquil
-intranquillity
-intranscalency
-intranscalent
-intransferable
-intransformable
-intransfusible
-intransgressible
-intransient
-intransigency
-intransigent
-intransigentism
-intransigentist
-intransigently
-intransitable
-intransitive
-intransitively
-intransitiveness
-intransitivity
-intranslatable
-intransmissible
-intransmutability
-intransmutable
-intransparency
-intransparent
-intrant
-intranuclear
-intraoctave
-intraocular
-intraoral
-intraorbital
-intraorganization
-intraossal
-intraosseous
-intraosteal
-intraovarian
-intrapair
-intraparenchymatous
-intraparietal
-intraparochial
-intraparty
-intrapelvic
-intrapericardiac
-intrapericardial
-intraperineal
-intraperiosteal
-intraperitoneal
-intraperitoneally
-intrapetiolar
-intraphilosophic
-intrapial
-intraplacental
-intraplant
-intrapleural
-intrapolar
-intrapontine
-intraprostatic
-intraprotoplasmic
-intrapsychic
-intrapsychical
-intrapsychically
-intrapulmonary
-intrapyretic
-intrarachidian
-intrarectal
-intrarelation
-intrarenal
-intraretinal
-intrarhachidian
-intraschool
-intrascrotal
-intrasegmental
-intraselection
-intrasellar
-intraseminal
-intraseptal
-intraserous
-intrashop
-intraspecific
-intraspinal
-intrastate
-intrastromal
-intrasusception
-intrasynovial
-intratarsal
-intratelluric
-intraterritorial
-intratesticular
-intrathecal
-intrathoracic
-intrathyroid
-intratomic
-intratonsillar
-intratrabecular
-intratracheal
-intratracheally
-intratropical
-intratubal
-intratubular
-intratympanic
-intravaginal
-intravalvular
-intravasation
-intravascular
-intravenous
-intravenously
-intraventricular
-intraverbal
-intraversable
-intravertebral
-intravertebrally
-intravesical
-intravital
-intravitelline
-intravitreous
-intraxylary
-intreat
-intrench
-intrenchant
-intrencher
-intrenchment
-intrepid
-intrepidity
-intrepidly
-intrepidness
-intricacy
-intricate
-intricately
-intricateness
-intrication
-intrigant
-intrigue
-intrigueproof
-intriguer
-intriguery
-intriguess
-intriguing
-intriguingly
-intrine
-intrinse
-intrinsic
-intrinsical
-intrinsicality
-intrinsically
-intrinsicalness
-introactive
-introceptive
-introconversion
-introconvertibility
-introconvertible
-introdden
-introduce
-introducee
-introducement
-introducer
-introducible
-introduction
-introductive
-introductively
-introductor
-introductorily
-introductoriness
-introductory
-introductress
-introflex
-introflexion
-introgression
-introgressive
-introinflection
-introit
-introitus
-introject
-introjection
-introjective
-intromissibility
-intromissible
-intromission
-intromissive
-intromit
-intromittence
-intromittent
-intromitter
-intropression
-intropulsive
-introreception
-introrsal
-introrse
-introrsely
-introsensible
-introsentient
-introspect
-introspectable
-introspection
-introspectional
-introspectionism
-introspectionist
-introspective
-introspectively
-introspectiveness
-introspectivism
-introspectivist
-introspector
-introsuction
-introsuscept
-introsusception
-introthoracic
-introtraction
-introvenient
-introverse
-introversibility
-introversible
-introversion
-introversive
-introversively
-introvert
-introverted
-introvertive
-introvision
-introvolution
-intrudance
-intrude
-intruder
-intruding
-intrudingly
-intrudress
-intruse
-intrusion
-intrusional
-intrusionism
-intrusionist
-intrusive
-intrusively
-intrusiveness
-intrust
-intubate
-intubation
-intubationist
-intubator
-intube
-intue
-intuent
-intuicity
-intuit
-intuitable
-intuition
-intuitional
-intuitionalism
-intuitionalist
-intuitionally
-intuitionism
-intuitionist
-intuitionistic
-intuitionless
-intuitive
-intuitively
-intuitiveness
-intuitivism
-intuitivist
-intumesce
-intumescence
-intumescent
-inturbidate
-inturn
-inturned
-inturning
-intussuscept
-intussusception
-intussusceptive
-intwist
-inula
-inulaceous
-inulase
-inulin
-inuloid
-inumbrate
-inumbration
-inunct
-inunction
-inunctum
-inunctuosity
-inunctuous
-inundable
-inundant
-inundate
-inundation
-inundator
-inundatory
-inunderstandable
-inurbane
-inurbanely
-inurbaneness
-inurbanity
-inure
-inured
-inuredness
-inurement
-inurn
-inusitate
-inusitateness
-inusitation
-inustion
-inutile
-inutilely
-inutility
-inutilized
-inutterable
-invaccinate
-invaccination
-invadable
-invade
-invader
-invaginable
-invaginate
-invagination
-invalescence
-invalid
-invalidate
-invalidation
-invalidator
-invalidcy
-invalidhood
-invalidish
-invalidism
-invalidity
-invalidly
-invalidness
-invalidship
-invalorous
-invaluable
-invaluableness
-invaluably
-invalued
-Invar
-invariability
-invariable
-invariableness
-invariably
-invariance
-invariancy
-invariant
-invariantive
-invariantively
-invariantly
-invaried
-invasion
-invasionist
-invasive
-invecked
-invected
-invection
-invective
-invectively
-invectiveness
-invectivist
-invector
-inveigh
-inveigher
-inveigle
-inveiglement
-inveigler
-inveil
-invein
-invendibility
-invendible
-invendibleness
-invenient
-invent
-inventable
-inventary
-inventer
-inventful
-inventibility
-inventible
-inventibleness
-invention
-inventional
-inventionless
-inventive
-inventively
-inventiveness
-inventor
-inventoriable
-inventorial
-inventorially
-inventory
-inventress
-inventurous
-inveracious
-inveracity
-inverisimilitude
-inverity
-inverminate
-invermination
-invernacular
-Inverness
-inversable
-inversatile
-inverse
-inversed
-inversedly
-inversely
-inversion
-inversionist
-inversive
-invert
-invertase
-invertebracy
-invertebral
-Invertebrata
-invertebrate
-invertebrated
-inverted
-invertedly
-invertend
-inverter
-invertibility
-invertible
-invertile
-invertin
-invertive
-invertor
-invest
-investable
-investible
-investigable
-investigatable
-investigate
-investigating
-investigatingly
-investigation
-investigational
-investigative
-investigator
-investigatorial
-investigatory
-investitive
-investitor
-investiture
-investment
-investor
-inveteracy
-inveterate
-inveterately
-inveterateness
-inviability
-invictive
-invidious
-invidiously
-invidiousness
-invigilance
-invigilancy
-invigilation
-invigilator
-invigor
-invigorant
-invigorate
-invigorating
-invigoratingly
-invigoratingness
-invigoration
-invigorative
-invigoratively
-invigorator
-invinate
-invination
-invincibility
-invincible
-invincibleness
-invincibly
-inviolability
-inviolable
-inviolableness
-inviolably
-inviolacy
-inviolate
-inviolated
-inviolately
-inviolateness
-invirile
-invirility
-invirtuate
-inviscate
-inviscation
-inviscid
-inviscidity
-invised
-invisibility
-invisible
-invisibleness
-invisibly
-invitable
-invital
-invitant
-invitation
-invitational
-invitatory
-invite
-invitee
-invitement
-inviter
-invitiate
-inviting
-invitingly
-invitingness
-invitress
-invitrifiable
-invivid
-invocable
-invocant
-invocate
-invocation
-invocative
-invocator
-invocatory
-invoice
-invoke
-invoker
-involatile
-involatility
-involucel
-involucellate
-involucellated
-involucral
-involucrate
-involucre
-involucred
-involucriform
-involucrum
-involuntarily
-involuntariness
-involuntary
-involute
-involuted
-involutedly
-involutely
-involution
-involutional
-involutionary
-involutorial
-involutory
-involve
-involved
-involvedly
-involvedness
-involvement
-involvent
-involver
-invulnerability
-invulnerable
-invulnerableness
-invulnerably
-invultuation
-inwale
-inwall
-inwandering
-inward
-inwardly
-inwardness
-inwards
-inweave
-inwedged
-inweed
-inweight
-inwick
-inwind
-inwit
-inwith
-inwood
-inwork
-inworn
-inwound
-inwoven
-inwrap
-inwrapment
-inwreathe
-inwrit
-inwrought
-inyoite
-inyoke
-Io
-io
-Iodamoeba
-iodate
-iodation
-iodhydrate
-iodhydric
-iodhydrin
-iodic
-iodide
-iodiferous
-iodinate
-iodination
-iodine
-iodinium
-iodinophil
-iodinophilic
-iodinophilous
-iodism
-iodite
-iodization
-iodize
-iodizer
-iodo
-iodobehenate
-iodobenzene
-iodobromite
-iodocasein
-iodochloride
-iodochromate
-iodocresol
-iododerma
-iodoethane
-iodoform
-iodogallicin
-iodohydrate
-iodohydric
-iodohydrin
-iodol
-iodomercurate
-iodomercuriate
-iodomethane
-iodometric
-iodometrical
-iodometry
-iodonium
-iodopsin
-iodoso
-iodosobenzene
-iodospongin
-iodotannic
-iodotherapy
-iodothyrin
-iodous
-iodoxy
-iodoxybenzene
-iodyrite
-iolite
-ion
-Ione
-Ioni
-Ionian
-Ionic
-ionic
-Ionicism
-Ionicization
-Ionicize
-Ionidium
-Ionism
-Ionist
-ionium
-ionizable
-Ionization
-ionization
-Ionize
-ionize
-ionizer
-ionogen
-ionogenic
-ionone
-Ionornis
-ionosphere
-ionospheric
-Ionoxalis
-iontophoresis
-Ioskeha
-iota
-iotacism
-iotacismus
-iotacist
-iotization
-iotize
-Iowa
-Iowan
-Ipalnemohuani
-ipecac
-ipecacuanha
-ipecacuanhic
-Iphimedia
-Iphis
-ipid
-Ipidae
-ipil
-ipomea
-Ipomoea
-ipomoein
-ipseand
-ipsedixitish
-ipsedixitism
-ipsedixitist
-ipseity
-ipsilateral
-Ira
-iracund
-iracundity
-iracundulous
-irade
-Iran
-Irani
-Iranian
-Iranic
-Iranism
-Iranist
-Iranize
-Iraq
-Iraqi
-Iraqian
-irascent
-irascibility
-irascible
-irascibleness
-irascibly
-irate
-irately
-ire
-ireful
-irefully
-irefulness
-Irelander
-ireless
-Irena
-irenarch
-Irene
-irene
-irenic
-irenical
-irenically
-irenicism
-irenicist
-irenicon
-irenics
-irenicum
-Iresine
-Irfan
-Irgun
-Irgunist
-irian
-Iriartea
-Iriarteaceae
-Iricism
-Iricize
-irid
-Iridaceae
-iridaceous
-iridadenosis
-iridal
-iridalgia
-iridate
-iridauxesis
-iridectome
-iridectomize
-iridectomy
-iridectropium
-iridemia
-iridencleisis
-iridentropium
-irideous
-irideremia
-irides
-iridesce
-iridescence
-iridescency
-iridescent
-iridescently
-iridial
-iridian
-iridiate
-iridic
-iridical
-iridin
-iridine
-iridiocyte
-iridiophore
-iridioplatinum
-iridious
-iridite
-iridium
-iridization
-iridize
-iridoavulsion
-iridocapsulitis
-iridocele
-iridoceratitic
-iridochoroiditis
-iridocoloboma
-iridoconstrictor
-iridocyclitis
-iridocyte
-iridodesis
-iridodiagnosis
-iridodialysis
-iridodonesis
-iridokinesia
-iridomalacia
-iridomotor
-Iridomyrmex
-iridoncus
-iridoparalysis
-iridophore
-iridoplegia
-iridoptosis
-iridopupillary
-iridorhexis
-iridosclerotomy
-iridosmine
-iridosmium
-iridotasis
-iridotome
-iridotomy
-iris
-irisated
-irisation
-iriscope
-irised
-Irish
-Irisher
-Irishian
-Irishism
-Irishize
-Irishly
-Irishman
-Irishness
-Irishry
-Irishwoman
-Irishy
-irisin
-irislike
-irisroot
-iritic
-iritis
-irk
-irksome
-irksomely
-irksomeness
-Irma
-Iroha
-irok
-iroko
-iron
-ironback
-ironbark
-ironbound
-ironbush
-ironclad
-irone
-ironer
-ironfisted
-ironflower
-ironhanded
-ironhandedly
-ironhandedness
-ironhard
-ironhead
-ironheaded
-ironhearted
-ironheartedly
-ironheartedness
-ironical
-ironically
-ironicalness
-ironice
-ironish
-ironism
-ironist
-ironize
-ironless
-ironlike
-ironly
-ironmaker
-ironmaking
-ironman
-ironmaster
-ironmonger
-ironmongering
-ironmongery
-ironness
-ironshod
-ironshot
-ironside
-ironsided
-ironsides
-ironsmith
-ironstone
-ironware
-ironweed
-ironwood
-ironwork
-ironworked
-ironworker
-ironworking
-ironworks
-ironwort
-irony
-Iroquoian
-Iroquois
-Irpex
-irradiance
-irradiancy
-irradiant
-irradiate
-irradiated
-irradiatingly
-irradiation
-irradiative
-irradiator
-irradicable
-irradicate
-irrarefiable
-irrationability
-irrationable
-irrationably
-irrational
-irrationalism
-irrationalist
-irrationalistic
-irrationality
-irrationalize
-irrationally
-irrationalness
-irreality
-irrealizable
-irrebuttable
-irreceptive
-irreceptivity
-irreciprocal
-irreciprocity
-irreclaimability
-irreclaimable
-irreclaimableness
-irreclaimably
-irreclaimed
-irrecognition
-irrecognizability
-irrecognizable
-irrecognizably
-irrecognizant
-irrecollection
-irreconcilability
-irreconcilable
-irreconcilableness
-irreconcilably
-irreconcile
-irreconcilement
-irreconciliability
-irreconciliable
-irreconciliableness
-irreconciliably
-irreconciliation
-irrecordable
-irrecoverable
-irrecoverableness
-irrecoverably
-irrecusable
-irrecusably
-irredeemability
-irredeemable
-irredeemableness
-irredeemably
-irredeemed
-irredenta
-irredential
-Irredentism
-Irredentist
-irredressibility
-irredressible
-irredressibly
-irreducibility
-irreducible
-irreducibleness
-irreducibly
-irreductibility
-irreductible
-irreduction
-irreferable
-irreflection
-irreflective
-irreflectively
-irreflectiveness
-irreflexive
-irreformability
-irreformable
-irrefragability
-irrefragable
-irrefragableness
-irrefragably
-irrefrangibility
-irrefrangible
-irrefrangibleness
-irrefrangibly
-irrefusable
-irrefutability
-irrefutable
-irrefutableness
-irrefutably
-irregardless
-irregeneracy
-irregenerate
-irregeneration
-irregular
-irregularism
-irregularist
-irregularity
-irregularize
-irregularly
-irregularness
-irregulate
-irregulated
-irregulation
-irrelate
-irrelated
-irrelation
-irrelative
-irrelatively
-irrelativeness
-irrelevance
-irrelevancy
-irrelevant
-irrelevantly
-irreliability
-irrelievable
-irreligion
-irreligionism
-irreligionist
-irreligionize
-irreligiosity
-irreligious
-irreligiously
-irreligiousness
-irreluctant
-irremeable
-irremeably
-irremediable
-irremediableness
-irremediably
-irrememberable
-irremissibility
-irremissible
-irremissibleness
-irremissibly
-irremission
-irremissive
-irremovability
-irremovable
-irremovableness
-irremovably
-irremunerable
-irrenderable
-irrenewable
-irrenunciable
-irrepair
-irrepairable
-irreparability
-irreparable
-irreparableness
-irreparably
-irrepassable
-irrepealability
-irrepealable
-irrepealableness
-irrepealably
-irrepentance
-irrepentant
-irrepentantly
-irreplaceable
-irreplaceably
-irrepleviable
-irreplevisable
-irreportable
-irreprehensible
-irreprehensibleness
-irreprehensibly
-irrepresentable
-irrepresentableness
-irrepressibility
-irrepressible
-irrepressibleness
-irrepressibly
-irrepressive
-irreproachability
-irreproachable
-irreproachableness
-irreproachably
-irreproducible
-irreproductive
-irreprovable
-irreprovableness
-irreprovably
-irreptitious
-irrepublican
-irresilient
-irresistance
-irresistibility
-irresistible
-irresistibleness
-irresistibly
-irresoluble
-irresolubleness
-irresolute
-irresolutely
-irresoluteness
-irresolution
-irresolvability
-irresolvable
-irresolvableness
-irresolved
-irresolvedly
-irresonance
-irresonant
-irrespectability
-irrespectable
-irrespectful
-irrespective
-irrespectively
-irrespirable
-irrespondence
-irresponsibility
-irresponsible
-irresponsibleness
-irresponsibly
-irresponsive
-irresponsiveness
-irrestrainable
-irrestrainably
-irrestrictive
-irresultive
-irresuscitable
-irresuscitably
-irretention
-irretentive
-irretentiveness
-irreticence
-irreticent
-irretraceable
-irretraceably
-irretractable
-irretractile
-irretrievability
-irretrievable
-irretrievableness
-irretrievably
-irrevealable
-irrevealably
-irreverence
-irreverend
-irreverendly
-irreverent
-irreverential
-irreverentialism
-irreverentially
-irreverently
-irreversibility
-irreversible
-irreversibleness
-irreversibly
-irrevertible
-irreviewable
-irrevisable
-irrevocability
-irrevocable
-irrevocableness
-irrevocably
-irrevoluble
-irrigable
-irrigably
-irrigant
-irrigate
-irrigation
-irrigational
-irrigationist
-irrigative
-irrigator
-irrigatorial
-irrigatory
-irriguous
-irriguousness
-irrision
-irrisor
-Irrisoridae
-irrisory
-irritability
-irritable
-irritableness
-irritably
-irritament
-irritancy
-irritant
-irritate
-irritatedly
-irritating
-irritatingly
-irritation
-irritative
-irritativeness
-irritator
-irritatory
-Irritila
-irritomotile
-irritomotility
-irrorate
-irrotational
-irrotationally
-irrubrical
-irrupt
-irruptible
-irruption
-irruptive
-irruptively
-Irvin
-Irving
-Irvingesque
-Irvingiana
-Irvingism
-Irvingite
-Irwin
-is
-Isaac
-Isabel
-isabelina
-isabelita
-Isabella
-Isabelle
-Isabelline
-isabnormal
-isaconitine
-isacoustic
-isadelphous
-Isadora
-isagoge
-isagogic
-isagogical
-isagogically
-isagogics
-isagon
-Isaiah
-Isaian
-isallobar
-isallotherm
-isamine
-Isander
-isandrous
-isanemone
-isanomal
-isanomalous
-isanthous
-isapostolic
-Isaria
-isarioid
-isatate
-isatic
-isatide
-isatin
-isatinic
-Isatis
-isatogen
-isatogenic
-Isaurian
-Isawa
-isazoxy
-isba
-Iscariot
-Iscariotic
-Iscariotical
-Iscariotism
-ischemia
-ischemic
-ischiac
-ischiadic
-ischiadicus
-ischial
-ischialgia
-ischialgic
-ischiatic
-ischidrosis
-ischioanal
-ischiobulbar
-ischiocapsular
-ischiocaudal
-ischiocavernosus
-ischiocavernous
-ischiocele
-ischiocerite
-ischiococcygeal
-ischiofemoral
-ischiofibular
-ischioiliac
-ischioneuralgia
-ischioperineal
-ischiopodite
-ischiopubic
-ischiopubis
-ischiorectal
-ischiorrhogic
-ischiosacral
-ischiotibial
-ischiovaginal
-ischiovertebral
-ischium
-ischocholia
-ischuretic
-ischuria
-ischury
-Ischyodus
-Isegrim
-isenergic
-isentropic
-isepiptesial
-isepiptesis
-iserine
-iserite
-isethionate
-isethionic
-Iseum
-Isfahan
-Ishmael
-Ishmaelite
-Ishmaelitic
-Ishmaelitish
-Ishmaelitism
-ishpingo
-ishshakku
-Isiac
-Isiacal
-Isidae
-isidiiferous
-isidioid
-isidiophorous
-isidiose
-isidium
-isidoid
-Isidore
-Isidorian
-Isidoric
-Isinai
-isindazole
-isinglass
-Isis
-Islam
-Islamic
-Islamism
-Islamist
-Islamistic
-Islamite
-Islamitic
-Islamitish
-Islamization
-Islamize
-island
-islander
-islandhood
-islandic
-islandish
-islandless
-islandlike
-islandman
-islandress
-islandry
-islandy
-islay
-isle
-isleless
-islesman
-islet
-Isleta
-isleted
-isleward
-islot
-ism
-Ismaelism
-Ismaelite
-Ismaelitic
-Ismaelitical
-Ismaelitish
-Ismaili
-Ismailian
-Ismailite
-ismal
-ismatic
-ismatical
-ismaticalness
-ismdom
-ismy
-Isnardia
-iso
-isoabnormal
-isoagglutination
-isoagglutinative
-isoagglutinin
-isoagglutinogen
-isoalantolactone
-isoallyl
-isoamarine
-isoamide
-isoamyl
-isoamylamine
-isoamylene
-isoamylethyl
-isoamylidene
-isoantibody
-isoantigen
-isoapiole
-isoasparagine
-isoaurore
-isobar
-isobarbaloin
-isobarbituric
-isobare
-isobaric
-isobarism
-isobarometric
-isobase
-isobath
-isobathic
-isobathytherm
-isobathythermal
-isobathythermic
-isobenzofuran
-isobilateral
-isobilianic
-isobiogenetic
-isoborneol
-isobornyl
-isobront
-isobronton
-isobutane
-isobutyl
-isobutylene
-isobutyraldehyde
-isobutyrate
-isobutyric
-isobutyryl
-isocamphor
-isocamphoric
-isocaproic
-isocarbostyril
-Isocardia
-Isocardiidae
-isocarpic
-isocarpous
-isocellular
-isocephalic
-isocephalism
-isocephalous
-isocephaly
-isocercal
-isocercy
-isochasm
-isochasmic
-isocheim
-isocheimal
-isocheimenal
-isocheimic
-isocheimonal
-isochlor
-isochlorophyll
-isochlorophyllin
-isocholanic
-isocholesterin
-isocholesterol
-isochor
-isochoric
-isochromatic
-isochronal
-isochronally
-isochrone
-isochronic
-isochronical
-isochronism
-isochronize
-isochronon
-isochronous
-isochronously
-isochroous
-isocinchomeronic
-isocinchonine
-isocitric
-isoclasite
-isoclimatic
-isoclinal
-isocline
-isoclinic
-isocodeine
-isocola
-isocolic
-isocolon
-isocoria
-isocorybulbin
-isocorybulbine
-isocorydine
-isocoumarin
-isocracy
-isocrat
-isocratic
-isocreosol
-isocrotonic
-isocrymal
-isocryme
-isocrymic
-isocyanate
-isocyanic
-isocyanide
-isocyanine
-isocyano
-isocyanogen
-isocyanurate
-isocyanuric
-isocyclic
-isocymene
-isocytic
-isodactylism
-isodactylous
-isodiabatic
-isodialuric
-isodiametric
-isodiametrical
-isodiazo
-isodiazotate
-isodimorphic
-isodimorphism
-isodimorphous
-isodomic
-isodomous
-isodomum
-isodont
-isodontous
-isodrome
-isodulcite
-isodurene
-isodynamia
-isodynamic
-isodynamical
-isoelectric
-isoelectrically
-isoelectronic
-isoelemicin
-isoemodin
-isoenergetic
-isoerucic
-Isoetaceae
-Isoetales
-Isoetes
-isoeugenol
-isoflavone
-isoflor
-isogamete
-isogametic
-isogametism
-isogamic
-isogamous
-isogamy
-isogen
-isogenesis
-isogenetic
-isogenic
-isogenotype
-isogenotypic
-isogenous
-isogeny
-isogeotherm
-isogeothermal
-isogeothermic
-isogloss
-isoglossal
-isognathism
-isognathous
-isogon
-isogonal
-isogonality
-isogonally
-isogonic
-isogoniostat
-isogonism
-isograft
-isogram
-isograph
-isographic
-isographical
-isographically
-isography
-isogynous
-isohaline
-isohalsine
-isohel
-isohemopyrrole
-isoheptane
-isohesperidin
-isohexyl
-isohydric
-isohydrocyanic
-isohydrosorbic
-isohyet
-isohyetal
-isoimmune
-isoimmunity
-isoimmunization
-isoimmunize
-isoindazole
-isoindigotin
-isoindole
-isoionone
-isokeraunic
-isokeraunographic
-isokeraunophonic
-Isokontae
-isokontan
-isokurtic
-isolability
-isolable
-isolapachol
-isolate
-isolated
-isolatedly
-isolating
-isolation
-isolationism
-isolationist
-isolative
-Isolde
-isolecithal
-isoleucine
-isolichenin
-isolinolenic
-isologous
-isologue
-isology
-Isoloma
-isolysin
-isolysis
-isomagnetic
-isomaltose
-isomastigate
-isomelamine
-isomenthone
-isomer
-Isomera
-isomere
-isomeric
-isomerical
-isomerically
-isomeride
-isomerism
-isomerization
-isomerize
-isomeromorphism
-isomerous
-isomery
-isometric
-isometrical
-isometrically
-isometrograph
-isometropia
-isometry
-isomorph
-isomorphic
-isomorphism
-isomorphous
-Isomyaria
-isomyarian
-isoneph
-isonephelic
-isonergic
-isonicotinic
-isonitramine
-isonitrile
-isonitroso
-isonomic
-isonomous
-isonomy
-isonuclear
-isonym
-isonymic
-isonymy
-isooleic
-isoosmosis
-isopachous
-isopag
-isoparaffin
-isopectic
-isopelletierin
-isopelletierine
-isopentane
-isoperimeter
-isoperimetric
-isoperimetrical
-isoperimetry
-isopetalous
-isophanal
-isophane
-isophasal
-isophene
-isophenomenal
-isophoria
-isophorone
-isophthalic
-isophthalyl
-isophyllous
-isophylly
-isopicramic
-isopiestic
-isopiestically
-isopilocarpine
-isoplere
-isopleth
-Isopleura
-isopleural
-isopleuran
-isopleurous
-isopod
-Isopoda
-isopodan
-isopodiform
-isopodimorphous
-isopodous
-isopogonous
-isopolite
-isopolitical
-isopolity
-isopoly
-isoprene
-isopropenyl
-isopropyl
-isopropylacetic
-isopropylamine
-isopsephic
-isopsephism
-Isoptera
-isopterous
-isoptic
-isopulegone
-isopurpurin
-isopycnic
-isopyre
-isopyromucic
-isopyrrole
-isoquercitrin
-isoquinine
-isoquinoline
-isorcinol
-isorhamnose
-isorhodeose
-isorithm
-isorosindone
-isorrhythmic
-isorropic
-isosaccharic
-isosaccharin
-isoscele
-isosceles
-isoscope
-isoseismal
-isoseismic
-isoseismical
-isoseist
-isoserine
-isosmotic
-Isospondyli
-isospondylous
-isospore
-isosporic
-isosporous
-isospory
-isostasist
-isostasy
-isostatic
-isostatical
-isostatically
-isostemonous
-isostemony
-isostere
-isosteric
-isosterism
-isostrychnine
-isosuccinic
-isosulphide
-isosulphocyanate
-isosulphocyanic
-isosultam
-isotac
-isoteles
-isotely
-isotheral
-isothere
-isotherm
-isothermal
-isothermally
-isothermic
-isothermical
-isothermobath
-isothermobathic
-isothermous
-isotherombrose
-isothiocyanates
-isothiocyanic
-isothiocyano
-isothujone
-isotimal
-isotome
-isotomous
-isotonia
-isotonic
-isotonicity
-isotony
-isotope
-isotopic
-isotopism
-isotopy
-isotrehalose
-Isotria
-isotrimorphic
-isotrimorphism
-isotrimorphous
-isotron
-isotrope
-isotropic
-isotropism
-isotropous
-isotropy
-isotype
-isotypic
-isotypical
-isovalerate
-isovalerianate
-isovalerianic
-isovaleric
-isovalerone
-isovaline
-isovanillic
-isovoluminal
-isoxanthine
-isoxazine
-isoxazole
-isoxime
-isoxylene
-isoyohimbine
-isozooid
-ispaghul
-ispravnik
-Israel
-Israeli
-Israelite
-Israeliteship
-Israelitic
-Israelitish
-Israelitism
-Israelitize
-issanguila
-Issedoi
-Issedones
-issei
-issite
-issuable
-issuably
-issuance
-issuant
-issue
-issueless
-issuer
-issuing
-ist
-isthmi
-Isthmia
-isthmial
-isthmian
-isthmiate
-isthmic
-isthmoid
-isthmus
-istiophorid
-Istiophoridae
-Istiophorus
-istle
-istoke
-Istrian
-Istvaeones
-isuret
-isuretine
-Isuridae
-isuroid
-Isurus
-Iswara
-it
-Ita
-itabirite
-itacism
-itacist
-itacistic
-itacolumite
-itaconate
-itaconic
-Itala
-Itali
-Italian
-Italianate
-Italianately
-Italianation
-Italianesque
-Italianish
-Italianism
-Italianist
-Italianity
-Italianization
-Italianize
-Italianizer
-Italianly
-Italic
-Italical
-Italically
-Italican
-Italicanist
-Italici
-Italicism
-italicization
-italicize
-italics
-Italiote
-italite
-Italomania
-Italon
-Italophile
-itamalate
-itamalic
-itatartaric
-itatartrate
-Itaves
-itch
-itchiness
-itching
-itchingly
-itchless
-itchproof
-itchreed
-itchweed
-itchy
-itcze
-Itea
-Iteaceae
-Itelmes
-item
-iteming
-itemization
-itemize
-itemizer
-itemy
-Iten
-Itenean
-iter
-iterable
-iterance
-iterancy
-iterant
-iterate
-iteration
-iterative
-iteratively
-iterativeness
-Ithaca
-Ithacan
-Ithacensian
-ithagine
-Ithaginis
-ither
-Ithiel
-ithomiid
-Ithomiidae
-Ithomiinae
-ithyphallic
-Ithyphallus
-ithyphyllous
-itineracy
-itinerancy
-itinerant
-itinerantly
-itinerarian
-Itinerarium
-itinerary
-itinerate
-itineration
-itmo
-Ito
-Itoism
-Itoist
-Itoland
-Itonama
-Itonaman
-Itonia
-itonidid
-Itonididae
-itoubou
-its
-itself
-Ituraean
-iturite
-Itylus
-Itys
-Itza
-itzebu
-iva
-Ivan
-ivied
-ivin
-ivoried
-ivorine
-ivoriness
-ivorist
-ivory
-ivorylike
-ivorytype
-ivorywood
-ivy
-ivybells
-ivyberry
-ivyflower
-ivylike
-ivyweed
-ivywood
-ivywort
-iwa
-iwaiwa
-iwis
-Ixia
-Ixiaceae
-Ixiama
-Ixil
-Ixion
-Ixionian
-Ixodes
-ixodian
-ixodic
-ixodid
-Ixodidae
-Ixora
-iyo
-Izar
-izar
-izard
-Izcateco
-Izchak
-Izdubar
-izle
-izote
-iztle
-Izumi
-izzard
-Izzy
-J
-j
-Jaalin
-jab
-Jabarite
-jabbed
-jabber
-jabberer
-jabbering
-jabberingly
-jabberment
-Jabberwock
-jabberwockian
-Jabberwocky
-jabbing
-jabbingly
-jabble
-jabers
-jabia
-jabiru
-jaborandi
-jaborine
-jabot
-jaboticaba
-jabul
-jacal
-Jacaltec
-Jacalteca
-jacamar
-Jacamaralcyon
-jacameropine
-Jacamerops
-jacami
-jacamin
-Jacana
-jacana
-Jacanidae
-Jacaranda
-jacare
-jacate
-jacchus
-jacent
-jacinth
-jacinthe
-Jack
-jack
-jackal
-jackanapes
-jackanapish
-jackaroo
-jackass
-jackassery
-jackassification
-jackassism
-jackassness
-jackbird
-jackbox
-jackboy
-jackdaw
-jackeen
-jacker
-jacket
-jacketed
-jacketing
-jacketless
-jacketwise
-jackety
-jackfish
-jackhammer
-jackknife
-jackleg
-jackman
-jacko
-jackpudding
-jackpuddinghood
-jackrod
-jacksaw
-jackscrew
-jackshaft
-jackshay
-jacksnipe
-Jackson
-Jacksonia
-Jacksonian
-Jacksonite
-jackstay
-jackstone
-jackstraw
-jacktan
-jackweed
-jackwood
-Jacky
-Jackye
-Jacob
-jacobaea
-jacobaean
-Jacobean
-Jacobian
-Jacobic
-Jacobin
-Jacobinia
-Jacobinic
-Jacobinical
-Jacobinically
-Jacobinism
-Jacobinization
-Jacobinize
-Jacobite
-Jacobitely
-Jacobitiana
-Jacobitic
-Jacobitical
-Jacobitically
-Jacobitish
-Jacobitishly
-Jacobitism
-jacobsite
-Jacobson
-jacobus
-jacoby
-jaconet
-Jacqueminot
-Jacques
-jactance
-jactancy
-jactant
-jactation
-jactitate
-jactitation
-jacu
-jacuaru
-jaculate
-jaculation
-jaculative
-jaculator
-jaculatorial
-jaculatory
-jaculiferous
-Jacunda
-jacutinga
-jadder
-jade
-jaded
-jadedly
-jadedness
-jadeite
-jadery
-jadesheen
-jadeship
-jadestone
-jadish
-jadishly
-jadishness
-jady
-jaeger
-jag
-Jaga
-Jagannath
-Jagannatha
-jagat
-Jagatai
-Jagataic
-Jagath
-jager
-jagged
-jaggedly
-jaggedness
-jagger
-jaggery
-jaggy
-jagir
-jagirdar
-jagla
-jagless
-jagong
-jagrata
-jagua
-jaguar
-jaguarete
-Jahve
-Jahvist
-Jahvistic
-jail
-jailage
-jailbird
-jaildom
-jailer
-jaileress
-jailering
-jailership
-jailhouse
-jailish
-jailkeeper
-jaillike
-jailmate
-jailward
-jailyard
-Jaime
-Jain
-Jaina
-Jainism
-Jainist
-Jaipuri
-jajman
-Jake
-jake
-jakes
-jako
-Jakob
-Jakun
-Jalalaean
-jalap
-jalapa
-jalapin
-jalkar
-jalloped
-jalopy
-jalouse
-jalousie
-jalousied
-jalpaite
-Jam
-jam
-jama
-Jamaica
-Jamaican
-jaman
-jamb
-jambalaya
-jambeau
-jambo
-jambolan
-jambone
-jambool
-jamboree
-Jambos
-jambosa
-jambstone
-jamdani
-James
-Jamesian
-Jamesina
-jamesonite
-jami
-Jamie
-jamlike
-jammedness
-jammer
-jammy
-Jamnia
-jampan
-jampani
-jamrosade
-jamwood
-Jan
-janapa
-janapan
-Jane
-jane
-Janet
-jangada
-Janghey
-jangkar
-jangle
-jangler
-jangly
-Janice
-janiceps
-Janiculan
-Janiculum
-Janiform
-janissary
-janitor
-janitorial
-janitorship
-janitress
-janitrix
-Janizarian
-Janizary
-jank
-janker
-jann
-jannock
-Janos
-Jansenism
-Jansenist
-Jansenistic
-Jansenistical
-Jansenize
-Janthina
-Janthinidae
-jantu
-janua
-Januarius
-January
-Janus
-Januslike
-jaob
-Jap
-jap
-japaconine
-japaconitine
-Japan
-japan
-Japanee
-Japanese
-Japanesque
-Japanesquely
-Japanesquery
-Japanesy
-Japanicize
-Japanism
-Japanization
-Japanize
-japanned
-Japanner
-japanner
-japannery
-Japannish
-Japanolatry
-Japanologist
-Japanology
-Japanophile
-Japanophobe
-Japanophobia
-jape
-japer
-japery
-Japetus
-Japheth
-Japhetic
-Japhetide
-Japhetite
-japing
-japingly
-japish
-japishly
-japishness
-Japonic
-japonica
-Japonically
-Japonicize
-Japonism
-Japonize
-Japonizer
-Japygidae
-japygoid
-Japyx
-Jaqueline
-Jaquesian
-jaquima
-jar
-jara
-jaragua
-jararaca
-jararacussu
-jarbird
-jarble
-jarbot
-jardiniere
-Jared
-jarfly
-jarful
-jarg
-jargon
-jargonal
-jargoneer
-jargonelle
-jargoner
-jargonesque
-jargonic
-jargonish
-jargonist
-jargonistic
-jargonium
-jargonization
-jargonize
-jarkman
-Jarl
-jarl
-jarldom
-jarless
-jarlship
-Jarmo
-jarnut
-jarool
-jarosite
-jarra
-jarrah
-jarring
-jarringly
-jarringness
-jarry
-jarvey
-Jarvis
-jasey
-jaseyed
-Jasione
-Jasminaceae
-jasmine
-jasmined
-jasminewood
-Jasminum
-jasmone
-Jason
-jaspachate
-jaspagate
-Jasper
-jasper
-jasperated
-jaspered
-jasperize
-jasperoid
-jaspery
-jaspidean
-jaspideous
-jaspilite
-jaspis
-jaspoid
-jasponyx
-jaspopal
-jass
-jassid
-Jassidae
-jassoid
-Jat
-jatamansi
-Jateorhiza
-jateorhizine
-jatha
-jati
-Jatki
-Jatni
-jato
-Jatropha
-jatrophic
-jatrorrhizine
-Jatulian
-jaudie
-jauk
-jaun
-jaunce
-jaunder
-jaundice
-jaundiceroot
-jaunt
-jauntie
-jauntily
-jauntiness
-jauntingly
-jaunty
-jaup
-Java
-Javahai
-javali
-Javan
-Javanee
-Javanese
-javelin
-javelina
-javeline
-javelineer
-javer
-Javitero
-jaw
-jawab
-jawbation
-jawbone
-jawbreaker
-jawbreaking
-jawbreakingly
-jawed
-jawfall
-jawfallen
-jawfish
-jawfoot
-jawfooted
-jawless
-jawsmith
-jawy
-Jay
-jay
-Jayant
-Jayesh
-jayhawk
-jayhawker
-jaypie
-jaywalk
-jaywalker
-jazerant
-Jazyges
-jazz
-jazzer
-jazzily
-jazziness
-jazzy
-jealous
-jealously
-jealousness
-jealousy
-Jeames
-Jean
-jean
-Jean-Christophe
-Jean-Pierre
-Jeanette
-Jeanie
-Jeanne
-Jeannette
-Jeannie
-Jeanpaulia
-jeans
-Jeany
-Jebus
-Jebusi
-Jebusite
-Jebusitic
-Jebusitical
-Jebusitish
-jecoral
-jecorin
-jecorize
-jed
-jedcock
-jedding
-jeddock
-jeel
-jeep
-jeer
-jeerer
-jeering
-jeeringly
-jeerproof
-jeery
-jeewhillijers
-jeewhillikens
-Jef
-Jeff
-jeff
-jefferisite
-Jeffersonia
-Jeffersonian
-Jeffersonianism
-jeffersonite
-Jeffery
-Jeffie
-Jeffrey
-Jehovah
-Jehovic
-Jehovism
-Jehovist
-Jehovistic
-jehu
-jehup
-jejunal
-jejunator
-jejune
-jejunely
-jejuneness
-jejunitis
-jejunity
-jejunoduodenal
-jejunoileitis
-jejunostomy
-jejunotomy
-jejunum
-jelab
-jelerang
-jelick
-jell
-jellica
-jellico
-jellied
-jelliedness
-jellification
-jellify
-jellily
-jelloid
-jelly
-jellydom
-jellyfish
-jellyleaf
-jellylike
-Jelske
-jelutong
-Jem
-jemadar
-Jemez
-Jemima
-jemmily
-jemminess
-Jemmy
-jemmy
-Jenine
-jenkin
-jenna
-jennerization
-jennerize
-jennet
-jenneting
-Jennie
-jennier
-Jennifer
-Jenny
-jenny
-Jenson
-jentacular
-jeofail
-jeopard
-jeoparder
-jeopardize
-jeopardous
-jeopardously
-jeopardousness
-jeopardy
-jequirity
-Jerahmeel
-Jerahmeelites
-Jerald
-jerboa
-jereed
-jeremejevite
-jeremiad
-Jeremiah
-Jeremian
-Jeremianic
-Jeremias
-Jeremy
-jerez
-jerib
-jerk
-jerker
-jerkily
-jerkin
-jerkined
-jerkiness
-jerkingly
-jerkish
-jerksome
-jerkwater
-jerky
-jerl
-jerm
-jermonal
-Jeroboam
-Jerome
-Jeromian
-Jeronymite
-jerque
-jerquer
-Jerrie
-Jerry
-jerry
-jerryism
-Jersey
-jersey
-Jerseyan
-jerseyed
-Jerseyite
-Jerseyman
-jert
-Jerusalem
-jervia
-jervina
-jervine
-Jesper
-Jess
-jess
-jessakeed
-jessamine
-jessamy
-jessant
-Jesse
-Jessean
-jessed
-Jessica
-Jessie
-jessur
-jest
-jestbook
-jestee
-jester
-jestful
-jesting
-jestingly
-jestingstock
-jestmonger
-jestproof
-jestwise
-jestword
-Jesu
-Jesuate
-Jesuit
-Jesuited
-Jesuitess
-Jesuitic
-Jesuitical
-Jesuitically
-Jesuitish
-Jesuitism
-Jesuitist
-Jesuitize
-Jesuitocracy
-Jesuitry
-Jesus
-jet
-jetbead
-jete
-Jethro
-Jethronian
-jetsam
-jettage
-jetted
-jetter
-jettied
-jettiness
-jettingly
-jettison
-jetton
-jetty
-jettyhead
-jettywise
-jetware
-Jew
-jewbird
-jewbush
-Jewdom
-jewel
-jeweler
-jewelhouse
-jeweling
-jewelless
-jewellike
-jewelry
-jewelsmith
-jewelweed
-jewely
-Jewess
-jewfish
-Jewhood
-Jewish
-Jewishly
-Jewishness
-Jewism
-Jewless
-Jewlike
-Jewling
-Jewry
-Jewship
-Jewstone
-Jewy
-jezail
-Jezebel
-Jezebelian
-Jezebelish
-jezekite
-jeziah
-Jezreelite
-jharal
-jheel
-jhool
-jhow
-Jhuria
-Ji
-Jianyun
-jib
-jibbah
-jibber
-jibbings
-jibby
-jibe
-jibhead
-jibi
-jibman
-jiboa
-jibstay
-jicama
-Jicaque
-Jicaquean
-jicara
-Jicarilla
-jiff
-jiffle
-jiffy
-jig
-jigamaree
-jigger
-jiggerer
-jiggerman
-jiggers
-jigget
-jiggety
-jigginess
-jiggish
-jiggle
-jiggly
-jiggumbob
-jiggy
-jiglike
-jigman
-jihad
-jikungu
-Jill
-jillet
-jillflirt
-jilt
-jiltee
-jilter
-jiltish
-Jim
-jimbang
-jimberjaw
-jimberjawed
-jimjam
-Jimmy
-jimmy
-jimp
-jimply
-jimpness
-jimpricute
-jimsedge
-Jin
-jina
-jincamas
-Jincan
-Jinchao
-jing
-jingal
-Jingbai
-jingbang
-jingle
-jingled
-jinglejangle
-jingler
-jinglet
-jingling
-jinglingly
-jingly
-jingo
-jingodom
-jingoish
-jingoism
-jingoist
-jingoistic
-jinja
-jinjili
-jink
-jinker
-jinket
-jinkle
-jinks
-jinn
-jinnestan
-jinni
-jinniwink
-jinniyeh
-Jinny
-jinny
-jinriki
-jinrikiman
-jinrikisha
-jinshang
-jinx
-jipijapa
-jipper
-jiqui
-jirble
-jirga
-Jiri
-jirkinet
-Jisheng
-Jitendra
-jiti
-jitneur
-jitneuse
-jitney
-jitneyman
-jitro
-jitter
-jitterbug
-jitters
-jittery
-jiva
-Jivaran
-Jivaro
-Jivaroan
-jive
-jixie
-Jo
-jo
-Joachim
-Joachimite
-Joan
-Joanna
-Joanne
-Joannite
-joaquinite
-Job
-job
-jobade
-jobarbe
-jobation
-jobber
-jobbernowl
-jobbernowlism
-jobbery
-jobbet
-jobbing
-jobbish
-jobble
-jobholder
-jobless
-joblessness
-jobman
-jobmaster
-jobmistress
-jobmonger
-jobo
-jobsmith
-Jocasta
-Jocelin
-Joceline
-Jocelyn
-joch
-Jochen
-Jock
-jock
-jocker
-jockey
-jockeydom
-jockeyish
-jockeyism
-jockeylike
-jockeyship
-jocko
-jockteleg
-jocoque
-jocose
-jocosely
-jocoseness
-jocoseriosity
-jocoserious
-jocosity
-jocote
-jocu
-jocular
-jocularity
-jocularly
-jocularness
-joculator
-jocum
-jocuma
-jocund
-jocundity
-jocundly
-jocundness
-jodel
-jodelr
-jodhpurs
-Jodo
-Joe
-joe
-joebush
-Joel
-joewood
-Joey
-joey
-jog
-jogger
-joggle
-joggler
-jogglety
-jogglework
-joggly
-jogtrottism
-Johan
-Johann
-Johanna
-Johannean
-Johannes
-johannes
-Johannine
-Johannisberger
-Johannist
-Johannite
-johannite
-John
-Johnadreams
-Johnathan
-Johnian
-johnin
-Johnnie
-Johnny
-johnnycake
-johnnydom
-Johnsmas
-Johnsonese
-Johnsonian
-Johnsoniana
-Johnsonianism
-Johnsonianly
-Johnsonism
-johnstrupite
-join
-joinable
-joinant
-joinder
-joiner
-joinery
-joining
-joiningly
-joint
-jointage
-jointed
-jointedly
-jointedness
-jointer
-jointing
-jointist
-jointless
-jointly
-jointress
-jointure
-jointureless
-jointuress
-jointweed
-jointworm
-jointy
-joist
-joisting
-joistless
-jojoba
-joke
-jokeless
-jokelet
-jokeproof
-joker
-jokesmith
-jokesome
-jokesomeness
-jokester
-jokingly
-jokish
-jokist
-jokul
-joky
-joll
-jolleyman
-jollier
-jollification
-jollify
-jollily
-jolliness
-jollity
-jollop
-jolloped
-jolly
-jollytail
-Joloano
-jolt
-jolter
-jolterhead
-jolterheaded
-jolterheadedness
-jolthead
-joltiness
-jolting
-joltingly
-joltless
-joltproof
-jolty
-Jon
-Jonah
-Jonahesque
-Jonahism
-Jonas
-Jonathan
-Jonathanization
-Jones
-Jonesian
-Jong
-jonglery
-jongleur
-Joni
-jonque
-jonquil
-jonquille
-Jonsonian
-Jonval
-jonvalization
-jonvalize
-jookerie
-joola
-joom
-Joon
-Jophiel
-Jordan
-jordan
-Jordanian
-jordanite
-joree
-Jorge
-Jorist
-jorum
-Jos
-Jose
-josefite
-joseite
-Joseph
-Josepha
-Josephine
-Josephinism
-josephinite
-Josephism
-Josephite
-Josh
-josh
-josher
-joshi
-Joshua
-Josiah
-josie
-Josip
-joskin
-joss
-jossakeed
-josser
-jostle
-jostlement
-jostler
-jot
-jota
-jotation
-jotisi
-Jotnian
-jotter
-jotting
-jotty
-joubarb
-Joubert
-joug
-jough
-jouk
-joukerypawkery
-joule
-joulean
-joulemeter
-jounce
-journal
-journalese
-journalish
-journalism
-journalist
-journalistic
-journalistically
-journalization
-journalize
-journalizer
-journey
-journeycake
-journeyer
-journeying
-journeyman
-journeywoman
-journeywork
-journeyworker
-jours
-joust
-jouster
-Jova
-Jove
-Jovial
-jovial
-jovialist
-jovialistic
-joviality
-jovialize
-jovially
-jovialness
-jovialty
-Jovian
-Jovianly
-Jovicentric
-Jovicentrical
-Jovicentrically
-jovilabe
-Joviniamish
-Jovinian
-Jovinianist
-Jovite
-jow
-jowar
-jowari
-jowel
-jower
-jowery
-jowl
-jowler
-jowlish
-jowlop
-jowly
-jowpy
-jowser
-jowter
-joy
-joyance
-joyancy
-joyant
-Joyce
-joyful
-joyfully
-joyfulness
-joyhop
-joyleaf
-joyless
-joylessly
-joylessness
-joylet
-joyous
-joyously
-joyousness
-joyproof
-joysome
-joyweed
-Jozy
-Ju
-Juan
-Juang
-juba
-jubate
-jubbah
-jubbe
-jube
-juberous
-jubilance
-jubilancy
-jubilant
-jubilantly
-jubilarian
-jubilate
-jubilatio
-jubilation
-jubilatory
-jubilean
-jubilee
-jubilist
-jubilization
-jubilize
-jubilus
-juck
-juckies
-Jucuna
-jucundity
-jud
-Judaeomancy
-Judaeophile
-Judaeophilism
-Judaeophobe
-Judaeophobia
-Judah
-Judahite
-Judaic
-Judaica
-Judaical
-Judaically
-Judaism
-Judaist
-Judaistic
-Judaistically
-Judaization
-Judaize
-Judaizer
-Judas
-Judaslike
-judcock
-Jude
-Judean
-judex
-Judge
-judge
-judgeable
-judgelike
-judger
-judgeship
-judgingly
-judgmatic
-judgmatical
-judgmatically
-judgment
-Judica
-judicable
-judicate
-judication
-judicative
-judicator
-judicatorial
-judicatory
-judicature
-judices
-judiciable
-judicial
-judiciality
-judicialize
-judicially
-judicialness
-judiciarily
-judiciary
-judicious
-judiciously
-judiciousness
-Judith
-judo
-Judophobism
-Judy
-Juergen
-jufti
-jug
-Juga
-jugal
-jugale
-Jugatae
-jugate
-jugated
-jugation
-juger
-jugerum
-jugful
-jugger
-Juggernaut
-juggernaut
-Juggernautish
-juggins
-juggle
-jugglement
-juggler
-jugglery
-juggling
-jugglingly
-Juglandaceae
-juglandaceous
-Juglandales
-juglandin
-Juglans
-juglone
-jugular
-Jugulares
-jugulary
-jugulate
-jugulum
-jugum
-Jugurthine
-Juha
-juice
-juiceful
-juiceless
-juicily
-juiciness
-juicy
-jujitsu
-juju
-jujube
-jujuism
-jujuist
-juke
-jukebox
-Jule
-julep
-Jules
-Juletta
-Julia
-Julian
-Juliana
-Juliane
-Julianist
-Julianto
-julid
-Julidae
-julidan
-Julie
-Julien
-julienite
-julienne
-Juliet
-Julietta
-julio
-Julius
-juloid
-Juloidea
-juloidian
-julole
-julolidin
-julolidine
-julolin
-juloline
-Julus
-July
-Julyflower
-Jumada
-Jumana
-jumart
-jumba
-jumble
-jumblement
-jumbler
-jumblingly
-jumbly
-jumbo
-jumboesque
-jumboism
-jumbuck
-jumby
-jumelle
-jument
-jumentous
-jumfru
-jumillite
-jumma
-jump
-jumpable
-jumper
-jumperism
-jumpiness
-jumpingly
-jumpness
-jumprock
-jumpseed
-jumpsome
-jumpy
-Jun
-Juncaceae
-juncaceous
-Juncaginaceae
-juncaginaceous
-juncagineous
-junciform
-juncite
-Junco
-Juncoides
-juncous
-junction
-junctional
-junctive
-juncture
-Juncus
-June
-june
-Juneberry
-Junebud
-junectomy
-Juneflower
-Jungermannia
-Jungermanniaceae
-jungermanniaceous
-Jungermanniales
-jungle
-jungled
-jungleside
-junglewards
-junglewood
-jungli
-jungly
-juniata
-junior
-juniorate
-juniority
-juniorship
-juniper
-Juniperaceae
-Juniperus
-Junius
-junk
-junkboard
-Junker
-junker
-Junkerdom
-junkerdom
-junkerish
-Junkerism
-junkerism
-junket
-junketer
-junketing
-junking
-junkman
-Juno
-Junoesque
-Junonia
-Junonian
-junt
-junta
-junto
-jupati
-jupe
-Jupiter
-jupon
-Jur
-Jura
-jural
-jurally
-jurament
-juramentado
-juramental
-juramentally
-juramentum
-Jurane
-jurant
-jurara
-Jurassic
-jurat
-juration
-jurative
-jurator
-juratorial
-juratory
-jure
-jurel
-Jurevis
-Juri
-juridic
-juridical
-juridically
-juring
-jurisconsult
-jurisdiction
-jurisdictional
-jurisdictionalism
-jurisdictionally
-jurisdictive
-jurisprudence
-jurisprudent
-jurisprudential
-jurisprudentialist
-jurisprudentially
-jurist
-juristic
-juristical
-juristically
-juror
-jurupaite
-jury
-juryless
-juryman
-jurywoman
-jusquaboutisme
-jusquaboutist
-jussel
-Jussi
-Jussiaea
-Jussiaean
-Jussieuan
-jussion
-jussive
-jussory
-just
-justen
-justice
-justicehood
-justiceless
-justicelike
-justicer
-justiceship
-justiceweed
-Justicia
-justiciability
-justiciable
-justicial
-justiciar
-justiciarship
-justiciary
-justiciaryship
-justicies
-justifiability
-justifiable
-justifiableness
-justifiably
-justification
-justificative
-justificator
-justificatory
-justifier
-justify
-justifying
-justifyingly
-Justin
-Justina
-Justine
-Justinian
-Justinianian
-Justinianist
-justly
-justment
-justness
-justo
-Justus
-jut
-Jute
-jute
-Jutic
-Jutish
-jutka
-Jutlander
-Jutlandish
-jutting
-juttingly
-jutty
-Juturna
-Juvavian
-juvenal
-Juvenalian
-juvenate
-juvenescence
-juvenescent
-juvenile
-juvenilely
-juvenileness
-juvenilify
-juvenilism
-juvenility
-juvenilize
-Juventas
-juventude
-Juverna
-juvia
-juvite
-juxtalittoral
-juxtamarine
-juxtapose
-juxtaposit
-juxtaposition
-juxtapositional
-juxtapositive
-juxtapyloric
-juxtaspinal
-juxtaterrestrial
-juxtatropical
-Juyas
-Juza
-Jwahar
-Jynginae
-jyngine
-Jynx
-jynx
-K
-k
-ka
-Kababish
-Kabaka
-kabaragoya
-Kabard
-Kabardian
-kabaya
-Kabbeljaws
-kabel
-kaberu
-kabiet
-Kabirpanthi
-Kabistan
-Kabonga
-kabuki
-Kabuli
-Kabyle
-Kachari
-Kachin
-kachin
-Kadaga
-Kadarite
-kadaya
-Kadayan
-Kaddish
-kadein
-kadikane
-kadischi
-Kadmi
-kados
-Kadu
-kaempferol
-Kaf
-Kafa
-kaferita
-Kaffir
-kaffir
-kaffiyeh
-Kaffraria
-Kaffrarian
-Kafir
-kafir
-Kafiri
-kafirin
-kafiz
-Kafka
-Kafkaesque
-kafta
-kago
-kagu
-kaha
-kahar
-kahau
-kahikatea
-kahili
-kahu
-kahuna
-kai
-Kaibab
-Kaibartha
-kaid
-kaik
-kaikara
-kaikawaka
-kail
-kailyard
-kailyarder
-kailyardism
-Kaimo
-Kainah
-kainga
-kainite
-kainsi
-kainyn
-kairine
-kairoline
-kaiser
-kaiserdom
-kaiserism
-kaisership
-kaitaka
-Kaithi
-kaiwhiria
-kaiwi
-Kaj
-Kajar
-kajawah
-kajugaru
-kaka
-Kakan
-kakapo
-kakar
-kakarali
-kakariki
-Kakatoe
-Kakatoidae
-kakawahie
-kaki
-kakidrosis
-kakistocracy
-kakkak
-kakke
-kakortokite
-kala
-kaladana
-kalamalo
-kalamansanai
-Kalamian
-Kalanchoe
-Kalandariyah
-Kalang
-Kalapooian
-kalashnikov
-kalasie
-Kaldani
-kale
-kaleidophon
-kaleidophone
-kaleidoscope
-kaleidoscopic
-kaleidoscopical
-kaleidoscopically
-Kalekah
-kalema
-Kalendae
-kalends
-kalewife
-kaleyard
-kali
-kalian
-Kaliana
-kaliborite
-kalidium
-kaliform
-kaligenous
-Kalinga
-kalinite
-kaliophilite
-kalipaya
-Kalispel
-kalium
-kallah
-kallege
-kallilite
-Kallima
-kallitype
-Kalmarian
-Kalmia
-Kalmuck
-kalo
-kalogeros
-kalokagathia
-kalon
-kalong
-kalpis
-kalsomine
-kalsominer
-kalumpang
-kalumpit
-Kalwar
-kalymmaukion
-kalymmocyte
-kamachile
-kamacite
-kamahi
-kamala
-kamaloka
-kamansi
-kamao
-Kamares
-kamarezite
-kamarupa
-kamarupic
-kamas
-Kamasin
-Kamass
-kamassi
-Kamba
-kambal
-kamboh
-Kamchadal
-Kamchatkan
-kame
-kameeldoorn
-kameelthorn
-Kamel
-kamelaukion
-kamerad
-kamias
-kamichi
-kamik
-kamikaze
-Kamiya
-kammalan
-kammererite
-kamperite
-kampong
-kamptomorph
-kan
-kana
-kanae
-kanagi
-Kanaka
-kanap
-kanara
-Kanarese
-kanari
-kanat
-Kanauji
-Kanawari
-Kanawha
-kanchil
-kande
-Kandelia
-kandol
-kaneh
-kanephore
-kanephoros
-Kaneshite
-Kanesian
-kang
-kanga
-kangani
-kangaroo
-kangarooer
-Kangli
-Kanji
-Kankanai
-kankie
-kannume
-kanoon
-Kanred
-kans
-Kansa
-Kansan
-kantele
-kanteletar
-kanten
-Kanthan
-Kantian
-Kantianism
-Kantism
-Kantist
-Kanuri
-Kanwar
-kaoliang
-kaolin
-kaolinate
-kaolinic
-kaolinite
-kaolinization
-kaolinize
-kapa
-kapai
-kapeika
-kapok
-kapp
-kappa
-kappe
-kappland
-kapur
-kaput
-Karabagh
-karagan
-Karaism
-Karaite
-Karaitism
-karaka
-Karakatchan
-Karakul
-karakul
-Karamojo
-karamu
-karaoke
-Karatas
-karate
-Karaya
-karaya
-karbi
-karch
-kareao
-kareeta
-Karel
-karela
-Karelian
-Karen
-Karharbari
-Kari
-karite
-Karl
-Karling
-Karluk
-karma
-Karmathian
-karmic
-karmouth
-karo
-kaross
-karou
-karree
-karri
-Karroo
-karroo
-karrusel
-karsha
-Karshuni
-Karst
-karst
-karstenite
-karstic
-kartel
-Karthli
-kartometer
-kartos
-Kartvel
-Kartvelian
-karwar
-Karwinskia
-karyaster
-karyenchyma
-karyochrome
-karyochylema
-karyogamic
-karyogamy
-karyokinesis
-karyokinetic
-karyologic
-karyological
-karyologically
-karyology
-karyolymph
-Karyolysidae
-karyolysis
-Karyolysus
-karyolytic
-karyomere
-karyomerite
-karyomicrosome
-karyomitoic
-karyomitome
-karyomiton
-karyomitosis
-karyomitotic
-karyon
-karyoplasm
-karyoplasma
-karyoplasmatic
-karyoplasmic
-karyopyknosis
-karyorrhexis
-karyoschisis
-karyosome
-karyotin
-karyotype
-kasa
-kasbah
-kasbeke
-kascamiol
-Kasha
-Kashan
-kasher
-kashga
-kashi
-kashima
-Kashmiri
-Kashmirian
-Kashoubish
-kashruth
-Kashube
-Kashubian
-Kashyapa
-kasida
-Kasikumuk
-Kaska
-Kaskaskia
-kasm
-kasolite
-kassabah
-Kassak
-Kassite
-kassu
-kastura
-Kasubian
-kat
-Katabanian
-katabasis
-katabatic
-katabella
-katabolic
-katabolically
-katabolism
-katabolite
-katabolize
-katabothron
-katachromasis
-katacrotic
-katacrotism
-katagenesis
-katagenetic
-katakana
-katakinesis
-katakinetic
-katakinetomer
-katakinetomeric
-katakiribori
-katalase
-katalysis
-katalyst
-katalytic
-katalyze
-katamorphism
-kataphoresis
-kataphoretic
-kataphoric
-kataphrenia
-kataplasia
-kataplectic
-kataplexy
-katar
-katastate
-katastatic
-katathermometer
-katatonia
-katatonic
-katatype
-katchung
-katcina
-Kate
-kath
-Katha
-katha
-kathal
-Katharina
-Katharine
-katharometer
-katharsis
-kathartic
-kathemoglobin
-kathenotheism
-Kathleen
-kathodic
-Kathopanishad
-Kathryn
-Kathy
-Katie
-Katik
-Katinka
-katipo
-Katipunan
-Katipuneros
-katmon
-katogle
-Katrine
-Katrinka
-katsup
-Katsuwonidae
-katuka
-Katukina
-katun
-katurai
-Katy
-katydid
-Kauravas
-kauri
-kava
-kavaic
-kavass
-Kavi
-Kaw
-kawaka
-Kawchodinne
-kawika
-Kay
-kay
-kayak
-kayaker
-Kayan
-Kayasth
-Kayastha
-kayles
-kayo
-Kayvan
-Kazak
-kazi
-kazoo
-Kazuhiro
-kea
-keach
-keacorn
-Keatsian
-keawe
-keb
-kebab
-kebbie
-kebbuck
-kechel
-keck
-keckle
-keckling
-kecksy
-kecky
-ked
-Kedar
-Kedarite
-keddah
-kedge
-kedger
-kedgeree
-kedlock
-Kedushshah
-Kee
-keech
-keek
-keeker
-keel
-keelage
-keelbill
-keelblock
-keelboat
-keelboatman
-keeled
-keeler
-keelfat
-keelhale
-keelhaul
-keelie
-keeling
-keelivine
-keelless
-keelman
-keelrake
-keelson
-keen
-keena
-keened
-keener
-keenly
-keenness
-keep
-keepable
-keeper
-keeperess
-keepering
-keeperless
-keepership
-keeping
-keepsake
-keepsaky
-keepworthy
-keerogue
-Kees
-keeshond
-keest
-keet
-keeve
-Keewatin
-kef
-keffel
-kefir
-kefiric
-Kefti
-Keftian
-Keftiu
-keg
-kegler
-kehaya
-kehillah
-kehoeite
-Keid
-keilhauite
-keita
-Keith
-keitloa
-Kekchi
-kekotene
-kekuna
-kelchin
-keld
-Kele
-kele
-kelebe
-kelectome
-keleh
-kelek
-kelep
-Kelima
-kelk
-kell
-kella
-kellion
-kellupweed
-Kelly
-kelly
-keloid
-keloidal
-kelp
-kelper
-kelpfish
-kelpie
-kelpware
-kelpwort
-kelpy
-kelt
-kelter
-Keltoi
-kelty
-Kelvin
-kelvin
-kelyphite
-Kemal
-Kemalism
-Kemalist
-kemb
-kemp
-kemperyman
-kempite
-kemple
-kempster
-kempt
-kempy
-Ken
-ken
-kenaf
-Kenai
-kenareh
-kench
-kend
-kendir
-kendyr
-Kenelm
-Kenipsim
-kenlore
-kenmark
-Kenn
-Kennebec
-kennebecker
-kennebunker
-Kennedya
-kennel
-kennelly
-kennelman
-kenner
-Kenneth
-kenning
-kenningwort
-kenno
-keno
-kenogenesis
-kenogenetic
-kenogenetically
-kenogeny
-kenosis
-kenotic
-kenoticism
-kenoticist
-kenotism
-kenotist
-kenotoxin
-kenotron
-Kenseikai
-kensington
-Kensitite
-kenspac
-kenspeck
-kenspeckle
-Kent
-kent
-kentallenite
-Kentia
-Kenticism
-Kentish
-Kentishman
-kentledge
-Kenton
-kentrogon
-kentrolite
-Kentuckian
-Kentucky
-kenyte
-kep
-kepi
-Keplerian
-kept
-Ker
-keracele
-keralite
-kerana
-keraphyllocele
-keraphyllous
-kerasin
-kerasine
-kerat
-keratalgia
-keratectasia
-keratectomy
-Keraterpeton
-keratin
-keratinization
-keratinize
-keratinoid
-keratinose
-keratinous
-keratitis
-keratoangioma
-keratocele
-keratocentesis
-keratoconjunctivitis
-keratoconus
-keratocricoid
-keratode
-keratodermia
-keratogenic
-keratogenous
-keratoglobus
-keratoglossus
-keratohelcosis
-keratohyal
-keratoid
-Keratoidea
-keratoiritis
-Keratol
-keratoleukoma
-keratolysis
-keratolytic
-keratoma
-keratomalacia
-keratome
-keratometer
-keratometry
-keratomycosis
-keratoncus
-keratonosus
-keratonyxis
-keratophyre
-keratoplastic
-keratoplasty
-keratorrhexis
-keratoscope
-keratoscopy
-keratose
-keratosis
-keratotome
-keratotomy
-keratto
-keraulophon
-keraulophone
-Keraunia
-keraunion
-keraunograph
-keraunographic
-keraunography
-keraunophone
-keraunophonic
-keraunoscopia
-keraunoscopy
-kerbstone
-kerchief
-kerchiefed
-kerchoo
-kerchug
-kerchunk
-kerectomy
-kerel
-Keres
-Keresan
-Kerewa
-kerf
-kerflap
-kerflop
-kerflummox
-Kerite
-Kermanji
-Kermanshah
-kermes
-kermesic
-kermesite
-kermis
-kern
-kernel
-kerneled
-kernelless
-kernelly
-kerner
-kernetty
-kernish
-kernite
-kernos
-kerogen
-kerosene
-kerplunk
-Kerri
-Kerria
-kerrie
-kerrikerri
-kerril
-kerrite
-Kerry
-kerry
-kersantite
-kersey
-kerseymere
-kerslam
-kerslosh
-kersmash
-kerugma
-kerwham
-kerygma
-kerygmatic
-kerykeion
-kerystic
-kerystics
-Keryx
-kesslerman
-kestrel
-ket
-keta
-ketal
-ketapang
-ketazine
-ketch
-ketchcraft
-ketchup
-ketembilla
-keten
-ketene
-ketimide
-ketimine
-ketipate
-ketipic
-keto
-ketogen
-ketogenesis
-ketogenic
-ketoheptose
-ketohexose
-ketoketene
-ketol
-ketole
-ketolysis
-ketolytic
-ketone
-ketonemia
-ketonic
-ketonimid
-ketonimide
-ketonimin
-ketonimine
-ketonization
-ketonize
-ketonuria
-ketose
-ketoside
-ketosis
-ketosuccinic
-ketoxime
-kette
-ketting
-kettle
-kettlecase
-kettledrum
-kettledrummer
-kettleful
-kettlemaker
-kettlemaking
-kettler
-ketty
-Ketu
-ketuba
-ketupa
-ketyl
-keup
-Keuper
-keurboom
-kevalin
-Kevan
-kevel
-kevelhead
-Kevin
-kevutzah
-Kevyn
-Keweenawan
-keweenawite
-kewpie
-kex
-kexy
-key
-keyage
-keyboard
-keyed
-keyhole
-keyless
-keylet
-keylock
-Keynesian
-Keynesianism
-keynote
-keynoter
-keyseater
-keyserlick
-keysmith
-keystone
-keystoned
-Keystoner
-keyway
-Kha
-khaddar
-khadi
-khagiarite
-khahoon
-khaiki
-khair
-khaja
-khajur
-khakanship
-khaki
-khakied
-Khaldian
-khalifa
-Khalifat
-Khalkha
-khalsa
-Khami
-khamsin
-Khamti
-khan
-khanate
-khanda
-khandait
-khanjar
-khanjee
-khankah
-khansamah
-khanum
-khar
-kharaj
-Kharia
-Kharijite
-Kharoshthi
-kharouba
-kharroubah
-Khartoumer
-kharua
-Kharwar
-Khasa
-Khasi
-khass
-khat
-khatib
-khatri
-Khatti
-Khattish
-Khaya
-Khazar
-Khazarian
-khediva
-khedival
-khedivate
-khedive
-khediviah
-khedivial
-khediviate
-khepesh
-Kherwari
-Kherwarian
-khet
-Khevzur
-khidmatgar
-Khila
-khilat
-khir
-khirka
-Khitan
-Khivan
-Khlysti
-Khmer
-Khoja
-khoja
-khoka
-Khokani
-Khond
-Khorassan
-khot
-Khotan
-Khotana
-Khowar
-khu
-Khuai
-khubber
-khula
-khuskhus
-Khussak
-khutbah
-khutuktu
-Khuzi
-khvat
-Khwarazmian
-kiack
-kiaki
-kialee
-kiang
-Kiangan
-kiaugh
-kibber
-kibble
-kibbler
-kibblerman
-kibe
-kibei
-kibitka
-kibitz
-kibitzer
-kiblah
-kibosh
-kiby
-kick
-kickable
-Kickapoo
-kickback
-kickee
-kicker
-kicking
-kickish
-kickless
-kickoff
-kickout
-kickseys
-kickshaw
-kickup
-Kidder
-kidder
-Kidderminster
-kiddier
-kiddish
-kiddush
-kiddushin
-kiddy
-kidhood
-kidlet
-kidling
-kidnap
-kidnapee
-kidnaper
-kidney
-kidneyroot
-kidneywort
-Kids
-kidskin
-kidsman
-kiefekil
-Kieffer
-kiekie
-kiel
-kier
-Kieran
-kieselguhr
-kieserite
-kiestless
-kieye
-Kiho
-kikar
-Kikatsik
-kikawaeo
-kike
-Kiki
-kiki
-Kikki
-Kikongo
-kiku
-kikuel
-kikumon
-Kikuyu
-kil
-kiladja
-kilah
-kilampere
-kilan
-kilbrickenite
-kildee
-kilderkin
-kileh
-kilerg
-kiley
-Kilhamite
-kilhig
-kiliare
-kilim
-kill
-killable
-killadar
-Killarney
-killas
-killcalf
-killcrop
-killcu
-killdeer
-killeekillee
-killeen
-killer
-killick
-killifish
-killing
-killingly
-killingness
-killinite
-killogie
-killweed
-killwort
-killy
-Kilmarnock
-kiln
-kilneye
-kilnhole
-kilnman
-kilnrib
-kilo
-kiloampere
-kilobar
-kilocalorie
-kilocycle
-kilodyne
-kilogauss
-kilogram
-kilojoule
-kiloliter
-kilolumen
-kilometer
-kilometrage
-kilometric
-kilometrical
-kiloparsec
-kilostere
-kiloton
-kilovar
-kilovolt
-kilowatt
-kilp
-kilt
-kilter
-kiltie
-kilting
-Kiluba
-Kim
-kim
-kimbang
-kimberlin
-kimberlite
-Kimberly
-Kimbundu
-Kimeridgian
-kimigayo
-Kimmo
-kimnel
-kimono
-kimonoed
-kin
-kina
-kinaesthesia
-kinaesthesis
-kinah
-kinase
-kinbote
-Kinch
-kinch
-kinchin
-kinchinmort
-kincob
-kind
-kindergarten
-kindergartener
-kindergartening
-kindergartner
-Kinderhook
-kindheart
-kindhearted
-kindheartedly
-kindheartedness
-kindle
-kindler
-kindlesome
-kindlily
-kindliness
-kindling
-kindly
-kindness
-kindred
-kindredless
-kindredly
-kindredness
-kindredship
-kinematic
-kinematical
-kinematically
-kinematics
-kinematograph
-kinemometer
-kineplasty
-kinepox
-kinesalgia
-kinescope
-kinesiatric
-kinesiatrics
-kinesic
-kinesics
-kinesimeter
-kinesiologic
-kinesiological
-kinesiology
-kinesiometer
-kinesis
-kinesitherapy
-kinesodic
-kinesthesia
-kinesthesis
-kinesthetic
-kinetic
-kinetical
-kinetically
-kinetics
-kinetochore
-kinetogenesis
-kinetogenetic
-kinetogenetically
-kinetogenic
-kinetogram
-kinetograph
-kinetographer
-kinetographic
-kinetography
-kinetomer
-kinetomeric
-kinetonema
-kinetonucleus
-kinetophone
-kinetophonograph
-kinetoplast
-kinetoscope
-kinetoscopic
-King
-king
-kingbird
-kingbolt
-kingcob
-kingcraft
-kingcup
-kingdom
-kingdomed
-kingdomful
-kingdomless
-kingdomship
-kingfish
-kingfisher
-kinghead
-kinghood
-kinghunter
-kingless
-kinglessness
-kinglet
-kinglihood
-kinglike
-kinglily
-kingliness
-kingling
-kingly
-kingmaker
-kingmaking
-kingpiece
-kingpin
-kingrow
-kingship
-kingsman
-Kingu
-kingweed
-kingwood
-Kinipetu
-kink
-kinkable
-kinkaider
-kinkajou
-kinkcough
-kinkhab
-kinkhost
-kinkily
-kinkiness
-kinkle
-kinkled
-kinkly
-kinksbush
-kinky
-kinless
-kinnikinnick
-kino
-kinofluous
-kinology
-kinoplasm
-kinoplasmic
-Kinorhyncha
-kinospore
-Kinosternidae
-Kinosternon
-kinotannic
-kinsfolk
-kinship
-kinsman
-kinsmanly
-kinsmanship
-kinspeople
-kinswoman
-kintar
-Kintyre
-kioea
-Kioko
-kiosk
-kiotome
-Kiowa
-Kiowan
-Kioway
-kip
-kipage
-Kipchak
-kipe
-Kiplingese
-Kiplingism
-kippeen
-kipper
-kipperer
-kippy
-kipsey
-kipskin
-Kiranti
-Kirghiz
-Kirghizean
-kiri
-Kirillitsa
-kirimon
-Kirk
-kirk
-kirker
-kirkify
-kirking
-kirkinhead
-kirklike
-kirkman
-kirktown
-kirkward
-kirkyard
-Kirman
-kirmew
-kirn
-kirombo
-kirsch
-Kirsten
-Kirsty
-kirtle
-kirtled
-Kirundi
-kirve
-kirver
-kischen
-kish
-Kishambala
-kishen
-kishon
-kishy
-kiskatom
-Kislev
-kismet
-kismetic
-kisra
-kiss
-kissability
-kissable
-kissableness
-kissage
-kissar
-kisser
-kissing
-kissingly
-kissproof
-kisswise
-kissy
-kist
-kistful
-kiswa
-Kiswahili
-Kit
-kit
-kitab
-kitabis
-Kitalpha
-Kitamat
-Kitan
-kitar
-kitcat
-kitchen
-kitchendom
-kitchener
-kitchenette
-kitchenful
-kitchenless
-kitchenmaid
-kitchenman
-kitchenry
-kitchenward
-kitchenwards
-kitchenware
-kitchenwife
-kitcheny
-kite
-kiteflier
-kiteflying
-kith
-kithe
-kithless
-kitish
-Kitkahaxki
-Kitkehahki
-kitling
-Kitlope
-Kittatinny
-kittel
-kitten
-kittendom
-kittenhearted
-kittenhood
-kittenish
-kittenishly
-kittenishness
-kittenless
-kittenship
-kitter
-kittereen
-kitthoge
-kittiwake
-kittle
-kittlepins
-kittles
-kittlish
-kittly
-kittock
-kittul
-Kitty
-kitty
-kittysol
-Kitunahan
-kiva
-kiver
-kivikivi
-kivu
-Kiwai
-Kiwanian
-Kiwanis
-kiwi
-kiwikiwi
-kiyas
-kiyi
-Kizil
-Kizilbash
-Kjeldahl
-kjeldahlization
-kjeldahlize
-klafter
-klaftern
-klam
-Klamath
-Klan
-Klanism
-Klansman
-Klanswoman
-klaprotholite
-Klaskino
-Klaudia
-Klaus
-klavern
-Klaxon
-klaxon
-Klebsiella
-kleeneboc
-Kleinian
-Kleistian
-klendusic
-klendusity
-klendusive
-klepht
-klephtic
-klephtism
-kleptic
-kleptistic
-kleptomania
-kleptomaniac
-kleptomanist
-kleptophobia
-klicket
-Klikitat
-Kling
-Klingsor
-klip
-klipbok
-klipdachs
-klipdas
-klipfish
-klippe
-klippen
-klipspringer
-klister
-klockmannite
-klom
-Klondike
-Klondiker
-klootchman
-klop
-klops
-klosh
-Kluxer
-klystron
-kmet
-knab
-knabble
-knack
-knackebrod
-knacker
-knackery
-knacky
-knag
-knagged
-knaggy
-knap
-knapbottle
-knape
-knappan
-Knapper
-knapper
-knappish
-knappishly
-knapsack
-knapsacked
-knapsacking
-knapweed
-knar
-knark
-knarred
-knarry
-Knautia
-knave
-knavery
-knaveship
-knavess
-knavish
-knavishly
-knavishness
-knawel
-knead
-kneadability
-kneadable
-kneader
-kneading
-kneadingly
-knebelite
-knee
-kneebrush
-kneecap
-kneed
-kneehole
-kneel
-kneeler
-kneelet
-kneeling
-kneelingly
-kneepad
-kneepan
-kneepiece
-kneestone
-Kneiffia
-Kneippism
-knell
-knelt
-Knesset
-knet
-knew
-knez
-knezi
-kniaz
-kniazi
-knick
-knicker
-Knickerbocker
-knickerbockered
-knickerbockers
-knickered
-knickers
-knickknack
-knickknackatory
-knickknacked
-knickknackery
-knickknacket
-knickknackish
-knickknacky
-knickpoint
-knife
-knifeboard
-knifeful
-knifeless
-knifelike
-knifeman
-knifeproof
-knifer
-knifesmith
-knifeway
-knight
-knightage
-knightess
-knighthead
-knighthood
-Knightia
-knightless
-knightlihood
-knightlike
-knightliness
-knightling
-knightly
-knightship
-knightswort
-Kniphofia
-Knisteneaux
-knit
-knitback
-knitch
-knitted
-knitter
-knitting
-knittle
-knitwear
-knitweed
-knitwork
-knived
-knivey
-knob
-knobbed
-knobber
-knobbiness
-knobble
-knobbler
-knobbly
-knobby
-knobkerrie
-knoblike
-knobstick
-knobstone
-knobular
-knobweed
-knobwood
-knock
-knockabout
-knockdown
-knockemdown
-knocker
-knocking
-knockless
-knockoff
-knockout
-knockstone
-knockup
-knoll
-knoller
-knolly
-knop
-knopite
-knopped
-knopper
-knoppy
-knopweed
-knorhaan
-Knorria
-knosp
-knosped
-Knossian
-knot
-knotberry
-knotgrass
-knothole
-knothorn
-knotless
-knotlike
-knotroot
-knotted
-knotter
-knottily
-knottiness
-knotting
-knotty
-knotweed
-knotwork
-knotwort
-knout
-know
-knowability
-knowable
-knowableness
-knowe
-knower
-knowing
-knowingly
-knowingness
-knowledge
-knowledgeable
-knowledgeableness
-knowledgeably
-knowledged
-knowledgeless
-knowledgement
-knowledging
-known
-knowperts
-Knoxian
-Knoxville
-knoxvillite
-knub
-knubbly
-knubby
-knublet
-knuckle
-knucklebone
-knuckled
-knuckler
-knuckling
-knuckly
-knuclesome
-Knudsen
-knur
-knurl
-knurled
-knurling
-knurly
-Knut
-knut
-Knute
-knutty
-knyaz
-knyazi
-Ko
-ko
-koa
-koae
-koala
-koali
-Koasati
-kob
-koban
-kobellite
-kobi
-kobird
-kobold
-kobong
-kobu
-Kobus
-Koch
-Kochab
-Kochia
-kochliarion
-koda
-Kodagu
-Kodak
-kodak
-kodaker
-kodakist
-kodakry
-Kodashim
-kodro
-kodurite
-Koeberlinia
-Koeberliniaceae
-koeberliniaceous
-koechlinite
-Koeksotenok
-koel
-Koellia
-Koelreuteria
-koenenite
-Koeri
-koff
-koft
-koftgar
-koftgari
-koggelmannetje
-Kogia
-Kohathite
-Koheleth
-kohemp
-Kohen
-Kohistani
-Kohl
-kohl
-Kohlan
-kohlrabi
-kohua
-koi
-Koiari
-Koibal
-koil
-koila
-koilanaglyphic
-koilon
-koimesis
-Koine
-koine
-koinon
-koinonia
-Koipato
-Koitapu
-kojang
-Kojiki
-kokako
-kokam
-kokan
-kokerboom
-kokil
-kokio
-koklas
-koklass
-Koko
-koko
-kokoon
-Kokoona
-kokoromiko
-kokowai
-kokra
-koksaghyz
-koku
-kokum
-kokumin
-kokumingun
-Kol
-kola
-kolach
-Kolarian
-Koldaji
-kolea
-koleroga
-kolhoz
-Koli
-kolinski
-kolinsky
-Kolis
-kolkhos
-kolkhoz
-Kolkka
-kollast
-kollaster
-koller
-kollergang
-kolo
-kolobion
-kolobus
-kolokolo
-kolsun
-koltunna
-koltunnor
-Koluschan
-Kolush
-Komati
-komatik
-kombu
-Kome
-Komi
-kominuter
-kommetje
-kommos
-komondor
-kompeni
-Komsomol
-kon
-kona
-konak
-Konariot
-Konde
-Kongo
-Kongoese
-Kongolese
-kongoni
-kongsbergite
-kongu
-Konia
-Koniaga
-Koniga
-konimeter
-koninckite
-konini
-koniology
-koniscope
-konjak
-Konkani
-Konomihu
-Konrad
-konstantin
-Konstantinos
-kontakion
-Konyak
-kooka
-kookaburra
-kookeree
-kookery
-kookri
-koolah
-kooletah
-kooliman
-koolokamba
-Koolooly
-koombar
-koomkie
-Koorg
-kootcha
-Kootenay
-kop
-Kopagmiut
-kopeck
-koph
-kopi
-koppa
-koppen
-koppite
-Koprino
-kor
-Kora
-kora
-koradji
-Korah
-Korahite
-Korahitic
-korait
-korakan
-Koran
-Korana
-Koranic
-Koranist
-korari
-Kore
-kore
-Korean
-korec
-koreci
-Koreish
-Koreishite
-korero
-Koreshan
-Koreshanity
-kori
-korimako
-korin
-Kornephorus
-kornerupine
-kornskeppa
-kornskeppur
-korntonde
-korntonder
-korntunna
-korntunnur
-Koroa
-koromika
-koromiko
-korona
-korova
-korrel
-korrigum
-korumburra
-koruna
-Korwa
-Kory
-Koryak
-korymboi
-korymbos
-korzec
-kos
-Kosalan
-Koschei
-kosher
-Kosimo
-kosin
-kosmokrator
-Koso
-kosong
-kosotoxin
-Kossaean
-Kossean
-Kosteletzkya
-koswite
-Kota
-kotal
-Kotar
-koto
-Kotoko
-kotschubeite
-kottigite
-kotuku
-kotukutuku
-kotwal
-kotwalee
-kotyle
-kotylos
-kou
-koulan
-Koungmiut
-kouza
-kovil
-Kowagmiut
-kowhai
-kowtow
-koyan
-kozo
-Kpuesi
-Kra
-kra
-kraal
-kraft
-Krag
-kragerite
-krageroite
-krait
-kraken
-krakowiak
-kral
-Krama
-krama
-Krameria
-Krameriaceae
-krameriaceous
-kran
-krantzite
-Krapina
-kras
-krasis
-kratogen
-kratogenic
-Kraunhia
-kraurite
-kraurosis
-kraurotic
-krausen
-krausite
-kraut
-kreis
-Kreistag
-kreistle
-kreittonite
-krelos
-kremersite
-kremlin
-krems
-kreng
-krennerite
-Krepi
-kreplech
-kreutzer
-kriegspiel
-krieker
-Krigia
-krimmer
-krina
-Kriophoros
-Kris
-Krishna
-Krishnaism
-Krishnaist
-Krishnaite
-Krishnaitic
-Kristen
-Kristi
-Kristian
-Kristin
-Kristinaux
-krisuvigite
-kritarchy
-Krithia
-Kriton
-kritrima
-krobyloi
-krobylos
-krocket
-krohnkite
-krome
-kromeski
-kromogram
-kromskop
-krona
-krone
-kronen
-kroner
-Kronion
-kronor
-kronur
-Kroo
-kroon
-krosa
-krouchka
-kroushka
-Kru
-Krugerism
-Krugerite
-Kruman
-krummhorn
-kryokonite
-krypsis
-kryptic
-krypticism
-kryptocyanine
-kryptol
-kryptomere
-krypton
-Krzysztof
-Kshatriya
-Kshatriyahood
-Kua
-Kuan
-kuan
-Kuar
-Kuba
-kuba
-Kubachi
-Kubanka
-kubba
-Kubera
-kubuklion
-Kuchean
-kuchen
-kudize
-kudos
-Kudrun
-kudu
-kudzu
-Kuehneola
-kuei
-Kufic
-kuge
-kugel
-Kuhnia
-Kui
-kuichua
-Kuki
-kukoline
-kukri
-kuku
-kukui
-Kukulcan
-kukupa
-Kukuruku
-kula
-kulack
-Kulah
-kulah
-kulaite
-kulak
-kulakism
-Kulanapan
-kulang
-Kuldip
-Kuli
-kulimit
-kulkarni
-kullaite
-Kullani
-kulm
-kulmet
-Kulturkampf
-Kulturkreis
-Kuman
-kumbi
-kumhar
-kumiss
-kummel
-Kumni
-kumquat
-kumrah
-Kumyk
-kunai
-Kunbi
-Kundry
-Kuneste
-kung
-kunk
-kunkur
-Kunmiut
-kunzite
-Kuomintang
-kupfernickel
-kupfferite
-kuphar
-kupper
-Kuranko
-kurbash
-kurchicine
-kurchine
-Kurd
-Kurdish
-Kurdistan
-kurgan
-Kuri
-Kurilian
-Kurku
-kurmburra
-Kurmi
-Kuroshio
-kurrajong
-Kurt
-kurtosis
-Kuruba
-Kurukh
-kuruma
-kurumaya
-Kurumba
-kurung
-kurus
-kurvey
-kurveyor
-kusa
-kusam
-Kusan
-kusha
-Kushshu
-kusimansel
-kuskite
-kuskos
-kuskus
-Kuskwogmiut
-Kustenau
-kusti
-Kusum
-kusum
-kutcha
-Kutchin
-Kutenai
-kuttab
-kuttar
-kuttaur
-kuvasz
-Kuvera
-kvass
-kvint
-kvinter
-Kwakiutl
-kwamme
-kwan
-Kwannon
-Kwapa
-kwarta
-kwarterka
-kwazoku
-kyack
-kyah
-kyar
-kyat
-kyaung
-Kybele
-Kyklopes
-Kyklops
-kyl
-Kyle
-kyle
-kylite
-kylix
-Kylo
-kymation
-kymatology
-kymbalon
-kymogram
-kymograph
-kymographic
-kynurenic
-kynurine
-kyphoscoliosis
-kyphoscoliotic
-Kyphosidae
-kyphosis
-kyphotic
-Kyrie
-kyrine
-kyschtymite
-kyte
-Kyu
-Kyung
-Kyurin
-Kyurinish
-L
-l
-la
-laager
-laang
-lab
-Laban
-labara
-labarum
-labba
-labber
-labdacism
-labdacismus
-labdanum
-labefact
-labefactation
-labefaction
-labefy
-label
-labeler
-labella
-labellate
-labeller
-labelloid
-labellum
-labia
-labial
-labialism
-labialismus
-labiality
-labialization
-labialize
-labially
-Labiatae
-labiate
-labiated
-labidophorous
-Labidura
-Labiduridae
-labiella
-labile
-lability
-labilization
-labilize
-labioalveolar
-labiocervical
-labiodental
-labioglossal
-labioglossolaryngeal
-labioglossopharyngeal
-labiograph
-labioguttural
-labiolingual
-labiomancy
-labiomental
-labionasal
-labiopalatal
-labiopalatalize
-labiopalatine
-labiopharyngeal
-labioplasty
-labiose
-labiotenaculum
-labiovelar
-labioversion
-labis
-labium
-lablab
-labor
-laborability
-laborable
-laborage
-laborant
-laboratorial
-laboratorian
-laboratory
-labordom
-labored
-laboredly
-laboredness
-laborer
-laboress
-laborhood
-laboring
-laboringly
-laborious
-laboriously
-laboriousness
-laborism
-laborist
-laborite
-laborless
-laborous
-laborously
-laborousness
-laborsaving
-laborsome
-laborsomely
-laborsomeness
-Laboulbenia
-Laboulbeniaceae
-laboulbeniaceous
-Laboulbeniales
-labour
-labra
-Labrador
-Labradorean
-labradorite
-labradoritic
-labral
-labret
-labretifery
-Labridae
-labroid
-Labroidea
-labrosaurid
-labrosauroid
-Labrosaurus
-labrose
-labrum
-Labrus
-labrusca
-labrys
-Laburnum
-labyrinth
-labyrinthal
-labyrinthally
-labyrinthian
-labyrinthibranch
-labyrinthibranchiate
-Labyrinthibranchii
-labyrinthic
-labyrinthical
-labyrinthically
-Labyrinthici
-labyrinthiform
-labyrinthine
-labyrinthitis
-Labyrinthodon
-labyrinthodont
-Labyrinthodonta
-labyrinthodontian
-labyrinthodontid
-labyrinthodontoid
-Labyrinthula
-Labyrinthulidae
-lac
-lacca
-laccaic
-laccainic
-laccase
-laccol
-laccolith
-laccolithic
-laccolitic
-lace
-lacebark
-laced
-Lacedaemonian
-laceflower
-laceleaf
-laceless
-lacelike
-lacemaker
-lacemaking
-laceman
-lacepiece
-lacepod
-lacer
-lacerability
-lacerable
-lacerant
-lacerate
-lacerated
-lacerately
-laceration
-lacerative
-Lacerta
-Lacertae
-lacertian
-Lacertid
-Lacertidae
-lacertiform
-Lacertilia
-lacertilian
-lacertiloid
-lacertine
-lacertoid
-lacertose
-lacery
-lacet
-lacewing
-lacewoman
-lacewood
-lacework
-laceworker
-laceybark
-lache
-Lachenalia
-laches
-Lachesis
-Lachnanthes
-Lachnosterna
-lachryma
-lachrymae
-lachrymaeform
-lachrymal
-lachrymally
-lachrymalness
-lachrymary
-lachrymation
-lachrymator
-lachrymatory
-lachrymiform
-lachrymist
-lachrymogenic
-lachrymonasal
-lachrymosal
-lachrymose
-lachrymosely
-lachrymosity
-lachrymous
-lachsa
-lacily
-Lacinaria
-laciness
-lacing
-lacinia
-laciniate
-laciniated
-laciniation
-laciniform
-laciniola
-laciniolate
-laciniose
-lacinula
-lacinulate
-lacinulose
-lacis
-lack
-lackadaisical
-lackadaisicality
-lackadaisically
-lackadaisicalness
-lackadaisy
-lackaday
-lacker
-lackey
-lackeydom
-lackeyed
-lackeyism
-lackeyship
-lackland
-lackluster
-lacklusterness
-lacklustrous
-lacksense
-lackwit
-lackwittedly
-lackwittedness
-lacmoid
-lacmus
-Laconian
-Laconic
-laconic
-laconica
-laconically
-laconicalness
-laconicism
-laconicum
-laconism
-laconize
-laconizer
-Lacosomatidae
-lacquer
-lacquerer
-lacquering
-lacquerist
-lacroixite
-lacrosse
-lacrosser
-lacrym
-lactagogue
-lactalbumin
-lactam
-lactamide
-lactant
-lactarene
-lactarious
-lactarium
-Lactarius
-lactary
-lactase
-lactate
-lactation
-lactational
-lacteal
-lactean
-lactenin
-lacteous
-lactesce
-lactescence
-lactescency
-lactescent
-lactic
-lacticinia
-lactid
-lactide
-lactiferous
-lactiferousness
-lactific
-lactifical
-lactification
-lactiflorous
-lactifluous
-lactiform
-lactifuge
-lactify
-lactigenic
-lactigenous
-lactigerous
-lactim
-lactimide
-lactinate
-lactivorous
-lacto
-lactobacilli
-Lactobacillus
-lactobacillus
-lactobutyrometer
-lactocele
-lactochrome
-lactocitrate
-lactodensimeter
-lactoflavin
-lactoglobulin
-lactoid
-lactol
-lactometer
-lactone
-lactonic
-lactonization
-lactonize
-lactophosphate
-lactoproteid
-lactoprotein
-lactoscope
-lactose
-lactoside
-lactosuria
-lactothermometer
-lactotoxin
-lactovegetarian
-Lactuca
-lactucarium
-lactucerin
-lactucin
-lactucol
-lactucon
-lactyl
-lacuna
-lacunae
-lacunal
-lacunar
-lacunaria
-lacunary
-lacune
-lacunose
-lacunosity
-lacunule
-lacunulose
-lacuscular
-lacustral
-lacustrian
-lacustrine
-lacwork
-lacy
-lad
-Ladakhi
-ladakin
-ladanigerous
-ladanum
-ladder
-laddered
-laddering
-ladderlike
-ladderway
-ladderwise
-laddery
-laddess
-laddie
-laddikie
-laddish
-laddock
-lade
-lademan
-laden
-lader
-ladhood
-ladies
-ladify
-Ladik
-Ladin
-lading
-Ladino
-ladkin
-ladle
-ladleful
-ladler
-ladlewood
-ladrone
-ladronism
-ladronize
-lady
-ladybird
-ladybug
-ladyclock
-ladydom
-ladyfinger
-ladyfish
-ladyfly
-ladyfy
-ladyhood
-ladyish
-ladyism
-ladykin
-ladykind
-ladyless
-ladylike
-ladylikely
-ladylikeness
-ladyling
-ladylintywhite
-ladylove
-ladyly
-ladyship
-Ladytide
-Laelia
-laemodipod
-Laemodipoda
-laemodipodan
-laemodipodiform
-laemodipodous
-laemoparalysis
-laemostenosis
-laeotropic
-laeotropism
-Laestrygones
-laet
-laeti
-laetic
-Laevigrada
-laevoduction
-laevogyrate
-laevogyre
-laevogyrous
-laevolactic
-laevorotation
-laevorotatory
-laevotartaric
-laevoversion
-lafayette
-Lafite
-lag
-lagan
-lagarto
-lagen
-lagena
-Lagenaria
-lagend
-lageniform
-lager
-Lagerstroemia
-Lagetta
-lagetto
-laggar
-laggard
-laggardism
-laggardly
-laggardness
-lagged
-laggen
-lagger
-laggin
-lagging
-laglast
-lagna
-lagniappe
-lagomorph
-Lagomorpha
-lagomorphic
-lagomorphous
-Lagomyidae
-lagonite
-lagoon
-lagoonal
-lagoonside
-lagophthalmos
-lagopode
-lagopodous
-lagopous
-Lagopus
-Lagorchestes
-lagostoma
-Lagostomus
-Lagothrix
-Lagrangian
-Lagthing
-Lagting
-Laguncularia
-Lagunero
-Lagurus
-lagwort
-Lahnda
-Lahontan
-Lahuli
-Lai
-lai
-Laibach
-laic
-laical
-laicality
-laically
-laich
-laicism
-laicity
-laicization
-laicize
-laicizer
-laid
-laigh
-lain
-laine
-laiose
-lair
-lairage
-laird
-lairdess
-lairdie
-lairdly
-lairdocracy
-lairdship
-lairless
-lairman
-lairstone
-lairy
-laitance
-laity
-Lak
-lak
-lakarpite
-lakatoi
-lake
-lakeland
-lakelander
-lakeless
-lakelet
-lakelike
-lakemanship
-laker
-lakeside
-lakeward
-lakeweed
-lakie
-laking
-lakish
-lakishness
-lakism
-lakist
-Lakota
-Lakshmi
-laky
-lalang
-lall
-Lallan
-Lalland
-lallation
-lalling
-lalo
-laloneurosis
-lalopathy
-lalophobia
-laloplegia
-lam
-lama
-lamaic
-Lamaism
-Lamaist
-Lamaistic
-Lamaite
-Lamanism
-Lamanite
-Lamano
-lamantin
-lamany
-Lamarckia
-Lamarckian
-Lamarckianism
-Lamarckism
-lamasary
-lamasery
-lamastery
-lamb
-Lamba
-lamba
-Lambadi
-lambale
-lambaste
-lambda
-lambdacism
-lambdoid
-lambdoidal
-lambeau
-lambency
-lambent
-lambently
-lamber
-Lambert
-lambert
-lambhood
-lambie
-lambiness
-lambish
-lambkill
-lambkin
-Lamblia
-lambliasis
-lamblike
-lambling
-lambly
-lamboys
-lambrequin
-lambsdown
-lambskin
-lambsuccory
-lamby
-lame
-lamedh
-lameduck
-lamel
-lamella
-lamellar
-Lamellaria
-Lamellariidae
-lamellarly
-lamellary
-lamellate
-lamellated
-lamellately
-lamellation
-lamellibranch
-Lamellibranchia
-Lamellibranchiata
-lamellibranchiate
-lamellicorn
-lamellicornate
-Lamellicornes
-Lamellicornia
-lamellicornous
-lamelliferous
-lamelliform
-lamellirostral
-lamellirostrate
-Lamellirostres
-lamelloid
-lamellose
-lamellosity
-lamellule
-lamely
-lameness
-lament
-lamentable
-lamentableness
-lamentably
-lamentation
-lamentational
-lamentatory
-lamented
-lamentedly
-lamenter
-lamentful
-lamenting
-lamentingly
-lamentive
-lamentory
-lamester
-lamestery
-lameter
-lametta
-lamia
-Lamiaceae
-lamiaceous
-lamiger
-lamiid
-Lamiidae
-Lamiides
-Lamiinae
-lamin
-lamina
-laminability
-laminable
-laminae
-laminar
-Laminaria
-Laminariaceae
-laminariaceous
-Laminariales
-laminarian
-laminarin
-laminarioid
-laminarite
-laminary
-laminate
-laminated
-lamination
-laminboard
-laminectomy
-laminiferous
-laminiform
-laminiplantar
-laminiplantation
-laminitis
-laminose
-laminous
-lamish
-Lamista
-lamiter
-Lamium
-Lammas
-lammas
-Lammastide
-lammer
-lammergeier
-lammock
-lammy
-Lamna
-lamnectomy
-lamnid
-Lamnidae
-lamnoid
-lamp
-lampad
-lampadary
-lampadedromy
-lampadephore
-lampadephoria
-lampadite
-lampas
-lampatia
-lampblack
-lamper
-lampern
-lampers
-lampflower
-lampfly
-lampful
-lamphole
-lamping
-lampion
-lampist
-lampistry
-lampless
-lamplet
-lamplight
-lamplighted
-lamplighter
-lamplit
-lampmaker
-lampmaking
-lampman
-Lampong
-lampoon
-lampooner
-lampoonery
-lampoonist
-lamppost
-lamprey
-Lampridae
-lamprophony
-lamprophyre
-lamprophyric
-lamprotype
-Lampsilis
-Lampsilus
-lampstand
-lampwick
-lampyrid
-Lampyridae
-lampyrine
-Lampyris
-Lamus
-Lamut
-lamziekte
-lan
-Lana
-lanameter
-Lanao
-Lanarkia
-lanarkite
-lanas
-lanate
-lanated
-lanaz
-Lancaster
-Lancasterian
-Lancastrian
-Lance
-lance
-lanced
-lancegay
-lancelet
-lancelike
-lancely
-lanceman
-lanceolar
-lanceolate
-lanceolated
-lanceolately
-lanceolation
-lancepesade
-lancepod
-lanceproof
-lancer
-lances
-lancet
-lanceted
-lanceteer
-lancewood
-lancha
-lanciers
-lanciferous
-lanciform
-lancinate
-lancination
-land
-landamman
-landau
-landaulet
-landaulette
-landblink
-landbook
-landdrost
-landed
-lander
-landesite
-landfall
-landfast
-landflood
-landgafol
-landgravate
-landgrave
-landgraveship
-landgravess
-landgraviate
-landgravine
-landholder
-landholdership
-landholding
-landimere
-landing
-landlady
-landladydom
-landladyhood
-landladyish
-landladyship
-landless
-landlessness
-landlike
-landline
-landlock
-landlocked
-landlook
-landlooker
-landloper
-landlord
-landlordism
-landlordly
-landlordry
-landlordship
-landlouper
-landlouping
-landlubber
-landlubberish
-landlubberly
-landlubbing
-landman
-landmark
-Landmarker
-landmil
-landmonger
-landocracy
-landocrat
-Landolphia
-landolphia
-landowner
-landownership
-landowning
-landplane
-landraker
-landreeve
-landright
-landsale
-landscape
-landscapist
-landshard
-landship
-landsick
-landside
-landskip
-landslide
-landslip
-Landsmaal
-landsman
-landspout
-landspringy
-Landsting
-landstorm
-Landsturm
-Landuman
-landwaiter
-landward
-landwash
-landways
-Landwehr
-landwhin
-landwire
-landwrack
-lane
-lanete
-laneway
-laney
-langaha
-langarai
-langbanite
-langbeinite
-langca
-Langhian
-langi
-langite
-langlauf
-langlaufer
-langle
-Lango
-Langobard
-Langobardic
-langoon
-langooty
-langrage
-langsat
-Langsdorffia
-langsettle
-Langshan
-langspiel
-langsyne
-language
-languaged
-languageless
-langued
-Languedocian
-languescent
-languet
-languid
-languidly
-languidness
-languish
-languisher
-languishing
-languishingly
-languishment
-languor
-languorous
-languorously
-langur
-laniariform
-laniary
-laniate
-laniferous
-lanific
-laniflorous
-laniform
-lanigerous
-Laniidae
-laniiform
-Laniinae
-lanioid
-lanista
-Lanital
-Lanius
-lank
-lanket
-lankily
-lankiness
-lankish
-lankly
-lankness
-lanky
-lanner
-lanneret
-Lanny
-lanolin
-lanose
-lanosity
-lansat
-lansdowne
-lanseh
-lansfordite
-lansknecht
-lanson
-lansquenet
-lant
-lantaca
-Lantana
-lanterloo
-lantern
-lanternflower
-lanternist
-lanternleaf
-lanternman
-lanthana
-lanthanide
-lanthanite
-Lanthanotidae
-Lanthanotus
-lanthanum
-lanthopine
-lantum
-lanuginose
-lanuginous
-lanuginousness
-lanugo
-lanum
-Lanuvian
-lanx
-lanyard
-Lao
-Laodicean
-Laodiceanism
-Laotian
-lap
-lapacho
-lapachol
-lapactic
-Lapageria
-laparectomy
-laparocele
-laparocholecystotomy
-laparocolectomy
-laparocolostomy
-laparocolotomy
-laparocolpohysterotomy
-laparocolpotomy
-laparocystectomy
-laparocystotomy
-laparoelytrotomy
-laparoenterostomy
-laparoenterotomy
-laparogastroscopy
-laparogastrotomy
-laparohepatotomy
-laparohysterectomy
-laparohysteropexy
-laparohysterotomy
-laparoileotomy
-laparomyitis
-laparomyomectomy
-laparomyomotomy
-laparonephrectomy
-laparonephrotomy
-laparorrhaphy
-laparosalpingectomy
-laparosalpingotomy
-laparoscopy
-laparosplenectomy
-laparosplenotomy
-laparostict
-Laparosticti
-laparothoracoscopy
-laparotome
-laparotomist
-laparotomize
-laparotomy
-laparotrachelotomy
-lapboard
-lapcock
-Lapeirousia
-lapel
-lapeler
-lapelled
-lapful
-lapicide
-lapidarian
-lapidarist
-lapidary
-lapidate
-lapidation
-lapidator
-lapideon
-lapideous
-lapidescent
-lapidicolous
-lapidific
-lapidification
-lapidify
-lapidist
-lapidity
-lapidose
-lapilliform
-lapillo
-lapillus
-Lapith
-Lapithae
-Lapithaean
-Laplacian
-Lapland
-Laplander
-Laplandian
-Laplandic
-Laplandish
-lapon
-Laportea
-Lapp
-Lappa
-lappaceous
-lappage
-lapped
-lapper
-lappet
-lappeted
-Lappic
-lapping
-Lappish
-Lapponese
-Lapponian
-Lappula
-lapsability
-lapsable
-Lapsana
-lapsation
-lapse
-lapsed
-lapser
-lapsi
-lapsing
-lapsingly
-lapstone
-lapstreak
-lapstreaked
-lapstreaker
-Laputa
-Laputan
-laputically
-lapwing
-lapwork
-laquear
-laquearian
-laqueus
-Lar
-lar
-Laralia
-Laramide
-Laramie
-larboard
-larbolins
-larbowlines
-larcener
-larcenic
-larcenish
-larcenist
-larcenous
-larcenously
-larceny
-larch
-larchen
-lard
-lardacein
-lardaceous
-larder
-larderellite
-larderer
-larderful
-larderlike
-lardiform
-lardite
-Lardizabalaceae
-lardizabalaceous
-lardon
-lardworm
-lardy
-lareabell
-Larentiidae
-large
-largebrained
-largehanded
-largehearted
-largeheartedness
-largely
-largemouth
-largemouthed
-largen
-largeness
-largess
-larghetto
-largifical
-largish
-largition
-largitional
-largo
-Lari
-lari
-Laria
-lariat
-larick
-larid
-Laridae
-laridine
-larigo
-larigot
-lariid
-Lariidae
-larin
-Larinae
-larine
-larithmics
-Larix
-larixin
-lark
-larker
-larkiness
-larking
-larkingly
-larkish
-larkishness
-larklike
-larkling
-larksome
-larkspur
-larky
-larmier
-larmoyant
-Larnaudian
-larnax
-laroid
-larrigan
-larrikin
-larrikinalian
-larrikiness
-larrikinism
-larriman
-larrup
-Larry
-larry
-Lars
-larsenite
-Larunda
-Larus
-larva
-Larvacea
-larvae
-larval
-Larvalia
-larvarium
-larvate
-larve
-larvicidal
-larvicide
-larvicolous
-larviform
-larvigerous
-larvikite
-larviparous
-larviposit
-larviposition
-larvivorous
-larvule
-laryngal
-laryngalgia
-laryngeal
-laryngeally
-laryngean
-laryngeating
-laryngectomy
-laryngemphraxis
-laryngendoscope
-larynges
-laryngic
-laryngismal
-laryngismus
-laryngitic
-laryngitis
-laryngocele
-laryngocentesis
-laryngofission
-laryngofissure
-laryngograph
-laryngography
-laryngological
-laryngologist
-laryngology
-laryngometry
-laryngoparalysis
-laryngopathy
-laryngopharyngeal
-laryngopharyngitis
-laryngophony
-laryngophthisis
-laryngoplasty
-laryngoplegia
-laryngorrhagia
-laryngorrhea
-laryngoscleroma
-laryngoscope
-laryngoscopic
-laryngoscopical
-laryngoscopist
-laryngoscopy
-laryngospasm
-laryngostasis
-laryngostenosis
-laryngostomy
-laryngostroboscope
-laryngotome
-laryngotomy
-laryngotracheal
-laryngotracheitis
-laryngotracheoscopy
-laryngotracheotomy
-laryngotyphoid
-laryngovestibulitis
-larynx
-las
-lasa
-lasarwort
-lascar
-lascivious
-lasciviously
-lasciviousness
-laser
-Laserpitium
-laserwort
-lash
-lasher
-lashingly
-lashless
-lashlite
-Lasi
-lasianthous
-Lasiocampa
-lasiocampid
-Lasiocampidae
-Lasiocampoidea
-lasiocarpous
-Lasius
-lask
-lasket
-Laspeyresia
-laspring
-lasque
-lass
-lasset
-lassie
-lassiehood
-lassieish
-lassitude
-lasslorn
-lasso
-lassock
-lassoer
-last
-lastage
-laster
-lasting
-lastingly
-lastingness
-lastly
-lastness
-lastre
-lastspring
-lasty
-lat
-lata
-latah
-Latakia
-Latania
-Latax
-latch
-latcher
-latchet
-latching
-latchkey
-latchless
-latchman
-latchstring
-late
-latebra
-latebricole
-latecomer
-latecoming
-lated
-lateen
-lateener
-lately
-laten
-latence
-latency
-lateness
-latensification
-latent
-latentize
-latently
-latentness
-later
-latera
-laterad
-lateral
-lateralis
-laterality
-lateralization
-lateralize
-laterally
-Lateran
-latericumbent
-lateriflexion
-laterifloral
-lateriflorous
-laterifolious
-Laterigradae
-laterigrade
-laterinerved
-laterite
-lateritic
-lateritious
-lateriversion
-laterization
-lateroabdominal
-lateroanterior
-laterocaudal
-laterocervical
-laterodeviation
-laterodorsal
-lateroduction
-lateroflexion
-lateromarginal
-lateronuchal
-lateroposition
-lateroposterior
-lateropulsion
-laterostigmatal
-laterostigmatic
-laterotemporal
-laterotorsion
-lateroventral
-lateroversion
-latescence
-latescent
-latesome
-latest
-latewhile
-latex
-latexosis
-lath
-lathe
-lathee
-latheman
-lathen
-lather
-latherability
-latherable
-lathereeve
-latherer
-latherin
-latheron
-latherwort
-lathery
-lathesman
-lathhouse
-lathing
-Lathraea
-lathwork
-lathy
-lathyric
-lathyrism
-Lathyrus
-Latian
-latibulize
-latices
-laticiferous
-laticlave
-laticostate
-latidentate
-latifundian
-latifundium
-latigo
-Latimeria
-Latin
-Latinate
-Latiner
-Latinesque
-Latinian
-Latinic
-Latiniform
-Latinism
-latinism
-Latinist
-Latinistic
-Latinistical
-Latinitaster
-Latinity
-Latinization
-Latinize
-Latinizer
-Latinless
-Latinus
-lation
-latipennate
-latiplantar
-latirostral
-Latirostres
-latirostrous
-Latirus
-latisept
-latiseptal
-latiseptate
-latish
-latisternal
-latitancy
-latitant
-latitat
-latite
-latitude
-latitudinal
-latitudinally
-latitudinarian
-latitudinarianisn
-latitudinary
-latitudinous
-latomy
-Latona
-Latonian
-Latooka
-latrant
-latration
-latreutic
-latria
-Latrididae
-latrine
-Latris
-latro
-latrobe
-latrobite
-latrocinium
-Latrodectus
-latron
-latten
-lattener
-latter
-latterkin
-latterly
-lattermath
-lattermost
-latterness
-lattice
-latticed
-latticewise
-latticework
-latticing
-latticinio
-Latuka
-latus
-Latvian
-lauan
-laubanite
-laud
-laudability
-laudable
-laudableness
-laudably
-laudanidine
-laudanin
-laudanine
-laudanosine
-laudanum
-laudation
-laudative
-laudator
-laudatorily
-laudatory
-lauder
-Laudian
-Laudianism
-laudification
-Laudism
-Laudist
-laudist
-laugh
-laughable
-laughableness
-laughably
-laughee
-laugher
-laughful
-laughing
-laughingly
-laughingstock
-laughsome
-laughter
-laughterful
-laughterless
-laughworthy
-laughy
-lauia
-laumonite
-laumontite
-laun
-launce
-launch
-launcher
-launchful
-launchways
-laund
-launder
-launderability
-launderable
-launderer
-laundry
-laundrymaid
-laundryman
-laundryowner
-laundrywoman
-laur
-Laura
-laura
-Lauraceae
-lauraceous
-lauraldehyde
-laurate
-laurdalite
-laureate
-laureated
-laureateship
-laureation
-Laurel
-laurel
-laureled
-laurellike
-laurelship
-laurelwood
-Laurence
-Laurencia
-Laurent
-Laurentian
-Laurentide
-laureole
-Laurianne
-lauric
-Laurie
-laurin
-laurinoxylon
-laurionite
-laurite
-Laurocerasus
-laurone
-laurotetanine
-Laurus
-laurustine
-laurustinus
-laurvikite
-lauryl
-lautarite
-lautitious
-lava
-lavable
-lavabo
-lavacre
-lavage
-lavaliere
-lavalike
-Lavandula
-lavanga
-lavant
-lavaret
-Lavatera
-lavatic
-lavation
-lavational
-lavatorial
-lavatory
-lave
-laveer
-Lavehr
-lavement
-lavender
-lavenite
-laver
-Laverania
-laverock
-laverwort
-lavialite
-lavic
-Lavinia
-lavish
-lavisher
-lavishing
-lavishingly
-lavishly
-lavishment
-lavishness
-lavolta
-lavrovite
-law
-lawbook
-lawbreaker
-lawbreaking
-lawcraft
-lawful
-lawfully
-lawfulness
-lawgiver
-lawgiving
-lawing
-lawish
-lawk
-lawlants
-lawless
-lawlessly
-lawlessness
-lawlike
-lawmaker
-lawmaking
-lawman
-lawmonger
-lawn
-lawned
-lawner
-lawnlet
-lawnlike
-lawny
-lawproof
-Lawrence
-lawrencite
-Lawrie
-lawrightman
-Lawson
-Lawsoneve
-Lawsonia
-lawsonite
-lawsuit
-lawsuiting
-lawter
-Lawton
-lawyer
-lawyeress
-lawyerism
-lawyerlike
-lawyerling
-lawyerly
-lawyership
-lawyery
-lawzy
-lax
-laxate
-laxation
-laxative
-laxatively
-laxativeness
-laxiflorous
-laxifoliate
-laxifolious
-laxism
-laxist
-laxity
-laxly
-laxness
-lay
-layaway
-layback
-layboy
-layer
-layerage
-layered
-layery
-layette
-Layia
-laying
-layland
-layman
-laymanship
-layne
-layoff
-layout
-layover
-layship
-laystall
-laystow
-laywoman
-Laz
-lazar
-lazaret
-lazaretto
-Lazarist
-lazarlike
-lazarly
-lazarole
-Lazarus
-laze
-lazily
-laziness
-lazule
-lazuli
-lazuline
-lazulite
-lazulitic
-lazurite
-lazy
-lazybird
-lazybones
-lazyboots
-lazyhood
-lazyish
-lazylegs
-lazyship
-lazzarone
-lazzaroni
-Lea
-lea
-leach
-leacher
-leachman
-leachy
-Lead
-lead
-leadable
-leadableness
-leadage
-leadback
-leaded
-leaden
-leadenhearted
-leadenheartedness
-leadenly
-leadenness
-leadenpated
-leader
-leaderess
-leaderette
-leaderless
-leadership
-leadhillite
-leadin
-leadiness
-leading
-leadingly
-leadless
-leadman
-leadoff
-leadout
-leadproof
-Leads
-leadsman
-leadstone
-leadway
-leadwood
-leadwork
-leadwort
-leady
-leaf
-leafage
-leafboy
-leafcup
-leafdom
-leafed
-leafen
-leafer
-leafery
-leafgirl
-leafit
-leafless
-leaflessness
-leaflet
-leafleteer
-leaflike
-leafstalk
-leafwork
-leafy
-league
-leaguelong
-leaguer
-Leah
-leak
-leakage
-leakance
-leaker
-leakiness
-leakless
-leakproof
-leaky
-leal
-lealand
-leally
-lealness
-lealty
-leam
-leamer
-lean
-Leander
-leaner
-leaning
-leanish
-leanly
-leanness
-leant
-leap
-leapable
-leaper
-leapfrog
-leapfrogger
-leapfrogging
-leaping
-leapingly
-leapt
-Lear
-lear
-Learchus
-learn
-learnable
-learned
-learnedly
-learnedness
-learner
-learnership
-learning
-learnt
-Learoyd
-leasable
-lease
-leasehold
-leaseholder
-leaseholding
-leaseless
-leasemonger
-leaser
-leash
-leashless
-leasing
-leasow
-least
-leastways
-leastwise
-leat
-leath
-leather
-leatherback
-leatherbark
-leatherboard
-leatherbush
-leathercoat
-leathercraft
-leatherer
-Leatherette
-leatherfish
-leatherflower
-leatherhead
-leatherine
-leatheriness
-leathering
-leatherize
-leatherjacket
-leatherleaf
-leatherlike
-leathermaker
-leathermaking
-leathern
-leatherneck
-Leatheroid
-leatherroot
-leatherside
-Leatherstocking
-leatherware
-leatherwing
-leatherwood
-leatherwork
-leatherworker
-leatherworking
-leathery
-leathwake
-leatman
-leave
-leaved
-leaveless
-leavelooker
-leaven
-leavening
-leavenish
-leavenless
-leavenous
-leaver
-leaverwood
-leaves
-leaving
-leavy
-leawill
-leban
-Lebanese
-lebbek
-lebensraum
-Lebistes
-lebrancho
-lecama
-lecaniid
-Lecaniinae
-lecanine
-Lecanium
-lecanomancer
-lecanomancy
-lecanomantic
-Lecanora
-Lecanoraceae
-lecanoraceous
-lecanorine
-lecanoroid
-lecanoscopic
-lecanoscopy
-lech
-Lechea
-lecher
-lecherous
-lecherously
-lecherousness
-lechery
-lechriodont
-Lechriodonta
-lechuguilla
-lechwe
-Lecidea
-Lecideaceae
-lecideaceous
-lecideiform
-lecideine
-lecidioid
-lecithal
-lecithalbumin
-lecithality
-lecithin
-lecithinase
-lecithoblast
-lecithoprotein
-leck
-lecker
-lecontite
-lecotropal
-lectern
-lection
-lectionary
-lectisternium
-lector
-lectorate
-lectorial
-lectorship
-lectotype
-lectress
-lectrice
-lectual
-lecture
-lecturee
-lectureproof
-lecturer
-lectureship
-lecturess
-lecturette
-lecyth
-lecythid
-Lecythidaceae
-lecythidaceous
-Lecythis
-lecythoid
-lecythus
-led
-Leda
-lede
-leden
-lederite
-ledge
-ledged
-ledgeless
-ledger
-ledgerdom
-ledging
-ledgment
-ledgy
-Ledidae
-ledol
-Ledum
-Lee
-lee
-leeangle
-leeboard
-leech
-leecheater
-leecher
-leechery
-leeches
-leechkin
-leechlike
-leechwort
-leed
-leefang
-leeftail
-leek
-leekish
-leeky
-leep
-leepit
-leer
-leerily
-leeringly
-leerish
-leerness
-leeroway
-Leersia
-leery
-lees
-leet
-leetman
-leewan
-leeward
-leewardly
-leewardmost
-leewardness
-leeway
-leewill
-left
-leftish
-leftism
-leftist
-leftments
-leftmost
-leftness
-leftover
-leftward
-leftwardly
-leftwards
-leg
-legacy
-legal
-legalese
-legalism
-legalist
-legalistic
-legalistically
-legality
-legalization
-legalize
-legally
-legalness
-legantine
-legatary
-legate
-legatee
-legateship
-legatine
-legation
-legationary
-legative
-legato
-legator
-legatorial
-legend
-legenda
-legendarian
-legendary
-legendic
-legendist
-legendless
-Legendrian
-legendry
-leger
-legerdemain
-legerdemainist
-legerity
-leges
-legged
-legger
-legginess
-legging
-legginged
-leggy
-leghorn
-legibility
-legible
-legibleness
-legibly
-legific
-legion
-legionary
-legioned
-legioner
-legionnaire
-legionry
-legislate
-legislation
-legislational
-legislativ
-legislative
-legislatively
-legislator
-legislatorial
-legislatorially
-legislatorship
-legislatress
-legislature
-legist
-legit
-legitim
-legitimacy
-legitimate
-legitimately
-legitimateness
-legitimation
-legitimatist
-legitimatize
-legitimism
-legitimist
-legitimistic
-legitimity
-legitimization
-legitimize
-leglen
-legless
-leglessness
-leglet
-leglike
-legman
-legoa
-legpiece
-legpull
-legpuller
-legpulling
-legrope
-legua
-leguan
-Leguatia
-leguleian
-leguleious
-legume
-legumelin
-legumen
-legumin
-leguminiform
-Leguminosae
-leguminose
-leguminous
-Lehi
-lehr
-lehrbachite
-lehrman
-lehua
-lei
-Leibnitzian
-Leibnitzianism
-Leicester
-Leif
-Leigh
-leighton
-Leila
-leimtype
-leiocephalous
-leiocome
-leiodermatous
-leiodermia
-leiomyofibroma
-leiomyoma
-leiomyomatous
-leiomyosarcoma
-leiophyllous
-Leiophyllum
-Leiothrix
-Leiotrichan
-Leiotriches
-Leiotrichi
-Leiotrichidae
-Leiotrichinae
-leiotrichine
-leiotrichous
-leiotrichy
-leiotropic
-Leipoa
-Leishmania
-leishmaniasis
-Leisten
-leister
-leisterer
-leisurable
-leisurably
-leisure
-leisured
-leisureful
-leisureless
-leisureliness
-leisurely
-leisureness
-Leith
-leitmotiv
-Leitneria
-Leitneriaceae
-leitneriaceous
-Leitneriales
-lek
-lekach
-lekane
-lekha
-Lelia
-Lemaireocereus
-leman
-Lemanea
-Lemaneaceae
-lemel
-lemma
-lemmata
-lemming
-lemmitis
-lemmoblastic
-lemmocyte
-Lemmus
-Lemna
-Lemnaceae
-lemnaceous
-lemnad
-Lemnian
-lemniscate
-lemniscatic
-lemniscus
-lemography
-lemology
-lemon
-lemonade
-Lemonias
-Lemoniidae
-Lemoniinae
-lemonish
-lemonlike
-lemonweed
-lemonwood
-lemony
-Lemosi
-Lemovices
-lempira
-Lemuel
-lemur
-lemures
-Lemuria
-Lemurian
-lemurian
-lemurid
-Lemuridae
-lemuriform
-Lemurinae
-lemurine
-lemuroid
-Lemuroidea
-Len
-Lena
-lenad
-Lenaea
-Lenaean
-Lenaeum
-Lenaeus
-Lenape
-lenard
-Lenca
-Lencan
-lench
-lend
-lendable
-lendee
-lender
-Lendu
-lene
-length
-lengthen
-lengthener
-lengther
-lengthful
-lengthily
-lengthiness
-lengthsman
-lengthsome
-lengthsomeness
-lengthways
-lengthwise
-lengthy
-lenience
-leniency
-lenient
-leniently
-lenify
-Leninism
-Leninist
-Leninite
-lenis
-lenitic
-lenitive
-lenitively
-lenitiveness
-lenitude
-lenity
-lennilite
-Lennoaceae
-lennoaceous
-lennow
-Lenny
-leno
-Lenora
-lens
-lensed
-lensless
-lenslike
-Lent
-lent
-Lenten
-Lententide
-lenth
-lenthways
-Lentibulariaceae
-lentibulariaceous
-lenticel
-lenticellate
-lenticle
-lenticonus
-lenticula
-lenticular
-lenticulare
-lenticularis
-lenticularly
-lenticulate
-lenticulated
-lenticule
-lenticulostriate
-lenticulothalamic
-lentiform
-lentigerous
-lentiginous
-lentigo
-lentil
-Lentilla
-lentisc
-lentiscine
-lentisco
-lentiscus
-lentisk
-lentitude
-lentitudinous
-lento
-lentoid
-lentor
-lentous
-lenvoi
-lenvoy
-Lenzites
-Leo
-Leon
-Leonard
-Leonardesque
-Leonato
-leoncito
-Leonese
-leonhardite
-Leonid
-Leonine
-leonine
-leoninely
-leonines
-Leonis
-Leonist
-leonite
-Leonnoys
-Leonora
-Leonotis
-leontiasis
-Leontocebus
-leontocephalous
-Leontodon
-Leontopodium
-Leonurus
-leopard
-leoparde
-leopardess
-leopardine
-leopardite
-leopardwood
-Leopold
-Leopoldinia
-leopoldite
-Leora
-leotard
-lepa
-Lepadidae
-lepadoid
-Lepanto
-lepargylic
-Lepargyraea
-Lepas
-Lepcha
-leper
-leperdom
-lepered
-lepidene
-lepidine
-Lepidium
-lepidoblastic
-Lepidodendraceae
-lepidodendraceous
-lepidodendrid
-lepidodendroid
-Lepidodendron
-lepidoid
-Lepidoidei
-lepidolite
-lepidomelane
-Lepidophloios
-lepidophyllous
-Lepidophyllum
-lepidophyte
-lepidophytic
-lepidoporphyrin
-lepidopter
-Lepidoptera
-lepidopteral
-lepidopteran
-lepidopterid
-lepidopterist
-lepidopterological
-lepidopterologist
-lepidopterology
-lepidopteron
-lepidopterous
-Lepidosauria
-lepidosaurian
-Lepidosiren
-Lepidosirenidae
-lepidosirenoid
-lepidosis
-Lepidosperma
-Lepidospermae
-Lepidosphes
-Lepidostei
-lepidosteoid
-Lepidosteus
-Lepidostrobus
-lepidote
-Lepidotes
-lepidotic
-Lepidotus
-Lepidurus
-Lepilemur
-Lepiota
-Lepisma
-Lepismatidae
-Lepismidae
-lepismoid
-Lepisosteidae
-Lepisosteus
-lepocyte
-Lepomis
-leporid
-Leporidae
-leporide
-leporiform
-leporine
-Leporis
-Lepospondyli
-lepospondylous
-Leposternidae
-Leposternon
-lepothrix
-lepra
-Lepralia
-lepralian
-leprechaun
-lepric
-leproid
-leprologic
-leprologist
-leprology
-leproma
-lepromatous
-leprosarium
-leprose
-leprosery
-leprosied
-leprosis
-leprosity
-leprosy
-leprous
-leprously
-leprousness
-Leptamnium
-Leptandra
-leptandrin
-leptid
-Leptidae
-leptiform
-Leptilon
-leptinolite
-Leptinotarsa
-leptite
-Leptocardia
-leptocardian
-Leptocardii
-leptocentric
-leptocephalan
-leptocephali
-leptocephalia
-leptocephalic
-leptocephalid
-Leptocephalidae
-leptocephaloid
-leptocephalous
-Leptocephalus
-leptocephalus
-leptocephaly
-leptocercal
-leptochlorite
-leptochroa
-leptochrous
-leptoclase
-leptodactyl
-Leptodactylidae
-leptodactylous
-Leptodactylus
-leptodermatous
-leptodermous
-Leptodora
-Leptodoridae
-Leptogenesis
-leptokurtic
-Leptolepidae
-Leptolepis
-Leptolinae
-leptomatic
-leptome
-Leptomedusae
-leptomedusan
-leptomeningeal
-leptomeninges
-leptomeningitis
-leptomeninx
-leptometer
-leptomonad
-Leptomonas
-Lepton
-lepton
-leptonecrosis
-leptonema
-leptopellic
-Leptophis
-leptophyllous
-leptoprosope
-leptoprosopic
-leptoprosopous
-leptoprosopy
-Leptoptilus
-Leptorchis
-leptorrhin
-leptorrhine
-leptorrhinian
-leptorrhinism
-leptosome
-leptosperm
-Leptospermum
-Leptosphaeria
-Leptospira
-leptospirosis
-leptosporangiate
-Leptostraca
-leptostracan
-leptostracous
-Leptostromataceae
-Leptosyne
-leptotene
-Leptothrix
-Leptotrichia
-Leptotyphlopidae
-Leptotyphlops
-leptus
-leptynite
-Lepus
-Ler
-Lernaea
-Lernaeacea
-Lernaean
-Lernaeidae
-lernaeiform
-lernaeoid
-Lernaeoides
-lerot
-lerp
-lerret
-Lerwa
-Les
-Lesath
-Lesbia
-Lesbian
-Lesbianism
-lesche
-Lesgh
-lesion
-lesional
-lesiy
-Leskea
-Leskeaceae
-leskeaceous
-Lesleya
-Leslie
-Lespedeza
-Lesquerella
-less
-lessee
-lesseeship
-lessen
-lessener
-lesser
-lessive
-lessn
-lessness
-lesson
-lessor
-lest
-Lester
-lestiwarite
-lestobiosis
-lestobiotic
-Lestodon
-Lestosaurus
-lestrad
-Lestrigon
-Lestrigonian
-let
-letch
-letchy
-letdown
-lete
-lethal
-lethality
-lethalize
-lethally
-lethargic
-lethargical
-lethargically
-lethargicalness
-lethargize
-lethargus
-lethargy
-Lethe
-Lethean
-lethiferous
-Lethocerus
-lethologica
-Letitia
-Leto
-letoff
-Lett
-lettable
-letten
-letter
-lettered
-letterer
-letteret
-lettergram
-letterhead
-letterin
-lettering
-letterleaf
-letterless
-letterpress
-letterspace
-letterweight
-letterwood
-Lettic
-Lettice
-Lettish
-lettrin
-lettsomite
-lettuce
-Letty
-letup
-leu
-Leucadendron
-Leucadian
-leucaemia
-leucaemic
-Leucaena
-leucaethiop
-leucaethiopic
-leucaniline
-leucanthous
-leucaugite
-leucaurin
-leucemia
-leucemic
-Leucetta
-leuch
-leuchaemia
-leuchemia
-leuchtenbergite
-Leucichthys
-Leucifer
-Leuciferidae
-leucine
-Leucippus
-leucism
-leucite
-leucitic
-leucitis
-leucitite
-leucitohedron
-leucitoid
-Leuckartia
-Leuckartiidae
-leuco
-leucobasalt
-leucoblast
-leucoblastic
-Leucobryaceae
-Leucobryum
-leucocarpous
-leucochalcite
-leucocholic
-leucocholy
-leucochroic
-leucocidic
-leucocidin
-leucocism
-leucocrate
-leucocratic
-Leucocrinum
-leucocyan
-leucocytal
-leucocyte
-leucocythemia
-leucocythemic
-leucocytic
-leucocytoblast
-leucocytogenesis
-leucocytoid
-leucocytology
-leucocytolysin
-leucocytolysis
-leucocytolytic
-leucocytometer
-leucocytopenia
-leucocytopenic
-leucocytoplania
-leucocytopoiesis
-leucocytosis
-leucocytotherapy
-leucocytotic
-Leucocytozoon
-leucoderma
-leucodermatous
-leucodermic
-leucoencephalitis
-leucogenic
-leucoid
-leucoindigo
-leucoindigotin
-Leucojaceae
-Leucojum
-leucolytic
-leucoma
-leucomaine
-leucomatous
-leucomelanic
-leucomelanous
-leucon
-Leuconostoc
-leucopenia
-leucopenic
-leucophane
-leucophanite
-leucophoenicite
-leucophore
-leucophyllous
-leucophyre
-leucoplakia
-leucoplakial
-leucoplast
-leucoplastid
-leucopoiesis
-leucopoietic
-leucopyrite
-leucoquinizarin
-leucorrhea
-leucorrheal
-leucoryx
-leucosis
-Leucosolenia
-Leucosoleniidae
-leucospermous
-leucosphenite
-leucosphere
-leucospheric
-leucostasis
-Leucosticte
-leucosyenite
-leucotactic
-Leucothea
-Leucothoe
-leucotic
-leucotome
-leucotomy
-leucotoxic
-leucous
-leucoxene
-leucyl
-leud
-leuk
-leukemia
-leukemic
-leukocidic
-leukocidin
-leukosis
-leukotic
-leuma
-Leung
-lev
-Levana
-levance
-Levant
-levant
-Levanter
-levanter
-Levantine
-levator
-levee
-level
-leveler
-levelheaded
-levelheadedly
-levelheadedness
-leveling
-levelish
-levelism
-levelly
-levelman
-levelness
-lever
-leverage
-leverer
-leveret
-leverman
-levers
-leverwood
-Levi
-leviable
-leviathan
-levier
-levigable
-levigate
-levigation
-levigator
-levin
-levining
-levir
-levirate
-leviratical
-leviration
-Levis
-Levisticum
-levitant
-levitate
-levitation
-levitational
-levitative
-levitator
-Levite
-Levitical
-Leviticalism
-Leviticality
-Levitically
-Leviticalness
-Leviticism
-Leviticus
-Levitism
-levity
-levo
-levoduction
-levogyrate
-levogyre
-levogyrous
-levolactic
-levolimonene
-levorotation
-levorotatory
-levotartaric
-levoversion
-levulic
-levulin
-levulinic
-levulose
-levulosuria
-levy
-levyist
-levynite
-Lew
-lew
-Lewanna
-lewd
-lewdly
-lewdness
-Lewie
-Lewis
-lewis
-Lewisia
-Lewisian
-lewisite
-lewisson
-lewth
-Lex
-lexia
-lexical
-lexicalic
-lexicality
-lexicographer
-lexicographian
-lexicographic
-lexicographical
-lexicographically
-lexicographist
-lexicography
-lexicologic
-lexicological
-lexicologist
-lexicology
-lexicon
-lexiconist
-lexiconize
-lexigraphic
-lexigraphical
-lexigraphically
-lexigraphy
-lexiphanic
-lexiphanicism
-ley
-leyland
-leysing
-Lezghian
-lherzite
-lherzolite
-Lhota
-li
-liability
-liable
-liableness
-liaison
-liana
-liang
-liar
-liard
-Lias
-Liassic
-Liatris
-libament
-libaniferous
-libanophorous
-libanotophorous
-libant
-libate
-libation
-libationary
-libationer
-libatory
-libber
-libbet
-libbra
-Libby
-libel
-libelant
-libelee
-libeler
-libelist
-libellary
-libellate
-Libellula
-libellulid
-Libellulidae
-libelluloid
-libelous
-libelously
-Liber
-liber
-liberal
-Liberalia
-liberalism
-liberalist
-liberalistic
-liberality
-liberalization
-liberalize
-liberalizer
-liberally
-liberalness
-liberate
-liberation
-liberationism
-liberationist
-liberative
-liberator
-liberatory
-liberatress
-Liberia
-Liberian
-liberomotor
-libertarian
-libertarianism
-Libertas
-liberticidal
-liberticide
-libertinage
-libertine
-libertinism
-liberty
-libertyless
-libethenite
-libidibi
-libidinal
-libidinally
-libidinosity
-libidinous
-libidinously
-libidinousness
-libido
-Libitina
-libken
-Libocedrus
-Libra
-libra
-libral
-librarian
-librarianess
-librarianship
-librarious
-librarius
-library
-libraryless
-librate
-libration
-libratory
-libretti
-librettist
-libretto
-Librid
-libriform
-libroplast
-Libyan
-Libytheidae
-Libytheinae
-Licania
-licareol
-licca
-licensable
-license
-licensed
-licensee
-licenseless
-licenser
-licensor
-licensure
-licentiate
-licentiateship
-licentiation
-licentious
-licentiously
-licentiousness
-lich
-licham
-lichanos
-lichen
-lichenaceous
-lichened
-Lichenes
-licheniasis
-lichenic
-lichenicolous
-licheniform
-lichenin
-lichenism
-lichenist
-lichenivorous
-lichenization
-lichenize
-lichenlike
-lichenographer
-lichenographic
-lichenographical
-lichenographist
-lichenography
-lichenoid
-lichenologic
-lichenological
-lichenologist
-lichenology
-Lichenopora
-Lichenoporidae
-lichenose
-licheny
-lichi
-Lichnophora
-Lichnophoridae
-Licinian
-licit
-licitation
-licitly
-licitness
-lick
-licker
-lickerish
-lickerishly
-lickerishness
-licking
-lickpenny
-lickspit
-lickspittle
-lickspittling
-licorice
-licorn
-licorne
-lictor
-lictorian
-Licuala
-lid
-Lida
-lidded
-lidder
-Lide
-lidflower
-lidgate
-lidless
-lie
-liebenerite
-Liebfraumilch
-liebigite
-lied
-lief
-liege
-liegedom
-liegeful
-liegefully
-liegeless
-liegely
-liegeman
-lieger
-lien
-lienal
-lienculus
-lienee
-lienic
-lienitis
-lienocele
-lienogastric
-lienointestinal
-lienomalacia
-lienomedullary
-lienomyelogenous
-lienopancreatic
-lienor
-lienorenal
-lienotoxin
-lienteria
-lienteric
-lientery
-lieproof
-lieprooflier
-lieproofliest
-lier
-lierne
-lierre
-liesh
-liespfund
-lieu
-lieue
-lieutenancy
-lieutenant
-lieutenantry
-lieutenantship
-Lievaart
-lieve
-lievrite
-Lif
-life
-lifeblood
-lifeboat
-lifeboatman
-lifeday
-lifedrop
-lifeful
-lifefully
-lifefulness
-lifeguard
-lifehold
-lifeholder
-lifeless
-lifelessly
-lifelessness
-lifelet
-lifelike
-lifelikeness
-lifeline
-lifelong
-lifer
-liferent
-liferenter
-liferentrix
-liferoot
-lifesaver
-lifesaving
-lifesome
-lifesomely
-lifesomeness
-lifespring
-lifetime
-lifeward
-lifework
-lifey
-lifo
-lift
-liftable
-lifter
-lifting
-liftless
-liftman
-ligable
-ligament
-ligamental
-ligamentary
-ligamentous
-ligamentously
-ligamentum
-ligas
-ligate
-ligation
-ligator
-ligature
-ligeance
-ligger
-light
-lightable
-lightboat
-lightbrained
-lighten
-lightener
-lightening
-lighter
-lighterage
-lighterful
-lighterman
-lightface
-lightful
-lightfulness
-lighthead
-lightheaded
-lightheadedly
-lightheadedness
-lighthearted
-lightheartedly
-lightheartedness
-lighthouse
-lighthouseman
-lighting
-lightish
-lightkeeper
-lightless
-lightlessness
-lightly
-lightman
-lightmanship
-lightmouthed
-lightness
-lightning
-lightninglike
-lightningproof
-lightproof
-lightroom
-lightscot
-lightship
-lightsman
-lightsome
-lightsomely
-lightsomeness
-lighttight
-lightwards
-lightweight
-lightwood
-lightwort
-lignaloes
-lignatile
-ligne
-ligneous
-lignescent
-lignicole
-lignicoline
-lignicolous
-ligniferous
-lignification
-ligniform
-lignify
-lignin
-ligninsulphonate
-ligniperdous
-lignite
-lignitic
-lignitiferous
-lignitize
-lignivorous
-lignocellulose
-lignoceric
-lignography
-lignone
-lignose
-lignosity
-lignosulphite
-lignosulphonate
-lignum
-ligroine
-ligula
-ligular
-Ligularia
-ligulate
-ligulated
-ligule
-Liguliflorae
-liguliflorous
-liguliform
-ligulin
-liguloid
-Liguorian
-ligure
-Ligurian
-ligurite
-ligurition
-Ligusticum
-ligustrin
-Ligustrum
-Ligyda
-Ligydidae
-Lihyanite
-liin
-lija
-likability
-likable
-likableness
-like
-likelihead
-likelihood
-likeliness
-likely
-liken
-likeness
-liker
-likesome
-likeways
-likewise
-likin
-liking
-liknon
-Lila
-lilac
-lilaceous
-lilacin
-lilacky
-lilacthroat
-lilactide
-Lilaeopsis
-lile
-Liliaceae
-liliaceous
-Liliales
-Lilian
-lilied
-liliform
-Liliiflorae
-Lilith
-Lilium
-lill
-lillianite
-lillibullero
-Lilliput
-Lilliputian
-Lilliputianize
-lilt
-liltingly
-liltingness
-lily
-lilyfy
-lilyhanded
-lilylike
-lilywood
-lilywort
-lim
-Lima
-Limacea
-limacel
-limaceous
-Limacidae
-limaciform
-Limacina
-limacine
-limacinid
-Limacinidae
-limacoid
-limacon
-limaille
-liman
-limation
-Limawood
-Limax
-limb
-limbal
-limbat
-limbate
-limbation
-limbeck
-limbed
-limber
-limberham
-limberly
-limberness
-limbers
-limbic
-limbie
-limbiferous
-limbless
-limbmeal
-limbo
-limboinfantum
-limbous
-Limbu
-Limburger
-limburgite
-limbus
-limby
-lime
-limeade
-Limean
-limeberry
-limebush
-limehouse
-limekiln
-limeless
-limelight
-limelighter
-limelike
-limeman
-limen
-limequat
-limer
-Limerick
-limes
-limestone
-limetta
-limettin
-limewash
-limewater
-limewort
-limey
-Limicolae
-limicoline
-limicolous
-Limidae
-liminal
-liminary
-liminess
-liming
-limit
-limitable
-limitableness
-limital
-limitarian
-limitary
-limitate
-limitation
-limitative
-limitatively
-limited
-limitedly
-limitedness
-limiter
-limiting
-limitive
-limitless
-limitlessly
-limitlessness
-limitrophe
-limivorous
-limma
-limmer
-limmock
-limmu
-limn
-limnanth
-Limnanthaceae
-limnanthaceous
-Limnanthemum
-Limnanthes
-limner
-limnery
-limnetic
-Limnetis
-limniad
-limnimeter
-limnimetric
-limnite
-limnobiologic
-limnobiological
-limnobiologically
-limnobiology
-limnobios
-Limnobium
-Limnocnida
-limnograph
-limnologic
-limnological
-limnologically
-limnologist
-limnology
-limnometer
-limnophile
-limnophilid
-Limnophilidae
-limnophilous
-limnoplankton
-Limnorchis
-Limnoria
-Limnoriidae
-limnorioid
-Limodorum
-limoid
-limonene
-limoniad
-limonin
-limonite
-limonitic
-limonitization
-limonium
-Limosa
-limose
-Limosella
-Limosi
-limous
-limousine
-limp
-limper
-limpet
-limphault
-limpid
-limpidity
-limpidly
-limpidness
-limpily
-limpin
-limpiness
-limping
-limpingly
-limpingness
-limpish
-limpkin
-limply
-limpness
-limpsy
-limpwort
-limpy
-limsy
-limu
-limulid
-Limulidae
-limuloid
-Limuloidea
-Limulus
-limurite
-limy
-Lin
-lin
-Lina
-lina
-linable
-Linaceae
-linaceous
-linaga
-linage
-linaloa
-linalol
-linalool
-linamarin
-Linanthus
-Linaria
-linarite
-linch
-linchbolt
-linchet
-linchpin
-linchpinned
-lincloth
-Lincoln
-Lincolnian
-Lincolniana
-Lincolnlike
-linctus
-Linda
-lindackerite
-lindane
-linden
-Linder
-linder
-Lindera
-Lindleyan
-lindo
-lindoite
-Lindsay
-Lindsey
-line
-linea
-lineage
-lineaged
-lineal
-lineality
-lineally
-lineament
-lineamental
-lineamentation
-lineameter
-linear
-linearifolius
-linearity
-linearization
-linearize
-linearly
-lineate
-lineated
-lineation
-lineature
-linecut
-lined
-lineiform
-lineless
-linelet
-lineman
-linen
-Linene
-linenette
-linenize
-linenizer
-linenman
-lineocircular
-lineograph
-lineolate
-lineolated
-liner
-linesman
-Linet
-linewalker
-linework
-ling
-linga
-Lingayat
-lingberry
-lingbird
-linge
-lingel
-lingenberry
-linger
-lingerer
-lingerie
-lingo
-lingonberry
-Lingoum
-lingtow
-lingtowman
-lingua
-linguacious
-linguaciousness
-linguadental
-linguaeform
-lingual
-linguale
-linguality
-lingualize
-lingually
-linguanasal
-Linguata
-Linguatula
-Linguatulida
-Linguatulina
-linguatuline
-linguatuloid
-linguet
-linguidental
-linguiform
-linguipotence
-linguist
-linguister
-linguistic
-linguistical
-linguistically
-linguistician
-linguistics
-linguistry
-lingula
-lingulate
-lingulated
-Lingulella
-lingulid
-Lingulidae
-linguliferous
-linguliform
-linguloid
-linguodental
-linguodistal
-linguogingival
-linguopalatal
-linguopapillitis
-linguoversion
-lingwort
-lingy
-linha
-linhay
-linie
-liniment
-linin
-lininess
-lining
-linitis
-liniya
-linja
-linje
-link
-linkable
-linkage
-linkboy
-linked
-linkedness
-linker
-linking
-linkman
-links
-linksmith
-linkwork
-linky
-Linley
-linn
-Linnaea
-Linnaean
-Linnaeanism
-linnaeite
-Linne
-linnet
-lino
-linolate
-linoleic
-linolein
-linolenate
-linolenic
-linolenin
-linoleum
-linolic
-linolin
-linometer
-linon
-Linopteris
-Linos
-Linotype
-linotype
-linotyper
-linotypist
-linous
-linoxin
-linoxyn
-linpin
-Linsang
-linseed
-linsey
-linstock
-lint
-lintel
-linteled
-linteling
-linten
-linter
-lintern
-lintie
-lintless
-lintonite
-lintseed
-lintwhite
-linty
-Linum
-Linus
-linwood
-liny
-Linyphia
-Linyphiidae
-liodermia
-liomyofibroma
-liomyoma
-lion
-lioncel
-Lionel
-lionel
-lionesque
-lioness
-lionet
-lionheart
-lionhearted
-lionheartedness
-lionhood
-lionism
-lionizable
-lionization
-lionize
-lionizer
-lionlike
-lionly
-lionproof
-lionship
-Liothrix
-Liotrichi
-Liotrichidae
-liotrichine
-lip
-lipa
-lipacidemia
-lipaciduria
-Lipan
-Liparian
-liparian
-liparid
-Liparidae
-Liparididae
-Liparis
-liparite
-liparocele
-liparoid
-liparomphalus
-liparous
-lipase
-lipectomy
-lipemia
-Lipeurus
-lipide
-lipin
-lipless
-liplet
-liplike
-lipoblast
-lipoblastoma
-Lipobranchia
-lipocaic
-lipocardiac
-lipocele
-lipoceratous
-lipocere
-lipochondroma
-lipochrome
-lipochromogen
-lipoclasis
-lipoclastic
-lipocyte
-lipodystrophia
-lipodystrophy
-lipoferous
-lipofibroma
-lipogenesis
-lipogenetic
-lipogenic
-lipogenous
-lipogram
-lipogrammatic
-lipogrammatism
-lipogrammatist
-lipography
-lipohemia
-lipoid
-lipoidal
-lipoidemia
-lipoidic
-lipolysis
-lipolytic
-lipoma
-lipomata
-lipomatosis
-lipomatous
-lipometabolic
-lipometabolism
-lipomorph
-lipomyoma
-lipomyxoma
-lipopexia
-lipophagic
-lipophore
-lipopod
-Lipopoda
-lipoprotein
-liposarcoma
-liposis
-liposome
-lipostomy
-lipothymial
-lipothymic
-lipothymy
-lipotrophic
-lipotrophy
-lipotropic
-lipotropy
-lipotype
-Lipotyphla
-lipovaccine
-lipoxenous
-lipoxeny
-lipped
-lippen
-lipper
-lipperings
-Lippia
-lippiness
-lipping
-lippitude
-lippitudo
-lippy
-lipsanographer
-lipsanotheca
-lipstick
-lipuria
-lipwork
-liquable
-liquamen
-liquate
-liquation
-liquefacient
-liquefaction
-liquefactive
-liquefiable
-liquefier
-liquefy
-liquesce
-liquescence
-liquescency
-liquescent
-liqueur
-liquid
-liquidable
-Liquidambar
-liquidamber
-liquidate
-liquidation
-liquidator
-liquidatorship
-liquidity
-liquidize
-liquidizer
-liquidless
-liquidly
-liquidness
-liquidogenic
-liquidogenous
-liquidy
-liquiform
-liquor
-liquorer
-liquorish
-liquorishly
-liquorishness
-liquorist
-liquorless
-lira
-lirate
-liration
-lire
-lirella
-lirellate
-lirelliform
-lirelline
-lirellous
-Liriodendron
-liripipe
-liroconite
-lis
-Lisa
-Lisbon
-Lise
-lisere
-Lisette
-lish
-lisk
-Lisle
-lisle
-lisp
-lisper
-lispingly
-lispund
-liss
-Lissamphibia
-lissamphibian
-Lissencephala
-lissencephalic
-lissencephalous
-Lissoflagellata
-lissoflagellate
-lissom
-lissome
-lissomely
-lissomeness
-lissotrichan
-Lissotriches
-lissotrichous
-lissotrichy
-List
-list
-listable
-listed
-listedness
-listel
-listen
-listener
-listening
-lister
-Listera
-listerellosis
-Listeria
-Listerian
-Listerine
-Listerism
-Listerize
-listing
-listless
-listlessly
-listlessness
-listred
-listwork
-Lisuarte
-lit
-litaneutical
-litany
-litanywise
-litas
-litation
-litch
-litchi
-lite
-liter
-literacy
-literaily
-literal
-literalism
-literalist
-literalistic
-literality
-literalization
-literalize
-literalizer
-literally
-literalminded
-literalmindedness
-literalness
-literarian
-literariness
-literary
-literaryism
-literate
-literati
-literation
-literatist
-literato
-literator
-literature
-literatus
-literose
-literosity
-lith
-lithagogue
-lithangiuria
-lithanthrax
-litharge
-lithe
-lithectasy
-lithectomy
-lithely
-lithemia
-lithemic
-litheness
-lithesome
-lithesomeness
-lithi
-lithia
-lithiasis
-lithiastic
-lithiate
-lithic
-lithifaction
-lithification
-lithify
-lithite
-lithium
-litho
-lithobiid
-Lithobiidae
-lithobioid
-Lithobius
-Lithocarpus
-lithocenosis
-lithochemistry
-lithochromatic
-lithochromatics
-lithochromatographic
-lithochromatography
-lithochromography
-lithochromy
-lithoclase
-lithoclast
-lithoclastic
-lithoclasty
-lithoculture
-lithocyst
-lithocystotomy
-Lithodes
-lithodesma
-lithodialysis
-lithodid
-Lithodidae
-lithodomous
-Lithodomus
-lithofracteur
-lithofractor
-lithogenesis
-lithogenetic
-lithogenous
-lithogeny
-lithoglyph
-lithoglypher
-lithoglyphic
-lithoglyptic
-lithoglyptics
-lithograph
-lithographer
-lithographic
-lithographical
-lithographically
-lithographize
-lithography
-lithogravure
-lithoid
-lithoidite
-litholabe
-litholapaxy
-litholatrous
-litholatry
-lithologic
-lithological
-lithologically
-lithologist
-lithology
-litholysis
-litholyte
-litholytic
-lithomancy
-lithomarge
-lithometer
-lithonephria
-lithonephritis
-lithonephrotomy
-lithontriptic
-lithontriptist
-lithontriptor
-lithopedion
-lithopedium
-lithophagous
-lithophane
-lithophanic
-lithophany
-lithophilous
-lithophone
-lithophotography
-lithophotogravure
-lithophthisis
-lithophyl
-lithophyllous
-lithophysa
-lithophysal
-lithophyte
-lithophytic
-lithophytous
-lithopone
-lithoprint
-lithoscope
-lithosian
-lithosiid
-Lithosiidae
-Lithosiinae
-lithosis
-lithosol
-lithosperm
-lithospermon
-lithospermous
-Lithospermum
-lithosphere
-lithotint
-lithotome
-lithotomic
-lithotomical
-lithotomist
-lithotomize
-lithotomous
-lithotomy
-lithotony
-lithotresis
-lithotripsy
-lithotriptor
-lithotrite
-lithotritic
-lithotritist
-lithotrity
-lithotype
-lithotypic
-lithotypy
-lithous
-lithoxyl
-lithsman
-Lithuanian
-Lithuanic
-lithuresis
-lithuria
-lithy
-liticontestation
-litigable
-litigant
-litigate
-litigation
-litigationist
-litigator
-litigatory
-litigiosity
-litigious
-litigiously
-litigiousness
-Litiopa
-litiscontest
-litiscontestation
-litiscontestational
-litmus
-Litopterna
-Litorina
-Litorinidae
-litorinoid
-litotes
-litra
-Litsea
-litster
-litten
-litter
-litterateur
-litterer
-littermate
-littery
-little
-littleleaf
-littleneck
-littleness
-littlewale
-littling
-littlish
-littoral
-Littorella
-littress
-lituiform
-lituite
-Lituites
-Lituitidae
-Lituola
-lituoline
-lituoloid
-liturate
-liturgical
-liturgically
-liturgician
-liturgics
-liturgiological
-liturgiologist
-liturgiology
-liturgism
-liturgist
-liturgistic
-liturgistical
-liturgize
-liturgy
-litus
-lituus
-Litvak
-Lityerses
-litz
-Liukiu
-Liv
-livability
-livable
-livableness
-live
-liveborn
-lived
-livedo
-livelihood
-livelily
-liveliness
-livelong
-lively
-liven
-liveness
-liver
-liverance
-liverberry
-livered
-liverhearted
-liverheartedness
-liveried
-liverish
-liverishness
-liverleaf
-liverless
-Liverpudlian
-liverwort
-liverwurst
-livery
-liverydom
-liveryless
-liveryman
-livestock
-Livian
-livid
-lividity
-lividly
-lividness
-livier
-living
-livingless
-livingly
-livingness
-livingstoneite
-Livish
-Livistona
-Livonian
-livor
-livre
-liwan
-lixive
-lixivial
-lixiviate
-lixiviation
-lixiviator
-lixivious
-lixivium
-Liyuan
-Liz
-Liza
-lizard
-lizardtail
-Lizzie
-llama
-Llanberisslate
-Llandeilo
-Llandovery
-llano
-llautu
-Lleu
-Llew
-Lloyd
-Lludd
-llyn
-Lo
-lo
-Loa
-loa
-loach
-load
-loadage
-loaded
-loaden
-loader
-loading
-loadless
-loadpenny
-loadsome
-loadstone
-loaf
-loafer
-loaferdom
-loaferish
-loafing
-loafingly
-loaflet
-loaghtan
-loam
-loamily
-loaminess
-loaming
-loamless
-Loammi
-loamy
-loan
-loanable
-loaner
-loanin
-loanmonger
-loanword
-Loasa
-Loasaceae
-loasaceous
-loath
-loathe
-loather
-loathful
-loathfully
-loathfulness
-loathing
-loathingly
-loathliness
-loathly
-loathness
-loathsome
-loathsomely
-loathsomeness
-Loatuko
-loave
-lob
-Lobachevskian
-lobal
-Lobale
-lobar
-Lobaria
-Lobata
-Lobatae
-lobate
-lobated
-lobately
-lobation
-lobber
-lobbish
-lobby
-lobbyer
-lobbyism
-lobbyist
-lobbyman
-lobcock
-lobe
-lobectomy
-lobed
-lobefoot
-lobefooted
-lobeless
-lobelet
-Lobelia
-Lobeliaceae
-lobeliaceous
-lobelin
-lobeline
-lobellated
-lobfig
-lobiform
-lobigerous
-lobing
-lobiped
-loblolly
-lobo
-lobola
-lobopodium
-Lobosa
-lobose
-lobotomy
-lobscourse
-lobscouse
-lobscouser
-lobster
-lobstering
-lobsterish
-lobsterlike
-lobsterproof
-lobtail
-lobular
-Lobularia
-lobularly
-lobulate
-lobulated
-lobulation
-lobule
-lobulette
-lobulose
-lobulous
-lobworm
-loca
-locable
-local
-locale
-localism
-localist
-localistic
-locality
-localizable
-localization
-localize
-localizer
-locally
-localness
-locanda
-Locarnist
-Locarnite
-Locarnize
-Locarno
-locate
-location
-locational
-locative
-locator
-locellate
-locellus
-loch
-lochage
-lochan
-lochetic
-lochia
-lochial
-lochiocolpos
-lochiocyte
-lochiometra
-lochiometritis
-lochiopyra
-lochiorrhagia
-lochiorrhea
-lochioschesis
-Lochlin
-lochometritis
-lochoperitonitis
-lochopyra
-lochus
-lochy
-loci
-lociation
-lock
-lockable
-lockage
-Lockatong
-lockbox
-locked
-locker
-lockerman
-locket
-lockful
-lockhole
-Lockian
-Lockianism
-locking
-lockjaw
-lockless
-locklet
-lockmaker
-lockmaking
-lockman
-lockout
-lockpin
-Lockport
-lockram
-locksman
-locksmith
-locksmithery
-locksmithing
-lockspit
-lockup
-lockwork
-locky
-loco
-locodescriptive
-locofoco
-Locofocoism
-locoism
-locomobile
-locomobility
-locomote
-locomotility
-locomotion
-locomotive
-locomotively
-locomotiveman
-locomotiveness
-locomotivity
-locomotor
-locomotory
-locomutation
-locoweed
-Locrian
-Locrine
-loculament
-loculamentose
-loculamentous
-locular
-loculate
-loculated
-loculation
-locule
-loculicidal
-loculicidally
-loculose
-loculus
-locum
-locus
-locust
-locusta
-locustal
-locustberry
-locustelle
-locustid
-Locustidae
-locusting
-locustlike
-locution
-locutor
-locutorship
-locutory
-lod
-Loddigesia
-lode
-lodemanage
-lodesman
-lodestar
-lodestone
-lodestuff
-lodge
-lodgeable
-lodged
-lodgeful
-lodgeman
-lodgepole
-lodger
-lodgerdom
-lodging
-lodginghouse
-lodgings
-lodgment
-Lodha
-lodicule
-Lodoicea
-Lodowic
-Lodowick
-Lodur
-Loegria
-loess
-loessal
-loessial
-loessic
-loessland
-loessoid
-lof
-lofstelle
-loft
-lofter
-loftily
-loftiness
-lofting
-loftless
-loftman
-loftsman
-lofty
-log
-loganberry
-Logania
-Loganiaceae
-loganiaceous
-loganin
-logaoedic
-logarithm
-logarithmal
-logarithmetic
-logarithmetical
-logarithmetically
-logarithmic
-logarithmical
-logarithmically
-logarithmomancy
-logbook
-logcock
-loge
-logeion
-logeum
-loggat
-logged
-logger
-loggerhead
-loggerheaded
-loggia
-loggin
-logging
-loggish
-loghead
-logheaded
-logia
-logic
-logical
-logicalist
-logicality
-logicalization
-logicalize
-logically
-logicalness
-logicaster
-logician
-logicism
-logicist
-logicity
-logicize
-logicless
-logie
-login
-logion
-logistic
-logistical
-logistician
-logistics
-logium
-loglet
-loglike
-logman
-logocracy
-logodaedaly
-logogogue
-logogram
-logogrammatic
-logograph
-logographer
-logographic
-logographical
-logographically
-logography
-logogriph
-logogriphic
-logoi
-logolatry
-logology
-logomach
-logomacher
-logomachic
-logomachical
-logomachist
-logomachize
-logomachy
-logomancy
-logomania
-logomaniac
-logometer
-logometric
-logometrical
-logometrically
-logopedia
-logopedics
-logorrhea
-logos
-logothete
-logotype
-logotypy
-Logres
-Logria
-Logris
-logroll
-logroller
-logrolling
-logway
-logwise
-logwood
-logwork
-logy
-lohan
-Lohana
-Lohar
-lohoch
-loimic
-loimography
-loimology
-loin
-loincloth
-loined
-loir
-Lois
-Loiseleuria
-loiter
-loiterer
-loiteringly
-loiteringness
-loka
-lokao
-lokaose
-lokapala
-loke
-loket
-lokiec
-Lokindra
-Lokman
-Lola
-Loliginidae
-Loligo
-Lolium
-loll
-Lollard
-Lollardian
-Lollardism
-Lollardist
-Lollardize
-Lollardlike
-Lollardry
-Lollardy
-loller
-lollingite
-lollingly
-lollipop
-lollop
-lollopy
-lolly
-Lolo
-loma
-lomastome
-lomatine
-lomatinous
-Lomatium
-Lombard
-lombard
-Lombardeer
-Lombardesque
-Lombardian
-Lombardic
-lomboy
-Lombrosian
-loment
-lomentaceous
-Lomentaria
-lomentariaceous
-lomentum
-lomita
-lommock
-Lonchocarpus
-Lonchopteridae
-Londinensian
-Londoner
-Londonese
-Londonesque
-Londonian
-Londonish
-Londonism
-Londonization
-Londonize
-Londony
-Londres
-lone
-lonelihood
-lonelily
-loneliness
-lonely
-loneness
-lonesome
-lonesomely
-lonesomeness
-long
-longa
-longan
-longanimity
-longanimous
-Longaville
-longbeak
-longbeard
-longboat
-longbow
-longcloth
-longe
-longear
-longer
-longeval
-longevity
-longevous
-longfelt
-longfin
-longful
-longhair
-longhand
-longhead
-longheaded
-longheadedly
-longheadedness
-longhorn
-longicaudal
-longicaudate
-longicone
-longicorn
-Longicornia
-longilateral
-longilingual
-longiloquence
-longimanous
-longimetric
-longimetry
-longing
-longingly
-longingness
-Longinian
-longinquity
-longipennate
-longipennine
-longirostral
-longirostrate
-longirostrine
-Longirostrines
-longisection
-longish
-longitude
-longitudinal
-longitudinally
-longjaw
-longleaf
-longlegs
-longly
-longmouthed
-longness
-Longobard
-Longobardi
-Longobardian
-Longobardic
-longs
-longshanks
-longshore
-longshoreman
-longsome
-longsomely
-longsomeness
-longspun
-longspur
-longtail
-longue
-longulite
-longway
-longways
-longwise
-longwool
-longwork
-longwort
-Lonhyn
-Lonicera
-Lonk
-lonquhard
-lontar
-loo
-looby
-lood
-loof
-loofah
-loofie
-loofness
-look
-looker
-looking
-lookout
-lookum
-loom
-loomer
-loomery
-looming
-loon
-loonery
-looney
-loony
-loop
-looper
-loopful
-loophole
-looping
-loopist
-looplet
-looplike
-loopy
-loose
-loosely
-loosemouthed
-loosen
-loosener
-looseness
-looser
-loosestrife
-loosing
-loosish
-loot
-lootable
-looten
-looter
-lootie
-lootiewallah
-lootsman
-lop
-lope
-loper
-Lopezia
-lophiid
-Lophiidae
-lophine
-Lophiodon
-lophiodont
-Lophiodontidae
-lophiodontoid
-Lophiola
-Lophiomyidae
-Lophiomyinae
-Lophiomys
-lophiostomate
-lophiostomous
-lophobranch
-lophobranchiate
-Lophobranchii
-lophocalthrops
-lophocercal
-Lophocome
-Lophocomi
-Lophodermium
-lophodont
-Lophophora
-lophophoral
-lophophore
-Lophophorinae
-lophophorine
-Lophophorus
-lophophytosis
-Lophopoda
-Lophornis
-Lophortyx
-lophosteon
-lophotriaene
-lophotrichic
-lophotrichous
-Lophura
-lopolith
-loppard
-lopper
-loppet
-lopping
-loppy
-lopseed
-lopsided
-lopsidedly
-lopsidedness
-lopstick
-loquacious
-loquaciously
-loquaciousness
-loquacity
-loquat
-loquence
-loquent
-loquently
-Lora
-lora
-loral
-loran
-lorandite
-loranskite
-Loranthaceae
-loranthaceous
-Loranthus
-lorarius
-lorate
-lorcha
-Lord
-lord
-lording
-lordkin
-lordless
-lordlet
-lordlike
-lordlily
-lordliness
-lordling
-lordly
-lordolatry
-lordosis
-lordotic
-lordship
-lordwood
-lordy
-lore
-loreal
-lored
-loreless
-Loren
-Lorenzan
-lorenzenite
-Lorenzo
-Lorettine
-lorettoite
-lorgnette
-Lori
-lori
-loric
-lorica
-loricarian
-Loricariidae
-loricarioid
-Loricata
-loricate
-Loricati
-lorication
-loricoid
-Lorien
-lorikeet
-lorilet
-lorimer
-loriot
-loris
-Lorius
-lormery
-lorn
-lornness
-loro
-Lorraine
-Lorrainer
-Lorrainese
-lorriker
-lorry
-lors
-lorum
-lory
-losable
-losableness
-lose
-losel
-loselism
-losenger
-loser
-losh
-losing
-loss
-lossenite
-lossless
-lossproof
-lost
-lostling
-lostness
-Lot
-lot
-Lota
-lota
-lotase
-lote
-lotebush
-Lotharingian
-lotic
-lotiform
-lotion
-lotment
-Lotophagi
-lotophagous
-lotophagously
-lotrite
-lots
-Lotta
-Lotte
-lotter
-lottery
-Lottie
-lotto
-Lotuko
-lotus
-lotusin
-lotuslike
-Lou
-louch
-louchettes
-loud
-louden
-loudering
-loudish
-loudly
-loudmouthed
-loudness
-louey
-lough
-lougheen
-Louie
-Louiqa
-Louis
-Louisa
-Louise
-Louisiana
-Louisianian
-louisine
-louk
-Loukas
-loukoum
-loulu
-lounder
-lounderer
-lounge
-lounger
-lounging
-loungingly
-loungy
-Loup
-loup
-loupe
-lour
-lourdy
-louse
-louseberry
-lousewort
-lousily
-lousiness
-louster
-lousy
-lout
-louter
-louther
-loutish
-loutishly
-loutishness
-loutrophoros
-louty
-louvar
-louver
-louvered
-louvering
-louverwork
-Louvre
-lovability
-lovable
-lovableness
-lovably
-lovage
-love
-lovebird
-loveflower
-loveful
-lovelass
-loveless
-lovelessly
-lovelessness
-lovelihead
-lovelily
-loveliness
-loveling
-lovelock
-lovelorn
-lovelornness
-lovely
-loveman
-lovemate
-lovemonger
-loveproof
-lover
-loverdom
-lovered
-loverhood
-lovering
-loverless
-loverliness
-loverly
-lovership
-loverwise
-lovesick
-lovesickness
-lovesome
-lovesomely
-lovesomeness
-loveworth
-loveworthy
-loving
-lovingly
-lovingness
-low
-lowa
-lowan
-lowbell
-lowborn
-lowboy
-lowbred
-lowdah
-lowder
-loweite
-Lowell
-lower
-lowerable
-lowerclassman
-lowerer
-lowering
-loweringly
-loweringness
-lowermost
-lowery
-lowigite
-lowish
-lowishly
-lowishness
-lowland
-lowlander
-lowlily
-lowliness
-lowly
-lowmen
-lowmost
-lown
-lowness
-lownly
-lowth
-Lowville
-lowwood
-lowy
-lox
-loxia
-loxic
-Loxiinae
-loxoclase
-loxocosm
-loxodograph
-Loxodon
-loxodont
-Loxodonta
-loxodontous
-loxodrome
-loxodromic
-loxodromical
-loxodromically
-loxodromics
-loxodromism
-Loxolophodon
-loxolophodont
-Loxomma
-loxophthalmus
-Loxosoma
-Loxosomidae
-loxotic
-loxotomy
-loy
-loyal
-loyalism
-loyalist
-loyalize
-loyally
-loyalness
-loyalty
-Loyd
-Loyolism
-Loyolite
-lozenge
-lozenged
-lozenger
-lozengeways
-lozengewise
-lozengy
-Lu
-Luba
-lubber
-lubbercock
-Lubberland
-lubberlike
-lubberliness
-lubberly
-lube
-lubra
-lubric
-lubricant
-lubricate
-lubrication
-lubricational
-lubricative
-lubricator
-lubricatory
-lubricious
-lubricity
-lubricous
-lubrifaction
-lubrification
-lubrify
-lubritorian
-lubritorium
-Luc
-Lucan
-Lucania
-lucanid
-Lucanidae
-Lucanus
-lucarne
-Lucayan
-lucban
-Lucchese
-luce
-lucence
-lucency
-lucent
-Lucentio
-lucently
-Luceres
-lucern
-lucernal
-Lucernaria
-lucernarian
-Lucernariidae
-lucerne
-lucet
-Luchuan
-Lucia
-Lucian
-Luciana
-lucible
-lucid
-lucida
-lucidity
-lucidly
-lucidness
-lucifee
-Lucifer
-luciferase
-Luciferian
-Luciferidae
-luciferin
-luciferoid
-luciferous
-luciferously
-luciferousness
-lucific
-luciform
-lucifugal
-lucifugous
-lucigen
-Lucile
-Lucilia
-lucimeter
-Lucina
-Lucinacea
-Lucinda
-Lucinidae
-lucinoid
-Lucite
-Lucius
-lucivee
-luck
-lucken
-luckful
-luckie
-luckily
-luckiness
-luckless
-lucklessly
-lucklessness
-Lucknow
-lucky
-lucration
-lucrative
-lucratively
-lucrativeness
-lucre
-Lucrece
-Lucretia
-Lucretian
-Lucretius
-lucriferous
-lucriferousness
-lucrific
-lucrify
-Lucrine
-luctation
-luctiferous
-luctiferousness
-lucubrate
-lucubration
-lucubrator
-lucubratory
-lucule
-luculent
-luculently
-Lucullan
-lucullite
-Lucuma
-lucumia
-Lucumo
-lucumony
-Lucy
-lucy
-ludden
-Luddism
-Luddite
-Ludditism
-ludefisk
-Ludgate
-Ludgathian
-Ludgatian
-Ludian
-ludibrious
-ludibry
-ludicropathetic
-ludicroserious
-ludicrosity
-ludicrosplenetic
-ludicrous
-ludicrously
-ludicrousness
-ludification
-ludlamite
-Ludlovian
-Ludlow
-ludo
-Ludolphian
-Ludwig
-ludwigite
-lue
-Luella
-lues
-luetic
-luetically
-lufberry
-lufbery
-luff
-Luffa
-Lug
-lug
-Luganda
-luge
-luger
-luggage
-luggageless
-luggar
-lugged
-lugger
-luggie
-Luggnagg
-lugmark
-Lugnas
-lugsail
-lugsome
-lugubriosity
-lugubrious
-lugubriously
-lugubriousness
-lugworm
-luhinga
-Lui
-Luian
-Luigi
-luigino
-Luis
-Luiseno
-Luite
-lujaurite
-Lukas
-Luke
-luke
-lukely
-lukeness
-lukewarm
-lukewarmish
-lukewarmly
-lukewarmness
-lukewarmth
-Lula
-lulab
-lull
-lullaby
-luller
-Lullian
-lulliloo
-lullingly
-Lulu
-lulu
-Lum
-lum
-lumachel
-lumbaginous
-lumbago
-lumbang
-lumbar
-lumbarization
-lumbayao
-lumber
-lumberdar
-lumberdom
-lumberer
-lumbering
-lumberingly
-lumberingness
-lumberjack
-lumberless
-lumberly
-lumberman
-lumbersome
-lumberyard
-lumbocolostomy
-lumbocolotomy
-lumbocostal
-lumbodorsal
-lumbodynia
-lumbosacral
-lumbovertebral
-lumbrical
-lumbricalis
-Lumbricidae
-lumbriciform
-lumbricine
-lumbricoid
-lumbricosis
-Lumbricus
-lumbrous
-lumen
-luminaire
-Luminal
-luminal
-luminance
-luminant
-luminarious
-luminarism
-luminarist
-luminary
-luminate
-lumination
-luminative
-luminator
-lumine
-luminesce
-luminescence
-luminescent
-luminiferous
-luminificent
-luminism
-luminist
-luminologist
-luminometer
-luminosity
-luminous
-luminously
-luminousness
-lummox
-lummy
-lump
-lumper
-lumpet
-lumpfish
-lumpily
-lumpiness
-lumping
-lumpingly
-lumpish
-lumpishly
-lumpishness
-lumpkin
-lumpman
-lumpsucker
-lumpy
-luna
-lunacy
-lunambulism
-lunar
-lunare
-Lunaria
-lunarian
-lunarist
-lunarium
-lunary
-lunate
-lunatellus
-lunately
-lunatic
-lunatically
-lunation
-lunatize
-lunatum
-lunch
-luncheon
-luncheoner
-luncheonette
-luncheonless
-luncher
-lunchroom
-Lunda
-Lundinarium
-lundress
-lundyfoot
-lune
-Lunel
-lunes
-lunette
-lung
-lunge
-lunged
-lungeous
-lunger
-lungfish
-lungflower
-lungful
-lungi
-lungie
-lungis
-lungless
-lungmotor
-lungsick
-lungworm
-lungwort
-lungy
-lunicurrent
-luniform
-lunisolar
-lunistice
-lunistitial
-lunitidal
-Lunka
-lunkhead
-lunn
-lunoid
-lunt
-lunula
-lunular
-Lunularia
-lunulate
-lunulated
-lunule
-lunulet
-lunulite
-Lunulites
-Luo
-lupanarian
-lupanine
-lupe
-lupeol
-lupeose
-Lupercal
-Lupercalia
-Lupercalian
-Luperci
-lupetidine
-lupicide
-Lupid
-lupiform
-lupinaster
-lupine
-lupinin
-lupinine
-lupinosis
-lupinous
-Lupinus
-lupis
-lupoid
-lupous
-lupulic
-lupulin
-lupuline
-lupulinic
-lupulinous
-lupulinum
-lupulus
-lupus
-lupuserythematosus
-Lur
-lura
-lural
-lurch
-lurcher
-lurchingfully
-lurchingly
-lurchline
-lurdan
-lurdanism
-lure
-lureful
-lurement
-lurer
-luresome
-lurg
-lurgworm
-Luri
-lurid
-luridity
-luridly
-luridness
-luringly
-lurk
-lurker
-lurkingly
-lurkingness
-lurky
-lurrier
-lurry
-Lusatian
-Luscinia
-luscious
-lusciously
-lusciousness
-lush
-Lushai
-lushburg
-Lushei
-lusher
-lushly
-lushness
-lushy
-Lusiad
-Lusian
-Lusitania
-Lusitanian
-lusk
-lusky
-lusory
-lust
-luster
-lusterer
-lusterless
-lusterware
-lustful
-lustfully
-lustfulness
-lustihead
-lustily
-lustiness
-lustless
-lustra
-lustral
-lustrant
-lustrate
-lustration
-lustrative
-lustratory
-lustreless
-lustrical
-lustrification
-lustrify
-lustrine
-lustring
-lustrous
-lustrously
-lustrousness
-lustrum
-lusty
-lut
-lutaceous
-lutanist
-lutany
-Lutao
-lutation
-Lutayo
-lute
-luteal
-lutecia
-lutecium
-lutein
-luteinization
-luteinize
-lutelet
-lutemaker
-lutemaking
-luteo
-luteocobaltic
-luteofulvous
-luteofuscescent
-luteofuscous
-luteolin
-luteolous
-luteoma
-luteorufescent
-luteous
-luteovirescent
-luter
-lutescent
-lutestring
-Lutetia
-Lutetian
-lutetium
-luteway
-lutfisk
-Luther
-Lutheran
-Lutheranic
-Lutheranism
-Lutheranize
-Lutheranizer
-Lutherism
-Lutherist
-luthern
-luthier
-lutianid
-Lutianidae
-lutianoid
-Lutianus
-lutidine
-lutidinic
-luting
-lutist
-Lutjanidae
-Lutjanus
-lutose
-Lutra
-Lutraria
-Lutreola
-lutrin
-Lutrinae
-lutrine
-lutulence
-lutulent
-Luvaridae
-Luvian
-Luvish
-Luwian
-lux
-luxate
-luxation
-luxe
-Luxemburger
-Luxemburgian
-luxulianite
-luxuriance
-luxuriancy
-luxuriant
-luxuriantly
-luxuriantness
-luxuriate
-luxuriation
-luxurious
-luxuriously
-luxuriousness
-luxurist
-luxury
-luxus
-Luzula
-Lwo
-ly
-lyam
-lyard
-Lyas
-Lycaena
-lycaenid
-Lycaenidae
-lycanthrope
-lycanthropia
-lycanthropic
-lycanthropist
-lycanthropize
-lycanthropous
-lycanthropy
-lyceal
-lyceum
-Lychnic
-Lychnis
-lychnomancy
-lychnoscope
-lychnoscopic
-Lycian
-lycid
-Lycidae
-Lycium
-Lycodes
-Lycodidae
-lycodoid
-lycopene
-Lycoperdaceae
-lycoperdaceous
-Lycoperdales
-lycoperdoid
-Lycoperdon
-lycoperdon
-Lycopersicon
-lycopin
-lycopod
-lycopode
-Lycopodiaceae
-lycopodiaceous
-Lycopodiales
-Lycopodium
-Lycopsida
-Lycopsis
-Lycopus
-lycorine
-Lycosa
-lycosid
-Lycosidae
-lyctid
-Lyctidae
-Lyctus
-Lycus
-lyddite
-Lydia
-Lydian
-lydite
-lye
-Lyencephala
-lyencephalous
-lyery
-lygaeid
-Lygaeidae
-Lygeum
-Lygodium
-Lygosoma
-lying
-lyingly
-Lymantria
-lymantriid
-Lymantriidae
-lymhpangiophlebitis
-Lymnaea
-lymnaean
-lymnaeid
-Lymnaeidae
-lymph
-lymphad
-lymphadenectasia
-lymphadenectasis
-lymphadenia
-lymphadenitis
-lymphadenoid
-lymphadenoma
-lymphadenopathy
-lymphadenosis
-lymphaemia
-lymphagogue
-lymphangeitis
-lymphangial
-lymphangiectasis
-lymphangiectatic
-lymphangiectodes
-lymphangiitis
-lymphangioendothelioma
-lymphangiofibroma
-lymphangiology
-lymphangioma
-lymphangiomatous
-lymphangioplasty
-lymphangiosarcoma
-lymphangiotomy
-lymphangitic
-lymphangitis
-lymphatic
-lymphatical
-lymphation
-lymphatism
-lymphatitis
-lymphatolysin
-lymphatolysis
-lymphatolytic
-lymphectasia
-lymphedema
-lymphemia
-lymphenteritis
-lymphoblast
-lymphoblastic
-lymphoblastoma
-lymphoblastosis
-lymphocele
-lymphocyst
-lymphocystosis
-lymphocyte
-lymphocythemia
-lymphocytic
-lymphocytoma
-lymphocytomatosis
-lymphocytosis
-lymphocytotic
-lymphocytotoxin
-lymphodermia
-lymphoduct
-lymphogenic
-lymphogenous
-lymphoglandula
-lymphogranuloma
-lymphoid
-lymphoidectomy
-lymphology
-lymphoma
-lymphomatosis
-lymphomatous
-lymphomonocyte
-lymphomyxoma
-lymphopathy
-lymphopenia
-lymphopenial
-lymphopoiesis
-lymphopoietic
-lymphoprotease
-lymphorrhage
-lymphorrhagia
-lymphorrhagic
-lymphorrhea
-lymphosarcoma
-lymphosarcomatosis
-lymphosarcomatous
-lymphosporidiosis
-lymphostasis
-lymphotaxis
-lymphotome
-lymphotomy
-lymphotoxemia
-lymphotoxin
-lymphotrophic
-lymphotrophy
-lymphous
-lymphuria
-lymphy
-lyncean
-Lynceus
-lynch
-lynchable
-lyncher
-Lyncid
-lyncine
-Lyndon
-Lynette
-Lyngbyaceae
-Lyngbyeae
-Lynn
-Lynne
-Lynnette
-lynnhaven
-lynx
-Lyomeri
-lyomerous
-Lyon
-Lyonese
-Lyonetia
-lyonetiid
-Lyonetiidae
-Lyonnais
-lyonnaise
-Lyonnesse
-lyophile
-lyophilization
-lyophilize
-lyophobe
-Lyopoma
-Lyopomata
-lyopomatous
-lyotrope
-lypemania
-Lyperosia
-lypothymia
-lyra
-Lyraid
-lyrate
-lyrated
-lyrately
-lyraway
-lyre
-lyrebird
-lyreflower
-lyreman
-lyretail
-lyric
-lyrical
-lyrically
-lyricalness
-lyrichord
-lyricism
-lyricist
-lyricize
-Lyrid
-lyriform
-lyrism
-lyrist
-Lyrurus
-lys
-Lysander
-lysate
-lyse
-Lysenkoism
-lysidine
-lysigenic
-lysigenous
-lysigenously
-Lysiloma
-Lysimachia
-Lysimachus
-lysimeter
-lysin
-lysine
-lysis
-Lysistrata
-lysogen
-lysogenesis
-lysogenetic
-lysogenic
-lysozyme
-lyssa
-lyssic
-lyssophobia
-lyterian
-Lythraceae
-lythraceous
-Lythrum
-lytic
-lytta
-lyxose
-M
-m
-Ma
-ma
-maam
-maamselle
-Maarten
-Mab
-Maba
-Mabel
-Mabellona
-mabi
-Mabinogion
-mabolo
-Mac
-mac
-macaasim
-macabre
-macabresque
-Macaca
-macaco
-Macacus
-macadam
-Macadamia
-macadamite
-macadamization
-macadamize
-macadamizer
-Macaglia
-macan
-macana
-Macanese
-macao
-macaque
-Macaranga
-Macarani
-Macareus
-macarism
-macarize
-macaroni
-macaronic
-macaronical
-macaronically
-macaronicism
-macaronism
-macaroon
-Macartney
-Macassar
-Macassarese
-macaw
-Macbeth
-Maccabaeus
-Maccabean
-Maccabees
-maccaboy
-macco
-maccoboy
-Macduff
-mace
-macedoine
-Macedon
-Macedonian
-Macedonic
-macehead
-maceman
-macer
-macerate
-macerater
-maceration
-Macflecknoe
-machairodont
-Machairodontidae
-Machairodontinae
-Machairodus
-machan
-machar
-machete
-Machetes
-machi
-Machiavel
-Machiavellian
-Machiavellianism
-Machiavellianly
-Machiavellic
-Machiavellism
-machiavellist
-Machiavellistic
-machicolate
-machicolation
-machicoulis
-Machicui
-machila
-Machilidae
-Machilis
-machin
-machinability
-machinable
-machinal
-machinate
-machination
-machinator
-machine
-machineful
-machineless
-machinelike
-machinely
-machineman
-machinemonger
-machiner
-machinery
-machinification
-machinify
-machinism
-machinist
-machinization
-machinize
-machinoclast
-machinofacture
-machinotechnique
-machinule
-Machogo
-machopolyp
-machree
-macies
-Macigno
-macilence
-macilency
-macilent
-mack
-mackenboy
-mackerel
-mackereler
-mackereling
-Mackinaw
-mackins
-mackintosh
-mackintoshite
-mackle
-macklike
-macle
-Macleaya
-macled
-Maclura
-Maclurea
-maclurin
-Macmillanite
-maco
-Macon
-maconite
-Macracanthorhynchus
-macracanthrorhynchiasis
-macradenous
-macrame
-macrander
-macrandrous
-macrauchene
-Macrauchenia
-macraucheniid
-Macraucheniidae
-macraucheniiform
-macrauchenioid
-macrencephalic
-macrencephalous
-macro
-macroanalysis
-macroanalyst
-macroanalytical
-macrobacterium
-macrobian
-macrobiosis
-macrobiote
-macrobiotic
-macrobiotics
-Macrobiotus
-macroblast
-macrobrachia
-macrocarpous
-Macrocentrinae
-Macrocentrus
-macrocephalia
-macrocephalic
-macrocephalism
-macrocephalous
-macrocephalus
-macrocephaly
-macrochaeta
-macrocheilia
-Macrochelys
-macrochemical
-macrochemically
-macrochemistry
-Macrochira
-macrochiran
-Macrochires
-macrochiria
-Macrochiroptera
-macrochiropteran
-macrocladous
-macroclimate
-macroclimatic
-macrococcus
-macrocoly
-macroconidial
-macroconidium
-macroconjugant
-macrocornea
-macrocosm
-macrocosmic
-macrocosmical
-macrocosmology
-macrocosmos
-macrocrystalline
-macrocyst
-Macrocystis
-macrocyte
-macrocythemia
-macrocytic
-macrocytosis
-macrodactyl
-macrodactylia
-macrodactylic
-macrodactylism
-macrodactylous
-macrodactyly
-macrodiagonal
-macrodomatic
-macrodome
-macrodont
-macrodontia
-macrodontism
-macroelement
-macroergate
-macroevolution
-macrofarad
-macrogamete
-macrogametocyte
-macrogamy
-macrogastria
-macroglossate
-macroglossia
-macrognathic
-macrognathism
-macrognathous
-macrogonidium
-macrograph
-macrographic
-macrography
-macrolepidoptera
-macrolepidopterous
-macrology
-macromandibular
-macromania
-macromastia
-macromazia
-macromelia
-macromeral
-macromere
-macromeric
-macromerite
-macromeritic
-macromesentery
-macrometer
-macromethod
-macromolecule
-macromyelon
-macromyelonal
-macron
-macronuclear
-macronucleus
-macronutrient
-macropetalous
-macrophage
-macrophagocyte
-macrophagus
-Macrophoma
-macrophotograph
-macrophotography
-macrophyllous
-macrophysics
-macropia
-macropinacoid
-macropinacoidal
-macroplankton
-macroplasia
-macroplastia
-macropleural
-macropodia
-Macropodidae
-Macropodinae
-macropodine
-macropodous
-macroprism
-macroprosopia
-macropsia
-macropteran
-macropterous
-Macropus
-Macropygia
-macropyramid
-macroreaction
-Macrorhamphosidae
-Macrorhamphosus
-macrorhinia
-Macrorhinus
-macroscelia
-Macroscelides
-macroscian
-macroscopic
-macroscopical
-macroscopically
-macroseism
-macroseismic
-macroseismograph
-macrosepalous
-macroseptum
-macrosmatic
-macrosomatia
-macrosomatous
-macrosomia
-macrosplanchnic
-macrosporange
-macrosporangium
-macrospore
-macrosporic
-Macrosporium
-macrosporophore
-macrosporophyl
-macrosporophyll
-Macrostachya
-macrostomatous
-macrostomia
-macrostructural
-macrostructure
-macrostylospore
-macrostylous
-macrosymbiont
-macrothere
-Macrotheriidae
-macrotherioid
-Macrotherium
-macrotherm
-macrotia
-macrotin
-Macrotolagus
-macrotome
-macrotone
-macrotous
-macrourid
-Macrouridae
-Macrourus
-Macrozamia
-macrozoogonidium
-macrozoospore
-Macrura
-macrural
-macruran
-macruroid
-macrurous
-mactation
-Mactra
-Mactridae
-mactroid
-macuca
-macula
-macular
-maculate
-maculated
-maculation
-macule
-maculicole
-maculicolous
-maculiferous
-maculocerebral
-maculopapular
-maculose
-Macusi
-macuta
-mad
-Madagascan
-Madagascar
-Madagascarian
-Madagass
-madam
-madame
-madapollam
-madarosis
-madarotic
-madbrain
-madbrained
-madcap
-madden
-maddening
-maddeningly
-maddeningness
-madder
-madderish
-madderwort
-madding
-maddingly
-maddish
-maddle
-made
-Madecase
-madefaction
-madefy
-Madegassy
-Madeira
-Madeiran
-Madeline
-madeline
-Madelon
-madescent
-Madge
-madhouse
-madhuca
-Madhva
-Madi
-Madia
-madid
-madidans
-Madiga
-madisterium
-madling
-madly
-madman
-madnep
-madness
-mado
-Madoc
-Madonna
-Madonnahood
-Madonnaish
-Madonnalike
-madoqua
-Madotheca
-madrague
-Madras
-madrasah
-Madrasi
-madreperl
-Madrepora
-Madreporacea
-madreporacean
-Madreporaria
-madreporarian
-madrepore
-madreporian
-madreporic
-madreporiform
-madreporite
-madreporitic
-Madrid
-madrier
-madrigal
-madrigaler
-madrigaletto
-madrigalian
-madrigalist
-Madrilene
-Madrilenian
-madrona
-madship
-madstone
-Madurese
-maduro
-madweed
-madwoman
-madwort
-mae
-Maeandra
-Maeandrina
-maeandrine
-maeandriniform
-maeandrinoid
-maeandroid
-Maecenas
-Maecenasship
-maegbote
-Maelstrom
-Maemacterion
-maenad
-maenadic
-maenadism
-maenaite
-Maenalus
-Maenidae
-Maeonian
-Maeonides
-maestri
-maestro
-maffia
-maffick
-mafficker
-maffle
-mafflin
-mafic
-mafoo
-mafura
-mag
-Maga
-Magadhi
-magadis
-magadize
-Magahi
-Magalensia
-magani
-magas
-magazinable
-magazinage
-magazine
-magazinelet
-magaziner
-magazinette
-magazinish
-magazinism
-magazinist
-magaziny
-Magdalen
-Magdalene
-Magdalenian
-mage
-Magellan
-Magellanian
-Magellanic
-magenta
-magged
-Maggie
-maggle
-maggot
-maggotiness
-maggotpie
-maggoty
-Maggy
-Magh
-Maghi
-Maghrib
-Maghribi
-Magi
-magi
-Magian
-Magianism
-magic
-magical
-magicalize
-magically
-magicdom
-magician
-magicianship
-magicked
-magicking
-Magindanao
-magiric
-magirics
-magirist
-magiristic
-magirological
-magirologist
-magirology
-Magism
-magister
-magisterial
-magisteriality
-magisterially
-magisterialness
-magistery
-magistracy
-magistral
-magistrality
-magistrally
-magistrand
-magistrant
-magistrate
-magistrateship
-magistratic
-magistratical
-magistratically
-magistrative
-magistrature
-Maglemose
-Maglemosean
-Maglemosian
-magma
-magmatic
-magnanimity
-magnanimous
-magnanimously
-magnanimousness
-magnascope
-magnascopic
-magnate
-magnecrystallic
-magnelectric
-magneoptic
-magnes
-magnesia
-magnesial
-magnesian
-magnesic
-magnesioferrite
-magnesite
-magnesium
-magnet
-magneta
-magnetic
-magnetical
-magnetically
-magneticalness
-magnetician
-magnetics
-magnetiferous
-magnetification
-magnetify
-magnetimeter
-magnetism
-magnetist
-magnetite
-magnetitic
-magnetizability
-magnetizable
-magnetization
-magnetize
-magnetizer
-magneto
-magnetobell
-magnetochemical
-magnetochemistry
-magnetod
-magnetodynamo
-magnetoelectric
-magnetoelectrical
-magnetoelectricity
-magnetogenerator
-magnetogram
-magnetograph
-magnetographic
-magnetoid
-magnetomachine
-magnetometer
-magnetometric
-magnetometrical
-magnetometrically
-magnetometry
-magnetomotive
-magnetomotor
-magneton
-magnetooptic
-magnetooptical
-magnetooptics
-magnetophone
-magnetophonograph
-magnetoplumbite
-magnetoprinter
-magnetoscope
-magnetostriction
-magnetotelegraph
-magnetotelephone
-magnetotherapy
-magnetotransmitter
-magnetron
-magnicaudate
-magnicaudatous
-magnifiable
-magnific
-magnifical
-magnifically
-Magnificat
-magnification
-magnificative
-magnifice
-magnificence
-magnificent
-magnificently
-magnificentness
-magnifico
-magnifier
-magnify
-magniloquence
-magniloquent
-magniloquently
-magniloquy
-magnipotence
-magnipotent
-magnirostrate
-magnisonant
-magnitude
-magnitudinous
-magnochromite
-magnoferrite
-Magnolia
-magnolia
-Magnoliaceae
-magnoliaceous
-magnum
-Magnus
-Magog
-magot
-magpie
-magpied
-magpieish
-magsman
-maguari
-maguey
-Magyar
-Magyaran
-Magyarism
-Magyarization
-Magyarize
-Mah
-maha
-mahaleb
-mahalla
-mahant
-mahar
-maharaja
-maharajrana
-maharana
-maharanee
-maharani
-maharao
-Maharashtri
-maharawal
-maharawat
-mahatma
-mahatmaism
-Mahayana
-Mahayanism
-Mahayanist
-Mahayanistic
-Mahdi
-Mahdian
-Mahdiship
-Mahdism
-Mahdist
-Mahesh
-Mahi
-Mahican
-mahmal
-Mahmoud
-mahmudi
-mahoe
-mahoganize
-mahogany
-mahoitre
-maholi
-maholtine
-Mahomet
-Mahometry
-mahone
-Mahonia
-Mahori
-Mahound
-mahout
-Mahra
-Mahran
-Mahri
-mahseer
-mahua
-mahuang
-Maia
-Maiacca
-Maianthemum
-maid
-Maida
-maidan
-maiden
-maidenhair
-maidenhead
-maidenhood
-maidenish
-maidenism
-maidenlike
-maidenliness
-maidenly
-maidenship
-maidenweed
-maidhood
-Maidie
-maidish
-maidism
-maidkin
-maidlike
-maidling
-maidservant
-Maidu
-maidy
-maiefic
-maieutic
-maieutical
-maieutics
-maigre
-maiid
-Maiidae
-mail
-mailable
-mailbag
-mailbox
-mailclad
-mailed
-mailer
-mailguard
-mailie
-maillechort
-mailless
-mailman
-mailplane
-maim
-maimed
-maimedly
-maimedness
-maimer
-maimon
-Maimonidean
-Maimonist
-main
-Mainan
-Maine
-mainferre
-mainlander
-mainly
-mainmast
-mainmortable
-mainour
-mainpast
-mainpernable
-mainpernor
-mainpin
-mainport
-mainpost
-mainprise
-mains
-mainsail
-mainsheet
-mainspring
-mainstay
-Mainstreeter
-Mainstreetism
-maint
-maintain
-maintainable
-maintainableness
-maintainer
-maintainment
-maintainor
-maintenance
-Maintenon
-maintop
-maintopman
-maioid
-Maioidea
-maioidean
-Maioli
-Maiongkong
-Maipure
-mairatour
-maire
-maisonette
-Maithili
-maitlandite
-Maitreya
-Maius
-maize
-maizebird
-maizenic
-maizer
-Maja
-Majagga
-majagua
-Majesta
-majestic
-majestical
-majestically
-majesticalness
-majesticness
-majestious
-majesty
-majestyship
-Majlis
-majo
-majolica
-majolist
-majoon
-Major
-major
-majorate
-majoration
-Majorcan
-majorette
-Majorism
-Majorist
-Majoristic
-majority
-majorize
-majorship
-majuscular
-majuscule
-makable
-Makah
-Makaraka
-Makari
-Makassar
-make
-makebate
-makedom
-makefast
-maker
-makeress
-makership
-makeshift
-makeshiftiness
-makeshiftness
-makeshifty
-makeweight
-makhzan
-maki
-makimono
-making
-makluk
-mako
-Makonde
-makroskelic
-Maku
-Makua
-makuk
-mal
-mala
-malaanonang
-Malabar
-Malabarese
-malabathrum
-malacanthid
-Malacanthidae
-malacanthine
-Malacanthus
-Malacca
-Malaccan
-malaccident
-Malaceae
-malaceous
-malachite
-malacia
-Malaclemys
-Malaclypse
-Malacobdella
-Malacocotylea
-malacoderm
-Malacodermatidae
-malacodermatous
-Malacodermidae
-malacodermous
-malacoid
-malacolite
-malacological
-malacologist
-malacology
-malacon
-malacophilous
-malacophonous
-malacophyllous
-malacopod
-Malacopoda
-malacopodous
-malacopterygian
-Malacopterygii
-malacopterygious
-Malacoscolices
-Malacoscolicine
-Malacosoma
-Malacostraca
-malacostracan
-malacostracology
-malacostracous
-malactic
-maladaptation
-maladdress
-maladive
-maladjust
-maladjusted
-maladjustive
-maladjustment
-maladminister
-maladministration
-maladministrator
-maladroit
-maladroitly
-maladroitness
-maladventure
-malady
-Malaga
-Malagasy
-Malagigi
-malagma
-malaguena
-malahack
-malaise
-malakin
-malalignment
-malambo
-malandered
-malanders
-malandrous
-malanga
-malapaho
-malapert
-malapertly
-malapertness
-malapi
-malapplication
-malappointment
-malappropriate
-malappropriation
-malaprop
-malapropian
-malapropish
-malapropism
-malapropoism
-malapropos
-Malapterurus
-malar
-malaria
-malarial
-malariaproof
-malarin
-malarioid
-malariologist
-malariology
-malarious
-malarkey
-malaroma
-malarrangement
-malasapsap
-malassimilation
-malassociation
-malate
-malati
-malattress
-malax
-malaxable
-malaxage
-malaxate
-malaxation
-malaxator
-malaxerman
-Malaxis
-Malay
-Malayalam
-Malayalim
-Malayan
-Malayic
-Malayize
-Malayoid
-Malaysian
-malbehavior
-malbrouck
-malchite
-Malchus
-Malcolm
-malconceived
-malconduct
-malconformation
-malconstruction
-malcontent
-malcontented
-malcontentedly
-malcontentedness
-malcontentism
-malcontently
-malcontentment
-malconvenance
-malcreated
-malcultivation
-maldeveloped
-maldevelopment
-maldigestion
-maldirection
-maldistribution
-Maldivian
-maldonite
-malduck
-Male
-male
-malease
-maleate
-Malebolge
-Malebolgian
-Malebolgic
-Malebranchism
-Malecite
-maledicent
-maledict
-malediction
-maledictive
-maledictory
-maleducation
-malefaction
-malefactor
-malefactory
-malefactress
-malefical
-malefically
-maleficence
-maleficent
-maleficial
-maleficiate
-maleficiation
-maleic
-maleinoid
-malella
-Malemute
-maleness
-malengine
-maleo
-maleruption
-Malesherbia
-Malesherbiaceae
-malesherbiaceous
-malevolence
-malevolency
-malevolent
-malevolently
-malexecution
-malfeasance
-malfeasant
-malfed
-malformation
-malformed
-malfortune
-malfunction
-malgovernment
-malgrace
-malguzar
-malguzari
-malhonest
-malhygiene
-mali
-malic
-malice
-maliceful
-maliceproof
-malicho
-malicious
-maliciously
-maliciousness
-malicorium
-malidentification
-maliferous
-maliform
-malign
-malignance
-malignancy
-malignant
-malignantly
-malignation
-maligner
-malignify
-malignity
-malignly
-malignment
-malik
-malikadna
-malikala
-malikana
-Maliki
-Malikite
-maline
-malines
-malinfluence
-malinger
-malingerer
-malingery
-Malinois
-malinowskite
-malinstitution
-malinstruction
-malintent
-malism
-malison
-malist
-malistic
-malkin
-Malkite
-mall
-malladrite
-mallangong
-mallard
-mallardite
-malleability
-malleabilization
-malleable
-malleableize
-malleableized
-malleableness
-malleablize
-malleal
-mallear
-malleate
-malleation
-mallee
-Malleifera
-malleiferous
-malleiform
-mallein
-malleinization
-malleinize
-mallemaroking
-mallemuck
-malleoincudal
-malleolable
-malleolar
-malleolus
-mallet
-malleus
-Malling
-Mallophaga
-mallophagan
-mallophagous
-malloseismic
-Mallotus
-mallow
-mallowwort
-Malloy
-mallum
-mallus
-malm
-Malmaison
-malmignatte
-malmsey
-malmstone
-malmy
-malnourished
-malnourishment
-malnutrite
-malnutrition
-malo
-malobservance
-malobservation
-maloccluded
-malocclusion
-malodor
-malodorant
-malodorous
-malodorously
-malodorousness
-malojilla
-malonate
-malonic
-malonyl
-malonylurea
-Malope
-maloperation
-malorganization
-malorganized
-malouah
-malpais
-Malpighia
-Malpighiaceae
-malpighiaceous
-Malpighian
-malplaced
-malpoise
-malposed
-malposition
-malpractice
-malpractioner
-malpraxis
-malpresentation
-malproportion
-malproportioned
-malpropriety
-malpublication
-malreasoning
-malrotation
-malshapen
-malt
-maltable
-maltase
-malter
-Maltese
-maltha
-Malthe
-malthouse
-Malthusian
-Malthusianism
-Malthusiast
-maltiness
-malting
-maltman
-Malto
-maltobiose
-maltodextrin
-maltodextrine
-maltolte
-maltose
-maltreat
-maltreatment
-maltreator
-maltster
-malturned
-maltworm
-malty
-malunion
-Malurinae
-malurine
-Malurus
-Malus
-Malva
-Malvaceae
-malvaceous
-Malvales
-malvasia
-malvasian
-Malvastrum
-malversation
-malverse
-malvoisie
-malvolition
-Mam
-mamba
-mambo
-mameliere
-mamelonation
-mameluco
-Mameluke
-Mamercus
-Mamers
-Mamertine
-Mamie
-Mamilius
-mamlatdar
-mamma
-mammal
-mammalgia
-Mammalia
-mammalian
-mammaliferous
-mammality
-mammalogical
-mammalogist
-mammalogy
-mammary
-mammate
-Mammea
-mammectomy
-mammee
-mammer
-Mammifera
-mammiferous
-mammiform
-mammilla
-mammillaplasty
-mammillar
-Mammillaria
-mammillary
-mammillate
-mammillated
-mammillation
-mammilliform
-mammilloid
-mammitis
-mammock
-mammogen
-mammogenic
-mammogenically
-mammon
-mammondom
-mammoniacal
-mammonish
-mammonism
-mammonist
-mammonistic
-mammonite
-mammonitish
-mammonization
-mammonize
-mammonolatry
-Mammonteus
-mammoth
-mammothrept
-mammula
-mammular
-Mammut
-Mammutidae
-mammy
-mamo
-man
-mana
-Manabozho
-manacle
-Manacus
-manage
-manageability
-manageable
-manageableness
-manageably
-managee
-manageless
-management
-managemental
-manager
-managerdom
-manageress
-managerial
-managerially
-managership
-managery
-manaism
-manakin
-manal
-manas
-Manasquan
-manatee
-Manatidae
-manatine
-manatoid
-Manatus
-manavel
-manavelins
-Manavendra
-manbird
-manbot
-manche
-Manchester
-Manchesterdom
-Manchesterism
-Manchesterist
-Manchestrian
-manchet
-manchineel
-Manchu
-Manchurian
-mancinism
-mancipable
-mancipant
-mancipate
-mancipation
-mancipative
-mancipatory
-mancipee
-mancipium
-manciple
-mancipleship
-mancipular
-mancono
-Mancunian
-mancus
-mand
-Mandaean
-Mandaeism
-Mandaic
-Mandaite
-mandala
-Mandalay
-mandament
-mandamus
-Mandan
-mandant
-mandarah
-mandarin
-mandarinate
-mandarindom
-mandariness
-mandarinic
-mandarinism
-mandarinize
-mandarinship
-mandatary
-mandate
-mandatee
-mandation
-mandative
-mandator
-mandatorily
-mandatory
-mandatum
-Mande
-mandelate
-mandelic
-mandible
-mandibula
-mandibular
-mandibulary
-Mandibulata
-mandibulate
-mandibulated
-mandibuliform
-mandibulohyoid
-mandibulomaxillary
-mandibulopharyngeal
-mandibulosuspensorial
-mandil
-mandilion
-Mandingan
-Mandingo
-mandola
-mandolin
-mandolinist
-mandolute
-mandom
-mandora
-mandore
-mandra
-mandragora
-mandrake
-mandrel
-mandriarch
-mandrill
-mandrin
-mandruka
-mandua
-manducable
-manducate
-manducation
-manducatory
-mandyas
-mane
-maned
-manege
-manei
-maneless
-manent
-manerial
-manes
-manesheet
-maness
-Manetti
-Manettia
-maneuver
-maneuverability
-maneuverable
-maneuverer
-maneuvrability
-maneuvrable
-maney
-Manfred
-Manfreda
-manful
-manfully
-manfulness
-mang
-manga
-mangabeira
-mangabey
-mangal
-manganapatite
-manganate
-manganblende
-manganbrucite
-manganeisen
-manganese
-manganesian
-manganetic
-manganhedenbergite
-manganic
-manganiferous
-manganite
-manganium
-manganize
-Manganja
-manganocalcite
-manganocolumbite
-manganophyllite
-manganosiderite
-manganosite
-manganostibiite
-manganotantalite
-manganous
-manganpectolite
-Mangar
-Mangbattu
-mange
-mangeao
-mangel
-mangelin
-manger
-mangerite
-mangi
-Mangifera
-mangily
-manginess
-mangle
-mangleman
-mangler
-mangling
-manglingly
-mango
-mangona
-mangonel
-mangonism
-mangonization
-mangonize
-mangosteen
-mangrass
-mangrate
-mangrove
-Mangue
-mangue
-mangy
-Mangyan
-manhandle
-Manhattan
-Manhattanite
-Manhattanize
-manhead
-manhole
-manhood
-mani
-mania
-maniable
-maniac
-maniacal
-maniacally
-manic
-Manicaria
-manicate
-Manichaean
-Manichaeanism
-Manichaeanize
-Manichaeism
-Manichaeist
-Manichee
-manichord
-manicole
-manicure
-manicurist
-manid
-Manidae
-manienie
-manifest
-manifestable
-manifestant
-manifestation
-manifestational
-manifestationist
-manifestative
-manifestatively
-manifested
-manifestedness
-manifester
-manifestive
-manifestly
-manifestness
-manifesto
-manifold
-manifolder
-manifoldly
-manifoldness
-manifoldwise
-maniform
-manify
-Manihot
-manikin
-manikinism
-Manila
-manila
-manilla
-manille
-manioc
-maniple
-manipulable
-manipular
-manipulatable
-manipulate
-manipulation
-manipulative
-manipulatively
-manipulator
-manipulatory
-Manipuri
-Manis
-manism
-manist
-manistic
-manito
-Manitoban
-manitrunk
-maniu
-Manius
-Maniva
-manjak
-Manjeri
-mank
-mankeeper
-mankin
-mankind
-manless
-manlessly
-manlessness
-manlet
-manlihood
-manlike
-manlikely
-manlikeness
-manlily
-manliness
-manling
-manly
-Mann
-manna
-mannan
-mannequin
-manner
-mannerable
-mannered
-mannerhood
-mannering
-mannerism
-mannerist
-manneristic
-manneristical
-manneristically
-mannerize
-mannerless
-mannerlessness
-mannerliness
-mannerly
-manners
-mannersome
-manness
-Mannheimar
-mannide
-mannie
-manniferous
-mannify
-mannikinism
-manning
-mannish
-mannishly
-mannishness
-mannite
-mannitic
-mannitol
-mannitose
-mannoheptite
-mannoheptitol
-mannoheptose
-mannoketoheptose
-mannonic
-mannosan
-mannose
-Manny
-manny
-mano
-Manobo
-manoc
-manograph
-Manolis
-manometer
-manometric
-manometrical
-manometry
-manomin
-manor
-manorial
-manorialism
-manorialize
-manorship
-manoscope
-manostat
-manostatic
-manque
-manred
-manrent
-manroot
-manrope
-Mans
-mansard
-mansarded
-manscape
-manse
-manservant
-manship
-mansion
-mansional
-mansionary
-mansioned
-mansioneer
-mansionry
-manslaughter
-manslaughterer
-manslaughtering
-manslaughterous
-manslayer
-manslaying
-manso
-mansonry
-manstealer
-manstealing
-manstopper
-manstopping
-mansuete
-mansuetely
-mansuetude
-mant
-manta
-mantal
-manteau
-mantel
-mantelet
-manteline
-mantelletta
-mantellone
-mantelpiece
-mantelshelf
-manteltree
-manter
-mantes
-mantevil
-mantic
-manticism
-manticore
-mantid
-Mantidae
-mantilla
-Mantinean
-mantis
-Mantisia
-Mantispa
-mantispid
-Mantispidae
-mantissa
-mantistic
-mantle
-mantled
-mantlet
-mantling
-Manto
-manto
-Mantodea
-mantoid
-Mantoidea
-mantologist
-mantology
-mantra
-mantrap
-mantua
-mantuamaker
-mantuamaking
-Mantuan
-Mantzu
-manual
-manualii
-manualism
-manualist
-manualiter
-manually
-manuao
-manubrial
-manubriated
-manubrium
-manucaption
-manucaptor
-manucapture
-manucode
-Manucodia
-manucodiata
-manuduce
-manuduction
-manuductor
-manuductory
-Manuel
-manufactory
-manufacturable
-manufactural
-manufacture
-manufacturer
-manufacturess
-manuka
-manul
-manuma
-manumea
-manumisable
-manumission
-manumissive
-manumit
-manumitter
-manumotive
-manurable
-manurage
-manurance
-manure
-manureless
-manurer
-manurial
-manurially
-manus
-manuscript
-manuscriptal
-manuscription
-manuscriptural
-manusina
-manustupration
-manutagi
-Manvantara
-manward
-manwards
-manway
-manweed
-manwise
-Manx
-Manxman
-Manxwoman
-many
-manyberry
-Manyema
-manyfold
-manyness
-manyplies
-manyroot
-manyways
-manywhere
-manywise
-manzana
-manzanilla
-manzanillo
-manzanita
-Manzas
-manzil
-mao
-maomao
-Maori
-Maoridom
-Maoriland
-Maorilander
-map
-mapach
-mapau
-maphrian
-mapland
-maple
-maplebush
-mapo
-mappable
-mapper
-Mappila
-mappist
-mappy
-Mapuche
-mapwise
-maquahuitl
-maquette
-maqui
-Maquiritare
-maquis
-Mar
-mar
-Mara
-marabotin
-marabou
-Marabout
-marabuto
-maraca
-Maracaibo
-maracan
-maracock
-marae
-Maragato
-marajuana
-marakapas
-maral
-maranatha
-marang
-Maranha
-Maranham
-Maranhao
-Maranta
-Marantaceae
-marantaceous
-marantic
-marara
-mararie
-marasca
-maraschino
-marasmic
-Marasmius
-marasmoid
-marasmous
-marasmus
-Maratha
-Marathi
-marathon
-marathoner
-Marathonian
-Maratism
-Maratist
-Marattia
-Marattiaceae
-marattiaceous
-Marattiales
-maraud
-marauder
-maravedi
-Maravi
-marbelize
-marble
-marbled
-marblehead
-marbleheader
-marblehearted
-marbleization
-marbleize
-marbleizer
-marblelike
-marbleness
-marbler
-marbles
-marblewood
-marbling
-marblish
-marbly
-marbrinus
-Marc
-marc
-Marcan
-marcantant
-marcasite
-marcasitic
-marcasitical
-Marcel
-marcel
-marceline
-Marcella
-marcella
-marceller
-Marcellian
-Marcellianism
-marcello
-marcescence
-marcescent
-Marcgravia
-Marcgraviaceae
-marcgraviaceous
-March
-march
-Marchantia
-Marchantiaceae
-marchantiaceous
-Marchantiales
-marcher
-marchetto
-marchioness
-marchite
-marchland
-marchman
-Marchmont
-marchpane
-Marci
-Marcia
-marcid
-Marcionism
-Marcionist
-Marcionite
-Marcionitic
-Marcionitish
-Marcionitism
-Marcite
-Marco
-marco
-Marcobrunner
-Marcomanni
-Marconi
-marconi
-marconigram
-marconigraph
-marconigraphy
-marcor
-Marcos
-Marcosian
-marcottage
-mardy
-mare
-mareblob
-Mareca
-marechal
-Marehan
-Marek
-marekanite
-maremma
-maremmatic
-maremmese
-marengo
-marennin
-Mareotic
-Mareotid
-Marfik
-marfire
-margarate
-Margarelon
-Margaret
-margaric
-margarin
-margarine
-margarita
-margaritaceous
-margarite
-margaritiferous
-margaritomancy
-Margarodes
-margarodid
-Margarodinae
-margarodite
-Margaropus
-margarosanite
-margay
-marge
-margeline
-margent
-Margery
-Margie
-margin
-marginal
-marginalia
-marginality
-marginalize
-marginally
-marginate
-marginated
-margination
-margined
-Marginella
-Marginellidae
-marginelliform
-marginiform
-margining
-marginirostral
-marginoplasty
-margosa
-Margot
-margravate
-margrave
-margravely
-margravial
-margraviate
-margravine
-Marguerite
-marguerite
-marhala
-Marheshvan
-Mari
-Maria
-maria
-marialite
-Mariamman
-Marian
-Mariana
-Marianic
-Marianne
-Marianolatrist
-Marianolatry
-maricolous
-marid
-Marie
-mariengroschen
-marigenous
-marigold
-marigram
-marigraph
-marigraphic
-marijuana
-marikina
-Marilla
-Marilyn
-marimba
-marimonda
-marina
-marinade
-marinate
-marinated
-marine
-mariner
-marinheiro
-marinist
-marinorama
-Mario
-mariola
-Mariolater
-Mariolatrous
-Mariolatry
-Mariology
-Marion
-marionette
-Mariou
-Mariposan
-mariposite
-maris
-marish
-marishness
-Marist
-maritage
-marital
-maritality
-maritally
-mariticidal
-mariticide
-Maritime
-maritime
-maritorious
-mariupolite
-marjoram
-Marjorie
-Mark
-mark
-marka
-Markab
-markdown
-Markeb
-marked
-markedly
-markedness
-marker
-market
-marketability
-marketable
-marketableness
-marketably
-marketeer
-marketer
-marketing
-marketman
-marketstead
-marketwise
-markfieldite
-Markgenossenschaft
-markhor
-marking
-markka
-markless
-markman
-markmoot
-Marko
-markshot
-marksman
-marksmanly
-marksmanship
-markswoman
-markup
-Markus
-markweed
-markworthy
-marl
-Marla
-marlaceous
-marlberry
-marled
-Marlena
-marler
-marli
-marlin
-marline
-marlinespike
-marlite
-marlitic
-marllike
-marlock
-Marlovian
-Marlowesque
-Marlowish
-Marlowism
-marlpit
-marly
-marm
-marmalade
-marmalady
-Marmar
-marmarization
-marmarize
-marmarosis
-marmatite
-marmelos
-marmennill
-marmit
-marmite
-marmolite
-marmoraceous
-marmorate
-marmorated
-marmoration
-marmoreal
-marmoreally
-marmorean
-marmoric
-Marmosa
-marmose
-marmoset
-marmot
-Marmota
-Marnix
-maro
-marocain
-marok
-Maronian
-Maronist
-Maronite
-maroon
-marooner
-maroquin
-Marpessa
-marplot
-marplotry
-marque
-marquee
-Marquesan
-marquess
-marquetry
-marquis
-marquisal
-marquisate
-marquisdom
-marquise
-marquisette
-marquisina
-marquisotte
-marquisship
-marquito
-marranism
-marranize
-marrano
-marree
-Marrella
-marrer
-marriable
-marriage
-marriageability
-marriageable
-marriageableness
-marriageproof
-married
-marrier
-marron
-marrot
-marrow
-marrowbone
-marrowed
-marrowfat
-marrowish
-marrowless
-marrowlike
-marrowsky
-marrowskyer
-marrowy
-Marrubium
-Marrucinian
-marry
-marryer
-marrying
-marrymuffe
-Mars
-Marsala
-Marsdenia
-marseilles
-Marsh
-marsh
-Marsha
-marshal
-marshalate
-marshalcy
-marshaler
-marshaless
-Marshall
-marshalman
-marshalment
-Marshalsea
-marshalship
-marshberry
-marshbuck
-marshfire
-marshflower
-marshiness
-marshite
-marshland
-marshlander
-marshlike
-marshlocks
-marshman
-marshwort
-marshy
-Marsi
-Marsian
-Marsilea
-Marsileaceae
-marsileaceous
-Marsilia
-Marsiliaceae
-marsipobranch
-Marsipobranchia
-Marsipobranchiata
-marsipobranchiate
-Marsipobranchii
-marsoon
-Marspiter
-Marssonia
-Marssonina
-marsupial
-Marsupialia
-marsupialian
-marsupialization
-marsupialize
-marsupian
-Marsupiata
-marsupiate
-marsupium
-Mart
-mart
-martagon
-martel
-marteline
-martellate
-martellato
-marten
-martensite
-martensitic
-Martes
-martext
-Martha
-martial
-martialism
-Martialist
-martiality
-martialization
-martialize
-martially
-martialness
-Martian
-Martin
-martin
-martinet
-martineta
-martinetish
-martinetishness
-martinetism
-martinetship
-Martinez
-martingale
-martinico
-Martinism
-Martinist
-Martinmas
-martinoe
-martite
-Martius
-martlet
-Martu
-Marty
-Martyn
-Martynia
-Martyniaceae
-martyniaceous
-martyr
-martyrdom
-martyress
-martyrium
-martyrization
-martyrize
-martyrizer
-martyrlike
-martyrly
-martyrolatry
-martyrologic
-martyrological
-martyrologist
-martyrologistic
-martyrologium
-martyrology
-martyrship
-martyry
-maru
-marvel
-marvelment
-marvelous
-marvelously
-marvelousness
-marvelry
-marver
-Marvin
-Marwari
-Marxian
-Marxianism
-Marxism
-Marxist
-Mary
-mary
-marybud
-Maryland
-Marylander
-Marylandian
-Marymass
-marysole
-marzipan
-mas
-masa
-Masai
-Masanao
-Masanobu
-masaridid
-Masarididae
-Masaridinae
-Masaris
-mascagnine
-mascagnite
-mascally
-mascara
-mascaron
-mascled
-mascleless
-mascot
-mascotism
-mascotry
-Mascouten
-mascularity
-masculate
-masculation
-masculine
-masculinely
-masculineness
-masculinism
-masculinist
-masculinity
-masculinization
-masculinize
-masculist
-masculofeminine
-masculonucleus
-masculy
-masdeu
-Masdevallia
-mash
-masha
-mashal
-mashallah
-mashelton
-masher
-mashie
-mashing
-mashman
-Mashona
-Mashpee
-mashru
-mashy
-masjid
-mask
-masked
-Maskegon
-maskelynite
-masker
-maskette
-maskflower
-Maskins
-masklike
-Maskoi
-maskoid
-maslin
-masochism
-masochist
-masochistic
-Mason
-mason
-masoned
-masoner
-masonic
-Masonite
-masonite
-masonry
-masonwork
-masooka
-masoola
-Masora
-Masorete
-Masoreth
-Masoretic
-Maspiter
-masque
-masquer
-masquerade
-masquerader
-Mass
-mass
-massa
-massacre
-massacrer
-massage
-massager
-massageuse
-massagist
-Massalia
-Massalian
-massaranduba
-massasauga
-masse
-massebah
-massecuite
-massedly
-massedness
-Massekhoth
-massel
-masser
-masseter
-masseteric
-masseur
-masseuse
-massicot
-massier
-massiest
-massif
-Massilia
-Massilian
-massily
-massiness
-massive
-massively
-massiveness
-massivity
-masskanne
-massless
-masslike
-Massmonger
-massotherapy
-massoy
-massula
-massy
-mast
-mastaba
-mastadenitis
-mastadenoma
-mastage
-mastalgia
-mastatrophia
-mastatrophy
-mastauxe
-mastax
-mastectomy
-masted
-master
-masterable
-masterate
-masterdom
-masterer
-masterful
-masterfully
-masterfulness
-masterhood
-masterless
-masterlessness
-masterlike
-masterlily
-masterliness
-masterling
-masterly
-masterman
-mastermind
-masterous
-masterpiece
-masterproof
-mastership
-masterwork
-masterwort
-mastery
-mastful
-masthead
-masthelcosis
-mastic
-masticability
-masticable
-masticate
-mastication
-masticator
-masticatory
-mastiche
-masticic
-Masticura
-masticurous
-mastiff
-Mastigamoeba
-mastigate
-mastigium
-mastigobranchia
-mastigobranchial
-Mastigophora
-mastigophoran
-mastigophoric
-mastigophorous
-mastigopod
-Mastigopoda
-mastigopodous
-mastigote
-mastigure
-masting
-mastitis
-mastless
-mastlike
-mastman
-mastocarcinoma
-mastoccipital
-mastochondroma
-mastochondrosis
-mastodon
-mastodonsaurian
-Mastodonsaurus
-mastodont
-mastodontic
-Mastodontidae
-mastodontine
-mastodontoid
-mastodynia
-mastoid
-mastoidal
-mastoidale
-mastoideal
-mastoidean
-mastoidectomy
-mastoideocentesis
-mastoideosquamous
-mastoiditis
-mastoidohumeral
-mastoidohumeralis
-mastoidotomy
-mastological
-mastologist
-mastology
-mastomenia
-mastoncus
-mastooccipital
-mastoparietal
-mastopathy
-mastopexy
-mastoplastia
-mastorrhagia
-mastoscirrhus
-mastosquamose
-mastotomy
-mastotympanic
-masturbate
-masturbation
-masturbational
-masturbator
-masturbatory
-mastwood
-masty
-masu
-Masulipatam
-masurium
-Mat
-mat
-Matabele
-Matacan
-matachin
-matachina
-mataco
-matadero
-matador
-mataeological
-mataeologue
-mataeology
-Matagalpa
-Matagalpan
-matagory
-matagouri
-matai
-matajuelo
-matalan
-matamata
-matamoro
-matanza
-matapan
-matapi
-Matar
-matara
-Matatua
-Matawan
-matax
-matboard
-match
-matchable
-matchableness
-matchably
-matchboard
-matchboarding
-matchbook
-matchbox
-matchcloth
-matchcoat
-matcher
-matching
-matchless
-matchlessly
-matchlessness
-matchlock
-matchmaker
-matchmaking
-matchmark
-Matchotic
-matchsafe
-matchstick
-matchwood
-matchy
-mate
-mategriffon
-matehood
-mateless
-matelessness
-matelote
-mately
-mater
-materfamilias
-material
-materialism
-materialist
-materialistic
-materialistical
-materialistically
-materiality
-materialization
-materialize
-materializee
-materializer
-materially
-materialman
-materialness
-materiate
-materiation
-materiel
-maternal
-maternality
-maternalize
-maternally
-maternalness
-maternity
-maternology
-mateship
-matey
-matezite
-matfelon
-matgrass
-math
-mathematic
-mathematical
-mathematically
-mathematicals
-mathematician
-mathematicize
-mathematics
-mathematize
-mathemeg
-mathes
-mathesis
-mathetic
-Mathurin
-matico
-matildite
-matin
-matinal
-matinee
-mating
-matins
-matipo
-matka
-matless
-matlockite
-matlow
-matmaker
-matmaking
-matra
-matral
-Matralia
-matranee
-matrass
-matreed
-matriarch
-matriarchal
-matriarchalism
-matriarchate
-matriarchic
-matriarchist
-matriarchy
-matric
-matrical
-Matricaria
-matrices
-matricidal
-matricide
-matricula
-matriculable
-matriculant
-matricular
-matriculate
-matriculation
-matriculator
-matriculatory
-Matrigan
-matriheritage
-matriherital
-matrilineal
-matrilineally
-matrilinear
-matrilinearism
-matriliny
-matrilocal
-matrimonial
-matrimonially
-matrimonious
-matrimoniously
-matrimony
-matriotism
-matripotestal
-matris
-matrix
-matroclinic
-matroclinous
-matrocliny
-matron
-matronage
-matronal
-Matronalia
-matronhood
-matronism
-matronize
-matronlike
-matronliness
-matronly
-matronship
-matronymic
-matross
-Mats
-matsu
-matsuri
-Matt
-matta
-mattamore
-Mattapony
-mattaro
-mattboard
-matte
-matted
-mattedly
-mattedness
-matter
-matterate
-matterative
-matterful
-matterfulness
-matterless
-mattery
-Matteuccia
-Matthaean
-Matthew
-Matthias
-Matthieu
-Matthiola
-Matti
-matti
-matting
-mattock
-mattoid
-mattoir
-mattress
-mattulla
-Matty
-maturable
-maturate
-maturation
-maturative
-mature
-maturely
-maturement
-matureness
-maturer
-maturescence
-maturescent
-maturing
-maturish
-maturity
-matutinal
-matutinally
-matutinary
-matutine
-matutinely
-matweed
-maty
-matzo
-matzoon
-matzos
-matzoth
-mau
-maucherite
-Maud
-maud
-maudle
-maudlin
-maudlinism
-maudlinize
-maudlinly
-maudlinwort
-mauger
-maugh
-Maugis
-maul
-Maulawiyah
-mauler
-mauley
-mauling
-maulstick
-Maumee
-maumet
-maumetry
-Maun
-maun
-maund
-maunder
-maunderer
-maundful
-maundy
-maunge
-Maurandia
-Maureen
-Mauretanian
-Mauri
-Maurice
-Maurist
-Mauritia
-Mauritian
-Mauser
-mausolea
-mausoleal
-mausolean
-mausoleum
-mauther
-mauve
-mauveine
-mauvette
-mauvine
-maux
-maverick
-mavis
-Mavortian
-mavournin
-mavrodaphne
-maw
-mawbound
-mawk
-mawkish
-mawkishly
-mawkishness
-mawky
-mawp
-Max
-maxilla
-maxillar
-maxillary
-maxilliferous
-maxilliform
-maxilliped
-maxillipedary
-maxillodental
-maxillofacial
-maxillojugal
-maxillolabial
-maxillomandibular
-maxillopalatal
-maxillopalatine
-maxillopharyngeal
-maxillopremaxillary
-maxilloturbinal
-maxillozygomatic
-maxim
-maxima
-maximal
-Maximalism
-Maximalist
-maximally
-maximate
-maximation
-maximed
-maximist
-maximistic
-maximite
-maximization
-maximize
-maximizer
-Maximon
-maximum
-maximus
-maxixe
-maxwell
-May
-may
-Maya
-maya
-Mayaca
-Mayacaceae
-mayacaceous
-Mayan
-Mayance
-Mayathan
-maybe
-Maybird
-Maybloom
-maybush
-Maycock
-maycock
-Mayda
-mayday
-Mayer
-Mayey
-Mayeye
-Mayfair
-mayfish
-Mayflower
-Mayfowl
-mayhap
-mayhappen
-mayhem
-Maying
-Maylike
-maynt
-Mayo
-Mayologist
-mayonnaise
-mayor
-mayoral
-mayoralty
-mayoress
-mayorship
-Mayoruna
-Maypole
-Maypoling
-maypop
-maysin
-mayten
-Maytenus
-Maythorn
-Maytide
-Maytime
-mayweed
-Maywings
-Maywort
-maza
-mazalgia
-Mazama
-mazame
-Mazanderani
-mazapilite
-mazard
-mazarine
-Mazatec
-Mazateco
-Mazda
-Mazdaism
-Mazdaist
-Mazdakean
-Mazdakite
-Mazdean
-maze
-mazed
-mazedly
-mazedness
-mazeful
-mazement
-mazer
-Mazhabi
-mazic
-mazily
-maziness
-mazocacothesis
-mazodynia
-mazolysis
-mazolytic
-mazopathia
-mazopathic
-mazopexy
-Mazovian
-mazuca
-mazuma
-Mazur
-Mazurian
-mazurka
-mazut
-mazy
-mazzard
-Mazzinian
-Mazzinianism
-Mazzinist
-mbalolo
-Mbaya
-mbori
-Mbuba
-Mbunda
-Mcintosh
-Mckay
-Mdewakanton
-me
-meable
-meaching
-mead
-meader
-meadow
-meadowbur
-meadowed
-meadower
-meadowing
-meadowink
-meadowland
-meadowless
-meadowsweet
-meadowwort
-meadowy
-meadsman
-meager
-meagerly
-meagerness
-meagre
-meak
-meal
-mealable
-mealberry
-mealer
-mealies
-mealily
-mealiness
-mealless
-mealman
-mealmonger
-mealmouth
-mealmouthed
-mealproof
-mealtime
-mealy
-mealymouth
-mealymouthed
-mealymouthedly
-mealymouthedness
-mealywing
-mean
-meander
-meanderingly
-meandrine
-meandriniform
-meandrite
-meandrous
-meaned
-meaner
-meaning
-meaningful
-meaningfully
-meaningless
-meaninglessly
-meaninglessness
-meaningly
-meaningness
-meanish
-meanly
-meanness
-meant
-Meantes
-meantone
-meanwhile
-mease
-measle
-measled
-measledness
-measles
-measlesproof
-measly
-measondue
-measurability
-measurable
-measurableness
-measurably
-measuration
-measure
-measured
-measuredly
-measuredness
-measureless
-measurelessly
-measurelessness
-measurely
-measurement
-measurer
-measuring
-meat
-meatal
-meatbird
-meatcutter
-meated
-meathook
-meatily
-meatiness
-meatless
-meatman
-meatometer
-meatorrhaphy
-meatoscope
-meatoscopy
-meatotome
-meatotomy
-meatus
-meatworks
-meaty
-Mebsuta
-Mecaptera
-mecate
-Mecca
-Meccan
-Meccano
-Meccawee
-Mechael
-mechanal
-mechanality
-mechanalize
-mechanic
-mechanical
-mechanicalism
-mechanicalist
-mechanicality
-mechanicalization
-mechanicalize
-mechanically
-mechanicalness
-mechanician
-mechanicochemical
-mechanicocorpuscular
-mechanicointellectual
-mechanicotherapy
-mechanics
-mechanism
-mechanist
-mechanistic
-mechanistically
-mechanization
-mechanize
-mechanizer
-mechanolater
-mechanology
-mechanomorphic
-mechanomorphism
-mechanotherapeutic
-mechanotherapeutics
-mechanotherapist
-mechanotherapy
-Mechir
-Mechitaristican
-Mechlin
-mechoacan
-meckelectomy
-Meckelian
-Mecklenburgian
-mecodont
-Mecodonta
-mecometer
-mecometry
-mecon
-meconic
-meconidium
-meconin
-meconioid
-meconium
-meconology
-meconophagism
-meconophagist
-Mecoptera
-mecopteran
-mecopteron
-mecopterous
-medal
-medaled
-medalet
-medalist
-medalize
-medallary
-medallic
-medallically
-medallion
-medallionist
-meddle
-meddlecome
-meddlement
-meddler
-meddlesome
-meddlesomely
-meddlesomeness
-meddling
-meddlingly
-Mede
-Medellin
-Medeola
-Media
-media
-mediacid
-mediacy
-mediad
-mediaevalize
-mediaevally
-medial
-medialization
-medialize
-medialkaline
-medially
-Median
-median
-medianic
-medianimic
-medianimity
-medianism
-medianity
-medianly
-mediant
-mediastinal
-mediastine
-mediastinitis
-mediastinotomy
-mediastinum
-mediate
-mediately
-mediateness
-mediating
-mediatingly
-mediation
-mediative
-mediatization
-mediatize
-mediator
-mediatorial
-mediatorialism
-mediatorially
-mediatorship
-mediatory
-mediatress
-mediatrice
-mediatrix
-Medic
-medic
-medicable
-Medicago
-medical
-medically
-medicament
-medicamental
-medicamentally
-medicamentary
-medicamentation
-medicamentous
-medicaster
-medicate
-medication
-medicative
-medicator
-medicatory
-Medicean
-Medici
-medicinable
-medicinableness
-medicinal
-medicinally
-medicinalness
-medicine
-medicinelike
-medicinemonger
-mediciner
-medico
-medicobotanical
-medicochirurgic
-medicochirurgical
-medicodental
-medicolegal
-medicolegally
-medicomania
-medicomechanic
-medicomechanical
-medicomoral
-medicophysical
-medicopsychological
-medicopsychology
-medicostatistic
-medicosurgical
-medicotopographic
-medicozoologic
-mediety
-Medieval
-medieval
-medievalism
-medievalist
-medievalistic
-medievalize
-medievally
-medifixed
-mediglacial
-medimn
-medimno
-medimnos
-medimnus
-Medina
-Medinilla
-medino
-medio
-medioanterior
-mediocarpal
-medioccipital
-mediocre
-mediocrist
-mediocrity
-mediocubital
-mediodepressed
-mediodigital
-mediodorsal
-mediodorsally
-mediofrontal
-mediolateral
-mediopalatal
-mediopalatine
-mediopassive
-mediopectoral
-medioperforate
-mediopontine
-medioposterior
-mediosilicic
-mediostapedial
-mediotarsal
-medioventral
-medisance
-medisect
-medisection
-Medish
-Medism
-meditant
-meditate
-meditating
-meditatingly
-meditation
-meditationist
-meditatist
-meditative
-meditatively
-meditativeness
-meditator
-mediterranean
-Mediterraneanism
-Mediterraneanization
-Mediterraneanize
-mediterraneous
-medithorax
-Meditrinalia
-meditullium
-medium
-mediumism
-mediumistic
-mediumization
-mediumize
-mediumship
-medius
-Medize
-Medizer
-medjidie
-medlar
-medley
-Medoc
-medregal
-medrick
-medrinaque
-medulla
-medullar
-medullary
-medullate
-medullated
-medullation
-medullispinal
-medullitis
-medullization
-medullose
-Medusa
-Medusaean
-medusal
-medusalike
-medusan
-medusiferous
-medusiform
-medusoid
-meebos
-meece
-meed
-meedless
-Meehan
-meek
-meeken
-meekhearted
-meekheartedness
-meekling
-meekly
-meekness
-Meekoceras
-Meeks
-meered
-meerkat
-meerschaum
-meese
-meet
-meetable
-meeten
-meeter
-meeterly
-meethelp
-meethelper
-meeting
-meetinger
-meetinghouse
-meetly
-meetness
-Meg
-megabar
-megacephalia
-megacephalic
-megacephaly
-megacerine
-Megaceros
-megacerotine
-Megachile
-megachilid
-Megachilidae
-Megachiroptera
-megachiropteran
-megachiropterous
-megacolon
-megacosm
-megacoulomb
-megacycle
-megadont
-Megadrili
-megadynamics
-megadyne
-Megaera
-megaerg
-megafarad
-megafog
-megagamete
-megagametophyte
-megajoule
-megakaryocyte
-Megalactractus
-Megaladapis
-Megalaema
-Megalaemidae
-Megalania
-megaleme
-Megalensian
-megalerg
-Megalesia
-Megalesian
-megalesthete
-megalethoscope
-Megalichthyidae
-Megalichthys
-megalith
-megalithic
-Megalobatrachus
-megaloblast
-megaloblastic
-megalocardia
-megalocarpous
-megalocephalia
-megalocephalic
-megalocephalous
-megalocephaly
-Megaloceros
-megalochirous
-megalocornea
-megalocyte
-megalocytosis
-megalodactylia
-megalodactylism
-megalodactylous
-Megalodon
-megalodont
-megalodontia
-Megalodontidae
-megaloenteron
-megalogastria
-megaloglossia
-megalograph
-megalography
-megalohepatia
-megalokaryocyte
-megalomania
-megalomaniac
-megalomaniacal
-megalomelia
-Megalonychidae
-Megalonyx
-megalopa
-megalopenis
-megalophonic
-megalophonous
-megalophthalmus
-megalopia
-megalopic
-Megalopidae
-Megalopinae
-megalopine
-megaloplastocyte
-megalopolis
-megalopolitan
-megalopolitanism
-megalopore
-megalops
-megalopsia
-Megaloptera
-Megalopyge
-Megalopygidae
-Megalornis
-Megalornithidae
-megalosaur
-megalosaurian
-Megalosauridae
-megalosauroid
-Megalosaurus
-megaloscope
-megaloscopy
-megalosphere
-megalospheric
-megalosplenia
-megalosyndactyly
-megaloureter
-Megaluridae
-Megamastictora
-megamastictoral
-megamere
-megameter
-megampere
-Meganeura
-Meganthropus
-meganucleus
-megaparsec
-megaphone
-megaphonic
-megaphotographic
-megaphotography
-megaphyllous
-Megaphyton
-megapod
-megapode
-Megapodidae
-Megapodiidae
-Megapodius
-megaprosopous
-Megaptera
-Megapterinae
-megapterine
-Megarensian
-Megarhinus
-Megarhyssa
-Megarian
-Megarianism
-Megaric
-megaron
-megasclere
-megascleric
-megasclerous
-megasclerum
-megascope
-megascopic
-megascopical
-megascopically
-megaseism
-megaseismic
-megaseme
-Megasoma
-megasporange
-megasporangium
-megaspore
-megasporic
-megasporophyll
-megasynthetic
-megathere
-megatherian
-Megatheriidae
-megatherine
-megatherioid
-Megatherium
-megatherm
-megathermic
-megatheroid
-megaton
-megatype
-megatypy
-megavolt
-megawatt
-megaweber
-megazooid
-megazoospore
-megerg
-Meggy
-megilp
-megmho
-megohm
-megohmit
-megohmmeter
-megophthalmus
-megotalc
-Megrel
-Megrez
-megrim
-megrimish
-mehalla
-mehari
-meharist
-Mehelya
-mehmandar
-Mehrdad
-mehtar
-mehtarship
-Meibomia
-Meibomian
-meile
-mein
-meinie
-meio
-meiobar
-meionite
-meiophylly
-meiosis
-meiotaxy
-meiotic
-Meissa
-Meistersinger
-meith
-Meithei
-meizoseismal
-meizoseismic
-mejorana
-Mekbuda
-Mekhitarist
-mekometer
-mel
-mela
-melaconite
-melada
-meladiorite
-melagabbro
-melagra
-melagranite
-Melaleuca
-melalgia
-melam
-melamed
-melamine
-melampodium
-Melampsora
-Melampsoraceae
-Melampus
-melampyritol
-Melampyrum
-melanagogal
-melanagogue
-melancholia
-melancholiac
-melancholic
-melancholically
-melancholily
-melancholiness
-melancholious
-melancholiously
-melancholiousness
-melancholish
-melancholist
-melancholize
-melancholomaniac
-melancholy
-melancholyish
-Melanchthonian
-Melanconiaceae
-melanconiaceous
-Melanconiales
-Melanconium
-melanemia
-melanemic
-Melanesian
-melange
-melanger
-melangeur
-Melania
-melanian
-melanic
-melaniferous
-Melaniidae
-melanilin
-melaniline
-melanin
-Melanippe
-Melanippus
-melanism
-melanistic
-melanite
-melanitic
-melanize
-melano
-melanoblast
-melanocarcinoma
-melanocerite
-Melanochroi
-Melanochroid
-melanochroite
-melanochroous
-melanocomous
-melanocrate
-melanocratic
-melanocyte
-Melanodendron
-melanoderma
-melanodermia
-melanodermic
-Melanogaster
-melanogen
-Melanoi
-melanoid
-melanoidin
-melanoma
-melanopathia
-melanopathy
-melanophore
-melanoplakia
-Melanoplus
-melanorrhagia
-melanorrhea
-Melanorrhoea
-melanosarcoma
-melanosarcomatosis
-melanoscope
-melanose
-melanosed
-melanosis
-melanosity
-melanospermous
-melanotekite
-melanotic
-melanotrichous
-melanous
-melanterite
-Melanthaceae
-melanthaceous
-Melanthium
-melanure
-melanuresis
-melanuria
-melanuric
-melaphyre
-Melas
-melasma
-melasmic
-melassigenic
-Melastoma
-Melastomaceae
-melastomaceous
-melastomad
-melatope
-melaxuma
-Melburnian
-Melcarth
-melch
-Melchite
-Melchora
-meld
-melder
-meldometer
-meldrop
-mele
-Meleager
-Meleagridae
-Meleagrina
-Meleagrinae
-meleagrine
-Meleagris
-melebiose
-melee
-melena
-melene
-melenic
-Meles
-Meletian
-Meletski
-melezitase
-melezitose
-Melia
-Meliaceae
-meliaceous
-Meliadus
-Melian
-Melianthaceae
-melianthaceous
-Melianthus
-meliatin
-melibiose
-melic
-Melica
-Melicent
-melicera
-meliceric
-meliceris
-melicerous
-Melicerta
-Melicertidae
-melichrous
-melicitose
-Melicocca
-melicraton
-melilite
-melilitite
-melilot
-Melilotus
-Melinae
-Melinda
-meline
-Melinis
-melinite
-Meliola
-meliorability
-meliorable
-meliorant
-meliorate
-meliorater
-melioration
-meliorative
-meliorator
-meliorism
-meliorist
-melioristic
-meliority
-meliphagan
-Meliphagidae
-meliphagidan
-meliphagous
-meliphanite
-Melipona
-Meliponinae
-meliponine
-melisma
-melismatic
-melismatics
-Melissa
-melissyl
-melissylic
-Melitaea
-melitemia
-melithemia
-melitis
-melitose
-melitriose
-melittologist
-melittology
-melituria
-melituric
-mell
-mellaginous
-mellate
-mellay
-melleous
-meller
-Mellifera
-melliferous
-mellificate
-mellification
-mellifluence
-mellifluent
-mellifluently
-mellifluous
-mellifluously
-mellifluousness
-mellimide
-mellisonant
-mellisugent
-mellit
-mellitate
-mellite
-mellitic
-Mellivora
-Mellivorinae
-mellivorous
-mellon
-mellonides
-mellophone
-mellow
-mellowly
-mellowness
-mellowy
-mellsman
-Melocactus
-melocoton
-melodeon
-melodia
-melodial
-melodially
-melodic
-melodica
-melodically
-melodicon
-melodics
-melodiograph
-melodion
-melodious
-melodiously
-melodiousness
-melodism
-melodist
-melodize
-melodizer
-melodram
-melodrama
-melodramatic
-melodramatical
-melodramatically
-melodramaticism
-melodramatics
-melodramatist
-melodramatize
-melodrame
-melody
-melodyless
-meloe
-melogram
-Melogrammataceae
-melograph
-melographic
-meloid
-Meloidae
-melologue
-Melolontha
-Melolonthidae
-melolonthidan
-Melolonthides
-Melolonthinae
-melolonthine
-melomane
-melomania
-melomaniac
-melomanic
-melon
-meloncus
-Melonechinus
-melongena
-melongrower
-melonist
-melonite
-Melonites
-melonlike
-melonmonger
-melonry
-melophone
-melophonic
-melophonist
-melopiano
-meloplast
-meloplastic
-meloplasty
-melopoeia
-melopoeic
-melos
-melosa
-Melospiza
-Melothria
-melotragedy
-melotragic
-melotrope
-melt
-meltability
-meltable
-meltage
-melted
-meltedness
-melteigite
-melter
-melters
-melting
-meltingly
-meltingness
-melton
-Meltonian
-Melungeon
-Melursus
-mem
-member
-membered
-memberless
-membership
-membracid
-Membracidae
-membracine
-membral
-membrally
-membrana
-membranaceous
-membranaceously
-membranate
-membrane
-membraned
-membraneless
-membranelike
-membranelle
-membraneous
-membraniferous
-membraniform
-membranin
-Membranipora
-Membraniporidae
-membranocalcareous
-membranocartilaginous
-membranocoriaceous
-membranocorneous
-membranogenic
-membranoid
-membranology
-membranonervous
-membranosis
-membranous
-membranously
-membranula
-membranule
-membretto
-memento
-meminna
-Memnon
-Memnonian
-Memnonium
-memo
-memoir
-memoirism
-memoirist
-memorabilia
-memorability
-memorable
-memorableness
-memorably
-memoranda
-memorandist
-memorandize
-memorandum
-memorative
-memoria
-memorial
-memorialist
-memorialization
-memorialize
-memorializer
-memorially
-memoried
-memorious
-memorist
-memorizable
-memorization
-memorize
-memorizer
-memory
-memoryless
-Memphian
-Memphite
-men
-menaccanite
-menaccanitic
-menace
-menaceable
-menaceful
-menacement
-menacer
-menacing
-menacingly
-menacme
-menadione
-menage
-menagerie
-menagerist
-menald
-Menangkabau
-menarche
-Menaspis
-mend
-mendable
-mendacious
-mendaciously
-mendaciousness
-mendacity
-Mendaite
-Mende
-mendee
-Mendelian
-Mendelianism
-Mendelianist
-Mendelism
-Mendelist
-Mendelize
-Mendelssohnian
-Mendelssohnic
-mendelyeevite
-mender
-Mendi
-mendicancy
-mendicant
-mendicate
-mendication
-mendicity
-mending
-mendipite
-mendole
-mendozite
-mends
-meneghinite
-menfolk
-Menfra
-meng
-Mengwe
-menhaden
-menhir
-menial
-menialism
-meniality
-menially
-Menic
-menilite
-meningeal
-meninges
-meningic
-meningina
-meningism
-meningitic
-meningitis
-meningocele
-meningocephalitis
-meningocerebritis
-meningococcal
-meningococcemia
-meningococcic
-meningococcus
-meningocortical
-meningoencephalitis
-meningoencephalocele
-meningomalacia
-meningomyclitic
-meningomyelitis
-meningomyelocele
-meningomyelorrhaphy
-meningorachidian
-meningoradicular
-meningorhachidian
-meningorrhagia
-meningorrhea
-meningorrhoea
-meningosis
-meningospinal
-meningotyphoid
-meninting
-meninx
-meniscal
-meniscate
-menisciform
-meniscitis
-meniscoid
-meniscoidal
-Meniscotheriidae
-Meniscotherium
-meniscus
-menisperm
-Menispermaceae
-menispermaceous
-menispermine
-Menispermum
-Menkalinan
-Menkar
-Menkib
-menkind
-mennom
-Mennonist
-Mennonite
-Menobranchidae
-Menobranchus
-menognath
-menognathous
-menologium
-menology
-menometastasis
-Menominee
-menopausal
-menopause
-menopausic
-menophania
-menoplania
-Menopoma
-Menorah
-Menorhyncha
-menorhynchous
-menorrhagia
-menorrhagic
-menorrhagy
-menorrhea
-menorrheic
-menorrhoea
-menorrhoeic
-menoschesis
-menoschetic
-menosepsis
-menostasia
-menostasis
-menostatic
-menostaxis
-Menotyphla
-menotyphlic
-menoxenia
-mensa
-mensal
-mensalize
-mense
-menseful
-menseless
-menses
-Menshevik
-Menshevism
-Menshevist
-mensk
-menstrual
-menstruant
-menstruate
-menstruation
-menstruous
-menstruousness
-menstruum
-mensual
-mensurability
-mensurable
-mensurableness
-mensurably
-mensural
-mensuralist
-mensurate
-mensuration
-mensurational
-mensurative
-Ment
-mentagra
-mental
-mentalis
-mentalism
-mentalist
-mentalistic
-mentality
-mentalization
-mentalize
-mentally
-mentary
-mentation
-Mentha
-Menthaceae
-menthaceous
-menthadiene
-menthane
-menthene
-menthenol
-menthenone
-menthol
-mentholated
-menthone
-menthyl
-menticide
-menticultural
-menticulture
-mentiferous
-mentiform
-mentigerous
-mentimeter
-mentimutation
-mention
-mentionability
-mentionable
-mentionless
-mentoanterior
-mentobregmatic
-mentocondylial
-mentohyoid
-mentolabial
-mentomeckelian
-mentonniere
-mentoposterior
-mentor
-mentorial
-mentorism
-mentorship
-mentum
-Mentzelia
-menu
-Menura
-Menurae
-Menuridae
-meny
-Menyanthaceae
-Menyanthaceous
-Menyanthes
-menyie
-menzie
-Menziesia
-Meo
-Mephisto
-Mephistophelean
-Mephistopheleanly
-Mephistopheles
-Mephistophelic
-Mephistophelistic
-mephitic
-mephitical
-Mephitinae
-mephitine
-mephitis
-mephitism
-Mer
-Merak
-meralgia
-meraline
-Merat
-Meratia
-merbaby
-mercal
-mercantile
-mercantilely
-mercantilism
-mercantilist
-mercantilistic
-mercantility
-mercaptal
-mercaptan
-mercaptides
-mercaptids
-mercapto
-mercaptol
-mercaptole
-Mercator
-Mercatorial
-mercatorial
-Mercedarian
-Mercedes
-Mercedinus
-Mercedonius
-mercenarily
-mercenariness
-mercenary
-mercer
-merceress
-mercerization
-mercerize
-mercerizer
-mercership
-mercery
-merch
-merchandisable
-merchandise
-merchandiser
-merchant
-merchantable
-merchantableness
-merchanter
-merchanthood
-merchantish
-merchantlike
-merchantly
-merchantman
-merchantry
-merchantship
-merchet
-Mercian
-merciful
-mercifully
-mercifulness
-merciless
-mercilessly
-mercilessness
-merciment
-mercurate
-mercuration
-Mercurean
-mercurial
-Mercurialis
-mercurialism
-mercuriality
-mercurialization
-mercurialize
-mercurially
-mercurialness
-mercuriamines
-mercuriammonium
-Mercurian
-mercuriate
-mercuric
-mercuride
-mercurification
-mercurify
-Mercurius
-mercurization
-mercurize
-Mercurochrome
-mercurophen
-mercurous
-Mercury
-mercy
-mercyproof
-merdivorous
-mere
-Meredithian
-merel
-merely
-merenchyma
-merenchymatous
-meresman
-merestone
-meretricious
-meretriciously
-meretriciousness
-meretrix
-merfold
-merfolk
-merganser
-merge
-mergence
-merger
-mergh
-Merginae
-Mergulus
-Mergus
-meriah
-mericarp
-merice
-Merida
-meridian
-Meridion
-Meridionaceae
-Meridional
-meridional
-meridionality
-meridionally
-meril
-meringue
-meringued
-Merino
-Meriones
-meriquinoid
-meriquinoidal
-meriquinone
-meriquinonic
-meriquinonoid
-merism
-merismatic
-merismoid
-merist
-meristele
-meristelic
-meristem
-meristematic
-meristematically
-meristic
-meristically
-meristogenous
-merit
-meritable
-merited
-meritedly
-meriter
-meritful
-meritless
-meritmonger
-meritmongering
-meritmongery
-meritorious
-meritoriously
-meritoriousness
-merk
-merkhet
-merkin
-merl
-merle
-merlette
-merlin
-merlon
-Merlucciidae
-Merluccius
-mermaid
-mermaiden
-merman
-Mermis
-mermithaner
-mermithergate
-Mermithidae
-mermithization
-mermithized
-mermithogyne
-Mermnad
-Mermnadae
-mermother
-mero
-meroblastic
-meroblastically
-merocele
-merocelic
-merocerite
-meroceritic
-merocrystalline
-merocyte
-Merodach
-merogamy
-merogastrula
-merogenesis
-merogenetic
-merogenic
-merognathite
-merogonic
-merogony
-merohedral
-merohedric
-merohedrism
-meroistic
-Meroitic
-meromorphic
-Meromyaria
-meromyarian
-merop
-Merope
-Meropes
-meropia
-Meropidae
-meropidan
-meroplankton
-meroplanktonic
-meropodite
-meropoditic
-Merops
-merorganization
-merorganize
-meros
-merosomal
-Merosomata
-merosomatous
-merosome
-merosthenic
-Merostomata
-merostomatous
-merostome
-merostomous
-merosymmetrical
-merosymmetry
-merosystematic
-merotomize
-merotomy
-merotropism
-merotropy
-Merovingian
-meroxene
-Merozoa
-merozoite
-merpeople
-merribauks
-merribush
-Merril
-merriless
-merrily
-merriment
-merriness
-merrow
-merry
-merrymake
-merrymaker
-merrymaking
-merryman
-merrymeeting
-merrythought
-merrytrotter
-merrywing
-merse
-Mertensia
-Merton
-Merula
-meruline
-merulioid
-Merulius
-merveileux
-merwinite
-merwoman
-Merychippus
-merycism
-merycismus
-Merycoidodon
-Merycoidodontidae
-Merycopotamidae
-Merycopotamus
-Mes
-mesa
-mesabite
-mesaconate
-mesaconic
-mesad
-Mesadenia
-mesadenia
-mesail
-mesal
-mesalike
-mesally
-mesameboid
-mesange
-mesaortitis
-mesaraic
-mesaraical
-mesarch
-mesarteritic
-mesarteritis
-Mesartim
-mesaticephal
-mesaticephali
-mesaticephalic
-mesaticephalism
-mesaticephalous
-mesaticephaly
-mesatipellic
-mesatipelvic
-mesatiskelic
-mesaxonic
-mescal
-Mescalero
-mescaline
-mescalism
-mesdames
-mese
-mesectoderm
-mesem
-Mesembryanthemaceae
-Mesembryanthemum
-mesembryo
-mesembryonic
-mesencephalic
-mesencephalon
-mesenchyma
-mesenchymal
-mesenchymatal
-mesenchymatic
-mesenchymatous
-mesenchyme
-mesendoderm
-mesenna
-mesenterial
-mesenteric
-mesenterical
-mesenterically
-mesenteriform
-mesenteriolum
-mesenteritic
-mesenteritis
-mesenteron
-mesenteronic
-mesentery
-mesentoderm
-mesepimeral
-mesepimeron
-mesepisternal
-mesepisternum
-mesepithelial
-mesepithelium
-mesethmoid
-mesethmoidal
-mesh
-Meshech
-meshed
-meshrabiyeh
-meshwork
-meshy
-mesiad
-mesial
-mesially
-mesian
-mesic
-mesically
-mesilla
-mesiobuccal
-mesiocervical
-mesioclusion
-mesiodistal
-mesiodistally
-mesiogingival
-mesioincisal
-mesiolabial
-mesiolingual
-mesion
-mesioocclusal
-mesiopulpal
-mesioversion
-Mesitae
-Mesites
-Mesitidae
-mesitite
-mesityl
-mesitylene
-mesitylenic
-mesmerian
-mesmeric
-mesmerical
-mesmerically
-mesmerism
-mesmerist
-mesmerite
-mesmerizability
-mesmerizable
-mesmerization
-mesmerize
-mesmerizee
-mesmerizer
-mesmeromania
-mesmeromaniac
-mesnality
-mesnalty
-mesne
-meso
-mesoappendicitis
-mesoappendix
-mesoarial
-mesoarium
-mesobar
-mesobenthos
-mesoblast
-mesoblastema
-mesoblastemic
-mesoblastic
-mesobranchial
-mesobregmate
-mesocaecal
-mesocaecum
-mesocardia
-mesocardium
-mesocarp
-mesocentrous
-mesocephal
-mesocephalic
-mesocephalism
-mesocephalon
-mesocephalous
-mesocephaly
-mesochilium
-mesochondrium
-mesochroic
-mesocoele
-mesocoelian
-mesocoelic
-mesocolic
-mesocolon
-mesocoracoid
-mesocranial
-mesocratic
-mesocuneiform
-mesode
-mesoderm
-mesodermal
-mesodermic
-Mesodesma
-Mesodesmatidae
-Mesodesmidae
-Mesodevonian
-Mesodevonic
-mesodic
-mesodisilicic
-mesodont
-Mesoenatides
-mesofurca
-mesofurcal
-mesogaster
-mesogastral
-mesogastric
-mesogastrium
-mesogloea
-mesogloeal
-mesognathic
-mesognathion
-mesognathism
-mesognathous
-mesognathy
-mesogyrate
-mesohepar
-Mesohippus
-mesokurtic
-mesolabe
-mesole
-mesolecithal
-mesolimnion
-mesolite
-mesolithic
-mesologic
-mesological
-mesology
-mesomere
-mesomeric
-mesomerism
-mesometral
-mesometric
-mesometrium
-mesomorph
-mesomorphic
-mesomorphous
-mesomorphy
-Mesomyodi
-mesomyodian
-mesomyodous
-meson
-mesonasal
-Mesonemertini
-mesonephric
-mesonephridium
-mesonephritic
-mesonephros
-mesonic
-mesonotal
-mesonotum
-Mesonychidae
-Mesonyx
-mesoparapteral
-mesoparapteron
-mesopectus
-mesoperiodic
-mesopetalum
-mesophile
-mesophilic
-mesophilous
-mesophragm
-mesophragma
-mesophragmal
-mesophryon
-mesophyll
-mesophyllous
-mesophyllum
-mesophyte
-mesophytic
-mesophytism
-mesopic
-mesoplankton
-mesoplanktonic
-mesoplast
-mesoplastic
-mesoplastral
-mesoplastron
-mesopleural
-mesopleuron
-Mesoplodon
-mesoplodont
-mesopodial
-mesopodiale
-mesopodium
-mesopotamia
-Mesopotamian
-mesopotamic
-mesoprescutal
-mesoprescutum
-mesoprosopic
-mesopterygial
-mesopterygium
-mesopterygoid
-mesorchial
-mesorchium
-Mesore
-mesorectal
-mesorectum
-Mesoreodon
-mesorrhin
-mesorrhinal
-mesorrhinian
-mesorrhinism
-mesorrhinium
-mesorrhiny
-mesosalpinx
-mesosaur
-Mesosauria
-Mesosaurus
-mesoscapula
-mesoscapular
-mesoscutal
-mesoscutellar
-mesoscutellum
-mesoscutum
-mesoseismal
-mesoseme
-mesosiderite
-mesosigmoid
-mesoskelic
-mesosoma
-mesosomatic
-mesosome
-mesosperm
-mesospore
-mesosporic
-mesosporium
-mesostasis
-mesosternal
-mesosternebra
-mesosternebral
-mesosternum
-mesostethium
-Mesostoma
-Mesostomatidae
-mesostomid
-mesostyle
-mesostylous
-Mesosuchia
-mesosuchian
-Mesotaeniaceae
-Mesotaeniales
-mesotarsal
-mesotartaric
-Mesothelae
-mesothelial
-mesothelium
-mesotherm
-mesothermal
-mesothesis
-mesothet
-mesothetic
-mesothetical
-mesothoracic
-mesothoracotheca
-mesothorax
-mesothorium
-mesotonic
-mesotroch
-mesotrocha
-mesotrochal
-mesotrochous
-mesotron
-mesotropic
-mesotympanic
-mesotype
-mesovarian
-mesovarium
-mesoventral
-mesoventrally
-mesoxalate
-mesoxalic
-mesoxalyl
-Mesozoa
-mesozoan
-Mesozoic
-mespil
-Mespilus
-Mespot
-mesquite
-Mesropian
-mess
-message
-messagery
-Messalian
-messaline
-messan
-Messapian
-messe
-messelite
-messenger
-messengership
-messer
-messet
-Messiah
-Messiahship
-Messianic
-Messianically
-messianically
-Messianism
-Messianist
-Messianize
-Messias
-messieurs
-messily
-messin
-Messines
-Messinese
-messiness
-messing
-messman
-messmate
-messor
-messroom
-messrs
-messtin
-messuage
-messy
-mestee
-mester
-mestiza
-mestizo
-mestome
-Mesua
-Mesvinian
-mesymnion
-met
-meta
-metabasis
-metabasite
-metabatic
-metabiological
-metabiology
-metabiosis
-metabiotic
-metabiotically
-metabismuthic
-metabisulphite
-metabletic
-Metabola
-metabola
-metabole
-Metabolia
-metabolian
-metabolic
-metabolism
-metabolite
-metabolizable
-metabolize
-metabolon
-metabolous
-metaboly
-metaborate
-metaboric
-metabranchial
-metabrushite
-metabular
-metacarpal
-metacarpale
-metacarpophalangeal
-metacarpus
-metacenter
-metacentral
-metacentric
-metacentricity
-metachemic
-metachemistry
-Metachlamydeae
-metachlamydeous
-metachromasis
-metachromatic
-metachromatin
-metachromatinic
-metachromatism
-metachrome
-metachronism
-metachrosis
-metacinnabarite
-metacism
-metacismus
-metaclase
-metacneme
-metacoele
-metacoelia
-metaconal
-metacone
-metaconid
-metaconule
-metacoracoid
-metacrasis
-metacresol
-metacromial
-metacromion
-metacryst
-metacyclic
-metacymene
-metad
-metadiabase
-metadiazine
-metadiorite
-metadiscoidal
-metadromous
-metafluidal
-metaformaldehyde
-metafulminuric
-metagalactic
-metagalaxy
-metagaster
-metagastric
-metagastrula
-metage
-Metageitnion
-metagelatin
-metagenesis
-metagenetic
-metagenetically
-metagenic
-metageometer
-metageometrical
-metageometry
-metagnath
-metagnathism
-metagnathous
-metagnomy
-metagnostic
-metagnosticism
-metagram
-metagrammatism
-metagrammatize
-metagraphic
-metagraphy
-metahewettite
-metahydroxide
-metaigneous
-metainfective
-metakinesis
-metakinetic
-metal
-metalammonium
-metalanguage
-metalbumin
-metalcraft
-metaldehyde
-metalepsis
-metaleptic
-metaleptical
-metaleptically
-metaler
-metaline
-metalined
-metaling
-metalinguistic
-metalinguistics
-metalism
-metalist
-metalization
-metalize
-metallary
-metalleity
-metallic
-metallical
-metallically
-metallicity
-metallicize
-metallicly
-metallics
-metallide
-metallifacture
-metalliferous
-metallification
-metalliform
-metallify
-metallik
-metalline
-metallism
-metallization
-metallize
-metallochrome
-metallochromy
-metallogenetic
-metallogenic
-metallogeny
-metallograph
-metallographer
-metallographic
-metallographical
-metallographist
-metallography
-metalloid
-metalloidal
-metallometer
-metallophone
-metalloplastic
-metallorganic
-metallotherapeutic
-metallotherapy
-metallurgic
-metallurgical
-metallurgically
-metallurgist
-metallurgy
-metalmonger
-metalogic
-metalogical
-metaloph
-metalorganic
-metaloscope
-metaloscopy
-metaluminate
-metaluminic
-metalware
-metalwork
-metalworker
-metalworking
-metalworks
-metamathematical
-metamathematics
-metamer
-metameral
-metamere
-metameric
-metamerically
-metameride
-metamerism
-metamerization
-metamerized
-metamerous
-metamery
-metamorphic
-metamorphism
-metamorphize
-metamorphopsia
-metamorphopsy
-metamorphosable
-metamorphose
-metamorphoser
-metamorphoses
-metamorphosian
-metamorphosic
-metamorphosical
-metamorphosis
-metamorphostical
-metamorphotic
-metamorphous
-metamorphy
-Metamynodon
-metanalysis
-metanauplius
-Metanemertini
-metanephric
-metanephritic
-metanephron
-metanephros
-metanepionic
-metanilic
-metanitroaniline
-metanomen
-metanotal
-metanotum
-metantimonate
-metantimonic
-metantimonious
-metantimonite
-metantimonous
-metanym
-metaorganism
-metaparapteral
-metaparapteron
-metapectic
-metapectus
-metapepsis
-metapeptone
-metaperiodic
-metaphase
-metaphenomenal
-metaphenomenon
-metaphenylene
-metaphenylenediamin
-metaphenylenediamine
-metaphloem
-metaphonical
-metaphonize
-metaphony
-metaphor
-metaphoric
-metaphorical
-metaphorically
-metaphoricalness
-metaphorist
-metaphorize
-metaphosphate
-metaphosphoric
-metaphosphorous
-metaphragm
-metaphragmal
-metaphrase
-metaphrasis
-metaphrast
-metaphrastic
-metaphrastical
-metaphrastically
-metaphyseal
-metaphysic
-metaphysical
-metaphysically
-metaphysician
-metaphysicianism
-metaphysicist
-metaphysicize
-metaphysicous
-metaphysics
-metaphysis
-metaphyte
-metaphytic
-metaphyton
-metaplasia
-metaplasis
-metaplasm
-metaplasmic
-metaplast
-metaplastic
-metapleural
-metapleure
-metapleuron
-metaplumbate
-metaplumbic
-metapneumonic
-metapneustic
-metapodial
-metapodiale
-metapodium
-metapolitic
-metapolitical
-metapolitician
-metapolitics
-metapophyseal
-metapophysial
-metapophysis
-metapore
-metapostscutellar
-metapostscutellum
-metaprescutal
-metaprescutum
-metaprotein
-metapsychic
-metapsychical
-metapsychics
-metapsychism
-metapsychist
-metapsychological
-metapsychology
-metapsychosis
-metapterygial
-metapterygium
-metapterygoid
-metarabic
-metarhyolite
-metarossite
-metarsenic
-metarsenious
-metarsenite
-metasaccharinic
-metascutal
-metascutellar
-metascutellum
-metascutum
-metasedimentary
-metasilicate
-metasilicic
-metasoma
-metasomal
-metasomasis
-metasomatic
-metasomatism
-metasomatosis
-metasome
-metasperm
-Metaspermae
-metaspermic
-metaspermous
-metastability
-metastable
-metastannate
-metastannic
-metastasis
-metastasize
-metastatic
-metastatical
-metastatically
-metasternal
-metasternum
-metasthenic
-metastibnite
-metastigmate
-metastoma
-metastome
-metastrophe
-metastrophic
-metastyle
-metatantalic
-metatarsal
-metatarsale
-metatarse
-metatarsophalangeal
-metatarsus
-metatatic
-metatatically
-metataxic
-metate
-metathalamus
-metatheology
-Metatheria
-metatherian
-metatheses
-metathesis
-metathetic
-metathetical
-metathetically
-metathoracic
-metathorax
-metatitanate
-metatitanic
-metatoluic
-metatoluidine
-metatracheal
-metatrophic
-metatungstic
-metatype
-metatypic
-Metaurus
-metavanadate
-metavanadic
-metavauxite
-metavoltine
-metaxenia
-metaxite
-metaxylem
-metaxylene
-metayer
-Metazoa
-metazoal
-metazoan
-metazoea
-metazoic
-metazoon
-mete
-metel
-metempiric
-metempirical
-metempirically
-metempiricism
-metempiricist
-metempirics
-metempsychic
-metempsychosal
-metempsychose
-metempsychoses
-metempsychosical
-metempsychosis
-metempsychosize
-metemptosis
-metencephalic
-metencephalon
-metensarcosis
-metensomatosis
-metenteron
-metenteronic
-meteogram
-meteograph
-meteor
-meteorgraph
-meteoric
-meteorical
-meteorically
-meteorism
-meteorist
-meteoristic
-meteorital
-meteorite
-meteoritic
-meteoritics
-meteorization
-meteorize
-meteorlike
-meteorogram
-meteorograph
-meteorographic
-meteorography
-meteoroid
-meteoroidal
-meteorolite
-meteorolitic
-meteorologic
-meteorological
-meteorologically
-meteorologist
-meteorology
-meteorometer
-meteoroscope
-meteoroscopy
-meteorous
-metepencephalic
-metepencephalon
-metepimeral
-metepimeron
-metepisternal
-metepisternum
-meter
-meterage
-metergram
-meterless
-meterman
-metership
-metestick
-metewand
-meteyard
-methacrylate
-methacrylic
-methadone
-methanal
-methanate
-methane
-methanoic
-methanolysis
-methanometer
-metheglin
-methemoglobin
-methemoglobinemia
-methemoglobinuria
-methenamine
-methene
-methenyl
-mether
-methid
-methide
-methine
-methinks
-methiodide
-methionic
-methionine
-methobromide
-method
-methodaster
-methodeutic
-methodic
-methodical
-methodically
-methodicalness
-methodics
-methodism
-Methodist
-methodist
-Methodistic
-Methodistically
-Methodisty
-methodization
-Methodize
-methodize
-methodizer
-methodless
-methodological
-methodologically
-methodologist
-methodology
-Methody
-methought
-methoxide
-methoxychlor
-methoxyl
-methronic
-Methuselah
-methyl
-methylacetanilide
-methylal
-methylamine
-methylaniline
-methylanthracene
-methylate
-methylation
-methylator
-methylcholanthrene
-methylene
-methylenimine
-methylenitan
-methylethylacetic
-methylglycine
-methylglycocoll
-methylglyoxal
-methylic
-methylmalonic
-methylnaphthalene
-methylol
-methylolurea
-methylosis
-methylotic
-methylpentose
-methylpentoses
-methylpropane
-methylsulfanol
-metic
-meticulosity
-meticulous
-meticulously
-meticulousness
-metier
-Metin
-metis
-Metoac
-metochous
-metochy
-metoestrous
-metoestrum
-Metol
-metonym
-metonymic
-metonymical
-metonymically
-metonymous
-metonymously
-metonymy
-metope
-Metopias
-metopic
-metopion
-metopism
-Metopoceros
-metopomancy
-metopon
-metoposcopic
-metoposcopical
-metoposcopist
-metoposcopy
-metosteal
-metosteon
-metoxazine
-metoxenous
-metoxeny
-metra
-metralgia
-metranate
-metranemia
-metratonia
-Metrazol
-metrectasia
-metrectatic
-metrectomy
-metrectopia
-metrectopic
-metrectopy
-metreless
-metreship
-metreta
-metrete
-metretes
-metria
-metric
-metrical
-metrically
-metrician
-metricism
-metricist
-metricize
-metrics
-Metridium
-metrification
-metrifier
-metrify
-metriocephalic
-metrist
-metritis
-metrocampsis
-metrocarat
-metrocarcinoma
-metrocele
-metroclyst
-metrocolpocele
-metrocracy
-metrocratic
-metrocystosis
-metrodynia
-metrofibroma
-metrological
-metrologist
-metrologue
-metrology
-metrolymphangitis
-metromalacia
-metromalacoma
-metromalacosis
-metromania
-metromaniac
-metromaniacal
-metrometer
-metroneuria
-metronome
-metronomic
-metronomical
-metronomically
-metronymic
-metronymy
-metroparalysis
-metropathia
-metropathic
-metropathy
-metroperitonitis
-metrophlebitis
-metrophotography
-metropole
-metropolis
-metropolitan
-metropolitanate
-metropolitancy
-metropolitanism
-metropolitanize
-metropolitanship
-metropolite
-metropolitic
-metropolitical
-metropolitically
-metroptosia
-metroptosis
-metroradioscope
-metrorrhagia
-metrorrhagic
-metrorrhea
-metrorrhexis
-metrorthosis
-metrosalpingitis
-metrosalpinx
-metroscirrhus
-metroscope
-metroscopy
-Metrosideros
-metrostaxis
-metrostenosis
-metrosteresis
-metrostyle
-metrosynizesis
-metrotherapist
-metrotherapy
-metrotome
-metrotomy
-Metroxylon
-mettar
-mettle
-mettled
-mettlesome
-mettlesomely
-mettlesomeness
-metusia
-metze
-Meum
-meuse
-meute
-Mev
-mew
-meward
-mewer
-mewl
-mewler
-Mexica
-Mexican
-Mexicanize
-Mexitl
-Mexitli
-meyerhofferite
-mezcal
-Mezentian
-Mezentism
-Mezentius
-mezereon
-mezereum
-mezuzah
-mezzanine
-mezzo
-mezzograph
-mezzotint
-mezzotinter
-mezzotinto
-mho
-mhometer
-mi
-Miami
-miamia
-mian
-Miao
-Miaotse
-Miaotze
-miaow
-miaower
-Miaplacidus
-miargyrite
-miarolitic
-mias
-miaskite
-miasm
-miasma
-miasmal
-miasmata
-miasmatic
-miasmatical
-miasmatically
-miasmatize
-miasmatology
-miasmatous
-miasmic
-miasmology
-miasmous
-Miastor
-miaul
-miauler
-mib
-mica
-micaceous
-micacious
-micacite
-Micah
-micasization
-micasize
-micate
-mication
-Micawberish
-Micawberism
-mice
-micellar
-micelle
-Michabo
-Michabou
-Michael
-Michaelites
-Michaelmas
-Michaelmastide
-miche
-Micheal
-Michel
-Michelangelesque
-Michelangelism
-Michelia
-Michelle
-micher
-Michiel
-Michigamea
-Michigan
-michigan
-Michigander
-Michiganite
-miching
-Michoacan
-Michoacano
-micht
-Mick
-mick
-Mickey
-mickle
-Micky
-Micmac
-mico
-miconcave
-Miconia
-micramock
-Micrampelis
-micranatomy
-micrander
-micrandrous
-micraner
-micranthropos
-Micraster
-micrencephalia
-micrencephalic
-micrencephalous
-micrencephalus
-micrencephaly
-micrergate
-micresthete
-micrify
-micro
-microammeter
-microampere
-microanalysis
-microanalyst
-microanalytical
-microangstrom
-microapparatus
-microbal
-microbalance
-microbar
-microbarograph
-microbattery
-microbe
-microbeless
-microbeproof
-microbial
-microbian
-microbic
-microbicidal
-microbicide
-microbiologic
-microbiological
-microbiologically
-microbiologist
-microbiology
-microbion
-microbiosis
-microbiota
-microbiotic
-microbious
-microbism
-microbium
-microblast
-microblepharia
-microblepharism
-microblephary
-microbrachia
-microbrachius
-microburet
-microburette
-microburner
-microcaltrop
-microcardia
-microcardius
-microcarpous
-Microcebus
-microcellular
-microcentrosome
-microcentrum
-microcephal
-microcephalia
-microcephalic
-microcephalism
-microcephalous
-microcephalus
-microcephaly
-microceratous
-microchaeta
-microcharacter
-microcheilia
-microcheiria
-microchemic
-microchemical
-microchemically
-microchemistry
-microchiria
-Microchiroptera
-microchiropteran
-microchiropterous
-microchromosome
-microchronometer
-microcinema
-microcinematograph
-microcinematographic
-microcinematography
-Microcitrus
-microclastic
-microclimate
-microclimatic
-microclimatologic
-microclimatological
-microclimatology
-microcline
-microcnemia
-microcoat
-micrococcal
-Micrococceae
-Micrococcus
-microcoleoptera
-microcolon
-microcolorimeter
-microcolorimetric
-microcolorimetrically
-microcolorimetry
-microcolumnar
-microcombustion
-microconidial
-microconidium
-microconjugant
-Microconodon
-microconstituent
-microcopy
-microcoria
-microcosm
-microcosmal
-microcosmian
-microcosmic
-microcosmical
-microcosmography
-microcosmology
-microcosmos
-microcosmus
-microcoulomb
-microcranous
-microcrith
-microcryptocrystalline
-microcrystal
-microcrystalline
-microcrystallogeny
-microcrystallography
-microcrystalloscopy
-microcurie
-Microcyprini
-microcyst
-microcyte
-microcythemia
-microcytosis
-microdactylia
-microdactylism
-microdactylous
-microdentism
-microdentous
-microdetection
-microdetector
-microdetermination
-microdiactine
-microdissection
-microdistillation
-microdont
-microdontism
-microdontous
-microdose
-microdrawing
-Microdrili
-microdrive
-microelectrode
-microelectrolysis
-microelectroscope
-microelement
-microerg
-microestimation
-microeutaxitic
-microevolution
-microexamination
-microfarad
-microfauna
-microfelsite
-microfelsitic
-microfilaria
-microfilm
-microflora
-microfluidal
-microfoliation
-microfossil
-microfungus
-microfurnace
-Microgadus
-microgalvanometer
-microgamete
-microgametocyte
-microgametophyte
-microgamy
-Microgaster
-microgastria
-Microgastrinae
-microgastrine
-microgeological
-microgeologist
-microgeology
-microgilbert
-microglia
-microglossia
-micrognathia
-micrognathic
-micrognathous
-microgonidial
-microgonidium
-microgram
-microgramme
-microgranite
-microgranitic
-microgranitoid
-microgranular
-microgranulitic
-micrograph
-micrographer
-micrographic
-micrographical
-micrographically
-micrographist
-micrography
-micrograver
-microgravimetric
-microgroove
-microgyne
-microgyria
-microhenry
-microhepatia
-microhistochemical
-microhistology
-microhm
-microhmmeter
-Microhymenoptera
-microhymenopteron
-microinjection
-microjoule
-microlepidopter
-microlepidoptera
-microlepidopteran
-microlepidopterist
-microlepidopteron
-microlepidopterous
-microleukoblast
-microlevel
-microlite
-microliter
-microlith
-microlithic
-microlitic
-micrologic
-micrological
-micrologically
-micrologist
-micrologue
-micrology
-microlux
-micromania
-micromaniac
-micromanipulation
-micromanipulator
-micromanometer
-Micromastictora
-micromazia
-micromeasurement
-micromechanics
-micromelia
-micromelic
-micromelus
-micromembrane
-micromeral
-micromere
-Micromeria
-micromeric
-micromerism
-micromeritic
-micromeritics
-micromesentery
-micrometallographer
-micrometallography
-micrometallurgy
-micrometer
-micromethod
-micrometrical
-micrometrically
-micrometry
-micromicrofarad
-micromicron
-micromil
-micromillimeter
-micromineralogical
-micromineralogy
-micromorph
-micromotion
-micromotoscope
-micromyelia
-micromyeloblast
-micron
-Micronesian
-micronization
-micronize
-micronometer
-micronuclear
-micronucleus
-micronutrient
-microorganic
-microorganism
-microorganismal
-micropaleontology
-micropantograph
-microparasite
-microparasitic
-micropathological
-micropathologist
-micropathology
-micropegmatite
-micropegmatitic
-micropenis
-microperthite
-microperthitic
-micropetalous
-micropetrography
-micropetrologist
-micropetrology
-microphage
-microphagocyte
-microphagous
-microphagy
-microphakia
-microphallus
-microphone
-microphonic
-microphonics
-microphonograph
-microphot
-microphotograph
-microphotographic
-microphotography
-microphotometer
-microphotoscope
-microphthalmia
-microphthalmic
-microphthalmos
-microphthalmus
-microphyllous
-microphysical
-microphysics
-microphysiography
-microphytal
-microphyte
-microphytic
-microphytology
-micropia
-micropin
-micropipette
-microplakite
-microplankton
-microplastocyte
-microplastometer
-micropodal
-Micropodi
-micropodia
-Micropodidae
-Micropodiformes
-micropoecilitic
-micropoicilitic
-micropoikilitic
-micropolariscope
-micropolarization
-micropore
-microporosity
-microporous
-microporphyritic
-microprint
-microprojector
-micropsia
-micropsy
-micropterism
-micropterous
-Micropterus
-micropterygid
-Micropterygidae
-micropterygious
-Micropterygoidea
-Micropteryx
-Micropus
-micropylar
-micropyle
-micropyrometer
-microradiometer
-microreaction
-microrefractometer
-microrhabdus
-microrheometer
-microrheometric
-microrheometrical
-Microrhopias
-Microsauria
-microsaurian
-microsclere
-microsclerous
-microsclerum
-microscopal
-microscope
-microscopial
-microscopic
-microscopical
-microscopically
-microscopics
-Microscopid
-microscopist
-Microscopium
-microscopize
-microscopy
-microsecond
-microsection
-microseism
-microseismic
-microseismical
-microseismograph
-microseismology
-microseismometer
-microseismometrograph
-microseismometry
-microseme
-microseptum
-microsmatic
-microsmatism
-microsoma
-microsomatous
-microsome
-microsomia
-microsommite
-Microsorex
-microspecies
-microspectroscope
-microspectroscopic
-microspectroscopy
-Microspermae
-microspermous
-Microsphaera
-microsphaeric
-microsphere
-microspheric
-microspherulitic
-microsplanchnic
-microsplenia
-microsplenic
-microsporange
-microsporangium
-microspore
-microsporiasis
-microsporic
-Microsporidia
-microsporidian
-Microsporon
-microsporophore
-microsporophyll
-microsporosis
-microsporous
-Microsporum
-microstat
-microsthene
-Microsthenes
-microsthenic
-microstomatous
-microstome
-microstomia
-microstomous
-microstructural
-microstructure
-Microstylis
-microstylospore
-microstylous
-microsublimation
-microtasimeter
-microtechnic
-microtechnique
-microtelephone
-microtelephonic
-Microthelyphonida
-microtheos
-microtherm
-microthermic
-microthorax
-Microthyriaceae
-microtia
-Microtinae
-microtine
-microtitration
-microtome
-microtomic
-microtomical
-microtomist
-microtomy
-microtone
-Microtus
-microtypal
-microtype
-microtypical
-microvolt
-microvolume
-microvolumetric
-microwatt
-microwave
-microweber
-microzoa
-microzoal
-microzoan
-microzoaria
-microzoarian
-microzoary
-microzoic
-microzone
-microzooid
-microzoology
-microzoon
-microzoospore
-microzyma
-microzyme
-microzymian
-micrurgic
-micrurgical
-micrurgist
-micrurgy
-Micrurus
-miction
-micturate
-micturition
-mid
-midafternoon
-midautumn
-midaxillary
-midbrain
-midday
-midden
-middenstead
-middle
-middlebreaker
-middlebuster
-middleman
-middlemanism
-middlemanship
-middlemost
-middler
-middlesplitter
-middlewards
-middleway
-middleweight
-middlewoman
-middling
-middlingish
-middlingly
-middlingness
-middlings
-middorsal
-middy
-mide
-Mider
-midevening
-midewiwin
-midfacial
-midforenoon
-midfrontal
-midge
-midget
-midgety
-midgy
-midheaven
-Midianite
-Midianitish
-Mididae
-midiron
-midland
-Midlander
-Midlandize
-midlandward
-midlatitude
-midleg
-midlenting
-midmain
-midmandibular
-midmonth
-midmonthly
-midmorn
-midmorning
-midmost
-midnight
-midnightly
-midnoon
-midparent
-midparentage
-midparental
-midpit
-midrange
-midrash
-midrashic
-midrib
-midribbed
-midriff
-mids
-midseason
-midsentence
-midship
-midshipman
-midshipmanship
-midshipmite
-midships
-midspace
-midst
-midstory
-midstout
-midstream
-midstreet
-midstroke
-midstyled
-midsummer
-midsummerish
-midsummery
-midtap
-midvein
-midverse
-midward
-midwatch
-midway
-midweek
-midweekly
-Midwest
-Midwestern
-Midwesterner
-midwestward
-midwife
-midwifery
-midwinter
-midwinterly
-midwintry
-midwise
-midyear
-Miek
-mien
-miersite
-Miescherian
-miff
-miffiness
-miffy
-mig
-might
-mightily
-mightiness
-mightless
-mightnt
-mighty
-mightyhearted
-mightyship
-miglio
-migmatite
-migniardise
-mignon
-mignonette
-mignonne
-mignonness
-Migonitis
-migraine
-migrainoid
-migrainous
-migrant
-migrate
-migration
-migrational
-migrationist
-migrative
-migrator
-migratorial
-migratory
-Miguel
-miharaite
-mihrab
-mijakite
-mijl
-mikado
-mikadoate
-mikadoism
-Mikael
-Mikania
-Mikasuki
-Mike
-mike
-Mikey
-Miki
-mikie
-Mikir
-Mil
-mil
-mila
-milady
-milammeter
-Milan
-Milanese
-Milanion
-milarite
-milch
-milcher
-milchy
-mild
-milden
-milder
-mildew
-mildewer
-mildewy
-mildhearted
-mildheartedness
-mildish
-mildly
-mildness
-Mildred
-mile
-mileage
-Miledh
-milepost
-miler
-Miles
-Milesian
-milesima
-Milesius
-milestone
-mileway
-milfoil
-milha
-miliaceous
-miliarensis
-miliaria
-miliarium
-miliary
-Milicent
-milieu
-Miliola
-milioliform
-milioline
-miliolite
-miliolitic
-militancy
-militant
-militantly
-militantness
-militarily
-militariness
-militarism
-militarist
-militaristic
-militaristically
-militarization
-militarize
-military
-militaryism
-militaryment
-militaster
-militate
-militation
-militia
-militiaman
-militiate
-milium
-milk
-milkbush
-milken
-milker
-milkeress
-milkfish
-milkgrass
-milkhouse
-milkily
-milkiness
-milking
-milkless
-milklike
-milkmaid
-milkman
-milkness
-milkshed
-milkshop
-milksick
-milksop
-milksopism
-milksoppery
-milksopping
-milksoppish
-milksoppy
-milkstone
-milkweed
-milkwood
-milkwort
-milky
-mill
-Milla
-milla
-millable
-millage
-millboard
-millclapper
-millcourse
-milldam
-mille
-milled
-millefiori
-milleflorous
-millefoliate
-millenarian
-millenarianism
-millenarist
-millenary
-millennia
-millennial
-millennialism
-millennialist
-millennially
-millennian
-millenniarism
-millenniary
-millennium
-millepede
-Millepora
-millepore
-milleporiform
-milleporine
-milleporite
-milleporous
-millepunctate
-miller
-milleress
-millering
-Millerism
-Millerite
-millerite
-millerole
-millesimal
-millesimally
-millet
-Millettia
-millfeed
-millful
-millhouse
-milliad
-milliammeter
-milliamp
-milliampere
-milliamperemeter
-milliangstrom
-milliard
-milliardaire
-milliare
-milliarium
-milliary
-millibar
-millicron
-millicurie
-Millie
-millieme
-milliequivalent
-millifarad
-millifold
-milliform
-milligal
-milligrade
-milligram
-milligramage
-millihenry
-millilambert
-millile
-milliliter
-millilux
-millimeter
-millimicron
-millimolar
-millimole
-millincost
-milline
-milliner
-millinerial
-millinering
-millinery
-milling
-Millingtonia
-millinormal
-millinormality
-millioctave
-millioersted
-million
-millionaire
-millionairedom
-millionairess
-millionairish
-millionairism
-millionary
-millioned
-millioner
-millionfold
-millionism
-millionist
-millionize
-millionocracy
-millions
-millionth
-milliphot
-millipoise
-millisecond
-millistere
-Millite
-millithrum
-millivolt
-millivoltmeter
-millman
-millocracy
-millocrat
-millocratism
-millosevichite
-millowner
-millpond
-millpool
-millpost
-millrace
-millrynd
-millsite
-millstock
-millstone
-millstream
-milltail
-millward
-millwork
-millworker
-millwright
-millwrighting
-Milly
-Milner
-milner
-Milo
-milo
-milord
-milpa
-milreis
-milsey
-milsie
-milt
-milter
-miltlike
-Miltonia
-Miltonian
-Miltonic
-Miltonically
-Miltonism
-Miltonist
-Miltonize
-Miltos
-miltsick
-miltwaste
-milty
-Milvago
-Milvinae
-milvine
-milvinous
-Milvus
-milzbrand
-mim
-mima
-mimbar
-mimble
-Mimbreno
-Mime
-mime
-mimeo
-mimeograph
-mimeographic
-mimeographically
-mimeographist
-mimer
-mimesis
-mimester
-mimetene
-mimetesite
-mimetic
-mimetical
-mimetically
-mimetism
-mimetite
-Mimi
-mimiambi
-mimiambic
-mimiambics
-mimic
-mimical
-mimically
-mimicism
-mimicker
-mimicry
-Mimidae
-Miminae
-mimine
-miminypiminy
-mimly
-mimmation
-mimmest
-mimmock
-mimmocking
-mimmocky
-mimmood
-mimmoud
-mimmouthed
-mimmouthedness
-mimodrama
-mimographer
-mimography
-mimologist
-Mimosa
-Mimosaceae
-mimosaceous
-mimosis
-mimosite
-mimotype
-mimotypic
-mimp
-Mimpei
-mimsey
-Mimulus
-Mimus
-Mimusops
-min
-Mina
-mina
-minable
-minacious
-minaciously
-minaciousness
-minacity
-Minaean
-Minahassa
-Minahassan
-Minahassian
-minar
-minaret
-minareted
-minargent
-minasragrite
-minatorial
-minatorially
-minatorily
-minatory
-minaway
-mince
-mincemeat
-mincer
-minchery
-minchiate
-mincing
-mincingly
-mincingness
-Mincopi
-Mincopie
-mind
-minded
-Mindel
-Mindelian
-minder
-Mindererus
-mindful
-mindfully
-mindfulness
-minding
-mindless
-mindlessly
-mindlessness
-mindsight
-mine
-mineowner
-miner
-mineragraphic
-mineragraphy
-mineraiogic
-mineral
-mineralizable
-mineralization
-mineralize
-mineralizer
-mineralogical
-mineralogically
-mineralogist
-mineralogize
-mineralogy
-Minerva
-minerval
-Minervan
-Minervic
-minery
-mines
-minette
-mineworker
-Ming
-ming
-minge
-mingelen
-mingle
-mingleable
-mingledly
-minglement
-mingler
-minglingly
-Mingo
-Mingrelian
-minguetite
-mingwort
-mingy
-minhag
-minhah
-miniaceous
-miniate
-miniator
-miniature
-miniaturist
-minibus
-minicam
-minicamera
-Miniconjou
-minienize
-minification
-minify
-minikin
-minikinly
-minim
-minima
-minimacid
-minimal
-minimalism
-Minimalist
-minimalkaline
-minimally
-minimetric
-minimifidian
-minimifidianism
-minimism
-minimistic
-Minimite
-minimitude
-minimization
-minimize
-minimizer
-minimum
-minimus
-minimuscular
-mining
-minion
-minionette
-minionism
-minionly
-minionship
-minish
-minisher
-minishment
-minister
-ministeriable
-ministerial
-ministerialism
-ministerialist
-ministeriality
-ministerially
-ministerialness
-ministerium
-ministership
-ministrable
-ministrant
-ministration
-ministrative
-ministrator
-ministrer
-ministress
-ministry
-ministryship
-minitant
-Minitari
-minium
-miniver
-minivet
-mink
-minkery
-minkish
-Minkopi
-Minnehaha
-minnesinger
-minnesong
-Minnesotan
-Minnetaree
-Minnie
-minnie
-minniebush
-minning
-minnow
-minny
-mino
-Minoan
-minoize
-minometer
-minor
-minorage
-minorate
-minoration
-Minorca
-Minorcan
-Minoress
-minoress
-Minorist
-Minorite
-minority
-minorship
-Minos
-minot
-Minotaur
-Minseito
-minsitive
-minster
-minsteryard
-minstrel
-minstreless
-minstrelship
-minstrelsy
-mint
-mintage
-Mintaka
-mintbush
-minter
-mintmaker
-mintmaking
-mintman
-mintmaster
-minty
-minuend
-minuet
-minuetic
-minuetish
-minus
-minuscular
-minuscule
-minutary
-minutation
-minute
-minutely
-minuteman
-minuteness
-minuter
-minuthesis
-minutia
-minutiae
-minutial
-minutiose
-minutiously
-minutissimic
-minverite
-minx
-minxish
-minxishly
-minxishness
-minxship
-miny
-Minyadidae
-Minyae
-Minyan
-minyan
-Minyas
-miocardia
-Miocene
-Miocenic
-Miohippus
-miolithic
-mioplasmia
-miothermic
-miqra
-miquelet
-mir
-Mira
-Mirabel
-Mirabell
-mirabiliary
-Mirabilis
-mirabilite
-Mirac
-Mirach
-mirach
-miracidial
-miracidium
-miracle
-miraclemonger
-miraclemongering
-miraclist
-miraculist
-miraculize
-miraculosity
-miraculous
-miraculously
-miraculousness
-mirador
-mirage
-miragy
-Mirak
-Miramolin
-Mirana
-Miranda
-mirandous
-Miranha
-Miranhan
-mirate
-mirbane
-mird
-mirdaha
-mire
-mirepoix
-Mirfak
-Miriam
-Miriamne
-mirid
-Miridae
-mirific
-miriness
-mirish
-mirk
-mirkiness
-mirksome
-mirliton
-Miro
-miro
-Mirounga
-mirror
-mirrored
-mirrorize
-mirrorlike
-mirrorscope
-mirrory
-mirth
-mirthful
-mirthfully
-mirthfulness
-mirthless
-mirthlessly
-mirthlessness
-mirthsome
-mirthsomeness
-miry
-miryachit
-mirza
-misaccent
-misaccentuation
-misachievement
-misacknowledge
-misact
-misadapt
-misadaptation
-misadd
-misaddress
-misadjust
-misadmeasurement
-misadministration
-misadvantage
-misadventure
-misadventurer
-misadventurous
-misadventurously
-misadvertence
-misadvice
-misadvise
-misadvised
-misadvisedly
-misadvisedness
-misaffected
-misaffection
-misaffirm
-misagent
-misaim
-misalienate
-misalignment
-misallegation
-misallege
-misalliance
-misallotment
-misallowance
-misally
-misalphabetize
-misalter
-misanalyze
-misandry
-misanswer
-misanthrope
-misanthropia
-misanthropic
-misanthropical
-misanthropically
-misanthropism
-misanthropist
-misanthropize
-misanthropy
-misapparel
-misappear
-misappearance
-misappellation
-misapplication
-misapplier
-misapply
-misappoint
-misappointment
-misappraise
-misappraisement
-misappreciate
-misappreciation
-misappreciative
-misapprehend
-misapprehendingly
-misapprehensible
-misapprehension
-misapprehensive
-misapprehensively
-misapprehensiveness
-misappropriate
-misappropriately
-misappropriation
-misarchism
-misarchist
-misarrange
-misarrangement
-misarray
-misascribe
-misascription
-misasperse
-misassay
-misassent
-misassert
-misassign
-misassociate
-misassociation
-misatone
-misattend
-misattribute
-misattribution
-misaunter
-misauthorization
-misauthorize
-misaward
-misbandage
-misbaptize
-misbecome
-misbecoming
-misbecomingly
-misbecomingness
-misbefitting
-misbeget
-misbegin
-misbegotten
-misbehave
-misbehavior
-misbeholden
-misbelief
-misbelieve
-misbeliever
-misbelievingly
-misbelove
-misbeseem
-misbestow
-misbestowal
-misbetide
-misbias
-misbill
-misbind
-misbirth
-misbode
-misborn
-misbrand
-misbuild
-misbusy
-miscalculate
-miscalculation
-miscalculator
-miscall
-miscaller
-miscanonize
-miscarriage
-miscarriageable
-miscarry
-miscast
-miscasualty
-misceability
-miscegenate
-miscegenation
-miscegenationist
-miscegenator
-miscegenetic
-miscegine
-miscellanarian
-miscellanea
-miscellaneity
-miscellaneous
-miscellaneously
-miscellaneousness
-miscellanist
-miscellany
-mischallenge
-mischance
-mischanceful
-mischancy
-mischaracterization
-mischaracterize
-mischarge
-mischief
-mischiefful
-mischieve
-mischievous
-mischievously
-mischievousness
-mischio
-mischoice
-mischoose
-mischristen
-miscibility
-miscible
-miscipher
-misclaim
-misclaiming
-misclass
-misclassification
-misclassify
-miscognizant
-miscoin
-miscoinage
-miscollocation
-miscolor
-miscoloration
-miscommand
-miscommit
-miscommunicate
-miscompare
-miscomplacence
-miscomplain
-miscomplaint
-miscompose
-miscomprehend
-miscomprehension
-miscomputation
-miscompute
-misconceive
-misconceiver
-misconception
-misconclusion
-miscondition
-misconduct
-misconfer
-misconfidence
-misconfident
-misconfiguration
-misconjecture
-misconjugate
-misconjugation
-misconjunction
-misconsecrate
-misconsequence
-misconstitutional
-misconstruable
-misconstruct
-misconstruction
-misconstructive
-misconstrue
-misconstruer
-miscontinuance
-misconvenient
-misconvey
-miscook
-miscookery
-miscorrect
-miscorrection
-miscounsel
-miscount
-miscovet
-miscreancy
-miscreant
-miscreate
-miscreation
-miscreative
-miscreator
-miscredited
-miscredulity
-miscreed
-miscript
-miscrop
-miscue
-miscultivated
-misculture
-miscurvature
-miscut
-misdate
-misdateful
-misdaub
-misdeal
-misdealer
-misdecide
-misdecision
-misdeclaration
-misdeclare
-misdeed
-misdeem
-misdeemful
-misdefine
-misdeformed
-misdeliver
-misdelivery
-misdemean
-misdemeanant
-misdemeanist
-misdemeanor
-misdentition
-misderivation
-misderive
-misdescribe
-misdescriber
-misdescription
-misdescriptive
-misdesire
-misdetermine
-misdevise
-misdevoted
-misdevotion
-misdiet
-misdirect
-misdirection
-misdispose
-misdisposition
-misdistinguish
-misdistribute
-misdistribution
-misdivide
-misdivision
-misdo
-misdoer
-misdoing
-misdoubt
-misdower
-misdraw
-misdread
-misdrive
-mise
-misease
-misecclesiastic
-misedit
-miseducate
-miseducation
-miseducative
-miseffect
-misemphasis
-misemphasize
-misemploy
-misemployment
-misencourage
-misendeavor
-misenforce
-misengrave
-misenite
-misenjoy
-misenroll
-misentitle
-misenunciation
-Misenus
-miser
-miserabilism
-miserabilist
-miserabilistic
-miserability
-miserable
-miserableness
-miserably
-miserdom
-miserected
-Miserere
-miserhood
-misericord
-Misericordia
-miserism
-miserliness
-miserly
-misery
-misesteem
-misestimate
-misestimation
-misexample
-misexecute
-misexecution
-misexpectation
-misexpend
-misexpenditure
-misexplain
-misexplanation
-misexplication
-misexposition
-misexpound
-misexpress
-misexpression
-misexpressive
-misfaith
-misfare
-misfashion
-misfather
-misfault
-misfeasance
-misfeasor
-misfeature
-misfield
-misfigure
-misfile
-misfire
-misfit
-misfond
-misform
-misformation
-misfortunate
-misfortunately
-misfortune
-misfortuned
-misfortuner
-misframe
-misgauge
-misgesture
-misgive
-misgiving
-misgivingly
-misgo
-misgotten
-misgovern
-misgovernance
-misgovernment
-misgovernor
-misgracious
-misgraft
-misgrave
-misground
-misgrow
-misgrown
-misgrowth
-misguess
-misguggle
-misguidance
-misguide
-misguided
-misguidedly
-misguidedness
-misguider
-misguiding
-misguidingly
-mishandle
-mishap
-mishappen
-Mishikhwutmetunne
-mishmash
-mishmee
-Mishmi
-Mishnah
-Mishnaic
-Mishnic
-Mishnical
-Mishongnovi
-misidentification
-misidentify
-Misima
-misimagination
-misimagine
-misimpression
-misimprove
-misimprovement
-misimputation
-misimpute
-misincensed
-misincite
-misinclination
-misincline
-misinfer
-misinference
-misinflame
-misinform
-misinformant
-misinformation
-misinformer
-misingenuity
-misinspired
-misinstruct
-misinstruction
-misinstructive
-misintelligence
-misintelligible
-misintend
-misintention
-misinter
-misinterment
-misinterpret
-misinterpretable
-misinterpretation
-misinterpreter
-misintimation
-misjoin
-misjoinder
-misjudge
-misjudgement
-misjudger
-misjudgingly
-misjudgment
-miskeep
-misken
-miskenning
-miskill
-miskindle
-misknow
-misknowledge
-misky
-mislabel
-mislabor
-mislanguage
-mislay
-mislayer
-mislead
-misleadable
-misleader
-misleading
-misleadingly
-misleadingness
-mislear
-misleared
-mislearn
-misled
-mislest
-mislight
-mislike
-misliken
-mislikeness
-misliker
-mislikingly
-mislippen
-mislive
-mislocate
-mislocation
-mislodge
-mismade
-mismake
-mismanage
-mismanageable
-mismanagement
-mismanager
-mismarriage
-mismarry
-mismatch
-mismatchment
-mismate
-mismeasure
-mismeasurement
-mismenstruation
-misminded
-mismingle
-mismotion
-mismove
-misname
-misnarrate
-misnatured
-misnavigation
-Misniac
-misnomed
-misnomer
-misnumber
-misnurture
-misnutrition
-misobedience
-misobey
-misobservance
-misobserve
-misocapnic
-misocapnist
-misocatholic
-misoccupy
-misogallic
-misogamic
-misogamist
-misogamy
-misogyne
-misogynic
-misogynical
-misogynism
-misogynist
-misogynistic
-misogynistical
-misogynous
-misogyny
-misohellene
-misologist
-misology
-misomath
-misoneism
-misoneist
-misoneistic
-misopaterist
-misopedia
-misopedism
-misopedist
-misopinion
-misopolemical
-misorder
-misordination
-misorganization
-misorganize
-misoscopist
-misosophist
-misosophy
-misotheism
-misotheist
-misotheistic
-misotramontanism
-misotyranny
-misoxene
-misoxeny
-mispage
-mispagination
-mispaint
-misparse
-mispart
-mispassion
-mispatch
-mispay
-misperceive
-misperception
-misperform
-misperformance
-mispersuade
-misperuse
-misphrase
-mispick
-mispickel
-misplace
-misplacement
-misplant
-misplay
-misplead
-mispleading
-misplease
-mispoint
-mispoise
-mispolicy
-misposition
-mispossessed
-mispractice
-mispraise
-misprejudiced
-misprincipled
-misprint
-misprisal
-misprision
-misprize
-misprizer
-misproceeding
-misproduce
-misprofess
-misprofessor
-mispronounce
-mispronouncement
-mispronunciation
-misproportion
-misproposal
-mispropose
-misproud
-misprovide
-misprovidence
-misprovoke
-mispunctuate
-mispunctuation
-mispurchase
-mispursuit
-misput
-misqualify
-misquality
-misquotation
-misquote
-misquoter
-misraise
-misrate
-misread
-misreader
-misrealize
-misreason
-misreceive
-misrecital
-misrecite
-misreckon
-misrecognition
-misrecognize
-misrecollect
-misrefer
-misreference
-misreflect
-misreform
-misregulate
-misrehearsal
-misrehearse
-misrelate
-misrelation
-misreliance
-misremember
-misremembrance
-misrender
-misrepeat
-misreport
-misreporter
-misreposed
-misrepresent
-misrepresentation
-misrepresentative
-misrepresenter
-misreprint
-misrepute
-misresemblance
-misresolved
-misresult
-misreward
-misrhyme
-misrhymer
-misrule
-miss
-missable
-missal
-missay
-missayer
-misseem
-missel
-missemblance
-missentence
-misserve
-misservice
-misset
-misshape
-misshapen
-misshapenly
-misshapenness
-misshood
-missible
-missile
-missileproof
-missiness
-missing
-missingly
-mission
-missional
-missionarize
-missionary
-missionaryship
-missioner
-missionize
-missionizer
-missis
-Missisauga
-missish
-missishness
-Mississippi
-Mississippian
-missive
-missmark
-missment
-Missouri
-Missourian
-Missourianism
-missourite
-misspeak
-misspeech
-misspell
-misspelling
-misspend
-misspender
-misstate
-misstatement
-misstater
-misstay
-misstep
-missuade
-missuggestion
-missummation
-missuppose
-missy
-missyish
-missyllabication
-missyllabify
-mist
-mistakable
-mistakableness
-mistakably
-mistake
-mistakeful
-mistaken
-mistakenly
-mistakenness
-mistakeproof
-mistaker
-mistaking
-mistakingly
-mistassini
-mistaught
-mistbow
-misteach
-misteacher
-misted
-mistell
-mistempered
-mistend
-mistendency
-Mister
-mister
-misterm
-mistetch
-mistfall
-mistflower
-mistful
-misthink
-misthought
-misthread
-misthrift
-misthrive
-misthrow
-mistic
-mistide
-mistify
-mistigris
-mistily
-mistime
-mistiness
-mistitle
-mistle
-mistless
-mistletoe
-mistone
-mistonusk
-mistook
-mistouch
-mistradition
-mistrain
-mistral
-mistranscribe
-mistranscript
-mistranscription
-mistranslate
-mistranslation
-mistreat
-mistreatment
-mistress
-mistressdom
-mistresshood
-mistressless
-mistressly
-mistrial
-mistrist
-mistrust
-mistruster
-mistrustful
-mistrustfully
-mistrustfulness
-mistrusting
-mistrustingly
-mistrustless
-mistry
-mistryst
-misturn
-mistutor
-misty
-mistyish
-misunderstand
-misunderstandable
-misunderstander
-misunderstanding
-misunderstandingly
-misunderstood
-misunderstoodness
-misura
-misusage
-misuse
-misuseful
-misusement
-misuser
-misusurped
-misvaluation
-misvalue
-misventure
-misventurous
-misvouch
-miswed
-miswisdom
-miswish
-misword
-misworship
-misworshiper
-misworshipper
-miswrite
-misyoke
-miszealous
-Mitakshara
-Mitanni
-Mitannian
-Mitannish
-mitapsis
-Mitch
-mitchboard
-Mitchell
-Mitchella
-mite
-Mitella
-miteproof
-miter
-mitered
-miterer
-miterflower
-miterwort
-Mithra
-Mithraea
-Mithraeum
-Mithraic
-Mithraicism
-Mithraicist
-Mithraicize
-Mithraism
-Mithraist
-Mithraistic
-Mithraitic
-Mithraize
-Mithras
-Mithratic
-Mithriac
-mithridate
-Mithridatic
-mithridatic
-mithridatism
-mithridatize
-miticidal
-miticide
-mitigable
-mitigant
-mitigate
-mitigatedly
-mitigation
-mitigative
-mitigator
-mitigatory
-mitis
-mitochondria
-mitochondrial
-mitogenetic
-mitome
-mitosis
-mitosome
-mitotic
-mitotically
-Mitra
-mitra
-mitrailleuse
-mitral
-mitrate
-mitre
-mitrer
-Mitridae
-mitriform
-Mitsukurina
-Mitsukurinidae
-mitsumata
-mitt
-mittelhand
-Mittelmeer
-mitten
-mittened
-mittimus
-mitty
-Mitu
-Mitua
-mity
-miurus
-mix
-mixable
-mixableness
-mixblood
-Mixe
-mixed
-mixedly
-mixedness
-mixen
-mixer
-mixeress
-mixhill
-mixible
-mixite
-mixobarbaric
-mixochromosome
-Mixodectes
-Mixodectidae
-mixolydian
-mixoploid
-mixoploidy
-Mixosaurus
-mixotrophic
-Mixtec
-Mixtecan
-mixtiform
-mixtilineal
-mixtilion
-mixtion
-mixture
-mixy
-Mizar
-mizmaze
-Mizpah
-Mizraim
-mizzen
-mizzenmast
-mizzenmastman
-mizzentopman
-mizzle
-mizzler
-mizzly
-mizzonite
-mizzy
-mlechchha
-mneme
-mnemic
-Mnemiopsis
-mnemonic
-mnemonical
-mnemonicalist
-mnemonically
-mnemonicon
-mnemonics
-mnemonism
-mnemonist
-mnemonization
-mnemonize
-Mnemosyne
-mnemotechnic
-mnemotechnical
-mnemotechnics
-mnemotechnist
-mnemotechny
-mnesic
-mnestic
-Mnevis
-Mniaceae
-mniaceous
-mnioid
-Mniotiltidae
-Mnium
-Mo
-mo
-Moabite
-Moabitess
-Moabitic
-Moabitish
-moan
-moanful
-moanfully
-moanification
-moaning
-moaningly
-moanless
-Moaria
-Moarian
-moat
-Moattalite
-mob
-mobable
-mobbable
-mobber
-mobbish
-mobbishly
-mobbishness
-mobbism
-mobbist
-mobby
-mobcap
-mobed
-mobile
-Mobilian
-mobilianer
-mobiliary
-mobility
-mobilizable
-mobilization
-mobilize
-mobilometer
-moble
-moblike
-mobocracy
-mobocrat
-mobocratic
-mobocratical
-mobolatry
-mobproof
-mobship
-mobsman
-mobster
-Mobula
-Mobulidae
-moccasin
-Mocha
-mocha
-Mochica
-mochras
-mock
-mockable
-mockado
-mockbird
-mocker
-mockernut
-mockery
-mockful
-mockfully
-mockground
-mockingbird
-mockingstock
-mocmain
-Mocoa
-Mocoan
-mocomoco
-mocuck
-Mod
-modal
-modalism
-modalist
-modalistic
-modality
-modalize
-modally
-mode
-model
-modeler
-modeless
-modelessness
-modeling
-modelist
-modeller
-modelmaker
-modelmaking
-modena
-Modenese
-moderant
-moderantism
-moderantist
-moderate
-moderately
-moderateness
-moderation
-moderationist
-moderatism
-moderatist
-moderato
-moderator
-moderatorship
-moderatrix
-Modern
-modern
-moderner
-modernicide
-modernish
-modernism
-modernist
-modernistic
-modernity
-modernizable
-modernization
-modernize
-modernizer
-modernly
-modernness
-modest
-modestly
-modestness
-modesty
-modiation
-modicity
-modicum
-modifiability
-modifiable
-modifiableness
-modifiably
-modificability
-modificable
-modification
-modificationist
-modificative
-modificator
-modificatory
-modifier
-modify
-modillion
-modiolar
-Modiolus
-modiolus
-modish
-modishly
-modishness
-modist
-modiste
-modistry
-modius
-Modoc
-Modred
-modulability
-modulant
-modular
-modulate
-modulation
-modulative
-modulator
-modulatory
-module
-Modulidae
-modulo
-modulus
-modumite
-Moe
-Moed
-Moehringia
-moellon
-moerithere
-moeritherian
-Moeritheriidae
-Moeritherium
-mofette
-moff
-mofussil
-mofussilite
-mog
-mogador
-mogadore
-mogdad
-moggan
-moggy
-Moghan
-mogigraphia
-mogigraphic
-mogigraphy
-mogilalia
-mogilalism
-mogiphonia
-mogitocia
-mogo
-mogographia
-Mogollon
-Mograbi
-Mogrebbin
-moguey
-Mogul
-mogulship
-Moguntine
-moha
-mohabat
-mohair
-Mohammad
-Mohammedan
-Mohammedanism
-Mohammedanization
-Mohammedanize
-Mohammedism
-Mohammedist
-Mohammedization
-Mohammedize
-mohar
-Mohave
-Mohawk
-Mohawkian
-mohawkite
-Mohegan
-mohel
-Mohican
-Mohineyam
-mohnseed
-moho
-Mohock
-Mohockism
-mohr
-Mohrodendron
-mohur
-Moi
-moider
-moidore
-moieter
-moiety
-moil
-moiler
-moiles
-moiley
-moiling
-moilingly
-moilsome
-moineau
-Moingwena
-moio
-Moira
-moire
-moirette
-moise
-Moism
-moissanite
-moist
-moisten
-moistener
-moistful
-moistify
-moistish
-moistishness
-moistless
-moistly
-moistness
-moisture
-moistureless
-moistureproof
-moisty
-moit
-moity
-mojarra
-Mojo
-mojo
-mokaddam
-moke
-moki
-mokihana
-moko
-moksha
-mokum
-moky
-Mola
-mola
-molal
-Molala
-molality
-molar
-molariform
-molarimeter
-molarity
-molary
-Molasse
-molasses
-molassied
-molassy
-molave
-mold
-moldability
-moldable
-moldableness
-Moldavian
-moldavite
-moldboard
-molder
-moldery
-moldiness
-molding
-moldmade
-moldproof
-moldwarp
-moldy
-Mole
-mole
-molecast
-molecula
-molecular
-molecularist
-molecularity
-molecularly
-molecule
-molehead
-moleheap
-molehill
-molehillish
-molehilly
-moleism
-molelike
-molendinar
-molendinary
-molengraaffite
-moleproof
-moler
-moleskin
-molest
-molestation
-molester
-molestful
-molestfully
-Molge
-Molgula
-Molidae
-molimen
-moliminous
-molinary
-moline
-Molinia
-Molinism
-Molinist
-Molinistic
-molka
-Moll
-molland
-Mollberg
-molle
-mollescence
-mollescent
-molleton
-mollichop
-mollicrush
-mollie
-mollienisia
-mollient
-molliently
-mollifiable
-mollification
-mollifiedly
-mollifier
-mollify
-mollifying
-mollifyingly
-mollifyingness
-molligrant
-molligrubs
-mollipilose
-Mollisiaceae
-mollisiose
-mollities
-mollitious
-mollitude
-Molluginaceae
-Mollugo
-Mollusca
-molluscan
-molluscivorous
-molluscoid
-Molluscoida
-molluscoidal
-molluscoidan
-Molluscoidea
-molluscoidean
-molluscous
-molluscousness
-molluscum
-mollusk
-Molly
-molly
-mollycoddle
-mollycoddler
-mollycoddling
-mollycosset
-mollycot
-mollyhawk
-molman
-Moloch
-Molochize
-Molochship
-moloid
-moloker
-molompi
-molosse
-Molossian
-molossic
-Molossidae
-molossine
-molossoid
-molossus
-Molothrus
-molpe
-molrooken
-molt
-molten
-moltenly
-molter
-Molucca
-Moluccan
-Moluccella
-Moluche
-moly
-molybdate
-molybdena
-molybdenic
-molybdeniferous
-molybdenite
-molybdenous
-molybdenum
-molybdic
-molybdite
-molybdocardialgia
-molybdocolic
-molybdodyspepsia
-molybdomancy
-molybdomenite
-molybdonosus
-molybdoparesis
-molybdophyllite
-molybdosis
-molybdous
-molysite
-mombin
-momble
-Mombottu
-mome
-moment
-momenta
-momental
-momentally
-momentaneall
-momentaneity
-momentaneous
-momentaneously
-momentaneousness
-momentarily
-momentariness
-momentary
-momently
-momentous
-momentously
-momentousness
-momentum
-momiology
-momism
-momme
-mommet
-mommy
-momo
-Momordica
-Momotidae
-Momotinae
-Momotus
-Momus
-Mon
-mon
-mona
-Monacan
-monacanthid
-Monacanthidae
-monacanthine
-monacanthous
-Monacha
-monachal
-monachate
-Monachi
-monachism
-monachist
-monachization
-monachize
-monactin
-monactine
-monactinellid
-monactinellidan
-monad
-monadelph
-Monadelphia
-monadelphian
-monadelphous
-monadic
-monadical
-monadically
-monadiform
-monadigerous
-Monadina
-monadism
-monadistic
-monadnock
-monadology
-monaene
-monal
-monamniotic
-Monanday
-monander
-Monandria
-monandrian
-monandric
-monandrous
-monandry
-monanthous
-monapsal
-monarch
-monarchal
-monarchally
-monarchess
-monarchial
-monarchian
-monarchianism
-monarchianist
-monarchianistic
-monarchic
-monarchical
-monarchically
-monarchism
-monarchist
-monarchistic
-monarchize
-monarchizer
-monarchlike
-monarchomachic
-monarchomachist
-monarchy
-Monarda
-Monardella
-monarthritis
-monarticular
-monas
-Monasa
-Monascidiae
-monascidian
-monase
-monaster
-monasterial
-monasterially
-monastery
-monastic
-monastical
-monastically
-monasticism
-monasticize
-monatomic
-monatomicity
-monatomism
-monaulos
-monaural
-monaxial
-monaxile
-monaxon
-monaxonial
-monaxonic
-Monaxonida
-monazine
-monazite
-Monbuttu
-monchiquite
-Monday
-Mondayish
-Mondayishness
-Mondayland
-mone
-Monegasque
-Monel
-monel
-monembryary
-monembryonic
-monembryony
-monepic
-monepiscopacy
-monepiscopal
-moner
-Monera
-moneral
-moneran
-monergic
-monergism
-monergist
-monergistic
-moneric
-moneron
-Monerozoa
-monerozoan
-monerozoic
-monerula
-Moneses
-monesia
-monetarily
-monetary
-monetite
-monetization
-monetize
-money
-moneyage
-moneybag
-moneybags
-moneyed
-moneyer
-moneyflower
-moneygrub
-moneygrubber
-moneygrubbing
-moneylender
-moneylending
-moneyless
-moneymonger
-moneymongering
-moneysaving
-moneywise
-moneywort
-mong
-mongcorn
-monger
-mongering
-mongery
-Monghol
-Mongholian
-Mongibel
-mongler
-Mongo
-Mongol
-Mongolian
-Mongolianism
-Mongolic
-Mongolioid
-Mongolish
-Mongolism
-Mongolization
-Mongolize
-Mongoloid
-mongoose
-Mongoyo
-mongrel
-mongreldom
-mongrelish
-mongrelism
-mongrelity
-mongrelization
-mongrelize
-mongrelly
-mongrelness
-mongst
-monheimite
-monial
-Monias
-Monica
-moniker
-monilated
-monilethrix
-Monilia
-Moniliaceae
-moniliaceous
-Moniliales
-monilicorn
-moniliform
-moniliformly
-monilioid
-moniment
-Monimia
-Monimiaceae
-monimiaceous
-monimolite
-monimostylic
-monism
-monist
-monistic
-monistical
-monistically
-monition
-monitive
-monitor
-monitorial
-monitorially
-monitorish
-monitorship
-monitory
-monitress
-monitrix
-monk
-monkbird
-monkcraft
-monkdom
-monkery
-monkess
-monkey
-monkeyboard
-monkeyface
-monkeyfy
-monkeyhood
-monkeyish
-monkeyishly
-monkeyishness
-monkeylike
-monkeynut
-monkeypod
-monkeypot
-monkeyry
-monkeyshine
-monkeytail
-monkfish
-monkflower
-monkhood
-monkish
-monkishly
-monkishness
-monkism
-monklike
-monkliness
-monkly
-monkmonger
-monkship
-monkshood
-Monmouth
-monmouthite
-monny
-Mono
-mono
-monoacetate
-monoacetin
-monoacid
-monoacidic
-monoamide
-monoamine
-monoamino
-monoammonium
-monoazo
-monobacillary
-monobase
-monobasic
-monobasicity
-monoblastic
-monoblepsia
-monoblepsis
-monobloc
-monobranchiate
-monobromacetone
-monobromated
-monobromide
-monobrominated
-monobromination
-monobromized
-monobromoacetanilide
-monobromoacetone
-monobutyrin
-monocalcium
-monocarbide
-monocarbonate
-monocarbonic
-monocarboxylic
-monocardian
-monocarp
-monocarpal
-monocarpellary
-monocarpian
-monocarpic
-monocarpous
-monocellular
-monocentric
-monocentrid
-Monocentridae
-Monocentris
-monocentroid
-monocephalous
-monocercous
-monoceros
-monocerous
-monochasial
-monochasium
-Monochlamydeae
-monochlamydeous
-monochlor
-monochloracetic
-monochloranthracene
-monochlorbenzene
-monochloride
-monochlorinated
-monochlorination
-monochloro
-monochloroacetic
-monochlorobenzene
-monochloromethane
-monochoanitic
-monochord
-monochordist
-monochordize
-monochroic
-monochromasy
-monochromat
-monochromate
-monochromatic
-monochromatically
-monochromatism
-monochromator
-monochrome
-monochromic
-monochromical
-monochromically
-monochromist
-monochromous
-monochromy
-monochronic
-monochronous
-monociliated
-monocle
-monocled
-monocleid
-monoclinal
-monoclinally
-monocline
-monoclinian
-monoclinic
-monoclinism
-monoclinometric
-monoclinous
-Monoclonius
-Monocoelia
-monocoelian
-monocoelic
-Monocondyla
-monocondylar
-monocondylian
-monocondylic
-monocondylous
-monocormic
-monocot
-monocotyledon
-Monocotyledones
-monocotyledonous
-monocracy
-monocrat
-monocratic
-monocrotic
-monocrotism
-monocular
-monocularity
-monocularly
-monoculate
-monocule
-monoculist
-monoculous
-monocultural
-monoculture
-monoculus
-monocyanogen
-monocycle
-monocyclic
-Monocyclica
-monocystic
-Monocystidae
-Monocystidea
-Monocystis
-monocyte
-monocytic
-monocytopoiesis
-monodactyl
-monodactylate
-monodactyle
-monodactylism
-monodactylous
-monodactyly
-monodelph
-Monodelphia
-monodelphian
-monodelphic
-monodelphous
-monodermic
-monodic
-monodically
-monodimetric
-monodist
-monodize
-monodomous
-Monodon
-monodont
-Monodonta
-monodontal
-monodram
-monodrama
-monodramatic
-monodramatist
-monodromic
-monodromy
-monody
-monodynamic
-monodynamism
-Monoecia
-monoecian
-monoecious
-monoeciously
-monoeciousness
-monoecism
-monoeidic
-monoestrous
-monoethanolamine
-monoethylamine
-monofilament
-monofilm
-monoflagellate
-monoformin
-monogamian
-monogamic
-monogamist
-monogamistic
-monogamous
-monogamously
-monogamousness
-monogamy
-monoganglionic
-monogastric
-monogene
-Monogenea
-monogeneity
-monogeneous
-monogenesis
-monogenesist
-monogenesy
-monogenetic
-Monogenetica
-monogenic
-monogenism
-monogenist
-monogenistic
-monogenous
-monogeny
-monoglot
-monoglycerid
-monoglyceride
-monogoneutic
-monogonoporic
-monogonoporous
-monogony
-monogram
-monogrammatic
-monogrammatical
-monogrammed
-monogrammic
-monograph
-monographer
-monographic
-monographical
-monographically
-monographist
-monography
-monograptid
-Monograptidae
-Monograptus
-monogynic
-monogynious
-monogynist
-monogynoecial
-monogynous
-monogyny
-monohybrid
-monohydrate
-monohydrated
-monohydric
-monohydrogen
-monohydroxy
-monoicous
-monoid
-monoketone
-monolater
-monolatrist
-monolatrous
-monolatry
-monolayer
-monoline
-monolingual
-monolinguist
-monoliteral
-monolith
-monolithal
-monolithic
-monolobular
-monolocular
-monologian
-monologic
-monological
-monologist
-monologize
-monologue
-monologuist
-monology
-monomachist
-monomachy
-monomania
-monomaniac
-monomaniacal
-monomastigate
-monomeniscous
-monomer
-monomeric
-monomerous
-monometallic
-monometallism
-monometallist
-monometer
-monomethyl
-monomethylated
-monomethylic
-monometric
-monometrical
-monomial
-monomict
-monomineral
-monomineralic
-monomolecular
-monomolybdate
-Monomorium
-monomorphic
-monomorphism
-monomorphous
-Monomya
-Monomyaria
-monomyarian
-mononaphthalene
-mononch
-Mononchus
-mononeural
-Monongahela
-mononitrate
-mononitrated
-mononitration
-mononitride
-mononitrobenzene
-mononomial
-mononomian
-monont
-mononuclear
-mononucleated
-mononucleosis
-mononychous
-mononym
-mononymic
-mononymization
-mononymize
-mononymy
-monoousian
-monoousious
-monoparental
-monoparesis
-monoparesthesia
-monopathic
-monopathy
-monopectinate
-monopersonal
-monopersulfuric
-monopersulphuric
-Monopetalae
-monopetalous
-monophagism
-monophagous
-monophagy
-monophase
-monophasia
-monophasic
-monophobia
-monophone
-monophonic
-monophonous
-monophony
-monophotal
-monophote
-monophthalmic
-monophthalmus
-monophthong
-monophthongal
-monophthongization
-monophthongize
-monophyletic
-monophyleticism
-monophylite
-monophyllous
-monophyodont
-monophyodontism
-Monophysite
-Monophysitic
-Monophysitical
-Monophysitism
-monopitch
-monoplacula
-monoplacular
-monoplaculate
-monoplane
-monoplanist
-monoplasmatic
-monoplast
-monoplastic
-monoplegia
-monoplegic
-Monopneumoa
-monopneumonian
-monopneumonous
-monopode
-monopodial
-monopodially
-monopodic
-monopodium
-monopodous
-monopody
-monopolar
-monopolaric
-monopolarity
-monopole
-monopolism
-monopolist
-monopolistic
-monopolistically
-monopolitical
-monopolizable
-monopolization
-monopolize
-monopolizer
-monopolous
-monopoly
-monopolylogist
-monopolylogue
-monopotassium
-monoprionid
-monoprionidian
-monopsonistic
-monopsony
-monopsychism
-monopteral
-Monopteridae
-monopteroid
-monopteron
-monopteros
-monopterous
-monoptic
-monoptical
-monoptote
-monoptotic
-Monopylaea
-Monopylaria
-monopylean
-monopyrenous
-monorail
-monorailroad
-monorailway
-monorchid
-monorchidism
-monorchis
-monorchism
-monorganic
-Monorhina
-monorhinal
-monorhine
-monorhyme
-monorhymed
-monorhythmic
-monosaccharide
-monosaccharose
-monoschemic
-monoscope
-monose
-monosemic
-monosepalous
-monoservice
-monosilane
-monosilicate
-monosilicic
-monosiphonic
-monosiphonous
-monosodium
-monosomatic
-monosomatous
-monosome
-monosomic
-monosperm
-monospermal
-monospermic
-monospermous
-monospermy
-monospherical
-monospondylic
-monosporangium
-monospore
-monospored
-monosporiferous
-monosporous
-monostele
-monostelic
-monostelous
-monostely
-monostich
-monostichous
-Monostomata
-Monostomatidae
-monostomatous
-monostome
-Monostomidae
-monostomous
-Monostomum
-monostromatic
-monostrophe
-monostrophic
-monostrophics
-monostylous
-monosubstituted
-monosubstitution
-monosulfone
-monosulfonic
-monosulphide
-monosulphone
-monosulphonic
-monosyllabic
-monosyllabical
-monosyllabically
-monosyllabism
-monosyllabize
-monosyllable
-monosymmetric
-monosymmetrical
-monosymmetrically
-monosymmetry
-monosynthetic
-monotelephone
-monotelephonic
-monotellurite
-Monothalama
-monothalamian
-monothalamous
-monothecal
-monotheism
-monotheist
-monotheistic
-monotheistical
-monotheistically
-Monothelete
-Monotheletian
-Monotheletic
-Monotheletism
-monothelious
-Monothelism
-Monothelitic
-Monothelitism
-monothetic
-monotic
-monotint
-Monotocardia
-monotocardiac
-monotocardian
-monotocous
-monotomous
-monotone
-monotonic
-monotonical
-monotonically
-monotonist
-monotonize
-monotonous
-monotonously
-monotonousness
-monotony
-monotremal
-Monotremata
-monotremate
-monotrematous
-monotreme
-monotremous
-monotrichous
-monotriglyph
-monotriglyphic
-Monotrocha
-monotrochal
-monotrochian
-monotrochous
-Monotropa
-Monotropaceae
-monotropaceous
-monotrophic
-monotropic
-Monotropsis
-monotropy
-monotypal
-monotype
-monotypic
-monotypical
-monotypous
-monoureide
-monovalence
-monovalency
-monovalent
-monovariant
-monoverticillate
-monovoltine
-monovular
-monoxenous
-monoxide
-monoxime
-monoxyle
-monoxylic
-monoxylon
-monoxylous
-Monozoa
-monozoan
-monozoic
-monozygotic
-Monroeism
-Monroeist
-monrolite
-monseigneur
-monsieur
-monsieurship
-monsignor
-monsignorial
-Monsoni
-monsoon
-monsoonal
-monsoonish
-monsoonishly
-monster
-Monstera
-monsterhood
-monsterlike
-monstership
-monstrance
-monstrate
-monstration
-monstrator
-monstricide
-monstriferous
-monstrification
-monstrify
-monstrosity
-monstrous
-monstrously
-monstrousness
-Mont
-montage
-Montagnac
-Montagnais
-Montana
-montana
-Montanan
-montane
-montanic
-montanin
-Montanism
-Montanist
-Montanistic
-Montanistical
-montanite
-Montanize
-montant
-Montargis
-Montauk
-montbretia
-monte
-montebrasite
-monteith
-montem
-Montenegrin
-Montepulciano
-Monterey
-Montes
-Montesco
-Montesinos
-Montessorian
-Montessorianism
-Montezuma
-montgolfier
-month
-monthly
-monthon
-Montia
-monticellite
-monticle
-monticoline
-monticulate
-monticule
-Monticulipora
-Monticuliporidae
-monticuliporidean
-monticuliporoid
-monticulose
-monticulous
-monticulus
-montiform
-montigeneous
-montilla
-montjoy
-montmartrite
-Montmorency
-montmorilonite
-monton
-Montrachet
-montroydite
-Montu
-monture
-Monty
-Monumbo
-monument
-monumental
-monumentalism
-monumentality
-monumentalization
-monumentalize
-monumentally
-monumentary
-monumentless
-monumentlike
-monzodiorite
-monzogabbro
-monzonite
-monzonitic
-moo
-Mooachaht
-mooch
-moocha
-moocher
-moochulka
-mood
-mooder
-moodily
-moodiness
-moodish
-moodishly
-moodishness
-moodle
-moody
-mooing
-mool
-moolet
-moolings
-mools
-moolum
-moon
-moonack
-moonbeam
-moonbill
-moonblink
-mooncalf
-mooncreeper
-moondown
-moondrop
-mooned
-mooner
-moonery
-mooneye
-moonface
-moonfaced
-moonfall
-moonfish
-moonflower
-moonglade
-moonglow
-moonhead
-moonily
-mooniness
-mooning
-moonish
-moonite
-moonja
-moonjah
-moonless
-moonlet
-moonlight
-moonlighted
-moonlighter
-moonlighting
-moonlighty
-moonlike
-moonlikeness
-moonlit
-moonlitten
-moonman
-moonpath
-moonpenny
-moonproof
-moonraker
-moonraking
-moonrise
-moonsail
-moonscape
-moonseed
-moonset
-moonshade
-moonshine
-moonshiner
-moonshining
-moonshiny
-moonsick
-moonsickness
-moonstone
-moontide
-moonwalker
-moonwalking
-moonward
-moonwards
-moonway
-moonwort
-moony
-moop
-Moor
-moor
-moorage
-moorball
-moorband
-moorberry
-moorbird
-moorburn
-moorburner
-moorburning
-Moore
-moorflower
-moorfowl
-mooring
-Moorish
-moorish
-moorishly
-moorishness
-moorland
-moorlander
-Moorman
-moorman
-moorn
-moorpan
-moors
-Moorship
-moorsman
-moorstone
-moortetter
-moorup
-moorwort
-moory
-moosa
-moose
-mooseberry
-moosebird
-moosebush
-moosecall
-mooseflower
-moosehood
-moosemise
-moosetongue
-moosewob
-moosewood
-moosey
-moost
-moot
-mootable
-mooter
-mooth
-mooting
-mootman
-mootstead
-mootworthy
-mop
-Mopan
-mopane
-mopboard
-mope
-moper
-moph
-mophead
-mopheaded
-moping
-mopingly
-mopish
-mopishly
-mopishness
-mopla
-mopper
-moppet
-moppy
-mopstick
-mopsy
-mopus
-Moquelumnan
-moquette
-Moqui
-mor
-mora
-Moraceae
-moraceous
-Moraea
-morainal
-moraine
-morainic
-moral
-morale
-moralism
-moralist
-moralistic
-moralistically
-morality
-moralization
-moralize
-moralizer
-moralizingly
-moralless
-morally
-moralness
-morals
-Moran
-morass
-morassic
-morassweed
-morassy
-morat
-morate
-moration
-moratoria
-moratorium
-moratory
-Moravian
-Moravianism
-Moravianized
-Moravid
-moravite
-moray
-morbid
-morbidity
-morbidize
-morbidly
-morbidness
-morbiferal
-morbiferous
-morbific
-morbifical
-morbifically
-morbify
-morbility
-morbillary
-morbilli
-morbilliform
-morbillous
-morcellate
-morcellated
-morcellation
-Morchella
-Morcote
-mordacious
-mordaciously
-mordacity
-mordancy
-mordant
-mordantly
-Mordella
-mordellid
-Mordellidae
-mordelloid
-mordenite
-mordent
-mordicate
-mordication
-mordicative
-mordore
-Mordv
-Mordva
-Mordvin
-Mordvinian
-more
-moreen
-morefold
-moreish
-morel
-morella
-morello
-morencite
-moreness
-morenita
-morenosite
-Moreote
-moreover
-morepork
-mores
-Moresque
-morfrey
-morg
-morga
-Morgan
-morgan
-Morgana
-morganatic
-morganatical
-morganatically
-morganic
-morganite
-morganize
-morgay
-morgen
-morgengift
-morgenstern
-morglay
-morgue
-moribund
-moribundity
-moribundly
-moric
-moriche
-moriform
-morigerate
-morigeration
-morigerous
-morigerously
-morigerousness
-morillon
-morin
-Morinaceae
-Morinda
-morindin
-morindone
-morinel
-Moringa
-Moringaceae
-moringaceous
-moringad
-Moringua
-moringuid
-Moringuidae
-moringuoid
-morion
-Moriori
-Moriscan
-Morisco
-Morisonian
-Morisonianism
-morkin
-morlop
-mormaor
-mormaordom
-mormaorship
-mormo
-Mormon
-mormon
-Mormondom
-Mormoness
-Mormonism
-Mormonist
-Mormonite
-Mormonweed
-Mormoops
-mormyr
-mormyre
-mormyrian
-mormyrid
-Mormyridae
-mormyroid
-Mormyrus
-morn
-morne
-morned
-morning
-morningless
-morningly
-mornings
-morningtide
-morningward
-mornless
-mornlike
-morntime
-mornward
-Moro
-moro
-moroc
-Moroccan
-Morocco
-morocco
-morocota
-morological
-morologically
-morologist
-morology
-moromancy
-moron
-moroncy
-morong
-moronic
-Moronidae
-moronism
-moronity
-moronry
-Moropus
-morosaurian
-morosauroid
-Morosaurus
-morose
-morosely
-moroseness
-morosis
-morosity
-moroxite
-morph
-morphallaxis
-morphea
-Morphean
-morpheme
-morphemic
-morphemics
-morphetic
-Morpheus
-morphew
-morphia
-morphiate
-morphic
-morphically
-morphinate
-morphine
-morphinic
-morphinism
-morphinist
-morphinization
-morphinize
-morphinomania
-morphinomaniac
-morphiomania
-morphiomaniac
-Morpho
-morphogenesis
-morphogenetic
-morphogenic
-morphogeny
-morphographer
-morphographic
-morphographical
-morphographist
-morphography
-morpholine
-morphologic
-morphological
-morphologically
-morphologist
-morphology
-morphometrical
-morphometry
-morphon
-morphonomic
-morphonomy
-morphophonemic
-morphophonemically
-morphophonemics
-morphophyly
-morphoplasm
-morphoplasmic
-morphosis
-morphotic
-morphotropic
-morphotropism
-morphotropy
-morphous
-Morrenian
-Morrhua
-morrhuate
-morrhuine
-morricer
-Morris
-morris
-Morrisean
-morrow
-morrowing
-morrowless
-morrowmass
-morrowspeech
-morrowtide
-morsal
-Morse
-morse
-morsel
-morselization
-morselize
-morsing
-morsure
-mort
-mortacious
-mortal
-mortalism
-mortalist
-mortality
-mortalize
-mortally
-mortalness
-mortalwise
-mortar
-mortarboard
-mortarize
-mortarless
-mortarlike
-mortarware
-mortary
-mortbell
-mortcloth
-mortersheen
-mortgage
-mortgageable
-mortgagee
-mortgagor
-morth
-morthwyrtha
-mortician
-mortier
-mortiferous
-mortiferously
-mortiferousness
-mortific
-mortification
-mortified
-mortifiedly
-mortifiedness
-mortifier
-mortify
-mortifying
-mortifyingly
-Mortimer
-mortise
-mortiser
-mortling
-mortmain
-mortmainer
-Morton
-mortuarian
-mortuary
-mortuous
-morula
-morular
-morulation
-morule
-moruloid
-Morus
-morvin
-morwong
-Mosaic
-mosaic
-Mosaical
-mosaical
-mosaically
-mosaicism
-mosaicist
-Mosaicity
-Mosaism
-Mosaist
-mosaist
-mosandrite
-mosasaur
-Mosasauri
-Mosasauria
-mosasaurian
-mosasaurid
-Mosasauridae
-mosasauroid
-Mosasaurus
-Mosatenan
-moschate
-moschatel
-moschatelline
-Moschi
-Moschidae
-moschiferous
-Moschinae
-moschine
-Moschus
-Moscow
-Mose
-Moselle
-Moses
-mosesite
-Mosetena
-mosette
-mosey
-Mosgu
-moskeneer
-mosker
-Moslem
-Moslemah
-Moslemic
-Moslemin
-Moslemism
-Moslemite
-Moslemize
-moslings
-mosque
-mosquelet
-mosquish
-mosquital
-Mosquito
-mosquito
-mosquitobill
-mosquitocidal
-mosquitocide
-mosquitoey
-mosquitoish
-mosquitoproof
-moss
-mossback
-mossberry
-mossbunker
-mossed
-mosser
-mossery
-mossful
-mosshead
-Mossi
-mossiness
-mossless
-mosslike
-mosstrooper
-mosstroopery
-mosstrooping
-mosswort
-mossy
-mossyback
-most
-moste
-Mosting
-mostlike
-mostlings
-mostly
-mostness
-Mosul
-Mosur
-mot
-Motacilla
-motacillid
-Motacillidae
-Motacillinae
-motacilline
-motatorious
-motatory
-Motazilite
-mote
-moted
-motel
-moteless
-moter
-motet
-motettist
-motey
-moth
-mothed
-mother
-motherdom
-mothered
-motherer
-mothergate
-motherhood
-motheriness
-mothering
-motherkin
-motherland
-motherless
-motherlessness
-motherlike
-motherliness
-motherling
-motherly
-mothership
-mothersome
-motherward
-motherwise
-motherwort
-mothery
-mothless
-mothlike
-mothproof
-mothworm
-mothy
-motif
-motific
-motile
-motility
-motion
-motionable
-motional
-motionless
-motionlessly
-motionlessness
-motitation
-motivate
-motivation
-motivational
-motive
-motiveless
-motivelessly
-motivelessness
-motiveness
-motivity
-motley
-motleyness
-motmot
-motofacient
-motograph
-motographic
-motomagnetic
-motoneuron
-motophone
-motor
-motorable
-motorboat
-motorboatman
-motorbus
-motorcab
-motorcade
-motorcar
-motorcycle
-motorcyclist
-motordom
-motordrome
-motored
-motorial
-motoric
-motoring
-motorism
-motorist
-motorium
-motorization
-motorize
-motorless
-motorman
-motorneer
-motorphobe
-motorphobia
-motorphobiac
-motorway
-motory
-Motozintlec
-Motozintleca
-motricity
-Mott
-mott
-motte
-mottle
-mottled
-mottledness
-mottlement
-mottler
-mottling
-motto
-mottoed
-mottoless
-mottolike
-mottramite
-motyka
-mou
-moucharaby
-mouchardism
-mouche
-mouchrabieh
-moud
-moudie
-moudieman
-moudy
-mouflon
-Mougeotia
-Mougeotiaceae
-mouillation
-mouille
-mouillure
-moujik
-moul
-mould
-moulded
-moule
-moulin
-moulinage
-moulinet
-moulleen
-moulrush
-mouls
-moulter
-mouly
-mound
-moundiness
-moundlet
-moundwork
-moundy
-mount
-mountable
-mountably
-mountain
-mountained
-mountaineer
-mountainet
-mountainette
-mountainless
-mountainlike
-mountainous
-mountainously
-mountainousness
-mountainside
-mountaintop
-mountainward
-mountainwards
-mountainy
-mountant
-mountebank
-mountebankery
-mountebankish
-mountebankism
-mountebankly
-mounted
-mounter
-Mountie
-mounting
-mountingly
-mountlet
-mounture
-moup
-mourn
-mourner
-mourneress
-mournful
-mournfully
-mournfulness
-mourning
-mourningly
-mournival
-mournsome
-mouse
-mousebane
-mousebird
-mousefish
-mousehawk
-mousehole
-mousehound
-Mouseion
-mousekin
-mouselet
-mouselike
-mouseproof
-mouser
-mousery
-mouseship
-mousetail
-mousetrap
-mouseweb
-mousey
-mousily
-mousiness
-mousing
-mousingly
-mousle
-mousmee
-Mousoni
-mousquetaire
-mousse
-Mousterian
-moustoc
-mousy
-mout
-moutan
-mouth
-mouthable
-mouthbreeder
-mouthed
-mouther
-mouthful
-mouthily
-mouthiness
-mouthing
-mouthingly
-mouthishly
-mouthless
-mouthlike
-mouthpiece
-mouthroot
-mouthwash
-mouthwise
-mouthy
-mouton
-moutonnee
-mouzah
-mouzouna
-movability
-movable
-movableness
-movably
-movant
-move
-moveability
-moveableness
-moveably
-moveless
-movelessly
-movelessness
-movement
-mover
-movie
-moviedom
-movieize
-movieland
-moving
-movingly
-movingness
-mow
-mowable
-mowana
-mowburn
-mowburnt
-mowch
-mowcht
-mower
-mowha
-mowie
-mowing
-mowland
-mown
-mowra
-mowrah
-mowse
-mowstead
-mowt
-mowth
-moxa
-moxieberry
-Moxo
-moy
-moyen
-moyenless
-moyenne
-moyite
-moyle
-moyo
-Mozambican
-mozambique
-Mozarab
-Mozarabian
-Mozarabic
-Mozartean
-mozemize
-mozing
-mozzetta
-Mpangwe
-Mpondo
-mpret
-Mr
-Mrs
-Mru
-mu
-muang
-mubarat
-mucago
-mucaro
-mucedin
-mucedinaceous
-mucedine
-mucedinous
-much
-muchfold
-muchly
-muchness
-mucic
-mucid
-mucidness
-muciferous
-mucific
-muciform
-mucigen
-mucigenous
-mucilage
-mucilaginous
-mucilaginously
-mucilaginousness
-mucin
-mucinogen
-mucinoid
-mucinous
-muciparous
-mucivore
-mucivorous
-muck
-muckender
-Mucker
-mucker
-muckerish
-muckerism
-mucket
-muckiness
-muckite
-muckle
-muckluck
-muckman
-muckment
-muckmidden
-muckna
-muckrake
-muckraker
-mucksweat
-mucksy
-muckthrift
-muckweed
-muckworm
-mucky
-mucluc
-mucocele
-mucocellulose
-mucocellulosic
-mucocutaneous
-mucodermal
-mucofibrous
-mucoflocculent
-mucoid
-mucomembranous
-muconic
-mucoprotein
-mucopurulent
-mucopus
-mucor
-Mucoraceae
-mucoraceous
-Mucorales
-mucorine
-mucorioid
-mucormycosis
-mucorrhea
-mucosa
-mucosal
-mucosanguineous
-mucose
-mucoserous
-mucosity
-mucosocalcareous
-mucosogranular
-mucosopurulent
-mucososaccharine
-mucous
-mucousness
-mucro
-mucronate
-mucronately
-mucronation
-mucrones
-mucroniferous
-mucroniform
-mucronulate
-mucronulatous
-muculent
-Mucuna
-mucus
-mucusin
-mud
-mudar
-mudbank
-mudcap
-mudd
-mudde
-mudden
-muddify
-muddily
-muddiness
-mudding
-muddish
-muddle
-muddlebrained
-muddledom
-muddlehead
-muddleheaded
-muddleheadedness
-muddlement
-muddleproof
-muddler
-muddlesome
-muddlingly
-muddy
-muddybrained
-muddybreast
-muddyheaded
-mudee
-Mudejar
-mudfish
-mudflow
-mudguard
-mudhead
-mudhole
-mudhopper
-mudir
-mudiria
-mudland
-mudlark
-mudlarker
-mudless
-mudproof
-mudra
-mudsill
-mudskipper
-mudslinger
-mudslinging
-mudspate
-mudstain
-mudstone
-mudsucker
-mudtrack
-mudweed
-mudwort
-Muehlenbeckia
-muermo
-muezzin
-muff
-muffed
-muffet
-muffetee
-muffin
-muffineer
-muffish
-muffishness
-muffle
-muffled
-muffleman
-muffler
-mufflin
-muffy
-mufti
-mufty
-mug
-muga
-mugearite
-mugful
-mugg
-mugger
-mugget
-muggily
-mugginess
-muggins
-muggish
-muggles
-Muggletonian
-Muggletonianism
-muggy
-mughouse
-mugience
-mugiency
-mugient
-Mugil
-Mugilidae
-mugiliform
-mugiloid
-mugweed
-mugwort
-mugwump
-mugwumpery
-mugwumpian
-mugwumpism
-muhammadi
-Muharram
-Muhlenbergia
-muid
-Muilla
-muir
-muirburn
-muircock
-muirfowl
-muishond
-muist
-mujtahid
-Mukden
-mukluk
-Mukri
-muktar
-muktatma
-mukti
-mulaprakriti
-mulatta
-mulatto
-mulattoism
-mulattress
-mulberry
-mulch
-mulcher
-Mulciber
-Mulcibirian
-mulct
-mulctable
-mulctary
-mulctation
-mulctative
-mulctatory
-mulctuary
-mulder
-mule
-muleback
-mulefoot
-mulefooted
-muleman
-muleta
-muleteer
-muletress
-muletta
-mulewort
-muley
-mulga
-muliebral
-muliebria
-muliebrile
-muliebrity
-muliebrous
-mulier
-mulierine
-mulierose
-mulierosity
-mulish
-mulishly
-mulishness
-mulism
-mulita
-mulk
-mull
-mulla
-mullah
-mullar
-mullein
-mullenize
-muller
-Mullerian
-mullet
-mulletry
-mullets
-mulley
-mullid
-Mullidae
-mulligan
-mulligatawny
-mulligrubs
-mullion
-mullite
-mullock
-mullocker
-mullocky
-mulloid
-mulloway
-mulmul
-mulse
-mulsify
-mult
-multangular
-multangularly
-multangularness
-multangulous
-multangulum
-Multani
-multanimous
-multarticulate
-multeity
-multiangular
-multiareolate
-multiarticular
-multiarticulate
-multiarticulated
-multiaxial
-multiblade
-multibladed
-multibranched
-multibranchiate
-multibreak
-multicamerate
-multicapitate
-multicapsular
-multicarinate
-multicarinated
-multicellular
-multicentral
-multicentric
-multicharge
-multichord
-multichrome
-multiciliate
-multiciliated
-multicipital
-multicircuit
-multicoccous
-multicoil
-multicolor
-multicolored
-multicolorous
-multicomponent
-multiconductor
-multiconstant
-multicore
-multicorneal
-multicostate
-multicourse
-multicrystalline
-multicuspid
-multicuspidate
-multicycle
-multicylinder
-multicylindered
-multidentate
-multidenticulate
-multidenticulated
-multidigitate
-multidimensional
-multidirectional
-multidisperse
-multiengine
-multiengined
-multiexhaust
-multifaced
-multifaceted
-multifactorial
-multifamilial
-multifarious
-multifariously
-multifariousness
-multiferous
-multifetation
-multifibered
-multifid
-multifidly
-multifidous
-multifidus
-multifilament
-multifistular
-multiflagellate
-multiflagellated
-multiflash
-multiflorous
-multiflow
-multiflue
-multifocal
-multifoil
-multifoiled
-multifold
-multifoliate
-multifoliolate
-multiform
-multiformed
-multiformity
-multifurcate
-multiganglionic
-multigap
-multigranulate
-multigranulated
-Multigraph
-multigraph
-multigrapher
-multiguttulate
-multigyrate
-multihead
-multihearth
-multihued
-multijet
-multijugate
-multijugous
-multilaciniate
-multilamellar
-multilamellate
-multilamellous
-multilaminar
-multilaminate
-multilaminated
-multilateral
-multilaterally
-multilighted
-multilineal
-multilinear
-multilingual
-multilinguist
-multilirate
-multiliteral
-multilobar
-multilobate
-multilobe
-multilobed
-multilobular
-multilobulate
-multilobulated
-multilocation
-multilocular
-multiloculate
-multiloculated
-multiloquence
-multiloquent
-multiloquious
-multiloquous
-multiloquy
-multimacular
-multimammate
-multimarble
-multimascular
-multimedial
-multimetalic
-multimetallism
-multimetallist
-multimillion
-multimillionaire
-multimodal
-multimodality
-multimolecular
-multimotor
-multimotored
-multinational
-multinervate
-multinervose
-multinodal
-multinodate
-multinodous
-multinodular
-multinomial
-multinominal
-multinominous
-multinuclear
-multinucleate
-multinucleated
-multinucleolar
-multinucleolate
-multinucleolated
-multiovular
-multiovulate
-multipara
-multiparient
-multiparity
-multiparous
-multipartisan
-multipartite
-multiped
-multiperforate
-multiperforated
-multipersonal
-multiphase
-multiphaser
-multiphotography
-multipinnate
-multiplane
-multiple
-multiplepoinding
-multiplet
-multiplex
-multipliable
-multipliableness
-multiplicability
-multiplicable
-multiplicand
-multiplicate
-multiplication
-multiplicational
-multiplicative
-multiplicatively
-multiplicator
-multiplicity
-multiplier
-multiply
-multiplying
-multipointed
-multipolar
-multipole
-multiported
-multipotent
-multipresence
-multipresent
-multiradial
-multiradiate
-multiradiated
-multiradicate
-multiradicular
-multiramified
-multiramose
-multiramous
-multirate
-multireflex
-multirooted
-multirotation
-multirotatory
-multisaccate
-multisacculate
-multisacculated
-multiscience
-multiseated
-multisect
-multisector
-multisegmental
-multisegmentate
-multisegmented
-multisensual
-multiseptate
-multiserial
-multiserially
-multiseriate
-multishot
-multisiliquous
-multisonous
-multispeed
-multispermous
-multispicular
-multispiculate
-multispindle
-multispinous
-multispiral
-multispired
-multistage
-multistaminate
-multistoried
-multistory
-multistratified
-multistratous
-multistriate
-multisulcate
-multisulcated
-multisyllabic
-multisyllability
-multisyllable
-multitarian
-multitentaculate
-multitheism
-multithreaded
-multititular
-multitoed
-multitoned
-multitube
-Multituberculata
-multituberculate
-multituberculated
-multituberculism
-multituberculy
-multitubular
-multitude
-multitudinal
-multitudinary
-multitudinism
-multitudinist
-multitudinistic
-multitudinosity
-multitudinous
-multitudinously
-multitudinousness
-multiturn
-multivagant
-multivalence
-multivalency
-multivalent
-multivalve
-multivalved
-multivalvular
-multivane
-multivariant
-multivarious
-multiversant
-multiverse
-multivibrator
-multivincular
-multivious
-multivocal
-multivocalness
-multivoiced
-multivolent
-multivoltine
-multivolumed
-multivorous
-multocular
-multum
-multungulate
-multure
-multurer
-mum
-mumble
-mumblebee
-mumblement
-mumbler
-mumbling
-mumblingly
-mummer
-mummery
-mummichog
-mummick
-mummied
-mummification
-mummiform
-mummify
-mumming
-mummy
-mummydom
-mummyhood
-mummylike
-mumness
-mump
-mumper
-mumphead
-mumpish
-mumpishly
-mumpishness
-mumps
-mumpsimus
-mumruffin
-mun
-Munandi
-Muncerian
-munch
-Munchausenism
-Munchausenize
-muncheel
-muncher
-munchet
-mund
-Munda
-mundane
-mundanely
-mundaneness
-mundanism
-mundanity
-Mundari
-mundatory
-mundic
-mundificant
-mundification
-mundifier
-mundify
-mundil
-mundivagant
-mundle
-mung
-munga
-munge
-mungey
-mungo
-mungofa
-munguba
-mungy
-Munia
-Munich
-Munichism
-municipal
-municipalism
-municipalist
-municipality
-municipalization
-municipalize
-municipalizer
-municipally
-municipium
-munific
-munificence
-munificency
-munificent
-munificently
-munificentness
-muniment
-munition
-munitionary
-munitioneer
-munitioner
-munitions
-munity
-munj
-munjeet
-munjistin
-munnion
-Munnopsidae
-Munnopsis
-Munsee
-munshi
-munt
-Muntiacus
-muntin
-Muntingia
-muntjac
-Munychia
-Munychian
-Munychion
-Muong
-Muphrid
-Mura
-mura
-Muradiyah
-Muraena
-Muraenidae
-muraenoid
-murage
-mural
-muraled
-muralist
-murally
-Muran
-Muranese
-murasakite
-Murat
-Muratorian
-murchy
-murder
-murderer
-murderess
-murdering
-murderingly
-murderish
-murderment
-murderous
-murderously
-murderousness
-murdrum
-mure
-murenger
-murex
-murexan
-murexide
-murga
-murgavi
-murgeon
-muriate
-muriated
-muriatic
-muricate
-muricid
-Muricidae
-muriciform
-muricine
-muricoid
-muriculate
-murid
-Muridae
-muridism
-Muriel
-muriform
-muriformly
-Murillo
-Murinae
-murine
-murinus
-muriti
-murium
-murk
-murkily
-murkiness
-murkish
-murkly
-murkness
-murksome
-murky
-murlin
-murly
-Murmi
-murmur
-murmuration
-murmurator
-murmurer
-murmuring
-murmuringly
-murmurish
-murmurless
-murmurlessly
-murmurous
-murmurously
-muromontite
-Murph
-murphy
-murra
-murrain
-Murray
-Murraya
-murre
-murrelet
-murrey
-murrhine
-murrina
-murrnong
-murshid
-Murthy
-murumuru
-Murut
-muruxi
-murva
-murza
-Murzim
-Mus
-Musa
-Musaceae
-musaceous
-Musaeus
-musal
-Musales
-Musalmani
-musang
-musar
-Musca
-muscade
-muscadel
-muscadine
-Muscadinia
-muscardine
-Muscardinidae
-Muscardinus
-Muscari
-muscariform
-muscarine
-muscat
-muscatel
-muscatorium
-Musci
-Muscicapa
-Muscicapidae
-muscicapine
-muscicide
-muscicole
-muscicoline
-muscicolous
-muscid
-Muscidae
-musciform
-Muscinae
-muscle
-muscled
-muscleless
-musclelike
-muscling
-muscly
-Muscogee
-muscoid
-Muscoidea
-muscologic
-muscological
-muscologist
-muscology
-muscone
-muscose
-muscoseness
-muscosity
-muscot
-muscovadite
-muscovado
-Muscovi
-Muscovite
-muscovite
-Muscovitic
-muscovitization
-muscovitize
-muscovy
-muscular
-muscularity
-muscularize
-muscularly
-musculation
-musculature
-muscule
-musculin
-musculoarterial
-musculocellular
-musculocutaneous
-musculodermic
-musculoelastic
-musculofibrous
-musculointestinal
-musculoligamentous
-musculomembranous
-musculopallial
-musculophrenic
-musculospinal
-musculospiral
-musculotegumentary
-musculotendinous
-Muse
-muse
-mused
-museful
-musefully
-museist
-museless
-muselike
-museographist
-museography
-museologist
-museology
-muser
-musery
-musette
-museum
-museumize
-Musgu
-mush
-musha
-mushaa
-Mushabbihite
-mushed
-musher
-mushhead
-mushheaded
-mushheadedness
-mushily
-mushiness
-mushla
-mushmelon
-mushrebiyeh
-mushroom
-mushroomer
-mushroomic
-mushroomlike
-mushroomy
-mushru
-mushy
-music
-musical
-musicale
-musicality
-musicalization
-musicalize
-musically
-musicalness
-musicate
-musician
-musiciana
-musicianer
-musicianly
-musicianship
-musicker
-musicless
-musiclike
-musicmonger
-musico
-musicoartistic
-musicodramatic
-musicofanatic
-musicographer
-musicography
-musicological
-musicologist
-musicologue
-musicology
-musicomania
-musicomechanical
-musicophilosophical
-musicophobia
-musicophysical
-musicopoetic
-musicotherapy
-musicproof
-musie
-musily
-musimon
-musing
-musingly
-musk
-muskat
-muskeg
-muskeggy
-muskellunge
-musket
-musketade
-musketeer
-musketlike
-musketoon
-musketproof
-musketry
-muskflower
-Muskhogean
-muskie
-muskiness
-muskish
-musklike
-muskmelon
-Muskogee
-muskrat
-muskroot
-Muskwaki
-muskwood
-musky
-muslin
-muslined
-muslinet
-musnud
-Musophaga
-Musophagi
-Musophagidae
-musophagine
-musquash
-musquashroot
-musquashweed
-musquaspen
-musquaw
-musrol
-muss
-mussable
-mussably
-Mussaenda
-mussal
-mussalchee
-mussel
-musseled
-musseler
-mussily
-mussiness
-mussitate
-mussitation
-mussuk
-Mussulman
-Mussulmanic
-Mussulmanish
-Mussulmanism
-Mussulwoman
-mussurana
-mussy
-must
-mustache
-mustached
-mustachial
-mustachio
-mustachioed
-mustafina
-Mustahfiz
-mustang
-mustanger
-mustard
-mustarder
-mustee
-Mustela
-mustelid
-Mustelidae
-musteline
-mustelinous
-musteloid
-Mustelus
-muster
-musterable
-musterdevillers
-musterer
-mustermaster
-mustify
-mustily
-mustiness
-mustnt
-musty
-muta
-Mutabilia
-mutability
-mutable
-mutableness
-mutably
-mutafacient
-mutage
-mutagenic
-mutant
-mutarotate
-mutarotation
-mutase
-mutate
-mutation
-mutational
-mutationally
-mutationism
-mutationist
-mutative
-mutatory
-mutawalli
-Mutazala
-mutch
-mute
-mutedly
-mutely
-muteness
-Muter
-mutesarif
-mutescence
-mutessarifat
-muth
-muthmannite
-muthmassel
-mutic
-muticous
-mutilate
-mutilation
-mutilative
-mutilator
-mutilatory
-Mutilla
-mutillid
-Mutillidae
-mutilous
-mutineer
-mutinous
-mutinously
-mutinousness
-mutiny
-Mutisia
-Mutisiaceae
-mutism
-mutist
-mutistic
-mutive
-mutivity
-mutoscope
-mutoscopic
-mutsje
-mutsuddy
-mutt
-mutter
-mutterer
-muttering
-mutteringly
-mutton
-muttonbird
-muttonchop
-muttonfish
-muttonhead
-muttonheaded
-muttonhood
-muttonmonger
-muttonwood
-muttony
-mutual
-mutualism
-mutualist
-mutualistic
-mutuality
-mutualization
-mutualize
-mutually
-mutualness
-mutuary
-mutuatitious
-mutulary
-mutule
-mutuum
-mux
-Muysca
-muyusa
-muzhik
-Muzo
-muzz
-muzzily
-muzziness
-muzzle
-muzzler
-muzzlewood
-muzzy
-Mwa
-my
-Mya
-Myacea
-myal
-myalgia
-myalgic
-myalism
-myall
-Myaria
-myarian
-myasthenia
-myasthenic
-myatonia
-myatonic
-myatony
-myatrophy
-mycele
-mycelia
-mycelial
-mycelian
-mycelioid
-mycelium
-myceloid
-Mycenaean
-Mycetes
-mycetism
-mycetocyte
-mycetogenesis
-mycetogenetic
-mycetogenic
-mycetogenous
-mycetoid
-mycetological
-mycetology
-mycetoma
-mycetomatous
-Mycetophagidae
-mycetophagous
-mycetophilid
-Mycetophilidae
-mycetous
-Mycetozoa
-mycetozoan
-mycetozoon
-Mycobacteria
-Mycobacteriaceae
-Mycobacterium
-mycocecidium
-mycocyte
-mycoderm
-mycoderma
-mycodermatoid
-mycodermatous
-mycodermic
-mycodermitis
-mycodesmoid
-mycodomatium
-mycogastritis
-Mycogone
-mycohaemia
-mycohemia
-mycoid
-mycologic
-mycological
-mycologically
-mycologist
-mycologize
-mycology
-mycomycete
-Mycomycetes
-mycomycetous
-mycomyringitis
-mycophagist
-mycophagous
-mycophagy
-mycophyte
-Mycoplana
-mycoplasm
-mycoplasmic
-mycoprotein
-mycorhiza
-mycorhizal
-mycorrhizal
-mycose
-mycosin
-mycosis
-mycosozin
-Mycosphaerella
-Mycosphaerellaceae
-mycosterol
-mycosymbiosis
-mycotic
-mycotrophic
-Mycteria
-mycteric
-mycterism
-Myctodera
-myctophid
-Myctophidae
-Myctophum
-Mydaidae
-mydaleine
-mydatoxine
-Mydaus
-mydine
-mydriasine
-mydriasis
-mydriatic
-mydriatine
-myectomize
-myectomy
-myectopia
-myectopy
-myelalgia
-myelapoplexy
-myelasthenia
-myelatrophy
-myelauxe
-myelemia
-myelencephalic
-myelencephalon
-myelencephalous
-myelic
-myelin
-myelinate
-myelinated
-myelination
-myelinic
-myelinization
-myelinogenesis
-myelinogenetic
-myelinogeny
-myelitic
-myelitis
-myeloblast
-myeloblastic
-myelobrachium
-myelocele
-myelocerebellar
-myelocoele
-myelocyst
-myelocystic
-myelocystocele
-myelocyte
-myelocythaemia
-myelocythemia
-myelocytic
-myelocytosis
-myelodiastasis
-myeloencephalitis
-myeloganglitis
-myelogenesis
-myelogenetic
-myelogenous
-myelogonium
-myeloic
-myeloid
-myelolymphangioma
-myelolymphocyte
-myeloma
-myelomalacia
-myelomatoid
-myelomatosis
-myelomenia
-myelomeningitis
-myelomeningocele
-myelomere
-myelon
-myelonal
-myeloneuritis
-myelonic
-myeloparalysis
-myelopathic
-myelopathy
-myelopetal
-myelophthisis
-myeloplast
-myeloplastic
-myeloplax
-myeloplegia
-myelopoiesis
-myelopoietic
-myelorrhagia
-myelorrhaphy
-myelosarcoma
-myelosclerosis
-myelospasm
-myelospongium
-myelosyphilis
-myelosyphilosis
-myelosyringosis
-myelotherapy
-Myelozoa
-myelozoan
-myentasis
-myenteric
-myenteron
-myesthesia
-mygale
-mygalid
-mygaloid
-Myiarchus
-myiasis
-myiferous
-myiodesopsia
-myiosis
-myitis
-mykiss
-myliobatid
-Myliobatidae
-myliobatine
-myliobatoid
-Mylodon
-mylodont
-Mylodontidae
-mylohyoid
-mylohyoidean
-mylonite
-mylonitic
-Mymar
-mymarid
-Mymaridae
-myna
-Mynheer
-mynpacht
-mynpachtbrief
-myoalbumin
-myoalbumose
-myoatrophy
-myoblast
-myoblastic
-myocardiac
-myocardial
-myocardiogram
-myocardiograph
-myocarditic
-myocarditis
-myocardium
-myocele
-myocellulitis
-myoclonic
-myoclonus
-myocoele
-myocoelom
-myocolpitis
-myocomma
-myocyte
-myodegeneration
-Myodes
-myodiastasis
-myodynamia
-myodynamic
-myodynamics
-myodynamiometer
-myodynamometer
-myoedema
-myoelectric
-myoendocarditis
-myoepicardial
-myoepithelial
-myofibril
-myofibroma
-myogen
-myogenesis
-myogenetic
-myogenic
-myogenous
-myoglobin
-myoglobulin
-myogram
-myograph
-myographer
-myographic
-myographical
-myographist
-myography
-myohematin
-myoid
-myoidema
-myokinesis
-myolemma
-myolipoma
-myoliposis
-myologic
-myological
-myologist
-myology
-myolysis
-myoma
-myomalacia
-myomancy
-myomantic
-myomatous
-myomectomy
-myomelanosis
-myomere
-myometritis
-myometrium
-myomohysterectomy
-myomorph
-Myomorpha
-myomorphic
-myomotomy
-myoneme
-myoneural
-myoneuralgia
-myoneurasthenia
-myoneure
-myoneuroma
-myoneurosis
-myonosus
-myopachynsis
-myoparalysis
-myoparesis
-myopathia
-myopathic
-myopathy
-myope
-myoperitonitis
-myophan
-myophore
-myophorous
-myophysical
-myophysics
-myopia
-myopic
-myopical
-myopically
-myoplasm
-myoplastic
-myoplasty
-myopolar
-Myoporaceae
-myoporaceous
-myoporad
-Myoporum
-myoproteid
-myoprotein
-myoproteose
-myops
-myopy
-myorrhaphy
-myorrhexis
-myosalpingitis
-myosarcoma
-myosarcomatous
-myosclerosis
-myoscope
-myoseptum
-myosin
-myosinogen
-myosinose
-myosis
-myositic
-myositis
-myosote
-Myosotis
-myospasm
-myospasmia
-Myosurus
-myosuture
-myosynizesis
-myotacismus
-Myotalpa
-Myotalpinae
-myotasis
-myotenotomy
-myothermic
-myotic
-myotome
-myotomic
-myotomy
-myotonia
-myotonic
-myotonus
-myotony
-myotrophy
-myowun
-Myoxidae
-myoxine
-Myoxus
-Myra
-myrabalanus
-myrabolam
-myrcene
-Myrcia
-myrcia
-myriacanthous
-myriacoulomb
-myriad
-myriaded
-myriadfold
-myriadly
-myriadth
-myriagram
-myriagramme
-myrialiter
-myrialitre
-myriameter
-myriametre
-Myrianida
-myriapod
-Myriapoda
-myriapodan
-myriapodous
-myriarch
-myriarchy
-myriare
-Myrica
-myrica
-Myricaceae
-myricaceous
-Myricales
-myricetin
-myricin
-Myrick
-myricyl
-myricylic
-Myrientomata
-myringa
-myringectomy
-myringitis
-myringodectomy
-myringodermatitis
-myringomycosis
-myringoplasty
-myringotome
-myringotomy
-myriological
-myriologist
-myriologue
-myriophyllite
-myriophyllous
-Myriophyllum
-Myriopoda
-myriopodous
-myriorama
-myrioscope
-myriosporous
-myriotheism
-Myriotrichia
-Myriotrichiaceae
-myriotrichiaceous
-myristate
-myristic
-Myristica
-myristica
-Myristicaceae
-myristicaceous
-Myristicivora
-myristicivorous
-myristin
-myristone
-Myrmecia
-Myrmecobiinae
-myrmecobine
-Myrmecobius
-myrmecochorous
-myrmecochory
-myrmecoid
-myrmecoidy
-myrmecological
-myrmecologist
-myrmecology
-Myrmecophaga
-Myrmecophagidae
-myrmecophagine
-myrmecophagoid
-myrmecophagous
-myrmecophile
-myrmecophilism
-myrmecophilous
-myrmecophily
-myrmecophobic
-myrmecophyte
-myrmecophytic
-myrmekite
-Myrmeleon
-Myrmeleonidae
-Myrmeleontidae
-Myrmica
-myrmicid
-Myrmicidae
-myrmicine
-myrmicoid
-Myrmidon
-Myrmidonian
-myrmotherine
-myrobalan
-Myron
-myron
-myronate
-myronic
-myrosin
-myrosinase
-Myrothamnaceae
-myrothamnaceous
-Myrothamnus
-Myroxylon
-myrrh
-myrrhed
-myrrhic
-myrrhine
-Myrrhis
-myrrhol
-myrrhophore
-myrrhy
-Myrsinaceae
-myrsinaceous
-myrsinad
-Myrsiphyllum
-Myrtaceae
-myrtaceous
-myrtal
-Myrtales
-myrtiform
-Myrtilus
-myrtle
-myrtleberry
-myrtlelike
-myrtol
-Myrtus
-mysel
-myself
-mysell
-Mysian
-mysid
-Mysidacea
-Mysidae
-mysidean
-Mysis
-mysogynism
-mysoid
-mysophobia
-Mysore
-mysosophist
-mysost
-myst
-mystacial
-Mystacocete
-Mystacoceti
-mystagogic
-mystagogical
-mystagogically
-mystagogue
-mystagogy
-mystax
-mysterial
-mysteriarch
-mysteriosophic
-mysteriosophy
-mysterious
-mysteriously
-mysteriousness
-mysterize
-mystery
-mystes
-mystic
-mystical
-mysticality
-mystically
-mysticalness
-Mysticete
-mysticete
-Mysticeti
-mysticetous
-mysticism
-mysticity
-mysticize
-mysticly
-mystific
-mystifically
-mystification
-mystificator
-mystificatory
-mystifiedly
-mystifier
-mystify
-mystifyingly
-mytacism
-myth
-mythical
-mythicalism
-mythicality
-mythically
-mythicalness
-mythicism
-mythicist
-mythicize
-mythicizer
-mythification
-mythify
-mythism
-mythist
-mythize
-mythland
-mythmaker
-mythmaking
-mythoclast
-mythoclastic
-mythogenesis
-mythogonic
-mythogony
-mythographer
-mythographist
-mythography
-mythogreen
-mythoheroic
-mythohistoric
-mythologema
-mythologer
-mythological
-mythologically
-mythologist
-mythologize
-mythologizer
-mythologue
-mythology
-mythomania
-mythomaniac
-mythometer
-mythonomy
-mythopastoral
-mythopoeic
-mythopoeism
-mythopoeist
-mythopoem
-mythopoesis
-mythopoesy
-mythopoet
-mythopoetic
-mythopoetize
-mythopoetry
-mythos
-mythus
-Mytilacea
-mytilacean
-mytilaceous
-Mytiliaspis
-mytilid
-Mytilidae
-mytiliform
-mytiloid
-mytilotoxine
-Mytilus
-myxa
-myxadenitis
-myxadenoma
-myxaemia
-myxamoeba
-myxangitis
-myxasthenia
-myxedema
-myxedematoid
-myxedematous
-myxedemic
-myxemia
-Myxine
-Myxinidae
-myxinoid
-Myxinoidei
-myxo
-Myxobacteria
-Myxobacteriaceae
-myxobacteriaceous
-Myxobacteriales
-myxoblastoma
-myxochondroma
-myxochondrosarcoma
-Myxococcus
-myxocystoma
-myxocyte
-myxoenchondroma
-myxofibroma
-myxofibrosarcoma
-myxoflagellate
-myxogaster
-Myxogasteres
-Myxogastrales
-Myxogastres
-myxogastric
-myxogastrous
-myxoglioma
-myxoid
-myxoinoma
-myxolipoma
-myxoma
-myxomatosis
-myxomatous
-Myxomycetales
-myxomycete
-Myxomycetes
-myxomycetous
-myxomyoma
-myxoneuroma
-myxopapilloma
-Myxophyceae
-myxophycean
-Myxophyta
-myxopod
-Myxopoda
-myxopodan
-myxopodium
-myxopodous
-myxopoiesis
-myxorrhea
-myxosarcoma
-Myxospongiae
-myxospongian
-Myxospongida
-myxospore
-Myxosporidia
-myxosporidian
-Myxosporidiida
-Myxosporium
-myxosporous
-Myxothallophyta
-myxotheca
-Myzodendraceae
-myzodendraceous
-Myzodendron
-Myzomyia
-myzont
-Myzontes
-Myzostoma
-Myzostomata
-myzostomatous
-myzostome
-myzostomid
-Myzostomida
-Myzostomidae
-myzostomidan
-myzostomous
-N
-n
-na
-naa
-naam
-Naaman
-Naassenes
-nab
-nabak
-Nabal
-Nabalism
-Nabalite
-Nabalitic
-Nabaloi
-Nabalus
-Nabataean
-Nabatean
-Nabathaean
-Nabathean
-Nabathite
-nabber
-Nabby
-nabk
-nabla
-nable
-nabob
-nabobery
-nabobess
-nabobical
-nabobish
-nabobishly
-nabobism
-nabobry
-nabobship
-Nabothian
-nabs
-Nabu
-nacarat
-nacarine
-nace
-nacelle
-nach
-nachani
-Nachitoch
-Nachitoches
-Nachschlag
-Nacionalista
-nacket
-nacre
-nacred
-nacreous
-nacrine
-nacrite
-nacrous
-nacry
-nadder
-Nadeem
-nadir
-nadiral
-nadorite
-nae
-naebody
-naegate
-naegates
-nael
-Naemorhedinae
-naemorhedine
-Naemorhedus
-naether
-naething
-nag
-Naga
-naga
-nagaika
-nagana
-nagara
-Nagari
-nagatelite
-nagger
-naggin
-nagging
-naggingly
-naggingness
-naggish
-naggle
-naggly
-naggy
-naght
-nagkassar
-nagmaal
-nagman
-nagnag
-nagnail
-nagor
-nagsman
-nagster
-nagual
-nagualism
-nagualist
-nagyagite
-Nahanarvali
-Nahane
-Nahani
-Naharvali
-Nahor
-Nahua
-Nahuan
-Nahuatl
-Nahuatlac
-Nahuatlan
-Nahuatleca
-Nahuatlecan
-Nahum
-naiad
-Naiadaceae
-naiadaceous
-Naiadales
-Naiades
-naiant
-Naias
-naid
-naif
-naifly
-naig
-naigie
-naik
-nail
-nailbin
-nailbrush
-nailer
-naileress
-nailery
-nailhead
-nailing
-nailless
-naillike
-nailprint
-nailproof
-nailrod
-nailshop
-nailsick
-nailsmith
-nailwort
-naily
-Naim
-nain
-nainsel
-nainsook
-naio
-naipkin
-Nair
-nairy
-nais
-naish
-naissance
-naissant
-naither
-naive
-naively
-naiveness
-naivete
-naivety
-Naja
-nak
-nake
-naked
-nakedish
-nakedize
-nakedly
-nakedness
-nakedweed
-nakedwood
-naker
-nakhlite
-nakhod
-nakhoda
-Nakir
-nako
-Nakomgilisala
-nakong
-nakoo
-Nakula
-Nalita
-nallah
-nam
-Nama
-namability
-namable
-Namaqua
-namaqua
-Namaquan
-namaycush
-namaz
-namazlik
-Nambe
-namda
-name
-nameability
-nameable
-nameboard
-nameless
-namelessly
-namelessness
-nameling
-namely
-namer
-namesake
-naming
-nammad
-Nan
-nan
-Nana
-nana
-Nanaimo
-nanawood
-Nance
-Nancy
-nancy
-Nanda
-Nandi
-nandi
-Nandina
-nandine
-nandow
-nandu
-nane
-nanes
-nanga
-nanism
-nanization
-nankeen
-Nankin
-nankin
-Nanking
-Nankingese
-nannander
-nannandrium
-nannandrous
-Nannette
-nannoplankton
-Nanny
-nanny
-nannyberry
-nannybush
-nanocephalia
-nanocephalic
-nanocephalism
-nanocephalous
-nanocephalus
-nanocephaly
-nanoid
-nanomelia
-nanomelous
-nanomelus
-nanosoma
-nanosomia
-nanosomus
-nanpie
-nant
-Nanticoke
-nantle
-nantokite
-Nantz
-naological
-naology
-naometry
-Naomi
-Naos
-naos
-Naosaurus
-Naoto
-nap
-napa
-Napaea
-Napaean
-napal
-napalm
-nape
-napead
-napecrest
-napellus
-naperer
-napery
-naphtha
-naphthacene
-naphthalate
-naphthalene
-naphthaleneacetic
-naphthalenesulphonic
-naphthalenic
-naphthalenoid
-naphthalic
-naphthalidine
-naphthalin
-naphthaline
-naphthalization
-naphthalize
-naphthalol
-naphthamine
-naphthanthracene
-naphthene
-naphthenic
-naphthinduline
-naphthionate
-naphtho
-naphthoic
-naphthol
-naphtholate
-naphtholize
-naphtholsulphonate
-naphtholsulphonic
-naphthoquinone
-naphthoresorcinol
-naphthosalol
-naphthous
-naphthoxide
-naphthyl
-naphthylamine
-naphthylaminesulphonic
-naphthylene
-naphthylic
-naphtol
-Napierian
-napiform
-napkin
-napkining
-napless
-naplessness
-Napoleon
-napoleon
-Napoleonana
-Napoleonic
-Napoleonically
-Napoleonism
-Napoleonist
-Napoleonistic
-napoleonite
-Napoleonize
-napoo
-nappe
-napped
-napper
-nappiness
-napping
-nappishness
-nappy
-naprapath
-naprapathy
-napron
-napthionic
-napu
-nar
-Narcaciontes
-Narcaciontidae
-narceine
-narcism
-Narciss
-Narcissan
-narcissi
-Narcissine
-narcissism
-narcissist
-narcissistic
-Narcissus
-narcist
-narcistic
-narcoanalysis
-narcoanesthesia
-Narcobatidae
-Narcobatoidea
-Narcobatus
-narcohypnia
-narcohypnosis
-narcolepsy
-narcoleptic
-narcoma
-narcomania
-narcomaniac
-narcomaniacal
-narcomatous
-Narcomedusae
-narcomedusan
-narcose
-narcosis
-narcostimulant
-narcosynthesis
-narcotherapy
-narcotia
-narcotic
-narcotical
-narcotically
-narcoticalness
-narcoticism
-narcoticness
-narcotina
-narcotine
-narcotinic
-narcotism
-narcotist
-narcotization
-narcotize
-narcous
-nard
-nardine
-nardoo
-Nardus
-Naren
-Narendra
-nares
-Naresh
-narghile
-nargil
-narial
-naric
-narica
-naricorn
-nariform
-narine
-naringenin
-naringin
-nark
-narky
-narr
-narra
-Narraganset
-narras
-narratable
-narrate
-narrater
-narration
-narrational
-narrative
-narratively
-narrator
-narratory
-narratress
-narratrix
-narrawood
-narrow
-narrower
-narrowhearted
-narrowheartedness
-narrowingness
-narrowish
-narrowly
-narrowness
-narrowy
-narsarsukite
-narsinga
-narthecal
-Narthecium
-narthex
-narwhal
-narwhalian
-nary
-nasab
-nasal
-Nasalis
-nasalis
-nasalism
-nasality
-nasalization
-nasalize
-nasally
-nasalward
-nasalwards
-nasard
-Nascan
-Nascapi
-nascence
-nascency
-nascent
-nasch
-naseberry
-nasethmoid
-nash
-nashgab
-nashgob
-Nashim
-Nashira
-Nashua
-nasi
-nasial
-nasicorn
-Nasicornia
-nasicornous
-Nasiei
-nasiform
-nasilabial
-nasillate
-nasillation
-nasioalveolar
-nasiobregmatic
-nasioinial
-nasiomental
-nasion
-nasitis
-Naskhi
-nasoalveola
-nasoantral
-nasobasilar
-nasobronchial
-nasobuccal
-nasoccipital
-nasociliary
-nasoethmoidal
-nasofrontal
-nasolabial
-nasolachrymal
-nasological
-nasologist
-nasology
-nasomalar
-nasomaxillary
-nasonite
-nasoorbital
-nasopalatal
-nasopalatine
-nasopharyngeal
-nasopharyngitis
-nasopharynx
-nasoprognathic
-nasoprognathism
-nasorostral
-nasoscope
-nasoseptal
-nasosinuitis
-nasosinusitis
-nasosubnasal
-nasoturbinal
-nasrol
-Nassa
-Nassau
-Nassellaria
-nassellarian
-Nassidae
-nassology
-nast
-nastaliq
-nastic
-nastika
-nastily
-nastiness
-nasturtion
-nasturtium
-nasty
-Nasua
-nasus
-nasute
-nasuteness
-nasutiform
-nasutus
-nat
-natability
-nataka
-Natal
-natal
-Natalia
-Natalian
-Natalie
-natality
-nataloin
-natals
-natant
-natantly
-Nataraja
-natation
-natational
-natator
-natatorial
-natatorious
-natatorium
-natatory
-natch
-natchbone
-Natchez
-Natchezan
-Natchitoches
-natchnee
-Nate
-nates
-Nathan
-Nathanael
-Nathaniel
-nathe
-nather
-nathless
-Natica
-Naticidae
-naticiform
-naticine
-Natick
-naticoid
-natiform
-natimortality
-nation
-national
-nationalism
-nationalist
-nationalistic
-nationalistically
-nationality
-nationalization
-nationalize
-nationalizer
-nationally
-nationalness
-nationalty
-nationhood
-nationless
-nationwide
-native
-natively
-nativeness
-nativism
-nativist
-nativistic
-nativity
-natr
-Natraj
-Natricinae
-natricine
-natrium
-Natrix
-natrochalcite
-natrojarosite
-natrolite
-natron
-Natt
-natter
-nattered
-natteredness
-natterjack
-nattily
-nattiness
-nattle
-natty
-natuary
-natural
-naturalesque
-naturalism
-naturalist
-naturalistic
-naturalistically
-naturality
-naturalization
-naturalize
-naturalizer
-naturally
-naturalness
-nature
-naturecraft
-naturelike
-naturing
-naturism
-naturist
-naturistic
-naturistically
-naturize
-naturopath
-naturopathic
-naturopathist
-naturopathy
-naucrar
-naucrary
-naufragous
-nauger
-naught
-naughtily
-naughtiness
-naughty
-naujaite
-naumachia
-naumachy
-naumannite
-Naumburgia
-naumk
-naumkeag
-naumkeager
-naunt
-nauntle
-naupathia
-nauplial
-naupliiform
-nauplioid
-nauplius
-nauropometer
-nauscopy
-nausea
-nauseant
-nauseaproof
-nauseate
-nauseatingly
-nauseation
-nauseous
-nauseously
-nauseousness
-Nauset
-naut
-nautch
-nauther
-nautic
-nautical
-nauticality
-nautically
-nautics
-nautiform
-Nautilacea
-nautilacean
-nautilicone
-nautiliform
-nautilite
-nautiloid
-Nautiloidea
-nautiloidean
-nautilus
-Navaho
-Navajo
-naval
-navalese
-navalism
-navalist
-navalistic
-navalistically
-navally
-navar
-navarch
-navarchy
-Navarrese
-Navarrian
-nave
-navel
-naveled
-navellike
-navelwort
-navet
-navette
-navew
-navicella
-navicert
-navicula
-Naviculaceae
-naviculaeform
-navicular
-naviculare
-naviculoid
-naviform
-navigability
-navigable
-navigableness
-navigably
-navigant
-navigate
-navigation
-navigational
-navigator
-navigerous
-navipendular
-navipendulum
-navite
-navvy
-navy
-naw
-nawab
-nawabship
-nawt
-nay
-Nayar
-Nayarit
-Nayarita
-nayaur
-naysay
-naysayer
-nayward
-nayword
-Nazarate
-Nazarean
-Nazarene
-Nazarenism
-Nazarite
-Nazariteship
-Nazaritic
-Nazaritish
-Nazaritism
-naze
-Nazerini
-Nazi
-Nazify
-Naziism
-nazim
-nazir
-Nazirate
-Nazirite
-Naziritic
-Nazism
-ne
-nea
-Neal
-neal
-neallotype
-Neanderthal
-Neanderthaler
-Neanderthaloid
-neanic
-neanthropic
-neap
-neaped
-Neapolitan
-nearable
-nearabout
-nearabouts
-nearaivays
-nearaway
-nearby
-Nearctic
-Nearctica
-nearest
-nearish
-nearly
-nearmost
-nearness
-nearsighted
-nearsightedly
-nearsightedness
-nearthrosis
-neat
-neaten
-neath
-neatherd
-neatherdess
-neathmost
-neatify
-neatly
-neatness
-neb
-neback
-Nebaioth
-Nebalia
-Nebaliacea
-nebalian
-Nebaliidae
-nebalioid
-nebbed
-nebbuck
-nebbuk
-nebby
-nebel
-nebelist
-nebenkern
-Nebiim
-Nebraskan
-nebris
-nebula
-nebulae
-nebular
-nebularization
-nebularize
-nebulated
-nebulation
-nebule
-nebulescent
-nebuliferous
-nebulite
-nebulium
-nebulization
-nebulize
-nebulizer
-nebulose
-nebulosity
-nebulous
-nebulously
-nebulousness
-Necator
-necessar
-necessarian
-necessarianism
-necessarily
-necessariness
-necessary
-necessism
-necessist
-necessitarian
-necessitarianism
-necessitate
-necessitatedly
-necessitatingly
-necessitation
-necessitative
-necessitous
-necessitously
-necessitousness
-necessitude
-necessity
-neck
-neckar
-neckatee
-neckband
-neckcloth
-necked
-necker
-neckercher
-neckerchief
-neckful
-neckguard
-necking
-neckinger
-necklace
-necklaced
-necklaceweed
-neckless
-necklet
-necklike
-neckline
-neckmold
-neckpiece
-neckstock
-necktie
-necktieless
-neckward
-neckwear
-neckweed
-neckyoke
-necrectomy
-necremia
-necrobacillary
-necrobacillosis
-necrobiosis
-necrobiotic
-necrogenic
-necrogenous
-necrographer
-necrolatry
-necrologic
-necrological
-necrologically
-necrologist
-necrologue
-necrology
-necromancer
-necromancing
-necromancy
-necromantic
-necromantically
-necromorphous
-necronite
-necropathy
-Necrophaga
-necrophagan
-necrophagous
-necrophile
-necrophilia
-necrophilic
-necrophilism
-necrophilistic
-necrophilous
-necrophily
-necrophobia
-necrophobic
-Necrophorus
-necropoleis
-necropoles
-necropolis
-necropolitan
-necropsy
-necroscopic
-necroscopical
-necroscopy
-necrose
-necrosis
-necrotic
-necrotization
-necrotize
-necrotomic
-necrotomist
-necrotomy
-necrotype
-necrotypic
-Nectandra
-nectar
-nectareal
-nectarean
-nectared
-nectareous
-nectareously
-nectareousness
-nectarial
-nectarian
-nectaried
-nectariferous
-nectarine
-Nectarinia
-Nectariniidae
-nectarious
-nectarium
-nectarivorous
-nectarize
-nectarlike
-nectarous
-nectary
-nectiferous
-nectocalycine
-nectocalyx
-Nectonema
-nectophore
-nectopod
-Nectria
-nectriaceous
-Nectrioidaceae
-Necturidae
-Necturus
-Ned
-nedder
-neddy
-Nederlands
-nee
-neebor
-neebour
-need
-needer
-needfire
-needful
-needfully
-needfulness
-needgates
-needham
-needily
-neediness
-needing
-needle
-needlebill
-needlebook
-needlebush
-needlecase
-needled
-needlefish
-needleful
-needlelike
-needlemaker
-needlemaking
-needleman
-needlemonger
-needleproof
-needler
-needles
-needless
-needlessly
-needlessness
-needlestone
-needlewoman
-needlewood
-needlework
-needleworked
-needleworker
-needling
-needly
-needments
-needs
-needsome
-needy
-neeger
-neeld
-neele
-neelghan
-neem
-neencephalic
-neencephalon
-Neengatu
-neep
-neepour
-neer
-neese
-neet
-neetup
-neeze
-nef
-nefandous
-nefandousness
-nefarious
-nefariously
-nefariousness
-nefast
-neffy
-neftgil
-negate
-negatedness
-negation
-negationalist
-negationist
-negative
-negatively
-negativeness
-negativer
-negativism
-negativist
-negativistic
-negativity
-negator
-negatory
-negatron
-neger
-neginoth
-neglect
-neglectable
-neglectedly
-neglectedness
-neglecter
-neglectful
-neglectfully
-neglectfulness
-neglectingly
-neglection
-neglective
-neglectively
-neglector
-neglectproof
-negligee
-negligence
-negligency
-negligent
-negligently
-negligibility
-negligible
-negligibleness
-negligibly
-negotiability
-negotiable
-negotiant
-negotiate
-negotiation
-negotiator
-negotiatory
-negotiatress
-negotiatrix
-Negress
-negrillo
-negrine
-Negritian
-Negritic
-Negritize
-Negrito
-Negritoid
-Negro
-negro
-negrodom
-Negrofy
-negrohead
-negrohood
-Negroid
-Negroidal
-negroish
-Negroism
-Negroization
-Negroize
-negrolike
-Negroloid
-Negrophil
-Negrophile
-Negrophilism
-Negrophilist
-Negrophobe
-Negrophobia
-Negrophobiac
-Negrophobist
-Negrotic
-Negundo
-Negus
-negus
-Nehantic
-Nehemiah
-nehiloth
-nei
-neif
-neigh
-neighbor
-neighbored
-neighborer
-neighboress
-neighborhood
-neighboring
-neighborless
-neighborlike
-neighborliness
-neighborly
-neighborship
-neighborstained
-neighbourless
-neighbourlike
-neighbourship
-neigher
-Neil
-Neillia
-neiper
-Neisseria
-Neisserieae
-neist
-neither
-Nejd
-Nejdi
-Nekkar
-nekton
-nektonic
-Nelken
-Nell
-Nellie
-Nelly
-nelson
-nelsonite
-nelumbian
-Nelumbium
-Nelumbo
-Nelumbonaceae
-nema
-nemaline
-Nemalion
-Nemalionaceae
-Nemalionales
-nemalite
-Nemastomaceae
-Nematelmia
-nematelminth
-Nematelminthes
-nemathece
-nemathecial
-nemathecium
-Nemathelmia
-nemathelminth
-Nemathelminthes
-nematic
-nematoblast
-nematoblastic
-Nematocera
-nematoceran
-nematocerous
-nematocide
-nematocyst
-nematocystic
-Nematoda
-nematode
-nematodiasis
-nematogene
-nematogenic
-nematogenous
-nematognath
-Nematognathi
-nematognathous
-nematogone
-nematogonous
-nematoid
-Nematoidea
-nematoidean
-nematologist
-nematology
-Nematomorpha
-nematophyton
-Nematospora
-nematozooid
-Nembutal
-Nemean
-Nemertea
-nemertean
-Nemertina
-nemertine
-Nemertinea
-nemertinean
-Nemertini
-nemertoid
-nemeses
-Nemesia
-nemesic
-Nemesis
-Nemichthyidae
-Nemichthys
-Nemocera
-nemoceran
-nemocerous
-Nemopanthus
-Nemophila
-nemophilist
-nemophilous
-nemophily
-nemoral
-Nemorensian
-nemoricole
-Nengahiba
-nenta
-nenuphar
-neo
-neoacademic
-neoanthropic
-Neoarctic
-neoarsphenamine
-Neobalaena
-Neobeckia
-neoblastic
-neobotanist
-neobotany
-Neocene
-Neoceratodus
-neocerotic
-neoclassic
-neoclassicism
-neoclassicist
-Neocomian
-neocosmic
-neocracy
-neocriticism
-neocyanine
-neocyte
-neocytosis
-neodamode
-neodidymium
-neodymium
-Neofabraea
-neofetal
-neofetus
-Neofiber
-neoformation
-neoformative
-Neogaea
-Neogaean
-neogamous
-neogamy
-Neogene
-neogenesis
-neogenetic
-Neognathae
-neognathic
-neognathous
-neogrammarian
-neogrammatical
-neographic
-neohexane
-Neohipparion
-neoholmia
-neoholmium
-neoimpressionism
-neoimpressionist
-neolalia
-neolater
-neolatry
-neolith
-neolithic
-neologian
-neologianism
-neologic
-neological
-neologically
-neologism
-neologist
-neologistic
-neologistical
-neologization
-neologize
-neology
-neomedievalism
-neomenia
-neomenian
-Neomeniidae
-neomiracle
-neomodal
-neomorph
-Neomorpha
-neomorphic
-neomorphism
-Neomylodon
-neon
-neonatal
-neonate
-neonatus
-neonomian
-neonomianism
-neontology
-neonychium
-neopagan
-neopaganism
-neopaganize
-Neopaleozoic
-neopallial
-neopallium
-neoparaffin
-neophilism
-neophilological
-neophilologist
-neophobia
-neophobic
-neophrastic
-Neophron
-neophyte
-neophytic
-neophytish
-neophytism
-Neopieris
-neoplasia
-neoplasm
-neoplasma
-neoplasmata
-neoplastic
-neoplasticism
-neoplasty
-Neoplatonic
-Neoplatonician
-Neoplatonism
-Neoplatonist
-neoprene
-neorama
-neorealism
-Neornithes
-neornithic
-Neosalvarsan
-Neosorex
-Neosporidia
-neossin
-neossology
-neossoptile
-neostriatum
-neostyle
-neoteinia
-neoteinic
-neotenia
-neotenic
-neoteny
-neoteric
-neoterically
-neoterism
-neoterist
-neoteristic
-neoterize
-neothalamus
-Neotoma
-Neotragus
-Neotremata
-Neotropic
-Neotropical
-neotype
-neovitalism
-neovolcanic
-Neowashingtonia
-neoytterbium
-neoza
-Neozoic
-Nep
-nep
-Nepa
-Nepal
-Nepalese
-Nepali
-Nepenthaceae
-nepenthaceous
-nepenthe
-nepenthean
-Nepenthes
-nepenthes
-neper
-Neperian
-Nepeta
-nephalism
-nephalist
-Nephele
-nephele
-nepheligenous
-nepheline
-nephelinic
-nephelinite
-nephelinitic
-nephelinitoid
-nephelite
-Nephelium
-nephelognosy
-nepheloid
-nephelometer
-nephelometric
-nephelometrical
-nephelometrically
-nephelometry
-nephelorometer
-nepheloscope
-nephesh
-nephew
-nephewship
-Nephila
-Nephilinae
-Nephite
-nephogram
-nephograph
-nephological
-nephologist
-nephology
-nephoscope
-nephradenoma
-nephralgia
-nephralgic
-nephrapostasis
-nephratonia
-nephrauxe
-nephrectasia
-nephrectasis
-nephrectomize
-nephrectomy
-nephrelcosis
-nephremia
-nephremphraxis
-nephria
-nephric
-nephridia
-nephridial
-nephridiopore
-nephridium
-nephrism
-nephrite
-nephritic
-nephritical
-nephritis
-nephroabdominal
-nephrocardiac
-nephrocele
-nephrocoele
-nephrocolic
-nephrocolopexy
-nephrocoloptosis
-nephrocystitis
-nephrocystosis
-nephrocyte
-nephrodinic
-Nephrodium
-nephroerysipelas
-nephrogastric
-nephrogenetic
-nephrogenic
-nephrogenous
-nephrogonaduct
-nephrohydrosis
-nephrohypertrophy
-nephroid
-Nephrolepis
-nephrolith
-nephrolithic
-nephrolithotomy
-nephrologist
-nephrology
-nephrolysin
-nephrolysis
-nephrolytic
-nephromalacia
-nephromegaly
-nephromere
-nephron
-nephroncus
-nephroparalysis
-nephropathic
-nephropathy
-nephropexy
-nephrophthisis
-nephropore
-Nephrops
-Nephropsidae
-nephroptosia
-nephroptosis
-nephropyelitis
-nephropyeloplasty
-nephropyosis
-nephrorrhagia
-nephrorrhaphy
-nephros
-nephrosclerosis
-nephrosis
-nephrostoma
-nephrostome
-nephrostomial
-nephrostomous
-nephrostomy
-nephrotome
-nephrotomize
-nephrotomy
-nephrotoxic
-nephrotoxicity
-nephrotoxin
-nephrotuberculosis
-nephrotyphoid
-nephrotyphus
-nephrozymosis
-Nepidae
-nepionic
-nepman
-nepotal
-nepote
-nepotic
-nepotious
-nepotism
-nepotist
-nepotistical
-nepouite
-Neptune
-Neptunean
-Neptunian
-neptunism
-neptunist
-neptunium
-Nereid
-Nereidae
-nereidiform
-Nereidiformia
-Nereis
-nereite
-Nereocystis
-Neri
-Nerine
-nerine
-Nerita
-neritic
-Neritidae
-Neritina
-neritoid
-Nerium
-Neroic
-Neronian
-Neronic
-Neronize
-nerterology
-Nerthridae
-Nerthrus
-nerval
-nervate
-nervation
-nervature
-nerve
-nerveless
-nervelessly
-nervelessness
-nervelet
-nerveproof
-nerver
-nerveroot
-nervid
-nerviduct
-Nervii
-nervily
-nervimotion
-nervimotor
-nervimuscular
-nervine
-nerviness
-nerving
-nervish
-nervism
-nervomuscular
-nervosanguineous
-nervose
-nervosism
-nervosity
-nervous
-nervously
-nervousness
-nervular
-nervule
-nervulet
-nervulose
-nervuration
-nervure
-nervy
-nescience
-nescient
-nese
-nesh
-neshly
-neshness
-Nesiot
-nesiote
-Neskhi
-Neslia
-Nesogaea
-Nesogaean
-Nesokia
-Nesonetta
-Nesotragus
-Nespelim
-nesquehonite
-ness
-nesslerization
-Nesslerize
-nesslerize
-nest
-nestable
-nestage
-nester
-nestful
-nestiatria
-nestitherapy
-nestle
-nestler
-nestlike
-nestling
-Nestor
-Nestorian
-Nestorianism
-Nestorianize
-Nestorianizer
-nestorine
-nesty
-Net
-net
-netball
-netbraider
-netbush
-netcha
-Netchilik
-nete
-neter
-netful
-neth
-netheist
-nether
-Netherlander
-Netherlandian
-Netherlandic
-Netherlandish
-nethermore
-nethermost
-netherstock
-netherstone
-netherward
-netherwards
-Nethinim
-neti
-netleaf
-netlike
-netmaker
-netmaking
-netman
-netmonger
-netop
-netsman
-netsuke
-nettable
-Nettapus
-netted
-netter
-Nettie
-netting
-Nettion
-nettle
-nettlebed
-nettlebird
-nettlefire
-nettlefish
-nettlefoot
-nettlelike
-nettlemonger
-nettler
-nettlesome
-nettlewort
-nettling
-nettly
-Netty
-netty
-netwise
-network
-Neudeckian
-neugroschen
-neuma
-neumatic
-neumatize
-neume
-neumic
-neurad
-neuradynamia
-neural
-neurale
-neuralgia
-neuralgiac
-neuralgic
-neuralgiform
-neuralgy
-neuralist
-neurapophyseal
-neurapophysial
-neurapophysis
-neurarthropathy
-neurasthenia
-neurasthenic
-neurasthenical
-neurasthenically
-neurataxia
-neurataxy
-neuration
-neuratrophia
-neuratrophic
-neuratrophy
-neuraxial
-neuraxis
-neuraxon
-neuraxone
-neurectasia
-neurectasis
-neurectasy
-neurectome
-neurectomic
-neurectomy
-neurectopia
-neurectopy
-neurenteric
-neurepithelium
-neurergic
-neurexairesis
-neurhypnology
-neurhypnotist
-neuriatry
-neuric
-neurilema
-neurilematic
-neurilemma
-neurilemmal
-neurilemmatic
-neurilemmatous
-neurilemmitis
-neurility
-neurin
-neurine
-neurinoma
-neurism
-neurite
-neuritic
-neuritis
-neuroanatomical
-neuroanatomy
-neurobiotactic
-neurobiotaxis
-neuroblast
-neuroblastic
-neuroblastoma
-neurocanal
-neurocardiac
-neurocele
-neurocentral
-neurocentrum
-neurochemistry
-neurochitin
-neurochondrite
-neurochord
-neurochorioretinitis
-neurocirculatory
-neurocity
-neuroclonic
-neurocoele
-neurocoelian
-neurocyte
-neurocytoma
-neurodegenerative
-neurodendrite
-neurodendron
-neurodermatitis
-neurodermatosis
-neurodermitis
-neurodiagnosis
-neurodynamic
-neurodynia
-neuroepidermal
-neuroepithelial
-neuroepithelium
-neurofibril
-neurofibrilla
-neurofibrillae
-neurofibrillar
-neurofibroma
-neurofibromatosis
-neurofil
-neuroganglion
-neurogastralgia
-neurogastric
-neurogenesis
-neurogenetic
-neurogenic
-neurogenous
-neuroglandular
-neuroglia
-neurogliac
-neuroglial
-neurogliar
-neuroglic
-neuroglioma
-neurogliosis
-neurogram
-neurogrammic
-neurographic
-neurography
-neurohistology
-neurohumor
-neurohumoral
-neurohypnology
-neurohypnotic
-neurohypnotism
-neurohypophysis
-neuroid
-neurokeratin
-neurokyme
-neurological
-neurologist
-neurologize
-neurology
-neurolymph
-neurolysis
-neurolytic
-neuroma
-neuromalacia
-neuromalakia
-neuromast
-neuromastic
-neuromatosis
-neuromatous
-neuromere
-neuromerism
-neuromerous
-neuromimesis
-neuromimetic
-neuromotor
-neuromuscular
-neuromusculature
-neuromyelitis
-neuromyic
-neuron
-neuronal
-neurone
-neuronic
-neuronism
-neuronist
-neuronophagia
-neuronophagy
-neuronym
-neuronymy
-neuroparalysis
-neuroparalytic
-neuropath
-neuropathic
-neuropathical
-neuropathically
-neuropathist
-neuropathological
-neuropathologist
-neuropathology
-neuropathy
-Neurope
-neurophagy
-neurophil
-neurophile
-neurophilic
-neurophysiological
-neurophysiology
-neuropile
-neuroplasm
-neuroplasmic
-neuroplasty
-neuroplexus
-neuropodial
-neuropodium
-neuropodous
-neuropore
-neuropsychiatric
-neuropsychiatrist
-neuropsychiatry
-neuropsychic
-neuropsychological
-neuropsychologist
-neuropsychology
-neuropsychopathic
-neuropsychopathy
-neuropsychosis
-neuropter
-Neuroptera
-neuropteran
-Neuropteris
-neuropterist
-neuropteroid
-Neuropteroidea
-neuropterological
-neuropterology
-neuropteron
-neuropterous
-neuroretinitis
-neurorrhaphy
-Neurorthoptera
-neurorthopteran
-neurorthopterous
-neurosal
-neurosarcoma
-neurosclerosis
-neuroses
-neurosis
-neuroskeletal
-neuroskeleton
-neurosome
-neurospasm
-neurospongium
-neurosthenia
-neurosurgeon
-neurosurgery
-neurosurgical
-neurosuture
-neurosynapse
-neurosyphilis
-neurotendinous
-neurotension
-neurotherapeutics
-neurotherapist
-neurotherapy
-neurothlipsis
-neurotic
-neurotically
-neuroticism
-neuroticize
-neurotization
-neurotome
-neurotomical
-neurotomist
-neurotomize
-neurotomy
-neurotonic
-neurotoxia
-neurotoxic
-neurotoxin
-neurotripsy
-neurotrophic
-neurotrophy
-neurotropic
-neurotropism
-neurovaccination
-neurovaccine
-neurovascular
-neurovisceral
-neurula
-neurypnological
-neurypnologist
-neurypnology
-Neustrian
-neuter
-neuterdom
-neuterlike
-neuterly
-neuterness
-neutral
-neutralism
-neutralist
-neutrality
-neutralization
-neutralize
-neutralizer
-neutrally
-neutralness
-neutrino
-neutroceptive
-neutroceptor
-neutroclusion
-Neutrodyne
-neutrologistic
-neutron
-neutropassive
-neutrophile
-neutrophilia
-neutrophilic
-neutrophilous
-Nevada
-Nevadan
-nevadite
-neve
-nevel
-never
-neverland
-nevermore
-nevertheless
-Neville
-nevo
-nevoid
-Nevome
-nevoy
-nevus
-nevyanskite
-new
-Newar
-Newari
-newberyite
-newcal
-Newcastle
-newcome
-newcomer
-newel
-newelty
-newfangle
-newfangled
-newfangledism
-newfangledly
-newfangledness
-newfanglement
-Newfoundland
-Newfoundlander
-Newichawanoc
-newing
-newings
-newish
-newlandite
-newly
-newlywed
-Newmanism
-Newmanite
-Newmanize
-newmarket
-newness
-Newport
-news
-newsbill
-newsboard
-newsboat
-newsboy
-newscast
-newscaster
-newscasting
-newsful
-newsiness
-newsless
-newslessness
-newsletter
-newsman
-newsmonger
-newsmongering
-newsmongery
-newspaper
-newspaperdom
-newspaperese
-newspaperish
-newspaperized
-newspaperman
-newspaperwoman
-newspapery
-newsprint
-newsreader
-newsreel
-newsroom
-newssheet
-newsstand
-newsteller
-newsworthiness
-newsworthy
-newsy
-newt
-newtake
-newton
-Newtonian
-Newtonianism
-Newtonic
-Newtonist
-newtonite
-nexal
-next
-nextly
-nextness
-nexum
-nexus
-neyanda
-ngai
-ngaio
-ngapi
-Ngoko
-Nguyen
-Nhan
-Nheengatu
-ni
-niacin
-Niagara
-Niagaran
-Niall
-Niantic
-Nias
-Niasese
-niata
-nib
-nibbana
-nibbed
-nibber
-nibble
-nibbler
-nibblingly
-nibby
-niblick
-niblike
-nibong
-nibs
-nibsome
-Nicaean
-Nicaragua
-Nicaraguan
-Nicarao
-niccolic
-niccoliferous
-niccolite
-niccolous
-Nice
-nice
-niceish
-niceling
-nicely
-Nicene
-niceness
-Nicenian
-Nicenist
-nicesome
-nicetish
-nicety
-Nichael
-niche
-nichelino
-nicher
-Nicholas
-Nici
-Nick
-nick
-nickel
-nickelage
-nickelic
-nickeliferous
-nickeline
-nickeling
-nickelization
-nickelize
-nickellike
-nickelodeon
-nickelous
-nickeltype
-nicker
-nickerpecker
-nickey
-Nickie
-Nickieben
-nicking
-nickle
-nickname
-nicknameable
-nicknamee
-nicknameless
-nicknamer
-Nickneven
-nickstick
-nicky
-Nicobar
-Nicobarese
-Nicodemite
-Nicodemus
-Nicol
-Nicolaitan
-Nicolaitanism
-Nicolas
-nicolayite
-Nicolette
-Nicolo
-nicolo
-Nicomachean
-nicotia
-nicotian
-Nicotiana
-nicotianin
-nicotic
-nicotinamide
-nicotine
-nicotinean
-nicotined
-nicotineless
-nicotinian
-nicotinic
-nicotinism
-nicotinize
-nicotism
-nicotize
-nictate
-nictation
-nictitant
-nictitate
-nictitation
-nid
-nidal
-nidamental
-nidana
-nidation
-nidatory
-niddering
-niddick
-niddle
-nide
-nidge
-nidget
-nidgety
-nidi
-nidicolous
-nidificant
-nidificate
-nidification
-nidificational
-nidifugous
-nidify
-niding
-nidologist
-nidology
-nidor
-nidorosity
-nidorous
-nidorulent
-nidulant
-Nidularia
-Nidulariaceae
-nidulariaceous
-Nidulariales
-nidulate
-nidulation
-nidulus
-nidus
-niece
-nieceless
-nieceship
-niellated
-nielled
-niellist
-niello
-Niels
-niepa
-Nierembergia
-Niersteiner
-Nietzschean
-Nietzscheanism
-Nietzscheism
-nieve
-nieveta
-nievling
-nife
-nifesima
-niffer
-nific
-nifle
-nifling
-nifty
-nig
-Nigel
-Nigella
-Nigerian
-niggard
-niggardize
-niggardliness
-niggardling
-niggardly
-niggardness
-nigger
-niggerdom
-niggerfish
-niggergoose
-niggerhead
-niggerish
-niggerism
-niggerling
-niggertoe
-niggerweed
-niggery
-niggle
-niggler
-niggling
-nigglingly
-niggly
-nigh
-nighly
-nighness
-night
-nightcap
-nightcapped
-nightcaps
-nightchurr
-nightdress
-nighted
-nightfall
-nightfish
-nightflit
-nightfowl
-nightgown
-nighthawk
-nightie
-nightingale
-nightingalize
-nightjar
-nightless
-nightlessness
-nightlike
-nightlong
-nightly
-nightman
-nightmare
-nightmarish
-nightmarishly
-nightmary
-nights
-nightshade
-nightshine
-nightshirt
-nightstock
-nightstool
-nighttide
-nighttime
-nightwalker
-nightwalking
-nightward
-nightwards
-nightwear
-nightwork
-nightworker
-nignay
-nignye
-nigori
-nigranilin
-nigraniline
-nigre
-nigrescence
-nigrescent
-nigresceous
-nigrescite
-nigrification
-nigrified
-nigrify
-nigrine
-Nigritian
-nigrities
-nigritude
-nigritudinous
-nigrosine
-nigrous
-nigua
-Nihal
-nihilianism
-nihilianistic
-nihilification
-nihilify
-nihilism
-nihilist
-nihilistic
-nihilitic
-nihility
-nikau
-Nikeno
-nikethamide
-Nikko
-niklesite
-Nikolai
-nil
-Nile
-nilgai
-Nilometer
-Nilometric
-Niloscope
-Nilot
-Nilotic
-Nilous
-nilpotent
-Nils
-nim
-nimb
-nimbated
-nimbed
-nimbi
-nimbiferous
-nimbification
-nimble
-nimblebrained
-nimbleness
-nimbly
-nimbose
-nimbosity
-nimbus
-nimbused
-nimiety
-niminy
-nimious
-Nimkish
-nimmer
-Nimrod
-Nimrodian
-Nimrodic
-Nimrodical
-Nimrodize
-nimshi
-Nina
-nincom
-nincompoop
-nincompoopery
-nincompoophood
-nincompoopish
-nine
-ninebark
-ninefold
-nineholes
-ninepegs
-ninepence
-ninepenny
-ninepin
-ninepins
-ninescore
-nineted
-nineteen
-nineteenfold
-nineteenth
-nineteenthly
-ninetieth
-ninety
-ninetyfold
-ninetyish
-ninetyknot
-Ninevite
-Ninevitical
-Ninevitish
-Ning
-Ningpo
-Ninja
-ninny
-ninnyhammer
-ninnyish
-ninnyism
-ninnyship
-ninnywatch
-Ninon
-ninon
-Ninox
-ninth
-ninthly
-nintu
-ninut
-niobate
-Niobe
-Niobean
-niobic
-Niobid
-Niobite
-niobite
-niobium
-niobous
-niog
-niota
-Nip
-nip
-nipa
-nipcheese
-niphablepsia
-niphotyphlosis
-Nipissing
-Nipmuc
-nipper
-nipperkin
-nippers
-nippily
-nippiness
-nipping
-nippingly
-nippitate
-nipple
-nippleless
-nipplewort
-Nipponese
-Nipponism
-nipponium
-Nipponize
-nippy
-nipter
-Niquiran
-nirles
-nirmanakaya
-nirvana
-nirvanic
-Nisaean
-Nisan
-nisei
-Nishada
-nishiki
-nisnas
-nispero
-Nisqualli
-nisse
-nisus
-nit
-nitch
-nitchevo
-Nitella
-nitency
-nitently
-niter
-niterbush
-nitered
-nither
-nithing
-nitid
-nitidous
-nitidulid
-Nitidulidae
-nito
-niton
-nitramine
-nitramino
-nitranilic
-nitraniline
-nitrate
-nitratine
-nitration
-nitrator
-Nitrian
-nitriary
-nitric
-nitridation
-nitride
-nitriding
-nitridization
-nitridize
-nitrifaction
-nitriferous
-nitrifiable
-nitrification
-nitrifier
-nitrify
-nitrile
-Nitriot
-nitrite
-nitro
-nitroalizarin
-nitroamine
-nitroaniline
-Nitrobacter
-nitrobacteria
-Nitrobacteriaceae
-Nitrobacterieae
-nitrobarite
-nitrobenzene
-nitrobenzol
-nitrobenzole
-nitrocalcite
-nitrocellulose
-nitrocellulosic
-nitrochloroform
-nitrocotton
-nitroform
-nitrogelatin
-nitrogen
-nitrogenate
-nitrogenation
-nitrogenic
-nitrogenization
-nitrogenize
-nitrogenous
-nitroglycerin
-nitrohydrochloric
-nitrolamine
-nitrolic
-nitrolime
-nitromagnesite
-nitrometer
-nitrometric
-nitromuriate
-nitromuriatic
-nitronaphthalene
-nitroparaffin
-nitrophenol
-nitrophilous
-nitrophyte
-nitrophytic
-nitroprussiate
-nitroprussic
-nitroprusside
-nitrosamine
-nitrosate
-nitrosification
-nitrosify
-nitrosite
-nitrosobacteria
-nitrosochloride
-Nitrosococcus
-Nitrosomonas
-nitrososulphuric
-nitrostarch
-nitrosulphate
-nitrosulphonic
-nitrosulphuric
-nitrosyl
-nitrosylsulphuric
-nitrotoluene
-nitrous
-nitroxyl
-nitryl
-nitter
-nitty
-nitwit
-Nitzschia
-Nitzschiaceae
-Niuan
-Niue
-nival
-nivation
-nivellate
-nivellation
-nivellator
-nivellization
-nivenite
-niveous
-nivicolous
-nivosity
-nix
-nixie
-niyoga
-Nizam
-nizam
-nizamate
-nizamut
-nizy
-njave
-No
-no
-noa
-Noachian
-Noachic
-Noachical
-Noachite
-Noah
-Noahic
-Noam
-nob
-nobber
-nobbily
-nobble
-nobbler
-nobbut
-nobby
-nobiliary
-nobilify
-nobilitate
-nobilitation
-nobility
-noble
-noblehearted
-nobleheartedly
-nobleheartedness
-nobleman
-noblemanly
-nobleness
-noblesse
-noblewoman
-nobley
-nobly
-nobody
-nobodyness
-nobs
-nocake
-Nocardia
-nocardiosis
-nocent
-nocerite
-nociassociation
-nociceptive
-nociceptor
-nociperception
-nociperceptive
-nock
-nocket
-nocktat
-noctambulant
-noctambulation
-noctambule
-noctambulism
-noctambulist
-noctambulistic
-noctambulous
-Nocten
-noctidial
-noctidiurnal
-noctiferous
-noctiflorous
-Noctilio
-Noctilionidae
-Noctiluca
-noctiluca
-noctilucal
-noctilucan
-noctilucence
-noctilucent
-Noctilucidae
-noctilucin
-noctilucine
-noctilucous
-noctiluminous
-noctipotent
-noctivagant
-noctivagation
-noctivagous
-noctograph
-noctovision
-Noctuae
-noctuid
-Noctuidae
-noctuiform
-noctule
-nocturia
-nocturn
-nocturnal
-nocturnally
-nocturne
-nocuity
-nocuous
-nocuously
-nocuousness
-nod
-nodal
-nodality
-nodated
-nodder
-nodding
-noddingly
-noddle
-noddy
-node
-noded
-nodi
-nodiak
-nodical
-nodicorn
-nodiferous
-nodiflorous
-nodiform
-Nodosaria
-nodosarian
-nodosariform
-nodosarine
-nodose
-nodosity
-nodous
-nodular
-nodulate
-nodulated
-nodulation
-nodule
-noduled
-nodulize
-nodulose
-nodulous
-nodulus
-nodus
-noegenesis
-noegenetic
-Noel
-noel
-noematachograph
-noematachometer
-noematachometic
-Noemi
-Noetic
-noetic
-noetics
-nog
-nogada
-Nogai
-nogal
-noggen
-noggin
-nogging
-noghead
-nogheaded
-nohow
-Nohuntsik
-noibwood
-noil
-noilage
-noiler
-noily
-noint
-nointment
-noir
-noise
-noiseful
-noisefully
-noiseless
-noiselessly
-noiselessness
-noisemaker
-noisemaking
-noiseproof
-noisette
-noisily
-noisiness
-noisome
-noisomely
-noisomeness
-noisy
-nokta
-Nolascan
-nolition
-Noll
-noll
-nolle
-nolleity
-nollepros
-nolo
-noma
-nomad
-nomadian
-nomadic
-nomadical
-nomadically
-Nomadidae
-nomadism
-nomadization
-nomadize
-nomancy
-nomarch
-nomarchy
-Nomarthra
-nomarthral
-nombril
-nome
-Nomeidae
-nomenclate
-nomenclative
-nomenclator
-nomenclatorial
-nomenclatorship
-nomenclatory
-nomenclatural
-nomenclature
-nomenclaturist
-Nomeus
-nomial
-nomic
-nomina
-nominable
-nominal
-nominalism
-nominalist
-nominalistic
-nominality
-nominally
-nominate
-nominated
-nominately
-nomination
-nominatival
-nominative
-nominatively
-nominator
-nominatrix
-nominature
-nominee
-nomineeism
-nominy
-nomism
-nomisma
-nomismata
-nomistic
-nomocanon
-nomocracy
-nomogenist
-nomogenous
-nomogeny
-nomogram
-nomograph
-nomographer
-nomographic
-nomographical
-nomographically
-nomography
-nomological
-nomologist
-nomology
-nomopelmous
-nomophylax
-nomophyllous
-nomos
-nomotheism
-nomothete
-nomothetes
-nomothetic
-nomothetical
-non
-Nona
-nonabandonment
-nonabdication
-nonabiding
-nonability
-nonabjuration
-nonabjurer
-nonabolition
-nonabridgment
-nonabsentation
-nonabsolute
-nonabsolution
-nonabsorbable
-nonabsorbent
-nonabsorptive
-nonabstainer
-nonabstaining
-nonabstemious
-nonabstention
-nonabstract
-nonacademic
-nonacceding
-nonacceleration
-nonaccent
-nonacceptance
-nonacceptant
-nonacceptation
-nonaccess
-nonaccession
-nonaccessory
-nonaccidental
-nonaccompaniment
-nonaccompanying
-nonaccomplishment
-nonaccredited
-nonaccretion
-nonachievement
-nonacid
-nonacknowledgment
-nonacosane
-nonacoustic
-nonacquaintance
-nonacquiescence
-nonacquiescent
-nonacquisitive
-nonacquittal
-nonact
-nonactinic
-nonaction
-nonactionable
-nonactive
-nonactuality
-nonaculeate
-nonacute
-nonadditive
-nonadecane
-nonadherence
-nonadherent
-nonadhesion
-nonadhesive
-nonadjacent
-nonadjectival
-nonadjournment
-nonadjustable
-nonadjustive
-nonadjustment
-nonadministrative
-nonadmiring
-nonadmission
-nonadmitted
-nonadoption
-Nonadorantes
-nonadornment
-nonadult
-nonadvancement
-nonadvantageous
-nonadventitious
-nonadventurous
-nonadverbial
-nonadvertence
-nonadvertency
-nonadvocate
-nonaerating
-nonaerobiotic
-nonaesthetic
-nonaffection
-nonaffiliated
-nonaffirmation
-nonage
-nonagenarian
-nonagency
-nonagent
-nonagesimal
-nonagglutinative
-nonagglutinator
-nonaggression
-nonaggressive
-nonagon
-nonagrarian
-nonagreement
-nonagricultural
-nonahydrate
-nonaid
-nonair
-nonalarmist
-nonalcohol
-nonalcoholic
-nonalgebraic
-nonalienating
-nonalienation
-nonalignment
-nonalkaloidal
-nonallegation
-nonallegorical
-nonalliterated
-nonalliterative
-nonallotment
-nonalluvial
-nonalphabetic
-nonaltruistic
-nonaluminous
-nonamalgamable
-nonamendable
-nonamino
-nonamotion
-nonamphibious
-nonamputation
-nonanalogy
-nonanalytical
-nonanalyzable
-nonanalyzed
-nonanaphoric
-nonanaphthene
-nonanatomical
-nonancestral
-nonane
-nonanesthetized
-nonangelic
-nonangling
-nonanimal
-nonannexation
-nonannouncement
-nonannuitant
-nonannulment
-nonanoic
-nonanonymity
-nonanswer
-nonantagonistic
-nonanticipative
-nonantigenic
-nonapologetic
-nonapostatizing
-nonapostolic
-nonapparent
-nonappealable
-nonappearance
-nonappearer
-nonappearing
-nonappellate
-nonappendicular
-nonapplication
-nonapply
-nonappointment
-nonapportionable
-nonapposable
-nonappraisal
-nonappreciation
-nonapprehension
-nonappropriation
-nonapproval
-nonaqueous
-nonarbitrable
-nonarcing
-nonargentiferous
-nonaristocratic
-nonarithmetical
-nonarmament
-nonarmigerous
-nonaromatic
-nonarraignment
-nonarrival
-nonarsenical
-nonarterial
-nonartesian
-nonarticulated
-nonarticulation
-nonartistic
-nonary
-nonascendancy
-nonascertainable
-nonascertaining
-nonascetic
-nonascription
-nonaseptic
-nonaspersion
-nonasphalt
-nonaspirate
-nonaspiring
-nonassault
-nonassent
-nonassentation
-nonassented
-nonassenting
-nonassertion
-nonassertive
-nonassessable
-nonassessment
-nonassignable
-nonassignment
-nonassimilable
-nonassimilating
-nonassimilation
-nonassistance
-nonassistive
-nonassociable
-nonassortment
-nonassurance
-nonasthmatic
-nonastronomical
-nonathletic
-nonatmospheric
-nonatonement
-nonattached
-nonattachment
-nonattainment
-nonattendance
-nonattendant
-nonattention
-nonattestation
-nonattribution
-nonattributive
-nonaugmentative
-nonauricular
-nonauriferous
-nonauthentication
-nonauthoritative
-nonautomatic
-nonautomotive
-nonavoidance
-nonaxiomatic
-nonazotized
-nonbachelor
-nonbacterial
-nonbailable
-nonballoting
-nonbanishment
-nonbankable
-nonbarbarous
-nonbaronial
-nonbase
-nonbasement
-nonbasic
-nonbasing
-nonbathing
-nonbearded
-nonbearing
-nonbeing
-nonbeliever
-nonbelieving
-nonbelligerent
-nonbending
-nonbenevolent
-nonbetrayal
-nonbeverage
-nonbilabiate
-nonbilious
-nonbinomial
-nonbiological
-nonbitter
-nonbituminous
-nonblack
-nonblameless
-nonbleeding
-nonblended
-nonblockaded
-nonblocking
-nonblooded
-nonblooming
-nonbodily
-nonbookish
-nonborrower
-nonbotanical
-nonbourgeois
-nonbranded
-nonbreakable
-nonbreeder
-nonbreeding
-nonbroodiness
-nonbroody
-nonbrowsing
-nonbudding
-nonbulbous
-nonbulkhead
-nonbureaucratic
-nonburgage
-nonburgess
-nonburnable
-nonburning
-nonbursting
-nonbusiness
-nonbuying
-noncabinet
-noncaffeine
-noncaking
-Noncalcarea
-noncalcareous
-noncalcified
-noncallability
-noncallable
-noncancellable
-noncannibalistic
-noncanonical
-noncanonization
-noncanvassing
-noncapillarity
-noncapillary
-noncapital
-noncapitalist
-noncapitalistic
-noncapitulation
-noncapsizable
-noncapture
-noncarbonate
-noncareer
-noncarnivorous
-noncarrier
-noncartelized
-noncaste
-noncastigation
-noncataloguer
-noncatarrhal
-noncatechizable
-noncategorical
-noncathedral
-noncatholicity
-noncausality
-noncausation
-nonce
-noncelebration
-noncelestial
-noncellular
-noncellulosic
-noncensored
-noncensorious
-noncensus
-noncentral
-noncereal
-noncerebral
-nonceremonial
-noncertain
-noncertainty
-noncertified
-nonchafing
-nonchalance
-nonchalant
-nonchalantly
-nonchalantness
-nonchalky
-nonchallenger
-nonchampion
-nonchangeable
-nonchanging
-noncharacteristic
-nonchargeable
-nonchastisement
-nonchastity
-nonchemical
-nonchemist
-nonchivalrous
-nonchokable
-nonchokebore
-nonchronological
-nonchurch
-nonchurched
-nonchurchgoer
-nonciliate
-noncircuit
-noncircuital
-noncircular
-noncirculation
-noncitation
-noncitizen
-noncivilized
-nonclaim
-nonclaimable
-nonclassable
-nonclassical
-nonclassifiable
-nonclassification
-nonclastic
-nonclearance
-noncleistogamic
-nonclergyable
-nonclerical
-nonclimbable
-nonclinical
-nonclose
-nonclosure
-nonclotting
-noncoagulability
-noncoagulable
-noncoagulation
-noncoalescing
-noncock
-noncoercion
-noncoercive
-noncognate
-noncognition
-noncognitive
-noncognizable
-noncognizance
-noncoherent
-noncohesion
-noncohesive
-noncoinage
-noncoincidence
-noncoincident
-noncoincidental
-noncoking
-noncollaboration
-noncollaborative
-noncollapsible
-noncollectable
-noncollection
-noncollegiate
-noncollinear
-noncolloid
-noncollusion
-noncollusive
-noncolonial
-noncoloring
-noncom
-noncombat
-noncombatant
-noncombination
-noncombining
-noncombustible
-noncombustion
-noncome
-noncoming
-noncommemoration
-noncommencement
-noncommendable
-noncommensurable
-noncommercial
-noncommissioned
-noncommittal
-noncommittalism
-noncommittally
-noncommittalness
-noncommonable
-noncommorancy
-noncommunal
-noncommunicable
-noncommunicant
-noncommunicating
-noncommunication
-noncommunion
-noncommunist
-noncommunistic
-noncommutative
-noncompearance
-noncompensating
-noncompensation
-noncompetency
-noncompetent
-noncompeting
-noncompetitive
-noncompetitively
-noncomplaisance
-noncompletion
-noncompliance
-noncomplicity
-noncomplying
-noncomposite
-noncompoundable
-noncompounder
-noncomprehension
-noncompressible
-noncompression
-noncompulsion
-noncomputation
-noncon
-nonconcealment
-nonconceiving
-nonconcentration
-nonconception
-nonconcern
-nonconcession
-nonconciliating
-nonconcludency
-nonconcludent
-nonconcluding
-nonconclusion
-nonconcordant
-nonconcur
-nonconcurrence
-nonconcurrency
-nonconcurrent
-noncondensable
-noncondensation
-noncondensible
-noncondensing
-noncondimental
-nonconditioned
-noncondonation
-nonconducive
-nonconductibility
-nonconductible
-nonconducting
-nonconduction
-nonconductive
-nonconductor
-nonconfederate
-nonconferrable
-nonconfession
-nonconficient
-nonconfident
-nonconfidential
-nonconfinement
-nonconfirmation
-nonconfirmative
-nonconfiscable
-nonconfiscation
-nonconfitent
-nonconflicting
-nonconform
-nonconformable
-nonconformably
-nonconformance
-nonconformer
-nonconforming
-nonconformism
-nonconformist
-nonconformistical
-nonconformistically
-nonconformitant
-nonconformity
-nonconfutation
-noncongealing
-noncongenital
-noncongestion
-noncongratulatory
-noncongruent
-nonconjectural
-nonconjugal
-nonconjugate
-nonconjunction
-nonconnection
-nonconnective
-nonconnivance
-nonconnotative
-nonconnubial
-nonconscientious
-nonconscious
-nonconscription
-nonconsecration
-nonconsecutive
-nonconsent
-nonconsenting
-nonconsequence
-nonconsequent
-nonconservation
-nonconservative
-nonconserving
-nonconsideration
-nonconsignment
-nonconsistorial
-nonconsoling
-nonconsonant
-nonconsorting
-nonconspirator
-nonconspiring
-nonconstituent
-nonconstitutional
-nonconstraint
-nonconstruable
-nonconstruction
-nonconstructive
-nonconsular
-nonconsultative
-nonconsumable
-nonconsumption
-noncontact
-noncontagion
-noncontagionist
-noncontagious
-noncontagiousness
-noncontamination
-noncontemplative
-noncontending
-noncontent
-noncontention
-noncontentious
-noncontentiously
-nonconterminous
-noncontiguity
-noncontiguous
-noncontinental
-noncontingent
-noncontinuance
-noncontinuation
-noncontinuous
-noncontraband
-noncontraction
-noncontradiction
-noncontradictory
-noncontributing
-noncontribution
-noncontributor
-noncontributory
-noncontrivance
-noncontrolled
-noncontrolling
-noncontroversial
-nonconvective
-nonconvenable
-nonconventional
-nonconvergent
-nonconversable
-nonconversant
-nonconversational
-nonconversion
-nonconvertible
-nonconveyance
-nonconviction
-nonconvivial
-noncoplanar
-noncopying
-noncoring
-noncorporate
-noncorporeality
-noncorpuscular
-noncorrection
-noncorrective
-noncorrelation
-noncorrespondence
-noncorrespondent
-noncorresponding
-noncorroboration
-noncorroborative
-noncorrodible
-noncorroding
-noncorrosive
-noncorruption
-noncortical
-noncosmic
-noncosmopolitism
-noncostraight
-noncottager
-noncotyledonous
-noncounty
-noncranking
-noncreation
-noncreative
-noncredence
-noncredent
-noncredibility
-noncredible
-noncreditor
-noncreeping
-noncrenate
-noncretaceous
-noncriminal
-noncriminality
-noncrinoid
-noncritical
-noncrucial
-noncruciform
-noncrusading
-noncrushability
-noncrushable
-noncrustaceous
-noncrystalline
-noncrystallizable
-noncrystallized
-noncrystallizing
-nonculmination
-nonculpable
-noncultivated
-noncultivation
-nonculture
-noncumulative
-noncurantist
-noncurling
-noncurrency
-noncurrent
-noncursive
-noncurtailment
-noncuspidate
-noncustomary
-noncutting
-noncyclic
-noncyclical
-nonda
-nondamageable
-nondamnation
-nondancer
-nondangerous
-nondatival
-nondealer
-nondebtor
-nondecadence
-nondecadent
-nondecalcified
-nondecane
-nondecasyllabic
-nondecatoic
-nondecaying
-nondeceivable
-nondeception
-nondeceptive
-Nondeciduata
-nondeciduate
-nondeciduous
-nondecision
-nondeclarant
-nondeclaration
-nondeclarer
-nondecomposition
-nondecoration
-nondedication
-nondeduction
-nondefalcation
-nondefamatory
-nondefaulting
-nondefection
-nondefendant
-nondefense
-nondefensive
-nondeference
-nondeferential
-nondefiance
-nondefilement
-nondefining
-nondefinition
-nondefinitive
-nondeforestation
-nondegenerate
-nondegeneration
-nondegerming
-nondegradation
-nondegreased
-nondehiscent
-nondeist
-nondelegable
-nondelegate
-nondelegation
-nondeleterious
-nondeliberate
-nondeliberation
-nondelineation
-nondeliquescent
-nondelirious
-nondeliverance
-nondelivery
-nondemand
-nondemise
-nondemobilization
-nondemocratic
-nondemonstration
-nondendroid
-nondenial
-nondenominational
-nondenominationalism
-nondense
-nondenumerable
-nondenunciation
-nondepartmental
-nondeparture
-nondependence
-nondependent
-nondepletion
-nondeportation
-nondeported
-nondeposition
-nondepositor
-nondepravity
-nondepreciating
-nondepressed
-nondepression
-nondeprivable
-nonderivable
-nonderivative
-nonderogatory
-nondescript
-nondesecration
-nondesignate
-nondesigned
-nondesire
-nondesirous
-nondesisting
-nondespotic
-nondesquamative
-nondestructive
-nondesulphurized
-nondetachable
-nondetailed
-nondetention
-nondetermination
-nondeterminist
-nondeterrent
-nondetest
-nondetonating
-nondetrimental
-nondevelopable
-nondevelopment
-nondeviation
-nondevotional
-nondexterous
-nondiabetic
-nondiabolic
-nondiagnosis
-nondiagonal
-nondiagrammatic
-nondialectal
-nondialectical
-nondialyzing
-nondiametral
-nondiastatic
-nondiathermanous
-nondiazotizable
-nondichogamous
-nondichogamy
-nondichotomous
-nondictation
-nondictatorial
-nondictionary
-nondidactic
-nondieting
-nondifferentation
-nondifferentiable
-nondiffractive
-nondiffusing
-nondigestion
-nondilatable
-nondilution
-nondiocesan
-nondiphtheritic
-nondiphthongal
-nondiplomatic
-nondipterous
-nondirection
-nondirectional
-nondisagreement
-nondisappearing
-nondisarmament
-nondisbursed
-nondiscernment
-nondischarging
-nondisciplinary
-nondisclaim
-nondisclosure
-nondiscontinuance
-nondiscordant
-nondiscountable
-nondiscovery
-nondiscretionary
-nondiscrimination
-nondiscriminatory
-nondiscussion
-nondisestablishment
-nondisfigurement
-nondisfranchised
-nondisingenuous
-nondisintegration
-nondisinterested
-nondisjunct
-nondisjunction
-nondisjunctional
-nondisjunctive
-nondismemberment
-nondismissal
-nondisparaging
-nondisparate
-nondispensation
-nondispersal
-nondispersion
-nondisposal
-nondisqualifying
-nondissenting
-nondissolution
-nondistant
-nondistinctive
-nondistortion
-nondistribution
-nondistributive
-nondisturbance
-nondivergence
-nondivergent
-nondiversification
-nondivinity
-nondivisible
-nondivisiblity
-nondivision
-nondivisional
-nondivorce
-nondo
-nondoctrinal
-nondocumentary
-nondogmatic
-nondoing
-nondomestic
-nondomesticated
-nondominant
-nondonation
-nondramatic
-nondrinking
-nondropsical
-nondrying
-nonduality
-nondumping
-nonduplication
-nondutiable
-nondynastic
-nondyspeptic
-none
-nonearning
-noneastern
-noneatable
-nonecclesiastical
-nonechoic
-noneclectic
-noneclipsing
-nonecompense
-noneconomic
-nonedible
-noneditor
-noneditorial
-noneducable
-noneducation
-noneducational
-noneffective
-noneffervescent
-noneffete
-nonefficacious
-nonefficacy
-nonefficiency
-nonefficient
-noneffusion
-nonego
-nonegoistical
-nonejection
-nonelastic
-nonelasticity
-nonelect
-nonelection
-nonelective
-nonelector
-nonelectric
-nonelectrical
-nonelectrification
-nonelectrified
-nonelectrized
-nonelectrocution
-nonelectrolyte
-noneleemosynary
-nonelemental
-nonelementary
-nonelimination
-nonelopement
-nonemanating
-nonemancipation
-nonembarkation
-nonembellishment
-nonembezzlement
-nonembryonic
-nonemendation
-nonemergent
-nonemigration
-nonemission
-nonemotional
-nonemphatic
-nonemphatical
-nonempirical
-nonemploying
-nonemployment
-nonemulative
-nonenactment
-nonenclosure
-nonencroachment
-nonencyclopedic
-nonendemic
-nonendorsement
-nonenduring
-nonene
-nonenemy
-nonenergic
-nonenforceability
-nonenforceable
-nonenforcement
-nonengagement
-nonengineering
-nonenrolled
-nonent
-nonentailed
-nonenteric
-nonentertainment
-nonentitative
-nonentitive
-nonentitize
-nonentity
-nonentityism
-nonentomological
-nonentrant
-nonentres
-nonentry
-nonenumerated
-nonenunciation
-nonenvious
-nonenzymic
-nonephemeral
-nonepic
-nonepicurean
-nonepileptic
-nonepiscopal
-nonepiscopalian
-nonepithelial
-nonepochal
-nonequal
-nonequation
-nonequatorial
-nonequestrian
-nonequilateral
-nonequilibrium
-nonequivalent
-nonequivocating
-nonerasure
-nonerecting
-nonerection
-nonerotic
-nonerroneous
-nonerudite
-noneruption
-nones
-nonescape
-nonespionage
-nonespousal
-nonessential
-nonesthetic
-nonesuch
-nonet
-noneternal
-noneternity
-nonetheless
-nonethereal
-nonethical
-nonethnological
-nonethyl
-noneugenic
-noneuphonious
-nonevacuation
-nonevanescent
-nonevangelical
-nonevaporation
-nonevasion
-nonevasive
-noneviction
-nonevident
-nonevidential
-nonevil
-nonevolutionary
-nonevolutionist
-nonevolving
-nonexaction
-nonexaggeration
-nonexamination
-nonexcavation
-nonexcepted
-nonexcerptible
-nonexcessive
-nonexchangeability
-nonexchangeable
-nonexciting
-nonexclamatory
-nonexclusion
-nonexclusive
-nonexcommunicable
-nonexculpation
-nonexcusable
-nonexecution
-nonexecutive
-nonexemplary
-nonexemplificatior
-nonexempt
-nonexercise
-nonexertion
-nonexhibition
-nonexistence
-nonexistent
-nonexistential
-nonexisting
-nonexoneration
-nonexotic
-nonexpansion
-nonexpansive
-nonexpansively
-nonexpectation
-nonexpendable
-nonexperience
-nonexperienced
-nonexperimental
-nonexpert
-nonexpiation
-nonexpiry
-nonexploitation
-nonexplosive
-nonexportable
-nonexportation
-nonexposure
-nonexpulsion
-nonextant
-nonextempore
-nonextended
-nonextensile
-nonextension
-nonextensional
-nonextensive
-nonextenuatory
-nonexteriority
-nonextermination
-nonexternal
-nonexternality
-nonextinction
-nonextortion
-nonextracted
-nonextraction
-nonextraditable
-nonextradition
-nonextraneous
-nonextreme
-nonextrication
-nonextrinsic
-nonexuding
-nonexultation
-nonfabulous
-nonfacetious
-nonfacial
-nonfacility
-nonfacing
-nonfact
-nonfactious
-nonfactory
-nonfactual
-nonfacultative
-nonfaculty
-nonfaddist
-nonfading
-nonfailure
-nonfalse
-nonfamily
-nonfamous
-nonfanatical
-nonfanciful
-nonfarm
-nonfastidious
-nonfat
-nonfatal
-nonfatalistic
-nonfatty
-nonfavorite
-nonfeasance
-nonfeasor
-nonfeatured
-nonfebrile
-nonfederal
-nonfederated
-nonfeldspathic
-nonfelonious
-nonfelony
-nonfenestrated
-nonfermentability
-nonfermentable
-nonfermentation
-nonfermentative
-nonferrous
-nonfertile
-nonfertility
-nonfestive
-nonfeudal
-nonfibrous
-nonfiction
-nonfictional
-nonfiduciary
-nonfighter
-nonfigurative
-nonfilamentous
-nonfimbriate
-nonfinancial
-nonfinding
-nonfinishing
-nonfinite
-nonfireproof
-nonfiscal
-nonfisherman
-nonfissile
-nonfixation
-nonflaky
-nonflammable
-nonfloatation
-nonfloating
-nonfloriferous
-nonflowering
-nonflowing
-nonfluctuating
-nonfluid
-nonfluorescent
-nonflying
-nonfocal
-nonfood
-nonforeclosure
-nonforeign
-nonforeknowledge
-nonforest
-nonforested
-nonforfeitable
-nonforfeiting
-nonforfeiture
-nonform
-nonformal
-nonformation
-nonformulation
-nonfortification
-nonfortuitous
-nonfossiliferous
-nonfouling
-nonfrat
-nonfraternity
-nonfrauder
-nonfraudulent
-nonfreedom
-nonfreeman
-nonfreezable
-nonfreeze
-nonfreezing
-nonfricative
-nonfriction
-nonfrosted
-nonfruition
-nonfrustration
-nonfulfillment
-nonfunctional
-nonfundable
-nonfundamental
-nonfungible
-nonfuroid
-nonfusion
-nonfuturition
-nonfuturity
-nongalactic
-nongalvanized
-nonganglionic
-nongas
-nongaseous
-nongassy
-nongelatinizing
-nongelatinous
-nongenealogical
-nongenerative
-nongenetic
-nongentile
-nongeographical
-nongeological
-nongeometrical
-nongermination
-nongerundial
-nongildsman
-nongipsy
-nonglacial
-nonglandered
-nonglandular
-nonglare
-nonglucose
-nonglucosidal
-nonglucosidic
-nongod
-nongold
-nongolfer
-nongospel
-nongovernmental
-nongraduate
-nongraduated
-nongraduation
-nongrain
-nongranular
-nongraphitic
-nongrass
-nongratuitous
-nongravitation
-nongravity
-nongray
-nongreasy
-nongreen
-nongregarious
-nongremial
-nongrey
-nongrooming
-nonguarantee
-nonguard
-nonguttural
-nongymnast
-nongypsy
-nonhabitable
-nonhabitual
-nonhalation
-nonhallucination
-nonhandicap
-nonhardenable
-nonharmonic
-nonharmonious
-nonhazardous
-nonheading
-nonhearer
-nonheathen
-nonhedonistic
-nonhepatic
-nonhereditarily
-nonhereditary
-nonheritable
-nonheritor
-nonhero
-nonhieratic
-nonhistoric
-nonhistorical
-nonhomaloidal
-nonhomogeneity
-nonhomogeneous
-nonhomogenous
-nonhostile
-nonhouseholder
-nonhousekeeping
-nonhuman
-nonhumanist
-nonhumorous
-nonhumus
-nonhunting
-nonhydrogenous
-nonhydrolyzable
-nonhygrometric
-nonhygroscopic
-nonhypostatic
-nonic
-noniconoclastic
-nonideal
-nonidealist
-nonidentical
-nonidentity
-nonidiomatic
-nonidolatrous
-nonidyllic
-nonignitible
-nonignominious
-nonignorant
-nonillion
-nonillionth
-nonillumination
-nonillustration
-nonimaginary
-nonimbricating
-nonimitative
-nonimmateriality
-nonimmersion
-nonimmigrant
-nonimmigration
-nonimmune
-nonimmunity
-nonimmunized
-nonimpact
-nonimpairment
-nonimpartment
-nonimpatience
-nonimpeachment
-nonimperative
-nonimperial
-nonimplement
-nonimportation
-nonimporting
-nonimposition
-nonimpregnated
-nonimpressionist
-nonimprovement
-nonimputation
-nonincandescent
-nonincarnated
-nonincitement
-noninclination
-noninclusion
-noninclusive
-nonincrease
-nonincreasing
-nonincrusting
-nonindependent
-nonindictable
-nonindictment
-nonindividual
-nonindividualistic
-noninductive
-noninductively
-noninductivity
-nonindurated
-nonindustrial
-noninfallibilist
-noninfallible
-noninfantry
-noninfected
-noninfection
-noninfectious
-noninfinite
-noninfinitely
-noninflammability
-noninflammable
-noninflammatory
-noninflectional
-noninfluence
-noninformative
-noninfraction
-noninhabitant
-noninheritable
-noninherited
-noninitial
-noninjurious
-noninjury
-noninoculation
-noninquiring
-noninsect
-noninsertion
-noninstitution
-noninstruction
-noninstructional
-noninstructress
-noninstrumental
-noninsurance
-nonintegrable
-nonintegrity
-nonintellectual
-nonintelligence
-nonintelligent
-nonintent
-nonintention
-noninterchangeability
-noninterchangeable
-nonintercourse
-noninterference
-noninterferer
-noninterfering
-nonintermittent
-noninternational
-noninterpolation
-noninterposition
-noninterrupted
-nonintersecting
-nonintersector
-nonintervention
-noninterventionalist
-noninterventionist
-nonintoxicant
-nonintoxicating
-nonintrospective
-nonintrospectively
-nonintrusion
-nonintrusionism
-nonintrusionist
-nonintuitive
-noninverted
-noninvidious
-noninvincibility
-noniodized
-nonion
-nonionized
-nonionizing
-nonirate
-nonirradiated
-nonirrational
-nonirreparable
-nonirrevocable
-nonirrigable
-nonirrigated
-nonirrigating
-nonirrigation
-nonirritable
-nonirritant
-nonirritating
-nonisobaric
-nonisotropic
-nonissuable
-nonius
-nonjoinder
-nonjudicial
-nonjurable
-nonjurant
-nonjuress
-nonjuring
-nonjurist
-nonjuristic
-nonjuror
-nonjurorism
-nonjury
-nonjurying
-nonknowledge
-nonkosher
-nonlabeling
-nonlactescent
-nonlaminated
-nonlanguage
-nonlaying
-nonleaded
-nonleaking
-nonlegal
-nonlegato
-nonlegume
-nonlepidopterous
-nonleprous
-nonlevel
-nonlevulose
-nonliability
-nonliable
-nonliberation
-nonlicensed
-nonlicentiate
-nonlicet
-nonlicking
-nonlife
-nonlimitation
-nonlimiting
-nonlinear
-nonlipoidal
-nonliquefying
-nonliquid
-nonliquidating
-nonliquidation
-nonlister
-nonlisting
-nonliterary
-nonlitigious
-nonliturgical
-nonliving
-nonlixiviated
-nonlocal
-nonlocalized
-nonlogical
-nonlosable
-nonloser
-nonlover
-nonloving
-nonloxodromic
-nonluminescent
-nonluminosity
-nonluminous
-nonluster
-nonlustrous
-nonly
-nonmagnetic
-nonmagnetizable
-nonmaintenance
-nonmajority
-nonmalarious
-nonmalicious
-nonmalignant
-nonmalleable
-nonmammalian
-nonmandatory
-nonmanifest
-nonmanifestation
-nonmanila
-nonmannite
-nonmanual
-nonmanufacture
-nonmanufactured
-nonmanufacturing
-nonmarine
-nonmarital
-nonmaritime
-nonmarket
-nonmarriage
-nonmarriageable
-nonmarrying
-nonmartial
-nonmastery
-nonmaterial
-nonmaterialistic
-nonmateriality
-nonmaternal
-nonmathematical
-nonmathematician
-nonmatrimonial
-nonmatter
-nonmechanical
-nonmechanistic
-nonmedical
-nonmedicinal
-nonmedullated
-nonmelodious
-nonmember
-nonmembership
-nonmenial
-nonmental
-nonmercantile
-nonmetal
-nonmetallic
-nonmetalliferous
-nonmetallurgical
-nonmetamorphic
-nonmetaphysical
-nonmeteoric
-nonmeteorological
-nonmetric
-nonmetrical
-nonmetropolitan
-nonmicrobic
-nonmicroscopical
-nonmigratory
-nonmilitant
-nonmilitary
-nonmillionaire
-nonmimetic
-nonmineral
-nonmineralogical
-nonminimal
-nonministerial
-nonministration
-nonmiraculous
-nonmischievous
-nonmiscible
-nonmissionary
-nonmobile
-nonmodal
-nonmodern
-nonmolar
-nonmolecular
-nonmomentary
-nonmonarchical
-nonmonarchist
-nonmonastic
-nonmonist
-nonmonogamous
-nonmonotheistic
-nonmorainic
-nonmoral
-nonmorality
-nonmortal
-nonmotile
-nonmotoring
-nonmotorist
-nonmountainous
-nonmucilaginous
-nonmucous
-nonmulched
-nonmultiple
-nonmunicipal
-nonmuscular
-nonmusical
-nonmussable
-nonmutationally
-nonmutative
-nonmutual
-nonmystical
-nonmythical
-nonmythological
-nonnant
-nonnarcotic
-nonnasal
-nonnat
-nonnational
-nonnative
-nonnatural
-nonnaturalism
-nonnaturalistic
-nonnaturality
-nonnaturalness
-nonnautical
-nonnaval
-nonnavigable
-nonnavigation
-nonnebular
-nonnecessary
-nonnecessity
-nonnegligible
-nonnegotiable
-nonnegotiation
-nonnephritic
-nonnervous
-nonnescience
-nonnescient
-nonneutral
-nonneutrality
-nonnitrogenized
-nonnitrogenous
-nonnoble
-nonnomination
-nonnotification
-nonnotional
-nonnucleated
-nonnumeral
-nonnutrient
-nonnutritious
-nonnutritive
-nonobedience
-nonobedient
-nonobjection
-nonobjective
-nonobligatory
-nonobservable
-nonobservance
-nonobservant
-nonobservation
-nonobstetrical
-nonobstructive
-nonobvious
-nonoccidental
-nonocculting
-nonoccupant
-nonoccupation
-nonoccupational
-nonoccurrence
-nonodorous
-nonoecumenic
-nonoffender
-nonoffensive
-nonofficeholding
-nonofficial
-nonofficially
-nonofficinal
-nonoic
-nonoily
-nonolfactory
-nonomad
-nononerous
-nonopacity
-nonopening
-nonoperating
-nonoperative
-nonopposition
-nonoppressive
-nonoptical
-nonoptimistic
-nonoptional
-nonorchestral
-nonordination
-nonorganic
-nonorganization
-nonoriental
-nonoriginal
-nonornamental
-nonorthodox
-nonorthographical
-nonoscine
-nonostentation
-nonoutlawry
-nonoutrage
-nonoverhead
-nonoverlapping
-nonowner
-nonoxidating
-nonoxidizable
-nonoxidizing
-nonoxygenated
-nonoxygenous
-nonpacific
-nonpacification
-nonpacifist
-nonpagan
-nonpaid
-nonpainter
-nonpalatal
-nonpapal
-nonpapist
-nonpar
-nonparallel
-nonparalytic
-nonparasitic
-nonparasitism
-nonpareil
-nonparent
-nonparental
-nonpariello
-nonparishioner
-nonparliamentary
-nonparlor
-nonparochial
-nonparous
-nonpartial
-nonpartiality
-nonparticipant
-nonparticipating
-nonparticipation
-nonpartisan
-nonpartisanship
-nonpartner
-nonparty
-nonpassenger
-nonpasserine
-nonpastoral
-nonpatentable
-nonpatented
-nonpaternal
-nonpathogenic
-nonpause
-nonpaying
-nonpayment
-nonpeak
-nonpeaked
-nonpearlitic
-nonpecuniary
-nonpedestrian
-nonpedigree
-nonpelagic
-nonpeltast
-nonpenal
-nonpenalized
-nonpending
-nonpensionable
-nonpensioner
-nonperception
-nonperceptual
-nonperfection
-nonperforated
-nonperforating
-nonperformance
-nonperformer
-nonperforming
-nonperiodic
-nonperiodical
-nonperishable
-nonperishing
-nonperjury
-nonpermanent
-nonpermeability
-nonpermeable
-nonpermissible
-nonpermission
-nonperpendicular
-nonperpetual
-nonperpetuity
-nonpersecution
-nonperseverance
-nonpersistence
-nonpersistent
-nonperson
-nonpersonal
-nonpersonification
-nonpertinent
-nonperversive
-nonphagocytic
-nonpharmaceutical
-nonphenolic
-nonphenomenal
-nonphilanthropic
-nonphilological
-nonphilosophical
-nonphilosophy
-nonphonetic
-nonphosphatic
-nonphosphorized
-nonphotobiotic
-nonphysical
-nonphysiological
-nonpickable
-nonpigmented
-nonplacental
-nonplacet
-nonplanar
-nonplane
-nonplanetary
-nonplantowning
-nonplastic
-nonplate
-nonplausible
-nonpleading
-nonplus
-nonplusation
-nonplushed
-nonplutocratic
-nonpoet
-nonpoetic
-nonpoisonous
-nonpolar
-nonpolarizable
-nonpolarizing
-nonpolitical
-nonponderosity
-nonponderous
-nonpopery
-nonpopular
-nonpopularity
-nonporous
-nonporphyritic
-nonport
-nonportability
-nonportable
-nonportrayal
-nonpositive
-nonpossession
-nonposthumous
-nonpostponement
-nonpotential
-nonpower
-nonpractical
-nonpractice
-nonpraedial
-nonpreaching
-nonprecious
-nonprecipitation
-nonpredatory
-nonpredestination
-nonpredicative
-nonpredictable
-nonpreference
-nonpreferential
-nonpreformed
-nonpregnant
-nonprehensile
-nonprejudicial
-nonprelatical
-nonpremium
-nonpreparation
-nonprepayment
-nonprepositional
-nonpresbyter
-nonprescribed
-nonprescriptive
-nonpresence
-nonpresentation
-nonpreservation
-nonpresidential
-nonpress
-nonpressure
-nonprevalence
-nonprevalent
-nonpriestly
-nonprimitive
-nonprincipiate
-nonprincipled
-nonprobable
-nonprocreation
-nonprocurement
-nonproducer
-nonproducing
-nonproduction
-nonproductive
-nonproductively
-nonproductiveness
-nonprofane
-nonprofessed
-nonprofession
-nonprofessional
-nonprofessionalism
-nonprofessorial
-nonproficience
-nonproficiency
-nonproficient
-nonprofit
-nonprofiteering
-nonprognostication
-nonprogressive
-nonprohibitable
-nonprohibition
-nonprohibitive
-nonprojection
-nonprojective
-nonprojectively
-nonproletarian
-nonproliferous
-nonprolific
-nonprolongation
-nonpromiscuous
-nonpromissory
-nonpromotion
-nonpromulgation
-nonpronunciation
-nonpropagandistic
-nonpropagation
-nonprophetic
-nonpropitiation
-nonproportional
-nonproprietary
-nonproprietor
-nonprorogation
-nonproscriptive
-nonprosecution
-nonprospect
-nonprotection
-nonprotective
-nonproteid
-nonprotein
-nonprotestation
-nonprotractile
-nonprotractility
-nonproven
-nonprovided
-nonprovidential
-nonprovocation
-nonpsychic
-nonpsychological
-nonpublic
-nonpublication
-nonpublicity
-nonpueblo
-nonpulmonary
-nonpulsating
-nonpumpable
-nonpunctual
-nonpunctuation
-nonpuncturable
-nonpunishable
-nonpunishing
-nonpunishment
-nonpurchase
-nonpurchaser
-nonpurgative
-nonpurification
-nonpurposive
-nonpursuit
-nonpurulent
-nonpurveyance
-nonputrescent
-nonputrescible
-nonputting
-nonpyogenic
-nonpyritiferous
-nonqualification
-nonquality
-nonquota
-nonracial
-nonradiable
-nonradiating
-nonradical
-nonrailroader
-nonranging
-nonratability
-nonratable
-nonrated
-nonratifying
-nonrational
-nonrationalist
-nonrationalized
-nonrayed
-nonreaction
-nonreactive
-nonreactor
-nonreader
-nonreading
-nonrealistic
-nonreality
-nonrealization
-nonreasonable
-nonreasoner
-nonrebel
-nonrebellious
-nonreceipt
-nonreceiving
-nonrecent
-nonreception
-nonrecess
-nonrecipient
-nonreciprocal
-nonreciprocating
-nonreciprocity
-nonrecital
-nonreclamation
-nonrecluse
-nonrecognition
-nonrecognized
-nonrecoil
-nonrecollection
-nonrecommendation
-nonreconciliation
-nonrecourse
-nonrecoverable
-nonrecovery
-nonrectangular
-nonrectified
-nonrecuperation
-nonrecurrent
-nonrecurring
-nonredemption
-nonredressing
-nonreducing
-nonreference
-nonrefillable
-nonreflector
-nonreformation
-nonrefraction
-nonrefrigerant
-nonrefueling
-nonrefutation
-nonregardance
-nonregarding
-nonregenerating
-nonregenerative
-nonregent
-nonregimented
-nonregistered
-nonregistrability
-nonregistrable
-nonregistration
-nonregression
-nonregulation
-nonrehabilitation
-nonreigning
-nonreimbursement
-nonreinforcement
-nonreinstatement
-nonrejection
-nonrejoinder
-nonrelapsed
-nonrelation
-nonrelative
-nonrelaxation
-nonrelease
-nonreliance
-nonreligion
-nonreligious
-nonreligiousness
-nonrelinquishment
-nonremanie
-nonremedy
-nonremembrance
-nonremission
-nonremonstrance
-nonremuneration
-nonremunerative
-nonrendition
-nonrenewable
-nonrenewal
-nonrenouncing
-nonrenunciation
-nonrepair
-nonreparation
-nonrepayable
-nonrepealing
-nonrepeat
-nonrepeater
-nonrepentance
-nonrepetition
-nonreplacement
-nonreplicate
-nonreportable
-nonreprehensible
-nonrepresentation
-nonrepresentational
-nonrepresentationalism
-nonrepresentative
-nonrepression
-nonreprisal
-nonreproduction
-nonreproductive
-nonrepublican
-nonrepudiation
-nonrequirement
-nonrequisition
-nonrequital
-nonrescue
-nonresemblance
-nonreservation
-nonreserve
-nonresidence
-nonresidency
-nonresident
-nonresidental
-nonresidenter
-nonresidential
-nonresidentiary
-nonresidentor
-nonresidual
-nonresignation
-nonresinifiable
-nonresistance
-nonresistant
-nonresisting
-nonresistive
-nonresolvability
-nonresolvable
-nonresonant
-nonrespectable
-nonrespirable
-nonresponsibility
-nonrestitution
-nonrestraint
-nonrestricted
-nonrestriction
-nonrestrictive
-nonresumption
-nonresurrection
-nonresuscitation
-nonretaliation
-nonretention
-nonretentive
-nonreticence
-nonretinal
-nonretirement
-nonretiring
-nonretraceable
-nonretractation
-nonretractile
-nonretraction
-nonretrenchment
-nonretroactive
-nonreturn
-nonreturnable
-nonrevaluation
-nonrevealing
-nonrevelation
-nonrevenge
-nonrevenue
-nonreverse
-nonreversed
-nonreversible
-nonreversing
-nonreversion
-nonrevertible
-nonreviewable
-nonrevision
-nonrevival
-nonrevocation
-nonrevolting
-nonrevolutionary
-nonrevolving
-nonrhetorical
-nonrhymed
-nonrhyming
-nonrhythmic
-nonriding
-nonrigid
-nonrioter
-nonriparian
-nonritualistic
-nonrival
-nonromantic
-nonrotatable
-nonrotating
-nonrotative
-nonround
-nonroutine
-nonroyal
-nonroyalist
-nonrubber
-nonruminant
-Nonruminantia
-nonrun
-nonrupture
-nonrural
-nonrustable
-nonsabbatic
-nonsaccharine
-nonsacerdotal
-nonsacramental
-nonsacred
-nonsacrifice
-nonsacrificial
-nonsailor
-nonsalable
-nonsalaried
-nonsale
-nonsaline
-nonsalutary
-nonsalutation
-nonsalvation
-nonsanctification
-nonsanction
-nonsanctity
-nonsane
-nonsanguine
-nonsanity
-nonsaponifiable
-nonsatisfaction
-nonsaturated
-nonsaturation
-nonsaving
-nonsawing
-nonscalding
-nonscaling
-nonscandalous
-nonschematized
-nonschismatic
-nonscholastic
-nonscience
-nonscientific
-nonscientist
-nonscoring
-nonscraping
-nonscriptural
-nonscripturalist
-nonscrutiny
-nonseasonal
-nonsecession
-nonseclusion
-nonsecrecy
-nonsecret
-nonsecretarial
-nonsecretion
-nonsecretive
-nonsecretory
-nonsectarian
-nonsectional
-nonsectorial
-nonsecular
-nonsecurity
-nonsedentary
-nonseditious
-nonsegmented
-nonsegregation
-nonseizure
-nonselected
-nonselection
-nonselective
-nonself
-nonselfregarding
-nonselling
-nonsenatorial
-nonsense
-nonsensible
-nonsensical
-nonsensicality
-nonsensically
-nonsensicalness
-nonsensification
-nonsensify
-nonsensitive
-nonsensitiveness
-nonsensitized
-nonsensorial
-nonsensuous
-nonsentence
-nonsentient
-nonseparation
-nonseptate
-nonseptic
-nonsequacious
-nonsequaciousness
-nonsequestration
-nonserial
-nonserif
-nonserious
-nonserous
-nonserviential
-nonservile
-nonsetter
-nonsetting
-nonsettlement
-nonsexual
-nonsexually
-nonshaft
-nonsharing
-nonshatter
-nonshedder
-nonshipper
-nonshipping
-nonshredding
-nonshrinkable
-nonshrinking
-nonsiccative
-nonsidereal
-nonsignatory
-nonsignature
-nonsignificance
-nonsignificant
-nonsignification
-nonsignificative
-nonsilicated
-nonsiliceous
-nonsilver
-nonsimplification
-nonsine
-nonsinging
-nonsingular
-nonsinkable
-nonsinusoidal
-nonsiphonage
-nonsister
-nonsitter
-nonsitting
-nonskeptical
-nonskid
-nonskidding
-nonskipping
-nonslaveholding
-nonslip
-nonslippery
-nonslipping
-nonsludging
-nonsmoker
-nonsmoking
-nonsmutting
-nonsocial
-nonsocialist
-nonsocialistic
-nonsociety
-nonsociological
-nonsolar
-nonsoldier
-nonsolicitation
-nonsolid
-nonsolidified
-nonsolution
-nonsolvency
-nonsolvent
-nonsonant
-nonsovereign
-nonspalling
-nonsparing
-nonsparking
-nonspeaker
-nonspeaking
-nonspecial
-nonspecialist
-nonspecialized
-nonspecie
-nonspecific
-nonspecification
-nonspecificity
-nonspecified
-nonspectacular
-nonspectral
-nonspeculation
-nonspeculative
-nonspherical
-nonspill
-nonspillable
-nonspinning
-nonspinose
-nonspiny
-nonspiral
-nonspirit
-nonspiritual
-nonspirituous
-nonspontaneous
-nonspored
-nonsporeformer
-nonsporeforming
-nonsporting
-nonspottable
-nonsprouting
-nonstainable
-nonstaining
-nonstampable
-nonstandard
-nonstandardized
-nonstanzaic
-nonstaple
-nonstarch
-nonstarter
-nonstarting
-nonstatement
-nonstatic
-nonstationary
-nonstatistical
-nonstatutory
-nonstellar
-nonsticky
-nonstimulant
-nonstipulation
-nonstock
-nonstooping
-nonstop
-nonstrategic
-nonstress
-nonstretchable
-nonstretchy
-nonstriated
-nonstriker
-nonstriking
-nonstriped
-nonstructural
-nonstudent
-nonstudious
-nonstylized
-nonsubject
-nonsubjective
-nonsubmission
-nonsubmissive
-nonsubordination
-nonsubscriber
-nonsubscribing
-nonsubscription
-nonsubsiding
-nonsubsidy
-nonsubsistence
-nonsubstantial
-nonsubstantialism
-nonsubstantialist
-nonsubstantiality
-nonsubstantiation
-nonsubstantive
-nonsubstitution
-nonsubtraction
-nonsuccess
-nonsuccessful
-nonsuccession
-nonsuccessive
-nonsuccour
-nonsuction
-nonsuctorial
-nonsufferance
-nonsuffrage
-nonsugar
-nonsuggestion
-nonsuit
-nonsulphurous
-nonsummons
-nonsupplication
-nonsupport
-nonsupporter
-nonsupporting
-nonsuppositional
-nonsuppressed
-nonsuppression
-nonsuppurative
-nonsurface
-nonsurgical
-nonsurrender
-nonsurvival
-nonsurvivor
-nonsuspect
-nonsustaining
-nonsustenance
-nonswearer
-nonswearing
-nonsweating
-nonswimmer
-nonswimming
-nonsyllabic
-nonsyllabicness
-nonsyllogistic
-nonsyllogizing
-nonsymbiotic
-nonsymbiotically
-nonsymbolic
-nonsymmetrical
-nonsympathetic
-nonsympathizer
-nonsympathy
-nonsymphonic
-nonsymptomatic
-nonsynchronous
-nonsyndicate
-nonsynodic
-nonsynonymous
-nonsyntactic
-nonsyntactical
-nonsynthesized
-nonsyntonic
-nonsystematic
-nontabular
-nontactical
-nontan
-nontangential
-nontannic
-nontannin
-nontariff
-nontarnishable
-nontarnishing
-nontautomeric
-nontautomerizable
-nontax
-nontaxability
-nontaxable
-nontaxonomic
-nonteachable
-nonteacher
-nonteaching
-nontechnical
-nontechnological
-nonteetotaler
-nontelegraphic
-nonteleological
-nontelephonic
-nontemporal
-nontemporizing
-nontenant
-nontenure
-nontenurial
-nonterm
-nonterminating
-nonterrestrial
-nonterritorial
-nonterritoriality
-nontestamentary
-nontextual
-nontheatrical
-nontheistic
-nonthematic
-nontheological
-nontheosophical
-nontherapeutic
-nonthinker
-nonthinking
-nonthoracic
-nonthoroughfare
-nonthreaded
-nontidal
-nontillable
-nontimbered
-nontitaniferous
-nontitular
-nontolerated
-nontopographical
-nontourist
-nontoxic
-nontraction
-nontrade
-nontrader
-nontrading
-nontraditional
-nontragic
-nontrailing
-nontransferability
-nontransferable
-nontransgression
-nontransient
-nontransitional
-nontranslocation
-nontransmission
-nontransparency
-nontransparent
-nontransportation
-nontransposing
-nontransposition
-nontraveler
-nontraveling
-nontreasonable
-nontreated
-nontreatment
-nontreaty
-nontrespass
-nontrial
-nontribal
-nontribesman
-nontributary
-nontrier
-nontrigonometrical
-nontronite
-nontropical
-nontrunked
-nontruth
-nontuberculous
-nontuned
-nonturbinated
-nontutorial
-nontyphoidal
-nontypical
-nontypicalness
-nontypographical
-nontyrannical
-nonubiquitous
-nonulcerous
-nonultrafilterable
-nonumbilical
-nonumbilicate
-nonumbrellaed
-nonunanimous
-nonuncial
-nonundergraduate
-nonunderstandable
-nonunderstanding
-nonunderstandingly
-nonunderstood
-nonundulatory
-nonuniform
-nonuniformist
-nonuniformitarian
-nonuniformity
-nonuniformly
-nonunion
-nonunionism
-nonunionist
-nonunique
-nonunison
-nonunited
-nonuniversal
-nonuniversity
-nonupholstered
-nonuple
-nonuplet
-nonupright
-nonurban
-nonurgent
-nonusage
-nonuse
-nonuser
-nonusing
-nonusurping
-nonuterine
-nonutile
-nonutilitarian
-nonutility
-nonutilized
-nonutterance
-nonvacant
-nonvaccination
-nonvacuous
-nonvaginal
-nonvalent
-nonvalidity
-nonvaluation
-nonvalve
-nonvanishing
-nonvariable
-nonvariant
-nonvariation
-nonvascular
-nonvassal
-nonvegetative
-nonvenereal
-nonvenomous
-nonvenous
-nonventilation
-nonverbal
-nonverdict
-nonverminous
-nonvernacular
-nonvertebral
-nonvertical
-nonvertically
-nonvesicular
-nonvesting
-nonvesture
-nonveteran
-nonveterinary
-nonviable
-nonvibratile
-nonvibration
-nonvibrator
-nonvibratory
-nonvicarious
-nonvictory
-nonvillager
-nonvillainous
-nonvindication
-nonvinous
-nonvintage
-nonviolation
-nonviolence
-nonvirginal
-nonvirile
-nonvirtue
-nonvirtuous
-nonvirulent
-nonviruliferous
-nonvisaed
-nonvisceral
-nonviscid
-nonviscous
-nonvisional
-nonvisitation
-nonvisiting
-nonvisual
-nonvisualized
-nonvital
-nonvitreous
-nonvitrified
-nonviviparous
-nonvocal
-nonvocalic
-nonvocational
-nonvolant
-nonvolatile
-nonvolatilized
-nonvolcanic
-nonvolition
-nonvoluntary
-nonvortical
-nonvortically
-nonvoter
-nonvoting
-nonvulcanizable
-nonvulvar
-nonwalking
-nonwar
-nonwasting
-nonwatertight
-nonweakness
-nonwestern
-nonwetted
-nonwhite
-nonwinged
-nonwoody
-nonworker
-nonworking
-nonworship
-nonwrinkleable
-nonya
-nonyielding
-nonyl
-nonylene
-nonylenic
-nonylic
-nonzealous
-nonzero
-nonzodiacal
-nonzonal
-nonzonate
-nonzoological
-noodle
-noodledom
-noodleism
-nook
-nooked
-nookery
-nooking
-nooklet
-nooklike
-nooky
-noological
-noologist
-noology
-noometry
-noon
-noonday
-noonflower
-nooning
-noonlight
-noonlit
-noonstead
-noontide
-noontime
-noonwards
-noop
-nooscopic
-noose
-nooser
-Nootka
-nopal
-Nopalea
-nopalry
-nope
-nopinene
-nor
-Nora
-Norah
-norard
-norate
-noration
-norbergite
-Norbert
-Norbertine
-norcamphane
-nordcaper
-nordenskioldine
-Nordic
-Nordicism
-Nordicist
-Nordicity
-Nordicization
-Nordicize
-nordmarkite
-noreast
-noreaster
-norelin
-Norfolk
-Norfolkian
-norgine
-nori
-noria
-Noric
-norie
-norimon
-norite
-norland
-norlander
-norlandism
-norleucine
-Norm
-norm
-Norma
-norma
-normal
-normalcy
-normalism
-normalist
-normality
-normalization
-normalize
-normalizer
-normally
-normalness
-Norman
-Normanesque
-Normanish
-Normanism
-Normanist
-Normanization
-Normanize
-Normanizer
-Normanly
-Normannic
-normated
-normative
-normatively
-normativeness
-normless
-normoblast
-normoblastic
-normocyte
-normocytic
-normotensive
-Norn
-Norna
-nornicotine
-nornorwest
-noropianic
-norpinic
-Norridgewock
-Norroway
-Norroy
-Norse
-norsel
-Norseland
-norseler
-Norseman
-Norsk
-north
-northbound
-northeast
-northeaster
-northeasterly
-northeastern
-northeasternmost
-northeastward
-northeastwardly
-northeastwards
-norther
-northerliness
-northerly
-northern
-northerner
-northernize
-northernly
-northernmost
-northernness
-northest
-northfieldite
-northing
-northland
-northlander
-northlight
-Northman
-northmost
-northness
-Northumber
-Northumbrian
-northupite
-northward
-northwardly
-northwards
-northwest
-northwester
-northwesterly
-northwestern
-northwestward
-northwestwardly
-northwestwards
-Norumbega
-norward
-norwards
-Norway
-Norwegian
-norwest
-norwester
-norwestward
-Nosairi
-Nosairian
-nosarian
-nose
-nosean
-noseanite
-noseband
-nosebanded
-nosebleed
-nosebone
-noseburn
-nosed
-nosegay
-nosegaylike
-noseherb
-nosehole
-noseless
-noselessly
-noselessness
-noselike
-noselite
-Nosema
-Nosematidae
-nosepiece
-nosepinch
-noser
-nosesmart
-nosethirl
-nosetiology
-nosewards
-nosewheel
-nosewise
-nosey
-nosine
-nosing
-nosism
-nosocomial
-nosocomium
-nosogenesis
-nosogenetic
-nosogenic
-nosogeny
-nosogeography
-nosographer
-nosographic
-nosographical
-nosographically
-nosography
-nosohaemia
-nosohemia
-nosological
-nosologically
-nosologist
-nosology
-nosomania
-nosomycosis
-nosonomy
-nosophobia
-nosophyte
-nosopoetic
-nosopoietic
-nosotaxy
-nosotrophy
-nostalgia
-nostalgic
-nostalgically
-nostalgy
-nostic
-Nostoc
-Nostocaceae
-nostocaceous
-nostochine
-nostologic
-nostology
-nostomania
-Nostradamus
-nostrificate
-nostrification
-nostril
-nostriled
-nostrility
-nostrilsome
-nostrum
-nostrummonger
-nostrummongership
-nostrummongery
-Nosu
-nosy
-not
-notabilia
-notability
-notable
-notableness
-notably
-notacanthid
-Notacanthidae
-notacanthoid
-notacanthous
-Notacanthus
-notaeal
-notaeum
-notal
-notalgia
-notalgic
-Notalia
-notan
-notandum
-notanencephalia
-notarial
-notarially
-notariate
-notarikon
-notarize
-notary
-notaryship
-notate
-notation
-notational
-notative
-notator
-notch
-notchboard
-notched
-notchel
-notcher
-notchful
-notching
-notchweed
-notchwing
-notchy
-note
-notebook
-notecase
-noted
-notedly
-notedness
-notehead
-noteholder
-notekin
-Notelaea
-noteless
-notelessly
-notelessness
-notelet
-notencephalocele
-notencephalus
-noter
-notewise
-noteworthily
-noteworthiness
-noteworthy
-notharctid
-Notharctidae
-Notharctus
-nother
-nothing
-nothingarian
-nothingarianism
-nothingism
-nothingist
-nothingize
-nothingless
-nothingly
-nothingness
-nothingology
-Nothofagus
-Notholaena
-nothosaur
-Nothosauri
-nothosaurian
-Nothosauridae
-Nothosaurus
-nothous
-notice
-noticeability
-noticeable
-noticeably
-noticer
-Notidani
-notidanian
-notidanid
-Notidanidae
-notidanidan
-notidanoid
-Notidanus
-notifiable
-notification
-notified
-notifier
-notify
-notifyee
-notion
-notionable
-notional
-notionalist
-notionality
-notionally
-notionalness
-notionary
-notionate
-notioned
-notionist
-notionless
-Notiosorex
-notitia
-Notkerian
-notocentrous
-notocentrum
-notochord
-notochordal
-notodontian
-notodontid
-Notodontidae
-notodontoid
-Notogaea
-Notogaeal
-Notogaean
-Notogaeic
-notommatid
-Notommatidae
-Notonecta
-notonectal
-notonectid
-Notonectidae
-notopodial
-notopodium
-notopterid
-Notopteridae
-notopteroid
-Notopterus
-notorhizal
-Notorhynchus
-notoriety
-notorious
-notoriously
-notoriousness
-Notornis
-Notoryctes
-Notostraca
-Nototherium
-Nototrema
-nototribe
-notour
-notourly
-Notropis
-notself
-Nottoway
-notum
-Notungulata
-notungulate
-Notus
-notwithstanding
-Nou
-nougat
-nougatine
-nought
-noumeaite
-noumeite
-noumenal
-noumenalism
-noumenalist
-noumenality
-noumenalize
-noumenally
-noumenism
-noumenon
-noun
-nounal
-nounally
-nounize
-nounless
-noup
-nourice
-nourish
-nourishable
-nourisher
-nourishing
-nourishingly
-nourishment
-nouriture
-nous
-nouther
-nova
-novaculite
-novalia
-Novanglian
-Novanglican
-novantique
-novarsenobenzene
-novate
-Novatian
-Novatianism
-Novatianist
-novation
-novative
-novator
-novatory
-novatrix
-novcic
-novel
-novelcraft
-noveldom
-novelese
-novelesque
-novelet
-novelette
-noveletter
-novelettish
-novelettist
-noveletty
-novelish
-novelism
-novelist
-novelistic
-novelistically
-novelization
-novelize
-novella
-novelless
-novellike
-novelly
-novelmongering
-novelness
-novelry
-novelty
-novelwright
-novem
-novemarticulate
-November
-Novemberish
-novemcostate
-novemdigitate
-novemfid
-novemlobate
-novemnervate
-novemperfoliate
-novena
-novenary
-novendial
-novene
-novennial
-novercal
-Novial
-novice
-novicehood
-novicelike
-noviceship
-noviciate
-novilunar
-novitial
-novitiate
-novitiateship
-novitiation
-novity
-Novo
-Novocain
-novodamus
-Novorolsky
-now
-nowaday
-nowadays
-nowanights
-noway
-noways
-nowed
-nowel
-nowhat
-nowhen
-nowhence
-nowhere
-nowhereness
-nowheres
-nowhit
-nowhither
-nowise
-nowness
-Nowroze
-nowt
-nowy
-noxa
-noxal
-noxally
-noxious
-noxiously
-noxiousness
-noy
-noyade
-noyau
-Nozi
-nozzle
-nozzler
-nth
-nu
-nuance
-nub
-Nuba
-nubbin
-nubble
-nubbling
-nubbly
-nubby
-nubecula
-nubia
-Nubian
-nubiferous
-nubiform
-nubigenous
-nubilate
-nubilation
-nubile
-nubility
-nubilous
-Nubilum
-nucal
-nucament
-nucamentaceous
-nucellar
-nucellus
-nucha
-nuchal
-nuchalgia
-nuciculture
-nuciferous
-nuciform
-nucin
-nucivorous
-nucleal
-nuclear
-nucleary
-nuclease
-nucleate
-nucleation
-nucleator
-nuclei
-nucleiferous
-nucleiform
-nuclein
-nucleinase
-nucleoalbumin
-nucleoalbuminuria
-nucleofugal
-nucleohistone
-nucleohyaloplasm
-nucleohyaloplasma
-nucleoid
-nucleoidioplasma
-nucleolar
-nucleolated
-nucleole
-nucleoli
-nucleolinus
-nucleolocentrosome
-nucleoloid
-nucleolus
-nucleolysis
-nucleomicrosome
-nucleon
-nucleone
-nucleonics
-nucleopetal
-nucleoplasm
-nucleoplasmatic
-nucleoplasmic
-nucleoprotein
-nucleoside
-nucleotide
-nucleus
-nuclide
-nuclidic
-Nucula
-Nuculacea
-nuculanium
-nucule
-nuculid
-Nuculidae
-nuculiform
-nuculoid
-Nuda
-nudate
-nudation
-Nudd
-nuddle
-nude
-nudely
-nudeness
-Nudens
-nudge
-nudger
-nudibranch
-Nudibranchia
-nudibranchian
-nudibranchiate
-nudicaudate
-nudicaul
-nudifier
-nudiflorous
-nudiped
-nudish
-nudism
-nudist
-nuditarian
-nudity
-nugacious
-nugaciousness
-nugacity
-nugator
-nugatoriness
-nugatory
-nuggar
-nugget
-nuggety
-nugify
-nugilogue
-Nugumiut
-nuisance
-nuisancer
-nuke
-Nukuhivan
-nul
-null
-nullable
-nullah
-nullibicity
-nullibility
-nullibiquitous
-nullibist
-nullification
-nullificationist
-nullificator
-nullifidian
-nullifier
-nullify
-nullipara
-nulliparity
-nulliparous
-nullipennate
-Nullipennes
-nulliplex
-nullipore
-nulliporous
-nullism
-nullisome
-nullisomic
-nullity
-nulliverse
-nullo
-Numa
-Numantine
-numb
-number
-numberable
-numberer
-numberful
-numberless
-numberous
-numbersome
-numbfish
-numbing
-numbingly
-numble
-numbles
-numbly
-numbness
-numda
-numdah
-numen
-Numenius
-numerable
-numerableness
-numerably
-numeral
-numerant
-numerary
-numerate
-numeration
-numerative
-numerator
-numerical
-numerically
-numericalness
-numerist
-numero
-numerology
-numerose
-numerosity
-numerous
-numerously
-numerousness
-Numida
-Numidae
-Numidian
-Numididae
-Numidinae
-numinism
-numinous
-numinously
-numismatic
-numismatical
-numismatically
-numismatician
-numismatics
-numismatist
-numismatography
-numismatologist
-numismatology
-nummary
-nummi
-nummiform
-nummular
-Nummularia
-nummulary
-nummulated
-nummulation
-nummuline
-Nummulinidae
-nummulite
-Nummulites
-nummulitic
-Nummulitidae
-nummulitoid
-nummuloidal
-nummus
-numskull
-numskulled
-numskulledness
-numskullery
-numskullism
-numud
-nun
-nunatak
-nunbird
-nunch
-nuncheon
-nunciate
-nunciative
-nunciatory
-nunciature
-nuncio
-nuncioship
-nuncle
-nuncupate
-nuncupation
-nuncupative
-nuncupatively
-nundinal
-nundination
-nundine
-nunhood
-Nunki
-nunky
-nunlet
-nunlike
-nunnari
-nunnated
-nunnation
-nunnery
-nunni
-nunnify
-nunnish
-nunnishness
-nunship
-Nupe
-Nuphar
-nuptial
-nuptiality
-nuptialize
-nuptially
-nuptials
-nuque
-nuraghe
-nurhag
-nurly
-nursable
-nurse
-nursedom
-nursegirl
-nursehound
-nursekeeper
-nursekin
-nurselet
-nurselike
-nursemaid
-nurser
-nursery
-nurserydom
-nurseryful
-nurserymaid
-nurseryman
-nursetender
-nursing
-nursingly
-nursle
-nursling
-nursy
-nurturable
-nurtural
-nurture
-nurtureless
-nurturer
-nurtureship
-Nusairis
-Nusakan
-nusfiah
-nut
-nutant
-nutarian
-nutate
-nutation
-nutational
-nutbreaker
-nutcake
-nutcrack
-nutcracker
-nutcrackers
-nutcrackery
-nutgall
-nuthatch
-nuthook
-nutjobber
-nutlet
-nutlike
-nutmeg
-nutmegged
-nutmeggy
-nutpecker
-nutpick
-nutramin
-nutria
-nutrice
-nutricial
-nutricism
-nutrient
-nutrify
-nutriment
-nutrimental
-nutritial
-nutrition
-nutritional
-nutritionally
-nutritionist
-nutritious
-nutritiously
-nutritiousness
-nutritive
-nutritively
-nutritiveness
-nutritory
-nutseed
-nutshell
-Nuttallia
-nuttalliasis
-nuttalliosis
-nutted
-nutter
-nuttery
-nuttily
-nuttiness
-nutting
-nuttish
-nuttishness
-nutty
-nuzzer
-nuzzerana
-nuzzle
-Nyamwezi
-Nyanja
-nyanza
-Nyaya
-nychthemer
-nychthemeral
-nychthemeron
-Nyctaginaceae
-nyctaginaceous
-Nyctaginia
-nyctalope
-nyctalopia
-nyctalopic
-nyctalopy
-Nyctanthes
-Nyctea
-Nyctereutes
-nycteribiid
-Nycteribiidae
-Nycteridae
-nycterine
-Nycteris
-Nycticorax
-Nyctimene
-nyctinastic
-nyctinasty
-nyctipelagic
-Nyctipithecinae
-nyctipithecine
-Nyctipithecus
-nyctitropic
-nyctitropism
-nyctophobia
-nycturia
-Nydia
-nye
-nylast
-nylon
-nymil
-nymph
-nympha
-nymphae
-Nymphaea
-Nymphaeaceae
-nymphaeaceous
-nymphaeum
-nymphal
-nymphalid
-Nymphalidae
-Nymphalinae
-nymphaline
-nympheal
-nymphean
-nymphet
-nymphic
-nymphical
-nymphid
-nymphine
-Nymphipara
-nymphiparous
-nymphish
-nymphitis
-nymphlike
-nymphlin
-nymphly
-Nymphoides
-nympholepsia
-nympholepsy
-nympholept
-nympholeptic
-nymphomania
-nymphomaniac
-nymphomaniacal
-Nymphonacea
-nymphosis
-nymphotomy
-nymphwise
-Nyoro
-Nyroca
-Nyssa
-Nyssaceae
-nystagmic
-nystagmus
-nyxis
-O
-o
-oadal
-oaf
-oafdom
-oafish
-oafishly
-oafishness
-oak
-oakberry
-Oakboy
-oaken
-oakenshaw
-Oakesia
-oaklet
-oaklike
-oakling
-oaktongue
-oakum
-oakweb
-oakwood
-oaky
-oam
-Oannes
-oar
-oarage
-oarcock
-oared
-oarfish
-oarhole
-oarial
-oarialgia
-oaric
-oariocele
-oariopathic
-oariopathy
-oariotomy
-oaritic
-oaritis
-oarium
-oarless
-oarlike
-oarlock
-oarlop
-oarman
-oarsman
-oarsmanship
-oarswoman
-oarweed
-oary
-oasal
-oasean
-oases
-oasis
-oasitic
-oast
-oasthouse
-oat
-oatbin
-oatcake
-oatear
-oaten
-oatenmeal
-oatfowl
-oath
-oathay
-oathed
-oathful
-oathlet
-oathworthy
-oatland
-oatlike
-oatmeal
-oatseed
-oaty
-Obadiah
-obambulate
-obambulation
-obambulatory
-oban
-Obbenite
-obbligato
-obclavate
-obclude
-obcompressed
-obconical
-obcordate
-obcordiform
-obcuneate
-obdeltoid
-obdiplostemonous
-obdiplostemony
-obdormition
-obduction
-obduracy
-obdurate
-obdurately
-obdurateness
-obduration
-obe
-obeah
-obeahism
-obeche
-obedience
-obediency
-obedient
-obediential
-obedientially
-obedientialness
-obedientiar
-obedientiary
-obediently
-obeisance
-obeisant
-obeisantly
-obeism
-obelia
-obeliac
-obelial
-obelion
-obeliscal
-obeliscar
-obelisk
-obeliskoid
-obelism
-obelize
-obelus
-Oberon
-obese
-obesely
-obeseness
-obesity
-obex
-obey
-obeyable
-obeyer
-obeyingly
-obfuscable
-obfuscate
-obfuscation
-obfuscator
-obfuscity
-obfuscous
-obi
-Obidicut
-obispo
-obit
-obitual
-obituarian
-obituarily
-obituarist
-obituarize
-obituary
-object
-objectable
-objectation
-objectative
-objectee
-objecthood
-objectification
-objectify
-objection
-objectionability
-objectionable
-objectionableness
-objectionably
-objectional
-objectioner
-objectionist
-objectival
-objectivate
-objectivation
-objective
-objectively
-objectiveness
-objectivism
-objectivist
-objectivistic
-objectivity
-objectivize
-objectization
-objectize
-objectless
-objectlessly
-objectlessness
-objector
-objicient
-objuration
-objure
-objurgate
-objurgation
-objurgative
-objurgatively
-objurgator
-objurgatorily
-objurgatory
-objurgatrix
-oblanceolate
-oblate
-oblately
-oblateness
-oblation
-oblational
-oblationary
-oblatory
-oblectate
-oblectation
-obley
-obligable
-obligancy
-obligant
-obligate
-obligation
-obligational
-obligative
-obligativeness
-obligator
-obligatorily
-obligatoriness
-obligatory
-obligatum
-oblige
-obliged
-obligedly
-obligedness
-obligee
-obligement
-obliger
-obliging
-obligingly
-obligingness
-obligistic
-obligor
-obliquangular
-obliquate
-obliquation
-oblique
-obliquely
-obliqueness
-obliquitous
-obliquity
-obliquus
-obliterable
-obliterate
-obliteration
-obliterative
-obliterator
-oblivescence
-oblivial
-obliviality
-oblivion
-oblivionate
-oblivionist
-oblivionize
-oblivious
-obliviously
-obliviousness
-obliviscence
-obliviscible
-oblocutor
-oblong
-oblongatal
-oblongated
-oblongish
-oblongitude
-oblongitudinal
-oblongly
-oblongness
-obloquial
-obloquious
-obloquy
-obmutescence
-obmutescent
-obnebulate
-obnounce
-obnoxiety
-obnoxious
-obnoxiously
-obnoxiousness
-obnubilate
-obnubilation
-obnunciation
-oboe
-oboist
-obol
-Obolaria
-obolary
-obole
-obolet
-obolus
-obomegoid
-Obongo
-oboval
-obovate
-obovoid
-obpyramidal
-obpyriform
-Obrazil
-obreption
-obreptitious
-obreptitiously
-obrogate
-obrogation
-obrotund
-obscene
-obscenely
-obsceneness
-obscenity
-obscurancy
-obscurant
-obscurantic
-obscurantism
-obscurantist
-obscuration
-obscurative
-obscure
-obscuredly
-obscurely
-obscurement
-obscureness
-obscurer
-obscurism
-obscurist
-obscurity
-obsecrate
-obsecration
-obsecrationary
-obsecratory
-obsede
-obsequence
-obsequent
-obsequial
-obsequience
-obsequiosity
-obsequious
-obsequiously
-obsequiousness
-obsequity
-obsequium
-obsequy
-observability
-observable
-observableness
-observably
-observance
-observancy
-observandum
-observant
-Observantine
-Observantist
-observantly
-observantness
-observation
-observational
-observationalism
-observationally
-observative
-observatorial
-observatory
-observe
-observedly
-observer
-observership
-observing
-observingly
-obsess
-obsessingly
-obsession
-obsessional
-obsessionist
-obsessive
-obsessor
-obsidian
-obsidianite
-obsidional
-obsidionary
-obsidious
-obsignate
-obsignation
-obsignatory
-obsolesce
-obsolescence
-obsolescent
-obsolescently
-obsolete
-obsoletely
-obsoleteness
-obsoletion
-obsoletism
-obstacle
-obstetric
-obstetrical
-obstetrically
-obstetricate
-obstetrication
-obstetrician
-obstetrics
-obstetricy
-obstetrist
-obstetrix
-obstinacious
-obstinacy
-obstinance
-obstinate
-obstinately
-obstinateness
-obstination
-obstinative
-obstipation
-obstreperate
-obstreperosity
-obstreperous
-obstreperously
-obstreperousness
-obstriction
-obstringe
-obstruct
-obstructant
-obstructedly
-obstructer
-obstructingly
-obstruction
-obstructionism
-obstructionist
-obstructive
-obstructively
-obstructiveness
-obstructivism
-obstructivity
-obstructor
-obstruent
-obstupefy
-obtain
-obtainable
-obtainal
-obtainance
-obtainer
-obtainment
-obtect
-obtected
-obtemper
-obtemperate
-obtenebrate
-obtenebration
-obtention
-obtest
-obtestation
-obtriangular
-obtrude
-obtruder
-obtruncate
-obtruncation
-obtruncator
-obtrusion
-obtrusionist
-obtrusive
-obtrusively
-obtrusiveness
-obtund
-obtundent
-obtunder
-obtundity
-obturate
-obturation
-obturator
-obturatory
-obturbinate
-obtusangular
-obtuse
-obtusely
-obtuseness
-obtusifid
-obtusifolious
-obtusilingual
-obtusilobous
-obtusion
-obtusipennate
-obtusirostrate
-obtusish
-obtusity
-obumbrant
-obumbrate
-obumbration
-obvallate
-obvelation
-obvention
-obverse
-obversely
-obversion
-obvert
-obvertend
-obviable
-obviate
-obviation
-obviative
-obviator
-obvious
-obviously
-obviousness
-obvolute
-obvoluted
-obvolution
-obvolutive
-obvolve
-obvolvent
-ocarina
-Occamism
-Occamist
-Occamistic
-Occamite
-occamy
-occasion
-occasionable
-occasional
-occasionalism
-occasionalist
-occasionalistic
-occasionality
-occasionally
-occasionalness
-occasionary
-occasioner
-occasionless
-occasive
-occident
-occidental
-Occidentalism
-Occidentalist
-occidentality
-Occidentalization
-Occidentalize
-occidentally
-occiduous
-occipital
-occipitalis
-occipitally
-occipitoanterior
-occipitoatlantal
-occipitoatloid
-occipitoaxial
-occipitoaxoid
-occipitobasilar
-occipitobregmatic
-occipitocalcarine
-occipitocervical
-occipitofacial
-occipitofrontal
-occipitofrontalis
-occipitohyoid
-occipitoiliac
-occipitomastoid
-occipitomental
-occipitonasal
-occipitonuchal
-occipitootic
-occipitoparietal
-occipitoposterior
-occipitoscapular
-occipitosphenoid
-occipitosphenoidal
-occipitotemporal
-occipitothalamic
-occiput
-occitone
-occlude
-occludent
-occlusal
-occluse
-occlusion
-occlusive
-occlusiveness
-occlusocervical
-occlusocervically
-occlusogingival
-occlusometer
-occlusor
-occult
-occultate
-occultation
-occulter
-occulting
-occultism
-occultist
-occultly
-occultness
-occupable
-occupance
-occupancy
-occupant
-occupation
-occupational
-occupationalist
-occupationally
-occupationless
-occupative
-occupiable
-occupier
-occupy
-occur
-occurrence
-occurrent
-occursive
-ocean
-oceaned
-oceanet
-oceanful
-Oceanian
-oceanic
-Oceanican
-oceanity
-oceanographer
-oceanographic
-oceanographical
-oceanographically
-oceanographist
-oceanography
-oceanology
-oceanophyte
-oceanside
-oceanward
-oceanwards
-oceanways
-oceanwise
-ocellar
-ocellary
-ocellate
-ocellated
-ocellation
-ocelli
-ocellicyst
-ocellicystic
-ocelliferous
-ocelliform
-ocelligerous
-ocellus
-oceloid
-ocelot
-och
-ochava
-ochavo
-ocher
-ocherish
-ocherous
-ochery
-ochidore
-ochlesis
-ochlesitic
-ochletic
-ochlocracy
-ochlocrat
-ochlocratic
-ochlocratical
-ochlocratically
-ochlophobia
-ochlophobist
-Ochna
-Ochnaceae
-ochnaceous
-ochone
-Ochotona
-Ochotonidae
-Ochozoma
-ochraceous
-Ochrana
-ochrea
-ochreate
-ochreous
-ochro
-ochrocarpous
-ochroid
-ochroleucous
-ochrolite
-Ochroma
-ochronosis
-ochronosus
-ochronotic
-ochrous
-ocht
-Ocimum
-ock
-oclock
-Ocneria
-ocote
-Ocotea
-ocotillo
-ocque
-ocracy
-ocrea
-ocreaceous
-Ocreatae
-ocreate
-ocreated
-octachloride
-octachord
-octachordal
-octachronous
-Octacnemus
-octacolic
-octactinal
-octactine
-Octactiniae
-octactinian
-octad
-octadecahydrate
-octadecane
-octadecanoic
-octadecyl
-octadic
-octadrachm
-octaemeron
-octaeteric
-octaeterid
-octagon
-octagonal
-octagonally
-octahedral
-octahedric
-octahedrical
-octahedrite
-octahedroid
-octahedron
-octahedrous
-octahydrate
-octahydrated
-octakishexahedron
-octamerism
-octamerous
-octameter
-octan
-octanaphthene
-Octandria
-octandrian
-octandrious
-octane
-octangle
-octangular
-octangularness
-Octans
-octant
-octantal
-octapla
-octaploid
-octaploidic
-octaploidy
-octapodic
-octapody
-octarch
-octarchy
-octarius
-octarticulate
-octary
-octasemic
-octastich
-octastichon
-octastrophic
-octastyle
-octastylos
-octateuch
-octaval
-octavalent
-octavarium
-octave
-Octavia
-Octavian
-octavic
-octavina
-Octavius
-octavo
-octenary
-octene
-octennial
-octennially
-octet
-octic
-octillion
-octillionth
-octine
-octingentenary
-octoad
-octoalloy
-octoate
-octobass
-October
-octobrachiate
-Octobrist
-octocentenary
-octocentennial
-octochord
-Octocoralla
-octocorallan
-Octocorallia
-octocoralline
-octocotyloid
-octodactyl
-octodactyle
-octodactylous
-octodecimal
-octodecimo
-octodentate
-octodianome
-Octodon
-octodont
-Octodontidae
-Octodontinae
-octoechos
-octofid
-octofoil
-octofoiled
-octogamy
-octogenarian
-octogenarianism
-octogenary
-octogild
-octoglot
-Octogynia
-octogynian
-octogynious
-octogynous
-octoic
-octoid
-octolateral
-octolocular
-octomeral
-octomerous
-octometer
-octonal
-octonare
-octonarian
-octonarius
-octonary
-octonematous
-octonion
-octonocular
-octoon
-octopartite
-octopean
-octoped
-octopede
-octopetalous
-octophthalmous
-octophyllous
-octopi
-octopine
-octoploid
-octoploidic
-octoploidy
-octopod
-Octopoda
-octopodan
-octopodes
-octopodous
-octopolar
-octopus
-octoradial
-octoradiate
-octoradiated
-octoreme
-octoroon
-octose
-octosepalous
-octospermous
-octospore
-octosporous
-octostichous
-octosyllabic
-octosyllable
-octovalent
-octoyl
-octroi
-octroy
-octuor
-octuple
-octuplet
-octuplex
-octuplicate
-octuplication
-octuply
-octyl
-octylene
-octyne
-ocuby
-ocular
-ocularist
-ocularly
-oculary
-oculate
-oculated
-oculauditory
-oculiferous
-oculiform
-oculigerous
-Oculina
-oculinid
-Oculinidae
-oculinoid
-oculist
-oculistic
-oculocephalic
-oculofacial
-oculofrontal
-oculomotor
-oculomotory
-oculonasal
-oculopalpebral
-oculopupillary
-oculospinal
-oculozygomatic
-oculus
-ocydrome
-ocydromine
-Ocydromus
-Ocypete
-Ocypoda
-ocypodan
-Ocypode
-ocypodian
-Ocypodidae
-ocypodoid
-Ocyroe
-Ocyroidae
-Od
-od
-oda
-Odacidae
-odacoid
-odal
-odalborn
-odalisk
-odalisque
-odaller
-odalman
-odalwoman
-Odax
-odd
-oddish
-oddity
-oddlegs
-oddly
-oddman
-oddment
-oddments
-oddness
-Odds
-odds
-Oddsbud
-oddsman
-ode
-odel
-odelet
-Odelsthing
-Odelsting
-odeon
-odeum
-odic
-odically
-Odin
-Odinian
-Odinic
-Odinism
-Odinist
-odinite
-Odinitic
-odiometer
-odious
-odiously
-odiousness
-odist
-odium
-odiumproof
-Odobenidae
-Odobenus
-Odocoileus
-odograph
-odology
-odometer
-odometrical
-odometry
-Odonata
-odontagra
-odontalgia
-odontalgic
-Odontaspidae
-Odontaspididae
-Odontaspis
-odontatrophia
-odontatrophy
-odontexesis
-odontiasis
-odontic
-odontist
-odontitis
-odontoblast
-odontoblastic
-odontocele
-Odontocete
-odontocete
-Odontoceti
-odontocetous
-odontochirurgic
-odontoclasis
-odontoclast
-odontodynia
-odontogen
-odontogenesis
-odontogenic
-odontogeny
-Odontoglossae
-odontoglossal
-odontoglossate
-Odontoglossum
-Odontognathae
-odontognathic
-odontognathous
-odontograph
-odontographic
-odontography
-odontohyperesthesia
-odontoid
-Odontolcae
-odontolcate
-odontolcous
-odontolite
-odontolith
-odontological
-odontologist
-odontology
-odontoloxia
-odontoma
-odontomous
-odontonecrosis
-odontoneuralgia
-odontonosology
-odontopathy
-odontophoral
-odontophore
-Odontophoridae
-Odontophorinae
-odontophorine
-odontophorous
-Odontophorus
-odontoplast
-odontoplerosis
-Odontopteris
-Odontopteryx
-odontorhynchous
-Odontormae
-Odontornithes
-odontornithic
-odontorrhagia
-odontorthosis
-odontoschism
-odontoscope
-odontosis
-odontostomatous
-odontostomous
-Odontosyllis
-odontotechny
-odontotherapia
-odontotherapy
-odontotomy
-Odontotormae
-odontotripsis
-odontotrypy
-odoom
-odophone
-odor
-odorant
-odorate
-odorator
-odored
-odorful
-odoriferant
-odoriferosity
-odoriferous
-odoriferously
-odoriferousness
-odorific
-odorimeter
-odorimetry
-odoriphore
-odorivector
-odorize
-odorless
-odorometer
-odorosity
-odorous
-odorously
-odorousness
-odorproof
-Odostemon
-Ods
-odso
-odum
-odyl
-odylic
-odylism
-odylist
-odylization
-odylize
-Odynerus
-Odyssean
-Odyssey
-Odz
-Odzookers
-Odzooks
-oe
-Oecanthus
-oecist
-oecodomic
-oecodomical
-oecoparasite
-oecoparasitism
-oecophobia
-oecumenian
-oecumenic
-oecumenical
-oecumenicalism
-oecumenicity
-oecus
-oedemerid
-Oedemeridae
-oedicnemine
-Oedicnemus
-Oedipal
-Oedipean
-Oedipus
-Oedogoniaceae
-oedogoniaceous
-Oedogoniales
-Oedogonium
-oenanthaldehyde
-oenanthate
-Oenanthe
-oenanthic
-oenanthol
-oenanthole
-oenanthyl
-oenanthylate
-oenanthylic
-oenin
-Oenocarpus
-oenochoe
-oenocyte
-oenocytic
-oenolin
-oenological
-oenologist
-oenology
-oenomancy
-Oenomaus
-oenomel
-oenometer
-oenophilist
-oenophobist
-oenopoetic
-Oenothera
-Oenotheraceae
-oenotheraceous
-Oenotrian
-oer
-oersted
-oes
-oesophageal
-oesophagi
-oesophagismus
-oesophagostomiasis
-Oesophagostomum
-oesophagus
-oestradiol
-Oestrelata
-oestrian
-oestriasis
-oestrid
-Oestridae
-oestrin
-oestriol
-oestroid
-oestrous
-oestrual
-oestruate
-oestruation
-oestrum
-oestrus
-of
-Ofer
-off
-offal
-offaling
-offbeat
-offcast
-offcome
-offcut
-offend
-offendable
-offendant
-offended
-offendedly
-offendedness
-offender
-offendible
-offendress
-offense
-offenseful
-offenseless
-offenselessly
-offenseproof
-offensible
-offensive
-offensively
-offensiveness
-offer
-offerable
-offeree
-offerer
-offering
-offeror
-offertorial
-offertory
-offgoing
-offgrade
-offhand
-offhanded
-offhandedly
-offhandedness
-office
-officeholder
-officeless
-officer
-officerage
-officeress
-officerhood
-officerial
-officerism
-officerless
-officership
-official
-officialdom
-officialese
-officialism
-officiality
-officialization
-officialize
-officially
-officialty
-officiant
-officiary
-officiate
-officiation
-officiator
-officinal
-officinally
-officious
-officiously
-officiousness
-offing
-offish
-offishly
-offishness
-offlet
-offlook
-offprint
-offsaddle
-offscape
-offscour
-offscourer
-offscouring
-offscum
-offset
-offshoot
-offshore
-offsider
-offspring
-offtake
-offtype
-offuscate
-offuscation
-offward
-offwards
-oflete
-Ofo
-oft
-often
-oftenness
-oftens
-oftentime
-oftentimes
-ofter
-oftest
-oftly
-oftness
-ofttime
-ofttimes
-oftwhiles
-Og
-ogaire
-Ogallala
-ogam
-ogamic
-Ogboni
-Ogcocephalidae
-Ogcocephalus
-ogdoad
-ogdoas
-ogee
-ogeed
-ogganition
-ogham
-oghamic
-Oghuz
-ogival
-ogive
-ogived
-Oglala
-ogle
-ogler
-ogmic
-Ogor
-Ogpu
-ogre
-ogreish
-ogreishly
-ogreism
-ogress
-ogrish
-ogrism
-ogtiern
-ogum
-Ogygia
-Ogygian
-oh
-ohelo
-ohia
-Ohio
-Ohioan
-ohm
-ohmage
-ohmic
-ohmmeter
-oho
-ohoy
-oidioid
-oidiomycosis
-oidiomycotic
-Oidium
-oii
-oikology
-oikoplast
-oil
-oilberry
-oilbird
-oilcan
-oilcloth
-oilcoat
-oilcup
-oildom
-oiled
-oiler
-oilery
-oilfish
-oilhole
-oilily
-oiliness
-oilless
-oillessness
-oillet
-oillike
-oilman
-oilmonger
-oilmongery
-oilometer
-oilpaper
-oilproof
-oilproofing
-oilseed
-oilskin
-oilskinned
-oilstock
-oilstone
-oilstove
-oiltight
-oiltightness
-oilway
-oily
-oilyish
-oime
-oinochoe
-oinology
-oinomancy
-oinomania
-oinomel
-oint
-ointment
-Oireachtas
-oisin
-oisivity
-oitava
-oiticica
-Ojibwa
-Ojibway
-Ok
-oka
-okapi
-Okapia
-okee
-okenite
-oket
-oki
-okia
-Okie
-Okinagan
-Oklafalaya
-Oklahannali
-Oklahoma
-Oklahoman
-okoniosis
-okonite
-okra
-okrug
-okshoofd
-okthabah
-Okuari
-okupukupu
-Olacaceae
-olacaceous
-Olaf
-olam
-olamic
-Olax
-Olcha
-Olchi
-Old
-old
-olden
-Oldenburg
-older
-oldermost
-oldfangled
-oldfangledness
-Oldfieldia
-Oldhamia
-oldhamite
-oldhearted
-oldish
-oldland
-oldness
-oldster
-oldwife
-Ole
-Olea
-Oleaceae
-oleaceous
-Oleacina
-Oleacinidae
-oleaginous
-oleaginousness
-oleana
-oleander
-oleandrin
-Olearia
-olease
-oleaster
-oleate
-olecranal
-olecranarthritis
-olecranial
-olecranian
-olecranoid
-olecranon
-olefiant
-olefin
-olefine
-olefinic
-Oleg
-oleic
-oleiferous
-olein
-olena
-olenellidian
-Olenellus
-olenid
-Olenidae
-olenidian
-olent
-Olenus
-oleo
-oleocalcareous
-oleocellosis
-oleocyst
-oleoduct
-oleograph
-oleographer
-oleographic
-oleography
-oleomargaric
-oleomargarine
-oleometer
-oleoptene
-oleorefractometer
-oleoresin
-oleoresinous
-oleosaccharum
-oleose
-oleosity
-oleostearate
-oleostearin
-oleothorax
-oleous
-Oleraceae
-oleraceous
-olericultural
-olericulturally
-olericulture
-Oleron
-Olethreutes
-olethreutid
-Olethreutidae
-olfact
-olfactible
-olfaction
-olfactive
-olfactology
-olfactometer
-olfactometric
-olfactometry
-olfactor
-olfactorily
-olfactory
-olfacty
-Olga
-oliban
-olibanum
-olid
-oligacanthous
-oligaemia
-oligandrous
-oliganthous
-oligarch
-oligarchal
-oligarchic
-oligarchical
-oligarchically
-oligarchism
-oligarchist
-oligarchize
-oligarchy
-oligemia
-oligidria
-oligist
-oligistic
-oligistical
-oligocarpous
-Oligocene
-Oligochaeta
-oligochaete
-oligochaetous
-oligochete
-oligocholia
-oligochrome
-oligochromemia
-oligochronometer
-oligochylia
-oligoclase
-oligoclasite
-oligocystic
-oligocythemia
-oligocythemic
-oligodactylia
-oligodendroglia
-oligodendroglioma
-oligodipsia
-oligodontous
-oligodynamic
-oligogalactia
-oligohemia
-oligohydramnios
-oligolactia
-oligomenorrhea
-oligomerous
-oligomery
-oligometochia
-oligometochic
-Oligomyodae
-oligomyodian
-oligomyoid
-Oligonephria
-oligonephric
-oligonephrous
-oligonite
-oligopepsia
-oligopetalous
-oligophagous
-oligophosphaturia
-oligophrenia
-oligophrenic
-oligophyllous
-oligoplasmia
-oligopnea
-oligopolistic
-oligopoly
-oligoprothesy
-oligoprothetic
-oligopsonistic
-oligopsony
-oligopsychia
-oligopyrene
-oligorhizous
-oligosepalous
-oligosialia
-oligosideric
-oligosiderite
-oligosite
-oligospermia
-oligospermous
-oligostemonous
-oligosyllabic
-oligosyllable
-oligosynthetic
-oligotokous
-oligotrichia
-oligotrophic
-oligotrophy
-oligotropic
-oliguresis
-oliguretic
-oliguria
-Olinia
-Oliniaceae
-oliniaceous
-olio
-oliphant
-oliprance
-olitory
-Oliva
-oliva
-olivaceous
-olivary
-Olive
-olive
-Olivean
-olived
-Olivella
-oliveness
-olivenite
-Oliver
-Oliverian
-oliverman
-oliversmith
-olivescent
-olivet
-Olivetan
-Olivette
-olivewood
-Olivia
-Olividae
-Olivier
-oliviferous
-oliviform
-olivil
-olivile
-olivilin
-olivine
-olivinefels
-olivinic
-olivinite
-olivinitic
-olla
-ollamh
-ollapod
-ollenite
-Ollie
-ollock
-olm
-Olneya
-Olof
-ological
-ologist
-ologistic
-ology
-olomao
-olona
-Olonets
-Olonetsian
-Olonetsish
-Olor
-oloroso
-olpe
-Olpidiaster
-Olpidium
-Olson
-oltonde
-oltunna
-olycook
-olykoek
-Olympia
-Olympiad
-Olympiadic
-Olympian
-Olympianism
-Olympianize
-Olympianly
-Olympianwise
-Olympic
-Olympicly
-Olympicness
-Olympieion
-Olympionic
-Olympus
-Olynthiac
-Olynthian
-Olynthus
-om
-omadhaun
-omagra
-Omagua
-Omaha
-omalgia
-Oman
-Omani
-omao
-Omar
-omarthritis
-omasitis
-omasum
-omber
-ombrette
-ombrifuge
-ombrograph
-ombrological
-ombrology
-ombrometer
-ombrophile
-ombrophilic
-ombrophilous
-ombrophily
-ombrophobe
-ombrophobous
-ombrophoby
-ombrophyte
-ombudsman
-ombudsmanship
-omega
-omegoid
-omelet
-omelette
-omen
-omened
-omenology
-omental
-omentectomy
-omentitis
-omentocele
-omentofixation
-omentopexy
-omentoplasty
-omentorrhaphy
-omentosplenopexy
-omentotomy
-omentulum
-omentum
-omer
-omicron
-omina
-ominous
-ominously
-ominousness
-omissible
-omission
-omissive
-omissively
-omit
-omitis
-omittable
-omitter
-omlah
-Ommastrephes
-Ommastrephidae
-ommateal
-ommateum
-ommatidial
-ommatidium
-ommatophore
-ommatophorous
-Ommiad
-Ommiades
-omneity
-omniactive
-omniactuality
-omniana
-omniarch
-omnibenevolence
-omnibenevolent
-omnibus
-omnibusman
-omnicausality
-omnicompetence
-omnicompetent
-omnicorporeal
-omnicredulity
-omnicredulous
-omnidenominational
-omnierudite
-omniessence
-omnifacial
-omnifarious
-omnifariously
-omnifariousness
-omniferous
-omnific
-omnificent
-omnifidel
-omniform
-omniformal
-omniformity
-omnify
-omnigenous
-omnigerent
-omnigraph
-omnihuman
-omnihumanity
-omnilegent
-omnilingual
-omniloquent
-omnilucent
-omnimental
-omnimeter
-omnimode
-omnimodous
-omninescience
-omninescient
-omniparent
-omniparient
-omniparity
-omniparous
-omnipatient
-omnipercipience
-omnipercipiency
-omnipercipient
-omniperfect
-omnipotence
-omnipotency
-omnipotent
-omnipotentiality
-omnipotently
-omnipregnant
-omnipresence
-omnipresent
-omnipresently
-omniprevalence
-omniprevalent
-omniproduction
-omniprudent
-omnirange
-omniregency
-omnirepresentative
-omnirepresentativeness
-omnirevealing
-omniscience
-omnisciency
-omniscient
-omnisciently
-omniscope
-omniscribent
-omniscriptive
-omnisentience
-omnisentient
-omnisignificance
-omnisignificant
-omnispective
-omnist
-omnisufficiency
-omnisufficient
-omnitemporal
-omnitenent
-omnitolerant
-omnitonal
-omnitonality
-omnitonic
-omnitude
-omnium
-omnivagant
-omnivalence
-omnivalent
-omnivalous
-omnivarious
-omnividence
-omnivident
-omnivision
-omnivolent
-Omnivora
-omnivoracious
-omnivoracity
-omnivorant
-omnivore
-omnivorous
-omnivorously
-omnivorousness
-omodynia
-omohyoid
-omoideum
-omophagia
-omophagist
-omophagous
-omophagy
-omophorion
-omoplate
-omoplatoscopy
-omostegite
-omosternal
-omosternum
-omphacine
-omphacite
-omphalectomy
-omphalic
-omphalism
-omphalitis
-omphalocele
-omphalode
-omphalodium
-omphalogenous
-omphaloid
-omphaloma
-omphalomesaraic
-omphalomesenteric
-omphaloncus
-omphalopagus
-omphalophlebitis
-omphalopsychic
-omphalopsychite
-omphalorrhagia
-omphalorrhea
-omphalorrhexis
-omphalos
-omphalosite
-omphaloskepsis
-omphalospinous
-omphalotomy
-omphalotripsy
-omphalus
-on
-Ona
-ona
-onager
-Onagra
-onagra
-Onagraceae
-onagraceous
-Onan
-onanism
-onanist
-onanistic
-onca
-once
-oncetta
-Onchidiidae
-Onchidium
-Onchocerca
-onchocerciasis
-onchocercosis
-oncia
-Oncidium
-oncin
-oncograph
-oncography
-oncologic
-oncological
-oncology
-oncome
-oncometer
-oncometric
-oncometry
-oncoming
-Oncorhynchus
-oncosimeter
-oncosis
-oncosphere
-oncost
-oncostman
-oncotomy
-ondagram
-ondagraph
-ondameter
-ondascope
-ondatra
-ondine
-ondogram
-ondograph
-ondometer
-ondoscope
-ondy
-one
-oneanother
-oneberry
-onefold
-onefoldness
-onegite
-onehearted
-onehow
-Oneida
-oneiric
-oneirocrit
-oneirocritic
-oneirocritical
-oneirocritically
-oneirocriticism
-oneirocritics
-oneirodynia
-oneirologist
-oneirology
-oneiromancer
-oneiromancy
-oneiroscopic
-oneiroscopist
-oneiroscopy
-oneirotic
-oneism
-onement
-oneness
-oner
-onerary
-onerative
-onerosity
-onerous
-onerously
-onerousness
-onery
-oneself
-onesigned
-onetime
-onewhere
-oneyer
-onfall
-onflemed
-onflow
-onflowing
-ongaro
-ongoing
-onhanger
-onicolo
-oniomania
-oniomaniac
-onion
-onionet
-onionized
-onionlike
-onionpeel
-onionskin
-oniony
-onirotic
-Oniscidae
-onisciform
-oniscoid
-Oniscoidea
-oniscoidean
-Oniscus
-onium
-onkilonite
-onkos
-onlay
-onlepy
-onliest
-onliness
-onlook
-onlooker
-onlooking
-only
-onmarch
-Onmun
-Onobrychis
-onocentaur
-Onoclea
-onofrite
-Onohippidium
-onolatry
-onomancy
-onomantia
-onomastic
-onomasticon
-onomatologist
-onomatology
-onomatomania
-onomatope
-onomatoplasm
-onomatopoeia
-onomatopoeial
-onomatopoeian
-onomatopoeic
-onomatopoeical
-onomatopoeically
-onomatopoesis
-onomatopoesy
-onomatopoetic
-onomatopoetically
-onomatopy
-onomatous
-onomomancy
-Onondaga
-Onondagan
-Ononis
-Onopordon
-Onosmodium
-onrush
-onrushing
-ons
-onset
-onsetter
-onshore
-onside
-onsight
-onslaught
-onstand
-onstanding
-onstead
-onsweep
-onsweeping
-ontal
-Ontarian
-Ontaric
-onto
-ontocycle
-ontocyclic
-ontogenal
-ontogenesis
-ontogenetic
-ontogenetical
-ontogenetically
-ontogenic
-ontogenically
-ontogenist
-ontogeny
-ontography
-ontologic
-ontological
-ontologically
-ontologism
-ontologist
-ontologistic
-ontologize
-ontology
-ontosophy
-onus
-onwaiting
-onward
-onwardly
-onwardness
-onwards
-onycha
-onychatrophia
-onychauxis
-onychia
-onychin
-onychitis
-onychium
-onychogryposis
-onychoid
-onycholysis
-onychomalacia
-onychomancy
-onychomycosis
-onychonosus
-onychopathic
-onychopathology
-onychopathy
-onychophagist
-onychophagy
-Onychophora
-onychophoran
-onychophorous
-onychophyma
-onychoptosis
-onychorrhexis
-onychoschizia
-onychosis
-onychotrophy
-onym
-onymal
-onymancy
-onymatic
-onymity
-onymize
-onymous
-onymy
-onyx
-onyxis
-onyxitis
-onza
-ooangium
-ooblast
-ooblastic
-oocyesis
-oocyst
-Oocystaceae
-oocystaceous
-oocystic
-Oocystis
-oocyte
-oodles
-ooecial
-ooecium
-oofbird
-ooftish
-oofy
-oogamete
-oogamous
-oogamy
-oogenesis
-oogenetic
-oogeny
-ooglea
-oogone
-oogonial
-oogoniophore
-oogonium
-oograph
-ooid
-ooidal
-ookinesis
-ookinete
-ookinetic
-oolak
-oolemma
-oolite
-oolitic
-oolly
-oologic
-oological
-oologically
-oologist
-oologize
-oology
-oolong
-oomancy
-oomantia
-oometer
-oometric
-oometry
-oomycete
-Oomycetes
-oomycetous
-oons
-oont
-oopak
-oophoralgia
-oophorauxe
-oophore
-oophorectomy
-oophoreocele
-oophorhysterectomy
-oophoric
-oophoridium
-oophoritis
-oophoroepilepsy
-oophoroma
-oophoromalacia
-oophoromania
-oophoron
-oophoropexy
-oophororrhaphy
-oophorosalpingectomy
-oophorostomy
-oophorotomy
-oophyte
-oophytic
-ooplasm
-ooplasmic
-ooplast
-oopod
-oopodal
-ooporphyrin
-oorali
-oord
-ooscope
-ooscopy
-oosperm
-oosphere
-oosporange
-oosporangium
-oospore
-Oosporeae
-oosporic
-oosporiferous
-oosporous
-oostegite
-oostegitic
-ootheca
-oothecal
-ootid
-ootocoid
-Ootocoidea
-ootocoidean
-ootocous
-ootype
-ooze
-oozily
-ooziness
-oozooid
-oozy
-opacate
-opacification
-opacifier
-opacify
-opacite
-opacity
-opacous
-opacousness
-opah
-opal
-opaled
-opalesce
-opalescence
-opalescent
-opalesque
-Opalina
-opaline
-opalinid
-Opalinidae
-opalinine
-opalish
-opalize
-opaloid
-opaque
-opaquely
-opaqueness
-Opata
-opdalite
-ope
-Opegrapha
-opeidoscope
-opelet
-open
-openable
-openband
-openbeak
-openbill
-opencast
-opener
-openhanded
-openhandedly
-openhandedness
-openhead
-openhearted
-openheartedly
-openheartedness
-opening
-openly
-openmouthed
-openmouthedly
-openmouthedness
-openness
-openside
-openwork
-opera
-operability
-operabily
-operable
-operae
-operagoer
-operalogue
-operameter
-operance
-operancy
-operand
-operant
-operatable
-operate
-operatee
-operatic
-operatical
-operatically
-operating
-operation
-operational
-operationalism
-operationalist
-operationism
-operationist
-operative
-operatively
-operativeness
-operativity
-operatize
-operator
-operatory
-operatrix
-opercle
-opercled
-opercula
-opercular
-Operculata
-operculate
-operculated
-operculiferous
-operculiform
-operculigenous
-operculigerous
-operculum
-operetta
-operette
-operettist
-operose
-operosely
-operoseness
-operosity
-Ophelia
-ophelimity
-Ophian
-ophiasis
-ophic
-ophicalcite
-Ophicephalidae
-ophicephaloid
-Ophicephalus
-Ophichthyidae
-ophichthyoid
-ophicleide
-ophicleidean
-ophicleidist
-Ophidia
-ophidian
-Ophidiidae
-Ophidiobatrachia
-ophidioid
-Ophidion
-ophidiophobia
-ophidious
-ophidologist
-ophidology
-Ophiobatrachia
-Ophiobolus
-Ophioglossaceae
-ophioglossaceous
-Ophioglossales
-Ophioglossum
-ophiography
-ophioid
-ophiolater
-ophiolatrous
-ophiolatry
-ophiolite
-ophiolitic
-ophiologic
-ophiological
-ophiologist
-ophiology
-ophiomancy
-ophiomorph
-Ophiomorpha
-ophiomorphic
-ophiomorphous
-Ophion
-ophionid
-Ophioninae
-ophionine
-ophiophagous
-ophiophilism
-ophiophilist
-ophiophobe
-ophiophobia
-ophiophoby
-ophiopluteus
-Ophiosaurus
-ophiostaphyle
-ophiouride
-Ophis
-Ophisaurus
-Ophism
-Ophite
-ophite
-Ophitic
-ophitic
-Ophitism
-Ophiuchid
-Ophiuchus
-ophiuran
-ophiurid
-Ophiurida
-ophiuroid
-Ophiuroidea
-ophiuroidean
-ophryon
-Ophrys
-ophthalaiater
-ophthalmagra
-ophthalmalgia
-ophthalmalgic
-ophthalmatrophia
-ophthalmectomy
-ophthalmencephalon
-ophthalmetrical
-ophthalmia
-ophthalmiac
-ophthalmiatrics
-ophthalmic
-ophthalmious
-ophthalmist
-ophthalmite
-ophthalmitic
-ophthalmitis
-ophthalmoblennorrhea
-ophthalmocarcinoma
-ophthalmocele
-ophthalmocopia
-ophthalmodiagnosis
-ophthalmodiastimeter
-ophthalmodynamometer
-ophthalmodynia
-ophthalmography
-ophthalmoleucoscope
-ophthalmolith
-ophthalmologic
-ophthalmological
-ophthalmologist
-ophthalmology
-ophthalmomalacia
-ophthalmometer
-ophthalmometric
-ophthalmometry
-ophthalmomycosis
-ophthalmomyositis
-ophthalmomyotomy
-ophthalmoneuritis
-ophthalmopathy
-ophthalmophlebotomy
-ophthalmophore
-ophthalmophorous
-ophthalmophthisis
-ophthalmoplasty
-ophthalmoplegia
-ophthalmoplegic
-ophthalmopod
-ophthalmoptosis
-ophthalmorrhagia
-ophthalmorrhea
-ophthalmorrhexis
-Ophthalmosaurus
-ophthalmoscope
-ophthalmoscopic
-ophthalmoscopical
-ophthalmoscopist
-ophthalmoscopy
-ophthalmostasis
-ophthalmostat
-ophthalmostatometer
-ophthalmothermometer
-ophthalmotomy
-ophthalmotonometer
-ophthalmotonometry
-ophthalmotrope
-ophthalmotropometer
-ophthalmy
-opianic
-opianyl
-opiate
-opiateproof
-opiatic
-Opiconsivia
-opificer
-opiism
-Opilia
-Opiliaceae
-opiliaceous
-Opiliones
-Opilionina
-opilionine
-Opilonea
-Opimian
-opinability
-opinable
-opinably
-opinant
-opination
-opinative
-opinatively
-opinator
-opine
-opiner
-opiniaster
-opiniastre
-opiniastrety
-opiniastrous
-opiniater
-opiniative
-opiniatively
-opiniativeness
-opiniatreness
-opiniatrety
-opinion
-opinionable
-opinionaire
-opinional
-opinionate
-opinionated
-opinionatedly
-opinionatedness
-opinionately
-opinionative
-opinionatively
-opinionativeness
-opinioned
-opinionedness
-opinionist
-opiomania
-opiomaniac
-opiophagism
-opiophagy
-opiparous
-opisometer
-opisthenar
-opisthion
-opisthobranch
-Opisthobranchia
-opisthobranchiate
-Opisthocoelia
-opisthocoelian
-opisthocoelous
-opisthocome
-Opisthocomi
-Opisthocomidae
-opisthocomine
-opisthocomous
-opisthodetic
-opisthodome
-opisthodomos
-opisthodomus
-opisthodont
-opisthogastric
-Opisthoglossa
-opisthoglossal
-opisthoglossate
-opisthoglyph
-Opisthoglypha
-opisthoglyphic
-opisthoglyphous
-Opisthognathidae
-opisthognathism
-opisthognathous
-opisthograph
-opisthographal
-opisthographic
-opisthographical
-opisthography
-opisthogyrate
-opisthogyrous
-Opisthoparia
-opisthoparian
-opisthophagic
-opisthoporeia
-opisthorchiasis
-Opisthorchis
-opisthosomal
-Opisthothelae
-opisthotic
-opisthotonic
-opisthotonoid
-opisthotonos
-opisthotonus
-opium
-opiumism
-opobalsam
-opodeldoc
-opodidymus
-opodymus
-opopanax
-Oporto
-opossum
-opotherapy
-Oppian
-oppidan
-oppilate
-oppilation
-oppilative
-opponency
-opponent
-opportune
-opportuneless
-opportunely
-opportuneness
-opportunism
-opportunist
-opportunistic
-opportunistically
-opportunity
-opposability
-opposable
-oppose
-opposed
-opposeless
-opposer
-opposing
-opposingly
-opposit
-opposite
-oppositely
-oppositeness
-oppositiflorous
-oppositifolious
-opposition
-oppositional
-oppositionary
-oppositionism
-oppositionist
-oppositionless
-oppositious
-oppositipetalous
-oppositipinnate
-oppositipolar
-oppositisepalous
-oppositive
-oppositively
-oppositiveness
-opposure
-oppress
-oppressed
-oppressible
-oppression
-oppressionist
-oppressive
-oppressively
-oppressiveness
-oppressor
-opprobriate
-opprobrious
-opprobriously
-opprobriousness
-opprobrium
-opprobry
-oppugn
-oppugnacy
-oppugnance
-oppugnancy
-oppugnant
-oppugnate
-oppugnation
-oppugner
-opsigamy
-opsimath
-opsimathy
-opsiometer
-opsisform
-opsistype
-opsonic
-opsoniferous
-opsonification
-opsonify
-opsonin
-opsonist
-opsonium
-opsonization
-opsonize
-opsonogen
-opsonoid
-opsonology
-opsonometry
-opsonophilia
-opsonophilic
-opsonophoric
-opsonotherapy
-opsy
-opt
-optable
-optableness
-optably
-optant
-optate
-optation
-optative
-optatively
-opthalmophorium
-opthalmoplegy
-opthalmothermometer
-optic
-optical
-optically
-optician
-opticist
-opticity
-opticochemical
-opticociliary
-opticon
-opticopapillary
-opticopupillary
-optics
-optigraph
-optimacy
-optimal
-optimate
-optimates
-optime
-optimism
-optimist
-optimistic
-optimistical
-optimistically
-optimity
-optimization
-optimize
-optimum
-option
-optional
-optionality
-optionalize
-optionally
-optionary
-optionee
-optionor
-optive
-optoblast
-optogram
-optography
-optological
-optologist
-optology
-optomeninx
-optometer
-optometrical
-optometrist
-optometry
-optophone
-optotechnics
-optotype
-Opulaster
-opulence
-opulency
-opulent
-opulently
-opulus
-Opuntia
-Opuntiaceae
-Opuntiales
-opuntioid
-opus
-opuscular
-opuscule
-opusculum
-oquassa
-or
-ora
-orabassu
-orach
-oracle
-oracular
-oracularity
-oracularly
-oracularness
-oraculate
-oraculous
-oraculously
-oraculousness
-oraculum
-orad
-orage
-oragious
-Orakzai
-oral
-oraler
-oralism
-oralist
-orality
-oralization
-oralize
-orally
-oralogist
-oralogy
-Orang
-orang
-orange
-orangeade
-orangebird
-Orangeism
-Orangeist
-orangeleaf
-Orangeman
-orangeman
-oranger
-orangeroot
-orangery
-orangewoman
-orangewood
-orangey
-orangism
-orangist
-orangite
-orangize
-orangutan
-orant
-Oraon
-orarian
-orarion
-orarium
-orary
-orate
-oration
-orational
-orationer
-orator
-oratorial
-oratorially
-Oratorian
-oratorian
-Oratorianism
-Oratorianize
-oratoric
-oratorical
-oratorically
-oratorio
-oratorize
-oratorlike
-oratorship
-oratory
-oratress
-oratrix
-orb
-orbed
-orbic
-orbical
-Orbicella
-orbicle
-orbicular
-orbicularis
-orbicularity
-orbicularly
-orbicularness
-orbiculate
-orbiculated
-orbiculately
-orbiculation
-orbiculatocordate
-orbiculatoelliptical
-Orbiculoidea
-orbific
-Orbilian
-Orbilius
-orbit
-orbital
-orbitale
-orbitar
-orbitary
-orbite
-orbitelar
-Orbitelariae
-orbitelarian
-orbitele
-orbitelous
-orbitofrontal
-Orbitoides
-Orbitolina
-orbitolite
-Orbitolites
-orbitomalar
-orbitomaxillary
-orbitonasal
-orbitopalpebral
-orbitosphenoid
-orbitosphenoidal
-orbitostat
-orbitotomy
-orbitozygomatic
-orbless
-orblet
-Orbulina
-orby
-orc
-Orca
-Orcadian
-orcanet
-orcein
-orchamus
-orchard
-orcharding
-orchardist
-orchardman
-orchat
-orchel
-orchella
-orchesis
-orchesography
-orchester
-Orchestia
-orchestian
-orchestic
-orchestiid
-Orchestiidae
-orchestra
-orchestral
-orchestraless
-orchestrally
-orchestrate
-orchestrater
-orchestration
-orchestrator
-orchestre
-orchestric
-orchestrina
-orchestrion
-orchialgia
-orchic
-orchichorea
-orchid
-Orchidaceae
-orchidacean
-orchidaceous
-Orchidales
-orchidalgia
-orchidectomy
-orchideous
-orchideously
-orchidist
-orchiditis
-orchidocele
-orchidocelioplasty
-orchidologist
-orchidology
-orchidomania
-orchidopexy
-orchidoplasty
-orchidoptosis
-orchidorrhaphy
-orchidotherapy
-orchidotomy
-orchiectomy
-orchiencephaloma
-orchiepididymitis
-orchil
-orchilla
-orchilytic
-orchiocatabasis
-orchiocele
-orchiodynia
-orchiomyeloma
-orchioncus
-orchioneuralgia
-orchiopexy
-orchioplasty
-orchiorrhaphy
-orchioscheocele
-orchioscirrhus
-orchiotomy
-Orchis
-orchitic
-orchitis
-orchotomy
-orcin
-orcinol
-Orcinus
-ordain
-ordainable
-ordainer
-ordainment
-ordanchite
-ordeal
-order
-orderable
-ordered
-orderedness
-orderer
-orderless
-orderliness
-orderly
-ordinable
-ordinal
-ordinally
-ordinance
-ordinand
-ordinant
-ordinar
-ordinarily
-ordinariness
-ordinarius
-ordinary
-ordinaryship
-ordinate
-ordinately
-ordination
-ordinative
-ordinatomaculate
-ordinator
-ordinee
-ordines
-ordnance
-ordonnance
-ordonnant
-ordosite
-Ordovian
-Ordovices
-Ordovician
-ordu
-ordure
-ordurous
-ore
-oread
-Oreamnos
-Oreas
-orecchion
-orectic
-orective
-oreillet
-orellin
-oreman
-orenda
-orendite
-Oreocarya
-Oreodon
-oreodont
-Oreodontidae
-oreodontine
-oreodontoid
-Oreodoxa
-Oreophasinae
-oreophasine
-Oreophasis
-Oreortyx
-oreotragine
-Oreotragus
-Oreotrochilus
-Orestean
-Oresteia
-oreweed
-orewood
-orexis
-orf
-orfgild
-organ
-organal
-organbird
-organdy
-organella
-organelle
-organer
-organette
-organic
-organical
-organically
-organicalness
-organicism
-organicismal
-organicist
-organicistic
-organicity
-organific
-organing
-organism
-organismal
-organismic
-organist
-organistic
-organistrum
-organistship
-organity
-organizability
-organizable
-organization
-organizational
-organizationally
-organizationist
-organizatory
-organize
-organized
-organizer
-organless
-organoantimony
-organoarsenic
-organobismuth
-organoboron
-organochordium
-organogel
-organogen
-organogenesis
-organogenetic
-organogenic
-organogenist
-organogeny
-organogold
-organographic
-organographical
-organographist
-organography
-organoid
-organoiron
-organolead
-organoleptic
-organolithium
-organologic
-organological
-organologist
-organology
-organomagnesium
-organomercury
-organometallic
-organon
-organonomic
-organonomy
-organonym
-organonymal
-organonymic
-organonymy
-organopathy
-organophil
-organophile
-organophilic
-organophone
-organophonic
-organophyly
-organoplastic
-organoscopy
-organosilicon
-organosilver
-organosodium
-organosol
-organotherapy
-organotin
-organotrophic
-organotropic
-organotropically
-organotropism
-organotropy
-organozinc
-organry
-organule
-organum
-organzine
-orgasm
-orgasmic
-orgastic
-orgeat
-orgia
-orgiac
-orgiacs
-orgiasm
-orgiast
-orgiastic
-orgiastical
-orgic
-orgue
-orguinette
-orgulous
-orgulously
-orgy
-orgyia
-Orias
-Oribatidae
-oribi
-orichalceous
-orichalch
-orichalcum
-oriconic
-oricycle
-oriel
-oriency
-orient
-Oriental
-oriental
-Orientalia
-orientalism
-orientalist
-orientality
-orientalization
-orientalize
-orientally
-Orientalogy
-orientate
-orientation
-orientative
-orientator
-orientite
-orientization
-orientize
-oriently
-orientness
-orifacial
-orifice
-orificial
-oriflamb
-oriflamme
-oriform
-origan
-origanized
-Origanum
-Origenian
-Origenic
-Origenical
-Origenism
-Origenist
-Origenistic
-Origenize
-origin
-originable
-original
-originalist
-originality
-originally
-originalness
-originant
-originarily
-originary
-originate
-origination
-originative
-originatively
-originator
-originatress
-originist
-orignal
-orihon
-orihyperbola
-orillion
-orillon
-orinasal
-orinasality
-oriole
-Oriolidae
-Oriolus
-Orion
-Oriskanian
-orismologic
-orismological
-orismology
-orison
-orisphere
-oristic
-Oriya
-Orkhon
-Orkneyan
-Orlando
-orle
-orlean
-Orleanism
-Orleanist
-Orleanistic
-Orleans
-orlet
-orleways
-orlewise
-orlo
-orlop
-Ormazd
-ormer
-ormolu
-Ormond
-orna
-ornament
-ornamental
-ornamentalism
-ornamentalist
-ornamentality
-ornamentalize
-ornamentally
-ornamentary
-ornamentation
-ornamenter
-ornamentist
-ornate
-ornately
-ornateness
-ornation
-ornature
-orneriness
-ornery
-ornis
-orniscopic
-orniscopist
-orniscopy
-ornithic
-ornithichnite
-ornithine
-Ornithischia
-ornithischian
-ornithivorous
-ornithobiographical
-ornithobiography
-ornithocephalic
-Ornithocephalidae
-ornithocephalous
-Ornithocephalus
-ornithocoprolite
-ornithocopros
-ornithodelph
-Ornithodelphia
-ornithodelphian
-ornithodelphic
-ornithodelphous
-Ornithodoros
-Ornithogaea
-Ornithogaean
-Ornithogalum
-ornithogeographic
-ornithogeographical
-ornithography
-ornithoid
-Ornitholestes
-ornitholite
-ornitholitic
-ornithologic
-ornithological
-ornithologically
-ornithologist
-ornithology
-ornithomancy
-ornithomantia
-ornithomantic
-ornithomantist
-Ornithomimidae
-Ornithomimus
-ornithomorph
-ornithomorphic
-ornithomyzous
-ornithon
-Ornithopappi
-ornithophile
-ornithophilist
-ornithophilite
-ornithophilous
-ornithophily
-ornithopod
-Ornithopoda
-ornithopter
-Ornithoptera
-Ornithopteris
-Ornithorhynchidae
-ornithorhynchous
-Ornithorhynchus
-ornithosaur
-Ornithosauria
-ornithosaurian
-Ornithoscelida
-ornithoscelidan
-ornithoscopic
-ornithoscopist
-ornithoscopy
-ornithosis
-ornithotomical
-ornithotomist
-ornithotomy
-ornithotrophy
-Ornithurae
-ornithuric
-ornithurous
-ornoite
-oroanal
-Orobanchaceae
-orobanchaceous
-Orobanche
-orobancheous
-orobathymetric
-Orobatoidea
-Orochon
-orocratic
-orodiagnosis
-orogen
-orogenesis
-orogenesy
-orogenetic
-orogenic
-orogeny
-orograph
-orographic
-orographical
-orographically
-orography
-oroheliograph
-Orohippus
-orohydrographic
-orohydrographical
-orohydrography
-oroide
-orolingual
-orological
-orologist
-orology
-orometer
-orometric
-orometry
-Oromo
-oronasal
-oronoco
-Orontium
-oropharyngeal
-oropharynx
-orotherapy
-Orotinan
-orotund
-orotundity
-orphan
-orphancy
-orphandom
-orphange
-orphanhood
-orphanism
-orphanize
-orphanry
-orphanship
-orpharion
-Orphean
-Orpheist
-orpheon
-orpheonist
-orpheum
-Orpheus
-Orphic
-Orphical
-Orphically
-Orphicism
-Orphism
-Orphize
-orphrey
-orphreyed
-orpiment
-orpine
-Orpington
-orrery
-orrhoid
-orrhology
-orrhotherapy
-orris
-orrisroot
-orseille
-orseilline
-orsel
-orselle
-orseller
-orsellic
-orsellinate
-orsellinic
-Orson
-ort
-ortalid
-Ortalidae
-ortalidian
-Ortalis
-ortet
-Orthagoriscus
-orthal
-orthantimonic
-Ortheris
-orthian
-orthic
-orthicon
-orthid
-Orthidae
-Orthis
-orthite
-orthitic
-ortho
-orthoarsenite
-orthoaxis
-orthobenzoquinone
-orthobiosis
-orthoborate
-orthobrachycephalic
-orthocarbonic
-orthocarpous
-Orthocarpus
-orthocenter
-orthocentric
-orthocephalic
-orthocephalous
-orthocephaly
-orthoceracone
-Orthoceran
-Orthoceras
-Orthoceratidae
-orthoceratite
-orthoceratitic
-orthoceratoid
-orthochlorite
-orthochromatic
-orthochromatize
-orthoclase
-orthoclasite
-orthoclastic
-orthocoumaric
-orthocresol
-orthocymene
-orthodiaene
-orthodiagonal
-orthodiagram
-orthodiagraph
-orthodiagraphic
-orthodiagraphy
-orthodiazin
-orthodiazine
-orthodolichocephalic
-orthodomatic
-orthodome
-orthodontia
-orthodontic
-orthodontics
-orthodontist
-orthodox
-orthodoxal
-orthodoxality
-orthodoxally
-orthodoxian
-orthodoxical
-orthodoxically
-orthodoxism
-orthodoxist
-orthodoxly
-orthodoxness
-orthodoxy
-orthodromic
-orthodromics
-orthodromy
-orthoepic
-orthoepical
-orthoepically
-orthoepist
-orthoepistic
-orthoepy
-orthoformic
-orthogamous
-orthogamy
-orthogenesis
-orthogenetic
-orthogenic
-orthognathic
-orthognathism
-orthognathous
-orthognathus
-orthognathy
-orthogneiss
-orthogonal
-orthogonality
-orthogonally
-orthogonial
-orthograde
-orthogranite
-orthograph
-orthographer
-orthographic
-orthographical
-orthographically
-orthographist
-orthographize
-orthography
-orthohydrogen
-orthologer
-orthologian
-orthological
-orthology
-orthometopic
-orthometric
-orthometry
-Orthonectida
-orthonitroaniline
-orthopath
-orthopathic
-orthopathically
-orthopathy
-orthopedia
-orthopedic
-orthopedical
-orthopedically
-orthopedics
-orthopedist
-orthopedy
-orthophenylene
-orthophonic
-orthophony
-orthophoria
-orthophoric
-orthophosphate
-orthophosphoric
-orthophyre
-orthophyric
-orthopinacoid
-orthopinacoidal
-orthoplastic
-orthoplasy
-orthoplumbate
-orthopnea
-orthopneic
-orthopod
-Orthopoda
-orthopraxis
-orthopraxy
-orthoprism
-orthopsychiatric
-orthopsychiatrical
-orthopsychiatrist
-orthopsychiatry
-orthopter
-Orthoptera
-orthopteral
-orthopteran
-orthopterist
-orthopteroid
-Orthopteroidea
-orthopterological
-orthopterologist
-orthopterology
-orthopteron
-orthopterous
-orthoptic
-orthopyramid
-orthopyroxene
-orthoquinone
-orthorhombic
-Orthorrhapha
-orthorrhaphous
-orthorrhaphy
-orthoscope
-orthoscopic
-orthose
-orthosemidin
-orthosemidine
-orthosilicate
-orthosilicic
-orthosis
-orthosite
-orthosomatic
-orthospermous
-orthostatic
-orthostichous
-orthostichy
-orthostyle
-orthosubstituted
-orthosymmetric
-orthosymmetrical
-orthosymmetrically
-orthosymmetry
-orthotactic
-orthotectic
-orthotic
-orthotolidin
-orthotolidine
-orthotoluic
-orthotoluidin
-orthotoluidine
-orthotomic
-orthotomous
-orthotone
-orthotonesis
-orthotonic
-orthotonus
-orthotropal
-orthotropic
-orthotropism
-orthotropous
-orthotropy
-orthotype
-orthotypous
-orthovanadate
-orthovanadic
-orthoveratraldehyde
-orthoveratric
-orthoxazin
-orthoxazine
-orthoxylene
-orthron
-ortiga
-ortive
-Ortol
-ortolan
-Ortrud
-ortstein
-ortygan
-Ortygian
-Ortyginae
-ortygine
-Ortyx
-Orunchun
-orvietan
-orvietite
-Orvieto
-Orville
-ory
-Orycteropodidae
-Orycteropus
-oryctics
-oryctognostic
-oryctognostical
-oryctognostically
-oryctognosy
-Oryctolagus
-oryssid
-Oryssidae
-Oryssus
-Oryx
-Oryza
-oryzenin
-oryzivorous
-Oryzomys
-Oryzopsis
-Oryzorictes
-Oryzorictinae
-Os
-os
-Osage
-osamin
-osamine
-osazone
-Osc
-Oscan
-Oscar
-Oscarella
-Oscarellidae
-oscella
-oscheal
-oscheitis
-oscheocarcinoma
-oscheocele
-oscheolith
-oscheoma
-oscheoncus
-oscheoplasty
-Oschophoria
-oscillance
-oscillancy
-oscillant
-Oscillaria
-Oscillariaceae
-oscillariaceous
-oscillate
-oscillating
-oscillation
-oscillative
-oscillatively
-oscillator
-Oscillatoria
-Oscillatoriaceae
-oscillatoriaceous
-oscillatorian
-oscillatory
-oscillogram
-oscillograph
-oscillographic
-oscillography
-oscillometer
-oscillometric
-oscillometry
-oscilloscope
-oscin
-oscine
-Oscines
-oscinian
-Oscinidae
-oscinine
-Oscinis
-oscitance
-oscitancy
-oscitant
-oscitantly
-oscitate
-oscitation
-oscnode
-osculable
-osculant
-oscular
-oscularity
-osculate
-osculation
-osculatory
-osculatrix
-oscule
-osculiferous
-osculum
-oscurrantist
-ose
-osela
-oshac
-Osiandrian
-oside
-osier
-osiered
-osierlike
-osiery
-Osirian
-Osiride
-Osiridean
-Osirification
-Osirify
-Osiris
-Osirism
-Oskar
-Osmanie
-Osmanli
-Osmanthus
-osmate
-osmatic
-osmatism
-osmazomatic
-osmazomatous
-osmazome
-Osmeridae
-Osmerus
-osmesis
-osmeterium
-osmetic
-osmic
-osmidrosis
-osmin
-osmina
-osmious
-osmiridium
-osmium
-osmodysphoria
-osmogene
-osmograph
-osmolagnia
-osmology
-osmometer
-osmometric
-osmometry
-Osmond
-osmondite
-osmophore
-osmoregulation
-Osmorhiza
-osmoscope
-osmose
-osmosis
-osmotactic
-osmotaxis
-osmotherapy
-osmotic
-osmotically
-osmous
-osmund
-Osmunda
-Osmundaceae
-osmundaceous
-osmundine
-Osnaburg
-Osnappar
-osoberry
-osone
-osophy
-osotriazine
-osotriazole
-osphradial
-osphradium
-osphresiolagnia
-osphresiologic
-osphresiologist
-osphresiology
-osphresiometer
-osphresiometry
-osphresiophilia
-osphresis
-osphretic
-Osphromenidae
-osphyalgia
-osphyalgic
-osphyarthritis
-osphyitis
-osphyocele
-osphyomelitis
-osprey
-ossal
-ossarium
-ossature
-osse
-ossein
-osselet
-ossements
-osseoalbuminoid
-osseoaponeurotic
-osseocartilaginous
-osseofibrous
-osseomucoid
-osseous
-osseously
-Osset
-Ossetian
-Ossetic
-Ossetine
-Ossetish
-Ossian
-Ossianesque
-Ossianic
-Ossianism
-Ossianize
-ossicle
-ossicular
-ossiculate
-ossicule
-ossiculectomy
-ossiculotomy
-ossiculum
-ossiferous
-ossific
-ossification
-ossified
-ossifier
-ossifluence
-ossifluent
-ossiform
-ossifrage
-ossifrangent
-ossify
-ossivorous
-ossuarium
-ossuary
-ossypite
-ostalgia
-Ostara
-ostariophysan
-Ostariophyseae
-Ostariophysi
-ostariophysial
-ostariophysous
-ostarthritis
-osteal
-ostealgia
-osteanabrosis
-osteanagenesis
-ostearthritis
-ostearthrotomy
-ostectomy
-osteectomy
-osteectopia
-osteectopy
-Osteichthyes
-ostein
-osteitic
-osteitis
-ostemia
-ostempyesis
-ostensibility
-ostensible
-ostensibly
-ostension
-ostensive
-ostensively
-ostensorium
-ostensory
-ostent
-ostentate
-ostentation
-ostentatious
-ostentatiously
-ostentatiousness
-ostentive
-ostentous
-osteoaneurysm
-osteoarthritis
-osteoarthropathy
-osteoarthrotomy
-osteoblast
-osteoblastic
-osteoblastoma
-osteocachetic
-osteocarcinoma
-osteocartilaginous
-osteocele
-osteocephaloma
-osteochondritis
-osteochondrofibroma
-osteochondroma
-osteochondromatous
-osteochondropathy
-osteochondrophyte
-osteochondrosarcoma
-osteochondrous
-osteoclasia
-osteoclasis
-osteoclast
-osteoclastic
-osteoclasty
-osteocolla
-osteocomma
-osteocranium
-osteocystoma
-osteodentin
-osteodentinal
-osteodentine
-osteoderm
-osteodermal
-osteodermatous
-osteodermia
-osteodermis
-osteodiastasis
-osteodynia
-osteodystrophy
-osteoencephaloma
-osteoenchondroma
-osteoepiphysis
-osteofibroma
-osteofibrous
-osteogangrene
-osteogen
-osteogenesis
-osteogenetic
-osteogenic
-osteogenist
-osteogenous
-osteogeny
-osteoglossid
-Osteoglossidae
-osteoglossoid
-Osteoglossum
-osteographer
-osteography
-osteohalisteresis
-osteoid
-Osteolepidae
-Osteolepis
-osteolite
-osteologer
-osteologic
-osteological
-osteologically
-osteologist
-osteology
-osteolysis
-osteolytic
-osteoma
-osteomalacia
-osteomalacial
-osteomalacic
-osteomancy
-osteomanty
-osteomatoid
-osteomere
-osteometric
-osteometrical
-osteometry
-osteomyelitis
-osteoncus
-osteonecrosis
-osteoneuralgia
-osteopaedion
-osteopath
-osteopathic
-osteopathically
-osteopathist
-osteopathy
-osteopedion
-osteoperiosteal
-osteoperiostitis
-osteopetrosis
-osteophage
-osteophagia
-osteophlebitis
-osteophone
-osteophony
-osteophore
-osteophyma
-osteophyte
-osteophytic
-osteoplaque
-osteoplast
-osteoplastic
-osteoplasty
-osteoporosis
-osteoporotic
-osteorrhaphy
-osteosarcoma
-osteosarcomatous
-osteosclerosis
-osteoscope
-osteosis
-osteosteatoma
-osteostixis
-osteostomatous
-osteostomous
-osteostracan
-Osteostraci
-osteosuture
-osteosynovitis
-osteosynthesis
-osteothrombosis
-osteotome
-osteotomist
-osteotomy
-osteotribe
-osteotrite
-osteotrophic
-osteotrophy
-Ostertagia
-ostial
-ostiary
-ostiate
-Ostic
-ostiolar
-ostiolate
-ostiole
-ostitis
-ostium
-ostleress
-Ostmannic
-ostmark
-Ostmen
-ostosis
-Ostracea
-ostracean
-ostraceous
-Ostraciidae
-ostracine
-ostracioid
-Ostracion
-ostracism
-ostracizable
-ostracization
-ostracize
-ostracizer
-ostracod
-Ostracoda
-ostracode
-ostracoderm
-Ostracodermi
-ostracodous
-ostracoid
-Ostracoidea
-ostracon
-ostracophore
-Ostracophori
-ostracophorous
-ostracum
-Ostraeacea
-ostraite
-Ostrea
-ostreaceous
-ostreger
-ostreicultural
-ostreiculture
-ostreiculturist
-Ostreidae
-ostreiform
-ostreodynamometer
-ostreoid
-ostreophage
-ostreophagist
-ostreophagous
-ostrich
-ostrichlike
-Ostrogoth
-Ostrogothian
-Ostrogothic
-Ostrya
-Ostyak
-Oswald
-Oswegan
-otacoustic
-otacousticon
-Otaheitan
-otalgia
-otalgic
-otalgy
-Otaria
-otarian
-Otariidae
-Otariinae
-otariine
-otarine
-otarioid
-otary
-otate
-otectomy
-otelcosis
-Otello
-Othake
-othelcosis
-Othello
-othematoma
-othemorrhea
-otheoscope
-other
-otherdom
-otherest
-othergates
-otherguess
-otherhow
-otherism
-otherist
-otherness
-othersome
-othertime
-otherwards
-otherwhence
-otherwhere
-otherwhereness
-otherwheres
-otherwhile
-otherwhiles
-otherwhither
-otherwise
-otherwiseness
-otherworld
-otherworldliness
-otherworldly
-otherworldness
-Othin
-Othinism
-othmany
-Othonna
-othygroma
-otiant
-otiatric
-otiatrics
-otiatry
-otic
-oticodinia
-Otidae
-Otides
-Otididae
-otidiform
-otidine
-Otidiphaps
-otidium
-otiorhynchid
-Otiorhynchidae
-Otiorhynchinae
-otiose
-otiosely
-otioseness
-otiosity
-Otis
-otitic
-otitis
-otkon
-Oto
-otoantritis
-otoblennorrhea
-otocariasis
-otocephalic
-otocephaly
-otocerebritis
-otocleisis
-otoconial
-otoconite
-otoconium
-otocrane
-otocranial
-otocranic
-otocranium
-Otocyon
-otocyst
-otocystic
-otodynia
-otodynic
-otoencephalitis
-otogenic
-otogenous
-otographical
-otography
-Otogyps
-otohemineurasthenia
-otolaryngologic
-otolaryngologist
-otolaryngology
-otolite
-otolith
-Otolithidae
-Otolithus
-otolitic
-otological
-otologist
-otology
-Otomaco
-otomassage
-Otomi
-Otomian
-Otomitlan
-otomucormycosis
-otomyces
-otomycosis
-otonecrectomy
-otoneuralgia
-otoneurasthenia
-otopathic
-otopathy
-otopharyngeal
-otophone
-otopiesis
-otoplastic
-otoplasty
-otopolypus
-otopyorrhea
-otopyosis
-otorhinolaryngologic
-otorhinolaryngologist
-otorhinolaryngology
-otorrhagia
-otorrhea
-otorrhoea
-otosalpinx
-otosclerosis
-otoscope
-otoscopic
-otoscopy
-otosis
-otosphenal
-otosteal
-otosteon
-ototomy
-Otozoum
-ottajanite
-ottar
-ottavarima
-Ottawa
-otter
-otterer
-otterhound
-ottinger
-ottingkar
-Otto
-otto
-Ottoman
-Ottomanean
-Ottomanic
-Ottomanism
-Ottomanization
-Ottomanize
-Ottomanlike
-Ottomite
-ottrelife
-Ottweilian
-Otuquian
-oturia
-Otus
-Otyak
-ouabain
-ouabaio
-ouabe
-ouachitite
-ouakari
-ouananiche
-oubliette
-ouch
-Oudemian
-oudenarde
-Oudenodon
-oudenodont
-ouenite
-ouf
-ough
-ought
-oughtness
-oughtnt
-Ouija
-ouistiti
-oukia
-oulap
-ounce
-ounds
-ouphe
-ouphish
-our
-Ouranos
-ourie
-ouroub
-Ourouparia
-ours
-ourself
-ourselves
-oust
-ouster
-out
-outact
-outadmiral
-Outagami
-outage
-outambush
-outarde
-outargue
-outask
-outawe
-outbabble
-outback
-outbacker
-outbake
-outbalance
-outban
-outbanter
-outbar
-outbargain
-outbark
-outbawl
-outbeam
-outbear
-outbearing
-outbeg
-outbeggar
-outbelch
-outbellow
-outbent
-outbetter
-outbid
-outbidder
-outbirth
-outblacken
-outblaze
-outbleat
-outbleed
-outbless
-outbloom
-outblossom
-outblot
-outblow
-outblowing
-outblown
-outbluff
-outblunder
-outblush
-outbluster
-outboard
-outboast
-outbolting
-outbond
-outbook
-outborn
-outborough
-outbound
-outboundaries
-outbounds
-outbow
-outbowed
-outbowl
-outbox
-outbrag
-outbranch
-outbranching
-outbrave
-outbray
-outbrazen
-outbreak
-outbreaker
-outbreaking
-outbreath
-outbreathe
-outbreather
-outbred
-outbreed
-outbreeding
-outbribe
-outbridge
-outbring
-outbrother
-outbud
-outbuild
-outbuilding
-outbulge
-outbulk
-outbully
-outburn
-outburst
-outbustle
-outbuy
-outbuzz
-outby
-outcant
-outcaper
-outcarol
-outcarry
-outcase
-outcast
-outcaste
-outcasting
-outcastness
-outcavil
-outchamber
-outcharm
-outchase
-outchatter
-outcheat
-outchide
-outcity
-outclamor
-outclass
-outclerk
-outclimb
-outcome
-outcomer
-outcoming
-outcompass
-outcomplete
-outcompliment
-outcorner
-outcountry
-outcourt
-outcrawl
-outcricket
-outcrier
-outcrop
-outcropper
-outcross
-outcrossing
-outcrow
-outcrowd
-outcry
-outcull
-outcure
-outcurse
-outcurve
-outcut
-outdaciousness
-outdance
-outdare
-outdate
-outdated
-outdazzle
-outdevil
-outdispatch
-outdistance
-outdistrict
-outdo
-outdodge
-outdoer
-outdoor
-outdoorness
-outdoors
-outdoorsman
-outdraft
-outdragon
-outdraw
-outdream
-outdress
-outdrink
-outdrive
-outdure
-outdwell
-outdweller
-outdwelling
-outeat
-outecho
-outed
-outedge
-outen
-outer
-outerly
-outermost
-outerness
-outerwear
-outeye
-outeyed
-outfable
-outface
-outfall
-outfame
-outfangthief
-outfast
-outfawn
-outfeast
-outfeat
-outfeeding
-outfence
-outferret
-outfiction
-outfield
-outfielder
-outfieldsman
-outfight
-outfighter
-outfighting
-outfigure
-outfish
-outfit
-outfitter
-outflame
-outflank
-outflanker
-outflanking
-outflare
-outflash
-outflatter
-outfling
-outfloat
-outflourish
-outflow
-outflue
-outflung
-outflunky
-outflush
-outflux
-outfly
-outfold
-outfool
-outfoot
-outform
-outfort
-outfreeman
-outfront
-outfroth
-outfrown
-outgabble
-outgain
-outgallop
-outgamble
-outgame
-outgang
-outgarment
-outgarth
-outgas
-outgate
-outgauge
-outgaze
-outgeneral
-outgive
-outgiving
-outglad
-outglare
-outgleam
-outglitter
-outgloom
-outglow
-outgnaw
-outgo
-outgoer
-outgoing
-outgoingness
-outgone
-outgreen
-outgrin
-outground
-outgrow
-outgrowing
-outgrowth
-outguard
-outguess
-outgun
-outgush
-outhammer
-outhasten
-outhaul
-outhauler
-outhear
-outheart
-outhector
-outheel
-outher
-outhire
-outhiss
-outhit
-outhold
-outhorror
-outhouse
-outhousing
-outhowl
-outhue
-outhumor
-outhunt
-outhurl
-outhut
-outhymn
-outhyperbolize
-outimage
-outing
-outinvent
-outish
-outissue
-outjazz
-outjest
-outjet
-outjetting
-outjinx
-outjockey
-outjourney
-outjuggle
-outjump
-outjut
-outkeeper
-outkick
-outkill
-outking
-outkiss
-outkitchen
-outknave
-outknee
-outlabor
-outlaid
-outlance
-outland
-outlander
-outlandish
-outlandishlike
-outlandishly
-outlandishness
-outlash
-outlast
-outlaugh
-outlaunch
-outlaw
-outlawry
-outlay
-outlean
-outleap
-outlearn
-outlegend
-outlength
-outlengthen
-outler
-outlet
-outlie
-outlier
-outlighten
-outlimb
-outlimn
-outline
-outlinear
-outlined
-outlineless
-outliner
-outlinger
-outlip
-outlipped
-outlive
-outliver
-outlodging
-outlook
-outlooker
-outlord
-outlove
-outlung
-outluster
-outly
-outlying
-outmagic
-outmalaprop
-outman
-outmaneuver
-outmantle
-outmarch
-outmarriage
-outmarry
-outmaster
-outmatch
-outmate
-outmeasure
-outmerchant
-outmiracle
-outmode
-outmoded
-outmost
-outmount
-outmouth
-outmove
-outname
-outness
-outnight
-outnoise
-outnook
-outnumber
-outoffice
-outoven
-outpace
-outpage
-outpaint
-outparagon
-outparamour
-outparish
-outpart
-outpass
-outpassion
-outpath
-outpatient
-outpay
-outpayment
-outpeal
-outpeep
-outpeer
-outpension
-outpensioner
-outpeople
-outperform
-outpick
-outpicket
-outpipe
-outpitch
-outpity
-outplace
-outplan
-outplay
-outplayed
-outplease
-outplod
-outplot
-outpocketing
-outpoint
-outpoise
-outpoison
-outpoll
-outpomp
-outpop
-outpopulate
-outporch
-outport
-outporter
-outportion
-outpost
-outpouching
-outpour
-outpourer
-outpouring
-outpractice
-outpraise
-outpray
-outpreach
-outpreen
-outprice
-outprodigy
-outproduce
-outpromise
-outpry
-outpull
-outpupil
-outpurl
-outpurse
-outpush
-output
-outputter
-outquaff
-outquarters
-outqueen
-outquestion
-outquibble
-outquote
-outrace
-outrage
-outrageous
-outrageously
-outrageousness
-outrageproof
-outrager
-outraging
-outrail
-outrance
-outrange
-outrank
-outrant
-outrap
-outrate
-outraught
-outrave
-outray
-outre
-outreach
-outread
-outreason
-outreckon
-outredden
-outrede
-outreign
-outrelief
-outremer
-outreness
-outrhyme
-outrick
-outride
-outrider
-outriding
-outrig
-outrigger
-outriggered
-outriggerless
-outrigging
-outright
-outrightly
-outrightness
-outring
-outrival
-outroar
-outrogue
-outroll
-outromance
-outrooper
-outroot
-outrove
-outrow
-outroyal
-outrun
-outrunner
-outrush
-outsail
-outsaint
-outsally
-outsatisfy
-outsavor
-outsay
-outscent
-outscold
-outscore
-outscorn
-outscour
-outscouring
-outscream
-outsea
-outseam
-outsearch
-outsee
-outseek
-outsell
-outsentry
-outsert
-outservant
-outset
-outsetting
-outsettlement
-outsettler
-outshadow
-outshake
-outshame
-outshape
-outsharp
-outsharpen
-outsheathe
-outshift
-outshine
-outshiner
-outshoot
-outshot
-outshoulder
-outshout
-outshove
-outshow
-outshower
-outshriek
-outshrill
-outshut
-outside
-outsided
-outsidedness
-outsideness
-outsider
-outsift
-outsigh
-outsight
-outsin
-outsing
-outsit
-outsize
-outsized
-outskill
-outskip
-outskirmish
-outskirmisher
-outskirt
-outskirter
-outslander
-outslang
-outsleep
-outslide
-outslink
-outsmart
-outsmell
-outsmile
-outsnatch
-outsnore
-outsoar
-outsole
-outsoler
-outsonnet
-outsophisticate
-outsound
-outspan
-outsparkle
-outspeak
-outspeaker
-outspeech
-outspeed
-outspell
-outspend
-outspent
-outspill
-outspin
-outspirit
-outspit
-outsplendor
-outspoken
-outspokenly
-outspokenness
-outsport
-outspout
-outspread
-outspring
-outsprint
-outspue
-outspurn
-outspurt
-outstagger
-outstair
-outstand
-outstander
-outstanding
-outstandingly
-outstandingness
-outstare
-outstart
-outstarter
-outstartle
-outstate
-outstation
-outstatistic
-outstature
-outstay
-outsteal
-outsteam
-outstep
-outsting
-outstink
-outstood
-outstorm
-outstrain
-outstream
-outstreet
-outstretch
-outstretcher
-outstride
-outstrike
-outstrip
-outstrive
-outstroke
-outstrut
-outstudent
-outstudy
-outstunt
-outsubtle
-outsuck
-outsucken
-outsuffer
-outsuitor
-outsulk
-outsum
-outsuperstition
-outswagger
-outswarm
-outswear
-outsweep
-outsweeping
-outsweeten
-outswell
-outswift
-outswim
-outswindle
-outswing
-outswirl
-outtaken
-outtalent
-outtalk
-outtask
-outtaste
-outtear
-outtease
-outtell
-outthieve
-outthink
-outthreaten
-outthrob
-outthrough
-outthrow
-outthrust
-outthruster
-outthunder
-outthwack
-outtinkle
-outtire
-outtoil
-outtongue
-outtop
-outtower
-outtrade
-outtrail
-outtravel
-outtrick
-outtrot
-outtrump
-outturn
-outturned
-outtyrannize
-outusure
-outvalue
-outvanish
-outvaunt
-outvelvet
-outvenom
-outvictor
-outvie
-outvier
-outvigil
-outvillage
-outvillain
-outvociferate
-outvoice
-outvote
-outvoter
-outvoyage
-outwait
-outwake
-outwale
-outwalk
-outwall
-outwallop
-outwander
-outwar
-outwarble
-outward
-outwardly
-outwardmost
-outwardness
-outwards
-outwash
-outwaste
-outwatch
-outwater
-outwave
-outwealth
-outweapon
-outwear
-outweary
-outweave
-outweed
-outweep
-outweigh
-outweight
-outwell
-outwent
-outwhirl
-outwick
-outwile
-outwill
-outwind
-outwindow
-outwing
-outwish
-outwit
-outwith
-outwittal
-outwitter
-outwoe
-outwoman
-outwood
-outword
-outwore
-outwork
-outworker
-outworld
-outworn
-outworth
-outwrangle
-outwrench
-outwrest
-outwrestle
-outwriggle
-outwring
-outwrite
-outwrought
-outyard
-outyell
-outyelp
-outyield
-outzany
-ouzel
-Ova
-ova
-Ovaherero
-oval
-ovalbumin
-ovalescent
-ovaliform
-ovalish
-ovalization
-ovalize
-ovally
-ovalness
-ovaloid
-ovalwise
-Ovambo
-Ovampo
-Ovangangela
-ovant
-ovarial
-ovarian
-ovarin
-ovarioabdominal
-ovariocele
-ovariocentesis
-ovariocyesis
-ovariodysneuria
-ovariohysterectomy
-ovariole
-ovariolumbar
-ovariorrhexis
-ovariosalpingectomy
-ovariosteresis
-ovariostomy
-ovariotomist
-ovariotomize
-ovariotomy
-ovariotubal
-ovarious
-ovaritis
-ovarium
-ovary
-ovate
-ovateconical
-ovated
-ovately
-ovation
-ovational
-ovationary
-ovatoacuminate
-ovatoconical
-ovatocordate
-ovatocylindraceous
-ovatodeltoid
-ovatoellipsoidal
-ovatoglobose
-ovatolanceolate
-ovatooblong
-ovatoorbicular
-ovatopyriform
-ovatoquadrangular
-ovatorotundate
-ovatoserrate
-ovatotriangular
-oven
-ovenbird
-ovenful
-ovenlike
-ovenly
-ovenman
-ovenpeel
-ovenstone
-ovenware
-ovenwise
-over
-overability
-overable
-overabound
-overabsorb
-overabstain
-overabstemious
-overabstemiousness
-overabundance
-overabundant
-overabundantly
-overabuse
-overaccentuate
-overaccumulate
-overaccumulation
-overaccuracy
-overaccurate
-overaccurately
-overact
-overaction
-overactive
-overactiveness
-overactivity
-overacute
-overaddiction
-overadvance
-overadvice
-overaffect
-overaffirmation
-overafflict
-overaffliction
-overage
-overageness
-overaggravate
-overaggravation
-overagitate
-overagonize
-overall
-overalled
-overalls
-overambitioned
-overambitious
-overambling
-overanalyze
-overangelic
-overannotate
-overanswer
-overanxiety
-overanxious
-overanxiously
-overappareled
-overappraisal
-overappraise
-overapprehended
-overapprehension
-overapprehensive
-overapt
-overarch
-overargue
-overarm
-overartificial
-overartificiality
-overassail
-overassert
-overassertion
-overassertive
-overassertively
-overassertiveness
-overassess
-overassessment
-overassumption
-overattached
-overattachment
-overattention
-overattentive
-overattentively
-overawe
-overawful
-overawn
-overawning
-overbake
-overbalance
-overballast
-overbalm
-overbanded
-overbandy
-overbank
-overbanked
-overbark
-overbarren
-overbarrenness
-overbase
-overbaseness
-overbashful
-overbashfully
-overbashfulness
-overbattle
-overbear
-overbearance
-overbearer
-overbearing
-overbearingly
-overbearingness
-overbeat
-overbeating
-overbeetling
-overbelief
-overbend
-overbepatched
-overberg
-overbet
-overbias
-overbid
-overbig
-overbigness
-overbillow
-overbit
-overbite
-overbitten
-overbitter
-overbitterly
-overbitterness
-overblack
-overblame
-overblaze
-overbleach
-overblessed
-overblessedness
-overblind
-overblindly
-overblithe
-overbloom
-overblouse
-overblow
-overblowing
-overblown
-overboard
-overboast
-overboastful
-overbodice
-overboding
-overbody
-overboil
-overbold
-overboldly
-overboldness
-overbook
-overbookish
-overbooming
-overborne
-overborrow
-overbought
-overbound
-overbounteous
-overbounteously
-overbounteousness
-overbow
-overbowed
-overbowl
-overbrace
-overbragging
-overbrained
-overbranch
-overbrave
-overbravely
-overbravery
-overbray
-overbreak
-overbreathe
-overbred
-overbreed
-overbribe
-overbridge
-overbright
-overbrightly
-overbrightness
-overbrilliancy
-overbrilliant
-overbrilliantly
-overbrim
-overbrimmingly
-overbroaden
-overbroil
-overbrood
-overbrow
-overbrown
-overbrowse
-overbrush
-overbrutal
-overbrutality
-overbrutalize
-overbrutally
-overbubbling
-overbuild
-overbuilt
-overbulk
-overbulky
-overbumptious
-overburden
-overburdeningly
-overburdensome
-overburn
-overburned
-overburningly
-overburnt
-overburst
-overburthen
-overbusily
-overbusiness
-overbusy
-overbuy
-overby
-overcall
-overcanny
-overcanopy
-overcap
-overcapable
-overcapably
-overcapacity
-overcape
-overcapitalization
-overcapitalize
-overcaptious
-overcaptiously
-overcaptiousness
-overcard
-overcare
-overcareful
-overcarefully
-overcareless
-overcarelessly
-overcarelessness
-overcaring
-overcarking
-overcarry
-overcast
-overcasting
-overcasual
-overcasually
-overcatch
-overcaution
-overcautious
-overcautiously
-overcautiousness
-overcentralization
-overcentralize
-overcertification
-overcertify
-overchafe
-overchannel
-overchant
-overcharge
-overchargement
-overcharger
-overcharitable
-overcharitably
-overcharity
-overchase
-overcheap
-overcheaply
-overcheapness
-overcheck
-overcherish
-overchidden
-overchief
-overchildish
-overchildishness
-overchill
-overchlorinate
-overchoke
-overchrome
-overchurch
-overcirculate
-overcircumspect
-overcircumspection
-overcivil
-overcivility
-overcivilization
-overcivilize
-overclaim
-overclamor
-overclasp
-overclean
-overcleanly
-overcleanness
-overcleave
-overclever
-overcleverness
-overclimb
-overcloak
-overclog
-overclose
-overclosely
-overcloseness
-overclothe
-overclothes
-overcloud
-overcloy
-overcluster
-overcoached
-overcoat
-overcoated
-overcoating
-overcoil
-overcold
-overcoldly
-overcollar
-overcolor
-overcomable
-overcome
-overcomer
-overcomingly
-overcommand
-overcommend
-overcommon
-overcommonly
-overcommonness
-overcompensate
-overcompensation
-overcompensatory
-overcompetition
-overcompetitive
-overcomplacency
-overcomplacent
-overcomplacently
-overcomplete
-overcomplex
-overcomplexity
-overcompliant
-overcompound
-overconcentrate
-overconcentration
-overconcern
-overconcerned
-overcondensation
-overcondense
-overconfidence
-overconfident
-overconfidently
-overconfute
-overconquer
-overconscientious
-overconscious
-overconsciously
-overconsciousness
-overconservatism
-overconservative
-overconservatively
-overconsiderate
-overconsiderately
-overconsideration
-overconsume
-overconsumption
-overcontented
-overcontentedly
-overcontentment
-overcontract
-overcontraction
-overcontribute
-overcontribution
-overcook
-overcool
-overcoolly
-overcopious
-overcopiously
-overcopiousness
-overcorned
-overcorrect
-overcorrection
-overcorrupt
-overcorruption
-overcorruptly
-overcostly
-overcount
-overcourteous
-overcourtesy
-overcover
-overcovetous
-overcovetousness
-overcow
-overcoy
-overcoyness
-overcram
-overcredit
-overcredulity
-overcredulous
-overcredulously
-overcreed
-overcreep
-overcritical
-overcritically
-overcriticalness
-overcriticism
-overcriticize
-overcrop
-overcross
-overcrow
-overcrowd
-overcrowded
-overcrowdedly
-overcrowdedness
-overcrown
-overcrust
-overcry
-overcull
-overcultivate
-overcultivation
-overculture
-overcultured
-overcumber
-overcunning
-overcunningly
-overcunningness
-overcup
-overcured
-overcurious
-overcuriously
-overcuriousness
-overcurl
-overcurrency
-overcurrent
-overcurtain
-overcustom
-overcut
-overcutter
-overcutting
-overdaintily
-overdaintiness
-overdainty
-overdamn
-overdance
-overdangle
-overdare
-overdaringly
-overdarken
-overdash
-overdazed
-overdazzle
-overdeal
-overdear
-overdearly
-overdearness
-overdeck
-overdecorate
-overdecoration
-overdecorative
-overdeeming
-overdeep
-overdeepen
-overdeeply
-overdeliberate
-overdeliberation
-overdelicacy
-overdelicate
-overdelicately
-overdelicious
-overdeliciously
-overdelighted
-overdelightedly
-overdemand
-overdemocracy
-overdepress
-overdepressive
-overdescant
-overdesire
-overdesirous
-overdesirousness
-overdestructive
-overdestructively
-overdestructiveness
-overdetermination
-overdetermined
-overdevelop
-overdevelopment
-overdevoted
-overdevotedly
-overdevotion
-overdiffuse
-overdiffusely
-overdiffuseness
-overdigest
-overdignified
-overdignifiedly
-overdignifiedness
-overdignify
-overdignity
-overdiligence
-overdiligent
-overdiligently
-overdilute
-overdilution
-overdischarge
-overdiscipline
-overdiscount
-overdiscourage
-overdiscouragement
-overdistance
-overdistant
-overdistantly
-overdistantness
-overdistempered
-overdistention
-overdiverse
-overdiversely
-overdiversification
-overdiversify
-overdiversity
-overdo
-overdoctrinize
-overdoer
-overdogmatic
-overdogmatically
-overdogmatism
-overdome
-overdominate
-overdone
-overdoor
-overdosage
-overdose
-overdoubt
-overdoze
-overdraft
-overdrain
-overdrainage
-overdramatic
-overdramatically
-overdrape
-overdrapery
-overdraw
-overdrawer
-overdream
-overdrench
-overdress
-overdrifted
-overdrink
-overdrip
-overdrive
-overdriven
-overdroop
-overdrowsed
-overdry
-overdubbed
-overdue
-overdunged
-overdure
-overdust
-overdye
-overeager
-overeagerly
-overeagerness
-overearnest
-overearnestly
-overearnestness
-overeasily
-overeasiness
-overeasy
-overeat
-overeaten
-overedge
-overedit
-overeducate
-overeducated
-overeducation
-overeducative
-overeffort
-overegg
-overelaborate
-overelaborately
-overelaboration
-overelate
-overelegance
-overelegancy
-overelegant
-overelegantly
-overelliptical
-overembellish
-overembellishment
-overembroider
-overemotional
-overemotionality
-overemotionalize
-overemphasis
-overemphasize
-overemphatic
-overemphatically
-overemphaticness
-overempired
-overemptiness
-overempty
-overenter
-overenthusiasm
-overenthusiastic
-overentreat
-overentry
-overequal
-overestimate
-overestimation
-overexcelling
-overexcitability
-overexcitable
-overexcitably
-overexcite
-overexcitement
-overexercise
-overexert
-overexerted
-overexertedly
-overexertedness
-overexertion
-overexpand
-overexpansion
-overexpansive
-overexpect
-overexpectant
-overexpectantly
-overexpenditure
-overexpert
-overexplain
-overexplanation
-overexpose
-overexposure
-overexpress
-overexquisite
-overexquisitely
-overextend
-overextension
-overextensive
-overextreme
-overexuberant
-overeye
-overeyebrowed
-overface
-overfacile
-overfacilely
-overfacility
-overfactious
-overfactiousness
-overfag
-overfagged
-overfaint
-overfaith
-overfaithful
-overfaithfully
-overfall
-overfamed
-overfamiliar
-overfamiliarity
-overfamiliarly
-overfamous
-overfanciful
-overfancy
-overfar
-overfast
-overfastidious
-overfastidiously
-overfastidiousness
-overfasting
-overfat
-overfatigue
-overfatten
-overfavor
-overfavorable
-overfavorably
-overfear
-overfearful
-overfearfully
-overfearfulness
-overfeast
-overfeatured
-overfed
-overfee
-overfeed
-overfeel
-overfellowlike
-overfellowly
-overfelon
-overfeminine
-overfeminize
-overfertile
-overfertility
-overfestoon
-overfew
-overfierce
-overfierceness
-overfile
-overfill
-overfilm
-overfine
-overfinished
-overfish
-overfit
-overfix
-overflatten
-overfleece
-overfleshed
-overflexion
-overfling
-overfloat
-overflog
-overflood
-overflorid
-overfloridness
-overflourish
-overflow
-overflowable
-overflower
-overflowing
-overflowingly
-overflowingness
-overflown
-overfluency
-overfluent
-overfluently
-overflush
-overflutter
-overfly
-overfold
-overfond
-overfondle
-overfondly
-overfondness
-overfoolish
-overfoolishly
-overfoolishness
-overfoot
-overforce
-overforged
-overformed
-overforward
-overforwardly
-overforwardness
-overfought
-overfoul
-overfoully
-overfrail
-overfrailty
-overfranchised
-overfrank
-overfrankly
-overfrankness
-overfraught
-overfree
-overfreedom
-overfreely
-overfreight
-overfrequency
-overfrequent
-overfrequently
-overfret
-overfrieze
-overfrighted
-overfrighten
-overfroth
-overfrown
-overfrozen
-overfruited
-overfruitful
-overfull
-overfullness
-overfunctioning
-overfurnish
-overgaiter
-overgalled
-overgamble
-overgang
-overgarment
-overgarrison
-overgaze
-overgeneral
-overgeneralize
-overgenerally
-overgenerosity
-overgenerous
-overgenerously
-overgenial
-overgeniality
-overgentle
-overgently
-overget
-overgifted
-overgild
-overgilted
-overgird
-overgirded
-overgirdle
-overglad
-overgladly
-overglance
-overglass
-overglaze
-overglide
-overglint
-overgloom
-overgloominess
-overgloomy
-overglorious
-overgloss
-overglut
-overgo
-overgoad
-overgod
-overgodliness
-overgodly
-overgood
-overgorge
-overgovern
-overgovernment
-overgown
-overgrace
-overgracious
-overgrade
-overgrain
-overgrainer
-overgrasping
-overgrateful
-overgratefully
-overgratification
-overgratify
-overgratitude
-overgraze
-overgreasiness
-overgreasy
-overgreat
-overgreatly
-overgreatness
-overgreed
-overgreedily
-overgreediness
-overgreedy
-overgrieve
-overgrievous
-overgrind
-overgross
-overgrossly
-overgrossness
-overground
-overgrow
-overgrown
-overgrowth
-overguilty
-overgun
-overhair
-overhalf
-overhand
-overhanded
-overhandicap
-overhandle
-overhang
-overhappy
-overharass
-overhard
-overharden
-overhardness
-overhardy
-overharsh
-overharshly
-overharshness
-overhaste
-overhasten
-overhastily
-overhastiness
-overhasty
-overhate
-overhatted
-overhaughty
-overhaul
-overhauler
-overhead
-overheadiness
-overheadman
-overheady
-overheap
-overhear
-overhearer
-overheartily
-overhearty
-overheat
-overheatedly
-overheave
-overheaviness
-overheavy
-overheight
-overheighten
-overheinous
-overheld
-overhelp
-overhelpful
-overhigh
-overhighly
-overhill
-overhit
-overholiness
-overhollow
-overholy
-overhomeliness
-overhomely
-overhonest
-overhonestly
-overhonesty
-overhonor
-overhorse
-overhot
-overhotly
-overhour
-overhouse
-overhover
-overhuge
-overhuman
-overhumanity
-overhumanize
-overhung
-overhunt
-overhurl
-overhurriedly
-overhurry
-overhusk
-overhysterical
-overidealism
-overidealistic
-overidle
-overidly
-overillustrate
-overillustration
-overimaginative
-overimaginativeness
-overimitate
-overimitation
-overimitative
-overimitatively
-overimport
-overimportation
-overimpress
-overimpressible
-overinclinable
-overinclination
-overinclined
-overincrust
-overincurious
-overindividualism
-overindividualistic
-overindulge
-overindulgence
-overindulgent
-overindulgently
-overindustrialization
-overindustrialize
-overinflate
-overinflation
-overinflative
-overinfluence
-overinfluential
-overinform
-overink
-overinsist
-overinsistence
-overinsistent
-overinsistently
-overinsolence
-overinsolent
-overinsolently
-overinstruct
-overinstruction
-overinsurance
-overinsure
-overintellectual
-overintellectuality
-overintense
-overintensely
-overintensification
-overintensity
-overinterest
-overinterested
-overinterestedness
-overinventoried
-overinvest
-overinvestment
-overiodize
-overirrigate
-overirrigation
-overissue
-overitching
-overjacket
-overjade
-overjaded
-overjawed
-overjealous
-overjealously
-overjealousness
-overjob
-overjocular
-overjoy
-overjoyful
-overjoyfully
-overjoyous
-overjudge
-overjudging
-overjudgment
-overjudicious
-overjump
-overjust
-overjutting
-overkeen
-overkeenness
-overkeep
-overkick
-overkind
-overkindly
-overkindness
-overking
-overknavery
-overknee
-overknow
-overknowing
-overlabor
-overlace
-overlactation
-overlade
-overlaid
-overlain
-overland
-Overlander
-overlander
-overlanguaged
-overlap
-overlard
-overlarge
-overlargely
-overlargeness
-overlascivious
-overlast
-overlate
-overlaudation
-overlaudatory
-overlaugh
-overlaunch
-overlave
-overlavish
-overlavishly
-overlax
-overlaxative
-overlaxly
-overlaxness
-overlay
-overlayer
-overlead
-overleaf
-overlean
-overleap
-overlearn
-overlearned
-overlearnedly
-overlearnedness
-overleather
-overleave
-overleaven
-overleer
-overleg
-overlegislation
-overleisured
-overlength
-overlettered
-overlewd
-overlewdly
-overlewdness
-overliberal
-overliberality
-overliberally
-overlicentious
-overlick
-overlie
-overlier
-overlift
-overlight
-overlighted
-overlightheaded
-overlightly
-overlightsome
-overliking
-overline
-overling
-overlinger
-overlinked
-overlip
-overlipping
-overlisted
-overlisten
-overliterary
-overlittle
-overlive
-overliveliness
-overlively
-overliver
-overload
-overloath
-overlock
-overlocker
-overlofty
-overlogical
-overlogically
-overlong
-overlook
-overlooker
-overloose
-overlord
-overlordship
-overloud
-overloup
-overlove
-overlover
-overlow
-overlowness
-overloyal
-overloyally
-overloyalty
-overlubricatio
-overluscious
-overlush
-overlustiness
-overlusty
-overluxuriance
-overluxuriant
-overluxurious
-overly
-overlying
-overmagnify
-overmagnitude
-overmajority
-overmalapert
-overman
-overmantel
-overmantle
-overmany
-overmarch
-overmark
-overmarking
-overmarl
-overmask
-overmast
-overmaster
-overmasterful
-overmasterfully
-overmasterfulness
-overmastering
-overmasteringly
-overmatch
-overmatter
-overmature
-overmaturity
-overmean
-overmeanly
-overmeanness
-overmeasure
-overmeddle
-overmeek
-overmeekly
-overmeekness
-overmellow
-overmellowness
-overmelodied
-overmelt
-overmerciful
-overmercifulness
-overmerit
-overmerrily
-overmerry
-overmettled
-overmickle
-overmighty
-overmild
-overmill
-overminute
-overminutely
-overminuteness
-overmix
-overmoccasin
-overmodest
-overmodestly
-overmodesty
-overmodulation
-overmoist
-overmoisten
-overmoisture
-overmortgage
-overmoss
-overmost
-overmotor
-overmount
-overmounts
-overmourn
-overmournful
-overmournfully
-overmuch
-overmuchness
-overmultiplication
-overmultiply
-overmultitude
-overname
-overnarrow
-overnarrowly
-overnationalization
-overnear
-overneat
-overneatness
-overneglect
-overnegligence
-overnegligent
-overnervous
-overnervously
-overnervousness
-overnet
-overnew
-overnice
-overnicely
-overniceness
-overnicety
-overnigh
-overnight
-overnimble
-overnipping
-overnoise
-overnotable
-overnourish
-overnoveled
-overnumber
-overnumerous
-overnumerousness
-overnurse
-overobedience
-overobedient
-overobediently
-overobese
-overobjectify
-overoblige
-overobsequious
-overobsequiously
-overobsequiousness
-overoffend
-overoffensive
-overofficered
-overofficious
-overorder
-overornamented
-overpained
-overpainful
-overpainfully
-overpainfulness
-overpaint
-overpamper
-overpart
-overparted
-overpartial
-overpartiality
-overpartially
-overparticular
-overparticularly
-overpass
-overpassionate
-overpassionately
-overpassionateness
-overpast
-overpatient
-overpatriotic
-overpay
-overpayment
-overpeer
-overpending
-overpensive
-overpensiveness
-overpeople
-overpepper
-overperemptory
-overpersuade
-overpersuasion
-overpert
-overpessimism
-overpessimistic
-overpet
-overphysic
-overpick
-overpicture
-overpinching
-overpitch
-overpitched
-overpiteous
-overplace
-overplaced
-overplacement
-overplain
-overplant
-overplausible
-overplay
-overplease
-overplenitude
-overplenteous
-overplenteously
-overplentiful
-overplenty
-overplot
-overplow
-overplumb
-overplume
-overplump
-overplumpness
-overplus
-overply
-overpointed
-overpoise
-overpole
-overpolemical
-overpolish
-overpolitic
-overponderous
-overpopular
-overpopularity
-overpopularly
-overpopulate
-overpopulation
-overpopulous
-overpopulousness
-overpositive
-overpossess
-overpot
-overpotent
-overpotential
-overpour
-overpower
-overpowerful
-overpowering
-overpoweringly
-overpoweringness
-overpraise
-overpray
-overpreach
-overprecise
-overpreciseness
-overpreface
-overpregnant
-overpreoccupation
-overpreoccupy
-overpress
-overpressure
-overpresumption
-overpresumptuous
-overprice
-overprick
-overprint
-overprize
-overprizer
-overprocrastination
-overproduce
-overproduction
-overproductive
-overproficient
-overprolific
-overprolix
-overprominence
-overprominent
-overprominently
-overpromise
-overprompt
-overpromptly
-overpromptness
-overprone
-overproneness
-overpronounced
-overproof
-overproportion
-overproportionate
-overproportionated
-overproportionately
-overproportioned
-overprosperity
-overprosperous
-overprotect
-overprotract
-overprotraction
-overproud
-overproudly
-overprove
-overprovender
-overprovide
-overprovident
-overprovidently
-overprovision
-overprovocation
-overprovoke
-overprune
-overpublic
-overpublicity
-overpuff
-overpuissant
-overpunish
-overpunishment
-overpurchase
-overquantity
-overquarter
-overquell
-overquick
-overquickly
-overquiet
-overquietly
-overquietness
-overrace
-overrack
-overrake
-overrange
-overrank
-overrankness
-overrapture
-overrapturize
-overrash
-overrashly
-overrashness
-overrate
-overrational
-overrationalize
-overravish
-overreach
-overreacher
-overreaching
-overreachingly
-overreachingness
-overread
-overreader
-overreadily
-overreadiness
-overready
-overrealism
-overrealistic
-overreckon
-overrecord
-overrefine
-overrefined
-overrefinement
-overreflection
-overreflective
-overregister
-overregistration
-overregular
-overregularity
-overregularly
-overregulate
-overregulation
-overrelax
-overreliance
-overreliant
-overreligion
-overreligious
-overremiss
-overremissly
-overremissness
-overrennet
-overrent
-overreplete
-overrepletion
-overrepresent
-overrepresentation
-overrepresentative
-overreserved
-overresolute
-overresolutely
-overrestore
-overrestrain
-overretention
-overreward
-overrich
-overriches
-overrichness
-override
-overrife
-overrigged
-overright
-overrighteous
-overrighteously
-overrighteousness
-overrigid
-overrigidity
-overrigidly
-overrigorous
-overrigorously
-overrim
-overriot
-overripe
-overripely
-overripen
-overripeness
-overrise
-overroast
-overroll
-overroof
-overrooted
-overrough
-overroughly
-overroughness
-overroyal
-overrude
-overrudely
-overrudeness
-overruff
-overrule
-overruler
-overruling
-overrulingly
-overrun
-overrunner
-overrunning
-overrunningly
-overrush
-overrusset
-overrust
-oversad
-oversadly
-oversadness
-oversaid
-oversail
-oversale
-oversaliva
-oversalt
-oversalty
-oversand
-oversanded
-oversanguine
-oversanguinely
-oversapless
-oversated
-oversatisfy
-oversaturate
-oversaturation
-oversauce
-oversauciness
-oversaucy
-oversave
-overscare
-overscatter
-overscented
-oversceptical
-overscepticism
-overscore
-overscour
-overscratch
-overscrawl
-overscream
-overscribble
-overscrub
-overscruple
-overscrupulosity
-overscrupulous
-overscrupulously
-overscrupulousness
-overscurf
-overscutched
-oversea
-overseal
-overseam
-overseamer
-oversearch
-overseas
-overseason
-overseasoned
-overseated
-oversecure
-oversecurely
-oversecurity
-oversee
-overseed
-overseen
-overseer
-overseerism
-overseership
-overseethe
-oversell
-oversend
-oversensible
-oversensibly
-oversensitive
-oversensitively
-oversensitiveness
-oversententious
-oversentimental
-oversentimentalism
-oversentimentalize
-oversentimentally
-overserious
-overseriously
-overseriousness
-overservice
-overservile
-overservility
-overset
-oversetter
-oversettle
-oversettled
-oversevere
-overseverely
-overseverity
-oversew
-overshade
-overshadow
-overshadower
-overshadowing
-overshadowingly
-overshadowment
-overshake
-oversharp
-oversharpness
-overshave
-oversheet
-overshelving
-overshepherd
-overshine
-overshirt
-overshoe
-overshoot
-overshort
-overshorten
-overshortly
-overshot
-overshoulder
-overshowered
-overshrink
-overshroud
-oversick
-overside
-oversight
-oversilence
-oversilent
-oversilver
-oversimple
-oversimplicity
-oversimplification
-oversimplify
-oversimply
-oversize
-oversized
-overskim
-overskip
-overskipper
-overskirt
-overslack
-overslander
-overslaugh
-overslavish
-overslavishly
-oversleep
-oversleeve
-overslide
-overslight
-overslip
-overslope
-overslow
-overslowly
-overslowness
-overslur
-oversmall
-oversman
-oversmite
-oversmitten
-oversmoke
-oversmooth
-oversmoothly
-oversmoothness
-oversnow
-oversoak
-oversoar
-oversock
-oversoft
-oversoftly
-oversoftness
-oversold
-oversolemn
-oversolemnity
-oversolemnly
-oversolicitous
-oversolicitously
-oversolicitousness
-oversoon
-oversoothing
-oversophisticated
-oversophistication
-oversorrow
-oversorrowed
-oversot
-oversoul
-oversound
-oversour
-oversourly
-oversourness
-oversow
-overspacious
-overspaciousness
-overspan
-overspangled
-oversparing
-oversparingly
-oversparingness
-oversparred
-overspatter
-overspeak
-overspecialization
-overspecialize
-overspeculate
-overspeculation
-overspeculative
-overspeech
-overspeed
-overspeedily
-overspeedy
-overspend
-overspill
-overspin
-oversplash
-overspread
-overspring
-oversprinkle
-oversprung
-overspun
-oversqueak
-oversqueamish
-oversqueamishness
-overstaff
-overstaid
-overstain
-overstale
-overstalled
-overstand
-overstaring
-overstate
-overstately
-overstatement
-overstay
-overstayal
-oversteadfast
-oversteadfastness
-oversteady
-overstep
-overstiff
-overstiffness
-overstifle
-overstimulate
-overstimulation
-overstimulative
-overstir
-overstitch
-overstock
-overstoop
-overstoping
-overstore
-overstory
-overstout
-overstoutly
-overstowage
-overstowed
-overstrain
-overstrait
-overstraiten
-overstraitly
-overstraitness
-overstream
-overstrength
-overstress
-overstretch
-overstrew
-overstrict
-overstrictly
-overstrictness
-overstride
-overstrident
-overstridently
-overstrike
-overstring
-overstriving
-overstrong
-overstrongly
-overstrung
-overstud
-overstudied
-overstudious
-overstudiously
-overstudiousness
-overstudy
-overstuff
-oversublime
-oversubscribe
-oversubscriber
-oversubscription
-oversubtile
-oversubtle
-oversubtlety
-oversubtly
-oversufficiency
-oversufficient
-oversufficiently
-oversuperstitious
-oversupply
-oversure
-oversurety
-oversurge
-oversurviving
-oversusceptibility
-oversusceptible
-oversuspicious
-oversuspiciously
-overswarm
-overswarth
-oversway
-oversweated
-oversweep
-oversweet
-oversweeten
-oversweetly
-oversweetness
-overswell
-overswift
-overswim
-overswimmer
-overswing
-overswinging
-overswirling
-oversystematic
-oversystematically
-oversystematize
-overt
-overtakable
-overtake
-overtaker
-overtalk
-overtalkative
-overtalkativeness
-overtalker
-overtame
-overtamely
-overtameness
-overtapped
-overtare
-overtariff
-overtarry
-overtart
-overtask
-overtax
-overtaxation
-overteach
-overtechnical
-overtechnicality
-overtedious
-overtediously
-overteem
-overtell
-overtempt
-overtenacious
-overtender
-overtenderly
-overtenderness
-overtense
-overtensely
-overtenseness
-overtension
-overterrible
-overtest
-overthick
-overthin
-overthink
-overthought
-overthoughtful
-overthriftily
-overthriftiness
-overthrifty
-overthrong
-overthrow
-overthrowable
-overthrowal
-overthrower
-overthrust
-overthwart
-overthwartly
-overthwartness
-overthwartways
-overthwartwise
-overtide
-overtight
-overtightly
-overtill
-overtimbered
-overtime
-overtimer
-overtimorous
-overtimorously
-overtimorousness
-overtinseled
-overtint
-overtip
-overtipple
-overtire
-overtiredness
-overtitle
-overtly
-overtness
-overtoe
-overtoil
-overtoise
-overtone
-overtongued
-overtop
-overtopple
-overtorture
-overtower
-overtrace
-overtrack
-overtrade
-overtrader
-overtrailed
-overtrain
-overtrample
-overtravel
-overtread
-overtreatment
-overtrick
-overtrim
-overtrouble
-overtrue
-overtrump
-overtrust
-overtrustful
-overtruthful
-overtruthfully
-overtumble
-overture
-overturn
-overturnable
-overturner
-overtutor
-overtwine
-overtwist
-overtype
-overuberous
-overunionized
-overunsuitable
-overurbanization
-overurge
-overuse
-overusual
-overusually
-overvaliant
-overvaluable
-overvaluation
-overvalue
-overvariety
-overvault
-overvehemence
-overvehement
-overveil
-overventilate
-overventilation
-overventuresome
-overventurous
-overview
-overvoltage
-overvote
-overwade
-overwages
-overwake
-overwalk
-overwander
-overward
-overwash
-overwasted
-overwatch
-overwatcher
-overwater
-overwave
-overway
-overwealth
-overwealthy
-overweaponed
-overwear
-overweary
-overweather
-overweave
-overweb
-overween
-overweener
-overweening
-overweeningly
-overweeningness
-overweep
-overweigh
-overweight
-overweightage
-overwell
-overwelt
-overwet
-overwetness
-overwheel
-overwhelm
-overwhelmer
-overwhelming
-overwhelmingly
-overwhelmingness
-overwhipped
-overwhirl
-overwhisper
-overwide
-overwild
-overwilily
-overwilling
-overwillingly
-overwily
-overwin
-overwind
-overwing
-overwinter
-overwiped
-overwisdom
-overwise
-overwisely
-overwithered
-overwoman
-overwomanize
-overwomanly
-overwood
-overwooded
-overwoody
-overword
-overwork
-overworld
-overworn
-overworry
-overworship
-overwound
-overwove
-overwoven
-overwrap
-overwrest
-overwrested
-overwrestle
-overwrite
-overwroth
-overwrought
-overyear
-overyoung
-overyouthful
-overzeal
-overzealous
-overzealously
-overzealousness
-ovest
-ovey
-Ovibos
-Ovibovinae
-ovibovine
-ovicapsular
-ovicapsule
-ovicell
-ovicellular
-ovicidal
-ovicide
-ovicular
-oviculated
-oviculum
-ovicyst
-ovicystic
-Ovidae
-Ovidian
-oviducal
-oviduct
-oviductal
-oviferous
-ovification
-oviform
-ovigenesis
-ovigenetic
-ovigenic
-ovigenous
-ovigerm
-ovigerous
-ovile
-Ovillus
-Ovinae
-ovine
-ovinia
-ovipara
-oviparal
-oviparity
-oviparous
-oviparously
-oviparousness
-oviposit
-oviposition
-ovipositor
-Ovis
-ovisac
-oviscapt
-ovism
-ovispermary
-ovispermiduct
-ovist
-ovistic
-ovivorous
-ovocyte
-ovoelliptic
-ovoflavin
-ovogenesis
-ovogenetic
-ovogenous
-ovogonium
-ovoid
-ovoidal
-ovolemma
-ovolo
-ovological
-ovologist
-ovology
-ovolytic
-ovomucoid
-ovoplasm
-ovoplasmic
-ovopyriform
-ovorhomboid
-ovorhomboidal
-ovotesticular
-ovotestis
-ovovitellin
-Ovovivipara
-ovoviviparism
-ovoviviparity
-ovoviviparous
-ovoviviparously
-ovoviviparousness
-Ovula
-ovular
-ovularian
-ovulary
-ovulate
-ovulation
-ovule
-ovuliferous
-ovuligerous
-ovulist
-ovum
-ow
-owd
-owe
-owelty
-Owen
-Owenia
-Owenian
-Owenism
-Owenist
-Owenite
-Owenize
-ower
-owerance
-owerby
-owercome
-owergang
-owerloup
-owertaen
-owerword
-owght
-owing
-owk
-owl
-owldom
-owler
-owlery
-owlet
-Owlglass
-owlhead
-owling
-owlish
-owlishly
-owlishness
-owlism
-owllight
-owllike
-Owlspiegle
-owly
-own
-owner
-ownerless
-ownership
-ownhood
-ownness
-ownself
-ownwayish
-owregane
-owrehip
-owrelay
-owse
-owsen
-owser
-owtchah
-owyheeite
-ox
-oxacid
-oxadiazole
-oxalacetic
-oxalaldehyde
-oxalamid
-oxalamide
-oxalan
-oxalate
-oxaldehyde
-oxalemia
-oxalic
-Oxalidaceae
-oxalidaceous
-Oxalis
-oxalite
-oxalodiacetic
-oxalonitril
-oxalonitrile
-oxaluramid
-oxaluramide
-oxalurate
-oxaluria
-oxaluric
-oxalyl
-oxalylurea
-oxamate
-oxamethane
-oxamic
-oxamid
-oxamide
-oxamidine
-oxammite
-oxan
-oxanate
-oxane
-oxanic
-oxanilate
-oxanilic
-oxanilide
-oxazine
-oxazole
-oxbane
-oxberry
-oxbird
-oxbiter
-oxblood
-oxbow
-oxboy
-oxbrake
-oxcart
-oxcheek
-oxdiacetic
-oxdiazole
-oxea
-oxeate
-oxen
-oxeote
-oxer
-oxetone
-oxeye
-oxfly
-Oxford
-Oxfordian
-Oxfordism
-Oxfordist
-oxgang
-oxgoad
-oxharrow
-oxhead
-oxheal
-oxheart
-oxhide
-oxhoft
-oxhorn
-oxhouse
-oxhuvud
-oxidability
-oxidable
-oxidant
-oxidase
-oxidate
-oxidation
-oxidational
-oxidative
-oxidator
-oxide
-oxidic
-oxidimetric
-oxidimetry
-oxidizability
-oxidizable
-oxidization
-oxidize
-oxidizement
-oxidizer
-oxidizing
-oxidoreductase
-oxidoreduction
-oxidulated
-oximate
-oximation
-oxime
-oxland
-oxlike
-oxlip
-oxman
-oxmanship
-oxoindoline
-Oxonian
-oxonic
-oxonium
-Oxonolatry
-oxozone
-oxozonide
-oxpecker
-oxphony
-oxreim
-oxshoe
-oxskin
-oxtail
-oxter
-oxtongue
-oxwort
-oxy
-oxyacanthine
-oxyacanthous
-oxyacetylene
-oxyacid
-Oxyaena
-Oxyaenidae
-oxyaldehyde
-oxyamine
-oxyanthracene
-oxyanthraquinone
-oxyaphia
-oxyaster
-oxybaphon
-Oxybaphus
-oxybenzaldehyde
-oxybenzene
-oxybenzoic
-oxybenzyl
-oxyberberine
-oxyblepsia
-oxybromide
-oxybutyria
-oxybutyric
-oxycalcium
-oxycalorimeter
-oxycamphor
-oxycaproic
-oxycarbonate
-oxycellulose
-oxycephalic
-oxycephalism
-oxycephalous
-oxycephaly
-oxychlorate
-oxychloric
-oxychloride
-oxycholesterol
-oxychromatic
-oxychromatin
-oxychromatinic
-oxycinnamic
-oxycobaltammine
-Oxycoccus
-oxycopaivic
-oxycoumarin
-oxycrate
-oxycyanide
-oxydactyl
-Oxydendrum
-oxydiact
-oxyesthesia
-oxyether
-oxyethyl
-oxyfatty
-oxyfluoride
-oxygas
-oxygen
-oxygenant
-oxygenate
-oxygenation
-oxygenator
-oxygenerator
-oxygenic
-oxygenicity
-oxygenium
-oxygenizable
-oxygenize
-oxygenizement
-oxygenizer
-oxygenous
-oxygeusia
-oxygnathous
-oxyhalide
-oxyhaloid
-oxyhematin
-oxyhemocyanin
-oxyhemoglobin
-oxyhexactine
-oxyhexaster
-oxyhydrate
-oxyhydric
-oxyhydrogen
-oxyiodide
-oxyketone
-oxyl
-Oxylabracidae
-Oxylabrax
-oxyluciferin
-oxyluminescence
-oxyluminescent
-oxymandelic
-oxymel
-oxymethylene
-oxymoron
-oxymuriate
-oxymuriatic
-oxynaphthoic
-oxynaphtoquinone
-oxynarcotine
-oxyneurin
-oxyneurine
-oxynitrate
-oxyntic
-oxyophitic
-oxyopia
-Oxyopidae
-oxyosphresia
-oxypetalous
-oxyphenol
-oxyphenyl
-oxyphile
-oxyphilic
-oxyphilous
-oxyphonia
-oxyphosphate
-oxyphthalic
-oxyphyllous
-oxyphyte
-oxypicric
-Oxypolis
-oxyproline
-oxypropionic
-oxypurine
-oxypycnos
-oxyquinaseptol
-oxyquinoline
-oxyquinone
-oxyrhine
-oxyrhinous
-oxyrhynch
-oxyrhynchous
-oxyrhynchus
-Oxyrrhyncha
-oxyrrhynchid
-oxysalicylic
-oxysalt
-oxystearic
-Oxystomata
-oxystomatous
-oxystome
-oxysulphate
-oxysulphide
-oxyterpene
-oxytocia
-oxytocic
-oxytocin
-oxytocous
-oxytoluene
-oxytoluic
-oxytone
-oxytonesis
-oxytonical
-oxytonize
-Oxytricha
-Oxytropis
-oxytylotate
-oxytylote
-oxyuriasis
-oxyuricide
-Oxyuridae
-oxyurous
-oxywelding
-Oyana
-oyapock
-oyer
-oyster
-oysterage
-oysterbird
-oystered
-oysterer
-oysterfish
-oystergreen
-oysterhood
-oysterhouse
-oystering
-oysterish
-oysterishness
-oysterlike
-oysterling
-oysterman
-oysterous
-oysterroot
-oysterseed
-oystershell
-oysterwife
-oysterwoman
-Ozan
-Ozark
-ozarkite
-ozena
-Ozias
-ozobrome
-ozocerite
-ozokerit
-ozokerite
-ozonate
-ozonation
-ozonator
-ozone
-ozoned
-ozonic
-ozonide
-ozoniferous
-ozonification
-ozonify
-Ozonium
-ozonization
-ozonize
-ozonizer
-ozonometer
-ozonometry
-ozonoscope
-ozonoscopic
-ozonous
-ozophen
-ozophene
-ozostomia
-ozotype
-P
-p
-pa
-paal
-paar
-paauw
-Paba
-pabble
-Pablo
-pablo
-pabouch
-pabular
-pabulary
-pabulation
-pabulatory
-pabulous
-pabulum
-pac
-paca
-pacable
-Pacaguara
-pacate
-pacation
-pacative
-pacay
-pacaya
-Paccanarist
-Pacchionian
-Pace
-pace
-paceboard
-paced
-pacemaker
-pacemaking
-pacer
-pachak
-pachisi
-pachnolite
-pachometer
-Pachomian
-Pachons
-Pacht
-pachyacria
-pachyaemia
-pachyblepharon
-pachycarpous
-pachycephal
-pachycephalia
-pachycephalic
-pachycephalous
-pachycephaly
-pachychilia
-pachycholia
-pachychymia
-pachycladous
-pachydactyl
-pachydactylous
-pachydactyly
-pachyderm
-pachyderma
-pachydermal
-Pachydermata
-pachydermatocele
-pachydermatoid
-pachydermatosis
-pachydermatous
-pachydermatously
-pachydermia
-pachydermial
-pachydermic
-pachydermoid
-pachydermous
-pachyemia
-pachyglossal
-pachyglossate
-pachyglossia
-pachyglossous
-pachyhaemia
-pachyhaemic
-pachyhaemous
-pachyhematous
-pachyhemia
-pachyhymenia
-pachyhymenic
-Pachylophus
-pachylosis
-Pachyma
-pachymenia
-pachymenic
-pachymeningitic
-pachymeningitis
-pachymeninx
-pachymeter
-pachynathous
-pachynema
-pachynsis
-pachyntic
-pachyodont
-pachyotia
-pachyotous
-pachyperitonitis
-pachyphyllous
-pachypleuritic
-pachypod
-pachypodous
-pachypterous
-Pachyrhizus
-pachyrhynchous
-pachysalpingitis
-Pachysandra
-pachysaurian
-pachysomia
-pachysomous
-pachystichous
-Pachystima
-pachytene
-pachytrichous
-Pachytylus
-pachyvaginitis
-pacifiable
-pacific
-pacifical
-pacifically
-pacificate
-pacification
-pacificator
-pacificatory
-pacificism
-pacificist
-pacificity
-pacifier
-pacifism
-pacifist
-pacifistic
-pacifistically
-pacify
-pacifyingly
-Pacinian
-pack
-packable
-package
-packbuilder
-packcloth
-packer
-packery
-packet
-packhouse
-packless
-packly
-packmaker
-packmaking
-packman
-packmanship
-packness
-packsack
-packsaddle
-packstaff
-packthread
-packwall
-packwaller
-packware
-packway
-paco
-Pacolet
-pacouryuva
-pact
-paction
-pactional
-pactionally
-Pactolian
-Pactolus
-pad
-padcloth
-Padda
-padder
-padding
-paddle
-paddlecock
-paddled
-paddlefish
-paddlelike
-paddler
-paddlewood
-paddling
-paddock
-paddockride
-paddockstone
-paddockstool
-Paddy
-paddy
-paddybird
-Paddyism
-paddymelon
-Paddywack
-paddywatch
-Paddywhack
-paddywhack
-padella
-padfoot
-padge
-Padina
-padishah
-padle
-padlike
-padlock
-padmasana
-padmelon
-padnag
-padpiece
-Padraic
-Padraig
-padre
-padroadist
-padroado
-padronism
-padstone
-padtree
-Paduan
-Paduanism
-paduasoy
-Padus
-paean
-paeanism
-paeanize
-paedarchy
-paedatrophia
-paedatrophy
-paediatry
-paedogenesis
-paedogenetic
-paedometer
-paedometrical
-paedomorphic
-paedomorphism
-paedonymic
-paedonymy
-paedopsychologist
-paedotribe
-paedotrophic
-paedotrophist
-paedotrophy
-paegel
-paegle
-Paelignian
-paenula
-paeon
-Paeonia
-Paeoniaceae
-Paeonian
-paeonic
-paetrick
-paga
-pagan
-Paganalia
-Paganalian
-pagandom
-paganic
-paganical
-paganically
-paganish
-paganishly
-paganism
-paganist
-paganistic
-paganity
-paganization
-paganize
-paganizer
-paganly
-paganry
-pagatpat
-Page
-page
-pageant
-pageanted
-pageanteer
-pageantic
-pageantry
-pagedom
-pageful
-pagehood
-pageless
-pagelike
-pager
-pageship
-pagina
-paginal
-paginary
-paginate
-pagination
-pagiopod
-Pagiopoda
-pagoda
-pagodalike
-pagodite
-pagoscope
-pagrus
-Paguma
-pagurian
-pagurid
-Paguridae
-Paguridea
-pagurine
-Pagurinea
-paguroid
-Paguroidea
-Pagurus
-pagus
-pah
-paha
-Pahareen
-Pahari
-Paharia
-pahi
-Pahlavi
-pahlavi
-pahmi
-paho
-pahoehoe
-Pahouin
-pahutan
-Paiconeca
-paideutic
-paideutics
-paidological
-paidologist
-paidology
-paidonosology
-paigle
-paik
-pail
-pailful
-paillasse
-paillette
-pailletted
-pailou
-paimaneh
-pain
-pained
-painful
-painfully
-painfulness
-paining
-painingly
-painkiller
-painless
-painlessly
-painlessness
-painproof
-painstaker
-painstaking
-painstakingly
-painstakingness
-painsworthy
-paint
-paintability
-paintable
-paintableness
-paintably
-paintbox
-paintbrush
-painted
-paintedness
-painter
-painterish
-painterlike
-painterly
-paintership
-paintiness
-painting
-paintingness
-paintless
-paintpot
-paintproof
-paintress
-paintrix
-paintroot
-painty
-paip
-pair
-paired
-pairedness
-pairer
-pairment
-pairwise
-pais
-paisa
-paisanite
-Paisley
-Paiute
-paiwari
-pajahuello
-pajama
-pajamaed
-pajock
-Pajonism
-Pakawa
-Pakawan
-pakchoi
-pakeha
-Pakhpuluk
-Pakhtun
-Pakistani
-paktong
-pal
-Pala
-palace
-palaced
-palacelike
-palaceous
-palaceward
-palacewards
-paladin
-palaeanthropic
-Palaearctic
-Palaeechini
-palaeechinoid
-Palaeechinoidea
-palaeechinoidean
-palaeentomology
-palaeethnologic
-palaeethnological
-palaeethnologist
-palaeethnology
-Palaeeudyptes
-Palaeic
-palaeichthyan
-Palaeichthyes
-palaeichthyic
-Palaemon
-palaemonid
-Palaemonidae
-palaemonoid
-palaeoalchemical
-palaeoanthropic
-palaeoanthropography
-palaeoanthropology
-Palaeoanthropus
-palaeoatavism
-palaeoatavistic
-palaeobiogeography
-palaeobiologist
-palaeobiology
-palaeobotanic
-palaeobotanical
-palaeobotanically
-palaeobotanist
-palaeobotany
-Palaeocarida
-palaeoceanography
-Palaeocene
-palaeochorology
-palaeoclimatic
-palaeoclimatology
-Palaeoconcha
-palaeocosmic
-palaeocosmology
-Palaeocrinoidea
-palaeocrystal
-palaeocrystallic
-palaeocrystalline
-palaeocrystic
-palaeocyclic
-palaeodendrologic
-palaeodendrological
-palaeodendrologically
-palaeodendrologist
-palaeodendrology
-Palaeodictyoptera
-palaeodictyopteran
-palaeodictyopteron
-palaeodictyopterous
-palaeoencephalon
-palaeoeremology
-palaeoethnic
-palaeoethnologic
-palaeoethnological
-palaeoethnologist
-palaeoethnology
-palaeofauna
-Palaeogaea
-Palaeogaean
-palaeogene
-palaeogenesis
-palaeogenetic
-palaeogeographic
-palaeogeography
-palaeoglaciology
-palaeoglyph
-Palaeognathae
-palaeognathic
-palaeognathous
-palaeograph
-palaeographer
-palaeographic
-palaeographical
-palaeographically
-palaeographist
-palaeography
-palaeoherpetologist
-palaeoherpetology
-palaeohistology
-palaeohydrography
-palaeolatry
-palaeolimnology
-palaeolith
-palaeolithic
-palaeolithical
-palaeolithist
-palaeolithoid
-palaeolithy
-palaeological
-palaeologist
-palaeology
-Palaeomastodon
-palaeometallic
-palaeometeorological
-palaeometeorology
-Palaeonemertea
-palaeonemertean
-palaeonemertine
-Palaeonemertinea
-Palaeonemertini
-palaeoniscid
-Palaeoniscidae
-palaeoniscoid
-Palaeoniscum
-Palaeoniscus
-palaeontographic
-palaeontographical
-palaeontography
-palaeopathology
-palaeopedology
-palaeophile
-palaeophilist
-Palaeophis
-palaeophysiography
-palaeophysiology
-palaeophytic
-palaeophytological
-palaeophytologist
-palaeophytology
-palaeoplain
-palaeopotamology
-palaeopsychic
-palaeopsychological
-palaeopsychology
-palaeoptychology
-Palaeornis
-Palaeornithinae
-palaeornithine
-palaeornithological
-palaeornithology
-palaeosaur
-Palaeosaurus
-palaeosophy
-Palaeospondylus
-Palaeostraca
-palaeostracan
-palaeostriatal
-palaeostriatum
-palaeostylic
-palaeostyly
-palaeotechnic
-palaeothalamus
-Palaeothentes
-Palaeothentidae
-palaeothere
-palaeotherian
-Palaeotheriidae
-palaeotheriodont
-palaeotherioid
-Palaeotherium
-palaeotheroid
-Palaeotropical
-palaeotype
-palaeotypic
-palaeotypical
-palaeotypically
-palaeotypographical
-palaeotypographist
-palaeotypography
-palaeovolcanic
-Palaeozoic
-palaeozoological
-palaeozoologist
-palaeozoology
-palaestra
-palaestral
-palaestrian
-palaestric
-palaestrics
-palaetiological
-palaetiologist
-palaetiology
-palafitte
-palagonite
-palagonitic
-Palaic
-Palaihnihan
-palaiotype
-palaite
-palama
-palamate
-palame
-Palamedea
-palamedean
-Palamedeidae
-Palamite
-Palamitism
-palampore
-palander
-palanka
-palankeen
-palanquin
-palapalai
-Palapteryx
-Palaquium
-palar
-palas
-palatability
-palatable
-palatableness
-palatably
-palatal
-palatalism
-palatality
-palatalization
-palatalize
-palate
-palated
-palateful
-palatefulness
-palateless
-palatelike
-palatial
-palatially
-palatialness
-palatian
-palatic
-palatinal
-palatinate
-palatine
-palatineship
-Palatinian
-palatinite
-palation
-palatist
-palatitis
-palative
-palatization
-palatize
-palatoalveolar
-palatodental
-palatoglossal
-palatoglossus
-palatognathous
-palatogram
-palatograph
-palatography
-palatomaxillary
-palatometer
-palatonasal
-palatopharyngeal
-palatopharyngeus
-palatoplasty
-palatoplegia
-palatopterygoid
-palatoquadrate
-palatorrhaphy
-palatoschisis
-Palatua
-Palau
-Palaung
-palaver
-palaverer
-palaverist
-palaverment
-palaverous
-palay
-palazzi
-palberry
-palch
-pale
-palea
-paleaceous
-paleanthropic
-Palearctic
-paleate
-palebelly
-palebuck
-palechinoid
-paled
-paledness
-paleencephalon
-paleentomology
-paleethnographer
-paleethnologic
-paleethnological
-paleethnologist
-paleethnology
-paleface
-palehearted
-paleichthyologic
-paleichthyologist
-paleichthyology
-paleiform
-palely
-Paleman
-paleness
-Palenque
-paleoalchemical
-paleoandesite
-paleoanthropic
-paleoanthropography
-paleoanthropological
-paleoanthropologist
-paleoanthropology
-Paleoanthropus
-paleoatavism
-paleoatavistic
-paleobiogeography
-paleobiologist
-paleobiology
-paleobotanic
-paleobotanical
-paleobotanically
-paleobotanist
-paleobotany
-paleoceanography
-Paleocene
-paleochorology
-paleoclimatic
-paleoclimatologist
-paleoclimatology
-Paleoconcha
-paleocosmic
-paleocosmology
-paleocrystal
-paleocrystallic
-paleocrystalline
-paleocrystic
-paleocyclic
-paleodendrologic
-paleodendrological
-paleodendrologically
-paleodendrologist
-paleodendrology
-paleoecologist
-paleoecology
-paleoencephalon
-paleoeremology
-paleoethnic
-paleoethnography
-paleoethnologic
-paleoethnological
-paleoethnologist
-paleoethnology
-paleofauna
-Paleogene
-paleogenesis
-paleogenetic
-paleogeographic
-paleogeography
-paleoglaciology
-paleoglyph
-paleograph
-paleographer
-paleographic
-paleographical
-paleographically
-paleographist
-paleography
-paleoherpetologist
-paleoherpetology
-paleohistology
-paleohydrography
-paleoichthyology
-paleokinetic
-paleola
-paleolate
-paleolatry
-paleolimnology
-paleolith
-paleolithic
-paleolithical
-paleolithist
-paleolithoid
-paleolithy
-paleological
-paleologist
-paleology
-paleomammalogy
-paleometallic
-paleometeorological
-paleometeorology
-paleontographic
-paleontographical
-paleontography
-paleontologic
-paleontological
-paleontologically
-paleontologist
-paleontology
-paleopathology
-paleopedology
-paleophysiography
-paleophysiology
-paleophytic
-paleophytological
-paleophytologist
-paleophytology
-paleopicrite
-paleoplain
-paleopotamoloy
-paleopsychic
-paleopsychological
-paleopsychology
-paleornithological
-paleornithology
-paleostriatal
-paleostriatum
-paleostylic
-paleostyly
-paleotechnic
-paleothalamus
-paleothermal
-paleothermic
-Paleotropical
-paleovolcanic
-paleoytterbium
-Paleozoic
-paleozoological
-paleozoologist
-paleozoology
-paler
-Palermitan
-Palermo
-Pales
-Palesman
-Palestinian
-palestra
-palestral
-palestrian
-palestric
-palet
-paletiology
-paletot
-palette
-paletz
-palewise
-palfrey
-palfreyed
-palgat
-Pali
-pali
-Palicourea
-palification
-paliform
-paligorskite
-palikar
-palikarism
-palikinesia
-palila
-palilalia
-Palilia
-Palilicium
-palillogia
-palilogetic
-palilogy
-palimbacchic
-palimbacchius
-palimpsest
-palimpsestic
-palinal
-palindrome
-palindromic
-palindromical
-palindromically
-palindromist
-paling
-palingenesia
-palingenesian
-palingenesis
-palingenesist
-palingenesy
-palingenetic
-palingenetically
-palingenic
-palingenist
-palingeny
-palinode
-palinodial
-palinodic
-palinodist
-palinody
-palinurid
-Palinuridae
-palinuroid
-Palinurus
-paliphrasia
-palirrhea
-palisade
-palisading
-palisado
-palisander
-palisfy
-palish
-palistrophia
-Paliurus
-palkee
-pall
-palla
-palladammine
-Palladia
-palladia
-Palladian
-Palladianism
-palladic
-palladiferous
-palladinize
-palladion
-palladious
-Palladium
-palladium
-palladiumize
-palladize
-palladodiammine
-palladosammine
-palladous
-pallae
-pallah
-pallall
-pallanesthesia
-Pallas
-pallasite
-pallbearer
-palled
-pallescence
-pallescent
-pallesthesia
-pallet
-palleting
-palletize
-pallette
-pallholder
-palli
-pallial
-palliard
-palliasse
-Palliata
-palliata
-palliate
-palliation
-palliative
-palliatively
-palliator
-palliatory
-pallid
-pallidiflorous
-pallidipalpate
-palliditarsate
-pallidity
-pallidiventrate
-pallidly
-pallidness
-palliness
-Palliobranchiata
-palliobranchiate
-palliocardiac
-pallioessexite
-pallion
-palliopedal
-palliostratus
-pallium
-Palliyan
-pallograph
-pallographic
-pallometric
-pallone
-pallor
-Pallu
-Palluites
-pallwise
-pally
-palm
-palma
-Palmaceae
-palmaceous
-palmad
-Palmae
-palmanesthesia
-palmar
-palmarian
-palmary
-palmate
-palmated
-palmately
-palmatifid
-palmatiform
-palmatilobate
-palmatilobed
-palmation
-palmatiparted
-palmatipartite
-palmatisect
-palmatisected
-palmature
-palmcrist
-palmed
-Palmella
-Palmellaceae
-palmellaceous
-palmelloid
-palmer
-palmerite
-palmery
-palmesthesia
-palmette
-palmetto
-palmetum
-palmful
-palmicolous
-palmiferous
-palmification
-palmiform
-palmigrade
-palmilobate
-palmilobated
-palmilobed
-palminervate
-palminerved
-palmiped
-Palmipedes
-palmipes
-palmist
-palmister
-palmistry
-palmitate
-palmite
-palmitic
-palmitin
-palmitinic
-palmito
-palmitoleic
-palmitone
-palmiveined
-palmivorous
-palmlike
-palmo
-palmodic
-palmoscopy
-palmospasmus
-palmula
-palmus
-palmwise
-palmwood
-palmy
-palmyra
-Palmyrene
-Palmyrenian
-palolo
-palombino
-palometa
-palomino
-palosapis
-palouser
-paloverde
-palp
-palpability
-palpable
-palpableness
-palpably
-palpacle
-palpal
-palpate
-palpation
-palpatory
-palpebra
-palpebral
-palpebrate
-palpebration
-palpebritis
-palped
-palpi
-palpicorn
-Palpicornia
-palpifer
-palpiferous
-palpiform
-palpiger
-palpigerous
-palpitant
-palpitate
-palpitatingly
-palpitation
-palpless
-palpocil
-palpon
-palpulus
-palpus
-palsgrave
-palsgravine
-palsied
-palsification
-palstave
-palster
-palsy
-palsylike
-palsywort
-palt
-Palta
-palter
-palterer
-palterly
-paltrily
-paltriness
-paltry
-paludal
-paludament
-paludamentum
-paludial
-paludian
-paludic
-Paludicella
-Paludicolae
-paludicole
-paludicoline
-paludicolous
-paludiferous
-Paludina
-paludinal
-paludine
-paludinous
-paludism
-paludose
-paludous
-paludrin
-paludrine
-palule
-palulus
-Palus
-palus
-palustral
-palustrian
-palustrine
-paly
-palynology
-Pam
-pam
-pambanmanche
-Pamela
-pament
-pameroon
-Pamir
-Pamiri
-Pamirian
-Pamlico
-pamment
-Pampanga
-Pampangan
-Pampango
-pampas
-pampean
-pamper
-pampered
-pamperedly
-pamperedness
-pamperer
-pamperize
-pampero
-pamphagous
-pampharmacon
-Pamphiliidae
-Pamphilius
-pamphlet
-pamphletage
-pamphletary
-pamphleteer
-pamphleter
-pamphletful
-pamphletic
-pamphletical
-pamphletize
-pamphletwise
-pamphysical
-pamphysicism
-pampilion
-pampiniform
-pampinocele
-pamplegia
-pampootee
-pampootie
-pampre
-pamprodactyl
-pamprodactylism
-pamprodactylous
-pampsychism
-pampsychist
-Pamunkey
-Pan
-pan
-panace
-Panacea
-panacea
-panacean
-panaceist
-panache
-panached
-panachure
-panada
-panade
-Panagia
-panagiarion
-Panak
-Panaka
-panama
-Panamaian
-Panaman
-Panamanian
-Panamano
-Panamic
-Panamint
-Panamist
-panapospory
-panarchic
-panarchy
-panaris
-panaritium
-panarteritis
-panarthritis
-panary
-panatela
-Panathenaea
-Panathenaean
-Panathenaic
-panatrophy
-panautomorphic
-panax
-Panayan
-Panayano
-panbabylonian
-panbabylonism
-Panboeotian
-pancake
-pancarditis
-panchama
-panchayat
-pancheon
-panchion
-panchromatic
-panchromatism
-panchromatization
-panchromatize
-panchway
-panclastic
-panconciliatory
-pancosmic
-pancosmism
-pancosmist
-pancratian
-pancratiast
-pancratiastic
-pancratic
-pancratical
-pancratically
-pancration
-pancratism
-pancratist
-pancratium
-pancreas
-pancreatalgia
-pancreatectomize
-pancreatectomy
-pancreatemphraxis
-pancreathelcosis
-pancreatic
-pancreaticoduodenal
-pancreaticoduodenostomy
-pancreaticogastrostomy
-pancreaticosplenic
-pancreatin
-pancreatism
-pancreatitic
-pancreatitis
-pancreatization
-pancreatize
-pancreatoduodenectomy
-pancreatoenterostomy
-pancreatogenic
-pancreatogenous
-pancreatoid
-pancreatolipase
-pancreatolith
-pancreatomy
-pancreatoncus
-pancreatopathy
-pancreatorrhagia
-pancreatotomy
-pancreectomy
-pancreozymin
-pancyclopedic
-pand
-panda
-pandal
-pandan
-Pandanaceae
-pandanaceous
-Pandanales
-Pandanus
-pandaram
-Pandarctos
-pandaric
-Pandarus
-pandation
-Pandean
-pandect
-Pandectist
-pandemia
-pandemian
-pandemic
-pandemicity
-pandemoniac
-Pandemoniacal
-Pandemonian
-pandemonic
-pandemonism
-Pandemonium
-pandemonium
-Pandemos
-pandemy
-pandenominational
-pander
-panderage
-panderer
-panderess
-panderism
-panderize
-panderly
-Panderma
-pandermite
-panderous
-pandership
-pandestruction
-pandiabolism
-pandiculation
-Pandion
-Pandionidae
-pandita
-pandle
-pandlewhew
-Pandora
-pandora
-Pandorea
-Pandoridae
-Pandorina
-Pandosto
-pandour
-pandowdy
-pandrop
-pandura
-pandurate
-pandurated
-panduriform
-pandy
-pane
-panecclesiastical
-paned
-panegoism
-panegoist
-panegyric
-panegyrical
-panegyrically
-panegyricize
-panegyricon
-panegyricum
-panegyris
-panegyrist
-panegyrize
-panegyrizer
-panegyry
-paneity
-panel
-panela
-panelation
-paneler
-paneless
-paneling
-panelist
-panellation
-panelling
-panelwise
-panelwork
-panentheism
-panesthesia
-panesthetic
-paneulogism
-panfil
-panfish
-panful
-pang
-Pangaea
-pangamic
-pangamous
-pangamously
-pangamy
-pangane
-Pangasinan
-pangen
-pangene
-pangenesis
-pangenetic
-pangenetically
-pangenic
-pangful
-pangi
-Pangium
-pangless
-panglessly
-panglima
-Pangloss
-Panglossian
-Panglossic
-pangolin
-pangrammatist
-Pangwe
-panhandle
-panhandler
-panharmonic
-panharmonicon
-panhead
-panheaded
-Panhellenic
-Panhellenios
-Panhellenism
-Panhellenist
-Panhellenium
-panhidrosis
-panhuman
-panhygrous
-panhyperemia
-panhysterectomy
-Pani
-panic
-panical
-panically
-panicful
-panichthyophagous
-panicked
-panicky
-panicle
-panicled
-paniclike
-panicmonger
-panicmongering
-paniconograph
-paniconographic
-paniconography
-Panicularia
-paniculate
-paniculated
-paniculately
-paniculitis
-Panicum
-panidiomorphic
-panidrosis
-panification
-panimmunity
-Paninean
-Panionia
-Panionian
-Panionic
-Paniquita
-Paniquitan
-panisc
-panisca
-paniscus
-panisic
-panivorous
-Panjabi
-panjandrum
-pank
-pankin
-pankration
-panleucopenia
-panlogical
-panlogism
-panlogistical
-panman
-panmelodicon
-panmelodion
-panmerism
-panmeristic
-panmixia
-panmixy
-panmnesia
-panmug
-panmyelophthisis
-Panna
-pannade
-pannage
-pannam
-pannationalism
-panne
-pannel
-panner
-pannery
-panneuritic
-panneuritis
-pannicle
-pannicular
-pannier
-panniered
-pannierman
-pannikin
-panning
-Pannonian
-Pannonic
-pannose
-pannosely
-pannum
-pannus
-pannuscorium
-Panoan
-panocha
-panoche
-panococo
-panoistic
-panomphaic
-panomphean
-panomphic
-panophobia
-panophthalmia
-panophthalmitis
-panoplied
-panoplist
-panoply
-panoptic
-panoptical
-panopticon
-panoram
-panorama
-panoramic
-panoramical
-panoramically
-panoramist
-panornithic
-Panorpa
-Panorpatae
-panorpian
-panorpid
-Panorpidae
-Panos
-panosteitis
-panostitis
-panotitis
-panotype
-panouchi
-panpathy
-panpharmacon
-panphenomenalism
-panphobia
-Panpipe
-panplegia
-panpneumatism
-panpolism
-panpsychic
-panpsychism
-panpsychist
-panpsychistic
-panscientist
-pansciolism
-pansciolist
-pansclerosis
-pansclerotic
-panse
-pansexism
-pansexual
-pansexualism
-pansexualist
-pansexuality
-pansexualize
-panshard
-panside
-pansideman
-pansied
-pansinuitis
-pansinusitis
-pansmith
-pansophic
-pansophical
-pansophically
-pansophism
-pansophist
-pansophy
-panspermatism
-panspermatist
-panspermia
-panspermic
-panspermism
-panspermist
-panspermy
-pansphygmograph
-panstereorama
-pansy
-pansylike
-pant
-pantachromatic
-pantacosm
-pantagamy
-pantagogue
-pantagraph
-pantagraphic
-pantagraphical
-Pantagruel
-Pantagruelian
-Pantagruelic
-Pantagruelically
-Pantagrueline
-pantagruelion
-Pantagruelism
-Pantagruelist
-Pantagruelistic
-Pantagruelistical
-Pantagruelize
-pantaleon
-pantaletless
-pantalets
-pantaletted
-pantalgia
-pantalon
-Pantalone
-pantaloon
-pantalooned
-pantaloonery
-pantaloons
-pantameter
-pantamorph
-pantamorphia
-pantamorphic
-pantanemone
-pantanencephalia
-pantanencephalic
-pantaphobia
-pantarbe
-pantarchy
-pantas
-pantascope
-pantascopic
-Pantastomatida
-Pantastomina
-pantatrophia
-pantatrophy
-pantatype
-pantechnic
-pantechnicon
-pantelegraph
-pantelegraphy
-panteleologism
-pantelephone
-pantelephonic
-Pantelis
-pantellerite
-panter
-panterer
-Pantheian
-pantheic
-pantheism
-pantheist
-pantheistic
-pantheistical
-pantheistically
-panthelematism
-panthelism
-pantheologist
-pantheology
-pantheon
-pantheonic
-pantheonization
-pantheonize
-panther
-pantheress
-pantherine
-pantherish
-pantherlike
-pantherwood
-pantheum
-pantie
-panties
-pantile
-pantiled
-pantiling
-panting
-pantingly
-pantisocracy
-pantisocrat
-pantisocratic
-pantisocratical
-pantisocratist
-pantle
-pantler
-panto
-pantochrome
-pantochromic
-pantochromism
-pantochronometer
-Pantocrator
-pantod
-Pantodon
-Pantodontidae
-pantoffle
-pantofle
-pantoganglitis
-pantogelastic
-pantoglossical
-pantoglot
-pantoglottism
-pantograph
-pantographer
-pantographic
-pantographical
-pantographically
-pantography
-pantoiatrical
-pantologic
-pantological
-pantologist
-pantology
-pantomancer
-pantometer
-pantometric
-pantometrical
-pantometry
-pantomime
-pantomimic
-pantomimical
-pantomimically
-pantomimicry
-pantomimish
-pantomimist
-pantomimus
-pantomnesia
-pantomnesic
-pantomorph
-pantomorphia
-pantomorphic
-panton
-pantoon
-pantopelagian
-pantophagic
-pantophagist
-pantophagous
-pantophagy
-pantophile
-pantophobia
-pantophobic
-pantophobous
-pantoplethora
-pantopod
-Pantopoda
-pantopragmatic
-pantopterous
-pantoscope
-pantoscopic
-pantosophy
-Pantostomata
-pantostomate
-pantostomatous
-pantostome
-pantotactic
-pantothenate
-pantothenic
-Pantotheria
-pantotherian
-pantotype
-pantoum
-pantropic
-pantropical
-pantry
-pantryman
-pantrywoman
-pants
-pantun
-panty
-pantywaist
-panung
-panurgic
-panurgy
-panyar
-Panzer
-panzoism
-panzootia
-panzootic
-panzooty
-Paola
-paolo
-paon
-pap
-papa
-papability
-papable
-papabot
-papacy
-papagallo
-Papago
-papain
-papal
-papalism
-papalist
-papalistic
-papalization
-papalize
-papalizer
-papally
-papalty
-papane
-papaphobia
-papaphobist
-papaprelatical
-papaprelatist
-paparchical
-paparchy
-papaship
-Papaver
-Papaveraceae
-papaveraceous
-Papaverales
-papaverine
-papaverous
-papaw
-papaya
-Papayaceae
-papayaceous
-papayotin
-papboat
-pape
-papelonne
-paper
-paperback
-paperbark
-paperboard
-papered
-paperer
-paperful
-paperiness
-papering
-paperlike
-papermaker
-papermaking
-papermouth
-papern
-papershell
-paperweight
-papery
-papess
-papeterie
-papey
-Paphian
-Paphiopedilum
-Papiamento
-papicolar
-papicolist
-Papilio
-Papilionaceae
-papilionaceous
-Papiliones
-papilionid
-Papilionidae
-Papilionides
-Papilioninae
-papilionine
-papilionoid
-Papilionoidea
-papilla
-papillae
-papillar
-papillary
-papillate
-papillated
-papillectomy
-papilledema
-papilliferous
-papilliform
-papillitis
-papilloadenocystoma
-papillocarcinoma
-papilloedema
-papilloma
-papillomatosis
-papillomatous
-papillon
-papilloretinitis
-papillosarcoma
-papillose
-papillosity
-papillote
-papillous
-papillulate
-papillule
-Papinachois
-Papio
-papion
-papish
-papisher
-papism
-Papist
-papist
-papistic
-papistical
-papistically
-papistlike
-papistly
-papistry
-papize
-papless
-papmeat
-papolater
-papolatrous
-papolatry
-papoose
-papooseroot
-Pappea
-pappescent
-pappi
-pappiferous
-pappiform
-pappose
-pappox
-pappus
-pappy
-papreg
-paprica
-paprika
-Papuan
-papula
-papular
-papulate
-papulated
-papulation
-papule
-papuliferous
-papuloerythematous
-papulopustular
-papulopustule
-papulose
-papulosquamous
-papulous
-papulovesicular
-papyr
-papyraceous
-papyral
-papyrean
-papyri
-papyrian
-papyrin
-papyrine
-papyritious
-papyrocracy
-papyrograph
-papyrographer
-papyrographic
-papyrography
-papyrological
-papyrologist
-papyrology
-papyrophobia
-papyroplastics
-papyrotamia
-papyrotint
-papyrotype
-papyrus
-Paque
-paquet
-par
-para
-paraaminobenzoic
-parabanate
-parabanic
-parabaptism
-parabaptization
-parabasal
-parabasic
-parabasis
-parabema
-parabematic
-parabenzoquinone
-parabiosis
-parabiotic
-parablast
-parablastic
-parable
-parablepsia
-parablepsis
-parablepsy
-parableptic
-parabola
-parabolanus
-parabolic
-parabolical
-parabolicalism
-parabolically
-parabolicness
-paraboliform
-parabolist
-parabolization
-parabolize
-parabolizer
-paraboloid
-paraboloidal
-parabomb
-parabotulism
-parabranchia
-parabranchial
-parabranchiate
-parabulia
-parabulic
-paracanthosis
-paracarmine
-paracasein
-paracaseinate
-Paracelsian
-Paracelsianism
-Paracelsic
-Paracelsist
-Paracelsistic
-Paracelsus
-paracentesis
-paracentral
-paracentric
-paracentrical
-paracephalus
-paracerebellar
-paracetaldehyde
-parachaplain
-paracholia
-parachor
-parachordal
-parachrea
-parachroia
-parachroma
-parachromatism
-parachromatophorous
-parachromatopsia
-parachromatosis
-parachrome
-parachromoparous
-parachromophoric
-parachromophorous
-parachronism
-parachronistic
-parachrose
-parachute
-parachutic
-parachutism
-parachutist
-paraclete
-paracmasis
-paracme
-paracoele
-paracoelian
-paracolitis
-paracolon
-paracolpitis
-paracolpium
-paracondyloid
-paracone
-paraconic
-paraconid
-paraconscious
-paracorolla
-paracotoin
-paracoumaric
-paracresol
-Paracress
-paracusia
-paracusic
-paracyanogen
-paracyesis
-paracymene
-paracystic
-paracystitis
-paracystium
-parade
-paradeful
-paradeless
-paradelike
-paradenitis
-paradental
-paradentitis
-paradentium
-parader
-paraderm
-paradiastole
-paradiazine
-paradichlorbenzene
-paradichlorbenzol
-paradichlorobenzene
-paradichlorobenzol
-paradidymal
-paradidymis
-paradigm
-paradigmatic
-paradigmatical
-paradigmatically
-paradigmatize
-parading
-paradingly
-paradiplomatic
-paradisaic
-paradisaically
-paradisal
-paradise
-Paradisea
-paradisean
-Paradiseidae
-Paradiseinae
-Paradisia
-paradisiac
-paradisiacal
-paradisiacally
-paradisial
-paradisian
-paradisic
-paradisical
-parado
-paradoctor
-parados
-paradoses
-paradox
-paradoxal
-paradoxer
-paradoxial
-paradoxic
-paradoxical
-paradoxicalism
-paradoxicality
-paradoxically
-paradoxicalness
-paradoxician
-Paradoxides
-paradoxidian
-paradoxism
-paradoxist
-paradoxographer
-paradoxographical
-paradoxology
-paradoxure
-Paradoxurinae
-paradoxurine
-Paradoxurus
-paradoxy
-paradromic
-paraenesis
-paraenesize
-paraenetic
-paraenetical
-paraengineer
-paraffin
-paraffine
-paraffiner
-paraffinic
-paraffinize
-paraffinoid
-paraffiny
-paraffle
-parafle
-parafloccular
-paraflocculus
-paraform
-paraformaldehyde
-parafunction
-paragammacism
-paraganglion
-paragaster
-paragastral
-paragastric
-paragastrula
-paragastrular
-parage
-paragenesia
-paragenesis
-paragenetic
-paragenic
-paragerontic
-parageusia
-parageusic
-parageusis
-paragglutination
-paraglenal
-paraglobin
-paraglobulin
-paraglossa
-paraglossal
-paraglossate
-paraglossia
-paraglycogen
-paragnath
-paragnathism
-paragnathous
-paragnathus
-paragneiss
-paragnosia
-paragoge
-paragogic
-paragogical
-paragogically
-paragogize
-paragon
-paragonimiasis
-Paragonimus
-paragonite
-paragonitic
-paragonless
-paragram
-paragrammatist
-paragraph
-paragrapher
-paragraphia
-paragraphic
-paragraphical
-paragraphically
-paragraphism
-paragraphist
-paragraphistical
-paragraphize
-Paraguay
-Paraguayan
-parah
-paraheliotropic
-paraheliotropism
-parahematin
-parahemoglobin
-parahepatic
-Parahippus
-parahopeite
-parahormone
-parahydrogen
-paraiba
-Paraiyan
-parakeet
-parakeratosis
-parakilya
-parakinesia
-parakinetic
-paralactate
-paralalia
-paralambdacism
-paralambdacismus
-paralaurionite
-paraldehyde
-parale
-paralectotype
-paraleipsis
-paralepsis
-paralexia
-paralexic
-paralgesia
-paralgesic
-paralinin
-paralipomena
-Paralipomenon
-paralipsis
-paralitical
-parallactic
-parallactical
-parallactically
-parallax
-parallel
-parallelable
-parallelepiped
-parallelepipedal
-parallelepipedic
-parallelepipedon
-parallelepipedonal
-paralleler
-parallelinervate
-parallelinerved
-parallelinervous
-parallelism
-parallelist
-parallelistic
-parallelith
-parallelization
-parallelize
-parallelizer
-parallelless
-parallelly
-parallelodrome
-parallelodromous
-parallelogram
-parallelogrammatic
-parallelogrammatical
-parallelogrammic
-parallelogrammical
-parallelograph
-parallelometer
-parallelopiped
-parallelopipedon
-parallelotropic
-parallelotropism
-parallelwise
-parallepipedous
-paralogia
-paralogical
-paralogician
-paralogism
-paralogist
-paralogistic
-paralogize
-paralogy
-paraluminite
-paralyses
-paralysis
-paralytic
-paralytical
-paralytically
-paralyzant
-paralyzation
-paralyze
-paralyzedly
-paralyzer
-paralyzingly
-param
-paramagnet
-paramagnetic
-paramagnetism
-paramandelic
-paramarine
-paramastigate
-paramastitis
-paramastoid
-paramatta
-Paramecidae
-Paramecium
-paramedian
-paramelaconite
-paramenia
-parament
-paramere
-parameric
-parameron
-paramese
-paramesial
-parameter
-parametric
-parametrical
-parametritic
-parametritis
-parametrium
-paramide
-paramilitary
-paramimia
-paramine
-paramiographer
-paramitome
-paramnesia
-paramo
-Paramoecium
-paramorph
-paramorphia
-paramorphic
-paramorphine
-paramorphism
-paramorphosis
-paramorphous
-paramount
-paramountcy
-paramountly
-paramountness
-paramountship
-paramour
-paramuthetic
-paramyelin
-paramylum
-paramyoclonus
-paramyosinogen
-paramyotone
-paramyotonia
-paranasal
-paranatellon
-parandrus
-paranema
-paranematic
-paranephric
-paranephritic
-paranephritis
-paranephros
-paranepionic
-paranete
-parang
-paranitraniline
-paranitrosophenol
-paranoia
-paranoiac
-paranoid
-paranoidal
-paranoidism
-paranomia
-paranormal
-paranosic
-paranthelion
-paranthracene
-Paranthropus
-paranuclear
-paranucleate
-paranucleic
-paranuclein
-paranucleinic
-paranucleus
-paranymph
-paranymphal
-parao
-paraoperation
-Parapaguridae
-paraparesis
-paraparetic
-parapathia
-parapathy
-parapegm
-parapegma
-paraperiodic
-parapet
-parapetalous
-parapeted
-parapetless
-paraph
-paraphasia
-paraphasic
-paraphemia
-paraphenetidine
-paraphenylene
-paraphenylenediamine
-parapherna
-paraphernal
-paraphernalia
-paraphernalian
-paraphia
-paraphilia
-paraphimosis
-paraphonia
-paraphonic
-paraphototropism
-paraphrasable
-paraphrase
-paraphraser
-paraphrasia
-paraphrasian
-paraphrasis
-paraphrasist
-paraphrast
-paraphraster
-paraphrastic
-paraphrastical
-paraphrastically
-paraphrenia
-paraphrenic
-paraphrenitis
-paraphyllium
-paraphysate
-paraphysical
-paraphysiferous
-paraphysis
-paraplasis
-paraplasm
-paraplasmic
-paraplastic
-paraplastin
-paraplectic
-paraplegia
-paraplegic
-paraplegy
-parapleuritis
-parapleurum
-parapod
-parapodial
-parapodium
-parapophysial
-parapophysis
-parapraxia
-parapraxis
-paraproctitis
-paraproctium
-paraprostatitis
-Parapsida
-parapsidal
-parapsidan
-parapsis
-parapsychical
-parapsychism
-parapsychological
-parapsychology
-parapsychosis
-parapteral
-parapteron
-parapterum
-paraquadrate
-paraquinone
-Pararctalia
-Pararctalian
-pararectal
-pararek
-parareka
-pararhotacism
-pararosaniline
-pararosolic
-pararthria
-parasaboteur
-parasalpingitis
-parasang
-parascene
-parascenium
-parasceve
-paraschematic
-parasecretion
-paraselene
-paraselenic
-parasemidin
-parasemidine
-parasexuality
-parashah
-parasigmatism
-parasigmatismus
-Parasita
-parasital
-parasitary
-parasite
-parasitelike
-parasitemia
-parasitic
-Parasitica
-parasitical
-parasitically
-parasiticalness
-parasiticidal
-parasiticide
-Parasitidae
-parasitism
-parasitize
-parasitogenic
-parasitoid
-parasitoidism
-parasitological
-parasitologist
-parasitology
-parasitophobia
-parasitosis
-parasitotrope
-parasitotropic
-parasitotropism
-parasitotropy
-paraskenion
-parasol
-parasoled
-parasolette
-paraspecific
-parasphenoid
-parasphenoidal
-paraspotter
-paraspy
-parastas
-parastatic
-parastemon
-parastemonal
-parasternal
-parasternum
-parastichy
-parastyle
-parasubphonate
-parasubstituted
-Parasuchia
-parasuchian
-parasympathetic
-parasympathomimetic
-parasynapsis
-parasynaptic
-parasynaptist
-parasyndesis
-parasynesis
-parasynetic
-parasynovitis
-parasynthesis
-parasynthetic
-parasyntheton
-parasyphilis
-parasyphilitic
-parasyphilosis
-parasystole
-paratactic
-paratactical
-paratactically
-paratartaric
-parataxis
-parate
-paraterminal
-Paratheria
-paratherian
-parathesis
-parathetic
-parathion
-parathormone
-parathymic
-parathyroid
-parathyroidal
-parathyroidectomize
-parathyroidectomy
-parathyroprival
-parathyroprivia
-parathyroprivic
-paratitla
-paratitles
-paratoloid
-paratoluic
-paratoluidine
-paratomial
-paratomium
-paratonic
-paratonically
-paratorium
-paratory
-paratracheal
-paratragedia
-paratragoedia
-paratransversan
-paratrichosis
-paratrimma
-paratriptic
-paratroop
-paratrooper
-paratrophic
-paratrophy
-paratuberculin
-paratuberculosis
-paratuberculous
-paratungstate
-paratungstic
-paratype
-paratyphlitis
-paratyphoid
-paratypic
-paratypical
-paratypically
-paravaginitis
-paravail
-paravane
-paravauxite
-paravent
-paravertebral
-paravesical
-paraxial
-paraxially
-paraxon
-paraxonic
-paraxylene
-Parazoa
-parazoan
-parazonium
-parbake
-Parbate
-parboil
-parbuckle
-parcel
-parceling
-parcellary
-parcellate
-parcellation
-parcelling
-parcellization
-parcellize
-parcelment
-parcelwise
-parcenary
-parcener
-parcenership
-parch
-parchable
-parchedly
-parchedness
-parcheesi
-parchemin
-parcher
-parchesi
-parching
-parchingly
-parchisi
-parchment
-parchmenter
-parchmentize
-parchmentlike
-parchmenty
-parchy
-parcidentate
-parciloquy
-parclose
-parcook
-pard
-pardalote
-Pardanthus
-pardao
-parded
-pardesi
-pardine
-pardner
-pardnomastic
-pardo
-pardon
-pardonable
-pardonableness
-pardonably
-pardonee
-pardoner
-pardoning
-pardonless
-pardonmonger
-pare
-paregoric
-Pareiasauri
-Pareiasauria
-pareiasaurian
-Pareiasaurus
-Pareioplitae
-parel
-parelectronomic
-parelectronomy
-parella
-paren
-parencephalic
-parencephalon
-parenchym
-parenchyma
-parenchymal
-parenchymatic
-parenchymatitis
-parenchymatous
-parenchymatously
-parenchyme
-parenchymous
-parent
-parentage
-parental
-Parentalia
-parentalism
-parentality
-parentally
-parentdom
-parentela
-parentelic
-parenteral
-parenterally
-parentheses
-parenthesis
-parenthesize
-parenthetic
-parenthetical
-parentheticality
-parenthetically
-parentheticalness
-parenthood
-parenticide
-parentless
-parentlike
-parentship
-Pareoean
-parepididymal
-parepididymis
-parepigastric
-parer
-parerethesis
-parergal
-parergic
-parergon
-paresis
-paresthesia
-paresthesis
-paresthetic
-parethmoid
-paretic
-paretically
-pareunia
-parfait
-parfilage
-parfleche
-parfocal
-pargana
-pargasite
-parge
-pargeboard
-parget
-pargeter
-pargeting
-pargo
-parhelia
-parheliacal
-parhelic
-parhelion
-parhomologous
-parhomology
-parhypate
-pari
-pariah
-pariahdom
-pariahism
-pariahship
-parial
-Parian
-parian
-Pariasauria
-Pariasaurus
-Paridae
-paridigitate
-paridrosis
-paries
-parietal
-Parietales
-Parietaria
-parietary
-parietes
-parietofrontal
-parietojugal
-parietomastoid
-parietoquadrate
-parietosphenoid
-parietosphenoidal
-parietosplanchnic
-parietosquamosal
-parietotemporal
-parietovaginal
-parietovisceral
-parify
-parigenin
-pariglin
-Parilia
-Parilicium
-parilla
-parillin
-parimutuel
-Parinarium
-parine
-paring
-paripinnate
-Paris
-parish
-parished
-parishen
-parishional
-parishionally
-parishionate
-parishioner
-parishionership
-Parisian
-Parisianism
-Parisianization
-Parisianize
-Parisianly
-Parisii
-parisis
-parisology
-parison
-parisonic
-paristhmic
-paristhmion
-parisyllabic
-parisyllabical
-Pariti
-Paritium
-parity
-parivincular
-park
-parka
-parkee
-parker
-parkin
-parking
-Parkinsonia
-Parkinsonism
-parkish
-parklike
-parkward
-parkway
-parky
-parlamento
-parlance
-parlando
-Parlatoria
-parlatory
-parlay
-parle
-parley
-parleyer
-parliament
-parliamental
-parliamentarian
-parliamentarianism
-parliamentarily
-parliamentariness
-parliamentarism
-parliamentarization
-parliamentarize
-parliamentary
-parliamenteer
-parliamenteering
-parliamenter
-parling
-parlish
-parlor
-parlorish
-parlormaid
-parlous
-parlously
-parlousness
-parly
-Parma
-parma
-parmacety
-parmak
-Parmelia
-Parmeliaceae
-parmeliaceous
-parmelioid
-Parmentiera
-Parmesan
-Parmese
-parnas
-Parnassia
-Parnassiaceae
-parnassiaceous
-Parnassian
-Parnassianism
-Parnassiinae
-Parnassism
-Parnassus
-parnel
-Parnellism
-Parnellite
-parnorpine
-paroarion
-paroarium
-paroccipital
-paroch
-parochial
-parochialic
-parochialism
-parochialist
-parochiality
-parochialization
-parochialize
-parochially
-parochialness
-parochin
-parochine
-parochiner
-parode
-parodiable
-parodial
-parodic
-parodical
-parodinia
-parodist
-parodistic
-parodistically
-parodize
-parodontitis
-parodos
-parody
-parodyproof
-paroecious
-paroeciously
-paroeciousness
-paroecism
-paroecy
-paroemia
-paroemiac
-paroemiographer
-paroemiography
-paroemiologist
-paroemiology
-paroicous
-parol
-parolable
-parole
-parolee
-parolfactory
-paroli
-parolist
-paromoeon
-paromologetic
-paromologia
-paromology
-paromphalocele
-paromphalocelic
-paronomasia
-paronomasial
-paronomasian
-paronomasiastic
-paronomastical
-paronomastically
-paronychia
-paronychial
-paronychium
-paronym
-paronymic
-paronymization
-paronymize
-paronymous
-paronymy
-paroophoric
-paroophoritis
-paroophoron
-paropsis
-paroptesis
-paroptic
-parorchid
-parorchis
-parorexia
-Parosela
-parosmia
-parosmic
-parosteal
-parosteitis
-parosteosis
-parostosis
-parostotic
-Parotia
-parotic
-parotid
-parotidean
-parotidectomy
-parotiditis
-parotis
-parotitic
-parotitis
-parotoid
-parous
-parousia
-parousiamania
-parovarian
-parovariotomy
-parovarium
-paroxazine
-paroxysm
-paroxysmal
-paroxysmalist
-paroxysmally
-paroxysmic
-paroxysmist
-paroxytone
-paroxytonic
-paroxytonize
-parpal
-parquet
-parquetage
-parquetry
-parr
-Parra
-parrel
-parrhesia
-parrhesiastic
-parriable
-parricidal
-parricidally
-parricide
-parricided
-parricidial
-parricidism
-Parridae
-parrier
-parrock
-parrot
-parroter
-parrothood
-parrotism
-parrotize
-parrotlet
-parrotlike
-parrotry
-parrotwise
-parroty
-parry
-parsable
-parse
-parsec
-Parsee
-Parseeism
-parser
-parsettensite
-Parsi
-Parsic
-Parsiism
-parsimonious
-parsimoniously
-parsimoniousness
-parsimony
-Parsism
-parsley
-parsleylike
-parsleywort
-parsnip
-parson
-parsonage
-parsonarchy
-parsondom
-parsoned
-parsonese
-parsoness
-parsonet
-parsonhood
-parsonic
-parsonical
-parsonically
-parsoning
-parsonish
-parsonity
-parsonize
-parsonlike
-parsonly
-parsonolatry
-parsonology
-parsonry
-parsonship
-Parsonsia
-parsonsite
-parsony
-Part
-part
-partakable
-partake
-partaker
-partan
-partanfull
-partanhanded
-parted
-partedness
-parter
-parterre
-parterred
-partheniad
-Partheniae
-parthenian
-parthenic
-Parthenium
-parthenocarpelly
-parthenocarpic
-parthenocarpical
-parthenocarpically
-parthenocarpous
-parthenocarpy
-Parthenocissus
-parthenogenesis
-parthenogenetic
-parthenogenetically
-parthenogenic
-parthenogenitive
-parthenogenous
-parthenogeny
-parthenogonidium
-Parthenolatry
-parthenology
-Parthenon
-Parthenopaeus
-parthenoparous
-Parthenope
-Parthenopean
-Parthenos
-parthenosperm
-parthenospore
-Parthian
-partial
-partialism
-partialist
-partialistic
-partiality
-partialize
-partially
-partialness
-partiary
-partible
-particate
-participability
-participable
-participance
-participancy
-participant
-participantly
-participate
-participatingly
-participation
-participative
-participatively
-participator
-participatory
-participatress
-participial
-participiality
-participialize
-participially
-participle
-particle
-particled
-particular
-particularism
-particularist
-particularistic
-particularistically
-particularity
-particularization
-particularize
-particularly
-particularness
-particulate
-partigen
-partile
-partimembered
-partimen
-partinium
-partisan
-partisanism
-partisanize
-partisanship
-partite
-partition
-partitional
-partitionary
-partitioned
-partitioner
-partitioning
-partitionist
-partitionment
-partitive
-partitively
-partitura
-partiversal
-partivity
-partless
-partlet
-partly
-partner
-partnerless
-partnership
-parto
-partook
-partridge
-partridgeberry
-partridgelike
-partridgewood
-partridging
-partschinite
-parture
-parturiate
-parturience
-parturiency
-parturient
-parturifacient
-parturition
-parturitive
-party
-partyism
-partyist
-partykin
-partyless
-partymonger
-partyship
-Parukutu
-parulis
-parumbilical
-parure
-paruria
-Parus
-parvanimity
-parvenu
-parvenudom
-parvenuism
-parvicellular
-parviflorous
-parvifoliate
-parvifolious
-parvipotent
-parvirostrate
-parvis
-parviscient
-parvitude
-parvolin
-parvoline
-parvule
-paryphodrome
-pasan
-pasang
-Pascal
-Pasch
-Pascha
-paschal
-paschalist
-Paschaltide
-paschite
-pascoite
-pascuage
-pascual
-pascuous
-pasgarde
-pash
-pasha
-pashadom
-pashalik
-pashaship
-pashm
-pashmina
-Pashto
-pasi
-pasigraphic
-pasigraphical
-pasigraphy
-pasilaly
-Pasitelean
-pasmo
-Paspalum
-pasqueflower
-pasquil
-pasquilant
-pasquiler
-pasquilic
-Pasquin
-pasquin
-pasquinade
-pasquinader
-Pasquinian
-Pasquino
-pass
-passable
-passableness
-passably
-passade
-passado
-passage
-passageable
-passageway
-Passagian
-passalid
-Passalidae
-Passalus
-Passamaquoddy
-passant
-passback
-passbook
-Passe
-passe
-passee
-passegarde
-passement
-passementerie
-passen
-passenger
-Passer
-passer
-Passeres
-passeriform
-Passeriformes
-Passerina
-passerine
-passewa
-passibility
-passible
-passibleness
-Passiflora
-Passifloraceae
-passifloraceous
-Passiflorales
-passimeter
-passing
-passingly
-passingness
-passion
-passional
-passionary
-passionate
-passionately
-passionateness
-passionative
-passioned
-passionflower
-passionful
-passionfully
-passionfulness
-Passionist
-passionist
-passionless
-passionlessly
-passionlessness
-passionlike
-passionometer
-passionproof
-Passiontide
-passionwise
-passionwort
-passir
-passival
-passivate
-passivation
-passive
-passively
-passiveness
-passivism
-passivist
-passivity
-passkey
-passless
-passman
-passo
-passometer
-passout
-passover
-passoverish
-passpenny
-passport
-passportless
-passulate
-passulation
-passus
-passway
-passwoman
-password
-passworts
-passymeasure
-past
-paste
-pasteboard
-pasteboardy
-pasted
-pastedness
-pastedown
-pastel
-pastelist
-paster
-pasterer
-pastern
-pasterned
-pasteur
-Pasteurella
-Pasteurelleae
-pasteurellosis
-Pasteurian
-pasteurism
-pasteurization
-pasteurize
-pasteurizer
-pastiche
-pasticheur
-pastil
-pastile
-pastille
-pastime
-pastimer
-Pastinaca
-pastiness
-pasting
-pastness
-pastophor
-pastophorion
-pastophorium
-pastophorus
-pastor
-pastorage
-pastoral
-pastorale
-pastoralism
-pastoralist
-pastorality
-pastoralize
-pastorally
-pastoralness
-pastorate
-pastoress
-pastorhood
-pastorium
-pastorize
-pastorless
-pastorlike
-pastorling
-pastorly
-pastorship
-pastose
-pastosity
-pastrami
-pastry
-pastryman
-pasturability
-pasturable
-pasturage
-pastural
-pasture
-pastureless
-pasturer
-pasturewise
-pasty
-pasul
-Pat
-pat
-pata
-pataca
-patacao
-pataco
-patagial
-patagiate
-patagium
-Patagon
-patagon
-Patagones
-Patagonian
-pataka
-patamar
-patao
-patapat
-pataque
-Pataria
-Patarin
-Patarine
-Patarinism
-patas
-patashte
-Patavian
-patavinity
-patball
-patballer
-patch
-patchable
-patcher
-patchery
-patchily
-patchiness
-patchleaf
-patchless
-patchouli
-patchwise
-patchword
-patchwork
-patchworky
-patchy
-pate
-patefaction
-patefy
-patel
-patella
-patellar
-patellaroid
-patellate
-Patellidae
-patellidan
-patelliform
-patelline
-patellofemoral
-patelloid
-patellula
-patellulate
-paten
-patency
-patener
-patent
-patentability
-patentable
-patentably
-patentee
-patently
-patentor
-pater
-patera
-patercove
-paterfamiliar
-paterfamiliarly
-paterfamilias
-pateriform
-paterissa
-paternal
-paternalism
-paternalist
-paternalistic
-paternalistically
-paternality
-paternalize
-paternally
-paternity
-paternoster
-paternosterer
-patesi
-patesiate
-path
-Pathan
-pathbreaker
-pathed
-pathema
-pathematic
-pathematically
-pathematology
-pathetic
-pathetical
-pathetically
-patheticalness
-patheticate
-patheticly
-patheticness
-pathetism
-pathetist
-pathetize
-pathfarer
-pathfinder
-pathfinding
-pathic
-pathicism
-pathless
-pathlessness
-pathlet
-pathoanatomical
-pathoanatomy
-pathobiological
-pathobiologist
-pathobiology
-pathochemistry
-pathodontia
-pathogen
-pathogene
-pathogenesis
-pathogenesy
-pathogenetic
-pathogenic
-pathogenicity
-pathogenous
-pathogeny
-pathogerm
-pathogermic
-pathognomic
-pathognomical
-pathognomonic
-pathognomonical
-pathognomy
-pathognostic
-pathographical
-pathography
-pathologic
-pathological
-pathologically
-pathologicoanatomic
-pathologicoanatomical
-pathologicoclinical
-pathologicohistological
-pathologicopsychological
-pathologist
-pathology
-patholysis
-patholytic
-pathomania
-pathometabolism
-pathomimesis
-pathomimicry
-pathoneurosis
-pathonomia
-pathonomy
-pathophobia
-pathophoresis
-pathophoric
-pathophorous
-pathoplastic
-pathoplastically
-pathopoeia
-pathopoiesis
-pathopoietic
-pathopsychology
-pathopsychosis
-pathoradiography
-pathos
-pathosocial
-Pathrusim
-pathway
-pathwayed
-pathy
-patible
-patibulary
-patibulate
-patience
-patiency
-patient
-patientless
-patiently
-patientness
-patina
-patinate
-patination
-patine
-patined
-patinize
-patinous
-patio
-patisserie
-patly
-Patmian
-Patmos
-patness
-patnidar
-pato
-patois
-patola
-patonce
-patria
-patrial
-patriarch
-patriarchal
-patriarchalism
-patriarchally
-patriarchate
-patriarchdom
-patriarched
-patriarchess
-patriarchic
-patriarchical
-patriarchically
-patriarchism
-patriarchist
-patriarchship
-patriarchy
-Patrice
-patrice
-Patricia
-Patrician
-patrician
-patricianhood
-patricianism
-patricianly
-patricianship
-patriciate
-patricidal
-patricide
-Patricio
-Patrick
-patrico
-patrilineal
-patrilineally
-patrilinear
-patriliny
-patrilocal
-patrimonial
-patrimonially
-patrimony
-patrin
-Patriofelis
-patriolatry
-patriot
-patrioteer
-patriotess
-patriotic
-patriotical
-patriotically
-patriotics
-patriotism
-patriotly
-patriotship
-Patripassian
-Patripassianism
-Patripassianist
-Patripassianly
-patrist
-patristic
-patristical
-patristically
-patristicalness
-patristicism
-patristics
-patrix
-patrizate
-patrization
-patrocinium
-patroclinic
-patroclinous
-patrocliny
-patrogenesis
-patrol
-patroller
-patrollotism
-patrolman
-patrologic
-patrological
-patrologist
-patrology
-patron
-patronage
-patronal
-patronate
-patrondom
-patroness
-patronessship
-patronite
-patronizable
-patronization
-patronize
-patronizer
-patronizing
-patronizingly
-patronless
-patronly
-patronomatology
-patronship
-patronym
-patronymic
-patronymically
-patronymy
-patroon
-patroonry
-patroonship
-patruity
-Patsy
-patta
-pattable
-patte
-pattee
-patten
-pattened
-pattener
-patter
-patterer
-patterist
-pattern
-patternable
-patterned
-patterner
-patterning
-patternize
-patternless
-patternlike
-patternmaker
-patternmaking
-patternwise
-patterny
-pattu
-Patty
-patty
-pattypan
-patu
-patulent
-patulous
-patulously
-patulousness
-Patuxent
-patwari
-Patwin
-paty
-pau
-pauciarticulate
-pauciarticulated
-paucidentate
-pauciflorous
-paucifoliate
-paucifolious
-paucify
-paucijugate
-paucilocular
-pauciloquent
-pauciloquently
-pauciloquy
-paucinervate
-paucipinnate
-pauciplicate
-pauciradiate
-pauciradiated
-paucispiral
-paucispirated
-paucity
-paughty
-paukpan
-Paul
-Paula
-paular
-pauldron
-Pauliad
-Paulian
-Paulianist
-Pauliccian
-Paulicianism
-paulie
-paulin
-Paulina
-Pauline
-Paulinia
-Paulinian
-Paulinism
-Paulinist
-Paulinistic
-Paulinistically
-Paulinity
-Paulinize
-Paulinus
-Paulism
-Paulist
-Paulista
-Paulite
-paulopast
-paulopost
-paulospore
-Paulownia
-Paulus
-Paumari
-paunch
-paunched
-paunchful
-paunchily
-paunchiness
-paunchy
-paup
-pauper
-pauperage
-pauperate
-pauperdom
-pauperess
-pauperism
-pauperitic
-pauperization
-pauperize
-pauperizer
-Paurometabola
-paurometabolic
-paurometabolism
-paurometabolous
-paurometaboly
-pauropod
-Pauropoda
-pauropodous
-pausably
-pausal
-pausation
-pause
-pauseful
-pausefully
-pauseless
-pauselessly
-pausement
-pauser
-pausingly
-paussid
-Paussidae
-paut
-pauxi
-pavage
-pavan
-pavane
-pave
-pavement
-pavemental
-paver
-pavestone
-Pavetta
-Pavia
-pavid
-pavidity
-pavier
-pavilion
-paving
-pavior
-Paviotso
-paviour
-pavis
-pavisade
-pavisado
-paviser
-pavisor
-Pavo
-pavonated
-pavonazzetto
-pavonazzo
-Pavoncella
-Pavonia
-pavonian
-pavonine
-pavonize
-pavy
-paw
-pawdite
-pawer
-pawing
-pawk
-pawkery
-pawkily
-pawkiness
-pawkrie
-pawky
-pawl
-pawn
-pawnable
-pawnage
-pawnbroker
-pawnbrokerage
-pawnbrokeress
-pawnbrokering
-pawnbrokery
-pawnbroking
-Pawnee
-pawnee
-pawner
-pawnie
-pawnor
-pawnshop
-pawpaw
-Pawtucket
-pax
-paxilla
-paxillar
-paxillary
-paxillate
-paxilliferous
-paxilliform
-Paxillosa
-paxillose
-paxillus
-paxiuba
-paxwax
-pay
-payability
-payable
-payableness
-payably
-Payagua
-Payaguan
-payday
-payed
-payee
-payeny
-payer
-paying
-paymaster
-paymastership
-payment
-paymistress
-Payni
-paynim
-paynimhood
-paynimry
-Paynize
-payoff
-payong
-payor
-payroll
-paysagist
-Pazend
-pea
-peaberry
-peace
-peaceable
-peaceableness
-peaceably
-peacebreaker
-peacebreaking
-peaceful
-peacefully
-peacefulness
-peaceless
-peacelessness
-peacelike
-peacemaker
-peacemaking
-peaceman
-peacemonger
-peacemongering
-peacetime
-peach
-peachberry
-peachblossom
-peachblow
-peachen
-peacher
-peachery
-peachick
-peachify
-peachiness
-peachlet
-peachlike
-peachwood
-peachwort
-peachy
-peacoat
-peacock
-peacockery
-peacockish
-peacockishly
-peacockishness
-peacockism
-peacocklike
-peacockly
-peacockwise
-peacocky
-peacod
-peafowl
-peag
-peage
-peahen
-peai
-peaiism
-peak
-peaked
-peakedly
-peakedness
-peaker
-peakily
-peakiness
-peaking
-peakish
-peakishly
-peakishness
-peakless
-peaklike
-peakward
-peaky
-peakyish
-peal
-pealike
-pean
-peanut
-pear
-pearceite
-pearl
-pearlberry
-pearled
-pearler
-pearlet
-pearlfish
-pearlfruit
-pearlike
-pearlin
-pearliness
-pearling
-pearlish
-pearlite
-pearlitic
-pearlsides
-pearlstone
-pearlweed
-pearlwort
-pearly
-pearmain
-pearmonger
-peart
-pearten
-peartly
-peartness
-pearwood
-peasant
-peasantess
-peasanthood
-peasantism
-peasantize
-peasantlike
-peasantly
-peasantry
-peasantship
-peasecod
-peaselike
-peasen
-peashooter
-peason
-peastake
-peastaking
-peastick
-peasticking
-peastone
-peasy
-peat
-peatery
-peathouse
-peatman
-peatship
-peatstack
-peatwood
-peaty
-peavey
-peavy
-Peba
-peba
-Peban
-pebble
-pebbled
-pebblehearted
-pebblestone
-pebbleware
-pebbly
-pebrine
-pebrinous
-pecan
-peccability
-peccable
-peccadillo
-peccancy
-peccant
-peccantly
-peccantness
-peccary
-peccation
-peccavi
-pech
-pecht
-pecite
-peck
-pecked
-pecker
-peckerwood
-pecket
-peckful
-peckhamite
-peckiness
-peckish
-peckishly
-peckishness
-peckle
-peckled
-peckly
-Pecksniffian
-Pecksniffianism
-Pecksniffism
-pecky
-Pecopteris
-pecopteroid
-Pecora
-Pecos
-pectase
-pectate
-pecten
-pectic
-pectin
-Pectinacea
-pectinacean
-pectinaceous
-pectinal
-pectinase
-pectinate
-pectinated
-pectinately
-pectination
-pectinatodenticulate
-pectinatofimbricate
-pectinatopinnate
-pectineal
-pectineus
-pectinibranch
-Pectinibranchia
-pectinibranchian
-Pectinibranchiata
-pectinibranchiate
-pectinic
-pectinid
-Pectinidae
-pectiniferous
-pectiniform
-pectinirostrate
-pectinite
-pectinogen
-pectinoid
-pectinose
-pectinous
-pectizable
-pectization
-pectize
-pectocellulose
-pectolite
-pectora
-pectoral
-pectoralgia
-pectoralis
-pectoralist
-pectorally
-pectoriloquial
-pectoriloquism
-pectoriloquous
-pectoriloquy
-pectosase
-pectose
-pectosic
-pectosinase
-pectous
-pectunculate
-Pectunculus
-pectus
-peculate
-peculation
-peculator
-peculiar
-peculiarism
-peculiarity
-peculiarize
-peculiarly
-peculiarness
-peculiarsome
-peculium
-pecuniarily
-pecuniary
-pecuniosity
-pecunious
-ped
-peda
-pedage
-pedagog
-pedagogal
-pedagogic
-pedagogical
-pedagogically
-pedagogics
-pedagogism
-pedagogist
-pedagogue
-pedagoguery
-pedagoguish
-pedagoguism
-pedagogy
-pedal
-pedaler
-pedalfer
-pedalferic
-Pedaliaceae
-pedaliaceous
-pedalian
-pedalier
-Pedalion
-pedalism
-pedalist
-pedaliter
-pedality
-Pedalium
-pedanalysis
-pedant
-pedantesque
-pedantess
-pedanthood
-pedantic
-pedantical
-pedantically
-pedanticalness
-pedanticism
-pedanticly
-pedanticness
-pedantism
-pedantize
-pedantocracy
-pedantocrat
-pedantocratic
-pedantry
-pedary
-Pedata
-pedate
-pedated
-pedately
-pedatifid
-pedatiform
-pedatilobate
-pedatilobed
-pedatinerved
-pedatipartite
-pedatisect
-pedatisected
-pedatrophia
-pedder
-peddle
-peddler
-peddleress
-peddlerism
-peddlery
-peddling
-peddlingly
-pedee
-pedelion
-pederast
-pederastic
-pederastically
-pederasty
-pedes
-pedesis
-pedestal
-pedestrial
-pedestrially
-pedestrian
-pedestrianate
-pedestrianism
-pedestrianize
-pedetentous
-Pedetes
-Pedetidae
-Pedetinae
-pediadontia
-pediadontic
-pediadontist
-pedialgia
-Pediastrum
-pediatric
-pediatrician
-pediatrics
-pediatrist
-pediatry
-pedicab
-pedicel
-pediceled
-pedicellar
-pedicellaria
-pedicellate
-pedicellated
-pedicellation
-pedicelled
-pedicelliform
-Pedicellina
-pedicellus
-pedicle
-pedicular
-Pedicularia
-Pedicularis
-pediculate
-pediculated
-Pediculati
-pedicule
-Pediculi
-pediculicidal
-pediculicide
-pediculid
-Pediculidae
-Pediculina
-pediculine
-pediculofrontal
-pediculoid
-pediculoparietal
-pediculophobia
-pediculosis
-pediculous
-Pediculus
-pedicure
-pedicurism
-pedicurist
-pediferous
-pediform
-pedigerous
-pedigraic
-pedigree
-pedigreeless
-pediluvium
-Pedimana
-pedimanous
-pediment
-pedimental
-pedimented
-pedimentum
-Pedioecetes
-pedion
-pedionomite
-Pedionomus
-pedipalp
-pedipalpal
-pedipalpate
-Pedipalpi
-Pedipalpida
-pedipalpous
-pedipalpus
-pedipulate
-pedipulation
-pedipulator
-pedlar
-pedlary
-pedobaptism
-pedobaptist
-pedocal
-pedocalcic
-pedodontia
-pedodontic
-pedodontist
-pedodontology
-pedograph
-pedological
-pedologist
-pedologistical
-pedologistically
-pedology
-pedometer
-pedometric
-pedometrical
-pedometrically
-pedometrician
-pedometrist
-pedomorphic
-pedomorphism
-pedomotive
-pedomotor
-pedophilia
-pedophilic
-pedotribe
-pedotrophic
-pedotrophist
-pedotrophy
-pedrail
-pedregal
-pedrero
-Pedro
-pedro
-pedule
-pedum
-peduncle
-peduncled
-peduncular
-Pedunculata
-pedunculate
-pedunculated
-pedunculation
-pedunculus
-pee
-peed
-peek
-peekaboo
-peel
-peelable
-peele
-peeled
-peeledness
-peeler
-peelhouse
-peeling
-Peelism
-Peelite
-peelman
-peen
-peenge
-peeoy
-peep
-peeper
-peepeye
-peephole
-peepy
-peer
-peerage
-peerdom
-peeress
-peerhood
-peerie
-peeringly
-peerless
-peerlessly
-peerlessness
-peerling
-peerly
-peership
-peery
-peesash
-peesoreh
-peesweep
-peetweet
-peeve
-peeved
-peevedly
-peevedness
-peever
-peevish
-peevishly
-peevishness
-peewee
-Peg
-peg
-pega
-pegall
-peganite
-Peganum
-Pegasean
-Pegasian
-Pegasid
-pegasid
-Pegasidae
-pegasoid
-Pegasus
-pegboard
-pegbox
-pegged
-pegger
-pegging
-peggle
-Peggy
-peggy
-pegless
-peglet
-peglike
-pegman
-pegmatite
-pegmatitic
-pegmatization
-pegmatize
-pegmatoid
-pegmatophyre
-pegology
-pegomancy
-Peguan
-pegwood
-Pehlevi
-peho
-Pehuenche
-peignoir
-peine
-peirameter
-peirastic
-peirastically
-peisage
-peise
-peiser
-Peitho
-peixere
-pejorate
-pejoration
-pejorationist
-pejorative
-pejoratively
-pejorism
-pejorist
-pejority
-pekan
-Pekin
-pekin
-Peking
-Pekingese
-pekoe
-peladic
-pelage
-pelagial
-Pelagian
-pelagian
-Pelagianism
-Pelagianize
-Pelagianizer
-pelagic
-Pelagothuria
-pelamyd
-pelanos
-Pelargi
-pelargic
-Pelargikon
-pelargomorph
-Pelargomorphae
-pelargomorphic
-pelargonate
-pelargonic
-pelargonidin
-pelargonin
-pelargonium
-Pelasgi
-Pelasgian
-Pelasgic
-Pelasgikon
-Pelasgoi
-Pele
-pelean
-pelecan
-Pelecani
-Pelecanidae
-Pelecaniformes
-Pelecanoides
-Pelecanoidinae
-Pelecanus
-pelecypod
-Pelecypoda
-pelecypodous
-pelelith
-pelerine
-Peleus
-Pelew
-pelf
-Pelias
-pelican
-pelicanry
-pelick
-pelicometer
-Pelides
-Pelidnota
-pelike
-peliom
-pelioma
-peliosis
-pelisse
-pelite
-pelitic
-pell
-Pellaea
-pellage
-pellagra
-pellagragenic
-pellagrin
-pellagrose
-pellagrous
-pellar
-pellard
-pellas
-pellate
-pellation
-peller
-pellet
-pelleted
-pelletierine
-pelletlike
-pellety
-Pellian
-pellicle
-pellicula
-pellicular
-pellicularia
-pelliculate
-pellicule
-pellile
-pellitory
-pellmell
-pellock
-pellotine
-pellucent
-pellucid
-pellucidity
-pellucidly
-pellucidness
-Pelmanism
-Pelmanist
-Pelmanize
-pelmatic
-pelmatogram
-Pelmatozoa
-pelmatozoan
-pelmatozoic
-pelmet
-Pelobates
-pelobatid
-Pelobatidae
-pelobatoid
-Pelodytes
-pelodytid
-Pelodytidae
-pelodytoid
-Pelomedusa
-pelomedusid
-Pelomedusidae
-pelomedusoid
-Pelomyxa
-pelon
-Pelopaeus
-Pelopid
-Pelopidae
-Peloponnesian
-Pelops
-peloria
-pelorian
-peloriate
-peloric
-pelorism
-pelorization
-pelorize
-pelorus
-pelota
-pelotherapy
-peloton
-pelt
-pelta
-Peltandra
-peltast
-peltate
-peltated
-peltately
-peltatifid
-peltation
-peltatodigitate
-pelter
-pelterer
-peltiferous
-peltifolious
-peltiform
-Peltigera
-Peltigeraceae
-peltigerine
-peltigerous
-peltinerved
-pelting
-peltingly
-peltless
-peltmonger
-Peltogaster
-peltry
-pelu
-peludo
-Pelusios
-pelveoperitonitis
-pelves
-Pelvetia
-pelvic
-pelviform
-pelvigraph
-pelvigraphy
-pelvimeter
-pelvimetry
-pelviolithotomy
-pelvioperitonitis
-pelvioplasty
-pelvioradiography
-pelvioscopy
-pelviotomy
-pelviperitonitis
-pelvirectal
-pelvis
-pelvisacral
-pelvisternal
-pelvisternum
-pelycogram
-pelycography
-pelycology
-pelycometer
-pelycometry
-pelycosaur
-Pelycosauria
-pelycosaurian
-pembina
-Pembroke
-pemican
-pemmican
-pemmicanization
-pemmicanize
-pemphigoid
-pemphigous
-pemphigus
-pen
-penacute
-Penaea
-Penaeaceae
-penaeaceous
-penal
-penalist
-penality
-penalizable
-penalization
-penalize
-penally
-penalty
-penance
-penanceless
-penang
-penannular
-penates
-penbard
-pencatite
-pence
-pencel
-penceless
-penchant
-penchute
-pencil
-penciled
-penciler
-penciliform
-penciling
-pencilled
-penciller
-pencillike
-pencilling
-pencilry
-pencilwood
-pencraft
-pend
-penda
-pendant
-pendanted
-pendanting
-pendantlike
-pendecagon
-pendeloque
-pendency
-pendent
-pendentive
-pendently
-pendicle
-pendicler
-pending
-pendle
-pendom
-pendragon
-pendragonish
-pendragonship
-pendulant
-pendular
-pendulate
-pendulation
-pendule
-penduline
-pendulosity
-pendulous
-pendulously
-pendulousness
-pendulum
-pendulumlike
-Penelope
-Penelopean
-Penelophon
-Penelopinae
-penelopine
-peneplain
-peneplanation
-peneplane
-peneseismic
-penetrability
-penetrable
-penetrableness
-penetrably
-penetral
-penetralia
-penetralian
-penetrance
-penetrancy
-penetrant
-penetrate
-penetrating
-penetratingly
-penetratingness
-penetration
-penetrative
-penetratively
-penetrativeness
-penetrativity
-penetrator
-penetrology
-penetrometer
-penfieldite
-penfold
-penful
-penghulu
-pengo
-penguin
-penguinery
-penhead
-penholder
-penial
-penicillate
-penicillated
-penicillately
-penicillation
-penicilliform
-penicillin
-Penicillium
-penide
-penile
-peninsula
-peninsular
-peninsularism
-peninsularity
-peninsulate
-penintime
-peninvariant
-penis
-penistone
-penitence
-penitencer
-penitent
-Penitentes
-penitential
-penitentially
-penitentiary
-penitentiaryship
-penitently
-penk
-penkeeper
-penknife
-penlike
-penmaker
-penmaking
-penman
-penmanship
-penmaster
-penna
-pennaceous
-Pennacook
-pennae
-pennage
-Pennales
-pennant
-Pennaria
-Pennariidae
-Pennatae
-pennate
-pennated
-pennatifid
-pennatilobate
-pennatipartite
-pennatisect
-pennatisected
-Pennatula
-Pennatulacea
-pennatulacean
-pennatulaceous
-pennatularian
-pennatulid
-Pennatulidae
-pennatuloid
-penneech
-penneeck
-penner
-pennet
-penni
-pennia
-pennied
-penniferous
-penniform
-pennigerous
-penniless
-pennilessly
-pennilessness
-pennill
-penninervate
-penninerved
-penning
-penninite
-pennipotent
-Pennisetum
-penniveined
-pennon
-pennoned
-pennopluma
-pennoplume
-pennorth
-Pennsylvania
-Pennsylvanian
-Penny
-penny
-pennybird
-pennycress
-pennyearth
-pennyflower
-pennyhole
-pennyleaf
-pennyrot
-pennyroyal
-pennysiller
-pennystone
-pennyweight
-pennywinkle
-pennywort
-pennyworth
-Penobscot
-penologic
-penological
-penologist
-penology
-penorcon
-penrack
-penroseite
-Pensacola
-penscript
-penseful
-pensefulness
-penship
-pensile
-pensileness
-pensility
-pension
-pensionable
-pensionably
-pensionary
-pensioner
-pensionership
-pensionless
-pensive
-pensived
-pensively
-pensiveness
-penster
-penstick
-penstock
-pensum
-pensy
-pent
-penta
-pentabasic
-pentabromide
-pentacapsular
-pentacarbon
-pentacarbonyl
-pentacarpellary
-pentace
-pentacetate
-pentachenium
-pentachloride
-pentachord
-pentachromic
-pentacid
-pentacle
-pentacoccous
-pentacontane
-pentacosane
-Pentacrinidae
-pentacrinite
-pentacrinoid
-Pentacrinus
-pentacron
-pentacrostic
-pentactinal
-pentactine
-pentacular
-pentacyanic
-pentacyclic
-pentad
-pentadactyl
-Pentadactyla
-pentadactylate
-pentadactyle
-pentadactylism
-pentadactyloid
-pentadecagon
-pentadecahydrate
-pentadecahydrated
-pentadecane
-pentadecatoic
-pentadecoic
-pentadecyl
-pentadecylic
-pentadelphous
-pentadicity
-pentadiene
-pentadodecahedron
-pentadrachm
-pentadrachma
-pentaerythrite
-pentaerythritol
-pentafid
-pentafluoride
-pentagamist
-pentaglossal
-pentaglot
-pentaglottical
-pentagon
-pentagonal
-pentagonally
-pentagonohedron
-pentagonoid
-pentagram
-pentagrammatic
-pentagyn
-Pentagynia
-pentagynian
-pentagynous
-pentahalide
-pentahedral
-pentahedrical
-pentahedroid
-pentahedron
-pentahedrous
-pentahexahedral
-pentahexahedron
-pentahydrate
-pentahydrated
-pentahydric
-pentahydroxy
-pentail
-pentaiodide
-pentalobate
-pentalogue
-pentalogy
-pentalpha
-Pentamera
-pentameral
-pentameran
-pentamerid
-Pentameridae
-pentamerism
-pentameroid
-pentamerous
-Pentamerus
-pentameter
-pentamethylene
-pentamethylenediamine
-pentametrist
-pentametrize
-pentander
-Pentandria
-pentandrian
-pentandrous
-pentane
-pentanedione
-pentangle
-pentangular
-pentanitrate
-pentanoic
-pentanolide
-pentanone
-pentapetalous
-Pentaphylacaceae
-pentaphylacaceous
-Pentaphylax
-pentaphyllous
-pentaploid
-pentaploidic
-pentaploidy
-pentapody
-pentapolis
-pentapolitan
-pentapterous
-pentaptote
-pentaptych
-pentaquine
-pentarch
-pentarchical
-pentarchy
-pentasepalous
-pentasilicate
-pentaspermous
-pentaspheric
-pentaspherical
-pentastich
-pentastichous
-pentastichy
-pentastome
-Pentastomida
-pentastomoid
-pentastomous
-Pentastomum
-pentastyle
-pentastylos
-pentasulphide
-pentasyllabic
-pentasyllabism
-pentasyllable
-Pentateuch
-Pentateuchal
-pentateuchal
-pentathionate
-pentathionic
-pentathlete
-pentathlon
-pentathlos
-pentatomic
-pentatomid
-Pentatomidae
-Pentatomoidea
-pentatone
-pentatonic
-pentatriacontane
-pentavalence
-pentavalency
-pentavalent
-penteconter
-pentecontoglossal
-Pentecost
-Pentecostal
-pentecostal
-pentecostalism
-pentecostalist
-pentecostarion
-pentecoster
-pentecostys
-Pentelic
-Pentelican
-pentene
-penteteric
-penthemimer
-penthemimeral
-penthemimeris
-Penthestes
-penthiophen
-penthiophene
-Penthoraceae
-Penthorum
-penthouse
-penthouselike
-penthrit
-penthrite
-pentimento
-pentine
-pentiodide
-pentit
-pentite
-pentitol
-pentlandite
-pentobarbital
-pentode
-pentoic
-pentol
-pentosan
-pentosane
-pentose
-pentoside
-pentosuria
-pentoxide
-pentremital
-pentremite
-Pentremites
-Pentremitidae
-pentrit
-pentrite
-pentrough
-Pentstemon
-pentstock
-penttail
-pentyl
-pentylene
-pentylic
-pentylidene
-pentyne
-Pentzia
-penuchi
-penult
-penultima
-penultimate
-penultimatum
-penumbra
-penumbrae
-penumbral
-penumbrous
-penurious
-penuriously
-penuriousness
-penury
-Penutian
-penwiper
-penwoman
-penwomanship
-penworker
-penwright
-peon
-peonage
-peonism
-peony
-people
-peopledom
-peoplehood
-peopleize
-peopleless
-peopler
-peoplet
-peoplish
-Peoria
-Peorian
-peotomy
-pep
-peperine
-peperino
-Peperomia
-pepful
-Pephredo
-pepinella
-pepino
-peplos
-peplosed
-peplum
-peplus
-pepo
-peponida
-peponium
-pepper
-pepperbox
-peppercorn
-peppercornish
-peppercorny
-pepperer
-peppergrass
-pepperidge
-pepperily
-pepperiness
-pepperish
-pepperishly
-peppermint
-pepperoni
-pepperproof
-pepperroot
-pepperweed
-pepperwood
-pepperwort
-peppery
-peppily
-peppin
-peppiness
-peppy
-pepsin
-pepsinate
-pepsinhydrochloric
-pepsiniferous
-pepsinogen
-pepsinogenic
-pepsinogenous
-pepsis
-peptic
-peptical
-pepticity
-peptidase
-peptide
-peptizable
-peptization
-peptize
-peptizer
-peptogaster
-peptogenic
-peptogenous
-peptogeny
-peptohydrochloric
-peptolysis
-peptolytic
-peptonaemia
-peptonate
-peptone
-peptonemia
-peptonic
-peptonization
-peptonize
-peptonizer
-peptonoid
-peptonuria
-peptotoxine
-Pepysian
-Pequot
-Per
-per
-Peracarida
-peracephalus
-peracetate
-peracetic
-peracid
-peracidite
-peract
-peracute
-peradventure
-peragrate
-peragration
-Perakim
-peramble
-perambulant
-perambulate
-perambulation
-perambulator
-perambulatory
-Perameles
-Peramelidae
-perameline
-perameloid
-Peramium
-Peratae
-Perates
-perbend
-perborate
-perborax
-perbromide
-Perca
-percale
-percaline
-percarbide
-percarbonate
-percarbonic
-perceivability
-perceivable
-perceivableness
-perceivably
-perceivance
-perceivancy
-perceive
-perceivedly
-perceivedness
-perceiver
-perceiving
-perceivingness
-percent
-percentable
-percentably
-percentage
-percentaged
-percental
-percentile
-percentual
-percept
-perceptibility
-perceptible
-perceptibleness
-perceptibly
-perception
-perceptional
-perceptionalism
-perceptionism
-perceptive
-perceptively
-perceptiveness
-perceptivity
-perceptual
-perceptually
-Percesoces
-percesocine
-Perceval
-perch
-percha
-perchable
-perchance
-percher
-Percheron
-perchlorate
-perchlorethane
-perchlorethylene
-perchloric
-perchloride
-perchlorinate
-perchlorination
-perchloroethane
-perchloroethylene
-perchromate
-perchromic
-percid
-Percidae
-perciform
-Perciformes
-percipience
-percipiency
-percipient
-Percival
-perclose
-percnosome
-percoct
-percoid
-Percoidea
-percoidean
-percolable
-percolate
-percolation
-percolative
-percolator
-percomorph
-Percomorphi
-percomorphous
-percompound
-percontation
-percontatorial
-percribrate
-percribration
-percrystallization
-perculsion
-perculsive
-percur
-percurration
-percurrent
-percursory
-percuss
-percussion
-percussional
-percussioner
-percussionist
-percussionize
-percussive
-percussively
-percussiveness
-percussor
-percutaneous
-percutaneously
-percutient
-Percy
-percylite
-Perdicinae
-perdicine
-perdition
-perditionable
-Perdix
-perdricide
-perdu
-perduellion
-perdurability
-perdurable
-perdurableness
-perdurably
-perdurance
-perdurant
-perdure
-perduring
-perduringly
-Perean
-peregrin
-peregrina
-peregrinate
-peregrination
-peregrinator
-peregrinatory
-peregrine
-peregrinity
-peregrinoid
-pereion
-pereiopod
-pereira
-pereirine
-peremptorily
-peremptoriness
-peremptory
-perendinant
-perendinate
-perendination
-perendure
-perennate
-perennation
-perennial
-perenniality
-perennialize
-perennially
-perennibranch
-Perennibranchiata
-perennibranchiate
-perequitate
-peres
-Pereskia
-perezone
-perfect
-perfectation
-perfected
-perfectedly
-perfecter
-perfecti
-perfectibilian
-perfectibilism
-perfectibilist
-perfectibilitarian
-perfectibility
-perfectible
-perfecting
-perfection
-perfectionate
-perfectionation
-perfectionator
-perfectioner
-perfectionism
-perfectionist
-perfectionistic
-perfectionize
-perfectionizement
-perfectionizer
-perfectionment
-perfectism
-perfectist
-perfective
-perfectively
-perfectiveness
-perfectivity
-perfectivize
-perfectly
-perfectness
-perfecto
-perfector
-perfectuation
-perfervent
-perfervid
-perfervidity
-perfervidly
-perfervidness
-perfervor
-perfervour
-perfidious
-perfidiously
-perfidiousness
-perfidy
-perfilograph
-perflate
-perflation
-perfluent
-perfoliate
-perfoliation
-perforable
-perforant
-Perforata
-perforate
-perforated
-perforation
-perforationproof
-perforative
-perforator
-perforatorium
-perforatory
-perforce
-perforcedly
-perform
-performable
-performance
-performant
-performative
-performer
-perfrication
-perfumatory
-perfume
-perfumed
-perfumeless
-perfumer
-perfumeress
-perfumery
-perfumy
-perfunctionary
-perfunctorily
-perfunctoriness
-perfunctorious
-perfunctoriously
-perfunctorize
-perfunctory
-perfuncturate
-perfusate
-perfuse
-perfusion
-perfusive
-Pergamene
-pergameneous
-Pergamenian
-pergamentaceous
-Pergamic
-pergamyn
-pergola
-perhalide
-perhalogen
-perhaps
-perhazard
-perhorresce
-perhydroanthracene
-perhydrogenate
-perhydrogenation
-perhydrogenize
-peri
-periacinal
-periacinous
-periactus
-periadenitis
-periamygdalitis
-perianal
-periangiocholitis
-periangioma
-periangitis
-perianth
-perianthial
-perianthium
-periaortic
-periaortitis
-periapical
-periappendicitis
-periappendicular
-periapt
-Periarctic
-periareum
-periarterial
-periarteritis
-periarthric
-periarthritis
-periarticular
-periaster
-periastral
-periastron
-periastrum
-periatrial
-periauricular
-periaxial
-periaxillary
-periaxonal
-periblast
-periblastic
-periblastula
-periblem
-peribolos
-peribolus
-peribranchial
-peribronchial
-peribronchiolar
-peribronchiolitis
-peribronchitis
-peribulbar
-peribursal
-pericaecal
-pericaecitis
-pericanalicular
-pericapsular
-pericardia
-pericardiac
-pericardiacophrenic
-pericardial
-pericardicentesis
-pericardiectomy
-pericardiocentesis
-pericardiolysis
-pericardiomediastinitis
-pericardiophrenic
-pericardiopleural
-pericardiorrhaphy
-pericardiosymphysis
-pericardiotomy
-pericarditic
-pericarditis
-pericardium
-pericardotomy
-pericarp
-pericarpial
-pericarpic
-pericarpium
-pericarpoidal
-pericecal
-pericecitis
-pericellular
-pericemental
-pericementitis
-pericementoclasia
-pericementum
-pericenter
-pericentral
-pericentric
-pericephalic
-pericerebral
-perichaete
-perichaetial
-perichaetium
-perichete
-pericholangitis
-pericholecystitis
-perichondral
-perichondrial
-perichondritis
-perichondrium
-perichord
-perichordal
-perichoresis
-perichorioidal
-perichoroidal
-perichylous
-pericladium
-periclase
-periclasia
-periclasite
-periclaustral
-Periclean
-Pericles
-periclinal
-periclinally
-pericline
-periclinium
-periclitate
-periclitation
-pericolitis
-pericolpitis
-periconchal
-periconchitis
-pericopal
-pericope
-pericopic
-pericorneal
-pericowperitis
-pericoxitis
-pericranial
-pericranitis
-pericranium
-pericristate
-Pericu
-periculant
-pericycle
-pericycloid
-pericyclone
-pericyclonic
-pericystic
-pericystitis
-pericystium
-pericytial
-peridendritic
-peridental
-peridentium
-peridentoclasia
-periderm
-peridermal
-peridermic
-Peridermium
-peridesm
-peridesmic
-peridesmitis
-peridesmium
-peridial
-peridiastole
-peridiastolic
-perididymis
-perididymitis
-peridiiform
-Peridineae
-Peridiniaceae
-peridiniaceous
-peridinial
-Peridiniales
-peridinian
-peridinid
-Peridinidae
-Peridinieae
-Peridiniidae
-Peridinium
-peridiole
-peridiolum
-peridium
-peridot
-peridotic
-peridotite
-peridotitic
-periductal
-periegesis
-periegetic
-perielesis
-periencephalitis
-perienteric
-perienteritis
-perienteron
-periependymal
-periesophageal
-periesophagitis
-perifistular
-perifoliary
-perifollicular
-perifolliculitis
-perigangliitis
-periganglionic
-perigastric
-perigastritis
-perigastrula
-perigastrular
-perigastrulation
-perigeal
-perigee
-perigemmal
-perigenesis
-perigenital
-perigeum
-periglandular
-perigloea
-periglottic
-periglottis
-perignathic
-perigon
-perigonadial
-perigonal
-perigone
-perigonial
-perigonium
-perigraph
-perigraphic
-perigynial
-perigynium
-perigynous
-perigyny
-perihelial
-perihelian
-perihelion
-perihelium
-perihepatic
-perihepatitis
-perihermenial
-perihernial
-perihysteric
-perijejunitis
-perijove
-perikaryon
-perikronion
-peril
-perilabyrinth
-perilabyrinthitis
-perilaryngeal
-perilaryngitis
-perilenticular
-periligamentous
-Perilla
-perilless
-perilobar
-perilous
-perilously
-perilousness
-perilsome
-perilymph
-perilymphangial
-perilymphangitis
-perilymphatic
-perimartium
-perimastitis
-perimedullary
-perimeningitis
-perimeter
-perimeterless
-perimetral
-perimetric
-perimetrical
-perimetrically
-perimetritic
-perimetritis
-perimetrium
-perimetry
-perimorph
-perimorphic
-perimorphism
-perimorphous
-perimyelitis
-perimysial
-perimysium
-perine
-perineal
-perineocele
-perineoplastic
-perineoplasty
-perineorrhaphy
-perineoscrotal
-perineostomy
-perineosynthesis
-perineotomy
-perineovaginal
-perineovulvar
-perinephral
-perinephrial
-perinephric
-perinephritic
-perinephritis
-perinephrium
-perineptunium
-perineum
-perineural
-perineurial
-perineuritis
-perineurium
-perinium
-perinuclear
-periocular
-period
-periodate
-periodic
-periodical
-periodicalism
-periodicalist
-periodicalize
-periodically
-periodicalness
-periodicity
-periodide
-periodize
-periodogram
-periodograph
-periodology
-periodontal
-periodontia
-periodontic
-periodontist
-periodontitis
-periodontium
-periodontoclasia
-periodontologist
-periodontology
-periodontum
-periodoscope
-perioeci
-perioecians
-perioecic
-perioecid
-perioecus
-perioesophageal
-perioikoi
-periomphalic
-perionychia
-perionychium
-perionyx
-perionyxis
-perioophoritis
-periophthalmic
-periophthalmitis
-periople
-perioplic
-perioptic
-perioptometry
-perioral
-periorbit
-periorbita
-periorbital
-periorchitis
-periost
-periostea
-periosteal
-periosteitis
-periosteoalveolar
-periosteoma
-periosteomedullitis
-periosteomyelitis
-periosteophyte
-periosteorrhaphy
-periosteotome
-periosteotomy
-periosteous
-periosteum
-periostitic
-periostitis
-periostoma
-periostosis
-periostotomy
-periostracal
-periostracum
-periotic
-periovular
-peripachymeningitis
-peripancreatic
-peripancreatitis
-peripapillary
-Peripatetic
-peripatetic
-peripatetical
-peripatetically
-peripateticate
-Peripateticism
-Peripatidae
-Peripatidea
-peripatize
-peripatoid
-Peripatopsidae
-Peripatopsis
-Peripatus
-peripenial
-peripericarditis
-peripetalous
-peripetasma
-peripeteia
-peripetia
-peripety
-periphacitis
-peripharyngeal
-peripherad
-peripheral
-peripherally
-peripherial
-peripheric
-peripherical
-peripherically
-peripherocentral
-peripheroceptor
-peripheromittor
-peripheroneural
-peripherophose
-periphery
-periphlebitic
-periphlebitis
-periphractic
-periphrase
-periphrases
-periphrasis
-periphrastic
-periphrastical
-periphrastically
-periphraxy
-periphyllum
-periphyse
-periphysis
-Periplaneta
-periplasm
-periplast
-periplastic
-periplegmatic
-peripleural
-peripleuritis
-Periploca
-periplus
-peripneumonia
-peripneumonic
-peripneumony
-peripneustic
-peripolar
-peripolygonal
-periportal
-periproct
-periproctal
-periproctitis
-periproctous
-periprostatic
-periprostatitis
-peripteral
-peripterous
-periptery
-peripylephlebitis
-peripyloric
-perique
-perirectal
-perirectitis
-perirenal
-perisalpingitis
-perisarc
-perisarcal
-perisarcous
-perisaturnium
-periscian
-periscians
-periscii
-perisclerotic
-periscopal
-periscope
-periscopic
-periscopical
-periscopism
-perish
-perishability
-perishable
-perishableness
-perishably
-perished
-perishing
-perishingly
-perishless
-perishment
-perisigmoiditis
-perisinuitis
-perisinuous
-perisinusitis
-perisoma
-perisomal
-perisomatic
-perisome
-perisomial
-perisperm
-perispermal
-perispermatitis
-perispermic
-perisphere
-perispheric
-perispherical
-perisphinctean
-Perisphinctes
-Perisphinctidae
-perisphinctoid
-perisplanchnic
-perisplanchnitis
-perisplenetic
-perisplenic
-perisplenitis
-perispome
-perispomenon
-perispondylic
-perispondylitis
-perispore
-Perisporiaceae
-perisporiaceous
-Perisporiales
-perissad
-perissodactyl
-Perissodactyla
-perissodactylate
-perissodactyle
-perissodactylic
-perissodactylism
-perissodactylous
-perissologic
-perissological
-perissology
-perissosyllabic
-peristalith
-peristalsis
-peristaltic
-peristaltically
-peristaphyline
-peristaphylitis
-peristele
-peristerite
-peristeromorph
-Peristeromorphae
-peristeromorphic
-peristeromorphous
-peristeronic
-peristerophily
-peristeropod
-peristeropodan
-peristeropode
-Peristeropodes
-peristeropodous
-peristethium
-peristole
-peristoma
-peristomal
-peristomatic
-peristome
-peristomial
-peristomium
-peristrephic
-peristrephical
-peristrumitis
-peristrumous
-peristylar
-peristyle
-peristylium
-peristylos
-peristylum
-perisynovial
-perisystole
-perisystolic
-perit
-perite
-peritectic
-peritendineum
-peritenon
-perithece
-perithecial
-perithecium
-perithelial
-perithelioma
-perithelium
-perithoracic
-perithyreoiditis
-perithyroiditis
-peritomize
-peritomous
-peritomy
-peritoneal
-peritonealgia
-peritoneally
-peritoneocentesis
-peritoneoclysis
-peritoneomuscular
-peritoneopathy
-peritoneopericardial
-peritoneopexy
-peritoneoplasty
-peritoneoscope
-peritoneoscopy
-peritoneotomy
-peritoneum
-peritonism
-peritonital
-peritonitic
-peritonitis
-peritonsillar
-peritonsillitis
-peritracheal
-peritrema
-peritrematous
-peritreme
-peritrich
-Peritricha
-peritrichan
-peritrichic
-peritrichous
-peritrichously
-peritroch
-peritrochal
-peritrochanteric
-peritrochium
-peritrochoid
-peritropal
-peritrophic
-peritropous
-perityphlic
-perityphlitic
-perityphlitis
-periumbilical
-periungual
-periuranium
-periureteric
-periureteritis
-periurethral
-periurethritis
-periuterine
-periuvular
-perivaginal
-perivaginitis
-perivascular
-perivasculitis
-perivenous
-perivertebral
-perivesical
-perivisceral
-perivisceritis
-perivitellin
-perivitelline
-periwig
-periwigpated
-periwinkle
-periwinkled
-periwinkler
-perizonium
-perjink
-perjinkety
-perjinkities
-perjinkly
-perjure
-perjured
-perjuredly
-perjuredness
-perjurer
-perjuress
-perjurious
-perjuriously
-perjuriousness
-perjurous
-perjury
-perjurymonger
-perjurymongering
-perk
-perkily
-Perkin
-perkin
-perkiness
-perking
-perkingly
-perkish
-perknite
-perky
-Perla
-perlaceous
-Perlaria
-perle
-perlection
-perlid
-Perlidae
-perligenous
-perlingual
-perlingually
-perlite
-perlitic
-perloir
-perlustrate
-perlustration
-perlustrator
-perm
-permafrost
-Permalloy
-permalloy
-permanence
-permanency
-permanent
-permanently
-permanentness
-permanganate
-permanganic
-permansive
-permeability
-permeable
-permeableness
-permeably
-permeameter
-permeance
-permeant
-permeate
-permeation
-permeative
-permeator
-Permiak
-Permian
-permillage
-permirific
-permissibility
-permissible
-permissibleness
-permissibly
-permission
-permissioned
-permissive
-permissively
-permissiveness
-permissory
-permit
-permittable
-permitted
-permittedly
-permittee
-permitter
-permittivity
-permixture
-Permocarboniferous
-permonosulphuric
-permoralize
-permutability
-permutable
-permutableness
-permutably
-permutate
-permutation
-permutational
-permutationist
-permutator
-permutatorial
-permutatory
-permute
-permuter
-pern
-pernancy
-pernasal
-pernavigate
-Pernettia
-pernicious
-perniciously
-perniciousness
-pernicketiness
-pernickety
-pernine
-Pernis
-pernitrate
-pernitric
-pernoctation
-pernor
-pernyi
-peroba
-perobrachius
-perocephalus
-perochirus
-perodactylus
-Perodipus
-Perognathinae
-Perognathus
-Peromedusae
-Peromela
-peromelous
-peromelus
-Peromyscus
-peronate
-peroneal
-peroneocalcaneal
-peroneotarsal
-peroneotibial
-peronial
-peronium
-Peronospora
-Peronosporaceae
-peronosporaceous
-Peronosporales
-peropod
-Peropoda
-peropodous
-peropus
-peroral
-perorally
-perorate
-peroration
-perorational
-perorative
-perorator
-peroratorical
-peroratorically
-peroratory
-perosis
-perosmate
-perosmic
-perosomus
-perotic
-perovskite
-peroxidase
-peroxidate
-peroxidation
-peroxide
-peroxidic
-peroxidize
-peroxidizement
-peroxy
-peroxyl
-perozonid
-perozonide
-perpend
-perpendicular
-perpendicularity
-perpendicularly
-perpera
-perperfect
-perpetrable
-perpetrate
-perpetration
-perpetrator
-perpetratress
-perpetratrix
-perpetuable
-perpetual
-perpetualism
-perpetualist
-perpetuality
-perpetually
-perpetualness
-perpetuana
-perpetuance
-perpetuant
-perpetuate
-perpetuation
-perpetuator
-perpetuity
-perplantar
-perplex
-perplexable
-perplexed
-perplexedly
-perplexedness
-perplexer
-perplexing
-perplexingly
-perplexity
-perplexment
-perplication
-perquadrat
-perquest
-perquisite
-perquisition
-perquisitor
-perradial
-perradially
-perradiate
-perradius
-perridiculous
-perrier
-Perrinist
-perron
-perruche
-perrukery
-perruthenate
-perruthenic
-Perry
-perry
-perryman
-Persae
-persalt
-perscent
-perscribe
-perscrutate
-perscrutation
-perscrutator
-perse
-Persea
-persecute
-persecutee
-persecuting
-persecutingly
-persecution
-persecutional
-persecutive
-persecutiveness
-persecutor
-persecutory
-persecutress
-persecutrix
-Perseid
-perseite
-perseitol
-perseity
-persentiscency
-Persephassa
-Persepolitan
-perseverance
-perseverant
-perseverate
-perseveration
-persevere
-persevering
-perseveringly
-Persian
-Persianist
-Persianization
-Persianize
-Persic
-Persicaria
-persicary
-Persicize
-persico
-persicot
-persienne
-persiennes
-persiflage
-persiflate
-persilicic
-persimmon
-Persis
-persis
-Persism
-persist
-persistence
-persistency
-persistent
-persistently
-persister
-persisting
-persistingly
-persistive
-persistively
-persistiveness
-persnickety
-person
-persona
-personable
-personableness
-personably
-personage
-personal
-personalia
-personalism
-personalist
-personalistic
-personality
-personalization
-personalize
-personally
-personalness
-personalty
-personate
-personately
-personating
-personation
-personative
-personator
-personed
-personeity
-personifiable
-personifiant
-personification
-personificative
-personificator
-personifier
-personify
-personization
-personize
-personnel
-personship
-perspection
-perspective
-perspectived
-perspectiveless
-perspectively
-perspectivity
-perspectograph
-perspectometer
-perspicacious
-perspicaciously
-perspicaciousness
-perspicacity
-perspicuity
-perspicuous
-perspicuously
-perspicuousness
-perspirability
-perspirable
-perspirant
-perspirate
-perspiration
-perspirative
-perspiratory
-perspire
-perspiringly
-perspiry
-perstringe
-perstringement
-persuadability
-persuadable
-persuadableness
-persuadably
-persuade
-persuaded
-persuadedly
-persuadedness
-persuader
-persuadingly
-persuasibility
-persuasible
-persuasibleness
-persuasibly
-persuasion
-persuasive
-persuasively
-persuasiveness
-persuasory
-persulphate
-persulphide
-persulphocyanate
-persulphocyanic
-persulphuric
-persymmetric
-persymmetrical
-pert
-pertain
-pertaining
-pertainment
-perten
-perthiocyanate
-perthiocyanic
-perthiotophyre
-perthite
-perthitic
-perthitically
-perthosite
-pertinacious
-pertinaciously
-pertinaciousness
-pertinacity
-pertinence
-pertinency
-pertinent
-pertinently
-pertinentness
-pertish
-pertly
-pertness
-perturb
-perturbability
-perturbable
-perturbance
-perturbancy
-perturbant
-perturbate
-perturbation
-perturbational
-perturbatious
-perturbative
-perturbator
-perturbatory
-perturbatress
-perturbatrix
-perturbed
-perturbedly
-perturbedness
-perturber
-perturbing
-perturbingly
-perturbment
-Pertusaria
-Pertusariaceae
-pertuse
-pertused
-pertusion
-pertussal
-pertussis
-perty
-Peru
-Perugian
-Peruginesque
-peruke
-perukeless
-perukier
-perukiership
-perula
-Perularia
-perulate
-perule
-Perun
-perusable
-perusal
-peruse
-peruser
-Peruvian
-Peruvianize
-pervade
-pervadence
-pervader
-pervading
-pervadingly
-pervadingness
-pervagate
-pervagation
-pervalvar
-pervasion
-pervasive
-pervasively
-pervasiveness
-perverse
-perversely
-perverseness
-perversion
-perversity
-perversive
-pervert
-perverted
-pervertedly
-pervertedness
-perverter
-pervertibility
-pervertible
-pervertibly
-pervertive
-perviability
-perviable
-pervicacious
-pervicaciously
-pervicaciousness
-pervicacity
-pervigilium
-pervious
-perviously
-perviousness
-pervulgate
-pervulgation
-perwitsky
-pes
-pesa
-Pesach
-pesade
-pesage
-Pesah
-peseta
-peshkar
-peshkash
-peshwa
-peshwaship
-peskily
-peskiness
-pesky
-peso
-pess
-pessary
-pessimal
-pessimism
-pessimist
-pessimistic
-pessimistically
-pessimize
-pessimum
-pessomancy
-pessoner
-pessular
-pessulus
-pest
-Pestalozzian
-Pestalozzianism
-peste
-pester
-pesterer
-pesteringly
-pesterment
-pesterous
-pestersome
-pestful
-pesthole
-pesthouse
-pesticidal
-pesticide
-pestiduct
-pestiferous
-pestiferously
-pestiferousness
-pestifugous
-pestify
-pestilence
-pestilenceweed
-pestilencewort
-pestilent
-pestilential
-pestilentially
-pestilentialness
-pestilently
-pestle
-pestological
-pestologist
-pestology
-pestproof
-pet
-petal
-petalage
-petaled
-Petalia
-petaliferous
-petaliform
-Petaliidae
-petaline
-petalism
-petalite
-petalled
-petalless
-petallike
-petalocerous
-petalodic
-petalodont
-petalodontid
-Petalodontidae
-petalodontoid
-Petalodus
-petalody
-petaloid
-petaloidal
-petaloideous
-petalomania
-petalon
-Petalostemon
-petalous
-petalwise
-petaly
-petard
-petardeer
-petardier
-petary
-Petasites
-petasos
-petasus
-petaurine
-petaurist
-Petaurista
-Petauristidae
-Petauroides
-Petaurus
-petchary
-petcock
-Pete
-pete
-peteca
-petechiae
-petechial
-petechiate
-peteman
-Peter
-peter
-Peterkin
-Peterloo
-peterman
-peternet
-petersham
-peterwort
-petful
-petiolar
-petiolary
-Petiolata
-petiolate
-petiolated
-petiole
-petioled
-Petioliventres
-petiolular
-petiolulate
-petiolule
-petiolus
-petit
-petite
-petiteness
-petitgrain
-petition
-petitionable
-petitional
-petitionarily
-petitionary
-petitionee
-petitioner
-petitionist
-petitionproof
-petitor
-petitory
-Petiveria
-Petiveriaceae
-petkin
-petling
-peto
-Petr
-Petrarchal
-Petrarchan
-Petrarchesque
-Petrarchian
-Petrarchianism
-Petrarchism
-Petrarchist
-Petrarchistic
-Petrarchistical
-Petrarchize
-petrary
-petre
-Petrea
-petrean
-petreity
-petrel
-petrescence
-petrescent
-Petricola
-Petricolidae
-petricolous
-petrie
-petrifaction
-petrifactive
-petrifiable
-petrific
-petrificant
-petrificate
-petrification
-petrified
-petrifier
-petrify
-Petrine
-Petrinism
-Petrinist
-Petrinize
-petrissage
-Petrobium
-Petrobrusian
-petrochemical
-petrochemistry
-Petrogale
-petrogenesis
-petrogenic
-petrogeny
-petroglyph
-petroglyphic
-petroglyphy
-petrograph
-petrographer
-petrographic
-petrographical
-petrographically
-petrography
-petrohyoid
-petrol
-petrolage
-petrolatum
-petrolean
-petrolene
-petroleous
-petroleum
-petrolic
-petroliferous
-petrolific
-petrolist
-petrolithic
-petrolization
-petrolize
-petrologic
-petrological
-petrologically
-petromastoid
-Petromyzon
-Petromyzonidae
-petromyzont
-Petromyzontes
-Petromyzontidae
-petromyzontoid
-petronel
-petronella
-petropharyngeal
-petrophilous
-petrosa
-petrosal
-Petroselinum
-petrosilex
-petrosiliceous
-petrosilicious
-petrosphenoid
-petrosphenoidal
-petrosphere
-petrosquamosal
-petrosquamous
-petrostearin
-petrostearine
-petrosum
-petrotympanic
-petrous
-petroxolin
-pettable
-petted
-pettedly
-pettedness
-petter
-pettichaps
-petticoat
-petticoated
-petticoaterie
-petticoatery
-petticoatism
-petticoatless
-petticoaty
-pettifog
-pettifogger
-pettifoggery
-pettifogging
-pettifogulize
-pettifogulizer
-pettily
-pettiness
-pettingly
-pettish
-pettitoes
-pettle
-petty
-pettyfog
-petulance
-petulancy
-petulant
-petulantly
-petune
-Petunia
-petuntse
-petwood
-petzite
-Peucedanum
-Peucetii
-peucites
-peuhl
-Peul
-Peumus
-Peutingerian
-pew
-pewage
-pewdom
-pewee
-pewfellow
-pewful
-pewholder
-pewing
-pewit
-pewless
-pewmate
-pewter
-pewterer
-pewterwort
-pewtery
-pewy
-Peyerian
-peyote
-peyotl
-peyton
-peytrel
-pezantic
-Peziza
-Pezizaceae
-pezizaceous
-pezizaeform
-Pezizales
-peziziform
-pezizoid
-pezograph
-Pezophaps
-Pfaffian
-pfeffernuss
-Pfeifferella
-pfennig
-pfui
-pfund
-Phaca
-Phacelia
-phacelite
-phacella
-Phacidiaceae
-Phacidiales
-phacitis
-phacoanaphylaxis
-phacocele
-phacochere
-phacocherine
-phacochoere
-phacochoerid
-phacochoerine
-phacochoeroid
-Phacochoerus
-phacocyst
-phacocystectomy
-phacocystitis
-phacoglaucoma
-phacoid
-phacoidal
-phacoidoscope
-phacolite
-phacolith
-phacolysis
-phacomalacia
-phacometer
-phacopid
-Phacopidae
-Phacops
-phacosclerosis
-phacoscope
-phacotherapy
-Phaeacian
-Phaedo
-phaeism
-phaenantherous
-phaenanthery
-phaenogam
-Phaenogamia
-phaenogamian
-phaenogamic
-phaenogamous
-phaenogenesis
-phaenogenetic
-phaenological
-phaenology
-phaenomenal
-phaenomenism
-phaenomenon
-phaenozygous
-phaeochrous
-Phaeodaria
-phaeodarian
-phaeophore
-Phaeophyceae
-phaeophycean
-phaeophyceous
-phaeophyll
-Phaeophyta
-phaeophytin
-phaeoplast
-Phaeosporales
-phaeospore
-Phaeosporeae
-phaeosporous
-Phaet
-Phaethon
-Phaethonic
-Phaethontes
-Phaethontic
-Phaethontidae
-Phaethusa
-phaeton
-phage
-phagedena
-phagedenic
-phagedenical
-phagedenous
-Phagineae
-phagocytable
-phagocytal
-phagocyte
-phagocyter
-phagocytic
-phagocytism
-phagocytize
-phagocytoblast
-phagocytolysis
-phagocytolytic
-phagocytose
-phagocytosis
-phagodynamometer
-phagolysis
-phagolytic
-phagomania
-phainolion
-Phainopepla
-Phajus
-Phalacrocoracidae
-phalacrocoracine
-Phalacrocorax
-phalacrosis
-Phalaecean
-Phalaecian
-Phalaenae
-Phalaenidae
-phalaenopsid
-Phalaenopsis
-phalangal
-phalange
-phalangeal
-phalangean
-phalanger
-Phalangeridae
-Phalangerinae
-phalangerine
-phalanges
-phalangette
-phalangian
-phalangic
-phalangid
-Phalangida
-phalangidan
-Phalangidea
-phalangidean
-Phalangides
-phalangiform
-Phalangigrada
-phalangigrade
-phalangigrady
-phalangiid
-Phalangiidae
-phalangist
-Phalangista
-Phalangistidae
-phalangistine
-phalangite
-phalangitic
-phalangitis
-Phalangium
-phalangologist
-phalangology
-phalansterial
-phalansterian
-phalansterianism
-phalansteric
-phalansterism
-phalansterist
-phalanstery
-phalanx
-phalanxed
-phalarica
-Phalaris
-Phalarism
-phalarope
-Phalaropodidae
-phalera
-phalerate
-phalerated
-Phaleucian
-Phallaceae
-phallaceous
-Phallales
-phallalgia
-phallaneurysm
-phallephoric
-phallic
-phallical
-phallicism
-phallicist
-phallin
-phallism
-phallist
-phallitis
-phallocrypsis
-phallodynia
-phalloid
-phalloncus
-phalloplasty
-phallorrhagia
-phallus
-Phanar
-Phanariot
-Phanariote
-phanatron
-phaneric
-phanerite
-Phanerocarpae
-Phanerocarpous
-Phanerocephala
-phanerocephalous
-phanerocodonic
-phanerocryst
-phanerocrystalline
-phanerogam
-Phanerogamia
-phanerogamian
-phanerogamic
-phanerogamous
-phanerogamy
-phanerogenetic
-phanerogenic
-Phaneroglossa
-phaneroglossal
-phaneroglossate
-phaneromania
-phaneromere
-phaneromerous
-phaneroscope
-phanerosis
-phanerozoic
-phanerozonate
-Phanerozonia
-phanic
-phano
-phansigar
-phantascope
-phantasia
-Phantasiast
-Phantasiastic
-phantasist
-phantasize
-phantasm
-phantasma
-phantasmagoria
-phantasmagorial
-phantasmagorially
-phantasmagorian
-phantasmagoric
-phantasmagorical
-phantasmagorist
-phantasmagory
-phantasmal
-phantasmalian
-phantasmality
-phantasmally
-phantasmascope
-phantasmata
-Phantasmatic
-phantasmatic
-phantasmatical
-phantasmatically
-phantasmatography
-phantasmic
-phantasmical
-phantasmically
-Phantasmist
-phantasmogenesis
-phantasmogenetic
-phantasmograph
-phantasmological
-phantasmology
-phantast
-phantasy
-phantom
-phantomatic
-phantomic
-phantomical
-phantomically
-Phantomist
-phantomize
-phantomizer
-phantomland
-phantomlike
-phantomnation
-phantomry
-phantomship
-phantomy
-phantoplex
-phantoscope
-Pharaoh
-Pharaonic
-Pharaonical
-Pharbitis
-phare
-Phareodus
-Pharian
-Pharisaean
-Pharisaic
-pharisaical
-pharisaically
-pharisaicalness
-Pharisaism
-Pharisaist
-Pharisean
-Pharisee
-pharisee
-Phariseeism
-pharmacal
-pharmaceutic
-pharmaceutical
-pharmaceutically
-pharmaceutics
-pharmaceutist
-pharmacic
-pharmacist
-pharmacite
-pharmacodiagnosis
-pharmacodynamic
-pharmacodynamical
-pharmacodynamics
-pharmacoendocrinology
-pharmacognosia
-pharmacognosis
-pharmacognosist
-pharmacognostical
-pharmacognostically
-pharmacognostics
-pharmacognosy
-pharmacography
-pharmacolite
-pharmacologia
-pharmacologic
-pharmacological
-pharmacologically
-pharmacologist
-pharmacology
-pharmacomania
-pharmacomaniac
-pharmacomaniacal
-pharmacometer
-pharmacopedia
-pharmacopedic
-pharmacopedics
-pharmacopeia
-pharmacopeial
-pharmacopeian
-pharmacophobia
-pharmacopoeia
-pharmacopoeial
-pharmacopoeian
-pharmacopoeist
-pharmacopolist
-pharmacoposia
-pharmacopsychology
-pharmacosiderite
-pharmacotherapy
-pharmacy
-pharmakos
-pharmic
-pharmuthi
-pharology
-Pharomacrus
-pharos
-Pharsalian
-pharyngal
-pharyngalgia
-pharyngalgic
-pharyngeal
-pharyngectomy
-pharyngemphraxis
-pharynges
-pharyngic
-pharyngismus
-pharyngitic
-pharyngitis
-pharyngoamygdalitis
-pharyngobranch
-pharyngobranchial
-pharyngobranchiate
-Pharyngobranchii
-pharyngocele
-pharyngoceratosis
-pharyngodynia
-pharyngoepiglottic
-pharyngoepiglottidean
-pharyngoesophageal
-pharyngoglossal
-pharyngoglossus
-pharyngognath
-Pharyngognathi
-pharyngognathous
-pharyngographic
-pharyngography
-pharyngokeratosis
-pharyngolaryngeal
-pharyngolaryngitis
-pharyngolith
-pharyngological
-pharyngology
-pharyngomaxillary
-pharyngomycosis
-pharyngonasal
-pharyngopalatine
-pharyngopalatinus
-pharyngoparalysis
-pharyngopathy
-pharyngoplasty
-pharyngoplegia
-pharyngoplegic
-pharyngoplegy
-pharyngopleural
-Pharyngopneusta
-pharyngopneustal
-pharyngorhinitis
-pharyngorhinoscopy
-pharyngoscleroma
-pharyngoscope
-pharyngoscopy
-pharyngospasm
-pharyngotherapy
-pharyngotomy
-pharyngotonsillitis
-pharyngotyphoid
-pharyngoxerosis
-pharynogotome
-pharynx
-Phascaceae
-phascaceous
-Phascogale
-Phascolarctinae
-Phascolarctos
-phascolome
-Phascolomyidae
-Phascolomys
-Phascolonus
-Phascum
-phase
-phaseal
-phaseless
-phaselin
-phasemeter
-phasemy
-Phaseolaceae
-phaseolin
-phaseolous
-phaseolunatin
-Phaseolus
-phaseometer
-phases
-Phasianella
-Phasianellidae
-phasianic
-phasianid
-Phasianidae
-Phasianinae
-phasianine
-phasianoid
-Phasianus
-phasic
-Phasiron
-phasis
-phasm
-phasma
-phasmatid
-Phasmatida
-Phasmatidae
-Phasmatodea
-phasmatoid
-Phasmatoidea
-phasmatrope
-phasmid
-Phasmida
-Phasmidae
-phasmoid
-phasogeneous
-phasotropy
-pheal
-pheasant
-pheasantry
-pheasantwood
-Phebe
-Phecda
-Phegopteris
-Pheidole
-phellandrene
-phellem
-Phellodendron
-phelloderm
-phellodermal
-phellogen
-phellogenetic
-phellogenic
-phellonic
-phelloplastic
-phelloplastics
-phelonion
-phemic
-Phemie
-phenacaine
-phenacetin
-phenaceturic
-phenacite
-Phenacodontidae
-Phenacodus
-phenacyl
-phenakism
-phenakistoscope
-Phenalgin
-phenanthrene
-phenanthridine
-phenanthridone
-phenanthrol
-phenanthroline
-phenarsine
-phenate
-phenazine
-phenazone
-phene
-phenegol
-phenene
-phenethyl
-phenetidine
-phenetole
-phengite
-phengitical
-phenic
-phenicate
-phenicious
-phenicopter
-phenin
-phenmiazine
-phenobarbital
-phenocoll
-phenocopy
-phenocryst
-phenocrystalline
-phenogenesis
-phenogenetic
-phenol
-phenolate
-phenolic
-phenolization
-phenolize
-phenological
-phenologically
-phenologist
-phenology
-phenoloid
-phenolphthalein
-phenolsulphonate
-phenolsulphonephthalein
-phenolsulphonic
-phenomena
-phenomenal
-phenomenalism
-phenomenalist
-phenomenalistic
-phenomenalistically
-phenomenality
-phenomenalization
-phenomenalize
-phenomenally
-phenomenic
-phenomenical
-phenomenism
-phenomenist
-phenomenistic
-phenomenize
-phenomenological
-phenomenologically
-phenomenology
-phenomenon
-phenoplast
-phenoplastic
-phenoquinone
-phenosafranine
-phenosal
-phenospermic
-phenospermy
-phenothiazine
-phenotype
-phenotypic
-phenotypical
-phenotypically
-phenoxazine
-phenoxid
-phenoxide
-phenozygous
-Pheny
-phenyl
-phenylacetaldehyde
-phenylacetamide
-phenylacetic
-phenylalanine
-phenylamide
-phenylamine
-phenylate
-phenylation
-phenylboric
-phenylcarbamic
-phenylcarbimide
-phenylene
-phenylenediamine
-phenylethylene
-phenylglycine
-phenylglycolic
-phenylglyoxylic
-phenylhydrazine
-phenylhydrazone
-phenylic
-phenylmethane
-pheon
-pheophyl
-pheophyll
-pheophytin
-Pherecratean
-Pherecratian
-Pherecratic
-Pherephatta
-pheretrer
-Pherkad
-Pherophatta
-Phersephatta
-Phersephoneia
-phew
-phi
-phial
-phiale
-phialful
-phialide
-phialine
-phiallike
-phialophore
-phialospore
-Phidiac
-Phidian
-Phigalian
-Phil
-Philadelphian
-Philadelphianism
-philadelphite
-Philadelphus
-philadelphy
-philalethist
-philamot
-Philander
-philander
-philanderer
-philanthid
-Philanthidae
-philanthrope
-philanthropian
-philanthropic
-philanthropical
-philanthropically
-philanthropinism
-philanthropinist
-Philanthropinum
-philanthropism
-philanthropist
-philanthropistic
-philanthropize
-philanthropy
-Philanthus
-philantomba
-philarchaist
-philaristocracy
-philatelic
-philatelical
-philatelically
-philatelism
-philatelist
-philatelistic
-philately
-Philathea
-philathletic
-philematology
-Philepitta
-Philepittidae
-Philesia
-Philetaerus
-philharmonic
-philhellene
-philhellenic
-philhellenism
-philhellenist
-philhippic
-philhymnic
-philiater
-Philip
-Philippa
-Philippan
-Philippe
-Philippian
-Philippic
-philippicize
-Philippine
-Philippines
-Philippism
-Philippist
-Philippistic
-Philippizate
-philippize
-philippizer
-philippus
-Philistia
-Philistian
-Philistine
-Philistinely
-Philistinian
-Philistinic
-Philistinish
-Philistinism
-Philistinize
-Phill
-philliloo
-Phillip
-phillipsine
-phillipsite
-Phillis
-Phillyrea
-phillyrin
-philobiblian
-philobiblic
-philobiblical
-philobiblist
-philobotanic
-philobotanist
-philobrutish
-philocalic
-philocalist
-philocaly
-philocathartic
-philocatholic
-philocomal
-Philoctetes
-philocubist
-philocynic
-philocynical
-philocynicism
-philocyny
-philodemic
-Philodendron
-philodespot
-philodestructiveness
-Philodina
-Philodinidae
-philodox
-philodoxer
-philodoxical
-philodramatic
-philodramatist
-philofelist
-philofelon
-philogarlic
-philogastric
-philogeant
-philogenitive
-philogenitiveness
-philograph
-philographic
-philogynaecic
-philogynist
-philogynous
-philogyny
-Philohela
-philohellenian
-philokleptic
-philoleucosis
-philologaster
-philologastry
-philologer
-philologian
-philologic
-philological
-philologically
-philologist
-philologistic
-philologize
-philologue
-philology
-Philomachus
-philomath
-philomathematic
-philomathematical
-philomathic
-philomathical
-philomathy
-philomel
-Philomela
-philomelanist
-philomuse
-philomusical
-philomystic
-philonatural
-philoneism
-Philonian
-Philonic
-Philonism
-Philonist
-philonium
-philonoist
-philopagan
-philopater
-philopatrian
-philopena
-philophilosophos
-philopig
-philoplutonic
-philopoet
-philopogon
-philopolemic
-philopolemical
-philopornist
-philoprogeneity
-philoprogenitive
-philoprogenitiveness
-philopterid
-Philopteridae
-philopublican
-philoradical
-philorchidaceous
-philornithic
-philorthodox
-philosoph
-philosophaster
-philosophastering
-philosophastry
-philosophedom
-philosopheme
-philosopher
-philosopheress
-philosophership
-philosophic
-philosophical
-philosophically
-philosophicalness
-philosophicide
-philosophicohistorical
-philosophicojuristic
-philosophicolegal
-philosophicoreligious
-philosophicotheological
-philosophism
-philosophist
-philosophister
-philosophistic
-philosophistical
-philosophization
-philosophize
-philosophizer
-philosophling
-philosophobia
-philosophocracy
-philosophuncule
-philosophunculist
-philosophy
-philotadpole
-philotechnic
-philotechnical
-philotechnist
-philothaumaturgic
-philotheism
-philotheist
-philotheistic
-philotheosophical
-philotherian
-philotherianism
-Philotria
-Philoxenian
-philoxygenous
-philozoic
-philozoist
-philozoonist
-philter
-philterer
-philterproof
-philtra
-philtrum
-Philydraceae
-philydraceous
-Philyra
-phimosed
-phimosis
-phimotic
-Phineas
-Phiomia
-Phiroze
-phit
-phiz
-phizes
-phizog
-phlebalgia
-phlebangioma
-phlebarteriectasia
-phlebarteriodialysis
-phlebectasia
-phlebectasis
-phlebectasy
-phlebectomy
-phlebectopia
-phlebectopy
-phlebemphraxis
-phlebenteric
-phlebenterism
-phlebitic
-phlebitis
-Phlebodium
-phlebogram
-phlebograph
-phlebographical
-phlebography
-phleboid
-phleboidal
-phlebolite
-phlebolith
-phlebolithiasis
-phlebolithic
-phlebolitic
-phlebological
-phlebology
-phlebometritis
-phlebopexy
-phleboplasty
-phleborrhage
-phleborrhagia
-phleborrhaphy
-phleborrhexis
-phlebosclerosis
-phlebosclerotic
-phlebostasia
-phlebostasis
-phlebostenosis
-phlebostrepsis
-phlebothrombosis
-phlebotome
-phlebotomic
-phlebotomical
-phlebotomically
-phlebotomist
-phlebotomization
-phlebotomize
-Phlebotomus
-phlebotomus
-phlebotomy
-Phlegethon
-Phlegethontal
-Phlegethontic
-phlegm
-phlegma
-phlegmagogue
-phlegmasia
-phlegmatic
-phlegmatical
-phlegmatically
-phlegmaticalness
-phlegmaticly
-phlegmaticness
-phlegmatism
-phlegmatist
-phlegmatous
-phlegmless
-phlegmon
-phlegmonic
-phlegmonoid
-phlegmonous
-phlegmy
-Phleum
-phlobaphene
-phlobatannin
-phloem
-phloeophagous
-phloeoterma
-phlogisma
-phlogistian
-phlogistic
-phlogistical
-phlogisticate
-phlogistication
-phlogiston
-phlogistonism
-phlogistonist
-phlogogenetic
-phlogogenic
-phlogogenous
-phlogopite
-phlogosed
-Phlomis
-phloretic
-phloroglucic
-phloroglucin
-phlorone
-phloxin
-pho
-phobiac
-phobic
-phobism
-phobist
-phobophobia
-Phobos
-phoby
-phoca
-phocacean
-phocaceous
-Phocaean
-Phocaena
-Phocaenina
-phocaenine
-phocal
-Phocean
-phocenate
-phocenic
-phocenin
-Phocian
-phocid
-Phocidae
-phociform
-Phocinae
-phocine
-phocodont
-Phocodontia
-phocodontic
-Phocoena
-phocoid
-phocomelia
-phocomelous
-phocomelus
-Phoebe
-phoebe
-Phoebean
-Phoenicaceae
-phoenicaceous
-Phoenicales
-phoenicean
-Phoenician
-Phoenicianism
-Phoenicid
-phoenicite
-Phoenicize
-phoenicochroite
-Phoenicopteridae
-Phoenicopteriformes
-phoenicopteroid
-Phoenicopteroideae
-phoenicopterous
-Phoenicopterus
-Phoeniculidae
-Phoeniculus
-phoenicurous
-phoenigm
-Phoenix
-phoenix
-phoenixity
-phoenixlike
-phoh
-pholad
-Pholadacea
-pholadian
-pholadid
-Pholadidae
-Pholadinea
-pholadoid
-Pholas
-pholcid
-Pholcidae
-pholcoid
-Pholcus
-pholido
-pholidolite
-pholidosis
-Pholidota
-pholidote
-Pholiota
-Phoma
-Phomopsis
-phon
-phonal
-phonasthenia
-phonate
-phonation
-phonatory
-phonautogram
-phonautograph
-phonautographic
-phonautographically
-phone
-phoneidoscope
-phoneidoscopic
-Phonelescope
-phoneme
-phonemic
-phonemics
-phonendoscope
-phonesis
-phonestheme
-phonetic
-phonetical
-phonetically
-phonetician
-phoneticism
-phoneticist
-phoneticization
-phoneticize
-phoneticogrammatical
-phoneticohieroglyphic
-phonetics
-phonetism
-phonetist
-phonetization
-phonetize
-phoniatrics
-phoniatry
-phonic
-phonics
-phonikon
-phonism
-phono
-phonocamptic
-phonocinematograph
-phonodeik
-phonodynamograph
-phonoglyph
-phonogram
-phonogramic
-phonogramically
-phonogrammatic
-phonogrammatical
-phonogrammic
-phonogrammically
-phonograph
-phonographer
-phonographic
-phonographical
-phonographically
-phonographist
-phonography
-phonolite
-phonolitic
-phonologer
-phonologic
-phonological
-phonologically
-phonologist
-phonology
-phonometer
-phonometric
-phonometry
-phonomimic
-phonomotor
-phonopathy
-phonophile
-phonophobia
-phonophone
-phonophore
-phonophoric
-phonophorous
-phonophote
-phonophotography
-phonophotoscope
-phonophotoscopic
-phonoplex
-phonoscope
-phonotelemeter
-phonotype
-phonotyper
-phonotypic
-phonotypical
-phonotypically
-phonotypist
-phonotypy
-phony
-phoo
-Phora
-Phoradendron
-phoranthium
-phoresis
-phoresy
-phoria
-phorid
-Phoridae
-phorminx
-Phormium
-phorology
-phorometer
-phorometric
-phorometry
-phorone
-phoronic
-phoronid
-Phoronida
-Phoronidea
-Phoronis
-phoronomia
-phoronomic
-phoronomically
-phoronomics
-phoronomy
-Phororhacidae
-Phororhacos
-phoroscope
-phorozooid
-phos
-phose
-phosgene
-phosgenic
-phosgenite
-phosis
-phosphagen
-phospham
-phosphamic
-phosphamide
-phosphamidic
-phosphammonium
-phosphatase
-phosphate
-phosphated
-phosphatemia
-phosphatese
-phosphatic
-phosphatide
-phosphation
-phosphatization
-phosphatize
-phosphaturia
-phosphaturic
-phosphene
-phosphenyl
-phosphide
-phosphinate
-phosphine
-phosphinic
-phosphite
-phospho
-phosphoaminolipide
-phosphocarnic
-phosphocreatine
-phosphoferrite
-phosphoglycerate
-phosphoglyceric
-phosphoglycoprotein
-phospholipide
-phospholipin
-phosphomolybdate
-phosphomolybdic
-phosphonate
-phosphonic
-phosphonium
-phosphophyllite
-phosphoprotein
-phosphor
-phosphorate
-phosphore
-phosphoreal
-phosphorent
-phosphoreous
-phosphoresce
-phosphorescence
-phosphorescent
-phosphorescently
-phosphoreted
-phosphorhidrosis
-phosphori
-phosphoric
-phosphorical
-phosphoriferous
-phosphorism
-phosphorite
-phosphoritic
-phosphorize
-phosphorogen
-phosphorogenic
-phosphorograph
-phosphorographic
-phosphorography
-phosphoroscope
-phosphorous
-phosphoruria
-phosphorus
-phosphoryl
-phosphorylase
-phosphorylation
-phosphosilicate
-phosphotartaric
-phosphotungstate
-phosphotungstic
-phosphowolframic
-phosphuranylite
-phosphuret
-phosphuria
-phosphyl
-phossy
-phot
-photaesthesia
-photaesthesis
-photaesthetic
-photal
-photalgia
-photechy
-photelectrograph
-photeolic
-photerythrous
-photesthesis
-photic
-photics
-Photinia
-Photinian
-Photinianism
-photism
-photistic
-photo
-photoactinic
-photoactivate
-photoactivation
-photoactive
-photoactivity
-photoaesthetic
-photoalbum
-photoalgraphy
-photoanamorphosis
-photoaquatint
-Photobacterium
-photobathic
-photobiotic
-photobromide
-photocampsis
-photocatalysis
-photocatalyst
-photocatalytic
-photocatalyzer
-photocell
-photocellulose
-photoceptor
-photoceramic
-photoceramics
-photoceramist
-photochemic
-photochemical
-photochemically
-photochemigraphy
-photochemist
-photochemistry
-photochloride
-photochlorination
-photochromascope
-photochromatic
-photochrome
-photochromic
-photochromography
-photochromolithograph
-photochromoscope
-photochromotype
-photochromotypy
-photochromy
-photochronograph
-photochronographic
-photochronographical
-photochronographically
-photochronography
-photocollograph
-photocollographic
-photocollography
-photocollotype
-photocombustion
-photocompose
-photocomposition
-photoconductivity
-photocopier
-photocopy
-photocrayon
-photocurrent
-photodecomposition
-photodensitometer
-photodermatic
-photodermatism
-photodisintegration
-photodissociation
-photodrama
-photodramatic
-photodramatics
-photodramatist
-photodramaturgic
-photodramaturgy
-photodrome
-photodromy
-photodynamic
-photodynamical
-photodynamically
-photodynamics
-photodysphoria
-photoelastic
-photoelasticity
-photoelectric
-photoelectrical
-photoelectrically
-photoelectricity
-photoelectron
-photoelectrotype
-photoemission
-photoemissive
-photoengrave
-photoengraver
-photoengraving
-photoepinastic
-photoepinastically
-photoepinasty
-photoesthesis
-photoesthetic
-photoetch
-photoetcher
-photoetching
-photofilm
-photofinish
-photofinisher
-photofinishing
-photofloodlamp
-photogalvanograph
-photogalvanographic
-photogalvanography
-photogastroscope
-photogelatin
-photogen
-photogene
-photogenetic
-photogenic
-photogenically
-photogenous
-photoglyph
-photoglyphic
-photoglyphography
-photoglyphy
-photoglyptic
-photoglyptography
-photogram
-photogrammeter
-photogrammetric
-photogrammetrical
-photogrammetry
-photograph
-photographable
-photographee
-photographer
-photographeress
-photographess
-photographic
-photographical
-photographically
-photographist
-photographize
-photographometer
-photography
-photogravure
-photogravurist
-photogyric
-photohalide
-photoheliograph
-photoheliographic
-photoheliography
-photoheliometer
-photohyponastic
-photohyponastically
-photohyponasty
-photoimpression
-photoinactivation
-photoinduction
-photoinhibition
-photointaglio
-photoionization
-photoisomeric
-photoisomerization
-photokinesis
-photokinetic
-photolith
-photolitho
-photolithograph
-photolithographer
-photolithographic
-photolithography
-photologic
-photological
-photologist
-photology
-photoluminescence
-photoluminescent
-photolysis
-photolyte
-photolytic
-photoma
-photomacrograph
-photomagnetic
-photomagnetism
-photomap
-photomapper
-photomechanical
-photomechanically
-photometeor
-photometer
-photometric
-photometrical
-photometrically
-photometrician
-photometrist
-photometrograph
-photometry
-photomezzotype
-photomicrogram
-photomicrograph
-photomicrographer
-photomicrographic
-photomicrography
-photomicroscope
-photomicroscopic
-photomicroscopy
-photomontage
-photomorphosis
-photomural
-photon
-photonastic
-photonasty
-photonegative
-photonephograph
-photonephoscope
-photoneutron
-photonosus
-photooxidation
-photooxidative
-photopathic
-photopathy
-photoperceptive
-photoperimeter
-photoperiod
-photoperiodic
-photoperiodism
-photophane
-photophile
-photophilic
-photophilous
-photophily
-photophobe
-photophobia
-photophobic
-photophobous
-photophone
-photophonic
-photophony
-photophore
-photophoresis
-photophosphorescent
-photophygous
-photophysical
-photophysicist
-photopia
-photopic
-photopile
-photopitometer
-photoplay
-photoplayer
-photoplaywright
-photopography
-photopolarigraph
-photopolymerization
-photopositive
-photoprint
-photoprinter
-photoprinting
-photoprocess
-photoptometer
-photoradio
-photoradiogram
-photoreception
-photoreceptive
-photoreceptor
-photoregression
-photorelief
-photoresistance
-photosalt
-photosantonic
-photoscope
-photoscopic
-photoscopy
-photosculptural
-photosculpture
-photosensitive
-photosensitiveness
-photosensitivity
-photosensitization
-photosensitize
-photosensitizer
-photosensory
-photospectroheliograph
-photospectroscope
-photospectroscopic
-photospectroscopical
-photospectroscopy
-photosphere
-photospheric
-photostability
-photostable
-Photostat
-photostat
-photostationary
-photostereograph
-photosurveying
-photosyntax
-photosynthate
-photosynthesis
-photosynthesize
-photosynthetic
-photosynthetically
-photosynthometer
-phototachometer
-phototachometric
-phototachometrical
-phototachometry
-phototactic
-phototactically
-phototactism
-phototaxis
-phototaxy
-phototechnic
-phototelegraph
-phototelegraphic
-phototelegraphically
-phototelegraphy
-phototelephone
-phototelephony
-phototelescope
-phototelescopic
-phototheodolite
-phototherapeutic
-phototherapeutics
-phototherapic
-phototherapist
-phototherapy
-photothermic
-phototonic
-phototonus
-phototopographic
-phototopographical
-phototopography
-phototrichromatic
-phototrope
-phototrophic
-phototrophy
-phototropic
-phototropically
-phototropism
-phototropy
-phototube
-phototype
-phototypic
-phototypically
-phototypist
-phototypographic
-phototypography
-phototypy
-photovisual
-photovitrotype
-photovoltaic
-photoxylography
-photozinco
-photozincograph
-photozincographic
-photozincography
-photozincotype
-photozincotypy
-photuria
-Phractamphibia
-phragma
-Phragmidium
-Phragmites
-phragmocone
-phragmoconic
-Phragmocyttares
-phragmocyttarous
-phragmoid
-phragmosis
-phrasable
-phrasal
-phrasally
-phrase
-phraseable
-phraseless
-phrasemaker
-phrasemaking
-phraseman
-phrasemonger
-phrasemongering
-phrasemongery
-phraseogram
-phraseograph
-phraseographic
-phraseography
-phraseological
-phraseologically
-phraseologist
-phraseology
-phraser
-phrasify
-phrasiness
-phrasing
-phrasy
-phrator
-phratral
-phratria
-phratriac
-phratrial
-phratry
-phreatic
-phreatophyte
-phrenesia
-phrenesiac
-phrenesis
-phrenetic
-phrenetically
-phreneticness
-phrenic
-phrenicectomy
-phrenicocolic
-phrenicocostal
-phrenicogastric
-phrenicoglottic
-phrenicohepatic
-phrenicolienal
-phrenicopericardiac
-phrenicosplenic
-phrenicotomy
-phrenics
-phrenitic
-phrenitis
-phrenocardia
-phrenocardiac
-phrenocolic
-phrenocostal
-phrenodynia
-phrenogastric
-phrenoglottic
-phrenogram
-phrenograph
-phrenography
-phrenohepatic
-phrenologer
-phrenologic
-phrenological
-phrenologically
-phrenologist
-phrenologize
-phrenology
-phrenomagnetism
-phrenomesmerism
-phrenopathia
-phrenopathic
-phrenopathy
-phrenopericardiac
-phrenoplegia
-phrenoplegy
-phrenosin
-phrenosinic
-phrenospasm
-phrenosplenic
-phronesis
-Phronima
-Phronimidae
-phrontisterion
-phrontisterium
-phrontistery
-Phryganea
-phryganeid
-Phryganeidae
-phryganeoid
-Phrygian
-Phrygianize
-phrygium
-Phryma
-Phrymaceae
-phrymaceous
-phrynid
-Phrynidae
-phrynin
-phrynoid
-Phrynosoma
-phthalacene
-phthalan
-phthalanilic
-phthalate
-phthalazin
-phthalazine
-phthalein
-phthaleinometer
-phthalic
-phthalid
-phthalide
-phthalimide
-phthalin
-phthalocyanine
-phthalyl
-phthanite
-Phthartolatrae
-phthinoid
-phthiocol
-phthiriasis
-Phthirius
-phthirophagous
-phthisic
-phthisical
-phthisicky
-phthisiogenesis
-phthisiogenetic
-phthisiogenic
-phthisiologist
-phthisiology
-phthisiophobia
-phthisiotherapeutic
-phthisiotherapy
-phthisipneumonia
-phthisipneumony
-phthisis
-phthongal
-phthongometer
-phthor
-phthoric
-phu
-phugoid
-phulkari
-phulwa
-phulwara
-phut
-Phyciodes
-phycite
-Phycitidae
-phycitol
-phycochromaceae
-phycochromaceous
-phycochrome
-Phycochromophyceae
-phycochromophyceous
-phycocyanin
-phycocyanogen
-Phycodromidae
-phycoerythrin
-phycography
-phycological
-phycologist
-phycology
-Phycomyces
-phycomycete
-Phycomycetes
-phycomycetous
-phycophaein
-phycoxanthin
-phycoxanthine
-phygogalactic
-phyla
-phylacobiosis
-phylacobiotic
-phylacteric
-phylacterical
-phylacteried
-phylacterize
-phylactery
-phylactic
-phylactocarp
-phylactocarpal
-Phylactolaema
-Phylactolaemata
-phylactolaematous
-Phylactolema
-Phylactolemata
-phylarch
-phylarchic
-phylarchical
-phylarchy
-phyle
-phylephebic
-phylesis
-phyletic
-phyletically
-phyletism
-phylic
-Phyllachora
-Phyllactinia
-phyllade
-Phyllanthus
-phyllary
-Phyllaurea
-phylliform
-phyllin
-phylline
-Phyllis
-phyllite
-phyllitic
-Phyllitis
-Phyllium
-phyllobranchia
-phyllobranchial
-phyllobranchiate
-Phyllocactus
-phyllocarid
-Phyllocarida
-phyllocaridan
-Phylloceras
-phyllocerate
-Phylloceratidae
-phylloclad
-phylloclade
-phyllocladioid
-phyllocladium
-phyllocladous
-phyllocyanic
-phyllocyanin
-phyllocyst
-phyllocystic
-phyllode
-phyllodial
-phyllodination
-phyllodineous
-phyllodiniation
-phyllodinous
-phyllodium
-Phyllodoce
-phyllody
-phylloerythrin
-phyllogenetic
-phyllogenous
-phylloid
-phylloidal
-phylloideous
-phyllomancy
-phyllomania
-phyllome
-phyllomic
-phyllomorph
-phyllomorphic
-phyllomorphosis
-phyllomorphy
-Phyllophaga
-phyllophagous
-phyllophore
-phyllophorous
-phyllophyllin
-phyllophyte
-phyllopod
-Phyllopoda
-phyllopodan
-phyllopode
-phyllopodiform
-phyllopodium
-phyllopodous
-phylloporphyrin
-Phyllopteryx
-phylloptosis
-phyllopyrrole
-phyllorhine
-phyllorhinine
-phylloscopine
-Phylloscopus
-phyllosiphonic
-phyllosoma
-Phyllosomata
-phyllosome
-Phyllospondyli
-phyllospondylous
-Phyllostachys
-Phyllosticta
-Phyllostoma
-Phyllostomatidae
-Phyllostomatinae
-phyllostomatoid
-phyllostomatous
-phyllostome
-Phyllostomidae
-Phyllostominae
-phyllostomine
-phyllostomous
-Phyllostomus
-phyllotactic
-phyllotactical
-phyllotaxis
-phyllotaxy
-phyllous
-phylloxanthin
-Phylloxera
-phylloxeran
-phylloxeric
-Phylloxeridae
-phyllozooid
-phylogenetic
-phylogenetical
-phylogenetically
-phylogenic
-phylogenist
-phylogeny
-phylogerontic
-phylogerontism
-phylography
-phylology
-phylon
-phyloneanic
-phylonepionic
-phylum
-phyma
-phymata
-phymatic
-phymatid
-Phymatidae
-Phymatodes
-phymatoid
-phymatorhysin
-phymatosis
-Phymosia
-Physa
-physagogue
-Physalia
-physalian
-Physaliidae
-Physalis
-physalite
-Physalospora
-Physapoda
-Physaria
-Physcia
-Physciaceae
-physcioid
-Physcomitrium
-Physeter
-Physeteridae
-Physeterinae
-physeterine
-physeteroid
-Physeteroidea
-physharmonica
-physianthropy
-physiatric
-physiatrical
-physiatrics
-physic
-physical
-physicalism
-physicalist
-physicalistic
-physicalistically
-physicality
-physically
-physicalness
-physician
-physicianary
-physiciancy
-physicianed
-physicianer
-physicianess
-physicianless
-physicianly
-physicianship
-physicism
-physicist
-physicked
-physicker
-physicking
-physicky
-physicoastronomical
-physicobiological
-physicochemic
-physicochemical
-physicochemically
-physicochemist
-physicochemistry
-physicogeographical
-physicologic
-physicological
-physicomathematical
-physicomathematics
-physicomechanical
-physicomedical
-physicomental
-physicomorph
-physicomorphic
-physicomorphism
-physicooptics
-physicophilosophical
-physicophilosophy
-physicophysiological
-physicopsychical
-physicosocial
-physicotheological
-physicotheologist
-physicotheology
-physicotherapeutic
-physicotherapeutics
-physicotherapy
-physics
-Physidae
-physiform
-physiochemical
-physiochemically
-physiocracy
-physiocrat
-physiocratic
-physiocratism
-physiocratist
-physiogenesis
-physiogenetic
-physiogenic
-physiogeny
-physiognomic
-physiognomical
-physiognomically
-physiognomics
-physiognomist
-physiognomize
-physiognomonic
-physiognomonical
-physiognomy
-physiogony
-physiographer
-physiographic
-physiographical
-physiographically
-physiography
-physiolater
-physiolatrous
-physiolatry
-physiologer
-physiologian
-physiological
-physiologically
-physiologicoanatomic
-physiologist
-physiologize
-physiologue
-physiologus
-physiology
-physiopathological
-physiophilist
-physiophilosopher
-physiophilosophical
-physiophilosophy
-physiopsychic
-physiopsychical
-physiopsychological
-physiopsychology
-physiosociological
-physiosophic
-physiosophy
-physiotherapeutic
-physiotherapeutical
-physiotherapeutics
-physiotherapist
-physiotherapy
-physiotype
-physiotypy
-physique
-physiqued
-physitheism
-physitheistic
-physitism
-physiurgic
-physiurgy
-physocarpous
-Physocarpus
-physocele
-physoclist
-Physoclisti
-physoclistic
-physoclistous
-Physoderma
-physogastric
-physogastrism
-physogastry
-physometra
-Physonectae
-physonectous
-Physophorae
-physophoran
-physophore
-physophorous
-physopod
-Physopoda
-physopodan
-Physostegia
-Physostigma
-physostigmine
-physostomatous
-physostome
-Physostomi
-physostomous
-phytalbumose
-phytase
-Phytelephas
-Phyteus
-phytic
-phytiferous
-phytiform
-phytin
-phytivorous
-phytobacteriology
-phytobezoar
-phytobiological
-phytobiology
-phytochemical
-phytochemistry
-phytochlorin
-phytocidal
-phytodynamics
-phytoecological
-phytoecologist
-phytoecology
-Phytoflagellata
-phytogamy
-phytogenesis
-phytogenetic
-phytogenetical
-phytogenetically
-phytogenic
-phytogenous
-phytogeny
-phytogeographer
-phytogeographic
-phytogeographical
-phytogeographically
-phytogeography
-phytoglobulin
-phytograph
-phytographer
-phytographic
-phytographical
-phytographist
-phytography
-phytohormone
-phytoid
-phytol
-Phytolacca
-Phytolaccaceae
-phytolaccaceous
-phytolatrous
-phytolatry
-phytolithological
-phytolithologist
-phytolithology
-phytologic
-phytological
-phytologically
-phytologist
-phytology
-phytoma
-Phytomastigina
-Phytomastigoda
-phytome
-phytomer
-phytometer
-phytometric
-phytometry
-phytomonad
-Phytomonadida
-Phytomonadina
-Phytomonas
-phytomorphic
-phytomorphology
-phytomorphosis
-phyton
-phytonic
-phytonomy
-phytooecology
-phytopaleontologic
-phytopaleontological
-phytopaleontologist
-phytopaleontology
-phytoparasite
-phytopathogen
-phytopathogenic
-phytopathologic
-phytopathological
-phytopathologist
-phytopathology
-Phytophaga
-phytophagan
-phytophagic
-Phytophagineae
-phytophagous
-phytophagy
-phytopharmacologic
-phytopharmacology
-phytophenological
-phytophenology
-phytophil
-phytophilous
-Phytophthora
-phytophylogenetic
-phytophylogenic
-phytophylogeny
-phytophysiological
-phytophysiology
-phytoplankton
-phytopsyche
-phytoptid
-Phytoptidae
-phytoptose
-phytoptosis
-Phytoptus
-phytorhodin
-phytosaur
-Phytosauria
-phytosaurian
-phytoserologic
-phytoserological
-phytoserologically
-phytoserology
-phytosis
-phytosociologic
-phytosociological
-phytosociologically
-phytosociologist
-phytosociology
-phytosterin
-phytosterol
-phytostrote
-phytosynthesis
-phytotaxonomy
-phytotechny
-phytoteratologic
-phytoteratological
-phytoteratologist
-phytoteratology
-Phytotoma
-Phytotomidae
-phytotomist
-phytotomy
-phytotopographical
-phytotopography
-phytotoxic
-phytotoxin
-phytovitellin
-Phytozoa
-phytozoan
-Phytozoaria
-phytozoon
-phytyl
-pi
-Pia
-pia
-piaba
-piacaba
-piacle
-piacular
-piacularity
-piacularly
-piacularness
-piaculum
-piaffe
-piaffer
-pial
-pialyn
-pian
-pianette
-pianic
-pianino
-pianism
-pianissimo
-pianist
-pianiste
-pianistic
-pianistically
-Piankashaw
-piannet
-piano
-pianoforte
-pianofortist
-pianograph
-Pianokoto
-Pianola
-pianola
-pianolist
-pianologue
-piarhemia
-piarhemic
-Piarist
-Piaroa
-Piaroan
-Piaropus
-Piarroan
-piassava
-Piast
-piaster
-piastre
-piation
-piazine
-piazza
-piazzaed
-piazzaless
-piazzalike
-piazzian
-pibcorn
-piblokto
-pibroch
-pic
-Pica
-pica
-picador
-picadura
-Picae
-pical
-picamar
-picara
-Picard
-picarel
-picaresque
-Picariae
-picarian
-Picarii
-picaro
-picaroon
-picary
-picayune
-picayunish
-picayunishly
-picayunishness
-piccadill
-piccadilly
-piccalilli
-piccolo
-piccoloist
-pice
-Picea
-Picene
-picene
-Picenian
-piceoferruginous
-piceotestaceous
-piceous
-piceworth
-pichi
-pichiciago
-pichuric
-pichurim
-Pici
-Picidae
-piciform
-Piciformes
-Picinae
-picine
-pick
-pickaback
-pickable
-pickableness
-pickage
-pickaninny
-pickaroon
-pickaway
-pickax
-picked
-pickedly
-pickedness
-pickee
-pickeer
-picker
-pickerel
-pickerelweed
-pickering
-pickeringite
-pickery
-picket
-picketboat
-picketeer
-picketer
-pickfork
-pickietar
-pickings
-pickle
-picklelike
-pickleman
-pickler
-pickleweed
-pickleworm
-picklock
-pickman
-pickmaw
-picknick
-picknicker
-pickover
-pickpocket
-pickpocketism
-pickpocketry
-pickpole
-pickpurse
-pickshaft
-picksman
-picksmith
-picksome
-picksomeness
-pickthank
-pickthankly
-pickthankness
-pickthatch
-picktooth
-pickup
-pickwick
-Pickwickian
-Pickwickianism
-Pickwickianly
-pickwork
-picky
-picnic
-picnicker
-picnickery
-Picnickian
-picnickish
-picnicky
-pico
-picofarad
-picoid
-picoline
-picolinic
-picot
-picotah
-picotee
-picotite
-picqueter
-picra
-picramic
-Picramnia
-picrasmin
-picrate
-picrated
-picric
-Picris
-picrite
-picrocarmine
-Picrodendraceae
-Picrodendron
-picroerythrin
-picrol
-picrolite
-picromerite
-picropodophyllin
-picrorhiza
-picrorhizin
-picrotin
-picrotoxic
-picrotoxin
-picrotoxinin
-picryl
-Pict
-pict
-pictarnie
-Pictavi
-Pictish
-Pictland
-pictogram
-pictograph
-pictographic
-pictographically
-pictography
-Pictones
-pictoradiogram
-pictorial
-pictorialism
-pictorialist
-pictorialization
-pictorialize
-pictorially
-pictorialness
-pictoric
-pictorical
-pictorically
-picturability
-picturable
-picturableness
-picturably
-pictural
-picture
-picturecraft
-pictured
-picturedom
-picturedrome
-pictureful
-pictureless
-picturelike
-picturely
-picturemaker
-picturemaking
-picturer
-picturesque
-picturesquely
-picturesqueness
-picturesquish
-picturization
-picturize
-pictury
-picucule
-picuda
-picudilla
-picudo
-picul
-piculet
-piculule
-Picumninae
-Picumnus
-Picunche
-Picuris
-Picus
-pidan
-piddle
-piddler
-piddling
-piddock
-pidgin
-pidjajap
-pie
-piebald
-piebaldism
-piebaldly
-piebaldness
-piece
-pieceable
-pieceless
-piecemaker
-piecemeal
-piecemealwise
-piecen
-piecener
-piecer
-piecette
-piecewise
-piecework
-pieceworker
-piecing
-piecrust
-pied
-piedfort
-piedly
-piedmont
-piedmontal
-Piedmontese
-piedmontite
-piedness
-Piegan
-piehouse
-pieless
-pielet
-pielum
-piemag
-pieman
-piemarker
-pien
-pienanny
-piend
-piepan
-pieplant
-piepoudre
-piepowder
-pieprint
-pier
-pierage
-Piercarlo
-Pierce
-pierce
-pierceable
-pierced
-piercel
-pierceless
-piercent
-piercer
-piercing
-piercingly
-piercingness
-pierdrop
-Pierette
-pierhead
-Pierian
-pierid
-Pieridae
-Pierides
-Pieridinae
-pieridine
-Pierinae
-pierine
-Pieris
-pierless
-pierlike
-Pierre
-Pierrot
-pierrot
-pierrotic
-pieshop
-Piet
-piet
-pietas
-Piete
-Pieter
-pietic
-pietism
-Pietist
-pietist
-pietistic
-pietistical
-pietistically
-pietose
-piety
-piewife
-piewipe
-piewoman
-piezo
-piezochemical
-piezochemistry
-piezocrystallization
-piezoelectric
-piezoelectrically
-piezoelectricity
-piezometer
-piezometric
-piezometrical
-piezometry
-piff
-piffle
-piffler
-pifine
-pig
-pigbelly
-pigdan
-pigdom
-pigeon
-pigeonable
-pigeonberry
-pigeoneer
-pigeoner
-pigeonfoot
-pigeongram
-pigeonhearted
-pigeonhole
-pigeonholer
-pigeonman
-pigeonry
-pigeontail
-pigeonweed
-pigeonwing
-pigeonwood
-pigface
-pigfish
-pigflower
-pigfoot
-pigful
-piggery
-piggin
-pigging
-piggish
-piggishly
-piggishness
-piggle
-piggy
-pighead
-pigheaded
-pigheadedly
-pigheadedness
-pigherd
-pightle
-pigless
-piglet
-pigling
-piglinghood
-pigly
-pigmaker
-pigmaking
-pigman
-pigment
-pigmental
-pigmentally
-pigmentary
-pigmentation
-pigmentize
-pigmentolysis
-pigmentophage
-pigmentose
-Pigmy
-pignolia
-pignon
-pignorate
-pignoration
-pignoratitious
-pignorative
-pignus
-pignut
-pigpen
-pigritude
-pigroot
-pigsconce
-pigskin
-pigsney
-pigstick
-pigsticker
-pigsty
-pigtail
-pigwash
-pigweed
-pigwidgeon
-pigyard
-piitis
-pik
-pika
-pike
-piked
-pikel
-pikelet
-pikeman
-pikemonger
-piker
-pikestaff
-piketail
-pikey
-piki
-piking
-pikle
-piky
-pilage
-pilandite
-pilapil
-Pilar
-pilar
-pilary
-pilaster
-pilastered
-pilastering
-pilastrade
-pilastraded
-pilastric
-Pilate
-Pilatian
-pilau
-pilaued
-pilch
-pilchard
-pilcher
-pilcorn
-pilcrow
-pile
-Pilea
-pileata
-pileate
-pileated
-piled
-pileiform
-pileolated
-pileolus
-pileorhiza
-pileorhize
-pileous
-piler
-piles
-pileus
-pileweed
-pilework
-pileworm
-pilewort
-pilfer
-pilferage
-pilferer
-pilfering
-pilferingly
-pilferment
-pilgarlic
-pilgarlicky
-pilger
-pilgrim
-pilgrimage
-pilgrimager
-pilgrimatic
-pilgrimatical
-pilgrimdom
-pilgrimer
-pilgrimess
-pilgrimism
-pilgrimize
-pilgrimlike
-pilgrimwise
-pili
-pilidium
-pilifer
-piliferous
-piliform
-piligan
-piliganine
-piligerous
-pilikai
-pililloo
-pilimiction
-pilin
-piline
-piling
-pilipilula
-pilkins
-pill
-pillage
-pillageable
-pillagee
-pillager
-pillar
-pillared
-pillaret
-pillaring
-pillarist
-pillarize
-pillarlet
-pillarlike
-pillarwise
-pillary
-pillas
-pillbox
-pilled
-pilledness
-pillet
-pilleus
-pillion
-pilliver
-pilliwinks
-pillmaker
-pillmaking
-pillmonger
-pillorization
-pillorize
-pillory
-pillow
-pillowcase
-pillowing
-pillowless
-pillowmade
-pillowwork
-pillowy
-pillworm
-pillwort
-pilm
-pilmy
-Pilobolus
-pilocarpidine
-pilocarpine
-Pilocarpus
-Pilocereus
-pilocystic
-piloerection
-pilomotor
-pilon
-pilonidal
-pilori
-pilose
-pilosebaceous
-pilosine
-pilosis
-pilosism
-pilosity
-Pilot
-pilot
-pilotage
-pilotaxitic
-pilotee
-pilothouse
-piloting
-pilotism
-pilotless
-pilotman
-pilotry
-pilotship
-pilotweed
-pilous
-Pilpai
-Pilpay
-pilpul
-pilpulist
-pilpulistic
-piltock
-pilula
-pilular
-Pilularia
-pilule
-pilulist
-pilulous
-pilum
-Pilumnus
-pilus
-pilwillet
-pily
-Pim
-Pima
-Piman
-pimaric
-pimelate
-Pimelea
-pimelic
-pimelite
-pimelitis
-Pimenta
-pimento
-pimenton
-pimgenet
-pimienta
-pimiento
-pimlico
-pimola
-pimp
-pimperlimpimp
-pimpernel
-pimpery
-Pimpinella
-pimping
-pimpish
-Pimpla
-pimple
-pimpleback
-pimpled
-pimpleproof
-Pimplinae
-pimpliness
-pimplo
-pimploe
-pimplous
-pimply
-pimpship
-pin
-pina
-Pinaceae
-pinaceous
-pinaces
-pinachrome
-pinacle
-Pinacoceras
-Pinacoceratidae
-pinacocytal
-pinacocyte
-pinacoid
-pinacoidal
-pinacol
-pinacolate
-pinacolic
-pinacolin
-pinacone
-pinacoteca
-pinaculum
-Pinacyanol
-pinafore
-pinakiolite
-pinakoidal
-pinakotheke
-Pinal
-Pinaleno
-Pinales
-pinang
-pinaster
-pinatype
-pinaverdol
-pinax
-pinball
-pinbefore
-pinbone
-pinbush
-pincase
-pincement
-pincer
-pincerlike
-pincers
-pincerweed
-pinch
-pinchable
-pinchback
-pinchbeck
-pinchbelly
-pinchcock
-pinchcommons
-pinchcrust
-pinche
-pinched
-pinchedly
-pinchedness
-pinchem
-pincher
-pinchfist
-pinchfisted
-pinchgut
-pinching
-pinchingly
-pinchpenny
-Pincian
-Pinckneya
-pincoffin
-pincpinc
-Pinctada
-pincushion
-pincushiony
-pind
-pinda
-Pindari
-Pindaric
-pindarical
-pindarically
-Pindarism
-Pindarist
-Pindarize
-Pindarus
-pinder
-pindling
-pindy
-pine
-pineal
-pinealism
-pinealoma
-pineapple
-pined
-pinedrops
-pineland
-pinene
-piner
-pinery
-pinesap
-pinetum
-pineweed
-pinewoods
-piney
-pinfall
-pinfeather
-pinfeathered
-pinfeatherer
-pinfeathery
-pinfish
-pinfold
-Ping
-ping
-pingle
-pingler
-pingue
-pinguecula
-pinguedinous
-pinguefaction
-pinguefy
-pinguescence
-pinguescent
-Pinguicula
-pinguicula
-Pinguiculaceae
-pinguiculaceous
-pinguid
-pinguidity
-pinguiferous
-pinguin
-pinguinitescent
-pinguite
-pinguitude
-pinguitudinous
-pinhead
-pinheaded
-pinheadedness
-pinhold
-pinhole
-pinhook
-pinic
-pinicoline
-pinicolous
-piniferous
-piniform
-pining
-piningly
-pinion
-pinioned
-pinionless
-pinionlike
-pinipicrin
-pinitannic
-pinite
-pinitol
-pinivorous
-pinjane
-pinjra
-pink
-pinkberry
-pinked
-pinkeen
-pinken
-pinker
-Pinkerton
-Pinkertonism
-pinkeye
-pinkfish
-pinkie
-pinkify
-pinkily
-pinkiness
-pinking
-pinkish
-pinkishness
-pinkly
-pinkness
-pinkroot
-pinksome
-Pinkster
-pinkweed
-pinkwood
-pinkwort
-pinky
-pinless
-pinlock
-pinmaker
-Pinna
-pinna
-pinnace
-pinnacle
-pinnaclet
-pinnae
-pinnaglobin
-pinnal
-pinnate
-pinnated
-pinnatedly
-pinnately
-pinnatifid
-pinnatifidly
-pinnatilobate
-pinnatilobed
-pinnation
-pinnatipartite
-pinnatiped
-pinnatisect
-pinnatisected
-pinnatodentate
-pinnatopectinate
-pinnatulate
-pinned
-pinnel
-pinner
-pinnet
-Pinnidae
-pinniferous
-pinniform
-pinnigerous
-Pinnigrada
-pinnigrade
-pinninervate
-pinninerved
-pinning
-pinningly
-pinniped
-Pinnipedia
-pinnipedian
-pinnisect
-pinnisected
-pinnitarsal
-pinnitentaculate
-pinniwinkis
-pinnock
-pinnoite
-pinnotere
-pinnothere
-Pinnotheres
-pinnotherian
-Pinnotheridae
-pinnula
-pinnular
-pinnulate
-pinnulated
-pinnule
-pinnulet
-pinny
-pino
-pinochle
-pinocytosis
-pinole
-pinoleum
-pinolia
-pinolin
-pinon
-pinonic
-pinpillow
-pinpoint
-pinprick
-pinproof
-pinrail
-pinrowed
-pinscher
-pinsons
-pint
-pinta
-pintadera
-pintado
-pintadoite
-pintail
-pintano
-pinte
-pintle
-pinto
-pintura
-pinulus
-Pinus
-pinweed
-pinwing
-pinwork
-pinworm
-piny
-pinyl
-pinyon
-pioneer
-pioneerdom
-pioneership
-pionnotes
-pioscope
-pioted
-piotine
-Piotr
-piotty
-pioury
-pious
-piously
-piousness
-Pioxe
-pip
-pipa
-pipage
-pipal
-pipe
-pipeage
-pipecoline
-pipecolinic
-piped
-pipefish
-pipeful
-pipelayer
-pipeless
-pipelike
-pipeline
-pipeman
-pipemouth
-Piper
-piper
-Piperaceae
-piperaceous
-Piperales
-piperate
-piperazin
-piperazine
-piperic
-piperide
-piperideine
-piperidge
-piperidide
-piperidine
-piperine
-piperitious
-piperitone
-piperly
-piperno
-piperoid
-piperonal
-piperonyl
-pipery
-piperylene
-pipestapple
-pipestem
-pipestone
-pipet
-pipette
-pipewalker
-pipewood
-pipework
-pipewort
-pipi
-Pipidae
-Pipil
-Pipile
-Pipilo
-piping
-pipingly
-pipingness
-pipiri
-pipistrel
-pipistrelle
-Pipistrellus
-pipit
-pipkin
-pipkinet
-pipless
-pipped
-pipper
-pippin
-pippiner
-pippinface
-pippy
-Pipra
-Pipridae
-Piprinae
-piprine
-piproid
-pipsissewa
-Piptadenia
-Piptomeris
-pipunculid
-Pipunculidae
-pipy
-piquable
-piquance
-piquancy
-piquant
-piquantly
-piquantness
-pique
-piquet
-piquia
-piqure
-pir
-piracy
-piragua
-Piranga
-piranha
-pirate
-piratelike
-piratery
-piratess
-piratical
-piratically
-piratism
-piratize
-piraty
-Pirene
-Piricularia
-pirijiri
-piripiri
-piririgua
-pirl
-pirn
-pirner
-pirnie
-pirny
-Piro
-pirogue
-pirol
-piroplasm
-Piroplasma
-piroplasmosis
-pirouette
-pirouetter
-pirouettist
-pirr
-pirraura
-pirrmaw
-pirssonite
-Pisaca
-pisaca
-pisachee
-Pisan
-pisang
-pisanite
-Pisauridae
-pisay
-piscary
-Piscataqua
-Piscataway
-piscation
-piscatology
-piscator
-piscatorial
-piscatorialist
-piscatorially
-piscatorian
-piscatorious
-piscatory
-Pisces
-piscian
-piscicapture
-piscicapturist
-piscicolous
-piscicultural
-pisciculturally
-pisciculture
-pisciculturist
-Piscid
-Piscidia
-piscifauna
-pisciferous
-pisciform
-piscina
-piscinal
-piscine
-piscinity
-Piscis
-piscivorous
-pisco
-pise
-pish
-pishaug
-pishogue
-Pishquow
-pishu
-Pisidium
-pisiform
-Pisistratean
-Pisistratidae
-pisk
-pisky
-pismire
-pismirism
-piso
-pisolite
-pisolitic
-Pisonia
-piss
-pissabed
-pissant
-pist
-pistache
-pistachio
-Pistacia
-pistacite
-pistareen
-Pistia
-pistic
-pistil
-pistillaceous
-pistillar
-pistillary
-pistillate
-pistillid
-pistilliferous
-pistilliform
-pistilligerous
-pistilline
-pistillode
-pistillody
-pistilloid
-pistilogy
-pistle
-Pistoiese
-pistol
-pistole
-pistoleer
-pistolet
-pistolgram
-pistolgraph
-pistollike
-pistolography
-pistology
-pistolproof
-pistolwise
-piston
-pistonhead
-pistonlike
-pistrix
-Pisum
-pit
-pita
-Pitahauerat
-Pitahauirata
-pitahaya
-pitanga
-pitangua
-pitapat
-pitapatation
-pitarah
-pitau
-Pitawas
-pitaya
-pitayita
-Pitcairnia
-pitch
-pitchable
-pitchblende
-pitcher
-pitchered
-pitcherful
-pitcherlike
-pitcherman
-pitchfork
-pitchhole
-pitchi
-pitchiness
-pitching
-pitchlike
-pitchman
-pitchometer
-pitchout
-pitchpike
-pitchpole
-pitchpoll
-pitchstone
-pitchwork
-pitchy
-piteous
-piteously
-piteousness
-pitfall
-pith
-pithecan
-pithecanthrope
-pithecanthropic
-pithecanthropid
-Pithecanthropidae
-pithecanthropoid
-Pithecanthropus
-Pithecia
-pithecian
-Pitheciinae
-pitheciine
-pithecism
-pithecoid
-Pithecolobium
-pithecological
-pithecometric
-pithecomorphic
-pithecomorphism
-pithful
-pithily
-pithiness
-pithless
-pithlessly
-Pithoegia
-Pithoigia
-pithole
-pithos
-pithsome
-pithwork
-pithy
-pitiability
-pitiable
-pitiableness
-pitiably
-pitiedly
-pitiedness
-pitier
-pitiful
-pitifully
-pitifulness
-pitikins
-pitiless
-pitilessly
-pitilessness
-pitless
-pitlike
-pitmaker
-pitmaking
-pitman
-pitmark
-pitmirk
-pitometer
-pitpan
-pitpit
-pitside
-Pitta
-pittacal
-pittance
-pittancer
-pitted
-pitter
-pitticite
-Pittidae
-pittine
-pitting
-Pittism
-Pittite
-pittite
-pittoid
-Pittosporaceae
-pittosporaceous
-pittospore
-Pittosporum
-Pittsburgher
-pituital
-pituitary
-pituite
-pituitous
-pituitousness
-Pituitrin
-pituri
-pitwood
-pitwork
-pitwright
-pity
-pitying
-pityingly
-Pitylus
-pityocampa
-pityproof
-pityriasic
-pityriasis
-Pityrogramma
-pityroid
-piuri
-piuricapsular
-pivalic
-pivot
-pivotal
-pivotally
-pivoter
-pix
-pixie
-pixilated
-pixilation
-pixy
-pize
-pizza
-pizzeria
-pizzicato
-pizzle
-placability
-placable
-placableness
-placably
-Placaean
-placard
-placardeer
-placarder
-placate
-placater
-placation
-placative
-placatively
-placatory
-placcate
-place
-placeable
-Placean
-placebo
-placeful
-placeless
-placelessly
-placemaker
-placemaking
-placeman
-placemanship
-placement
-placemonger
-placemongering
-placenta
-placental
-Placentalia
-placentalian
-placentary
-placentate
-placentation
-placentiferous
-placentiform
-placentigerous
-placentitis
-placentoid
-placentoma
-placer
-placet
-placewoman
-placid
-placidity
-placidly
-placidness
-placitum
-plack
-placket
-plackless
-placochromatic
-placode
-placoderm
-placodermal
-placodermatous
-Placodermi
-placodermoid
-placodont
-Placodontia
-Placodus
-placoganoid
-placoganoidean
-Placoganoidei
-placoid
-placoidal
-placoidean
-Placoidei
-Placoides
-Placophora
-placophoran
-placoplast
-placula
-placuntitis
-placuntoma
-Placus
-pladaroma
-pladarosis
-plaga
-plagal
-plagate
-plage
-Plagianthus
-plagiaplite
-plagiarical
-plagiarism
-plagiarist
-plagiaristic
-plagiaristically
-plagiarization
-plagiarize
-plagiarizer
-plagiary
-plagihedral
-plagiocephalic
-plagiocephalism
-plagiocephaly
-Plagiochila
-plagioclase
-plagioclasite
-plagioclastic
-plagioclinal
-plagiodont
-plagiograph
-plagioliparite
-plagionite
-plagiopatagium
-plagiophyre
-Plagiostomata
-plagiostomatous
-plagiostome
-Plagiostomi
-plagiostomous
-plagiotropic
-plagiotropically
-plagiotropism
-plagiotropous
-plagium
-plagose
-plagosity
-plague
-plagued
-plagueful
-plagueless
-plagueproof
-plaguer
-plaguesome
-plaguesomeness
-plaguily
-plaguy
-plaice
-plaid
-plaided
-plaidie
-plaiding
-plaidman
-plaidy
-plain
-plainback
-plainbacks
-plainer
-plainful
-plainhearted
-plainish
-plainly
-plainness
-plainscraft
-plainsfolk
-plainsman
-plainsoled
-plainstones
-plainswoman
-plaint
-plaintail
-plaintiff
-plaintiffship
-plaintile
-plaintive
-plaintively
-plaintiveness
-plaintless
-plainward
-plaister
-plait
-plaited
-plaiter
-plaiting
-plaitless
-plaitwork
-plak
-plakat
-plan
-planable
-planaea
-planar
-Planaria
-planarian
-Planarida
-planaridan
-planariform
-planarioid
-planarity
-planate
-planation
-planch
-plancheite
-plancher
-planchet
-planchette
-planching
-planchment
-plancier
-Planckian
-plandok
-plane
-planeness
-planer
-Planera
-planet
-planeta
-planetable
-planetabler
-planetal
-planetaria
-planetarian
-planetarily
-planetarium
-planetary
-planeted
-planetesimal
-planeticose
-planeting
-planetist
-planetkin
-planetless
-planetlike
-planetogeny
-planetography
-planetoid
-planetoidal
-planetologic
-planetologist
-planetology
-planetule
-planform
-planful
-planfully
-planfulness
-plang
-plangency
-plangent
-plangently
-plangor
-plangorous
-planicaudate
-planicipital
-planidorsate
-planifolious
-planiform
-planigraph
-planilla
-planimetric
-planimetrical
-planimetry
-planineter
-planipennate
-Planipennia
-planipennine
-planipetalous
-planiphyllous
-planirostral
-planirostrate
-planiscope
-planiscopic
-planish
-planisher
-planispheral
-planisphere
-planispheric
-planispherical
-planispiral
-planity
-plank
-plankage
-plankbuilt
-planker
-planking
-plankless
-planklike
-planksheer
-plankter
-planktologist
-planktology
-plankton
-planktonic
-planktont
-plankways
-plankwise
-planky
-planless
-planlessly
-planlessness
-planner
-planoblast
-planoblastic
-Planococcus
-planoconical
-planocylindric
-planoferrite
-planogamete
-planograph
-planographic
-planographist
-planography
-planohorizontal
-planolindrical
-planometer
-planometry
-planomiller
-planoorbicular
-Planorbidae
-planorbiform
-planorbine
-Planorbis
-planorboid
-planorotund
-Planosarcina
-planosol
-planosome
-planospiral
-planospore
-planosubulate
-plant
-planta
-plantable
-plantad
-Plantae
-plantage
-Plantaginaceae
-plantaginaceous
-Plantaginales
-plantagineous
-Plantago
-plantain
-plantal
-plantar
-plantaris
-plantarium
-plantation
-plantationlike
-plantdom
-planter
-planterdom
-planterly
-plantership
-Plantigrada
-plantigrade
-plantigrady
-planting
-plantivorous
-plantless
-plantlet
-plantlike
-plantling
-plantocracy
-plantsman
-plantula
-plantular
-plantule
-planula
-planulan
-planular
-planulate
-planuliform
-planuloid
-Planuloidea
-planuria
-planury
-planxty
-plap
-plappert
-plaque
-plaquette
-plash
-plasher
-plashet
-plashingly
-plashment
-plashy
-plasm
-plasma
-plasmagene
-plasmapheresis
-plasmase
-plasmatic
-plasmatical
-plasmation
-plasmatoparous
-plasmatorrhexis
-plasmic
-plasmocyte
-plasmocytoma
-plasmode
-plasmodesm
-plasmodesma
-plasmodesmal
-plasmodesmic
-plasmodesmus
-plasmodia
-plasmodial
-plasmodiate
-plasmodic
-plasmodiocarp
-plasmodiocarpous
-Plasmodiophora
-Plasmodiophoraceae
-Plasmodiophorales
-plasmodium
-plasmogen
-plasmolysis
-plasmolytic
-plasmolytically
-plasmolyzability
-plasmolyzable
-plasmolyze
-plasmoma
-Plasmon
-Plasmopara
-plasmophagous
-plasmophagy
-plasmoptysis
-plasmosoma
-plasmosome
-plasmotomy
-plasome
-plass
-plasson
-plastein
-plaster
-plasterbill
-plasterboard
-plasterer
-plasteriness
-plastering
-plasterlike
-plasterwise
-plasterwork
-plastery
-Plastic
-plastic
-plastically
-plasticimeter
-Plasticine
-plasticine
-plasticism
-plasticity
-plasticization
-plasticize
-plasticizer
-plasticly
-plastics
-plastid
-plastidium
-plastidome
-Plastidozoa
-plastidular
-plastidule
-plastify
-plastin
-plastinoid
-plastisol
-plastochondria
-plastochron
-plastochrone
-plastodynamia
-plastodynamic
-plastogamic
-plastogamy
-plastogene
-plastomere
-plastometer
-plastosome
-plastotype
-plastral
-plastron
-plastrum
-plat
-Plataean
-Platalea
-Plataleidae
-plataleiform
-Plataleinae
-plataleine
-platan
-Platanaceae
-platanaceous
-platane
-platanist
-Platanista
-Platanistidae
-platano
-Platanus
-platband
-platch
-plate
-platea
-plateasm
-plateau
-plateaux
-plated
-plateful
-plateholder
-plateiasmus
-platelayer
-plateless
-platelet
-platelike
-platemaker
-platemaking
-plateman
-platen
-plater
-platerer
-plateresque
-platery
-plateway
-platework
-plateworker
-platform
-platformally
-platformed
-platformer
-platformish
-platformism
-platformist
-platformistic
-platformless
-platformy
-platic
-platicly
-platilla
-platina
-platinamine
-platinammine
-platinate
-Platine
-plating
-platinic
-platinichloric
-platinichloride
-platiniferous
-platiniridium
-platinite
-platinization
-platinize
-platinochloric
-platinochloride
-platinocyanic
-platinocyanide
-platinoid
-platinotype
-platinous
-platinum
-platinumsmith
-platitude
-platitudinal
-platitudinarian
-platitudinarianism
-platitudinism
-platitudinist
-platitudinization
-platitudinize
-platitudinizer
-platitudinous
-platitudinously
-platitudinousness
-Platoda
-platode
-Platodes
-platoid
-Platonesque
-platonesque
-Platonian
-Platonic
-Platonical
-Platonically
-Platonicalness
-Platonician
-Platonicism
-Platonism
-Platonist
-Platonistic
-Platonization
-Platonize
-Platonizer
-platoon
-platopic
-platosamine
-platosammine
-Platt
-Plattdeutsch
-platted
-platten
-platter
-platterface
-platterful
-platting
-plattnerite
-platty
-platurous
-platy
-platybasic
-platybrachycephalic
-platybrachycephalous
-platybregmatic
-platycarpous
-Platycarpus
-Platycarya
-platycelian
-platycelous
-platycephalic
-Platycephalidae
-platycephalism
-platycephaloid
-platycephalous
-Platycephalus
-platycephaly
-Platycercinae
-platycercine
-Platycercus
-Platycerium
-platycheiria
-platycnemia
-platycnemic
-Platycodon
-platycoria
-platycrania
-platycranial
-Platyctenea
-platycyrtean
-platydactyl
-platydactyle
-platydactylous
-platydolichocephalic
-platydolichocephalous
-platyfish
-platyglossal
-platyglossate
-platyglossia
-Platyhelmia
-platyhelminth
-Platyhelminthes
-platyhelminthic
-platyhieric
-platykurtic
-platylobate
-platymeria
-platymeric
-platymery
-platymesaticephalic
-platymesocephalic
-platymeter
-platymyoid
-platynite
-platynotal
-platyodont
-platyope
-platyopia
-platyopic
-platypellic
-platypetalous
-platyphyllous
-platypod
-Platypoda
-platypodia
-platypodous
-Platyptera
-platypus
-platypygous
-Platyrhina
-Platyrhini
-platyrhynchous
-platyrrhin
-Platyrrhina
-platyrrhine
-Platyrrhini
-platyrrhinian
-platyrrhinic
-platyrrhinism
-platyrrhiny
-platysma
-platysmamyoides
-platysomid
-Platysomidae
-Platysomus
-platystaphyline
-Platystemon
-platystencephalia
-platystencephalic
-platystencephalism
-platystencephaly
-platysternal
-Platysternidae
-Platystomidae
-platystomous
-platytrope
-platytropy
-plaud
-plaudation
-plaudit
-plaudite
-plauditor
-plauditory
-plauenite
-plausibility
-plausible
-plausibleness
-plausibly
-plausive
-plaustral
-Plautine
-Plautus
-play
-playa
-playability
-playable
-playback
-playbill
-playbook
-playbox
-playboy
-playboyism
-playbroker
-playcraft
-playcraftsman
-playday
-playdown
-player
-playerdom
-playeress
-playfellow
-playfellowship
-playfield
-playfolk
-playful
-playfully
-playfulness
-playgoer
-playgoing
-playground
-playhouse
-playingly
-playless
-playlet
-playlike
-playmaker
-playmaking
-playman
-playmare
-playmate
-playmonger
-playmongering
-playock
-playpen
-playreader
-playroom
-playscript
-playsome
-playsomely
-playsomeness
-playstead
-plaything
-playtime
-playward
-playwoman
-playwork
-playwright
-playwrightess
-playwrighting
-playwrightry
-playwriter
-playwriting
-plaza
-plazolite
-plea
-pleach
-pleached
-pleacher
-plead
-pleadable
-pleadableness
-pleader
-pleading
-pleadingly
-pleadingness
-pleaproof
-pleasable
-pleasableness
-pleasance
-pleasant
-pleasantable
-pleasantish
-pleasantly
-pleasantness
-pleasantry
-pleasantsome
-please
-pleasedly
-pleasedness
-pleaseman
-pleaser
-pleaship
-pleasing
-pleasingly
-pleasingness
-pleasurability
-pleasurable
-pleasurableness
-pleasurably
-pleasure
-pleasureful
-pleasurehood
-pleasureless
-pleasurelessly
-pleasureman
-pleasurement
-pleasuremonger
-pleasureproof
-pleasurer
-pleasuring
-pleasurist
-pleasurous
-pleat
-pleater
-pleatless
-pleb
-plebe
-plebeian
-plebeiance
-plebeianize
-plebeianly
-plebeianness
-plebeity
-plebianism
-plebicolar
-plebicolist
-plebificate
-plebification
-plebify
-plebiscitarian
-plebiscitarism
-plebiscitary
-plebiscite
-plebiscitic
-plebiscitum
-plebs
-pleck
-Plecoptera
-plecopteran
-plecopterid
-plecopterous
-Plecotinae
-plecotine
-Plecotus
-plectognath
-Plectognathi
-plectognathic
-plectognathous
-plectopter
-plectopteran
-plectopterous
-plectospondyl
-Plectospondyli
-plectospondylous
-plectre
-plectridial
-plectridium
-plectron
-plectrum
-pled
-pledge
-pledgeable
-pledgee
-pledgeless
-pledgeor
-pledger
-pledgeshop
-pledget
-pledgor
-Plegadis
-plegaphonia
-plegometer
-Pleiades
-pleiobar
-pleiochromia
-pleiochromic
-pleiomastia
-pleiomazia
-pleiomerous
-pleiomery
-pleion
-Pleione
-pleionian
-pleiophyllous
-pleiophylly
-pleiotaxis
-pleiotropic
-pleiotropically
-pleiotropism
-Pleistocene
-Pleistocenic
-pleistoseist
-plemochoe
-plemyrameter
-plenarily
-plenariness
-plenarium
-plenarty
-plenary
-plenicorn
-pleniloquence
-plenilunal
-plenilunar
-plenilunary
-plenilune
-plenipo
-plenipotence
-plenipotent
-plenipotential
-plenipotentiality
-plenipotentiarily
-plenipotentiarize
-Plenipotentiary
-plenipotentiary
-plenipotentiaryship
-plenish
-plenishing
-plenishment
-plenism
-plenist
-plenitide
-plenitude
-plenitudinous
-plenshing
-plenteous
-plenteously
-plenteousness
-plentiful
-plentifully
-plentifulness
-plentify
-plenty
-plenum
-pleny
-pleochroic
-pleochroism
-pleochroitic
-pleochromatic
-pleochromatism
-pleochroous
-pleocrystalline
-pleodont
-pleomastia
-pleomastic
-pleomazia
-pleometrosis
-pleometrotic
-pleomorph
-pleomorphic
-pleomorphism
-pleomorphist
-pleomorphous
-pleomorphy
-pleon
-pleonal
-pleonasm
-pleonast
-pleonaste
-pleonastic
-pleonastical
-pleonastically
-pleonectic
-pleonexia
-pleonic
-pleophyletic
-pleopod
-pleopodite
-Pleospora
-Pleosporaceae
-plerergate
-plerocercoid
-pleroma
-pleromatic
-plerome
-pleromorph
-plerophoric
-plerophory
-plerosis
-plerotic
-Plesianthropus
-plesiobiosis
-plesiobiotic
-plesiomorphic
-plesiomorphism
-plesiomorphous
-plesiosaur
-Plesiosauri
-Plesiosauria
-plesiosaurian
-plesiosauroid
-Plesiosaurus
-plesiotype
-plessigraph
-plessimeter
-plessimetric
-plessimetry
-plessor
-Plethodon
-plethodontid
-Plethodontidae
-plethora
-plethoretic
-plethoretical
-plethoric
-plethorical
-plethorically
-plethorous
-plethory
-plethysmograph
-plethysmographic
-plethysmographically
-plethysmography
-pleura
-Pleuracanthea
-Pleuracanthidae
-Pleuracanthini
-pleuracanthoid
-Pleuracanthus
-pleural
-pleuralgia
-pleuralgic
-pleurapophysial
-pleurapophysis
-pleurectomy
-pleurenchyma
-pleurenchymatous
-pleuric
-pleuriseptate
-pleurisy
-pleurite
-pleuritic
-pleuritical
-pleuritically
-pleuritis
-Pleurobrachia
-Pleurobrachiidae
-pleurobranch
-pleurobranchia
-pleurobranchial
-pleurobranchiate
-pleurobronchitis
-Pleurocapsa
-Pleurocapsaceae
-pleurocapsaceous
-pleurocarp
-Pleurocarpi
-pleurocarpous
-pleurocele
-pleurocentesis
-pleurocentral
-pleurocentrum
-Pleurocera
-pleurocerebral
-Pleuroceridae
-pleuroceroid
-Pleurococcaceae
-pleurococcaceous
-Pleurococcus
-Pleurodelidae
-Pleurodira
-pleurodiran
-pleurodire
-pleurodirous
-pleurodiscous
-pleurodont
-pleurodynia
-pleurodynic
-pleurogenic
-pleurogenous
-pleurohepatitis
-pleuroid
-pleurolith
-pleurolysis
-pleuron
-Pleuronectes
-pleuronectid
-Pleuronectidae
-pleuronectoid
-Pleuronema
-pleuropedal
-pleuropericardial
-pleuropericarditis
-pleuroperitonaeal
-pleuroperitoneal
-pleuroperitoneum
-pleuropneumonia
-pleuropneumonic
-pleuropodium
-pleuropterygian
-Pleuropterygii
-pleuropulmonary
-pleurorrhea
-Pleurosaurus
-Pleurosigma
-pleurospasm
-pleurosteal
-Pleurosteon
-pleurostict
-Pleurosticti
-Pleurostigma
-pleurothotonic
-pleurothotonus
-Pleurotoma
-Pleurotomaria
-Pleurotomariidae
-pleurotomarioid
-Pleurotomidae
-pleurotomine
-pleurotomoid
-pleurotomy
-pleurotonic
-pleurotonus
-Pleurotremata
-pleurotribal
-pleurotribe
-pleurotropous
-Pleurotus
-pleurotyphoid
-pleurovisceral
-pleurum
-pleuston
-pleustonic
-plew
-plex
-plexal
-plexicose
-plexiform
-pleximeter
-pleximetric
-pleximetry
-plexodont
-plexometer
-plexor
-plexure
-plexus
-pliability
-pliable
-pliableness
-pliably
-pliancy
-pliant
-pliantly
-pliantness
-plica
-plicable
-plical
-plicate
-plicated
-plicately
-plicateness
-plicater
-plicatile
-plication
-plicative
-plicatocontorted
-plicatocristate
-plicatolacunose
-plicatolobate
-plicatopapillose
-plicator
-plicatoundulate
-plicatulate
-plicature
-pliciferous
-pliciform
-plier
-pliers
-plight
-plighted
-plighter
-plim
-plimsoll
-Plinian
-plinth
-plinther
-plinthiform
-plinthless
-plinthlike
-Pliny
-Plinyism
-Pliocene
-Pliohippus
-Pliopithecus
-pliosaur
-pliosaurian
-Pliosauridae
-Pliosaurus
-pliothermic
-Pliotron
-pliskie
-plisky
-ploat
-ploce
-Ploceidae
-ploceiform
-Ploceinae
-Ploceus
-plock
-plod
-plodder
-plodderly
-plodding
-ploddingly
-ploddingness
-plodge
-Ploima
-ploimate
-plomb
-plook
-plop
-ploration
-ploratory
-plosion
-plosive
-plot
-plote
-plotful
-Plotinian
-Plotinic
-Plotinical
-Plotinism
-Plotinist
-Plotinize
-plotless
-plotlessness
-plotproof
-plottage
-plotted
-plotter
-plottery
-plotting
-plottingly
-plotty
-plough
-ploughmanship
-ploughtail
-plouk
-plouked
-plouky
-plounce
-plousiocracy
-plout
-Plouteneion
-plouter
-plover
-ploverlike
-plovery
-plow
-plowable
-plowbote
-plowboy
-plower
-plowfish
-plowfoot
-plowgang
-plowgate
-plowgraith
-plowhead
-plowing
-plowjogger
-plowland
-plowlight
-plowline
-plowmaker
-plowman
-plowmanship
-plowmell
-plowpoint
-Plowrightia
-plowshare
-plowshoe
-plowstaff
-plowstilt
-plowtail
-plowwise
-plowwoman
-plowwright
-ploy
-ployment
-Pluchea
-pluck
-pluckage
-plucked
-pluckedness
-plucker
-Pluckerian
-pluckily
-pluckiness
-pluckless
-plucklessness
-plucky
-plud
-pluff
-pluffer
-pluffy
-plug
-plugboard
-plugdrawer
-pluggable
-plugged
-plugger
-plugging
-pluggingly
-pluggy
-plughole
-plugless
-pluglike
-plugman
-plugtray
-plugtree
-plum
-pluma
-plumaceous
-plumach
-plumade
-plumage
-plumaged
-plumagery
-plumasite
-plumate
-Plumatella
-plumatellid
-Plumatellidae
-plumatelloid
-plumb
-plumbable
-plumbage
-Plumbaginaceae
-plumbaginaceous
-plumbagine
-plumbaginous
-plumbago
-plumbate
-plumbean
-plumbeous
-plumber
-plumbership
-plumbery
-plumbet
-plumbic
-plumbiferous
-plumbing
-plumbism
-plumbisolvent
-plumbite
-plumbless
-plumbness
-plumbog
-plumbojarosite
-plumboniobate
-plumbosolvency
-plumbosolvent
-plumbous
-plumbum
-plumcot
-plumdamas
-plumdamis
-plume
-plumed
-plumeless
-plumelet
-plumelike
-plumemaker
-plumemaking
-plumeopicean
-plumeous
-plumer
-plumery
-plumet
-plumette
-plumicorn
-plumier
-Plumiera
-plumieride
-plumification
-plumiform
-plumiformly
-plumify
-plumigerous
-pluminess
-plumiped
-plumipede
-plumist
-plumless
-plumlet
-plumlike
-plummer
-plummet
-plummeted
-plummetless
-plummy
-plumose
-plumosely
-plumoseness
-plumosity
-plumous
-plump
-plumpen
-plumper
-plumping
-plumpish
-plumply
-plumpness
-plumps
-plumpy
-plumula
-plumulaceous
-plumular
-Plumularia
-plumularian
-Plumulariidae
-plumulate
-plumule
-plumuliform
-plumulose
-plumy
-plunder
-plunderable
-plunderage
-plunderbund
-plunderer
-plunderess
-plundering
-plunderingly
-plunderless
-plunderous
-plunderproof
-plunge
-plunger
-plunging
-plungingly
-plunk
-plunther
-plup
-plupatriotic
-pluperfect
-pluperfectly
-pluperfectness
-plural
-pluralism
-pluralist
-pluralistic
-pluralistically
-plurality
-pluralization
-pluralize
-pluralizer
-plurally
-plurative
-plurennial
-pluriaxial
-pluricarinate
-pluricarpellary
-pluricellular
-pluricentral
-pluricipital
-pluricuspid
-pluricuspidate
-pluridentate
-pluries
-plurifacial
-plurifetation
-plurification
-pluriflagellate
-pluriflorous
-plurifoliate
-plurifoliolate
-plurify
-pluriglandular
-pluriguttulate
-plurilateral
-plurilingual
-plurilingualism
-plurilingualist
-plurilocular
-plurimammate
-plurinominal
-plurinucleate
-pluripara
-pluriparity
-pluriparous
-pluripartite
-pluripetalous
-pluripotence
-pluripotent
-pluripresence
-pluriseptate
-pluriserial
-pluriseriate
-pluriseriated
-plurisetose
-plurispiral
-plurisporous
-plurisyllabic
-plurisyllable
-plurivalent
-plurivalve
-plurivorous
-plurivory
-plus
-plush
-plushed
-plushette
-plushily
-plushiness
-plushlike
-plushy
-Plusia
-Plusiinae
-plusquamperfect
-plussage
-Plutarchian
-Plutarchic
-Plutarchical
-Plutarchically
-plutarchy
-pluteal
-plutean
-pluteiform
-Plutella
-pluteus
-Pluto
-plutocracy
-plutocrat
-plutocratic
-plutocratical
-plutocratically
-plutolatry
-plutological
-plutologist
-plutology
-plutomania
-Plutonian
-plutonian
-plutonic
-Plutonion
-plutonism
-plutonist
-plutonite
-Plutonium
-plutonium
-plutonometamorphism
-plutonomic
-plutonomist
-plutonomy
-pluvial
-pluvialiform
-pluvialine
-Pluvialis
-pluvian
-pluvine
-pluviograph
-pluviographic
-pluviographical
-pluviography
-pluviometer
-pluviometric
-pluviometrical
-pluviometrically
-pluviometry
-pluvioscope
-pluviose
-pluviosity
-pluvious
-ply
-plyer
-plying
-plyingly
-Plymouth
-Plymouthism
-Plymouthist
-Plymouthite
-Plynlymmon
-plywood
-pneodynamics
-pneograph
-pneomanometer
-pneometer
-pneometry
-pneophore
-pneoscope
-pneuma
-pneumarthrosis
-pneumathaemia
-pneumatic
-pneumatical
-pneumatically
-pneumaticity
-pneumatics
-pneumatism
-pneumatist
-pneumatize
-pneumatized
-pneumatocardia
-pneumatocele
-pneumatochemical
-pneumatochemistry
-pneumatocyst
-pneumatocystic
-pneumatode
-pneumatogenic
-pneumatogenous
-pneumatogram
-pneumatograph
-pneumatographer
-pneumatographic
-pneumatography
-pneumatolitic
-pneumatologic
-pneumatological
-pneumatologist
-pneumatology
-pneumatolysis
-pneumatolytic
-Pneumatomachian
-Pneumatomachist
-Pneumatomachy
-pneumatometer
-pneumatometry
-pneumatomorphic
-pneumatonomy
-pneumatophany
-pneumatophilosophy
-pneumatophobia
-pneumatophonic
-pneumatophony
-pneumatophore
-pneumatophorous
-pneumatorrhachis
-pneumatoscope
-pneumatosic
-pneumatosis
-pneumatotactic
-pneumatotherapeutics
-pneumatotherapy
-Pneumatria
-pneumaturia
-pneumectomy
-pneumobacillus
-Pneumobranchia
-Pneumobranchiata
-pneumocele
-pneumocentesis
-pneumochirurgia
-pneumococcal
-pneumococcemia
-pneumococcic
-pneumococcous
-pneumococcus
-pneumoconiosis
-pneumoderma
-pneumodynamic
-pneumodynamics
-pneumoencephalitis
-pneumoenteritis
-pneumogastric
-pneumogram
-pneumograph
-pneumographic
-pneumography
-pneumohemothorax
-pneumohydropericardium
-pneumohydrothorax
-pneumolith
-pneumolithiasis
-pneumological
-pneumology
-pneumolysis
-pneumomalacia
-pneumomassage
-Pneumometer
-pneumomycosis
-pneumonalgia
-pneumonectasia
-pneumonectomy
-pneumonedema
-pneumonia
-pneumonic
-pneumonitic
-pneumonitis
-pneumonocace
-pneumonocarcinoma
-pneumonocele
-pneumonocentesis
-pneumonocirrhosis
-pneumonoconiosis
-pneumonodynia
-pneumonoenteritis
-pneumonoerysipelas
-pneumonographic
-pneumonography
-pneumonokoniosis
-pneumonolith
-pneumonolithiasis
-pneumonolysis
-pneumonomelanosis
-pneumonometer
-pneumonomycosis
-pneumonoparesis
-pneumonopathy
-pneumonopexy
-pneumonophorous
-pneumonophthisis
-pneumonopleuritis
-pneumonorrhagia
-pneumonorrhaphy
-pneumonosis
-pneumonotherapy
-pneumonotomy
-pneumony
-pneumopericardium
-pneumoperitoneum
-pneumoperitonitis
-pneumopexy
-pneumopleuritis
-pneumopyothorax
-pneumorrachis
-pneumorrhachis
-pneumorrhagia
-pneumotactic
-pneumotherapeutics
-pneumotherapy
-pneumothorax
-pneumotomy
-pneumotoxin
-pneumotropic
-pneumotropism
-pneumotyphoid
-pneumotyphus
-pneumoventriculography
-Po
-po
-Poa
-Poaceae
-poaceous
-poach
-poachable
-poacher
-poachiness
-poachy
-Poales
-poalike
-pob
-pobby
-Poblacht
-poblacion
-pobs
-pochade
-pochard
-pochay
-poche
-pochette
-pocilliform
-pock
-pocket
-pocketable
-pocketableness
-pocketbook
-pocketed
-pocketer
-pocketful
-pocketing
-pocketknife
-pocketless
-pocketlike
-pockety
-pockhouse
-pockily
-pockiness
-pockmanteau
-pockmantie
-pockmark
-pockweed
-pockwood
-pocky
-poco
-pococurante
-pococuranteism
-pococurantic
-pococurantish
-pococurantism
-pococurantist
-pocosin
-poculary
-poculation
-poculent
-poculiform
-pod
-podagra
-podagral
-podagric
-podagrical
-podagrous
-podal
-podalgia
-podalic
-Podaliriidae
-Podalirius
-Podarge
-Podargidae
-Podarginae
-podargine
-podargue
-Podargus
-podarthral
-podarthritis
-podarthrum
-podatus
-Podaxonia
-podaxonial
-podded
-podder
-poddidge
-poddish
-poddle
-poddy
-podelcoma
-podeon
-podesta
-podesterate
-podetiiform
-podetium
-podex
-podge
-podger
-podgily
-podginess
-podgy
-podial
-podiatrist
-podiatry
-podical
-Podiceps
-podices
-Podicipedidae
-podilegous
-podite
-poditic
-poditti
-podium
-podler
-podley
-podlike
-podobranch
-podobranchia
-podobranchial
-podobranchiate
-podocarp
-Podocarpaceae
-Podocarpineae
-podocarpous
-Podocarpus
-podocephalous
-pododerm
-pododynia
-podogyn
-podogyne
-podogynium
-Podolian
-podolite
-podology
-podomancy
-podomere
-podometer
-podometry
-Podophrya
-Podophryidae
-Podophthalma
-Podophthalmata
-podophthalmate
-podophthalmatous
-Podophthalmia
-podophthalmian
-podophthalmic
-podophthalmite
-podophthalmitic
-podophthalmous
-Podophyllaceae
-podophyllic
-podophyllin
-podophyllotoxin
-podophyllous
-Podophyllum
-podophyllum
-podoscaph
-podoscapher
-podoscopy
-Podosomata
-podosomatous
-podosperm
-Podosphaera
-Podostemaceae
-podostemaceous
-podostemad
-Podostemon
-Podostemonaceae
-podostemonaceous
-Podostomata
-podostomatous
-podotheca
-podothecal
-Podozamites
-Podsnap
-Podsnappery
-podsol
-podsolic
-podsolization
-podsolize
-Podunk
-Podura
-poduran
-podurid
-Poduridae
-podware
-podzol
-podzolic
-podzolization
-podzolize
-poe
-Poecile
-Poeciliidae
-poecilitic
-Poecilocyttares
-poecilocyttarous
-poecilogonous
-poecilogony
-poecilomere
-poecilonym
-poecilonymic
-poecilonymy
-poecilopod
-Poecilopoda
-poecilopodous
-poem
-poematic
-poemet
-poemlet
-Poephaga
-poephagous
-Poephagus
-poesie
-poesiless
-poesis
-poesy
-poet
-poetaster
-poetastering
-poetasterism
-poetastery
-poetastress
-poetastric
-poetastrical
-poetastry
-poetcraft
-poetdom
-poetesque
-poetess
-poethood
-poetic
-poetical
-poeticality
-poetically
-poeticalness
-poeticism
-poeticize
-poeticness
-poetics
-poeticule
-poetito
-poetization
-poetize
-poetizer
-poetless
-poetlike
-poetling
-poetly
-poetomachia
-poetress
-poetry
-poetryless
-poetship
-poetwise
-pogamoggan
-pogge
-poggy
-Pogo
-Pogonatum
-Pogonia
-pogoniasis
-pogoniate
-pogonion
-pogonip
-pogoniris
-pogonite
-pogonological
-pogonologist
-pogonology
-pogonotomy
-pogonotrophy
-pogrom
-pogromist
-pogromize
-pogy
-poh
-poha
-pohickory
-pohna
-pohutukawa
-poi
-Poiana
-Poictesme
-poietic
-poignance
-poignancy
-poignant
-poignantly
-poignet
-poikilitic
-poikiloblast
-poikiloblastic
-poikilocyte
-poikilocythemia
-poikilocytosis
-poikilotherm
-poikilothermic
-poikilothermism
-poil
-poilu
-poimenic
-poimenics
-Poinciana
-poind
-poindable
-poinder
-poinding
-Poinsettia
-point
-pointable
-pointage
-pointed
-pointedly
-pointedness
-pointel
-pointer
-pointful
-pointfully
-pointfulness
-pointillism
-pointillist
-pointing
-pointingly
-pointless
-pointlessly
-pointlessness
-pointlet
-pointleted
-pointmaker
-pointman
-pointment
-pointrel
-pointsman
-pointswoman
-pointways
-pointwise
-pointy
-poisable
-poise
-poised
-poiser
-poison
-poisonable
-poisonful
-poisonfully
-poisoning
-poisonless
-poisonlessness
-poisonmaker
-poisonous
-poisonously
-poisonousness
-poisonproof
-poisonweed
-poisonwood
-poitrail
-poitrel
-poivrade
-pokable
-Pokan
-Pokanoket
-poke
-pokeberry
-poked
-pokeful
-pokeloken
-pokeout
-poker
-pokerish
-pokerishly
-pokerishness
-pokeroot
-pokeweed
-pokey
-pokily
-pokiness
-poking
-Pokom
-Pokomam
-Pokomo
-pokomoo
-Pokonchi
-pokunt
-poky
-pol
-Polab
-Polabian
-Polabish
-polacca
-Polack
-polack
-polacre
-Polander
-Polanisia
-polar
-polaric
-Polarid
-polarigraphic
-polarimeter
-polarimetric
-polarimetry
-Polaris
-polariscope
-polariscopic
-polariscopically
-polariscopist
-polariscopy
-polaristic
-polaristrobometer
-polarity
-polarizability
-polarizable
-polarization
-polarize
-polarizer
-polarly
-polarogram
-polarograph
-polarographic
-polarographically
-polarography
-Polaroid
-polarward
-polaxis
-poldavis
-poldavy
-polder
-polderboy
-polderman
-Pole
-pole
-polearm
-poleax
-poleaxe
-poleaxer
-poleburn
-polecat
-polehead
-poleless
-poleman
-polemarch
-polemic
-polemical
-polemically
-polemician
-polemicist
-polemics
-polemist
-polemize
-Polemoniaceae
-polemoniaceous
-Polemoniales
-Polemonium
-polemoscope
-polenta
-poler
-polesetter
-Polesian
-polesman
-polestar
-poleward
-polewards
-poley
-poliad
-poliadic
-Polian
-polianite
-Polianthes
-police
-policed
-policedom
-policeless
-policeman
-policemanish
-policemanism
-policemanlike
-policemanship
-policewoman
-Polichinelle
-policial
-policize
-policizer
-policlinic
-policy
-policyholder
-poliencephalitis
-poliencephalomyelitis
-poligar
-poligarship
-poligraphical
-Polinices
-polio
-polioencephalitis
-polioencephalomyelitis
-poliomyelitis
-poliomyelopathy
-polioneuromere
-poliorcetic
-poliorcetics
-poliosis
-polis
-Polish
-polish
-polishable
-polished
-polishedly
-polishedness
-polisher
-polishment
-polisman
-polissoir
-Polistes
-politarch
-politarchic
-Politbureau
-Politburo
-polite
-politeful
-politely
-politeness
-politesse
-politic
-political
-politicalism
-politicalize
-politically
-politicaster
-politician
-politicious
-politicist
-politicize
-politicizer
-politicly
-politico
-politicomania
-politicophobia
-politics
-politied
-Politique
-politist
-politize
-polity
-politzerization
-politzerize
-polk
-polka
-Poll
-poll
-pollable
-pollack
-polladz
-pollage
-pollakiuria
-pollam
-pollan
-pollarchy
-pollard
-pollbook
-polled
-pollen
-pollened
-polleniferous
-pollenigerous
-pollenite
-pollenivorous
-pollenless
-pollenlike
-pollenproof
-pollent
-poller
-polleten
-pollex
-pollical
-pollicar
-pollicate
-pollicitation
-pollinar
-pollinarium
-pollinate
-pollination
-pollinator
-pollinctor
-pollincture
-polling
-pollinia
-pollinic
-pollinical
-polliniferous
-pollinigerous
-pollinium
-pollinivorous
-pollinization
-pollinize
-pollinizer
-pollinodial
-pollinodium
-pollinoid
-pollinose
-pollinosis
-polliwig
-polliwog
-pollock
-polloi
-pollster
-pollucite
-pollutant
-pollute
-polluted
-pollutedly
-pollutedness
-polluter
-polluting
-pollutingly
-pollution
-Pollux
-pollux
-Polly
-Pollyanna
-Pollyannish
-pollywog
-polo
-poloconic
-polocyte
-poloist
-polonaise
-Polonese
-Polonia
-Polonial
-Polonian
-Polonism
-polonium
-Polonius
-Polonization
-Polonize
-polony
-polos
-polska
-polt
-poltergeist
-poltfoot
-poltfooted
-poltina
-poltinnik
-poltophagic
-poltophagist
-poltophagy
-poltroon
-poltroonery
-poltroonish
-poltroonishly
-poltroonism
-poluphloisboic
-poluphloisboiotatotic
-poluphloisboiotic
-polverine
-poly
-polyacanthus
-polyacid
-polyacoustic
-polyacoustics
-polyact
-polyactinal
-polyactine
-Polyactinia
-polyad
-polyadelph
-Polyadelphia
-polyadelphian
-polyadelphous
-polyadenia
-polyadenitis
-polyadenoma
-polyadenous
-polyadic
-polyaffectioned
-polyalcohol
-polyamide
-polyamylose
-Polyandria
-polyandria
-polyandrian
-polyandrianism
-polyandric
-polyandrious
-polyandrism
-polyandrist
-polyandrium
-polyandrous
-polyandry
-Polyangium
-polyangular
-polyantha
-polyanthous
-polyanthus
-polyanthy
-polyarch
-polyarchal
-polyarchical
-polyarchist
-polyarchy
-polyarteritis
-polyarthric
-polyarthritic
-polyarthritis
-polyarthrous
-polyarticular
-polyatomic
-polyatomicity
-polyautographic
-polyautography
-polyaxial
-polyaxon
-polyaxone
-polyaxonic
-polybasic
-polybasicity
-polybasite
-polyblast
-Polyborinae
-polyborine
-Polyborus
-polybranch
-Polybranchia
-polybranchian
-Polybranchiata
-polybranchiate
-polybromid
-polybromide
-polybunous
-polybuny
-polybuttoned
-polycarboxylic
-Polycarp
-polycarpellary
-polycarpic
-Polycarpon
-polycarpous
-polycarpy
-polycellular
-polycentral
-polycentric
-polycephalic
-polycephalous
-polycephaly
-Polychaeta
-polychaete
-polychaetous
-polychasial
-polychasium
-polychloride
-polychoerany
-polychord
-polychotomous
-polychotomy
-polychrest
-polychrestic
-polychrestical
-polychresty
-polychroic
-polychroism
-polychromasia
-polychromate
-polychromatic
-polychromatism
-polychromatist
-polychromatize
-polychromatophil
-polychromatophile
-polychromatophilia
-polychromatophilic
-polychrome
-polychromia
-polychromic
-polychromism
-polychromize
-polychromous
-polychromy
-polychronious
-polyciliate
-polycitral
-polyclad
-Polycladida
-polycladine
-polycladose
-polycladous
-polyclady
-Polycletan
-polyclinic
-polyclona
-polycoccous
-Polycodium
-polyconic
-polycormic
-polycotyl
-polycotyledon
-polycotyledonary
-polycotyledonous
-polycotyledony
-polycotylous
-polycotyly
-polycracy
-polycrase
-polycratic
-polycrotic
-polycrotism
-polycrystalline
-polyctenid
-Polyctenidae
-polycttarian
-polycyanide
-polycyclic
-polycycly
-polycyesis
-polycystic
-polycythemia
-polycythemic
-Polycyttaria
-polydactyl
-polydactyle
-polydactylism
-polydactylous
-Polydactylus
-polydactyly
-polydaemoniac
-polydaemonism
-polydaemonist
-polydaemonistic
-polydemic
-polydenominational
-polydental
-polydermous
-polydermy
-polydigital
-polydimensional
-polydipsia
-polydisperse
-polydomous
-polydymite
-polydynamic
-polyeidic
-polyeidism
-polyembryonate
-polyembryonic
-polyembryony
-polyemia
-polyemic
-polyenzymatic
-polyergic
-Polyergus
-polyester
-polyesthesia
-polyesthetic
-polyethnic
-polyethylene
-polyfenestral
-polyflorous
-polyfoil
-polyfold
-Polygala
-Polygalaceae
-polygalaceous
-polygalic
-polygam
-Polygamia
-polygamian
-polygamic
-polygamical
-polygamically
-polygamist
-polygamistic
-polygamize
-polygamodioecious
-polygamous
-polygamously
-polygamy
-polyganglionic
-polygastric
-polygene
-polygenesic
-polygenesis
-polygenesist
-polygenetic
-polygenetically
-polygenic
-polygenism
-polygenist
-polygenistic
-polygenous
-polygeny
-polyglandular
-polyglobulia
-polyglobulism
-polyglossary
-polyglot
-polyglotry
-polyglottal
-polyglottally
-polyglotted
-polyglotter
-polyglottery
-polyglottic
-polyglottically
-polyglottism
-polyglottist
-polyglottonic
-polyglottous
-polyglotwise
-polyglycerol
-polygon
-Polygonaceae
-polygonaceous
-polygonal
-Polygonales
-polygonally
-Polygonatum
-Polygonella
-polygoneutic
-polygoneutism
-Polygonia
-polygonic
-polygonically
-polygonoid
-polygonous
-Polygonum
-polygony
-Polygordius
-polygram
-polygrammatic
-polygraph
-polygrapher
-polygraphic
-polygraphy
-polygroove
-polygrooved
-polygyn
-polygynaiky
-Polygynia
-polygynian
-polygynic
-polygynious
-polygynist
-polygynoecial
-polygynous
-polygyny
-polygyral
-polygyria
-polyhaemia
-polyhaemic
-polyhalide
-polyhalite
-polyhalogen
-polyharmonic
-polyharmony
-polyhedral
-polyhedric
-polyhedrical
-polyhedroid
-polyhedron
-polyhedrosis
-polyhedrous
-polyhemia
-polyhidrosis
-polyhistor
-polyhistorian
-polyhistoric
-polyhistory
-polyhybrid
-polyhydric
-polyhydroxy
-polyideic
-polyideism
-polyidrosis
-polyiodide
-polykaryocyte
-polylaminated
-polylemma
-polylepidous
-polylinguist
-polylith
-polylithic
-polylobular
-polylogy
-polyloquent
-polymagnet
-polymastia
-polymastic
-Polymastiga
-polymastigate
-Polymastigida
-Polymastigina
-polymastigous
-polymastism
-Polymastodon
-polymastodont
-polymasty
-polymath
-polymathic
-polymathist
-polymathy
-polymazia
-polymelia
-polymelian
-polymely
-polymer
-polymere
-polymeria
-polymeric
-polymeride
-polymerism
-polymerization
-polymerize
-polymerous
-polymetallism
-polymetameric
-polymeter
-polymethylene
-polymetochia
-polymetochic
-polymicrian
-polymicrobial
-polymicrobic
-polymicroscope
-polymignite
-Polymixia
-polymixiid
-Polymixiidae
-Polymnestor
-Polymnia
-polymnite
-polymolecular
-polymolybdate
-polymorph
-Polymorpha
-polymorphean
-polymorphic
-polymorphism
-polymorphistic
-polymorphonuclear
-polymorphonucleate
-polymorphosis
-polymorphous
-polymorphy
-Polymyaria
-polymyarian
-Polymyarii
-Polymyodi
-polymyodian
-polymyodous
-polymyoid
-polymyositis
-polymythic
-polymythy
-polynaphthene
-polynemid
-Polynemidae
-polynemoid
-Polynemus
-Polynesian
-polynesic
-polyneural
-polyneuric
-polyneuritic
-polyneuritis
-polyneuropathy
-polynodal
-Polynoe
-polynoid
-Polynoidae
-polynome
-polynomial
-polynomialism
-polynomialist
-polynomic
-polynucleal
-polynuclear
-polynucleate
-polynucleated
-polynucleolar
-polynucleosis
-Polyodon
-polyodont
-polyodontal
-polyodontia
-Polyodontidae
-polyodontoid
-polyoecious
-polyoeciously
-polyoeciousness
-polyoecism
-polyoecy
-polyoicous
-polyommatous
-polyonomous
-polyonomy
-polyonychia
-polyonym
-polyonymal
-polyonymic
-polyonymist
-polyonymous
-polyonymy
-polyophthalmic
-polyopia
-polyopic
-polyopsia
-polyopsy
-polyorama
-polyorchidism
-polyorchism
-polyorganic
-polyose
-polyoxide
-polyoxymethylene
-polyp
-polypage
-polypaged
-polypapilloma
-polyparasitic
-polyparasitism
-polyparesis
-polyparia
-polyparian
-polyparium
-polyparous
-polypary
-polypean
-polyped
-Polypedates
-polypeptide
-polypetal
-Polypetalae
-polypetalous
-Polyphaga
-polyphage
-polyphagia
-polyphagian
-polyphagic
-polyphagist
-polyphagous
-polyphagy
-polyphalangism
-polypharmacal
-polypharmacist
-polypharmacon
-polypharmacy
-polypharmic
-polyphasal
-polyphase
-polyphaser
-Polypheme
-polyphemian
-polyphemic
-polyphemous
-polyphenol
-polyphloesboean
-polyphloisboioism
-polyphloisboism
-polyphobia
-polyphobic
-polyphone
-polyphoned
-polyphonia
-polyphonic
-polyphonical
-polyphonism
-polyphonist
-polyphonium
-polyphonous
-polyphony
-polyphore
-polyphosphoric
-polyphotal
-polyphote
-polyphylesis
-polyphyletic
-polyphyletically
-polyphylety
-polyphylline
-polyphyllous
-polyphylly
-polyphylogeny
-polyphyly
-polyphyodont
-Polypi
-polypi
-polypian
-polypide
-polypidom
-Polypifera
-polypiferous
-polypigerous
-polypinnate
-polypite
-Polyplacophora
-polyplacophoran
-polyplacophore
-polyplacophorous
-polyplastic
-Polyplectron
-polyplegia
-polyplegic
-polyploid
-polyploidic
-polyploidy
-polypnoea
-polypnoeic
-polypod
-Polypoda
-polypodia
-Polypodiaceae
-polypodiaceous
-Polypodium
-polypodous
-polypody
-polypoid
-polypoidal
-Polypomorpha
-polypomorphic
-Polyporaceae
-polyporaceous
-polypore
-polyporite
-polyporoid
-polyporous
-Polyporus
-polypose
-polyposis
-polypotome
-polypous
-polypragmacy
-polypragmatic
-polypragmatical
-polypragmatically
-polypragmatism
-polypragmatist
-polypragmaty
-polypragmist
-polypragmon
-polypragmonic
-polypragmonist
-polyprene
-polyprism
-polyprismatic
-polyprothetic
-polyprotodont
-Polyprotodontia
-polypseudonymous
-polypsychic
-polypsychical
-polypsychism
-polypterid
-Polypteridae
-polypteroid
-Polypterus
-polyptote
-polyptoton
-polyptych
-polypus
-polyrhizal
-polyrhizous
-polyrhythmic
-polyrhythmical
-polysaccharide
-polysaccharose
-Polysaccum
-polysalicylide
-polysarcia
-polysarcous
-polyschematic
-polyschematist
-polyscope
-polyscopic
-polysemant
-polysemantic
-polysemeia
-polysemia
-polysemous
-polysemy
-polysensuous
-polysensuousness
-polysepalous
-polyseptate
-polyserositis
-polysided
-polysidedness
-polysilicate
-polysilicic
-Polysiphonia
-polysiphonic
-polysiphonous
-polysomatic
-polysomatous
-polysomaty
-polysomia
-polysomic
-polysomitic
-polysomous
-polysomy
-polyspast
-polyspaston
-polyspermal
-polyspermatous
-polyspermia
-polyspermic
-polyspermous
-polyspermy
-polyspondylic
-polyspondylous
-polyspondyly
-Polyspora
-polysporangium
-polyspore
-polyspored
-polysporic
-polysporous
-polystachyous
-polystaurion
-polystele
-polystelic
-polystemonous
-polystichoid
-polystichous
-Polystichum
-Polystictus
-Polystomata
-Polystomatidae
-polystomatous
-polystome
-Polystomea
-Polystomella
-Polystomidae
-polystomium
-polystylar
-polystyle
-polystylous
-polystyrene
-polysulphide
-polysulphuration
-polysulphurization
-polysyllabic
-polysyllabical
-polysyllabically
-polysyllabicism
-polysyllabicity
-polysyllabism
-polysyllable
-polysyllogism
-polysyllogistic
-polysymmetrical
-polysymmetrically
-polysymmetry
-polysyndetic
-polysyndetically
-polysyndeton
-polysynthesis
-polysynthesism
-polysynthetic
-polysynthetical
-polysynthetically
-polysyntheticism
-polysynthetism
-polysynthetize
-polytechnic
-polytechnical
-polytechnics
-polytechnist
-polyterpene
-Polythalamia
-polythalamian
-polythalamic
-polythalamous
-polythecial
-polytheism
-polytheist
-polytheistic
-polytheistical
-polytheistically
-polytheize
-polythelia
-polythelism
-polythely
-polythene
-polythionic
-polytitanic
-polytocous
-polytokous
-polytoky
-polytomous
-polytomy
-polytonal
-polytonalism
-polytonality
-polytone
-polytonic
-polytony
-polytope
-polytopic
-polytopical
-Polytrichaceae
-polytrichaceous
-polytrichia
-polytrichous
-Polytrichum
-polytrochal
-polytrochous
-polytrope
-polytrophic
-polytropic
-polytungstate
-polytungstic
-polytype
-polytypic
-polytypical
-polytypy
-polyuresis
-polyuria
-polyuric
-polyvalence
-polyvalent
-polyvinyl
-polyvinylidene
-polyvirulent
-polyvoltine
-Polyzoa
-polyzoal
-polyzoan
-polyzoarial
-polyzoarium
-polyzoary
-polyzoic
-polyzoism
-polyzonal
-polyzooid
-polyzoon
-polzenite
-pom
-pomace
-Pomaceae
-pomacentrid
-Pomacentridae
-pomacentroid
-Pomacentrus
-pomaceous
-pomade
-Pomaderris
-Pomak
-pomander
-pomane
-pomarine
-pomarium
-pomate
-pomato
-pomatomid
-Pomatomidae
-Pomatomus
-pomatorhine
-pomatum
-pombe
-pombo
-pome
-pomegranate
-pomelo
-Pomeranian
-pomeridian
-pomerium
-pomewater
-pomey
-pomfret
-pomiculture
-pomiculturist
-pomiferous
-pomiform
-pomivorous
-Pommard
-pomme
-pommee
-pommel
-pommeled
-pommeler
-pommet
-pommey
-pommy
-Pomo
-pomological
-pomologically
-pomologist
-pomology
-Pomona
-pomonal
-pomonic
-pomp
-pompa
-Pompadour
-pompadour
-pompal
-pompano
-Pompeian
-Pompeii
-pompelmous
-Pompey
-pompey
-pompholix
-pompholygous
-pompholyx
-pomphus
-pompier
-pompilid
-Pompilidae
-pompiloid
-Pompilus
-pompion
-pompist
-pompless
-pompoleon
-pompon
-pomposity
-pompous
-pompously
-pompousness
-pompster
-Pomptine
-pomster
-pon
-Ponca
-ponce
-ponceau
-poncelet
-poncho
-ponchoed
-Poncirus
-pond
-pondage
-pondbush
-ponder
-ponderability
-ponderable
-ponderableness
-ponderal
-ponderance
-ponderancy
-ponderant
-ponderary
-ponderate
-ponderation
-ponderative
-ponderer
-pondering
-ponderingly
-ponderling
-ponderment
-ponderomotive
-ponderosapine
-ponderosity
-ponderous
-ponderously
-ponderousness
-pondfish
-pondful
-pondgrass
-pondlet
-pondman
-Pondo
-pondok
-pondokkie
-Pondomisi
-pondside
-pondus
-pondweed
-pondwort
-pondy
-pone
-ponent
-Ponera
-Poneramoeba
-ponerid
-Poneridae
-Ponerinae
-ponerine
-poneroid
-ponerology
-poney
-pong
-ponga
-pongee
-Pongidae
-Pongo
-poniard
-ponica
-ponier
-ponja
-pont
-Pontac
-Pontacq
-pontage
-pontal
-Pontederia
-Pontederiaceae
-pontederiaceous
-pontee
-pontes
-pontianak
-Pontic
-pontic
-ponticello
-ponticular
-ponticulus
-pontifex
-pontiff
-pontific
-pontifical
-pontificalia
-pontificalibus
-pontificality
-pontifically
-pontificate
-pontification
-pontifices
-pontificial
-pontificially
-pontificious
-pontify
-pontil
-pontile
-pontin
-Pontine
-pontine
-pontist
-pontlevis
-ponto
-Pontocaspian
-pontocerebellar
-ponton
-pontonier
-pontoon
-pontooneer
-pontooner
-pontooning
-Pontus
-pontvolant
-pony
-ponzite
-pooa
-pooch
-pooder
-poodle
-poodledom
-poodleish
-poodleship
-poof
-poogye
-pooh
-poohpoohist
-pook
-pooka
-pookaun
-pookoo
-pool
-pooler
-pooli
-poolroom
-poolroot
-poolside
-poolwort
-pooly
-poon
-poonac
-poonga
-poonghie
-poop
-pooped
-poophyte
-poophytic
-poor
-poorhouse
-poorish
-poorliness
-poorling
-poorly
-poorlyish
-poormaster
-poorness
-poorweed
-poorwill
-poot
-Pop
-pop
-popadam
-popal
-popcorn
-popdock
-pope
-Popean
-popedom
-popeholy
-popehood
-popeism
-popeler
-popeless
-popelike
-popeline
-popely
-popery
-popeship
-popess
-popeye
-popeyed
-popglove
-popgun
-popgunner
-popgunnery
-Popian
-popify
-popinac
-popinjay
-Popish
-popish
-popishly
-popishness
-popjoy
-poplar
-poplared
-Poplilia
-poplin
-poplinette
-popliteal
-popliteus
-poplolly
-Popocracy
-Popocrat
-Popolari
-Popoloco
-popomastic
-popover
-Popovets
-poppa
-poppability
-poppable
-poppean
-poppel
-popper
-poppet
-poppethead
-poppied
-poppin
-popple
-popply
-poppy
-poppycock
-poppycockish
-poppyfish
-poppyhead
-poppylike
-poppywort
-popshop
-populace
-popular
-popularism
-Popularist
-popularity
-popularization
-popularize
-popularizer
-popularly
-popularness
-populate
-population
-populational
-populationist
-populationistic
-populationless
-populator
-populicide
-populin
-Populism
-Populist
-Populistic
-populous
-populously
-populousness
-Populus
-popweed
-poral
-porbeagle
-porcate
-porcated
-porcelain
-porcelainization
-porcelainize
-porcelainlike
-porcelainous
-porcelaneous
-porcelanic
-porcelanite
-porcelanous
-Porcellana
-porcellanian
-porcellanid
-Porcellanidae
-porcellanize
-porch
-porched
-porching
-porchless
-porchlike
-porcine
-Porcula
-porcupine
-porcupinish
-pore
-pored
-porelike
-Porella
-porencephalia
-porencephalic
-porencephalitis
-porencephalon
-porencephalous
-porencephalus
-porencephaly
-porer
-porge
-porger
-porgy
-Poria
-poricidal
-Porifera
-poriferal
-poriferan
-poriferous
-poriform
-porimania
-poriness
-poring
-poringly
-poriomanic
-porism
-porismatic
-porismatical
-porismatically
-poristic
-poristical
-porite
-Porites
-Poritidae
-poritoid
-pork
-porkburger
-porker
-porkery
-porket
-porkfish
-porkish
-porkless
-porkling
-porkman
-Porkopolis
-porkpie
-porkwood
-porky
-pornerastic
-pornocracy
-pornocrat
-pornograph
-pornographer
-pornographic
-pornographically
-pornographist
-pornography
-pornological
-Porocephalus
-porodine
-porodite
-porogam
-porogamic
-porogamous
-porogamy
-porokaiwhiria
-porokeratosis
-Porokoto
-poroma
-porometer
-porophyllous
-poroplastic
-poroporo
-pororoca
-poros
-poroscope
-poroscopic
-poroscopy
-porose
-poroseness
-porosimeter
-porosis
-porosity
-porotic
-porotype
-porous
-porously
-porousness
-porpentine
-porphine
-Porphyra
-Porphyraceae
-porphyraceous
-porphyratin
-Porphyrean
-porphyria
-Porphyrian
-porphyrian
-Porphyrianist
-porphyrin
-porphyrine
-porphyrinuria
-Porphyrio
-porphyrion
-porphyrite
-porphyritic
-porphyroblast
-porphyroblastic
-porphyrogene
-porphyrogenite
-porphyrogenitic
-porphyrogenitism
-porphyrogeniture
-porphyrogenitus
-porphyroid
-porphyrophore
-porphyrous
-porphyry
-Porpita
-porpitoid
-porpoise
-porpoiselike
-porporate
-porr
-porraceous
-porrect
-porrection
-porrectus
-porret
-porridge
-porridgelike
-porridgy
-porriginous
-porrigo
-Porrima
-porringer
-porriwiggle
-porry
-port
-porta
-portability
-portable
-portableness
-portably
-portage
-portague
-portahepatis
-portail
-portal
-portaled
-portalled
-portalless
-portamento
-portance
-portass
-portatile
-portative
-portcrayon
-portcullis
-porteacid
-ported
-porteligature
-portend
-portendance
-portendment
-Porteno
-portension
-portent
-portention
-portentosity
-portentous
-portentously
-portentousness
-porteous
-porter
-porterage
-Porteranthus
-porteress
-porterhouse
-porterlike
-porterly
-portership
-portfire
-portfolio
-portglaive
-portglave
-portgrave
-Porthetria
-Portheus
-porthole
-porthook
-porthors
-porthouse
-Portia
-portia
-portico
-porticoed
-portiere
-portiered
-portifory
-portify
-portio
-portiomollis
-portion
-portionable
-portional
-portionally
-portioner
-portionist
-portionize
-portionless
-portitor
-Portlandian
-portlast
-portless
-portlet
-portligature
-portlily
-portliness
-portly
-portman
-portmanmote
-portmanteau
-portmanteaux
-portmantle
-portmantologism
-portment
-portmoot
-porto
-portoise
-portolan
-portolano
-Portor
-portrait
-portraitist
-portraitlike
-portraiture
-portray
-portrayable
-portrayal
-portrayer
-portrayist
-portrayment
-portreeve
-portreeveship
-portress
-portside
-portsider
-portsman
-portuary
-portugais
-Portugal
-Portugalism
-Portugee
-Portuguese
-Portulaca
-Portulacaceae
-portulacaceous
-Portulacaria
-portulan
-Portunalia
-portunian
-Portunidae
-Portunus
-portway
-porty
-porule
-porulose
-porulous
-porus
-porwigle
-pory
-Porzana
-posadaship
-posca
-pose
-Poseidon
-Poseidonian
-posement
-poser
-poseur
-posey
-posh
-posing
-posingly
-posit
-position
-positional
-positioned
-positioner
-positionless
-positival
-positive
-positively
-positiveness
-positivism
-positivist
-positivistic
-positivistically
-positivity
-positivize
-positor
-positron
-positum
-positure
-Posnanian
-posnet
-posole
-posologic
-posological
-posologist
-posology
-pospolite
-poss
-posse
-posseman
-possess
-possessable
-possessed
-possessedly
-possessedness
-possessing
-possessingly
-possessingness
-possession
-possessional
-possessionalism
-possessionalist
-possessionary
-possessionate
-possessioned
-possessioner
-possessionist
-possessionless
-possessionlessness
-possessival
-possessive
-possessively
-possessiveness
-possessor
-possessoress
-possessorial
-possessoriness
-possessorship
-possessory
-posset
-possibilism
-possibilist
-possibilitate
-possibility
-possible
-possibleness
-possibly
-possum
-possumwood
-post
-postabdomen
-postabdominal
-postable
-postabortal
-postacetabular
-postadjunct
-postage
-postal
-postallantoic
-postally
-postalveolar
-postament
-postamniotic
-postanal
-postanesthetic
-postantennal
-postaortic
-postapoplectic
-postappendicular
-postarterial
-postarthritic
-postarticular
-postarytenoid
-postaspirate
-postaspirated
-postasthmatic
-postatrial
-postauditory
-postauricular
-postaxiad
-postaxial
-postaxially
-postaxillary
-postbag
-postbaptismal
-postbox
-postboy
-postbrachial
-postbrachium
-postbranchial
-postbreakfast
-postbronchial
-postbuccal
-postbulbar
-postbursal
-postcaecal
-postcalcaneal
-postcalcarine
-postcanonical
-postcardiac
-postcardinal
-postcarnate
-postcarotid
-postcart
-postcartilaginous
-postcatarrhal
-postcava
-postcaval
-postcecal
-postcenal
-postcentral
-postcentrum
-postcephalic
-postcerebellar
-postcerebral
-postcesarean
-postcibal
-postclassic
-postclassical
-postclassicism
-postclavicle
-postclavicula
-postclavicular
-postclimax
-postclitellian
-postclival
-postcolon
-postcolonial
-postcolumellar
-postcomitial
-postcommissural
-postcommissure
-postcommunicant
-Postcommunion
-postconceptive
-postcondylar
-postconfinement
-postconnubial
-postconsonantal
-postcontact
-postcontract
-postconvalescent
-postconvulsive
-postcordial
-postcornu
-postcosmic
-postcostal
-postcoxal
-postcritical
-postcrural
-postcubital
-postdate
-postdental
-postdepressive
-postdetermined
-postdevelopmental
-postdiagnostic
-postdiaphragmatic
-postdiastolic
-postdicrotic
-postdigestive
-postdigital
-postdiluvial
-postdiluvian
-postdiphtheric
-postdiphtheritic
-postdisapproved
-postdisseizin
-postdisseizor
-postdoctoral
-postdoctorate
-postdural
-postdysenteric
-posted
-posteen
-postelection
-postelementary
-postembryonal
-postembryonic
-postemporal
-postencephalitic
-postencephalon
-postenteral
-postentry
-postepileptic
-poster
-posterette
-posteriad
-posterial
-posterior
-posterioric
-posteriorically
-posterioristic
-posterioristically
-posteriority
-posteriorly
-posteriormost
-posteriors
-posteriorums
-posterish
-posterishness
-posterist
-posterity
-posterize
-postern
-posteroclusion
-posterodorsad
-posterodorsal
-posterodorsally
-posteroexternal
-posteroinferior
-posterointernal
-posterolateral
-posteromedial
-posteromedian
-posteromesial
-posteroparietal
-posterosuperior
-posterotemporal
-posteroterminal
-posteroventral
-posteruptive
-postesophageal
-posteternity
-postethmoid
-postexilian
-postexilic
-postexist
-postexistence
-postexistency
-postexistent
-postface
-postfact
-postfebrile
-postfemoral
-postfetal
-postfix
-postfixal
-postfixation
-postfixed
-postfixial
-postflection
-postflexion
-postform
-postfoveal
-postfrontal
-postfurca
-postfurcal
-postganglionic
-postgangrenal
-postgastric
-postgeminum
-postgenial
-postgeniture
-postglacial
-postglenoid
-postglenoidal
-postgonorrheic
-postgracile
-postgraduate
-postgrippal
-posthabit
-posthaste
-posthemiplegic
-posthemorrhagic
-posthepatic
-posthetomist
-posthetomy
-posthexaplaric
-posthippocampal
-posthitis
-postholder
-posthole
-posthouse
-posthumeral
-posthumous
-posthumously
-posthumousness
-posthumus
-posthyoid
-posthypnotic
-posthypnotically
-posthypophyseal
-posthypophysis
-posthysterical
-postic
-postical
-postically
-posticous
-posticteric
-posticum
-postil
-postilion
-postilioned
-postillate
-postillation
-postillator
-postimpressionism
-postimpressionist
-postimpressionistic
-postinfective
-postinfluenzal
-posting
-postingly
-postintestinal
-postique
-postischial
-postjacent
-postjugular
-postlabial
-postlachrymal
-postlaryngeal
-postlegitimation
-postlenticular
-postless
-postlike
-postliminary
-postliminiary
-postliminious
-postliminium
-postliminous
-postliminy
-postloitic
-postloral
-postlude
-postludium
-postluetic
-postmalarial
-postmamillary
-postmammary
-postman
-postmandibular
-postmaniacal
-postmarital
-postmark
-postmarriage
-postmaster
-postmasterlike
-postmastership
-postmastoid
-postmaturity
-postmaxillary
-postmaximal
-postmeatal
-postmedia
-postmedial
-postmedian
-postmediastinal
-postmediastinum
-postmedullary
-postmeiotic
-postmeningeal
-postmenstrual
-postmental
-postmeridian
-postmeridional
-postmesenteric
-postmillenarian
-postmillenarianism
-postmillennial
-postmillennialism
-postmillennialist
-postmillennian
-postmineral
-postmistress
-postmortal
-postmortuary
-postmundane
-postmuscular
-postmutative
-postmycotic
-postmyxedematous
-postnarial
-postnaris
-postnasal
-postnatal
-postnate
-postnati
-postnecrotic
-postnephritic
-postneural
-postneuralgic
-postneuritic
-postneurotic
-postnodular
-postnominal
-postnotum
-postnuptial
-postnuptially
-postobituary
-postocular
-postolivary
-postomental
-postoperative
-postoptic
-postoral
-postorbital
-postordination
-postorgastic
-postosseous
-postotic
-postpagan
-postpaid
-postpalatal
-postpalatine
-postpalpebral
-postpaludal
-postparalytic
-postparietal
-postparotid
-postparotitic
-postparoxysmal
-postparturient
-postpatellar
-postpathological
-postpericardial
-postpharyngeal
-postphlogistic
-postphragma
-postphrenic
-postphthisic
-postpituitary
-postplace
-postplegic
-postpneumonic
-postponable
-postpone
-postponement
-postponence
-postponer
-postpontile
-postpose
-postposited
-postposition
-postpositional
-postpositive
-postpositively
-postprandial
-postprandially
-postpredicament
-postprophesy
-postprostate
-postpubertal
-postpubescent
-postpubic
-postpubis
-postpuerperal
-postpulmonary
-postpupillary
-postpycnotic
-postpyloric
-postpyramidal
-postpyretic
-postrachitic
-postramus
-postrectal
-postreduction
-postremogeniture
-postremote
-postrenal
-postresurrection
-postresurrectional
-postretinal
-postrheumatic
-postrhinal
-postrider
-postrorse
-postrostral
-postrubeolar
-postsaccular
-postsacral
-postscalenus
-postscapula
-postscapular
-postscapularis
-postscarlatinal
-postscenium
-postscorbutic
-postscribe
-postscript
-postscriptum
-postscutellar
-postscutellum
-postseason
-postsigmoid
-postsign
-postspasmodic
-postsphenoid
-postsphenoidal
-postsphygmic
-postspinous
-postsplenial
-postsplenic
-poststernal
-poststertorous
-postsuppurative
-postsurgical
-postsynaptic
-postsynsacral
-postsyphilitic
-postsystolic
-posttabetic
-posttarsal
-posttetanic
-postthalamic
-postthoracic
-postthyroidal
-posttibial
-posttonic
-posttoxic
-posttracheal
-posttrapezoid
-posttraumatic
-posttreaty
-posttubercular
-posttussive
-posttympanic
-posttyphoid
-postulancy
-postulant
-postulantship
-postulata
-postulate
-postulation
-postulational
-postulator
-postulatory
-postulatum
-postulnar
-postumbilical
-postumbonal
-postural
-posture
-posturer
-postureteric
-posturist
-posturize
-postuterine
-postvaccinal
-postvaricellar
-postvarioloid
-postvelar
-postvenereal
-postvenous
-postverbal
-Postverta
-postvertebral
-postvesical
-postvide
-postvocalic
-postwar
-postward
-postwise
-postwoman
-postxyphoid
-postyard
-postzygapophysial
-postzygapophysis
-posy
-pot
-potability
-potable
-potableness
-potagerie
-potagery
-potamic
-Potamobiidae
-Potamochoerus
-Potamogale
-Potamogalidae
-Potamogeton
-Potamogetonaceae
-potamogetonaceous
-potamological
-potamologist
-potamology
-potamometer
-Potamonidae
-potamophilous
-potamoplankton
-potash
-potashery
-potass
-potassa
-potassamide
-potassic
-potassiferous
-potassium
-potate
-potation
-potative
-potato
-potator
-potatory
-Potawatami
-Potawatomi
-potbank
-potbellied
-potbelly
-potboil
-potboiler
-potboy
-potboydom
-potch
-potcher
-potcherman
-potcrook
-potdar
-pote
-potecary
-poteen
-potence
-potency
-potent
-potentacy
-potentate
-potential
-potentiality
-potentialization
-potentialize
-potentially
-potentialness
-potentiate
-potentiation
-Potentilla
-potentiometer
-potentiometric
-potentize
-potently
-potentness
-poter
-Poterium
-potestal
-potestas
-potestate
-potestative
-poteye
-potful
-potgirl
-potgun
-pothanger
-pothead
-pothecary
-potheen
-pother
-potherb
-potherment
-pothery
-pothole
-pothook
-pothookery
-Pothos
-pothouse
-pothousey
-pothunt
-pothunter
-pothunting
-poticary
-potichomania
-potichomanist
-potifer
-Potiguara
-potion
-potlatch
-potleg
-potlicker
-potlid
-potlike
-potluck
-potmaker
-potmaking
-potman
-potomania
-potomato
-potometer
-potong
-potoo
-Potoroinae
-potoroo
-Potorous
-potpie
-potpourri
-potrack
-potsherd
-potshoot
-potshooter
-potstick
-potstone
-pott
-pottage
-pottagy
-pottah
-potted
-potter
-potterer
-potteress
-potteringly
-pottery
-Pottiaceae
-potting
-pottinger
-pottle
-pottled
-potto
-potty
-potwaller
-potwalling
-potware
-potwhisky
-potwork
-potwort
-pouce
-poucer
-poucey
-pouch
-pouched
-pouchful
-pouchless
-pouchlike
-pouchy
-poudrette
-pouf
-poulaine
-poulard
-poulardize
-poulp
-poulpe
-poult
-poulter
-poulterer
-poulteress
-poultice
-poulticewise
-poultry
-poultrydom
-poultryist
-poultryless
-poultrylike
-poultryman
-poultryproof
-pounamu
-pounce
-pounced
-pouncer
-pouncet
-pouncing
-pouncingly
-pound
-poundage
-poundal
-poundcake
-pounder
-pounding
-poundkeeper
-poundless
-poundlike
-poundman
-poundmaster
-poundmeal
-poundstone
-poundworth
-pour
-pourer
-pourie
-pouring
-pouringly
-pourparler
-pourparley
-pourpiece
-pourpoint
-pourpointer
-pouser
-poussette
-pout
-pouter
-poutful
-pouting
-poutingly
-pouty
-poverish
-poverishment
-poverty
-povertyweed
-Povindah
-pow
-powder
-powderable
-powdered
-powderer
-powderiness
-powdering
-powderization
-powderize
-powderizer
-powderlike
-powderman
-powdery
-powdike
-powdry
-powellite
-power
-powerboat
-powered
-powerful
-powerfully
-powerfulness
-powerhouse
-powerless
-powerlessly
-powerlessness
-powermonger
-Powhatan
-powitch
-powldoody
-pownie
-powsoddy
-powsowdy
-powwow
-powwower
-powwowism
-pox
-poxy
-poy
-poyou
-pozzolanic
-pozzuolana
-pozzuolanic
-praam
-prabble
-prabhu
-practic
-practicability
-practicable
-practicableness
-practicably
-practical
-practicalism
-practicalist
-practicality
-practicalization
-practicalize
-practicalizer
-practically
-practicalness
-practicant
-practice
-practiced
-practicedness
-practicer
-practician
-practicianism
-practicum
-practitional
-practitioner
-practitionery
-prad
-Pradeep
-pradhana
-praeabdomen
-praeacetabular
-praeanal
-praecava
-praecipe
-praecipuum
-praecoces
-praecocial
-praecognitum
-praecoracoid
-praecordia
-praecordial
-praecordium
-praecornu
-praecox
-praecuneus
-praedial
-praedialist
-praediality
-praeesophageal
-praefect
-praefectorial
-praefectus
-praefervid
-praefloration
-praefoliation
-praehallux
-praelabrum
-praelection
-praelector
-praelectorship
-praelectress
-praeludium
-praemaxilla
-praemolar
-praemunire
-praenarial
-Praenestine
-Praenestinian
-praeneural
-praenomen
-praenomina
-praenominal
-praeoperculum
-praepositor
-praepostor
-praepostorial
-praepubis
-praepuce
-praescutum
-Praesepe
-praesertim
-Praesian
-praesidium
-praesphenoid
-praesternal
-praesternum
-praestomium
-praesystolic
-praetaxation
-praetexta
-praetor
-praetorial
-Praetorian
-praetorian
-praetorianism
-praetorium
-praetorship
-praezygapophysis
-pragmatic
-pragmatica
-pragmatical
-pragmaticality
-pragmatically
-pragmaticalness
-pragmaticism
-pragmatics
-pragmatism
-pragmatist
-pragmatistic
-pragmatize
-pragmatizer
-prairie
-prairiecraft
-prairied
-prairiedom
-prairielike
-prairieweed
-prairillon
-praisable
-praisableness
-praisably
-praise
-praiseful
-praisefully
-praisefulness
-praiseless
-praiseproof
-praiser
-praiseworthy
-praising
-praisingly
-praisworthily
-praisworthiness
-Prajapati
-prajna
-Prakash
-Prakrit
-prakriti
-Prakritic
-Prakritize
-praline
-pralltriller
-pram
-Pramnian
-prana
-prance
-pranceful
-prancer
-prancing
-prancingly
-prancy
-prandial
-prandially
-prank
-pranked
-pranker
-prankful
-prankfulness
-pranking
-prankingly
-prankish
-prankishly
-prankishness
-prankle
-pranksome
-pranksomeness
-prankster
-pranky
-prase
-praseocobaltic
-praseodidymium
-praseodymia
-praseodymium
-praseolite
-prasine
-prasinous
-prasoid
-prasophagous
-prasophagy
-prastha
-prat
-pratal
-Pratap
-Pratapwant
-prate
-prateful
-pratement
-pratensian
-Prater
-prater
-pratey
-pratfall
-pratiloma
-Pratincola
-pratincole
-pratincoline
-pratincolous
-prating
-pratingly
-pratique
-pratiyasamutpada
-Pratt
-prattfall
-prattle
-prattlement
-prattler
-prattling
-prattlingly
-prattly
-prau
-Pravin
-pravity
-prawn
-prawner
-prawny
-Praxean
-Praxeanist
-praxinoscope
-praxiology
-praxis
-Praxitelean
-pray
-praya
-prayer
-prayerful
-prayerfully
-prayerfulness
-prayerless
-prayerlessly
-prayerlessness
-prayermaker
-prayermaking
-prayerwise
-prayful
-praying
-prayingly
-prayingwise
-preabdomen
-preabsorb
-preabsorbent
-preabstract
-preabundance
-preabundant
-preabundantly
-preaccept
-preacceptance
-preaccess
-preaccessible
-preaccidental
-preaccidentally
-preaccommodate
-preaccommodating
-preaccommodatingly
-preaccommodation
-preaccomplish
-preaccomplishment
-preaccord
-preaccordance
-preaccount
-preaccounting
-preaccredit
-preaccumulate
-preaccumulation
-preaccusation
-preaccuse
-preaccustom
-preaccustomed
-preacetabular
-preach
-preachable
-preacher
-preacherdom
-preacheress
-preacherize
-preacherless
-preacherling
-preachership
-preachieved
-preachification
-preachify
-preachily
-preachiness
-preaching
-preachingly
-preachman
-preachment
-preachy
-preacid
-preacidity
-preacidly
-preacidness
-preacknowledge
-preacknowledgment
-preacquaint
-preacquaintance
-preacquire
-preacquired
-preacquit
-preacquittal
-preact
-preaction
-preactive
-preactively
-preactivity
-preacute
-preacutely
-preacuteness
-preadamic
-preadamite
-preadamitic
-preadamitical
-preadamitism
-preadapt
-preadaptable
-preadaptation
-preaddition
-preadditional
-preaddress
-preadequacy
-preadequate
-preadequately
-preadhere
-preadherence
-preadherent
-preadjectival
-preadjective
-preadjourn
-preadjournment
-preadjunct
-preadjust
-preadjustable
-preadjustment
-preadministration
-preadministrative
-preadministrator
-preadmire
-preadmirer
-preadmission
-preadmit
-preadmonish
-preadmonition
-preadolescent
-preadopt
-preadoption
-preadoration
-preadore
-preadorn
-preadornment
-preadult
-preadulthood
-preadvance
-preadvancement
-preadventure
-preadvertency
-preadvertent
-preadvertise
-preadvertisement
-preadvice
-preadvisable
-preadvise
-preadviser
-preadvisory
-preadvocacy
-preadvocate
-preaestival
-preaffect
-preaffection
-preaffidavit
-preaffiliate
-preaffiliation
-preaffirm
-preaffirmation
-preaffirmative
-preafflict
-preaffliction
-preafternoon
-preaged
-preaggravate
-preaggravation
-preaggression
-preaggressive
-preagitate
-preagitation
-preagonal
-preagony
-preagree
-preagreement
-preagricultural
-preagriculture
-prealarm
-prealcohol
-prealcoholic
-prealgebra
-prealgebraic
-prealkalic
-preallable
-preallably
-preallegation
-preallege
-prealliance
-preallied
-preallot
-preallotment
-preallow
-preallowable
-preallowably
-preallowance
-preallude
-preallusion
-preally
-prealphabet
-prealphabetical
-prealtar
-prealteration
-prealveolar
-preamalgamation
-preambassadorial
-preambition
-preambitious
-preamble
-preambled
-preambling
-preambular
-preambulary
-preambulate
-preambulation
-preambulatory
-preanal
-preanaphoral
-preanesthetic
-preanimism
-preannex
-preannounce
-preannouncement
-preannouncer
-preantepenult
-preantepenultimate
-preanterior
-preanticipate
-preantiquity
-preantiseptic
-preaortic
-preappearance
-preapperception
-preapplication
-preappoint
-preappointment
-preapprehension
-preapprise
-preapprobation
-preapproval
-preapprove
-preaptitude
-prearm
-prearrange
-prearrangement
-prearrest
-prearrestment
-prearticulate
-preartistic
-preascertain
-preascertainment
-preascitic
-preaseptic
-preassigned
-preassume
-preassurance
-preassure
-preataxic
-preattachment
-preattune
-preaudience
-preauditory
-preaver
-preavowal
-preaxiad
-preaxial
-preaxially
-prebachelor
-prebacillary
-prebake
-prebalance
-preballot
-preballoting
-prebankruptcy
-prebaptismal
-prebaptize
-prebarbaric
-prebarbarous
-prebargain
-prebasal
-prebasilar
-prebeleve
-prebelief
-prebeliever
-prebelieving
-prebellum
-prebeloved
-prebend
-prebendal
-prebendary
-prebendaryship
-prebendate
-prebenediction
-prebeneficiary
-prebenefit
-prebeset
-prebestow
-prebestowal
-prebetray
-prebetrayal
-prebetrothal
-prebid
-prebidding
-prebill
-prebless
-preblessing
-preblockade
-preblooming
-preboast
-preboding
-preboil
-preborn
-preborrowing
-preboyhood
-prebrachial
-prebrachium
-prebreathe
-prebridal
-prebroadcasting
-prebromidic
-prebronchial
-prebronze
-prebrute
-prebuccal
-prebudget
-prebudgetary
-prebullying
-preburlesque
-preburn
-precalculable
-precalculate
-precalculation
-precampaign
-precancel
-precancellation
-precancerous
-precandidacy
-precandidature
-precanning
-precanonical
-precant
-precantation
-precanvass
-precapillary
-precapitalist
-precapitalistic
-precaptivity
-precapture
-precarcinomatous
-precardiac
-precaria
-precarious
-precariously
-precariousness
-precarium
-precarnival
-precartilage
-precartilaginous
-precary
-precast
-precation
-precative
-precatively
-precatory
-precaudal
-precausation
-precaution
-precautional
-precautionary
-precautious
-precautiously
-precautiousness
-precava
-precaval
-precedable
-precede
-precedence
-precedency
-precedent
-precedentable
-precedentary
-precedented
-precedential
-precedentless
-precedently
-preceder
-preceding
-precelebrant
-precelebrate
-precelebration
-precensure
-precensus
-precent
-precentor
-precentorial
-precentorship
-precentory
-precentral
-precentress
-precentrix
-precentrum
-precept
-preception
-preceptist
-preceptive
-preceptively
-preceptor
-preceptoral
-preceptorate
-preceptorial
-preceptorially
-preceptorship
-preceptory
-preceptress
-preceptual
-preceptually
-preceramic
-precerebellar
-precerebral
-precerebroid
-preceremonial
-preceremony
-precertification
-precertify
-preces
-precess
-precession
-precessional
-prechallenge
-prechampioned
-prechampionship
-precharge
-prechart
-precheck
-prechemical
-precherish
-prechildhood
-prechill
-prechloric
-prechloroform
-prechoice
-prechoose
-prechordal
-prechoroid
-preciation
-precinct
-precinction
-precinctive
-preciosity
-precious
-preciously
-preciousness
-precipe
-precipice
-precipiced
-precipitability
-precipitable
-precipitance
-precipitancy
-precipitant
-precipitantly
-precipitantness
-precipitate
-precipitated
-precipitatedly
-precipitately
-precipitation
-precipitative
-precipitator
-precipitin
-precipitinogen
-precipitinogenic
-precipitous
-precipitously
-precipitousness
-precirculate
-precirculation
-precis
-precise
-precisely
-preciseness
-precisian
-precisianism
-precisianist
-precision
-precisional
-precisioner
-precisionism
-precisionist
-precisionize
-precisive
-precitation
-precite
-precited
-precivilization
-preclaim
-preclaimant
-preclaimer
-preclassic
-preclassical
-preclassification
-preclassified
-preclassify
-preclean
-precleaner
-precleaning
-preclerical
-preclimax
-preclinical
-preclival
-precloacal
-preclose
-preclosure
-preclothe
-precludable
-preclude
-preclusion
-preclusive
-preclusively
-precoagulation
-precoccygeal
-precocial
-precocious
-precociously
-precociousness
-precocity
-precogitate
-precogitation
-precognition
-precognitive
-precognizable
-precognizant
-precognize
-precognosce
-precoil
-precoiler
-precoincidence
-precoincident
-precoincidently
-precollapsable
-precollapse
-precollect
-precollectable
-precollection
-precollector
-precollege
-precollegiate
-precollude
-precollusion
-precollusive
-precolor
-precolorable
-precoloration
-precoloring
-precombat
-precombatant
-precombination
-precombine
-precombustion
-precommand
-precommend
-precomment
-precommercial
-precommissural
-precommissure
-precommit
-precommune
-precommunicate
-precommunication
-precommunion
-precompare
-precomparison
-precompass
-precompel
-precompensate
-precompensation
-precompilation
-precompile
-precompiler
-precompleteness
-precompletion
-precompliance
-precompliant
-precomplicate
-precomplication
-precompose
-precomposition
-precompound
-precompounding
-precompoundly
-precomprehend
-precomprehension
-precomprehensive
-precompress
-precompulsion
-precomradeship
-preconceal
-preconcealment
-preconcede
-preconceivable
-preconceive
-preconceived
-preconcentrate
-preconcentrated
-preconcentratedly
-preconcentration
-preconcept
-preconception
-preconceptional
-preconceptual
-preconcern
-preconcernment
-preconcert
-preconcerted
-preconcertedly
-preconcertedness
-preconcertion
-preconcertive
-preconcession
-preconcessive
-preconclude
-preconclusion
-preconcur
-preconcurrence
-preconcurrent
-preconcurrently
-precondemn
-precondemnation
-precondensation
-precondense
-precondition
-preconditioned
-preconduct
-preconduction
-preconductor
-precondylar
-precondyloid
-preconfer
-preconference
-preconfess
-preconfession
-preconfide
-preconfiguration
-preconfigure
-preconfine
-preconfinedly
-preconfinemnt
-preconfirm
-preconfirmation
-preconflict
-preconform
-preconformity
-preconfound
-preconfuse
-preconfusedly
-preconfusion
-precongenial
-precongested
-precongestion
-precongestive
-precongratulate
-precongratulation
-precongressional
-preconizance
-preconization
-preconize
-preconizer
-preconjecture
-preconnection
-preconnective
-preconnubial
-preconquer
-preconquest
-preconquestal
-preconquestual
-preconscious
-preconsciously
-preconsciousness
-preconsecrate
-preconsecration
-preconsent
-preconsider
-preconsideration
-preconsign
-preconsolation
-preconsole
-preconsolidate
-preconsolidated
-preconsolidation
-preconsonantal
-preconspiracy
-preconspirator
-preconspire
-preconstituent
-preconstitute
-preconstruct
-preconstruction
-preconsult
-preconsultation
-preconsultor
-preconsume
-preconsumer
-preconsumption
-precontact
-precontain
-precontained
-precontemn
-precontemplate
-precontemplation
-precontemporaneous
-precontemporary
-precontend
-precontent
-precontention
-precontently
-precontentment
-precontest
-precontinental
-precontract
-precontractive
-precontractual
-precontribute
-precontribution
-precontributive
-precontrivance
-precontrive
-precontrol
-precontrolled
-precontroversial
-precontroversy
-preconvention
-preconversation
-preconversational
-preconversion
-preconvert
-preconvey
-preconveyal
-preconveyance
-preconvict
-preconviction
-preconvince
-precook
-precooker
-precool
-precooler
-precooling
-precopy
-precoracoid
-precordia
-precordial
-precordiality
-precordially
-precordium
-precorneal
-precornu
-precoronation
-precorrect
-precorrection
-precorrectly
-precorrectness
-precorrespond
-precorrespondence
-precorrespondent
-precorridor
-precorrupt
-precorruption
-precorruptive
-precorruptly
-precoruptness
-precosmic
-precosmical
-precostal
-precounsel
-precounsellor
-precourse
-precover
-precovering
-precox
-precreate
-precreation
-precreative
-precredit
-precreditor
-precreed
-precritical
-precriticism
-precriticize
-precrucial
-precrural
-precrystalline
-precultivate
-precultivation
-precultural
-preculturally
-preculture
-precuneal
-precuneate
-precuneus
-precure
-precurrent
-precurricular
-precurriculum
-precursal
-precurse
-precursive
-precursor
-precursory
-precurtain
-precut
-precyclone
-precyclonic
-precynical
-precyst
-precystic
-predable
-predacean
-predaceous
-predaceousness
-predacity
-predamage
-predamn
-predamnation
-predark
-predarkness
-predata
-predate
-predation
-predatism
-predative
-predator
-predatorily
-predatoriness
-predatory
-predawn
-preday
-predaylight
-predaytime
-predazzite
-predealer
-predealing
-predeath
-predeathly
-predebate
-predebater
-predebit
-predebtor
-predecay
-predecease
-predeceaser
-predeceive
-predeceiver
-predeception
-predecession
-predecessor
-predecessorship
-predecide
-predecision
-predecisive
-predeclaration
-predeclare
-predeclination
-predecline
-predecree
-prededicate
-prededuct
-prededuction
-predefault
-predefeat
-predefect
-predefective
-predefence
-predefend
-predefense
-predefiance
-predeficiency
-predeficient
-predefine
-predefinite
-predefinition
-predefray
-predefrayal
-predefy
-predegeneracy
-predegenerate
-predegree
-predeication
-predelay
-predelegate
-predelegation
-predeliberate
-predeliberately
-predeliberation
-predelineate
-predelineation
-predelinquency
-predelinquent
-predelinquently
-predeliver
-predelivery
-predella
-predelude
-predelusion
-predemand
-predemocracy
-predemocratic
-predemonstrate
-predemonstration
-predemonstrative
-predenial
-predental
-predentary
-Predentata
-predentate
-predeny
-predepart
-predepartmental
-predeparture
-predependable
-predependence
-predependent
-predeplete
-predepletion
-predeposit
-predepository
-predepreciate
-predepreciation
-predepression
-predeprivation
-predeprive
-prederivation
-prederive
-predescend
-predescent
-predescribe
-predescription
-predesert
-predeserter
-predesertion
-predeserve
-predeserving
-predesign
-predesignate
-predesignation
-predesignatory
-predesirous
-predesolate
-predesolation
-predespair
-predesperate
-predespicable
-predespise
-predespond
-predespondency
-predespondent
-predestinable
-predestinarian
-predestinarianism
-predestinate
-predestinately
-predestination
-predestinational
-predestinationism
-predestinationist
-predestinative
-predestinator
-predestine
-predestiny
-predestitute
-predestitution
-predestroy
-predestruction
-predetach
-predetachment
-predetail
-predetain
-predetainer
-predetect
-predetention
-predeterminability
-predeterminable
-predeterminant
-predeterminate
-predeterminately
-predetermination
-predeterminative
-predetermine
-predeterminer
-predeterminism
-predeterministic
-predetest
-predetestation
-predetrimental
-predevelop
-predevelopment
-predevise
-predevote
-predevotion
-predevour
-prediagnosis
-prediagnostic
-predial
-prediastolic
-prediatory
-predicability
-predicable
-predicableness
-predicably
-predicament
-predicamental
-predicamentally
-predicant
-predicate
-predication
-predicational
-predicative
-predicatively
-predicator
-predicatory
-predicrotic
-predict
-predictability
-predictable
-predictably
-predictate
-predictation
-prediction
-predictional
-predictive
-predictively
-predictiveness
-predictor
-predictory
-prediet
-predietary
-predifferent
-predifficulty
-predigest
-predigestion
-predikant
-predilect
-predilected
-predilection
-prediligent
-prediligently
-prediluvial
-prediluvian
-prediminish
-prediminishment
-prediminution
-predine
-predinner
-prediphtheritic
-prediploma
-prediplomacy
-prediplomatic
-predirect
-predirection
-predirector
-predisability
-predisable
-predisadvantage
-predisadvantageous
-predisadvantageously
-predisagree
-predisagreeable
-predisagreement
-predisappointment
-predisaster
-predisastrous
-prediscern
-prediscernment
-predischarge
-prediscipline
-predisclose
-predisclosure
-prediscontent
-prediscontented
-prediscontentment
-prediscontinuance
-prediscontinuation
-prediscontinue
-prediscount
-prediscountable
-prediscourage
-prediscouragement
-prediscourse
-prediscover
-prediscoverer
-prediscovery
-prediscreet
-prediscretion
-prediscretionary
-prediscriminate
-prediscrimination
-prediscriminator
-prediscuss
-prediscussion
-predisgrace
-predisguise
-predisgust
-predislike
-predismiss
-predismissal
-predismissory
-predisorder
-predisordered
-predisorderly
-predispatch
-predispatcher
-predisperse
-predispersion
-predisplace
-predisplacement
-predisplay
-predisponency
-predisponent
-predisposable
-predisposal
-predispose
-predisposed
-predisposedly
-predisposedness
-predisposition
-predispositional
-predisputant
-predisputation
-predispute
-predisregard
-predisrupt
-predisruption
-predissatisfaction
-predissolution
-predissolve
-predissuade
-predistinct
-predistinction
-predistinguish
-predistress
-predistribute
-predistribution
-predistributor
-predistrict
-predistrust
-predistrustful
-predisturb
-predisturbance
-prediversion
-predivert
-predivide
-predividend
-predivider
-predivinable
-predivinity
-predivision
-predivorce
-predivorcement
-predoctorate
-predocumentary
-predomestic
-predominance
-predominancy
-predominant
-predominantly
-predominate
-predominately
-predominatingly
-predomination
-predominator
-predonate
-predonation
-predonor
-predoom
-predorsal
-predoubt
-predoubter
-predoubtful
-predraft
-predrainage
-predramatic
-predraw
-predrawer
-predread
-predreadnought
-predrill
-predriller
-predrive
-predriver
-predry
-preduplicate
-preduplication
-predusk
-predwell
-predynamite
-predynastic
-preen
-preener
-preeze
-prefab
-prefabricate
-prefabrication
-prefabricator
-preface
-prefaceable
-prefacer
-prefacial
-prefacist
-prefactor
-prefactory
-prefamiliar
-prefamiliarity
-prefamiliarly
-prefamous
-prefashion
-prefatial
-prefator
-prefatorial
-prefatorially
-prefatorily
-prefatory
-prefavor
-prefavorable
-prefavorably
-prefavorite
-prefearful
-prefearfully
-prefeast
-prefect
-prefectly
-prefectoral
-prefectorial
-prefectorially
-prefectorian
-prefectship
-prefectual
-prefectural
-prefecture
-prefecundation
-prefecundatory
-prefederal
-prefelic
-prefer
-preferability
-preferable
-preferableness
-preferably
-preferee
-preference
-preferent
-preferential
-preferentialism
-preferentialist
-preferentially
-preferment
-prefermentation
-preferred
-preferredly
-preferredness
-preferrer
-preferrous
-prefertile
-prefertility
-prefertilization
-prefertilize
-prefervid
-prefestival
-prefeudal
-prefeudalic
-prefeudalism
-prefiction
-prefictional
-prefigurate
-prefiguration
-prefigurative
-prefiguratively
-prefigurativeness
-prefigure
-prefigurement
-prefiller
-prefilter
-prefinal
-prefinance
-prefinancial
-prefine
-prefinish
-prefix
-prefixable
-prefixal
-prefixally
-prefixation
-prefixed
-prefixedly
-prefixion
-prefixture
-preflagellate
-preflatter
-preflattery
-preflavor
-preflavoring
-preflection
-preflexion
-preflight
-preflood
-prefloration
-preflowering
-prefoliation
-prefool
-preforbidden
-preforceps
-preforgive
-preforgiveness
-preforgotten
-preform
-preformant
-preformation
-preformationary
-preformationism
-preformationist
-preformative
-preformed
-preformism
-preformist
-preformistic
-preformulate
-preformulation
-prefortunate
-prefortunately
-prefortune
-prefoundation
-prefounder
-prefragrance
-prefragrant
-prefrankness
-prefraternal
-prefraternally
-prefraud
-prefreeze
-prefreshman
-prefriendly
-prefriendship
-prefright
-prefrighten
-prefrontal
-prefulfill
-prefulfillment
-prefulgence
-prefulgency
-prefulgent
-prefunction
-prefunctional
-prefuneral
-prefungoidal
-prefurlough
-prefurnish
-pregain
-pregainer
-pregalvanize
-preganglionic
-pregather
-pregathering
-pregeminum
-pregenerate
-pregeneration
-pregenerosity
-pregenerous
-pregenerously
-pregenial
-pregeniculatum
-pregeniculum
-pregenital
-pregeological
-pregirlhood
-preglacial
-pregladden
-pregladness
-preglenoid
-preglenoidal
-preglobulin
-pregnability
-pregnable
-pregnance
-pregnancy
-pregnant
-pregnantly
-pregnantness
-pregolden
-pregolfing
-pregracile
-pregracious
-pregrade
-pregraduation
-pregranite
-pregranitic
-pregratification
-pregratify
-pregreet
-pregreeting
-pregrievance
-pregrowth
-preguarantee
-preguarantor
-preguard
-preguess
-preguidance
-preguide
-preguilt
-preguiltiness
-preguilty
-pregust
-pregustant
-pregustation
-pregustator
-pregustic
-prehallux
-prehalter
-prehandicap
-prehandle
-prehaps
-preharden
-preharmonious
-preharmoniousness
-preharmony
-preharsh
-preharshness
-preharvest
-prehatred
-prehaunt
-prehaunted
-prehaustorium
-prehazard
-prehazardous
-preheal
-prehearing
-preheat
-preheated
-preheater
-prehemiplegic
-prehend
-prehensible
-prehensile
-prehensility
-prehension
-prehensive
-prehensiveness
-prehensor
-prehensorial
-prehensory
-prehepatic
-prehepaticus
-preheroic
-prehesitancy
-prehesitate
-prehesitation
-prehexameral
-prehistorian
-prehistoric
-prehistorical
-prehistorically
-prehistorics
-prehistory
-prehnite
-prehnitic
-preholder
-preholding
-preholiday
-prehorizon
-prehorror
-prehostile
-prehostility
-prehuman
-prehumiliate
-prehumiliation
-prehumor
-prehunger
-prehydration
-prehypophysis
-preidea
-preidentification
-preidentify
-preignition
-preilluminate
-preillumination
-preillustrate
-preillustration
-preimage
-preimaginary
-preimagination
-preimagine
-preimbibe
-preimbue
-preimitate
-preimitation
-preimitative
-preimmigration
-preimpair
-preimpairment
-preimpart
-preimperial
-preimport
-preimportance
-preimportant
-preimportantly
-preimportation
-preimposal
-preimpose
-preimposition
-preimpress
-preimpression
-preimpressive
-preimprove
-preimprovement
-preinaugural
-preinaugurate
-preincarnate
-preincentive
-preinclination
-preincline
-preinclude
-preinclusion
-preincorporate
-preincorporation
-preincrease
-preindebted
-preindebtedness
-preindemnification
-preindemnify
-preindemnity
-preindependence
-preindependent
-preindependently
-preindesignate
-preindicant
-preindicate
-preindication
-preindispose
-preindisposition
-preinduce
-preinducement
-preinduction
-preinductive
-preindulge
-preindulgence
-preindulgent
-preindustrial
-preindustry
-preinfect
-preinfection
-preinfer
-preinference
-preinflection
-preinflectional
-preinflict
-preinfluence
-preinform
-preinformation
-preinhabit
-preinhabitant
-preinhabitation
-preinhere
-preinherit
-preinheritance
-preinitial
-preinitiate
-preinitiation
-preinjure
-preinjurious
-preinjury
-preinquisition
-preinscribe
-preinscription
-preinsert
-preinsertion
-preinsinuate
-preinsinuating
-preinsinuatingly
-preinsinuation
-preinsinuative
-preinspect
-preinspection
-preinspector
-preinspire
-preinstall
-preinstallation
-preinstill
-preinstillation
-preinstruct
-preinstruction
-preinstructional
-preinstructive
-preinsula
-preinsular
-preinsulate
-preinsulation
-preinsult
-preinsurance
-preinsure
-preintellectual
-preintelligence
-preintelligent
-preintelligently
-preintend
-preintention
-preintercede
-preintercession
-preinterchange
-preintercourse
-preinterest
-preinterfere
-preinterference
-preinterpret
-preinterpretation
-preinterpretative
-preinterview
-preintone
-preinvent
-preinvention
-preinventive
-preinventory
-preinvest
-preinvestigate
-preinvestigation
-preinvestigator
-preinvestment
-preinvitation
-preinvite
-preinvocation
-preinvolve
-preinvolvement
-preiotization
-preiotize
-preirrigation
-preirrigational
-preissuance
-preissue
-prejacent
-prejournalistic
-prejudge
-prejudgement
-prejudger
-prejudgment
-prejudication
-prejudicative
-prejudicator
-prejudice
-prejudiced
-prejudicedly
-prejudiceless
-prejudiciable
-prejudicial
-prejudicially
-prejudicialness
-prejudicious
-prejudiciously
-prejunior
-prejurisdiction
-prejustification
-prejustify
-prejuvenile
-Prekantian
-prekindergarten
-prekindle
-preknit
-preknow
-preknowledge
-prelabel
-prelabial
-prelabor
-prelabrum
-prelachrymal
-prelacrimal
-prelacteal
-prelacy
-prelanguage
-prelapsarian
-prelate
-prelatehood
-prelateship
-prelatess
-prelatial
-prelatic
-prelatical
-prelatically
-prelaticalness
-prelation
-prelatish
-prelatism
-prelatist
-prelatize
-prelatry
-prelature
-prelaunch
-prelaunching
-prelawful
-prelawfully
-prelawfulness
-prelease
-prelect
-prelection
-prelector
-prelectorship
-prelectress
-prelecture
-prelegacy
-prelegal
-prelegate
-prelegatee
-prelegend
-prelegendary
-prelegislative
-preliability
-preliable
-prelibation
-preliberal
-preliberality
-preliberally
-preliberate
-preliberation
-prelicense
-prelim
-preliminarily
-preliminary
-prelimit
-prelimitate
-prelimitation
-prelingual
-prelinguistic
-prelinpinpin
-preliquidate
-preliquidation
-preliteral
-preliterally
-preliteralness
-preliterary
-preliterate
-preliterature
-prelithic
-prelitigation
-preloan
-prelocalization
-prelocate
-prelogic
-prelogical
-preloral
-preloreal
-preloss
-prelude
-preluder
-preludial
-preludious
-preludiously
-preludium
-preludize
-prelumbar
-prelusion
-prelusive
-prelusively
-prelusorily
-prelusory
-preluxurious
-premachine
-premadness
-premaintain
-premaintenance
-premake
-premaker
-premaking
-premandibular
-premanhood
-premaniacal
-premanifest
-premanifestation
-premankind
-premanufacture
-premanufacturer
-premanufacturing
-premarital
-premarriage
-premarry
-premastery
-prematch
-premate
-prematerial
-prematernity
-prematrimonial
-prematuration
-premature
-prematurely
-prematureness
-prematurity
-premaxilla
-premaxillary
-premeasure
-premeasurement
-premechanical
-premedia
-premedial
-premedian
-premedic
-premedical
-premedicate
-premedication
-premedieval
-premedievalism
-premeditate
-premeditatedly
-premeditatedness
-premeditatingly
-premeditation
-premeditative
-premeditator
-premegalithic
-prememorandum
-premenace
-premenstrual
-premention
-premeridian
-premerit
-premetallic
-premethodical
-premial
-premiant
-premiate
-premidnight
-premidsummer
-premier
-premieral
-premiere
-premieress
-premierjus
-premiership
-premilitary
-premillenarian
-premillenarianism
-premillennial
-premillennialism
-premillennialist
-premillennialize
-premillennially
-premillennian
-preminister
-preministry
-premious
-premisal
-premise
-premisory
-premisrepresent
-premisrepresentation
-premiss
-premium
-premix
-premixer
-premixture
-premodel
-premodern
-premodification
-premodify
-premolar
-premold
-premolder
-premolding
-premonarchial
-premonetary
-Premongolian
-premonish
-premonishment
-premonition
-premonitive
-premonitor
-premonitorily
-premonitory
-premonopolize
-premonopoly
-Premonstrant
-Premonstratensian
-premonumental
-premoral
-premorality
-premorally
-premorbid
-premorbidly
-premorbidness
-premorning
-premorse
-premortal
-premortification
-premortify
-premortuary
-premosaic
-premotion
-premourn
-premove
-premovement
-premover
-premuddle
-premultiplication
-premultiplier
-premultiply
-premundane
-premunicipal
-premunition
-premunitory
-premusical
-premuster
-premutative
-premutiny
-premycotic
-premyelocyte
-premythical
-prename
-Prenanthes
-prenares
-prenarial
-prenaris
-prenasal
-prenatal
-prenatalist
-prenatally
-prenational
-prenative
-prenatural
-prenaval
-prender
-prendre
-prenebular
-prenecessitate
-preneglect
-preneglectful
-prenegligence
-prenegligent
-prenegotiate
-prenegotiation
-preneolithic
-prenephritic
-preneural
-preneuralgic
-prenight
-prenoble
-prenodal
-prenominal
-prenominate
-prenomination
-prenominical
-prenotation
-prenotice
-prenotification
-prenotify
-prenotion
-prentice
-prenticeship
-prenumber
-prenumbering
-prenuncial
-prenuptial
-prenursery
-preobedience
-preobedient
-preobject
-preobjection
-preobjective
-preobligate
-preobligation
-preoblige
-preobservance
-preobservation
-preobservational
-preobserve
-preobstruct
-preobstruction
-preobtain
-preobtainable
-preobtrude
-preobtrusion
-preobtrusive
-preobviate
-preobvious
-preobviously
-preobviousness
-preoccasioned
-preoccipital
-preocclusion
-preoccultation
-preoccupancy
-preoccupant
-preoccupate
-preoccupation
-preoccupative
-preoccupied
-preoccupiedly
-preoccupiedness
-preoccupier
-preoccupy
-preoccur
-preoccurrence
-preoceanic
-preocular
-preodorous
-preoffend
-preoffense
-preoffensive
-preoffensively
-preoffensiveness
-preoffer
-preoffering
-preofficial
-preofficially
-preominate
-preomission
-preomit
-preopen
-preopening
-preoperate
-preoperation
-preoperative
-preoperatively
-preoperator
-preopercle
-preopercular
-preoperculum
-preopinion
-preopinionated
-preoppose
-preopposition
-preoppress
-preoppression
-preoppressor
-preoptic
-preoptimistic
-preoption
-preoral
-preorally
-preorbital
-preordain
-preorder
-preordination
-preorganic
-preorganization
-preorganize
-preoriginal
-preoriginally
-preornamental
-preoutfit
-preoutline
-preoverthrow
-prep
-prepainful
-prepalatal
-prepalatine
-prepaleolithic
-prepanic
-preparable
-preparation
-preparationist
-preparative
-preparatively
-preparator
-preparatorily
-preparatory
-prepardon
-prepare
-prepared
-preparedly
-preparedness
-preparement
-preparental
-preparer
-preparietal
-preparingly
-preparliamentary
-preparoccipital
-preparoxysmal
-prepartake
-preparticipation
-prepartisan
-prepartition
-prepartnership
-prepatellar
-prepatent
-prepatriotic
-prepave
-prepavement
-prepay
-prepayable
-prepayment
-prepeduncle
-prepenetrate
-prepenetration
-prepenial
-prepense
-prepensely
-prepeople
-preperceive
-preperception
-preperceptive
-preperitoneal
-prepersuade
-prepersuasion
-prepersuasive
-preperusal
-preperuse
-prepetition
-prephragma
-prephthisical
-prepigmental
-prepink
-prepious
-prepituitary
-preplace
-preplacement
-preplacental
-preplan
-preplant
-prepledge
-preplot
-prepoetic
-prepoetical
-prepoison
-prepolice
-prepolish
-prepolitic
-prepolitical
-prepolitically
-prepollence
-prepollency
-prepollent
-prepollex
-preponder
-preponderance
-preponderancy
-preponderant
-preponderantly
-preponderate
-preponderately
-preponderating
-preponderatingly
-preponderation
-preponderous
-preponderously
-prepontile
-prepontine
-preportray
-preportrayal
-prepose
-preposition
-prepositional
-prepositionally
-prepositive
-prepositively
-prepositor
-prepositorial
-prepositure
-prepossess
-prepossessed
-prepossessing
-prepossessingly
-prepossessingness
-prepossession
-prepossessionary
-prepossessor
-preposterous
-preposterously
-preposterousness
-prepostorship
-prepotence
-prepotency
-prepotent
-prepotential
-prepotently
-prepractical
-prepractice
-preprandial
-prepreference
-prepreparation
-preprice
-preprimary
-preprimer
-preprimitive
-preprint
-preprofess
-preprofessional
-preprohibition
-prepromise
-prepromote
-prepromotion
-prepronounce
-prepronouncement
-preprophetic
-preprostatic
-preprove
-preprovide
-preprovision
-preprovocation
-preprovoke
-preprudent
-preprudently
-prepsychological
-prepsychology
-prepuberal
-prepubertal
-prepuberty
-prepubescent
-prepubic
-prepubis
-prepublication
-prepublish
-prepuce
-prepunctual
-prepunish
-prepunishment
-prepupa
-prepupal
-prepurchase
-prepurchaser
-prepurpose
-preputial
-preputium
-prepyloric
-prepyramidal
-prequalification
-prequalify
-prequarantine
-prequestion
-prequotation
-prequote
-preracing
-preradio
-prerailroad
-prerailroadite
-prerailway
-preramus
-prerational
-prereadiness
-preready
-prerealization
-prerealize
-prerebellion
-prereceipt
-prereceive
-prereceiver
-prerecital
-prerecite
-prereckon
-prereckoning
-prerecognition
-prerecognize
-prerecommend
-prerecommendation
-prereconcile
-prereconcilement
-prereconciliation
-prerectal
-preredeem
-preredemption
-prereduction
-prerefer
-prereference
-prerefine
-prerefinement
-prereform
-prereformation
-prereformatory
-prerefusal
-prerefuse
-preregal
-preregister
-preregistration
-preregulate
-preregulation
-prereject
-prerejection
-prerejoice
-prerelate
-prerelation
-prerelationship
-prerelease
-prereligious
-prereluctation
-preremit
-preremittance
-preremorse
-preremote
-preremoval
-preremove
-preremunerate
-preremuneration
-prerenal
-prerent
-prerental
-prereport
-prerepresent
-prerepresentation
-prereption
-prerepublican
-prerequest
-prerequire
-prerequirement
-prerequisite
-prerequisition
-preresemblance
-preresemble
-preresolve
-preresort
-prerespectability
-prerespectable
-prerespiration
-prerespire
-preresponsibility
-preresponsible
-prerestoration
-prerestrain
-prerestraint
-prerestrict
-prerestriction
-prereturn
-prereveal
-prerevelation
-prerevenge
-prereversal
-prereverse
-prereview
-prerevise
-prerevision
-prerevival
-prerevolutionary
-prerheumatic
-prerich
-prerighteous
-prerighteously
-prerighteousness
-prerogatival
-prerogative
-prerogatived
-prerogatively
-prerogativity
-prerolandic
-preromantic
-preromanticism
-preroute
-preroutine
-preroyal
-preroyally
-preroyalty
-prerupt
-preruption
-presacral
-presacrifice
-presacrificial
-presage
-presageful
-presagefully
-presager
-presagient
-presaging
-presagingly
-presalvation
-presanctification
-presanctified
-presanctify
-presanguine
-presanitary
-presartorial
-presatisfaction
-presatisfactory
-presatisfy
-presavage
-presavagery
-presay
-presbyacousia
-presbyacusia
-presbycousis
-presbycusis
-presbyope
-presbyophrenia
-presbyophrenic
-presbyopia
-presbyopic
-presbyopy
-presbyte
-presbyter
-presbyteral
-presbyterate
-presbyterated
-presbyteress
-presbyteria
-presbyterial
-presbyterially
-Presbyterian
-Presbyterianism
-Presbyterianize
-Presbyterianly
-presbyterium
-presbytership
-presbytery
-presbytia
-presbytic
-Presbytinae
-Presbytis
-presbytism
-prescapula
-prescapular
-prescapularis
-prescholastic
-preschool
-prescience
-prescient
-prescientific
-presciently
-prescind
-prescindent
-prescission
-prescored
-prescout
-prescribable
-prescribe
-prescriber
-prescript
-prescriptibility
-prescriptible
-prescription
-prescriptionist
-prescriptive
-prescriptively
-prescriptiveness
-prescriptorial
-prescrive
-prescutal
-prescutum
-preseal
-presearch
-preseason
-preseasonal
-presecular
-presecure
-presee
-preselect
-presell
-preseminal
-preseminary
-presence
-presenced
-presenceless
-presenile
-presenility
-presensation
-presension
-present
-presentability
-presentable
-presentableness
-presentably
-presental
-presentation
-presentational
-presentationism
-presentationist
-presentative
-presentatively
-presentee
-presentence
-presenter
-presential
-presentiality
-presentially
-presentialness
-presentient
-presentiment
-presentimental
-presentist
-presentive
-presentively
-presentiveness
-presently
-presentment
-presentness
-presentor
-preseparate
-preseparation
-preseparator
-preservability
-preservable
-preserval
-preservation
-preservationist
-preservative
-preservatize
-preservatory
-preserve
-preserver
-preserveress
-preses
-presession
-preset
-presettle
-presettlement
-presexual
-preshadow
-preshape
-preshare
-presharpen
-preshelter
-preship
-preshipment
-preshortage
-preshorten
-preshow
-preside
-presidence
-presidencia
-presidency
-president
-presidente
-presidentess
-presidential
-presidentially
-presidentiary
-presidentship
-presider
-presidial
-presidially
-presidiary
-presidio
-presidium
-presift
-presign
-presignal
-presignificance
-presignificancy
-presignificant
-presignification
-presignificative
-presignificator
-presignify
-presimian
-preslavery
-Presley
-presmooth
-presocial
-presocialism
-presocialist
-presolar
-presolicit
-presolicitation
-presolution
-presolve
-presophomore
-presound
-prespecialist
-prespecialize
-prespecific
-prespecifically
-prespecification
-prespecify
-prespeculate
-prespeculation
-presphenoid
-presphenoidal
-presphygmic
-prespinal
-prespinous
-prespiracular
-presplendor
-presplenomegalic
-prespoil
-prespontaneity
-prespontaneous
-prespontaneously
-prespread
-presprinkle
-prespur
-press
-pressable
-pressboard
-pressdom
-pressel
-presser
-pressfat
-pressful
-pressgang
-pressible
-pressing
-pressingly
-pressingness
-pression
-pressive
-pressman
-pressmanship
-pressmark
-pressor
-presspack
-pressroom
-pressurage
-pressural
-pressure
-pressureless
-pressureproof
-pressurize
-pressurizer
-presswoman
-presswork
-pressworker
-prest
-prestabilism
-prestability
-prestable
-prestamp
-prestandard
-prestandardization
-prestandardize
-prestant
-prestate
-prestation
-prestatistical
-presteam
-presteel
-prester
-presternal
-presternum
-prestidigital
-prestidigitate
-prestidigitation
-prestidigitator
-prestidigitatorial
-prestige
-prestigiate
-prestigiation
-prestigiator
-prestigious
-prestigiously
-prestigiousness
-prestimulate
-prestimulation
-prestimulus
-prestissimo
-presto
-prestock
-prestomial
-prestomium
-prestorage
-prestore
-prestraighten
-prestrain
-prestrengthen
-prestress
-prestretch
-prestricken
-prestruggle
-prestubborn
-prestudious
-prestudiously
-prestudiousness
-prestudy
-presubdue
-presubiculum
-presubject
-presubjection
-presubmission
-presubmit
-presubordinate
-presubordination
-presubscribe
-presubscriber
-presubscription
-presubsist
-presubsistence
-presubsistent
-presubstantial
-presubstitute
-presubstitution
-presuccess
-presuccessful
-presuccessfully
-presuffer
-presuffering
-presufficiency
-presufficient
-presufficiently
-presuffrage
-presuggest
-presuggestion
-presuggestive
-presuitability
-presuitable
-presuitably
-presumable
-presumably
-presume
-presumedly
-presumer
-presuming
-presumption
-presumptious
-presumptiously
-presumptive
-presumptively
-presumptuous
-presumptuously
-presumptuousness
-presuperficial
-presuperficiality
-presuperficially
-presuperfluity
-presuperfluous
-presuperfluously
-presuperintendence
-presuperintendency
-presupervise
-presupervision
-presupervisor
-presupplemental
-presupplementary
-presupplicate
-presupplication
-presupply
-presupport
-presupposal
-presuppose
-presupposition
-presuppositionless
-presuppress
-presuppression
-presuppurative
-presupremacy
-presupreme
-presurgery
-presurgical
-presurmise
-presurprisal
-presurprise
-presurrender
-presurround
-presurvey
-presusceptibility
-presusceptible
-presuspect
-presuspend
-presuspension
-presuspicion
-presuspicious
-presuspiciously
-presuspiciousness
-presustain
-presutural
-preswallow
-presylvian
-presympathize
-presympathy
-presymphonic
-presymphony
-presymphysial
-presymptom
-presymptomatic
-presynapsis
-presynaptic
-presystematic
-presystematically
-presystole
-presystolic
-pretabulate
-pretabulation
-pretan
-pretangible
-pretangibly
-pretannage
-pretardily
-pretardiness
-pretardy
-pretariff
-pretaste
-preteach
-pretechnical
-pretechnically
-pretelegraph
-pretelegraphic
-pretelephone
-pretelephonic
-pretell
-pretemperate
-pretemperately
-pretemporal
-pretend
-pretendant
-pretended
-pretendedly
-pretender
-Pretenderism
-pretendership
-pretendingly
-pretendingness
-pretense
-pretenseful
-pretenseless
-pretension
-pretensional
-pretensionless
-pretensive
-pretensively
-pretensiveness
-pretentative
-pretentious
-pretentiously
-pretentiousness
-pretercanine
-preterchristian
-preterconventional
-preterdetermined
-preterdeterminedly
-preterdiplomatic
-preterdiplomatically
-preterequine
-preteressential
-pretergress
-pretergression
-preterhuman
-preterience
-preterient
-preterintentional
-preterist
-preterit
-preteriteness
-preterition
-preteritive
-preteritness
-preterlabent
-preterlegal
-preterlethal
-preterminal
-pretermission
-pretermit
-pretermitter
-preternative
-preternatural
-preternaturalism
-preternaturalist
-preternaturality
-preternaturally
-preternaturalness
-preternormal
-preternotorious
-preternuptial
-preterpluperfect
-preterpolitical
-preterrational
-preterregular
-preterrestrial
-preterritorial
-preterroyal
-preterscriptural
-preterseasonable
-pretersensual
-pretervection
-pretest
-pretestify
-pretestimony
-pretext
-pretexted
-pretextuous
-pretheological
-prethoracic
-prethoughtful
-prethoughtfully
-prethoughtfulness
-prethreaten
-prethrill
-prethrust
-pretibial
-pretimeliness
-pretimely
-pretincture
-pretire
-pretoken
-pretone
-pretonic
-pretorial
-pretorship
-pretorsional
-pretorture
-pretournament
-pretrace
-pretracheal
-pretraditional
-pretrain
-pretraining
-pretransact
-pretransaction
-pretranscribe
-pretranscription
-pretranslate
-pretranslation
-pretransmission
-pretransmit
-pretransport
-pretransportation
-pretravel
-pretreat
-pretreatment
-pretreaty
-pretrematic
-pretribal
-pretry
-prettification
-prettifier
-prettify
-prettikin
-prettily
-prettiness
-pretty
-prettyface
-prettyish
-prettyism
-pretubercular
-pretuberculous
-pretympanic
-pretyphoid
-pretypify
-pretypographical
-pretyrannical
-pretyranny
-pretzel
-preultimate
-preultimately
-preumbonal
-preunderstand
-preundertake
-preunion
-preunite
-preutilizable
-preutilization
-preutilize
-prevacate
-prevacation
-prevaccinate
-prevaccination
-prevail
-prevailance
-prevailer
-prevailingly
-prevailingness
-prevailment
-prevalence
-prevalency
-prevalent
-prevalently
-prevalentness
-prevalescence
-prevalescent
-prevalid
-prevalidity
-prevalidly
-prevaluation
-prevalue
-prevariation
-prevaricate
-prevarication
-prevaricator
-prevaricatory
-prevascular
-prevegetation
-prevelar
-prevenance
-prevenancy
-prevene
-prevenience
-prevenient
-preveniently
-prevent
-preventability
-preventable
-preventative
-preventer
-preventible
-preventingly
-prevention
-preventionism
-preventionist
-preventive
-preventively
-preventiveness
-preventorium
-preventure
-preverb
-preverbal
-preverification
-preverify
-prevernal
-preversion
-prevertebral
-prevesical
-preveto
-previctorious
-previde
-previdence
-preview
-previgilance
-previgilant
-previgilantly
-previolate
-previolation
-previous
-previously
-previousness
-previse
-previsibility
-previsible
-previsibly
-prevision
-previsional
-previsit
-previsitor
-previsive
-previsor
-prevocal
-prevocalic
-prevocally
-prevocational
-prevogue
-prevoid
-prevoidance
-prevolitional
-prevolunteer
-prevomer
-prevotal
-prevote
-prevoyance
-prevoyant
-prevue
-prewar
-prewarn
-prewarrant
-prewash
-preweigh
-prewelcome
-prewhip
-prewilling
-prewillingly
-prewillingness
-prewire
-prewireless
-prewitness
-prewonder
-prewonderment
-preworldliness
-preworldly
-preworship
-preworthily
-preworthiness
-preworthy
-prewound
-prewrap
-prexy
-prey
-preyer
-preyful
-preyingly
-preyouthful
-prezonal
-prezone
-prezygapophysial
-prezygapophysis
-prezygomatic
-Pria
-priacanthid
-Priacanthidae
-priacanthine
-Priacanthus
-Priapean
-Priapic
-priapism
-Priapulacea
-priapulid
-Priapulida
-Priapulidae
-priapuloid
-Priapuloidea
-Priapulus
-Priapus
-Priapusian
-Price
-price
-priceable
-priceably
-priced
-priceite
-priceless
-pricelessness
-pricer
-prich
-prick
-prickant
-pricked
-pricker
-pricket
-prickfoot
-pricking
-prickingly
-prickish
-prickle
-prickleback
-prickled
-pricklefish
-prickless
-prickliness
-prickling
-pricklingly
-pricklouse
-prickly
-pricklyback
-prickmadam
-prickmedainty
-prickproof
-pricks
-prickseam
-prickshot
-prickspur
-pricktimber
-prickwood
-pricky
-pride
-prideful
-pridefully
-pridefulness
-prideless
-pridelessly
-prideling
-prideweed
-pridian
-priding
-pridingly
-pridy
-pried
-prier
-priest
-priestal
-priestcap
-priestcraft
-priestdom
-priesteen
-priestery
-priestess
-priestfish
-priesthood
-priestianity
-priestish
-priestism
-priestless
-priestlet
-priestlike
-priestliness
-priestling
-priestly
-priestship
-priestshire
-prig
-prigdom
-prigger
-priggery
-priggess
-priggish
-priggishly
-priggishness
-priggism
-prighood
-prigman
-prill
-prillion
-prim
-prima
-primacy
-primage
-primal
-primality
-primar
-primarian
-primaried
-primarily
-primariness
-primary
-primatal
-primate
-Primates
-primateship
-primatial
-primatic
-primatical
-primavera
-primaveral
-prime
-primegilt
-primely
-primeness
-primer
-primero
-primerole
-primeval
-primevalism
-primevally
-primeverose
-primevity
-primevous
-primevrin
-Primianist
-primigene
-primigenial
-primigenian
-primigenious
-primigenous
-primigravida
-primine
-priming
-primipara
-primiparity
-primiparous
-primipilar
-primitiae
-primitial
-primitias
-primitive
-primitively
-primitivism
-primitivist
-primitivistic
-primitivity
-primly
-primness
-primogenetrix
-primogenial
-primogenital
-primogenitary
-primogenitive
-primogenitor
-primogeniture
-primogenitureship
-primogenous
-primoprime
-primoprimitive
-primordality
-primordia
-primordial
-primordialism
-primordially
-primordiate
-primordium
-primosity
-primost
-primp
-primrose
-primrosed
-primrosetide
-primrosetime
-primrosy
-primsie
-Primula
-primula
-Primulaceae
-primulaceous
-Primulales
-primulaverin
-primulaveroside
-primulic
-primuline
-Primulinus
-Primus
-primus
-primwort
-primy
-prince
-princeage
-princecraft
-princedom
-princehood
-Princeite
-princekin
-princeless
-princelet
-princelike
-princeliness
-princeling
-princely
-princeps
-princeship
-princess
-princessdom
-princesse
-princesslike
-princessly
-princewood
-princified
-princify
-principal
-principality
-principally
-principalness
-principalship
-principate
-Principes
-principes
-principia
-principiant
-principiate
-principiation
-principium
-principle
-principulus
-princock
-princox
-prine
-pringle
-prink
-prinker
-prinkle
-prinky
-print
-printability
-printable
-printableness
-printed
-printer
-printerdom
-printerlike
-printery
-printing
-printless
-printline
-printscript
-printworks
-Priodon
-priodont
-Priodontes
-prion
-prionid
-Prionidae
-Prioninae
-prionine
-Prionodesmacea
-prionodesmacean
-prionodesmaceous
-prionodesmatic
-Prionodon
-prionodont
-Prionopinae
-prionopine
-Prionops
-Prionus
-prior
-prioracy
-prioral
-priorate
-prioress
-prioristic
-prioristically
-priorite
-priority
-priorly
-priorship
-priory
-prisable
-prisage
-prisal
-priscan
-Priscian
-Priscianist
-Priscilla
-Priscillian
-Priscillianism
-Priscillianist
-prism
-prismal
-prismatic
-prismatical
-prismatically
-prismatization
-prismatize
-prismatoid
-prismatoidal
-prismed
-prismoid
-prismoidal
-prismy
-prisometer
-prison
-prisonable
-prisondom
-prisoner
-prisonful
-prisonlike
-prisonment
-prisonous
-priss
-prissily
-prissiness
-prissy
-pristane
-pristine
-Pristipomatidae
-Pristipomidae
-Pristis
-Pristodus
-pritch
-Pritchardia
-pritchel
-prithee
-prius
-privacity
-privacy
-privant
-private
-privateer
-privateersman
-privately
-privateness
-privation
-privative
-privatively
-privativeness
-privet
-privilege
-privileged
-privileger
-privily
-priviness
-privity
-privy
-prizable
-prize
-prizeable
-prizeholder
-prizeman
-prizer
-prizery
-prizetaker
-prizeworthy
-pro
-proa
-proabolitionist
-proabsolutism
-proabsolutist
-proabstinence
-proacademic
-proacceptance
-proacquisition
-proacquittal
-proaction
-proactor
-proaddition
-proadjournment
-proadministration
-proadmission
-proadoption
-proadvertising
-proaesthetic
-proaggressionist
-proagitation
-proagrarian
-proagreement
-proagricultural
-proagule
-proairesis
-proairplane
-proal
-proalcoholism
-proalien
-proalliance
-proallotment
-proalteration
-proamateur
-proambient
-proamendment
-proamnion
-proamniotic
-proamusement
-proanaphora
-proanaphoral
-proanarchic
-proangiosperm
-proangiospermic
-proangiospermous
-proanimistic
-proannexation
-proannexationist
-proantarctic
-proanthropos
-proapostolic
-proappointment
-proapportionment
-proappreciation
-proappropriation
-proapproval
-proaquatic
-proarbitration
-proarbitrationist
-proarchery
-proarctic
-proaristocratic
-proarmy
-Proarthri
-proassessment
-proassociation
-proatheist
-proatheistic
-proathletic
-proatlas
-proattack
-proattendance
-proauction
-proaudience
-proaulion
-proauthor
-proauthority
-proautomobile
-proavian
-proaviation
-Proavis
-proaward
-prob
-probabiliorism
-probabiliorist
-probabilism
-probabilist
-probabilistic
-probability
-probabilize
-probabl
-probable
-probableness
-probably
-probachelor
-probal
-proballoon
-probang
-probanishment
-probankruptcy
-probant
-probargaining
-probaseball
-probasketball
-probate
-probathing
-probatical
-probation
-probational
-probationary
-probationer
-probationerhood
-probationership
-probationism
-probationist
-probationship
-probative
-probatively
-probator
-probatory
-probattle
-probattleship
-probe
-probeable
-probeer
-prober
-probetting
-probiology
-probituminous
-probity
-problem
-problematic
-problematical
-problematically
-problematist
-problematize
-problemdom
-problemist
-problemistic
-problemize
-problemwise
-problockade
-probonding
-probonus
-proborrowing
-proboscidal
-proboscidate
-Proboscidea
-proboscidean
-proboscideous
-proboscides
-proboscidial
-proboscidian
-proboscidiferous
-proboscidiform
-probosciform
-probosciformed
-Probosciger
-proboscis
-proboscislike
-probouleutic
-proboulevard
-probowling
-proboxing
-proboycott
-probrick
-probridge
-probroadcasting
-probudget
-probudgeting
-probuilding
-probusiness
-probuying
-procacious
-procaciously
-procacity
-procaine
-procambial
-procambium
-procanal
-procancellation
-procapital
-procapitalism
-procapitalist
-procarnival
-procarp
-procarpium
-procarrier
-procatalectic
-procatalepsis
-procatarctic
-procatarxis
-procathedral
-Procavia
-Procaviidae
-procedendo
-procedural
-procedure
-proceed
-proceeder
-proceeding
-proceeds
-proceleusmatic
-Procellaria
-procellarian
-procellarid
-Procellariidae
-Procellariiformes
-procellariine
-procellas
-procello
-procellose
-procellous
-procensorship
-procensure
-procentralization
-procephalic
-procercoid
-procereal
-procerebral
-procerebrum
-proceremonial
-proceremonialism
-proceremonialist
-proceres
-procerite
-proceritic
-procerity
-procerus
-process
-processal
-procession
-processional
-processionalist
-processionally
-processionary
-processioner
-processionist
-processionize
-processionwise
-processive
-processor
-processual
-procharity
-prochein
-prochemical
-prochlorite
-prochondral
-prochoos
-prochordal
-prochorion
-prochorionic
-prochromosome
-prochronic
-prochronism
-prochronize
-prochurch
-prochurchian
-procidence
-procident
-procidentia
-procivic
-procivilian
-procivism
-proclaim
-proclaimable
-proclaimant
-proclaimer
-proclaiming
-proclaimingly
-proclamation
-proclamator
-proclamatory
-proclassic
-proclassical
-proclergy
-proclerical
-proclericalism
-procline
-proclisis
-proclitic
-proclive
-proclivitous
-proclivity
-proclivous
-proclivousness
-Procne
-procnemial
-Procoelia
-procoelia
-procoelian
-procoelous
-procoercive
-procollectivistic
-procollegiate
-procombat
-procombination
-procomedy
-procommemoration
-procomment
-procommercial
-procommission
-procommittee
-procommunal
-procommunism
-procommunist
-procommutation
-procompensation
-procompetition
-procompromise
-procompulsion
-proconcentration
-proconcession
-proconciliation
-procondemnation
-proconfederationist
-proconference
-proconfession
-proconfessionist
-proconfiscation
-proconformity
-Proconnesian
-proconquest
-proconscription
-proconscriptive
-proconservation
-proconservationist
-proconsolidation
-proconstitutional
-proconstitutionalism
-proconsul
-proconsular
-proconsulary
-proconsulate
-proconsulship
-proconsultation
-procontinuation
-proconvention
-proconventional
-proconviction
-procoracoid
-procoracoidal
-procorporation
-procosmetic
-procosmopolitan
-procotton
-procourt
-procrastinate
-procrastinating
-procrastinatingly
-procrastination
-procrastinative
-procrastinatively
-procrastinator
-procrastinatory
-procreant
-procreate
-procreation
-procreative
-procreativeness
-procreator
-procreatory
-procreatress
-procreatrix
-procremation
-Procris
-procritic
-procritique
-Procrustean
-Procrusteanism
-Procrusteanize
-Procrustes
-procrypsis
-procryptic
-procryptically
-proctal
-proctalgia
-proctalgy
-proctatresia
-proctatresy
-proctectasia
-proctectomy
-procteurynter
-proctitis
-proctocele
-proctoclysis
-proctocolitis
-proctocolonoscopy
-proctocystoplasty
-proctocystotomy
-proctodaeal
-proctodaeum
-proctodynia
-proctoelytroplastic
-proctologic
-proctological
-proctologist
-proctology
-proctoparalysis
-proctoplastic
-proctoplasty
-proctoplegia
-proctopolypus
-proctoptoma
-proctoptosis
-proctor
-proctorage
-proctoral
-proctorial
-proctorially
-proctorical
-proctorization
-proctorize
-proctorling
-proctorrhagia
-proctorrhaphy
-proctorrhea
-proctorship
-proctoscope
-proctoscopic
-proctoscopy
-proctosigmoidectomy
-proctosigmoiditis
-proctospasm
-proctostenosis
-proctostomy
-proctotome
-proctotomy
-proctotresia
-proctotrypid
-Proctotrypidae
-proctotrypoid
-Proctotrypoidea
-proctovalvotomy
-Proculian
-procumbent
-procurable
-procuracy
-procural
-procurance
-procurate
-procuration
-procurative
-procurator
-procuratorate
-procuratorial
-procuratorship
-procuratory
-procuratrix
-procure
-procurement
-procurer
-procuress
-procurrent
-procursive
-procurvation
-procurved
-Procyon
-Procyonidae
-procyoniform
-Procyoniformia
-Procyoninae
-procyonine
-proczarist
-prod
-prodatary
-prodder
-proddle
-prodecoration
-prodefault
-prodefiance
-prodelay
-prodelision
-prodemocratic
-Prodenia
-prodenominational
-prodentine
-prodeportation
-prodespotic
-prodespotism
-prodialogue
-prodigal
-prodigalish
-prodigalism
-prodigality
-prodigalize
-prodigally
-prodigiosity
-prodigious
-prodigiously
-prodigiousness
-prodigus
-prodigy
-prodisarmament
-prodisplay
-prodissoconch
-prodissolution
-prodistribution
-prodition
-proditorious
-proditoriously
-prodivision
-prodivorce
-prodproof
-prodramatic
-prodroma
-prodromal
-prodromatic
-prodromatically
-prodrome
-prodromic
-prodromous
-prodromus
-producal
-produce
-produceable
-produceableness
-produced
-producent
-producer
-producership
-producibility
-producible
-producibleness
-product
-producted
-productibility
-productible
-productid
-Productidae
-productile
-production
-productional
-productionist
-productive
-productively
-productiveness
-productivity
-productoid
-productor
-productory
-productress
-Productus
-proecclesiastical
-proeconomy
-proeducation
-proeducational
-proegumenal
-proelectric
-proelectrical
-proelectrification
-proelectrocution
-proelimination
-proem
-proembryo
-proembryonic
-proemial
-proemium
-proemployee
-proemptosis
-proenforcement
-proenlargement
-proenzym
-proenzyme
-proepimeron
-proepiscopist
-proepisternum
-proequality
-proethical
-proethnic
-proethnically
-proetid
-Proetidae
-Proetus
-proevolution
-proevolutionist
-proexamination
-proexecutive
-proexemption
-proexercise
-proexperiment
-proexpert
-proexporting
-proexposure
-proextension
-proextravagance
-prof
-profaculty
-profanable
-profanableness
-profanably
-profanation
-profanatory
-profanchise
-profane
-profanely
-profanement
-profaneness
-profaner
-profanism
-profanity
-profanize
-profarmer
-profection
-profectional
-profectitious
-profederation
-profeminism
-profeminist
-proferment
-profert
-profess
-professable
-professed
-professedly
-profession
-professional
-professionalism
-professionalist
-professionality
-professionalization
-professionalize
-professionally
-professionist
-professionize
-professionless
-professive
-professively
-professor
-professorate
-professordom
-professoress
-professorial
-professorialism
-professorially
-professoriate
-professorlike
-professorling
-professorship
-professory
-proffer
-profferer
-proficience
-proficiency
-proficient
-proficiently
-proficientness
-profiction
-proficuous
-proficuously
-profile
-profiler
-profilist
-profilograph
-profit
-profitability
-profitable
-profitableness
-profitably
-profiteer
-profiteering
-profiter
-profiting
-profitless
-profitlessly
-profitlessness
-profitmonger
-profitmongering
-profitproof
-proflated
-proflavine
-profligacy
-profligate
-profligately
-profligateness
-profligation
-proflogger
-profluence
-profluent
-profluvious
-profluvium
-proforeign
-profound
-profoundly
-profoundness
-profraternity
-profugate
-profulgent
-profunda
-profundity
-profuse
-profusely
-profuseness
-profusion
-profusive
-profusively
-profusiveness
-prog
-progambling
-progamete
-progamic
-proganosaur
-Proganosauria
-progenerate
-progeneration
-progenerative
-progenital
-progenitive
-progenitiveness
-progenitor
-progenitorial
-progenitorship
-progenitress
-progenitrix
-progeniture
-progenity
-progeny
-progeotropic
-progeotropism
-progeria
-progermination
-progestational
-progesterone
-progestin
-progger
-proglottic
-proglottid
-proglottidean
-proglottis
-prognathi
-prognathic
-prognathism
-prognathous
-prognathy
-progne
-prognose
-prognosis
-prognostic
-prognosticable
-prognostically
-prognosticate
-prognostication
-prognosticative
-prognosticator
-prognosticatory
-progoneate
-progospel
-progovernment
-program
-programist
-programistic
-programma
-programmar
-programmatic
-programmatically
-programmatist
-programmer
-progrede
-progrediency
-progredient
-progress
-progresser
-progression
-progressional
-progressionally
-progressionary
-progressionism
-progressionist
-progressism
-progressist
-progressive
-progressively
-progressiveness
-progressivism
-progressivist
-progressivity
-progressor
-proguardian
-Progymnasium
-progymnosperm
-progymnospermic
-progymnospermous
-progypsy
-prohaste
-prohibit
-prohibiter
-prohibition
-prohibitionary
-prohibitionism
-prohibitionist
-prohibitive
-prohibitively
-prohibitiveness
-prohibitor
-prohibitorily
-prohibitory
-proholiday
-prohostility
-prohuman
-prohumanistic
-prohydrotropic
-prohydrotropism
-proidealistic
-proimmunity
-proinclusion
-proincrease
-proindemnity
-proindustrial
-proinjunction
-proinnovationist
-proinquiry
-proinsurance
-prointervention
-proinvestment
-proirrigation
-projacient
-project
-projectable
-projectedly
-projectile
-projecting
-projectingly
-projection
-projectional
-projectionist
-projective
-projectively
-projectivity
-projector
-projectress
-projectrix
-projecture
-projicience
-projicient
-projiciently
-projournalistic
-projudicial
-proke
-prokeimenon
-proker
-prokindergarten
-proklausis
-prolabium
-prolabor
-prolacrosse
-prolactin
-prolamin
-prolan
-prolapse
-prolapsus
-prolarva
-prolarval
-prolate
-prolately
-prolateness
-prolation
-prolative
-prolatively
-proleague
-proleaguer
-prolectite
-proleg
-prolegate
-prolegislative
-prolegomena
-prolegomenal
-prolegomenary
-prolegomenist
-prolegomenon
-prolegomenous
-proleniency
-prolepsis
-proleptic
-proleptical
-proleptically
-proleptics
-proletairism
-proletarian
-proletarianism
-proletarianization
-proletarianize
-proletarianly
-proletarianness
-proletariat
-proletariatism
-proletarization
-proletarize
-proletary
-proletcult
-proleucocyte
-proleukocyte
-prolicense
-prolicidal
-prolicide
-proliferant
-proliferate
-proliferation
-proliferative
-proliferous
-proliferously
-prolific
-prolificacy
-prolifical
-prolifically
-prolificalness
-prolificate
-prolification
-prolificity
-prolificly
-prolificness
-prolificy
-prolify
-proligerous
-proline
-proliquor
-proliterary
-proliturgical
-proliturgist
-prolix
-prolixity
-prolixly
-prolixness
-prolocution
-prolocutor
-prolocutorship
-prolocutress
-prolocutrix
-prologist
-prologize
-prologizer
-prologos
-prologue
-prologuelike
-prologuer
-prologuist
-prologuize
-prologuizer
-prologus
-prolong
-prolongable
-prolongableness
-prolongably
-prolongate
-prolongation
-prolonge
-prolonger
-prolongment
-prolusion
-prolusionize
-prolusory
-prolyl
-promachinery
-promachos
-promagisterial
-promagistracy
-promagistrate
-promajority
-promammal
-Promammalia
-promammalian
-promarriage
-promatrimonial
-promatrimonialist
-promaximum
-promemorial
-promenade
-promenader
-promenaderess
-promercantile
-promercy
-promerger
-promeristem
-promerit
-promeritor
-Promethea
-Promethean
-Prometheus
-promethium
-promic
-promilitarism
-promilitarist
-promilitary
-prominence
-prominency
-prominent
-prominently
-prominimum
-proministry
-prominority
-promisable
-promiscuity
-promiscuous
-promiscuously
-promiscuousness
-promise
-promisee
-promiseful
-promiseless
-promisemonger
-promiseproof
-promiser
-promising
-promisingly
-promisingness
-promisor
-promissionary
-promissive
-promissor
-promissorily
-promissory
-promitosis
-promittor
-promnesia
-promoderation
-promoderationist
-promodernist
-promodernistic
-promonarchic
-promonarchical
-promonarchicalness
-promonarchist
-promonopolist
-promonopoly
-promontoried
-promontory
-promoral
-promorph
-promorphological
-promorphologically
-promorphologist
-promorphology
-promotable
-promote
-promotement
-promoter
-promotion
-promotional
-promotive
-promotiveness
-promotor
-promotorial
-promotress
-promotrix
-promovable
-promovent
-prompt
-promptbook
-prompter
-promptitude
-promptive
-promptly
-promptness
-promptress
-promptuary
-prompture
-promulgate
-promulgation
-promulgator
-promulge
-promulger
-promuscidate
-promuscis
-promycelial
-promycelium
-promythic
-pronaos
-pronate
-pronation
-pronational
-pronationalism
-pronationalist
-pronationalistic
-pronative
-pronatoflexor
-pronator
-pronaval
-pronavy
-prone
-pronegotiation
-pronegro
-pronegroism
-pronely
-proneness
-pronephric
-pronephridiostome
-pronephron
-pronephros
-proneur
-prong
-prongbuck
-pronged
-pronger
-pronghorn
-pronglike
-pronic
-pronograde
-pronominal
-pronominalize
-pronominally
-pronomination
-pronotal
-pronotum
-pronoun
-pronounal
-pronounce
-pronounceable
-pronounced
-pronouncedly
-pronouncement
-pronounceness
-pronouncer
-pronpl
-pronto
-Pronuba
-pronuba
-pronubial
-pronuclear
-pronucleus
-pronumber
-pronunciability
-pronunciable
-pronuncial
-pronunciamento
-pronunciation
-pronunciative
-pronunciator
-pronunciatory
-pronymph
-pronymphal
-proo
-prooemiac
-prooemion
-prooemium
-proof
-proofer
-proofful
-proofing
-proofless
-prooflessly
-proofness
-proofread
-proofreader
-proofreading
-proofroom
-proofy
-prop
-propadiene
-propaedeutic
-propaedeutical
-propaedeutics
-propagability
-propagable
-propagableness
-propagand
-propaganda
-propagandic
-propagandism
-propagandist
-propagandistic
-propagandistically
-propagandize
-propagate
-propagation
-propagational
-propagative
-propagator
-propagatory
-propagatress
-propago
-propagulum
-propale
-propalinal
-propane
-propanedicarboxylic
-propanol
-propanone
-propapist
-proparasceve
-propargyl
-propargylic
-Proparia
-proparian
-proparliamental
-proparoxytone
-proparoxytonic
-proparticipation
-propatagial
-propatagian
-propatagium
-propatriotic
-propatriotism
-propatronage
-propayment
-propellable
-propellant
-propellent
-propeller
-propelment
-propend
-propendent
-propene
-propenoic
-propense
-propensely
-propenseness
-propension
-propensitude
-propensity
-propenyl
-propenylic
-proper
-properispome
-properispomenon
-properitoneal
-properly
-properness
-propertied
-property
-propertyless
-propertyship
-propessimism
-propessimist
-prophase
-prophasis
-prophecy
-prophecymonger
-prophesiable
-prophesier
-prophesy
-prophet
-prophetess
-prophethood
-prophetic
-prophetical
-propheticality
-prophetically
-propheticalness
-propheticism
-propheticly
-prophetism
-prophetize
-prophetless
-prophetlike
-prophetry
-prophetship
-prophilosophical
-prophloem
-prophoric
-prophototropic
-prophototropism
-prophylactic
-prophylactical
-prophylactically
-prophylaxis
-prophylaxy
-prophyll
-prophyllum
-propination
-propine
-propinoic
-propinquant
-propinque
-propinquity
-propinquous
-propiolaldehyde
-propiolate
-propiolic
-propionate
-propione
-Propionibacterieae
-Propionibacterium
-propionic
-propionitril
-propionitrile
-propionyl
-Propithecus
-propitiable
-propitial
-propitiate
-propitiatingly
-propitiation
-propitiative
-propitiator
-propitiatorily
-propitiatory
-propitious
-propitiously
-propitiousness
-proplasm
-proplasma
-proplastic
-propless
-propleural
-propleuron
-proplex
-proplexus
-Propliopithecus
-propodeal
-propodeon
-propodeum
-propodial
-propodiale
-propodite
-propoditic
-propodium
-propolis
-propolitical
-propolization
-propolize
-propone
-proponement
-proponent
-proponer
-propons
-Propontic
-propooling
-propopery
-proportion
-proportionability
-proportionable
-proportionableness
-proportionably
-proportional
-proportionalism
-proportionality
-proportionally
-proportionate
-proportionately
-proportionateness
-proportioned
-proportioner
-proportionless
-proportionment
-proposable
-proposal
-proposant
-propose
-proposer
-proposition
-propositional
-propositionally
-propositionize
-propositus
-propound
-propounder
-propoundment
-propoxy
-proppage
-propper
-propraetor
-propraetorial
-propraetorian
-proprecedent
-propriation
-proprietage
-proprietarian
-proprietariat
-proprietarily
-proprietary
-proprietor
-proprietorial
-proprietorially
-proprietorship
-proprietory
-proprietous
-proprietress
-proprietrix
-propriety
-proprioception
-proprioceptive
-proprioceptor
-propriospinal
-proprium
-proprivilege
-proproctor
-proprofit
-proprovincial
-proprovost
-props
-propterygial
-propterygium
-proptosed
-proptosis
-propublication
-propublicity
-propugnacled
-propugnaculum
-propugnation
-propugnator
-propugner
-propulsation
-propulsatory
-propulsion
-propulsity
-propulsive
-propulsor
-propulsory
-propunishment
-propupa
-propupal
-propurchase
-Propus
-propwood
-propygidium
-propyl
-propylacetic
-propylaeum
-propylamine
-propylation
-propylene
-propylic
-propylidene
-propylite
-propylitic
-propylitization
-propylon
-propyne
-propynoic
-proquaestor
-proracing
-prorailroad
-prorata
-proratable
-prorate
-proration
-prore
-proreader
-prorealism
-prorealist
-prorealistic
-proreality
-prorean
-prorebate
-prorebel
-prorecall
-proreciprocation
-prorecognition
-proreconciliation
-prorector
-prorectorate
-proredemption
-proreduction
-proreferendum
-proreform
-proreformist
-proregent
-prorelease
-Proreptilia
-proreptilian
-proreption
-prorepublican
-proresearch
-proreservationist
-proresignation
-prorestoration
-prorestriction
-prorevision
-prorevisionist
-prorevolution
-prorevolutionary
-prorevolutionist
-prorhinal
-Prorhipidoglossomorpha
-proritual
-proritualistic
-prorogate
-prorogation
-prorogator
-prorogue
-proroguer
-proromance
-proromantic
-proromanticism
-proroyal
-proroyalty
-prorrhesis
-prorsad
-prorsal
-proruption
-prosabbath
-prosabbatical
-prosacral
-prosaic
-prosaical
-prosaically
-prosaicalness
-prosaicism
-prosaicness
-prosaism
-prosaist
-prosar
-Prosarthri
-prosateur
-proscapula
-proscapular
-proscenium
-proscholastic
-proschool
-proscientific
-proscolecine
-proscolex
-proscribable
-proscribe
-proscriber
-proscript
-proscription
-proscriptional
-proscriptionist
-proscriptive
-proscriptively
-proscriptiveness
-proscutellar
-proscutellum
-proscynemata
-prose
-prosecrecy
-prosecretin
-prosect
-prosection
-prosector
-prosectorial
-prosectorium
-prosectorship
-prosecutable
-prosecute
-prosecution
-prosecutor
-prosecutrix
-proselenic
-proselike
-proselyte
-proselyter
-proselytical
-proselytingly
-proselytism
-proselytist
-proselytistic
-proselytization
-proselytize
-proselytizer
-proseman
-proseminar
-proseminary
-proseminate
-prosemination
-prosencephalic
-prosencephalon
-prosenchyma
-prosenchymatous
-proseneschal
-proser
-Proserpinaca
-prosethmoid
-proseucha
-proseuche
-prosification
-prosifier
-prosify
-prosiliency
-prosilient
-prosiliently
-prosilverite
-prosily
-Prosimiae
-prosimian
-prosiness
-prosing
-prosingly
-prosiphon
-prosiphonal
-prosiphonate
-prosish
-prosist
-proslambanomenos
-proslave
-proslaver
-proslavery
-proslaveryism
-prosneusis
-proso
-prosobranch
-Prosobranchia
-Prosobranchiata
-prosobranchiate
-prosocele
-prosodal
-prosode
-prosodemic
-prosodetic
-prosodiac
-prosodiacal
-prosodiacally
-prosodial
-prosodially
-prosodian
-prosodic
-prosodical
-prosodically
-prosodion
-prosodist
-prosodus
-prosody
-prosogaster
-prosogyrate
-prosogyrous
-prosoma
-prosomal
-prosomatic
-prosonomasia
-prosopalgia
-prosopalgic
-prosopantritis
-prosopectasia
-prosophist
-prosopic
-prosopically
-Prosopis
-prosopite
-Prosopium
-prosoplasia
-prosopography
-prosopon
-prosoponeuralgia
-prosopoplegia
-prosopoplegic
-prosopopoeia
-prosopopoeial
-prosoposchisis
-prosopospasm
-prosopotocia
-prosopyl
-prosopyle
-prosorus
-prospect
-prospection
-prospective
-prospectively
-prospectiveness
-prospectless
-prospector
-prospectus
-prospectusless
-prospeculation
-prosper
-prosperation
-prosperity
-prosperous
-prosperously
-prosperousness
-prospicience
-prosporangium
-prosport
-pross
-prossy
-prostatauxe
-prostate
-prostatectomy
-prostatelcosis
-prostatic
-prostaticovesical
-prostatism
-prostatitic
-prostatitis
-prostatocystitis
-prostatocystotomy
-prostatodynia
-prostatolith
-prostatomegaly
-prostatometer
-prostatomyomectomy
-prostatorrhea
-prostatorrhoea
-prostatotomy
-prostatovesical
-prostatovesiculectomy
-prostatovesiculitis
-prostemmate
-prostemmatic
-prosternal
-prosternate
-prosternum
-prostheca
-prosthenic
-prosthesis
-prosthetic
-prosthetically
-prosthetics
-prosthetist
-prosthion
-prosthionic
-prosthodontia
-prosthodontist
-Prostigmin
-prostitute
-prostitutely
-prostitution
-prostitutor
-prostomial
-prostomiate
-prostomium
-prostrate
-prostration
-prostrative
-prostrator
-prostrike
-prostyle
-prostylos
-prosubmission
-prosubscription
-prosubstantive
-prosubstitution
-prosuffrage
-prosupervision
-prosupport
-prosurgical
-prosurrender
-prosy
-prosyllogism
-prosyndicalism
-prosyndicalist
-protactic
-protactinium
-protagon
-protagonism
-protagonist
-Protagorean
-Protagoreanism
-protalbumose
-protamine
-protandric
-protandrism
-protandrous
-protandrously
-protandry
-protanomal
-protanomalous
-protanope
-protanopia
-protanopic
-protargentum
-protargin
-Protargol
-protariff
-protarsal
-protarsus
-protasis
-protaspis
-protatic
-protatically
-protax
-protaxation
-protaxial
-protaxis
-prote
-Protea
-protea
-Proteaceae
-proteaceous
-protead
-protean
-proteanly
-proteanwise
-protease
-protechnical
-protect
-protectant
-protectible
-protecting
-protectingly
-protectingness
-protection
-protectional
-protectionate
-protectionism
-protectionist
-protectionize
-protectionship
-protective
-protectively
-protectiveness
-Protectograph
-protector
-protectoral
-protectorate
-protectorial
-protectorian
-protectorless
-protectorship
-protectory
-protectress
-protectrix
-protege
-protegee
-protegulum
-proteic
-Proteida
-Proteidae
-proteide
-proteidean
-proteidogenous
-proteiform
-protein
-proteinaceous
-proteinase
-proteinic
-proteinochromogen
-proteinous
-proteinuria
-Proteles
-Protelidae
-Protelytroptera
-protelytropteran
-protelytropteron
-protelytropterous
-protemperance
-protempirical
-protemporaneous
-protend
-protension
-protensity
-protensive
-protensively
-proteoclastic
-proteogenous
-proteolysis
-proteolytic
-proteopectic
-proteopexic
-proteopexis
-proteopexy
-proteosaurid
-Proteosauridae
-Proteosaurus
-proteose
-Proteosoma
-proteosomal
-proteosome
-proteosuria
-protephemeroid
-Protephemeroidea
-proterandrous
-proterandrousness
-proterandry
-proteranthous
-proterobase
-proteroglyph
-Proteroglypha
-proteroglyphic
-proteroglyphous
-proterogynous
-proterogyny
-proterothesis
-proterotype
-Proterozoic
-protervity
-protest
-protestable
-protestancy
-protestant
-Protestantish
-Protestantishly
-protestantism
-Protestantize
-Protestantlike
-Protestantly
-protestation
-protestator
-protestatory
-protester
-protestingly
-protestive
-protestor
-protetrarch
-Proteus
-protevangel
-protevangelion
-protevangelium
-protext
-prothalamia
-prothalamion
-prothalamium
-prothallia
-prothallial
-prothallic
-prothalline
-prothallium
-prothalloid
-prothallus
-protheatrical
-protheca
-prothesis
-prothetic
-prothetical
-prothetically
-prothonotarial
-prothonotariat
-prothonotary
-prothonotaryship
-prothoracic
-prothorax
-prothrift
-prothrombin
-prothrombogen
-prothyl
-prothysteron
-protide
-protiodide
-protist
-Protista
-protistan
-protistic
-protistological
-protistologist
-protistology
-protiston
-Protium
-protium
-proto
-protoactinium
-protoalbumose
-protoamphibian
-protoanthropic
-protoapostate
-protoarchitect
-Protoascales
-Protoascomycetes
-protobacco
-Protobasidii
-Protobasidiomycetes
-protobasidiomycetous
-protobasidium
-protobishop
-protoblast
-protoblastic
-protoblattoid
-Protoblattoidea
-Protobranchia
-Protobranchiata
-protobranchiate
-protocalcium
-protocanonical
-Protocaris
-protocaseose
-protocatechualdehyde
-protocatechuic
-Protoceras
-Protoceratidae
-Protoceratops
-protocercal
-protocerebral
-protocerebrum
-protochemist
-protochemistry
-protochloride
-protochlorophyll
-Protochorda
-Protochordata
-protochordate
-protochromium
-protochronicler
-protocitizen
-protoclastic
-protocneme
-Protococcaceae
-protococcaceous
-protococcal
-Protococcales
-protococcoid
-Protococcus
-protocol
-protocolar
-protocolary
-Protocoleoptera
-protocoleopteran
-protocoleopteron
-protocoleopterous
-protocolist
-protocolization
-protocolize
-protoconch
-protoconchal
-protocone
-protoconid
-protoconule
-protoconulid
-protocopper
-protocorm
-protodeacon
-protoderm
-protodevil
-Protodonata
-protodonatan
-protodonate
-protodont
-Protodonta
-protodramatic
-protodynastic
-protoelastose
-protoepiphyte
-protoforaminifer
-protoforester
-protogaster
-protogelatose
-protogenal
-protogenes
-protogenesis
-protogenetic
-protogenic
-protogenist
-Protogeometric
-protogine
-protoglobulose
-protogod
-protogonous
-protogospel
-protograph
-protogynous
-protogyny
-protohematoblast
-Protohemiptera
-protohemipteran
-protohemipteron
-protohemipterous
-protoheresiarch
-Protohippus
-protohistorian
-protohistoric
-protohistory
-protohomo
-protohuman
-Protohydra
-protohydrogen
-Protohymenoptera
-protohymenopteran
-protohymenopteron
-protohymenopterous
-protoiron
-protoleration
-protoleucocyte
-protoleukocyte
-protolithic
-protoliturgic
-protolog
-protologist
-protoloph
-protoma
-protomagister
-protomagnate
-protomagnesium
-protomala
-protomalal
-protomalar
-protomammal
-protomammalian
-protomanganese
-protomartyr
-Protomastigida
-protome
-protomeristem
-protomerite
-protomeritic
-protometal
-protometallic
-protometaphrast
-Protominobacter
-Protomonadina
-protomonostelic
-protomorph
-protomorphic
-Protomycetales
-protomyosinose
-proton
-protone
-protonegroid
-protonema
-protonemal
-protonematal
-protonematoid
-protoneme
-Protonemertini
-protonephridial
-protonephridium
-protonephros
-protoneuron
-protoneurone
-protonic
-protonickel
-protonitrate
-protonotater
-protonym
-protonymph
-protonymphal
-protopapas
-protopappas
-protoparent
-protopathia
-protopathic
-protopathy
-protopatriarchal
-protopatrician
-protopattern
-protopectin
-protopectinase
-protopepsia
-Protoperlaria
-protoperlarian
-protophilosophic
-protophloem
-protophyll
-Protophyta
-protophyte
-protophytic
-protopin
-protopine
-protoplasm
-protoplasma
-protoplasmal
-protoplasmatic
-protoplasmic
-protoplast
-protoplastic
-protopod
-protopodial
-protopodite
-protopoditic
-protopoetic
-protopope
-protoporphyrin
-protopragmatic
-protopresbyter
-protopresbytery
-protoprism
-protoproteose
-protoprotestant
-protopteran
-Protopteridae
-protopteridophyte
-protopterous
-Protopterus
-protopyramid
-protore
-protorebel
-protoreligious
-protoreptilian
-Protorohippus
-protorosaur
-Protorosauria
-protorosaurian
-Protorosauridae
-protorosauroid
-Protorosaurus
-Protorthoptera
-protorthopteran
-protorthopteron
-protorthopterous
-protosalt
-protosaurian
-protoscientific
-Protoselachii
-protosilicate
-protosilicon
-protosinner
-Protosiphon
-Protosiphonaceae
-protosiphonaceous
-protosocial
-protosolution
-protospasm
-Protosphargis
-Protospondyli
-protospore
-Protostega
-Protostegidae
-protostele
-protostelic
-protostome
-protostrontium
-protosulphate
-protosulphide
-protosyntonose
-prototaxites
-prototheca
-protothecal
-prototheme
-protothere
-Prototheria
-prototherian
-prototitanium
-Prototracheata
-prototraitor
-prototroch
-prototrochal
-prototrophic
-prototypal
-prototype
-prototypic
-prototypical
-prototypically
-prototypographer
-prototyrant
-protovanadium
-protoveratrine
-protovertebra
-protovertebral
-protovestiary
-protovillain
-protovum
-protoxide
-protoxylem
-Protozoa
-protozoacidal
-protozoacide
-protozoal
-protozoan
-protozoea
-protozoean
-protozoiasis
-protozoic
-protozoological
-protozoologist
-protozoology
-protozoon
-protozoonal
-Protracheata
-protracheate
-protract
-protracted
-protractedly
-protractedness
-protracter
-protractible
-protractile
-protractility
-protraction
-protractive
-protractor
-protrade
-protradition
-protraditional
-protragedy
-protragical
-protragie
-protransfer
-protranslation
-protransubstantiation
-protravel
-protreasurer
-protreaty
-Protremata
-protreptic
-protreptical
-protriaene
-protropical
-protrudable
-protrude
-protrudent
-protrusible
-protrusile
-protrusion
-protrusive
-protrusively
-protrusiveness
-protuberance
-protuberancy
-protuberant
-protuberantial
-protuberantly
-protuberantness
-protuberate
-protuberosity
-protuberous
-Protura
-proturan
-protutor
-protutory
-protyl
-protyle
-Protylopus
-protype
-proudful
-proudhearted
-proudish
-proudishly
-proudling
-proudly
-proudness
-prouniformity
-prounion
-prounionist
-prouniversity
-proustite
-provability
-provable
-provableness
-provably
-provaccinist
-provand
-provant
-provascular
-prove
-provect
-provection
-proved
-proveditor
-provedly
-provedor
-provedore
-proven
-provenance
-Provencal
-Provencalize
-Provence
-Provencial
-provender
-provenience
-provenient
-provenly
-proventricular
-proventricule
-proventriculus
-prover
-proverb
-proverbial
-proverbialism
-proverbialist
-proverbialize
-proverbially
-proverbic
-proverbiologist
-proverbiology
-proverbize
-proverblike
-provicar
-provicariate
-providable
-providance
-provide
-provided
-providence
-provident
-providential
-providentialism
-providentially
-providently
-providentness
-provider
-providing
-providore
-providoring
-province
-provincial
-provincialate
-provincialism
-provincialist
-provinciality
-provincialization
-provincialize
-provincially
-provincialship
-provinciate
-provinculum
-provine
-proving
-provingly
-provision
-provisional
-provisionality
-provisionally
-provisionalness
-provisionary
-provisioner
-provisioneress
-provisionless
-provisionment
-provisive
-proviso
-provisor
-provisorily
-provisorship
-provisory
-provitamin
-provivisection
-provivisectionist
-provocant
-provocation
-provocational
-provocative
-provocatively
-provocativeness
-provocator
-provocatory
-provokable
-provoke
-provokee
-provoker
-provoking
-provokingly
-provokingness
-provolunteering
-provost
-provostal
-provostess
-provostorial
-provostry
-provostship
-prow
-prowar
-prowarden
-prowaterpower
-prowed
-prowersite
-prowess
-prowessed
-prowessful
-prowl
-prowler
-prowling
-prowlingly
-proxenet
-proxenete
-proxenetism
-proxenos
-proxenus
-proxeny
-proxically
-proximad
-proximal
-proximally
-proximate
-proximately
-proximateness
-proximation
-proximity
-proximo
-proximobuccal
-proximolabial
-proximolingual
-proxy
-proxyship
-proxysm
-prozone
-prozoning
-prozygapophysis
-prozymite
-prude
-prudelike
-prudely
-Prudence
-prudence
-prudent
-prudential
-prudentialism
-prudentialist
-prudentiality
-prudentially
-prudentialness
-prudently
-prudery
-prudish
-prudishly
-prudishness
-prudist
-prudity
-Prudy
-Prue
-pruh
-pruinate
-pruinescence
-pruinose
-pruinous
-prulaurasin
-prunable
-prunableness
-prunably
-Prunaceae
-prunase
-prunasin
-prune
-prunell
-Prunella
-prunella
-prunelle
-Prunellidae
-prunello
-pruner
-prunetin
-prunetol
-pruniferous
-pruniform
-pruning
-prunitrin
-prunt
-prunted
-Prunus
-prurience
-pruriency
-prurient
-pruriently
-pruriginous
-prurigo
-pruriousness
-pruritic
-pruritus
-prusiano
-Prussian
-Prussianism
-Prussianization
-Prussianize
-Prussianizer
-prussiate
-prussic
-Prussification
-Prussify
-prut
-prutah
-pry
-pryer
-prying
-pryingly
-pryingness
-pryler
-pryproof
-pryse
-prytaneum
-prytanis
-prytanize
-prytany
-psalis
-psalm
-psalmic
-psalmist
-psalmister
-psalmistry
-psalmless
-psalmodial
-psalmodic
-psalmodical
-psalmodist
-psalmodize
-psalmody
-psalmograph
-psalmographer
-psalmography
-psalmy
-psaloid
-psalter
-psalterial
-psalterian
-psalterion
-psalterist
-psalterium
-psaltery
-psaltes
-psaltress
-psammite
-psammitic
-psammocarcinoma
-psammocharid
-Psammocharidae
-psammogenous
-psammolithic
-psammologist
-psammology
-psammoma
-psammophile
-psammophilous
-Psammophis
-psammophyte
-psammophytic
-psammosarcoma
-psammotherapy
-psammous
-Psaronius
-pschent
-Psedera
-Pselaphidae
-Pselaphus
-psellism
-psellismus
-psephism
-psephisma
-psephite
-psephitic
-psephomancy
-Psephurus
-Psetta
-pseudaconine
-pseudaconitine
-pseudacusis
-pseudalveolar
-pseudambulacral
-pseudambulacrum
-pseudamoeboid
-pseudamphora
-pseudandry
-pseudangina
-pseudankylosis
-pseudaphia
-pseudaposematic
-pseudaposporous
-pseudapospory
-pseudapostle
-pseudarachnidan
-pseudarthrosis
-pseudataxic
-pseudatoll
-pseudaxine
-pseudaxis
-Pseudechis
-pseudelephant
-pseudelminth
-pseudelytron
-pseudembryo
-pseudembryonic
-pseudencephalic
-pseudencephalus
-pseudepigraph
-pseudepigrapha
-pseudepigraphal
-pseudepigraphic
-pseudepigraphical
-pseudepigraphous
-pseudepigraphy
-pseudepiploic
-pseudepiploon
-pseudepiscopacy
-pseudepiscopy
-pseudepisematic
-pseudesthesia
-pseudhalteres
-pseudhemal
-pseudimaginal
-pseudimago
-pseudisodomum
-pseudo
-pseudoacaccia
-pseudoacademic
-pseudoacademical
-pseudoaccidental
-pseudoacid
-pseudoaconitine
-pseudoacromegaly
-pseudoadiabatic
-pseudoaesthetic
-pseudoaffectionate
-pseudoalkaloid
-pseudoalum
-pseudoalveolar
-pseudoamateurish
-pseudoamatory
-pseudoanaphylactic
-pseudoanaphylaxis
-pseudoanatomic
-pseudoanatomical
-pseudoancestral
-pseudoanemia
-pseudoanemic
-pseudoangelic
-pseudoangina
-pseudoankylosis
-pseudoanthorine
-pseudoanthropoid
-pseudoanthropological
-pseudoanthropology
-pseudoantique
-pseudoapologetic
-pseudoapoplectic
-pseudoapoplexy
-pseudoappendicitis
-pseudoaquatic
-pseudoarchaic
-pseudoarchaism
-pseudoarchaist
-pseudoaristocratic
-pseudoarthrosis
-pseudoarticulation
-pseudoartistic
-pseudoascetic
-pseudoastringent
-pseudoasymmetrical
-pseudoasymmetry
-pseudoataxia
-pseudobacterium
-pseudobasidium
-pseudobenevolent
-pseudobenthonic
-pseudobenthos
-pseudobinary
-pseudobiological
-pseudoblepsia
-pseudoblepsis
-pseudobrachial
-pseudobrachium
-pseudobranch
-pseudobranchia
-pseudobranchial
-pseudobranchiate
-Pseudobranchus
-pseudobrookite
-pseudobrotherly
-pseudobulb
-pseudobulbar
-pseudobulbil
-pseudobulbous
-pseudobutylene
-pseudocandid
-pseudocapitulum
-pseudocarbamide
-pseudocarcinoid
-pseudocarp
-pseudocarpous
-pseudocartilaginous
-pseudocele
-pseudocelian
-pseudocelic
-pseudocellus
-pseudocentric
-pseudocentrous
-pseudocentrum
-Pseudoceratites
-pseudoceratitic
-pseudocercaria
-pseudoceryl
-pseudocharitable
-pseudochemical
-pseudochina
-pseudochromesthesia
-pseudochromia
-pseudochromosome
-pseudochronism
-pseudochronologist
-pseudochrysalis
-pseudochrysolite
-pseudochylous
-pseudocirrhosis
-pseudoclassic
-pseudoclassical
-pseudoclassicism
-pseudoclerical
-Pseudococcinae
-Pseudococcus
-pseudococtate
-pseudocollegiate
-pseudocolumella
-pseudocolumellar
-pseudocommissure
-pseudocommisural
-pseudocompetitive
-pseudoconcha
-pseudoconclude
-pseudocone
-pseudoconglomerate
-pseudoconglomeration
-pseudoconhydrine
-pseudoconjugation
-pseudoconservative
-pseudocorneous
-pseudocortex
-pseudocosta
-pseudocotyledon
-pseudocotyledonal
-pseudocritical
-pseudocroup
-pseudocrystalline
-pseudocubic
-pseudocultivated
-pseudocultural
-pseudocumene
-pseudocumenyl
-pseudocumidine
-pseudocumyl
-pseudocyclosis
-pseudocyesis
-pseudocyst
-pseudodeltidium
-pseudodementia
-pseudodemocratic
-pseudoderm
-pseudodermic
-pseudodiagnosis
-pseudodiastolic
-pseudodiphtheria
-pseudodiphtheritic
-pseudodipteral
-pseudodipterally
-pseudodipteros
-pseudodont
-pseudodox
-pseudodoxal
-pseudodoxy
-pseudodramatic
-pseudodysentery
-pseudoedema
-pseudoelectoral
-pseudoembryo
-pseudoembryonic
-pseudoemotional
-pseudoencephalitic
-pseudoenthusiastic
-pseudoephedrine
-pseudoepiscopal
-pseudoequalitarian
-pseudoerotic
-pseudoeroticism
-pseudoerysipelas
-pseudoerysipelatous
-pseudoerythrin
-pseudoethical
-pseudoetymological
-pseudoeugenics
-pseudoevangelical
-pseudofamous
-pseudofarcy
-pseudofeminine
-pseudofever
-pseudofeverish
-pseudofilaria
-pseudofilarian
-pseudofinal
-pseudofluctuation
-pseudofluorescence
-pseudofoliaceous
-pseudoform
-pseudofossil
-pseudogalena
-pseudoganglion
-pseudogaseous
-pseudogaster
-pseudogastrula
-pseudogeneral
-pseudogeneric
-pseudogenerous
-pseudogenteel
-pseudogenus
-pseudogeometry
-pseudogermanic
-pseudogeusia
-pseudogeustia
-pseudoglanders
-pseudoglioma
-pseudoglobulin
-pseudoglottis
-pseudograph
-pseudographeme
-pseudographer
-pseudographia
-pseudographize
-pseudography
-pseudograsserie
-Pseudogryphus
-pseudogyne
-pseudogynous
-pseudogyny
-pseudogyrate
-pseudohallucination
-pseudohallucinatory
-pseudohalogen
-pseudohemal
-pseudohermaphrodite
-pseudohermaphroditic
-pseudohermaphroditism
-pseudoheroic
-pseudohexagonal
-pseudohistoric
-pseudohistorical
-pseudoholoptic
-pseudohuman
-pseudohydrophobia
-pseudohyoscyamine
-pseudohypertrophic
-pseudohypertrophy
-pseudoidentical
-pseudoimpartial
-pseudoindependent
-pseudoinfluenza
-pseudoinsane
-pseudoinsoluble
-pseudoisatin
-pseudoism
-pseudoisomer
-pseudoisomeric
-pseudoisomerism
-pseudoisotropy
-pseudojervine
-pseudolabial
-pseudolabium
-pseudolalia
-Pseudolamellibranchia
-Pseudolamellibranchiata
-pseudolamellibranchiate
-pseudolaminated
-Pseudolarix
-pseudolateral
-pseudolatry
-pseudolegal
-pseudolegendary
-pseudoleucite
-pseudoleucocyte
-pseudoleukemia
-pseudoleukemic
-pseudoliberal
-pseudolichen
-pseudolinguistic
-pseudoliterary
-pseudolobar
-pseudological
-pseudologically
-pseudologist
-pseudologue
-pseudology
-pseudolunule
-pseudomalachite
-pseudomalaria
-pseudomancy
-pseudomania
-pseudomaniac
-pseudomantic
-pseudomantist
-pseudomasculine
-pseudomedical
-pseudomedieval
-pseudomelanosis
-pseudomembrane
-pseudomembranous
-pseudomeningitis
-pseudomenstruation
-pseudomer
-pseudomeric
-pseudomerism
-pseudomery
-pseudometallic
-pseudometameric
-pseudometamerism
-pseudomica
-pseudomilitarist
-pseudomilitaristic
-pseudomilitary
-pseudoministerial
-pseudomiraculous
-pseudomitotic
-pseudomnesia
-pseudomodern
-pseudomodest
-Pseudomonas
-pseudomonastic
-pseudomonoclinic
-pseudomonocotyledonous
-pseudomonocyclic
-pseudomonotropy
-pseudomoral
-pseudomorph
-pseudomorphia
-pseudomorphic
-pseudomorphine
-pseudomorphism
-pseudomorphose
-pseudomorphosis
-pseudomorphous
-pseudomorula
-pseudomorular
-pseudomucin
-pseudomucoid
-pseudomultilocular
-pseudomultiseptate
-pseudomythical
-pseudonarcotic
-pseudonational
-pseudonavicella
-pseudonavicellar
-pseudonavicula
-pseudonavicular
-pseudoneuropter
-Pseudoneuroptera
-pseudoneuropteran
-pseudoneuropterous
-pseudonitrole
-pseudonitrosite
-pseudonuclein
-pseudonucleolus
-pseudonychium
-pseudonym
-pseudonymal
-pseudonymic
-pseudonymity
-pseudonymous
-pseudonymously
-pseudonymousness
-pseudonymuncle
-pseudonymuncule
-pseudopapaverine
-pseudoparalysis
-pseudoparalytic
-pseudoparaplegia
-pseudoparasitic
-pseudoparasitism
-pseudoparenchyma
-pseudoparenchymatous
-pseudoparenchyme
-pseudoparesis
-pseudoparthenogenesis
-pseudopatriotic
-pseudopediform
-pseudopelletierine
-pseudopercular
-pseudoperculate
-pseudoperculum
-pseudoperianth
-pseudoperidium
-pseudoperiodic
-pseudoperipteral
-pseudopermanent
-pseudoperoxide
-pseudoperspective
-Pseudopeziza
-pseudophallic
-pseudophellandrene
-pseudophenanthrene
-pseudophenanthroline
-pseudophenocryst
-pseudophilanthropic
-pseudophilosophical
-Pseudophoenix
-pseudopionnotes
-pseudopious
-pseudoplasm
-pseudoplasma
-pseudoplasmodium
-pseudopneumonia
-pseudopod
-pseudopodal
-pseudopodia
-pseudopodial
-pseudopodian
-pseudopodiospore
-pseudopodium
-pseudopoetic
-pseudopoetical
-pseudopolitic
-pseudopolitical
-pseudopopular
-pseudopore
-pseudoporphyritic
-pseudopregnancy
-pseudopregnant
-pseudopriestly
-pseudoprimitive
-pseudoprimitivism
-pseudoprincely
-pseudoproboscis
-pseudoprofessional
-pseudoprofessorial
-pseudoprophetic
-pseudoprophetical
-pseudoprosperous
-pseudopsia
-pseudopsychological
-pseudoptics
-pseudoptosis
-pseudopupa
-pseudopupal
-pseudopurpurin
-pseudopyriform
-pseudoquinol
-pseudorabies
-pseudoracemic
-pseudoracemism
-pseudoramose
-pseudoramulus
-pseudorealistic
-pseudoreduction
-pseudoreformed
-pseudoregal
-pseudoreligious
-pseudoreminiscence
-pseudorganic
-pseudorheumatic
-pseudorhombohedral
-pseudoromantic
-pseudorunic
-pseudosacred
-pseudosacrilegious
-pseudosalt
-pseudosatirical
-pseudoscarlatina
-Pseudoscarus
-pseudoscholarly
-pseudoscholastic
-pseudoscientific
-Pseudoscines
-pseudoscinine
-pseudosclerosis
-pseudoscope
-pseudoscopic
-pseudoscopically
-pseudoscopy
-pseudoscorpion
-Pseudoscorpiones
-Pseudoscorpionida
-pseudoscutum
-pseudosematic
-pseudosensational
-pseudoseptate
-pseudoservile
-pseudosessile
-pseudosiphonal
-pseudosiphuncal
-pseudoskeletal
-pseudoskeleton
-pseudoskink
-pseudosmia
-pseudosocial
-pseudosocialistic
-pseudosolution
-pseudosoph
-pseudosopher
-pseudosophical
-pseudosophist
-pseudosophy
-pseudospectral
-pseudosperm
-pseudospermic
-pseudospermium
-pseudospermous
-pseudosphere
-pseudospherical
-pseudospiracle
-pseudospiritual
-pseudosporangium
-pseudospore
-pseudosquamate
-pseudostalactite
-pseudostalactitical
-pseudostalagmite
-pseudostalagmitical
-pseudostereoscope
-pseudostereoscopic
-pseudostereoscopism
-pseudostigma
-pseudostigmatic
-pseudostoma
-pseudostomatous
-pseudostomous
-pseudostratum
-pseudosubtle
-Pseudosuchia
-pseudosuchian
-pseudosweating
-pseudosyllogism
-pseudosymmetric
-pseudosymmetrical
-pseudosymmetry
-pseudosymptomatic
-pseudosyphilis
-pseudosyphilitic
-pseudotabes
-pseudotachylite
-pseudotetanus
-pseudotetragonal
-Pseudotetramera
-pseudotetrameral
-pseudotetramerous
-pseudotrachea
-pseudotracheal
-pseudotribal
-pseudotributary
-Pseudotrimera
-pseudotrimeral
-pseudotrimerous
-pseudotropine
-Pseudotsuga
-pseudotubercular
-pseudotuberculosis
-pseudotuberculous
-pseudoturbinal
-pseudotyphoid
-pseudoval
-pseudovarian
-pseudovary
-pseudovelar
-pseudovelum
-pseudoventricle
-pseudoviaduct
-pseudoviperine
-pseudoviscosity
-pseudoviscous
-pseudovolcanic
-pseudovolcano
-pseudovum
-pseudowhorl
-pseudoxanthine
-pseudoyohimbine
-pseudozealot
-pseudozoea
-pseudozoogloeal
-psha
-Pshav
-pshaw
-psi
-Psidium
-psilanthropic
-psilanthropism
-psilanthropist
-psilanthropy
-psiloceran
-Psiloceras
-psiloceratan
-psiloceratid
-Psiloceratidae
-psiloi
-psilology
-psilomelane
-psilomelanic
-Psilophytales
-psilophyte
-Psilophyton
-psilosis
-psilosopher
-psilosophy
-Psilotaceae
-psilotaceous
-psilothrum
-psilotic
-Psilotum
-psithurism
-Psithyrus
-psittaceous
-psittaceously
-Psittaci
-Psittacidae
-Psittaciformes
-Psittacinae
-psittacine
-psittacinite
-psittacism
-psittacistic
-Psittacomorphae
-psittacomorphic
-psittacosis
-Psittacus
-psoadic
-psoas
-psoatic
-psocid
-Psocidae
-psocine
-psoitis
-psomophagic
-psomophagist
-psomophagy
-psora
-Psoralea
-psoriasic
-psoriasiform
-psoriasis
-psoriatic
-psoriatiform
-psoric
-psoroid
-Psorophora
-psorophthalmia
-psorophthalmic
-Psoroptes
-psoroptic
-psorosis
-psorosperm
-psorospermial
-psorospermiasis
-psorospermic
-psorospermiform
-psorospermosis
-psorous
-pssimistical
-pst
-psych
-psychagogic
-psychagogos
-psychagogue
-psychagogy
-psychal
-psychalgia
-psychanalysis
-psychanalysist
-psychanalytic
-psychasthenia
-psychasthenic
-Psyche
-psyche
-Psychean
-psycheometry
-psychesthesia
-psychesthetic
-psychiasis
-psychiater
-psychiatria
-psychiatric
-psychiatrical
-psychiatrically
-psychiatrist
-psychiatrize
-psychiatry
-psychic
-psychical
-psychically
-Psychichthys
-psychicism
-psychicist
-psychics
-psychid
-Psychidae
-psychism
-psychist
-psychoanalysis
-psychoanalyst
-psychoanalytic
-psychoanalytical
-psychoanalytically
-psychoanalyze
-psychoanalyzer
-psychoautomatic
-psychobiochemistry
-psychobiologic
-psychobiological
-psychobiology
-psychobiotic
-psychocatharsis
-psychoclinic
-psychoclinical
-psychoclinicist
-Psychoda
-psychodiagnostics
-Psychodidae
-psychodispositional
-psychodrama
-psychodynamic
-psychodynamics
-psychoeducational
-psychoepilepsy
-psychoethical
-psychofugal
-psychogalvanic
-psychogalvanometer
-psychogenesis
-psychogenetic
-psychogenetical
-psychogenetically
-psychogenetics
-psychogenic
-psychogeny
-psychognosis
-psychognostic
-psychognosy
-psychogonic
-psychogonical
-psychogony
-psychogram
-psychograph
-psychographer
-psychographic
-psychographist
-psychography
-psychoid
-psychokinesia
-psychokinesis
-psychokinetic
-psychokyme
-psycholepsy
-psycholeptic
-psychologer
-psychologian
-psychologic
-psychological
-psychologically
-psychologics
-psychologism
-psychologist
-psychologize
-psychologue
-psychology
-psychomachy
-psychomancy
-psychomantic
-psychometer
-psychometric
-psychometrical
-psychometrically
-psychometrician
-psychometrics
-psychometrist
-psychometrize
-psychometry
-psychomonism
-psychomoral
-psychomorphic
-psychomorphism
-psychomotility
-psychomotor
-psychon
-psychoneural
-psychoneurological
-psychoneurosis
-psychoneurotic
-psychonomic
-psychonomics
-psychonomy
-psychony
-psychoorganic
-psychopannychian
-psychopannychism
-psychopannychist
-psychopannychistic
-psychopannychy
-psychopanychite
-psychopath
-psychopathia
-psychopathic
-psychopathist
-psychopathologic
-psychopathological
-psychopathologist
-psychopathy
-psychopetal
-psychophobia
-psychophysic
-psychophysical
-psychophysically
-psychophysicist
-psychophysics
-psychophysiologic
-psychophysiological
-psychophysiologically
-psychophysiologist
-psychophysiology
-psychoplasm
-psychopomp
-psychopompos
-psychorealism
-psychorealist
-psychorealistic
-psychoreflex
-psychorhythm
-psychorhythmia
-psychorhythmic
-psychorhythmical
-psychorhythmically
-psychorrhagic
-psychorrhagy
-psychosarcous
-psychosensorial
-psychosensory
-psychoses
-psychosexual
-psychosexuality
-psychosexually
-psychosis
-psychosocial
-psychosomatic
-psychosomatics
-psychosome
-psychosophy
-psychostasy
-psychostatic
-psychostatical
-psychostatically
-psychostatics
-psychosurgeon
-psychosurgery
-psychosynthesis
-psychosynthetic
-psychotaxis
-psychotechnical
-psychotechnician
-psychotechnics
-psychotechnological
-psychotechnology
-psychotheism
-psychotherapeutic
-psychotherapeutical
-psychotherapeutics
-psychotherapeutist
-psychotherapist
-psychotherapy
-psychotic
-Psychotria
-psychotrine
-psychovital
-Psychozoic
-psychroesthesia
-psychrograph
-psychrometer
-psychrometric
-psychrometrical
-psychrometry
-psychrophile
-psychrophilic
-psychrophobia
-psychrophore
-psychrophyte
-psychurgy
-psykter
-Psylla
-psylla
-psyllid
-Psyllidae
-psyllium
-ptarmic
-Ptarmica
-ptarmical
-ptarmigan
-Ptelea
-Ptenoglossa
-ptenoglossate
-Pteranodon
-pteranodont
-Pteranodontidae
-pteraspid
-Pteraspidae
-Pteraspis
-ptereal
-pterergate
-Pterian
-pteric
-Pterichthyodes
-Pterichthys
-pterideous
-pteridium
-pteridography
-pteridoid
-pteridological
-pteridologist
-pteridology
-pteridophilism
-pteridophilist
-pteridophilistic
-Pteridophyta
-pteridophyte
-pteridophytic
-pteridophytous
-pteridosperm
-Pteridospermae
-Pteridospermaphyta
-pteridospermaphytic
-pteridospermous
-pterion
-Pteris
-Pterobranchia
-pterobranchiate
-pterocarpous
-Pterocarpus
-Pterocarya
-Pterocaulon
-Pterocera
-Pteroceras
-Pterocles
-Pterocletes
-Pteroclidae
-Pteroclomorphae
-pteroclomorphic
-pterodactyl
-Pterodactyli
-pterodactylian
-pterodactylic
-pterodactylid
-Pterodactylidae
-pterodactyloid
-pterodactylous
-Pterodactylus
-pterographer
-pterographic
-pterographical
-pterography
-pteroid
-pteroma
-pteromalid
-Pteromalidae
-Pteromys
-pteropaedes
-pteropaedic
-pteropegal
-pteropegous
-pteropegum
-pterophorid
-Pterophoridae
-Pterophorus
-Pterophryne
-pteropid
-Pteropidae
-pteropine
-pteropod
-Pteropoda
-pteropodal
-pteropodan
-pteropodial
-Pteropodidae
-pteropodium
-pteropodous
-Pteropsida
-Pteropus
-pterosaur
-Pterosauri
-Pterosauria
-pterosaurian
-pterospermous
-Pterospora
-Pterostemon
-Pterostemonaceae
-pterostigma
-pterostigmal
-pterostigmatic
-pterostigmatical
-pterotheca
-pterothorax
-pterotic
-pteroylglutamic
-pterygial
-pterygiophore
-pterygium
-pterygobranchiate
-pterygode
-pterygodum
-Pterygogenea
-pterygoid
-pterygoidal
-pterygoidean
-pterygomalar
-pterygomandibular
-pterygomaxillary
-pterygopalatal
-pterygopalatine
-pterygopharyngeal
-pterygopharyngean
-pterygophore
-pterygopodium
-pterygoquadrate
-pterygosphenoid
-pterygospinous
-pterygostaphyline
-Pterygota
-pterygote
-pterygotous
-pterygotrabecular
-Pterygotus
-pteryla
-pterylographic
-pterylographical
-pterylography
-pterylological
-pterylology
-pterylosis
-Ptilichthyidae
-Ptiliidae
-Ptilimnium
-ptilinal
-ptilinum
-Ptilocercus
-Ptilonorhynchidae
-Ptilonorhynchinae
-ptilopaedes
-ptilopaedic
-ptilosis
-Ptilota
-ptinid
-Ptinidae
-ptinoid
-Ptinus
-ptisan
-ptochocracy
-ptochogony
-ptochology
-Ptolemaean
-Ptolemaian
-Ptolemaic
-Ptolemaical
-Ptolemaism
-Ptolemaist
-Ptolemean
-Ptolemy
-ptomain
-ptomaine
-ptomainic
-ptomatropine
-ptosis
-ptotic
-ptyalagogic
-ptyalagogue
-ptyalectasis
-ptyalin
-ptyalism
-ptyalize
-ptyalocele
-ptyalogenic
-ptyalolith
-ptyalolithiasis
-ptyalorrhea
-Ptychoparia
-ptychoparid
-ptychopariid
-ptychopterygial
-ptychopterygium
-Ptychosperma
-ptysmagogue
-ptyxis
-pu
-pua
-puan
-pub
-pubal
-pubble
-puberal
-pubertal
-pubertic
-puberty
-puberulent
-puberulous
-pubes
-pubescence
-pubescency
-pubescent
-pubian
-pubic
-pubigerous
-pubiotomy
-pubis
-public
-Publican
-publican
-publicanism
-publication
-publichearted
-publicheartedness
-publicism
-publicist
-publicity
-publicize
-publicly
-publicness
-Publilian
-publish
-publishable
-publisher
-publisheress
-publishership
-publishment
-pubococcygeal
-pubofemoral
-puboiliac
-puboischiac
-puboischial
-puboischiatic
-puboprostatic
-puborectalis
-pubotibial
-pubourethral
-pubovesical
-Puccinia
-Pucciniaceae
-pucciniaceous
-puccinoid
-puccoon
-puce
-pucelage
-pucellas
-pucelle
-Puchanahua
-pucherite
-puchero
-puck
-pucka
-puckball
-pucker
-puckerbush
-puckerel
-puckerer
-puckermouth
-puckery
-puckfist
-puckish
-puckishly
-puckishness
-puckle
-pucklike
-puckling
-puckneedle
-puckrel
-puckster
-pud
-puddee
-puddening
-pudder
-pudding
-puddingberry
-puddinghead
-puddingheaded
-puddinghouse
-puddinglike
-puddingwife
-puddingy
-puddle
-puddled
-puddlelike
-puddler
-puddling
-puddly
-puddock
-puddy
-pudency
-pudenda
-pudendal
-pudendous
-pudendum
-pudent
-pudge
-pudgily
-pudginess
-pudgy
-pudiano
-pudibund
-pudibundity
-pudic
-pudical
-pudicitia
-pudicity
-pudsey
-pudsy
-Pudu
-pudu
-pueblito
-Pueblo
-pueblo
-Puebloan
-puebloization
-puebloize
-Puelche
-Puelchean
-Pueraria
-puerer
-puericulture
-puerile
-puerilely
-puerileness
-puerilism
-puerility
-puerman
-puerpera
-puerperal
-puerperalism
-puerperant
-puerperium
-puerperous
-puerpery
-puff
-puffback
-puffball
-puffbird
-puffed
-puffer
-puffery
-puffily
-puffin
-puffiness
-puffinet
-puffing
-puffingly
-Puffinus
-pufflet
-puffwig
-puffy
-pug
-pugged
-pugger
-puggi
-pugginess
-pugging
-puggish
-puggle
-puggree
-puggy
-pugh
-pugil
-pugilant
-pugilism
-pugilist
-pugilistic
-pugilistical
-pugilistically
-puglianite
-pugman
-pugmill
-pugmiller
-pugnacious
-pugnaciously
-pugnaciousness
-pugnacity
-Puinavi
-Puinavian
-Puinavis
-puisne
-puissance
-puissant
-puissantly
-puissantness
-puist
-puistie
-puja
-Pujunan
-puka
-pukatea
-pukateine
-puke
-pukeko
-puker
-pukeweed
-Pukhtun
-pukish
-pukishness
-pukras
-puku
-puky
-pul
-pulahan
-pulahanism
-pulasan
-pulaskite
-Pulaya
-Pulayan
-pulchrify
-pulchritude
-pulchritudinous
-pule
-pulegol
-pulegone
-puler
-Pulex
-pulghere
-puli
-Pulian
-pulicarious
-pulicat
-pulicene
-pulicid
-Pulicidae
-pulicidal
-pulicide
-pulicine
-pulicoid
-pulicose
-pulicosity
-pulicous
-puling
-pulingly
-pulish
-pulk
-pulka
-pull
-pullable
-pullback
-pullboat
-pulldevil
-pulldoo
-pulldown
-pulldrive
-pullen
-puller
-pullery
-pullet
-pulley
-pulleyless
-pulli
-Pullman
-Pullmanize
-pullorum
-pullulant
-pullulate
-pullulation
-pullus
-pulmobranchia
-pulmobranchial
-pulmobranchiate
-pulmocardiac
-pulmocutaneous
-pulmogastric
-pulmometer
-pulmometry
-pulmonal
-pulmonar
-Pulmonaria
-pulmonarian
-pulmonary
-Pulmonata
-pulmonate
-pulmonated
-pulmonectomy
-pulmonic
-pulmonifer
-Pulmonifera
-pulmoniferous
-pulmonitis
-Pulmotor
-pulmotracheal
-Pulmotrachearia
-pulmotracheary
-pulmotracheate
-pulp
-pulpaceous
-pulpal
-pulpalgia
-pulpamenta
-pulpboard
-pulpectomy
-pulpefaction
-pulper
-pulpifier
-pulpify
-pulpily
-pulpiness
-pulpit
-pulpital
-pulpitarian
-pulpiteer
-pulpiter
-pulpitful
-pulpitic
-pulpitical
-pulpitically
-pulpitis
-pulpitish
-pulpitism
-pulpitize
-pulpitless
-pulpitly
-pulpitolatry
-pulpitry
-pulpless
-pulplike
-pulpotomy
-pulpous
-pulpousness
-pulpstone
-pulpwood
-pulpy
-pulque
-pulsant
-pulsatance
-pulsate
-pulsatile
-pulsatility
-Pulsatilla
-pulsation
-pulsational
-pulsative
-pulsatively
-pulsator
-pulsatory
-pulse
-pulseless
-pulselessly
-pulselessness
-pulselike
-pulsellum
-pulsidge
-pulsific
-pulsimeter
-pulsion
-pulsive
-pulsojet
-pulsometer
-pultaceous
-pulton
-pulu
-pulveraceous
-pulverant
-pulverate
-pulveration
-pulvereous
-pulverin
-pulverizable
-pulverizate
-pulverization
-pulverizator
-pulverize
-pulverizer
-pulverous
-pulverulence
-pulverulent
-pulverulently
-pulvic
-pulvil
-pulvillar
-pulvilliform
-pulvillus
-pulvinar
-Pulvinaria
-pulvinarian
-pulvinate
-pulvinated
-pulvinately
-pulvination
-pulvinic
-pulviniform
-pulvino
-pulvinule
-pulvinulus
-pulvinus
-pulviplume
-pulwar
-puly
-puma
-Pume
-pumicate
-pumice
-pumiced
-pumiceous
-pumicer
-pumiciform
-pumicose
-pummel
-pummice
-pump
-pumpable
-pumpage
-pumpellyite
-pumper
-pumpernickel
-pumpkin
-pumpkinification
-pumpkinify
-pumpkinish
-pumpkinity
-pumple
-pumpless
-pumplike
-pumpman
-pumpsman
-pumpwright
-pun
-puna
-punaise
-punalua
-punaluan
-Punan
-punatoo
-punch
-punchable
-punchboard
-puncheon
-puncher
-punchinello
-punching
-punchless
-punchlike
-punchproof
-punchy
-punct
-punctal
-punctate
-punctated
-punctation
-punctator
-puncticular
-puncticulate
-puncticulose
-punctiform
-punctiliar
-punctilio
-punctiliomonger
-punctiliosity
-punctilious
-punctiliously
-punctiliousness
-punctist
-punctographic
-punctual
-punctualist
-punctuality
-punctually
-punctualness
-punctuate
-punctuation
-punctuational
-punctuationist
-punctuative
-punctuator
-punctuist
-punctulate
-punctulated
-punctulation
-punctule
-punctulum
-punctum
-puncturation
-puncture
-punctured
-punctureless
-punctureproof
-puncturer
-pundigrion
-pundit
-pundita
-punditic
-punditically
-punditry
-pundonor
-pundum
-puneca
-pung
-punga
-pungapung
-pungar
-pungence
-pungency
-pungent
-pungently
-punger
-pungey
-pungi
-pungle
-pungled
-Punic
-Punica
-Punicaceae
-punicaceous
-puniceous
-punicial
-punicin
-punicine
-punily
-puniness
-punish
-punishability
-punishable
-punishableness
-punishably
-punisher
-punishment
-punishmentproof
-punition
-punitional
-punitionally
-punitive
-punitively
-punitiveness
-punitory
-Punjabi
-punjum
-punk
-punkah
-punketto
-punkie
-punkwood
-punky
-punless
-punlet
-punnable
-punnage
-punner
-punnet
-punnic
-punnical
-punnigram
-punningly
-punnology
-Puno
-punproof
-punster
-punstress
-punt
-punta
-puntabout
-puntal
-puntel
-punter
-punti
-puntil
-puntist
-Puntlatsh
-punto
-puntout
-puntsman
-punty
-puny
-punyish
-punyism
-pup
-pupa
-pupahood
-pupal
-puparial
-puparium
-pupate
-pupation
-pupelo
-Pupidae
-pupiferous
-pupiform
-pupigenous
-pupigerous
-pupil
-pupilability
-pupilage
-pupilar
-pupilate
-pupildom
-pupiled
-pupilize
-pupillarity
-pupillary
-pupilless
-Pupillidae
-pupillometer
-pupillometry
-pupilloscope
-pupilloscoptic
-pupilloscopy
-Pupipara
-pupiparous
-Pupivora
-pupivore
-pupivorous
-pupoid
-puppet
-puppetdom
-puppeteer
-puppethood
-puppetish
-puppetism
-puppetize
-puppetlike
-puppetly
-puppetman
-puppetmaster
-puppetry
-puppify
-puppily
-Puppis
-puppy
-puppydom
-puppyfish
-puppyfoot
-puppyhood
-puppyish
-puppyism
-puppylike
-puppysnatch
-pupulo
-Pupuluca
-pupunha
-Puquina
-Puquinan
-pur
-purana
-puranic
-puraque
-Purasati
-Purbeck
-Purbeckian
-purblind
-purblindly
-purblindness
-purchasability
-purchasable
-purchase
-purchaser
-purchasery
-purdah
-purdy
-pure
-pureblood
-purebred
-pured
-puree
-purehearted
-purely
-pureness
-purer
-purfle
-purfled
-purfler
-purfling
-purfly
-purga
-purgation
-purgative
-purgatively
-purgatorial
-purgatorian
-purgatory
-purge
-purgeable
-purger
-purgery
-purging
-purificant
-purification
-purificative
-purificator
-purificatory
-purifier
-puriform
-purify
-purine
-puriri
-purism
-purist
-puristic
-puristical
-Puritan
-puritandom
-Puritaness
-puritanic
-puritanical
-puritanically
-puritanicalness
-Puritanism
-puritanism
-Puritanize
-Puritanizer
-puritanlike
-Puritanly
-puritano
-purity
-Purkinje
-Purkinjean
-purl
-purler
-purlhouse
-purlicue
-purlieu
-purlieuman
-purlin
-purlman
-purloin
-purloiner
-purohepatitis
-purolymph
-puromucous
-purpart
-purparty
-purple
-purplelip
-purplely
-purpleness
-purplescent
-purplewood
-purplewort
-purplish
-purplishness
-purply
-purport
-purportless
-purpose
-purposedly
-purposeful
-purposefully
-purposefulness
-purposeless
-purposelessly
-purposelessness
-purposelike
-purposely
-purposer
-purposive
-purposively
-purposiveness
-purposivism
-purposivist
-purposivistic
-purpresture
-purpura
-purpuraceous
-purpurate
-purpure
-purpureal
-purpurean
-purpureous
-purpurescent
-purpuric
-purpuriferous
-purpuriform
-purpurigenous
-purpurin
-purpurine
-purpuriparous
-purpurite
-purpurize
-purpurogallin
-purpurogenous
-purpuroid
-purpuroxanthin
-purr
-purre
-purree
-purreic
-purrel
-purrer
-purring
-purringly
-purrone
-purry
-purse
-pursed
-purseful
-purseless
-purselike
-purser
-pursership
-Purshia
-pursily
-pursiness
-purslane
-purslet
-pursley
-pursuable
-pursual
-pursuance
-pursuant
-pursuantly
-pursue
-pursuer
-pursuit
-pursuitmeter
-pursuivant
-pursy
-purtenance
-Puru
-Puruha
-purulence
-purulency
-purulent
-purulently
-puruloid
-Purupuru
-purusha
-purushartha
-purvey
-purveyable
-purveyal
-purveyance
-purveyancer
-purveyor
-purveyoress
-purview
-purvoe
-purwannah
-pus
-Puschkinia
-Puseyism
-Puseyistical
-Puseyite
-push
-pushball
-pushcart
-pusher
-pushful
-pushfully
-pushfulness
-pushing
-pushingly
-pushingness
-pushmobile
-pushover
-pushpin
-Pushtu
-pushwainling
-pusillanimity
-pusillanimous
-pusillanimously
-pusillanimousness
-puss
-pusscat
-pussley
-pusslike
-pussy
-pussycat
-pussyfoot
-pussyfooted
-pussyfooter
-pussyfooting
-pussyfootism
-pussytoe
-pustulant
-pustular
-pustulate
-pustulated
-pustulation
-pustulatous
-pustule
-pustuled
-pustulelike
-pustuliform
-pustulose
-pustulous
-put
-putage
-putamen
-putaminous
-putanism
-putation
-putationary
-putative
-putatively
-putback
-putchen
-putcher
-puteal
-putelee
-puther
-puthery
-putid
-putidly
-putidness
-putlog
-putois
-Putorius
-putredinal
-putredinous
-putrefacient
-putrefactible
-putrefaction
-putrefactive
-putrefactiveness
-putrefiable
-putrefier
-putrefy
-putresce
-putrescence
-putrescency
-putrescent
-putrescibility
-putrescible
-putrescine
-putricide
-putrid
-putridity
-putridly
-putridness
-putrifacted
-putriform
-putrilage
-putrilaginous
-putrilaginously
-putschism
-putschist
-putt
-puttee
-putter
-putterer
-putteringly
-puttier
-puttock
-putty
-puttyblower
-puttyhead
-puttyhearted
-puttylike
-puttyroot
-puttywork
-puture
-puxy
-Puya
-Puyallup
-puzzle
-puzzleation
-puzzled
-puzzledly
-puzzledness
-puzzledom
-puzzlehead
-puzzleheaded
-puzzleheadedly
-puzzleheadedness
-puzzleman
-puzzlement
-puzzlepate
-puzzlepated
-puzzlepatedness
-puzzler
-puzzling
-puzzlingly
-puzzlingness
-pya
-pyal
-pyarthrosis
-pyche
-Pycnanthemum
-pycnia
-pycnial
-pycnid
-pycnidia
-pycnidial
-pycnidiophore
-pycnidiospore
-pycnidium
-pycniospore
-pycnite
-pycnium
-Pycnocoma
-pycnoconidium
-pycnodont
-Pycnodonti
-Pycnodontidae
-pycnodontoid
-Pycnodus
-pycnogonid
-Pycnogonida
-pycnogonidium
-pycnogonoid
-pycnometer
-pycnometochia
-pycnometochic
-pycnomorphic
-pycnomorphous
-Pycnonotidae
-Pycnonotinae
-pycnonotine
-Pycnonotus
-pycnosis
-pycnospore
-pycnosporic
-pycnostyle
-pycnotic
-pyelectasis
-pyelic
-pyelitic
-pyelitis
-pyelocystitis
-pyelogram
-pyelograph
-pyelographic
-pyelography
-pyelolithotomy
-pyelometry
-pyelonephritic
-pyelonephritis
-pyelonephrosis
-pyeloplasty
-pyeloscopy
-pyelotomy
-pyeloureterogram
-pyemesis
-pyemia
-pyemic
-pygal
-pygalgia
-pygarg
-pygargus
-pygidial
-pygidid
-Pygididae
-Pygidium
-pygidium
-pygmaean
-Pygmalion
-pygmoid
-Pygmy
-pygmy
-pygmydom
-pygmyhood
-pygmyish
-pygmyism
-pygmyship
-pygmyweed
-Pygobranchia
-Pygobranchiata
-pygobranchiate
-pygofer
-pygopagus
-pygopod
-Pygopodes
-Pygopodidae
-pygopodine
-pygopodous
-Pygopus
-pygostyle
-pygostyled
-pygostylous
-pyic
-pyin
-pyjama
-pyjamaed
-pyke
-pyknatom
-pyknic
-pyknotic
-pyla
-Pylades
-pylagore
-pylangial
-pylangium
-pylar
-pylephlebitic
-pylephlebitis
-pylethrombophlebitis
-pylethrombosis
-pylic
-pylon
-pyloralgia
-pylorectomy
-pyloric
-pyloristenosis
-pyloritis
-pylorocleisis
-pylorodilator
-pylorogastrectomy
-pyloroplasty
-pyloroptosis
-pyloroschesis
-pyloroscirrhus
-pyloroscopy
-pylorospasm
-pylorostenosis
-pylorostomy
-pylorus
-pyobacillosis
-pyocele
-pyoctanin
-pyocyanase
-pyocyanin
-pyocyst
-pyocyte
-pyodermatitis
-pyodermatosis
-pyodermia
-pyodermic
-pyogenesis
-pyogenetic
-pyogenic
-pyogenin
-pyogenous
-pyohemothorax
-pyoid
-pyolabyrinthitis
-pyolymph
-pyometra
-pyometritis
-pyonephritis
-pyonephrosis
-pyonephrotic
-pyopericarditis
-pyopericardium
-pyoperitoneum
-pyoperitonitis
-pyophagia
-pyophthalmia
-pyophylactic
-pyoplania
-pyopneumocholecystitis
-pyopneumocyst
-pyopneumopericardium
-pyopneumoperitoneum
-pyopneumoperitonitis
-pyopneumothorax
-pyopoiesis
-pyopoietic
-pyoptysis
-pyorrhea
-pyorrheal
-pyorrheic
-pyosalpingitis
-pyosalpinx
-pyosepticemia
-pyosepticemic
-pyosis
-pyospermia
-pyotherapy
-pyothorax
-pyotoxinemia
-pyoureter
-pyovesiculosis
-pyoxanthose
-pyr
-pyracanth
-Pyracantha
-Pyraceae
-pyracene
-pyral
-Pyrales
-pyralid
-Pyralidae
-pyralidan
-pyralidid
-Pyralididae
-pyralidiform
-Pyralidoidea
-pyralis
-pyraloid
-Pyrameis
-pyramid
-pyramidaire
-pyramidal
-pyramidale
-pyramidalis
-Pyramidalism
-Pyramidalist
-pyramidally
-pyramidate
-Pyramidella
-pyramidellid
-Pyramidellidae
-pyramider
-pyramides
-pyramidia
-pyramidic
-pyramidical
-pyramidically
-pyramidicalness
-pyramidion
-Pyramidist
-pyramidize
-pyramidlike
-pyramidoattenuate
-pyramidoidal
-pyramidologist
-pyramidoprismatic
-pyramidwise
-pyramoidal
-pyran
-pyranometer
-pyranyl
-pyrargyrite
-Pyrausta
-Pyraustinae
-pyrazine
-pyrazole
-pyrazoline
-pyrazolone
-pyrazolyl
-pyre
-pyrectic
-pyrena
-pyrene
-Pyrenean
-pyrenematous
-pyrenic
-pyrenin
-pyrenocarp
-pyrenocarpic
-pyrenocarpous
-Pyrenochaeta
-pyrenodean
-pyrenodeine
-pyrenodeous
-pyrenoid
-pyrenolichen
-Pyrenomycetales
-pyrenomycete
-Pyrenomycetes
-Pyrenomycetineae
-pyrenomycetous
-Pyrenopeziza
-pyrethrin
-Pyrethrum
-pyrethrum
-pyretic
-pyreticosis
-pyretogenesis
-pyretogenetic
-pyretogenic
-pyretogenous
-pyretography
-pyretology
-pyretolysis
-pyretotherapy
-pyrewinkes
-Pyrex
-pyrex
-pyrexia
-pyrexial
-pyrexic
-pyrexical
-pyrgeometer
-pyrgocephalic
-pyrgocephaly
-pyrgoidal
-pyrgologist
-pyrgom
-pyrheliometer
-pyrheliometric
-pyrheliometry
-pyrheliophor
-pyribole
-pyridazine
-pyridic
-pyridine
-pyridinium
-pyridinize
-pyridone
-pyridoxine
-pyridyl
-pyriform
-pyriformis
-pyrimidine
-pyrimidyl
-pyritaceous
-pyrite
-pyrites
-pyritic
-pyritical
-pyritiferous
-pyritization
-pyritize
-pyritohedral
-pyritohedron
-pyritoid
-pyritology
-pyritous
-pyro
-pyroacetic
-pyroacid
-pyroantimonate
-pyroantimonic
-pyroarsenate
-pyroarsenic
-pyroarsenious
-pyroarsenite
-pyrobelonite
-pyrobituminous
-pyroborate
-pyroboric
-pyrocatechin
-pyrocatechinol
-pyrocatechol
-pyrocatechuic
-pyrocellulose
-pyrochemical
-pyrochemically
-pyrochlore
-pyrochromate
-pyrochromic
-pyrocinchonic
-pyrocitric
-pyroclastic
-pyrocoll
-pyrocollodion
-pyrocomenic
-pyrocondensation
-pyroconductivity
-pyrocotton
-pyrocrystalline
-Pyrocystis
-Pyrodine
-pyroelectric
-pyroelectricity
-pyrogallate
-pyrogallic
-pyrogallol
-pyrogen
-pyrogenation
-pyrogenesia
-pyrogenesis
-pyrogenetic
-pyrogenetically
-pyrogenic
-pyrogenous
-pyroglutamic
-pyrognomic
-pyrognostic
-pyrognostics
-pyrograph
-pyrographer
-pyrographic
-pyrography
-pyrogravure
-pyroguaiacin
-pyroheliometer
-pyroid
-Pyrola
-Pyrolaceae
-pyrolaceous
-pyrolater
-pyrolatry
-pyroligneous
-pyrolignic
-pyrolignite
-pyrolignous
-pyrolite
-pyrollogical
-pyrologist
-pyrology
-pyrolusite
-pyrolysis
-pyrolytic
-pyrolyze
-pyromachy
-pyromagnetic
-pyromancer
-pyromancy
-pyromania
-pyromaniac
-pyromaniacal
-pyromantic
-pyromeconic
-pyromellitic
-pyrometallurgy
-pyrometamorphic
-pyrometamorphism
-pyrometer
-pyrometric
-pyrometrical
-pyrometrically
-pyrometry
-Pyromorphidae
-pyromorphism
-pyromorphite
-pyromorphous
-pyromotor
-pyromucate
-pyromucic
-pyromucyl
-pyronaphtha
-pyrone
-Pyronema
-pyronine
-pyronomics
-pyronyxis
-pyrope
-pyropen
-pyrophanite
-pyrophanous
-pyrophile
-pyrophilous
-pyrophobia
-pyrophone
-pyrophoric
-pyrophorous
-pyrophorus
-pyrophosphate
-pyrophosphoric
-pyrophosphorous
-pyrophotograph
-pyrophotography
-pyrophotometer
-pyrophyllite
-pyrophysalite
-pyropuncture
-pyropus
-pyroracemate
-pyroracemic
-pyroscope
-pyroscopy
-pyrosis
-pyrosmalite
-Pyrosoma
-Pyrosomatidae
-pyrosome
-Pyrosomidae
-pyrosomoid
-pyrosphere
-pyrostat
-pyrostereotype
-pyrostilpnite
-pyrosulphate
-pyrosulphite
-pyrosulphuric
-pyrosulphuryl
-pyrotantalate
-pyrotartaric
-pyrotartrate
-pyrotechnian
-pyrotechnic
-pyrotechnical
-pyrotechnically
-pyrotechnician
-pyrotechnics
-pyrotechnist
-pyrotechny
-pyroterebic
-pyrotheology
-Pyrotheria
-Pyrotherium
-pyrotic
-pyrotoxin
-pyrotritaric
-pyrotritartric
-pyrouric
-pyrovanadate
-pyrovanadic
-pyroxanthin
-pyroxene
-pyroxenic
-pyroxenite
-pyroxmangite
-pyroxonium
-pyroxyle
-pyroxylene
-pyroxylic
-pyroxylin
-Pyrrhic
-pyrrhic
-pyrrhichian
-pyrrhichius
-pyrrhicist
-Pyrrhocoridae
-Pyrrhonean
-Pyrrhonian
-Pyrrhonic
-Pyrrhonism
-Pyrrhonist
-Pyrrhonistic
-Pyrrhonize
-pyrrhotine
-pyrrhotism
-pyrrhotist
-pyrrhotite
-pyrrhous
-Pyrrhuloxia
-Pyrrhus
-pyrrodiazole
-pyrrol
-pyrrole
-pyrrolic
-pyrrolidine
-pyrrolidone
-pyrrolidyl
-pyrroline
-pyrrolylene
-pyrrophyllin
-pyrroporphyrin
-pyrrotriazole
-pyrroyl
-pyrryl
-pyrrylene
-Pyrula
-Pyrularia
-pyruline
-pyruloid
-Pyrus
-pyruvaldehyde
-pyruvate
-pyruvic
-pyruvil
-pyruvyl
-pyrylium
-Pythagorean
-Pythagoreanism
-Pythagoreanize
-Pythagoreanly
-Pythagoric
-Pythagorical
-Pythagorically
-Pythagorism
-Pythagorist
-Pythagorize
-Pythagorizer
-Pythia
-Pythiaceae
-Pythiacystis
-Pythiad
-Pythiambic
-Pythian
-Pythic
-Pythios
-Pythium
-Pythius
-pythogenesis
-pythogenetic
-pythogenic
-pythogenous
-python
-pythoness
-pythonic
-pythonical
-pythonid
-Pythonidae
-pythoniform
-Pythoninae
-pythonine
-pythonism
-Pythonissa
-pythonist
-pythonize
-pythonoid
-pythonomorph
-Pythonomorpha
-pythonomorphic
-pythonomorphous
-pyuria
-pyvuril
-pyx
-Pyxidanthera
-pyxidate
-pyxides
-pyxidium
-pyxie
-Pyxis
-pyxis
-Q
-q
-qasida
-qere
-qeri
-qintar
-Qoheleth
-qoph
-qua
-quab
-quabird
-quachil
-quack
-quackery
-quackhood
-quackish
-quackishly
-quackishness
-quackism
-quackle
-quacksalver
-quackster
-quacky
-quad
-quadded
-quaddle
-Quader
-Quadi
-quadmeter
-quadra
-quadrable
-quadragenarian
-quadragenarious
-Quadragesima
-quadragesimal
-quadragintesimal
-quadral
-quadrangle
-quadrangled
-quadrangular
-quadrangularly
-quadrangularness
-quadrangulate
-quadrans
-quadrant
-quadrantal
-quadrantes
-Quadrantid
-quadrantile
-quadrantlike
-quadrantly
-quadrat
-quadrate
-quadrated
-quadrateness
-quadratic
-quadratical
-quadratically
-quadratics
-Quadratifera
-quadratiferous
-quadratojugal
-quadratomandibular
-quadratosquamosal
-quadratrix
-quadratum
-quadrature
-quadratus
-quadrauricular
-quadrennia
-quadrennial
-quadrennially
-quadrennium
-quadriad
-quadrialate
-quadriannulate
-quadriarticulate
-quadriarticulated
-quadribasic
-quadric
-quadricapsular
-quadricapsulate
-quadricarinate
-quadricellular
-quadricentennial
-quadriceps
-quadrichord
-quadriciliate
-quadricinium
-quadricipital
-quadricone
-quadricorn
-quadricornous
-quadricostate
-quadricotyledonous
-quadricovariant
-quadricrescentic
-quadricrescentoid
-quadricuspid
-quadricuspidal
-quadricuspidate
-quadricycle
-quadricycler
-quadricyclist
-quadridentate
-quadridentated
-quadriderivative
-quadridigitate
-quadriennial
-quadriennium
-quadrienniumutile
-quadrifarious
-quadrifariously
-quadrifid
-quadrifilar
-quadrifocal
-quadrifoil
-quadrifoliate
-quadrifoliolate
-quadrifolious
-quadrifolium
-quadriform
-quadrifrons
-quadrifrontal
-quadrifurcate
-quadrifurcated
-quadrifurcation
-quadriga
-quadrigabled
-quadrigamist
-quadrigate
-quadrigatus
-quadrigeminal
-quadrigeminate
-quadrigeminous
-quadrigeminum
-quadrigenarious
-quadriglandular
-quadrihybrid
-quadrijugal
-quadrijugate
-quadrijugous
-quadrilaminar
-quadrilaminate
-quadrilateral
-quadrilaterally
-quadrilateralness
-quadrilingual
-quadriliteral
-quadrille
-quadrilled
-quadrillion
-quadrillionth
-quadrilobate
-quadrilobed
-quadrilocular
-quadriloculate
-quadrilogue
-quadrilogy
-quadrimembral
-quadrimetallic
-quadrimolecular
-quadrimum
-quadrinodal
-quadrinomial
-quadrinomical
-quadrinominal
-quadrinucleate
-quadrioxalate
-quadriparous
-quadripartite
-quadripartitely
-quadripartition
-quadripennate
-quadriphosphate
-quadriphyllous
-quadripinnate
-quadriplanar
-quadriplegia
-quadriplicate
-quadriplicated
-quadripolar
-quadripole
-quadriportico
-quadriporticus
-quadripulmonary
-quadriquadric
-quadriradiate
-quadrireme
-quadrisect
-quadrisection
-quadriseptate
-quadriserial
-quadrisetose
-quadrispiral
-quadristearate
-quadrisulcate
-quadrisulcated
-quadrisulphide
-quadrisyllabic
-quadrisyllabical
-quadrisyllable
-quadrisyllabous
-quadriternate
-quadritubercular
-quadrituberculate
-quadriurate
-quadrivalence
-quadrivalency
-quadrivalent
-quadrivalently
-quadrivalve
-quadrivalvular
-quadrivial
-quadrivious
-quadrivium
-quadrivoltine
-quadroon
-quadrual
-Quadrula
-quadrum
-Quadrumana
-quadrumanal
-quadrumane
-quadrumanous
-quadruped
-quadrupedal
-quadrupedan
-quadrupedant
-quadrupedantic
-quadrupedantical
-quadrupedate
-quadrupedation
-quadrupedism
-quadrupedous
-quadruplane
-quadruplator
-quadruple
-quadrupleness
-quadruplet
-quadruplex
-quadruplicate
-quadruplication
-quadruplicature
-quadruplicity
-quadruply
-quadrupole
-quaedam
-Quaequae
-quaesitum
-quaestor
-quaestorial
-quaestorian
-quaestorship
-quaestuary
-quaff
-quaffer
-quaffingly
-quag
-quagga
-quagginess
-quaggle
-quaggy
-quagmire
-quagmiry
-quahog
-quail
-quailberry
-quailery
-quailhead
-quaillike
-quaily
-quaint
-quaintance
-quaintise
-quaintish
-quaintly
-quaintness
-Quaitso
-quake
-quakeful
-quakeproof
-Quaker
-quaker
-quakerbird
-Quakerdom
-Quakeress
-Quakeric
-Quakerish
-Quakerishly
-Quakerishness
-Quakerism
-Quakerization
-Quakerize
-Quakerlet
-Quakerlike
-Quakerly
-Quakership
-Quakery
-quaketail
-quakiness
-quaking
-quakingly
-quaky
-quale
-qualifiable
-qualification
-qualificative
-qualificator
-qualificatory
-qualified
-qualifiedly
-qualifiedness
-qualifier
-qualify
-qualifyingly
-qualimeter
-qualitative
-qualitatively
-qualitied
-quality
-qualityless
-qualityship
-qualm
-qualminess
-qualmish
-qualmishly
-qualmishness
-qualmproof
-qualmy
-qualmyish
-qualtagh
-Quamasia
-Quamoclit
-quan
-quandary
-quandong
-quandy
-quannet
-quant
-quanta
-quantic
-quantical
-quantifiable
-quantifiably
-quantification
-quantifier
-quantify
-quantimeter
-quantitate
-quantitative
-quantitatively
-quantitativeness
-quantitied
-quantitive
-quantitively
-quantity
-quantivalence
-quantivalency
-quantivalent
-quantization
-quantize
-quantometer
-quantulum
-quantum
-Quapaw
-quaquaversal
-quaquaversally
-quar
-quarantinable
-quarantine
-quarantiner
-quaranty
-quardeel
-quare
-quarenden
-quarender
-quarentene
-quark
-quarl
-quarle
-quarred
-quarrel
-quarreled
-quarreler
-quarreling
-quarrelingly
-quarrelproof
-quarrelsome
-quarrelsomely
-quarrelsomeness
-quarriable
-quarried
-quarrier
-quarry
-quarryable
-quarrying
-quarryman
-quarrystone
-quart
-quartan
-quartane
-quartation
-quartenylic
-quarter
-quarterage
-quarterback
-quarterdeckish
-quartered
-quarterer
-quartering
-quarterization
-quarterland
-quarterly
-quarterman
-quartermaster
-quartermasterlike
-quartermastership
-quartern
-quarterpace
-quarters
-quartersaw
-quartersawed
-quarterspace
-quarterstaff
-quarterstetch
-quartet
-quartette
-quartetto
-quartful
-quartic
-quartile
-quartine
-quartiparous
-quarto
-Quartodeciman
-quartodecimanism
-quartole
-quartz
-quartzic
-quartziferous
-quartzite
-quartzitic
-quartzless
-quartzoid
-quartzose
-quartzous
-quartzy
-quash
-Quashee
-quashey
-quashy
-quasi
-quasijudicial
-Quasimodo
-quasky
-quassation
-quassative
-Quassia
-quassiin
-quassin
-quat
-quata
-quatch
-quatercentenary
-quatern
-quaternal
-quaternarian
-quaternarius
-quaternary
-quaternate
-quaternion
-quaternionic
-quaternionist
-quaternitarian
-quaternity
-quaters
-quatertenses
-quatorzain
-quatorze
-quatrain
-quatral
-quatrayle
-quatre
-quatrefeuille
-quatrefoil
-quatrefoiled
-quatrefoliated
-quatrible
-quatrin
-quatrino
-quatrocentism
-quatrocentist
-quatrocento
-Quatsino
-quattie
-quattrini
-quatuor
-quatuorvirate
-quauk
-quave
-quaver
-quaverer
-quavering
-quaveringly
-quaverous
-quavery
-quaverymavery
-quaw
-quawk
-quay
-quayage
-quayful
-quaylike
-quayman
-quayside
-quaysider
-qubba
-queach
-queachy
-queak
-queal
-quean
-queanish
-queasily
-queasiness
-queasom
-queasy
-quebrachamine
-quebrachine
-quebrachitol
-quebracho
-quebradilla
-Quechua
-Quechuan
-quedful
-queechy
-queen
-queencake
-queencraft
-queencup
-queendom
-queenfish
-queenhood
-queening
-queenite
-queenless
-queenlet
-queenlike
-queenliness
-queenly
-queenright
-queenroot
-queensberry
-queenship
-queenweed
-queenwood
-queer
-queerer
-queerish
-queerishness
-queerity
-queerly
-queerness
-queersome
-queery
-queest
-queesting
-queet
-queeve
-quegh
-quei
-queintise
-quelch
-Quelea
-quell
-queller
-quemado
-queme
-quemeful
-quemefully
-quemely
-quench
-quenchable
-quenchableness
-quencher
-quenchless
-quenchlessly
-quenchlessness
-quenelle
-quenselite
-quercetagetin
-quercetic
-quercetin
-quercetum
-quercic
-Querciflorae
-quercimeritrin
-quercin
-quercine
-quercinic
-quercitannic
-quercitannin
-quercite
-quercitin
-quercitol
-quercitrin
-quercitron
-quercivorous
-Quercus
-Querecho
-Querendi
-Querendy
-querent
-Queres
-querier
-queriman
-querimonious
-querimoniously
-querimoniousness
-querimony
-querist
-querken
-querl
-quern
-quernal
-Quernales
-quernstone
-querulent
-querulential
-querulist
-querulity
-querulosity
-querulous
-querulously
-querulousness
-query
-querying
-queryingly
-queryist
-quesited
-quesitive
-quest
-quester
-questeur
-questful
-questingly
-question
-questionability
-questionable
-questionableness
-questionably
-questionary
-questionee
-questioner
-questioningly
-questionist
-questionless
-questionlessly
-questionnaire
-questionous
-questionwise
-questman
-questor
-questorial
-questorship
-quet
-quetch
-quetenite
-quetzal
-queue
-quey
-Quiangan
-quiapo
-quib
-quibble
-quibbleproof
-quibbler
-quibblingly
-quiblet
-quica
-Quiche
-quick
-quickbeam
-quickborn
-quicken
-quickenance
-quickenbeam
-quickener
-quickfoot
-quickhatch
-quickhearted
-quickie
-quicklime
-quickly
-quickness
-quicksand
-quicksandy
-quickset
-quicksilver
-quicksilvering
-quicksilverish
-quicksilverishness
-quicksilvery
-quickstep
-quickthorn
-quickwork
-quid
-Quidae
-quiddative
-quidder
-Quiddist
-quiddit
-quidditative
-quidditatively
-quiddity
-quiddle
-quiddler
-quidnunc
-quiesce
-quiescence
-quiescency
-quiescent
-quiescently
-quiet
-quietable
-quieten
-quietener
-quieter
-quieting
-quietism
-quietist
-quietistic
-quietive
-quietlike
-quietly
-quietness
-quietsome
-quietude
-quietus
-quiff
-quiffing
-Quiina
-Quiinaceae
-quiinaceous
-quila
-quiles
-Quileute
-quilkin
-quill
-Quillagua
-quillai
-quillaic
-Quillaja
-quillaja
-quillback
-quilled
-quiller
-quillet
-quilleted
-quillfish
-quilling
-quilltail
-quillwork
-quillwort
-quilly
-quilt
-quilted
-quilter
-quilting
-Quimbaya
-Quimper
-quin
-quina
-quinacrine
-Quinaielt
-quinaldic
-quinaldine
-quinaldinic
-quinaldinium
-quinaldyl
-quinamicine
-quinamidine
-quinamine
-quinanisole
-quinaquina
-quinarian
-quinarius
-quinary
-quinate
-quinatoxine
-Quinault
-quinazoline
-quinazolyl
-quince
-quincentenary
-quincentennial
-quincewort
-quinch
-quincubital
-quincubitalism
-quincuncial
-quincuncially
-quincunx
-quincunxial
-quindecad
-quindecagon
-quindecangle
-quindecasyllabic
-quindecemvir
-quindecemvirate
-quindecennial
-quindecim
-quindecima
-quindecylic
-quindene
-quinetum
-quingentenary
-quinhydrone
-quinia
-quinible
-quinic
-quinicine
-quinidia
-quinidine
-quinin
-quinina
-quinine
-quininiazation
-quininic
-quininism
-quininize
-quiniretin
-quinisext
-quinisextine
-quinism
-quinite
-quinitol
-quinizarin
-quinize
-quink
-quinnat
-quinnet
-Quinnipiac
-quinoa
-quinocarbonium
-quinoform
-quinogen
-quinoid
-quinoidal
-quinoidation
-quinoidine
-quinol
-quinoline
-quinolinic
-quinolinium
-quinolinyl
-quinologist
-quinology
-quinolyl
-quinometry
-quinone
-quinonediimine
-quinonic
-quinonimine
-quinonization
-quinonize
-quinonoid
-quinonyl
-quinopyrin
-quinotannic
-quinotoxine
-quinova
-quinovatannic
-quinovate
-quinovic
-quinovin
-quinovose
-quinoxaline
-quinoxalyl
-quinoyl
-quinquagenarian
-quinquagenary
-Quinquagesima
-quinquagesimal
-quinquarticular
-Quinquatria
-Quinquatrus
-quinquecapsular
-quinquecostate
-quinquedentate
-quinquedentated
-quinquefarious
-quinquefid
-quinquefoliate
-quinquefoliated
-quinquefoliolate
-quinquegrade
-quinquejugous
-quinquelateral
-quinqueliteral
-quinquelobate
-quinquelobated
-quinquelobed
-quinquelocular
-quinqueloculine
-quinquenary
-quinquenerval
-quinquenerved
-quinquennalia
-quinquennia
-quinquenniad
-quinquennial
-quinquennialist
-quinquennially
-quinquennium
-quinquepartite
-quinquepedal
-quinquepedalian
-quinquepetaloid
-quinquepunctal
-quinquepunctate
-quinqueradial
-quinqueradiate
-quinquereme
-quinquertium
-quinquesect
-quinquesection
-quinqueseptate
-quinqueserial
-quinqueseriate
-quinquesyllabic
-quinquesyllable
-quinquetubercular
-quinquetuberculate
-quinquevalence
-quinquevalency
-quinquevalent
-quinquevalve
-quinquevalvous
-quinquevalvular
-quinqueverbal
-quinqueverbial
-quinquevir
-quinquevirate
-quinquiliteral
-quinquina
-quinquino
-quinse
-quinsied
-quinsy
-quinsyberry
-quinsywort
-quint
-quintad
-quintadena
-quintadene
-quintain
-quintal
-quintan
-quintant
-quintary
-quintato
-quinte
-quintelement
-quintennial
-quinternion
-quinteron
-quinteroon
-quintessence
-quintessential
-quintessentiality
-quintessentially
-quintessentiate
-quintet
-quintette
-quintetto
-quintic
-quintile
-Quintilis
-Quintillian
-quintillion
-quintillionth
-Quintin
-quintin
-quintiped
-Quintius
-quinto
-quintocubital
-quintocubitalism
-quintole
-quinton
-quintroon
-quintuple
-quintuplet
-quintuplicate
-quintuplication
-quintuplinerved
-quintupliribbed
-quintus
-quinuclidine
-quinyl
-quinze
-quinzieme
-quip
-quipful
-quipo
-quipper
-quippish
-quippishness
-quippy
-quipsome
-quipsomeness
-quipster
-quipu
-quira
-quire
-quirewise
-Quirinal
-Quirinalia
-quirinca
-quiritarian
-quiritary
-Quirite
-Quirites
-quirk
-quirkiness
-quirkish
-quirksey
-quirksome
-quirky
-quirl
-quirquincho
-quirt
-quis
-quisby
-quiscos
-quisle
-quisling
-Quisqualis
-quisqueite
-quisquilian
-quisquiliary
-quisquilious
-quisquous
-quisutsch
-quit
-quitch
-quitclaim
-quite
-Quitemoca
-Quiteno
-quitrent
-quits
-quittable
-quittance
-quitted
-quitter
-quittor
-Quitu
-quiver
-quivered
-quiverer
-quiverful
-quivering
-quiveringly
-quiverish
-quiverleaf
-quivery
-Quixote
-quixotic
-quixotical
-quixotically
-quixotism
-quixotize
-quixotry
-quiz
-quizzability
-quizzable
-quizzacious
-quizzatorial
-quizzee
-quizzer
-quizzery
-quizzical
-quizzicality
-quizzically
-quizzicalness
-quizzification
-quizzify
-quizziness
-quizzingly
-quizzish
-quizzism
-quizzity
-quizzy
-Qung
-quo
-quod
-quoddies
-quoddity
-quodlibet
-quodlibetal
-quodlibetarian
-quodlibetary
-quodlibetic
-quodlibetical
-quodlibetically
-quoilers
-quoin
-quoined
-quoining
-quoit
-quoiter
-quoitlike
-quoits
-quondam
-quondamly
-quondamship
-quoniam
-quop
-Quoratean
-quorum
-quot
-quota
-quotability
-quotable
-quotableness
-quotably
-quotation
-quotational
-quotationally
-quotationist
-quotative
-quote
-quotee
-quoteless
-quotennial
-quoter
-quoteworthy
-quoth
-quotha
-quotidian
-quotidianly
-quotidianness
-quotient
-quotiety
-quotingly
-quotity
-quotlibet
-quotum
-Qurti
-R
-r
-ra
-raad
-Raanan
-raash
-Rab
-rab
-raband
-rabanna
-rabat
-rabatine
-rabatte
-rabattement
-rabbanist
-rabbanite
-rabbet
-rabbeting
-rabbi
-rabbin
-rabbinate
-rabbindom
-Rabbinic
-rabbinic
-Rabbinica
-rabbinical
-rabbinically
-rabbinism
-rabbinist
-rabbinistic
-rabbinistical
-rabbinite
-rabbinize
-rabbinship
-rabbiship
-rabbit
-rabbitberry
-rabbiter
-rabbithearted
-rabbitlike
-rabbitmouth
-rabbitproof
-rabbitroot
-rabbitry
-rabbitskin
-rabbitweed
-rabbitwise
-rabbitwood
-rabbity
-rabble
-rabblelike
-rabblement
-rabbleproof
-rabbler
-rabblesome
-rabboni
-rabbonim
-Rabelaisian
-Rabelaisianism
-Rabelaism
-Rabi
-rabic
-rabid
-rabidity
-rabidly
-rabidness
-rabies
-rabietic
-rabific
-rabiform
-rabigenic
-Rabin
-rabinet
-rabirubia
-rabitic
-rabulistic
-rabulous
-raccoon
-raccoonberry
-raccroc
-race
-raceabout
-racebrood
-racecourse
-racegoer
-racegoing
-racelike
-racemate
-racemation
-raceme
-racemed
-racemic
-racemiferous
-racemiform
-racemism
-racemization
-racemize
-racemocarbonate
-racemocarbonic
-racemomethylate
-racemose
-racemosely
-racemous
-racemously
-racemule
-racemulose
-racer
-raceway
-rach
-rache
-Rachel
-rachial
-rachialgia
-rachialgic
-rachianalgesia
-Rachianectes
-rachianesthesia
-rachicentesis
-rachides
-rachidial
-rachidian
-rachiform
-Rachiglossa
-rachiglossate
-rachigraph
-rachilla
-rachiocentesis
-rachiococainize
-rachiocyphosis
-rachiodont
-rachiodynia
-rachiometer
-rachiomyelitis
-rachioparalysis
-rachioplegia
-rachioscoliosis
-rachiotome
-rachiotomy
-rachipagus
-rachis
-rachischisis
-rachitic
-rachitis
-rachitism
-rachitogenic
-rachitome
-rachitomous
-rachitomy
-Rachycentridae
-Rachycentron
-racial
-racialism
-racialist
-raciality
-racialization
-racialize
-racially
-racily
-raciness
-racing
-racinglike
-racism
-racist
-rack
-rackabones
-rackan
-rackboard
-racker
-racket
-racketeer
-racketeering
-racketer
-racketing
-racketlike
-racketproof
-racketry
-rackett
-rackettail
-rackety
-rackful
-racking
-rackingly
-rackle
-rackless
-rackmaster
-rackproof
-rackrentable
-rackway
-rackwork
-racloir
-racon
-raconteur
-racoon
-Racovian
-racy
-rad
-rada
-radar
-radarman
-radarscope
-raddle
-raddleman
-raddlings
-radectomy
-Radek
-radiability
-radiable
-radial
-radiale
-radialia
-radiality
-radialization
-radialize
-radially
-radian
-radiance
-radiancy
-radiant
-radiantly
-Radiata
-radiate
-radiated
-radiately
-radiateness
-radiatics
-radiatiform
-radiation
-radiational
-radiative
-radiatopatent
-radiatoporose
-radiatoporous
-radiator
-radiatory
-radiatostriate
-radiatosulcate
-radiature
-radical
-radicalism
-radicality
-radicalization
-radicalize
-radically
-radicalness
-radicand
-radicant
-radicate
-radicated
-radicating
-radication
-radicel
-radices
-radicicola
-radicicolous
-radiciferous
-radiciflorous
-radiciform
-radicivorous
-radicle
-radicolous
-radicose
-Radicula
-radicular
-radicule
-radiculectomy
-radiculitis
-radiculose
-radiectomy
-radiescent
-radiferous
-radii
-radio
-radioacoustics
-radioactinium
-radioactivate
-radioactive
-radioactively
-radioactivity
-radioamplifier
-radioanaphylaxis
-radioautograph
-radioautographic
-radioautography
-radiobicipital
-radiobroadcast
-radiobroadcaster
-radiobroadcasting
-radiobserver
-radiocarbon
-radiocarpal
-radiocast
-radiocaster
-radiochemical
-radiochemistry
-radiocinematograph
-radioconductor
-radiode
-radiodermatitis
-radiodetector
-radiodiagnosis
-radiodigital
-radiodontia
-radiodontic
-radiodontist
-radiodynamic
-radiodynamics
-radioelement
-radiogenic
-radiogoniometer
-radiogoniometric
-radiogoniometry
-radiogram
-radiograph
-radiographer
-radiographic
-radiographical
-radiographically
-radiography
-radiohumeral
-radioisotope
-Radiolaria
-radiolarian
-radiolead
-radiolite
-Radiolites
-radiolitic
-Radiolitidae
-radiolocation
-radiolocator
-radiologic
-radiological
-radiologist
-radiology
-radiolucency
-radiolucent
-radioluminescence
-radioluminescent
-radioman
-radiomedial
-radiometallography
-radiometeorograph
-radiometer
-radiometric
-radiometrically
-radiometry
-radiomicrometer
-radiomovies
-radiomuscular
-radionecrosis
-radioneuritis
-radionics
-radiopacity
-radiopalmar
-radiopaque
-radiopelvimetry
-radiophare
-radiophone
-radiophonic
-radiophony
-radiophosphorus
-radiophotograph
-radiophotography
-radiopraxis
-radioscope
-radioscopic
-radioscopical
-radioscopy
-radiosensibility
-radiosensitive
-radiosensitivity
-radiosonde
-radiosonic
-radiostereoscopy
-radiosurgery
-radiosurgical
-radiosymmetrical
-radiotechnology
-radiotelegram
-radiotelegraph
-radiotelegraphic
-radiotelegraphy
-radiotelephone
-radiotelephonic
-radiotelephony
-radioteria
-radiothallium
-radiotherapeutic
-radiotherapeutics
-radiotherapeutist
-radiotherapist
-radiotherapy
-radiothermy
-radiothorium
-radiotoxemia
-radiotransparency
-radiotransparent
-radiotrician
-Radiotron
-radiotropic
-radiotropism
-radiovision
-radish
-radishlike
-radium
-radiumization
-radiumize
-radiumlike
-radiumproof
-radiumtherapy
-radius
-radix
-radknight
-radman
-radome
-radon
-radsimir
-radula
-radulate
-raduliferous
-raduliform
-Rafael
-Rafe
-raff
-Raffaelesque
-raffe
-raffee
-raffery
-raffia
-raffinase
-raffinate
-raffing
-raffinose
-raffish
-raffishly
-raffishness
-raffle
-raffler
-Rafflesia
-rafflesia
-Rafflesiaceae
-rafflesiaceous
-Rafik
-raft
-raftage
-rafter
-raftiness
-raftlike
-raftman
-raftsman
-rafty
-rag
-raga
-ragabash
-ragabrash
-ragamuffin
-ragamuffinism
-ragamuffinly
-rage
-rageful
-ragefully
-rageless
-rageous
-rageously
-rageousness
-rageproof
-rager
-ragesome
-ragfish
-ragged
-raggedly
-raggedness
-raggedy
-raggee
-ragger
-raggery
-raggety
-raggil
-raggily
-ragging
-raggle
-raggled
-raggy
-raghouse
-Raghu
-raging
-ragingly
-raglan
-raglanite
-raglet
-raglin
-ragman
-Ragnar
-ragout
-ragpicker
-ragseller
-ragshag
-ragsorter
-ragstone
-ragtag
-ragtime
-ragtimer
-ragtimey
-ragule
-raguly
-ragweed
-ragwort
-rah
-Rahanwin
-rahdar
-rahdaree
-Rahul
-Raia
-raia
-Raiae
-raid
-raider
-raidproof
-Raif
-Raiidae
-raiiform
-rail
-railage
-railbird
-railer
-railhead
-railing
-railingly
-raillery
-railless
-raillike
-railly
-railman
-railroad
-railroadana
-railroader
-railroadiana
-railroading
-railroadish
-railroadship
-railway
-railwaydom
-railwayless
-Raimannia
-raiment
-raimentless
-rain
-rainband
-rainbird
-rainbound
-rainbow
-rainbowlike
-rainbowweed
-rainbowy
-rainburst
-raincoat
-raindrop
-Rainer
-rainer
-rainfall
-rainfowl
-rainful
-rainily
-raininess
-rainless
-rainlessness
-rainlight
-rainproof
-rainproofer
-rainspout
-rainstorm
-raintight
-rainwash
-rainworm
-rainy
-raioid
-Rais
-rais
-raisable
-raise
-raised
-raiseman
-raiser
-raisin
-raising
-raisiny
-Raj
-raj
-Raja
-raja
-Rajah
-rajah
-Rajarshi
-rajaship
-Rajasthani
-rajbansi
-Rajeev
-Rajendra
-Rajesh
-Rajidae
-Rajiv
-Rajput
-rakan
-rake
-rakeage
-rakeful
-rakehell
-rakehellish
-rakehelly
-raker
-rakery
-rakesteel
-rakestele
-rakh
-Rakhal
-raki
-rakily
-raking
-rakish
-rakishly
-rakishness
-rakit
-rakshasa
-raku
-Ralf
-rallentando
-ralliance
-Rallidae
-rallier
-ralliform
-Rallinae
-ralline
-Rallus
-rally
-Ralph
-ralph
-ralstonite
-Ram
-ram
-Rama
-ramada
-Ramadoss
-ramage
-Ramaism
-Ramaite
-ramal
-Raman
-Ramanan
-ramanas
-ramarama
-ramass
-ramate
-rambeh
-ramberge
-ramble
-rambler
-rambling
-ramblingly
-ramblingness
-Rambo
-rambong
-rambooze
-Rambouillet
-rambunctious
-rambutan
-ramdohrite
-rame
-rameal
-Ramean
-ramed
-ramekin
-ramellose
-rament
-ramentaceous
-ramental
-ramentiferous
-ramentum
-rameous
-ramequin
-Rameses
-Rameseum
-Ramesh
-Ramessid
-Ramesside
-ramet
-ramex
-ramfeezled
-ramgunshoch
-ramhead
-ramhood
-rami
-ramicorn
-ramie
-ramiferous
-ramificate
-ramification
-ramified
-ramiflorous
-ramiform
-ramify
-ramigerous
-Ramillie
-Ramillied
-ramiparous
-Ramiro
-ramisection
-ramisectomy
-Ramism
-Ramist
-Ramistical
-ramlike
-ramline
-rammack
-rammel
-rammelsbergite
-rammer
-rammerman
-rammish
-rammishly
-rammishness
-rammy
-Ramneek
-Ramnenses
-Ramnes
-Ramon
-Ramona
-Ramoosii
-ramose
-ramosely
-ramosity
-ramosopalmate
-ramosopinnate
-ramososubdivided
-ramous
-ramp
-rampacious
-rampaciously
-rampage
-rampageous
-rampageously
-rampageousness
-rampager
-rampagious
-rampancy
-rampant
-rampantly
-rampart
-ramped
-ramper
-Ramphastidae
-Ramphastides
-Ramphastos
-rampick
-rampike
-ramping
-rampingly
-rampion
-rampire
-rampler
-ramplor
-rampsman
-ramrace
-ramrod
-ramroddy
-ramscallion
-ramsch
-Ramsey
-ramshackle
-ramshackled
-ramshackleness
-ramshackly
-ramson
-ramstam
-ramtil
-ramular
-ramule
-ramuliferous
-ramulose
-ramulous
-ramulus
-ramus
-ramuscule
-Ramusi
-Ran
-ran
-Rana
-rana
-ranal
-Ranales
-ranarian
-ranarium
-Ranatra
-rance
-rancel
-rancellor
-rancelman
-rancer
-rancescent
-ranch
-ranche
-rancher
-rancheria
-ranchero
-ranchless
-ranchman
-rancho
-ranchwoman
-rancid
-rancidification
-rancidify
-rancidity
-rancidly
-rancidness
-rancor
-rancorous
-rancorously
-rancorousness
-rancorproof
-Rand
-rand
-Randal
-Randall
-Randallite
-randan
-randannite
-Randell
-randem
-rander
-Randia
-randing
-randir
-Randite
-randle
-Randolph
-random
-randomish
-randomization
-randomize
-randomly
-randomness
-randomwise
-Randy
-randy
-rane
-Ranella
-Ranere
-rang
-rangatira
-range
-ranged
-rangeless
-rangeman
-ranger
-rangership
-rangework
-rangey
-Rangifer
-rangiferine
-ranginess
-ranging
-rangle
-rangler
-rangy
-rani
-ranid
-Ranidae
-raniferous
-raniform
-Ranina
-Raninae
-ranine
-raninian
-ranivorous
-Ranjit
-rank
-ranked
-ranker
-rankish
-rankle
-rankless
-ranklingly
-rankly
-rankness
-ranksman
-rankwise
-rann
-rannel
-rannigal
-ranny
-Ranquel
-ransack
-ransacker
-ransackle
-ransel
-ranselman
-ransom
-ransomable
-ransomer
-ransomfree
-ransomless
-ranstead
-rant
-rantan
-rantankerous
-rantepole
-ranter
-Ranterism
-ranting
-rantingly
-rantipole
-rantock
-ranty
-ranula
-ranular
-Ranunculaceae
-ranunculaceous
-Ranunculales
-ranunculi
-Ranunculus
-Ranzania
-Raoulia
-rap
-Rapaces
-rapaceus
-rapacious
-rapaciously
-rapaciousness
-rapacity
-rapakivi
-Rapallo
-Rapanea
-Rapateaceae
-rapateaceous
-rape
-rapeful
-raper
-rapeseed
-Raphael
-Raphaelesque
-Raphaelic
-Raphaelism
-Raphaelite
-Raphaelitism
-raphania
-Raphanus
-raphany
-raphe
-Raphia
-raphide
-raphides
-raphidiferous
-raphidiid
-Raphidiidae
-Raphidodea
-Raphidoidea
-Raphiolepis
-raphis
-rapic
-rapid
-rapidity
-rapidly
-rapidness
-rapier
-rapiered
-rapillo
-rapine
-rapiner
-raping
-rapinic
-rapist
-raploch
-rappage
-rapparee
-rappe
-rappel
-rapper
-rapping
-Rappist
-rappist
-Rappite
-rapport
-rapscallion
-rapscallionism
-rapscallionly
-rapscallionry
-rapt
-raptatorial
-raptatory
-raptly
-raptness
-raptor
-Raptores
-raptorial
-raptorious
-raptril
-rapture
-raptured
-raptureless
-rapturist
-rapturize
-rapturous
-rapturously
-rapturousness
-raptury
-raptus
-rare
-rarebit
-rarefaction
-rarefactional
-rarefactive
-rarefiable
-rarefication
-rarefier
-rarefy
-rarely
-rareness
-rareripe
-Rareyfy
-rariconstant
-rarish
-rarity
-Rarotongan
-ras
-rasa
-Rasalas
-Rasalhague
-rasamala
-rasant
-rascacio
-rascal
-rascaldom
-rascaless
-rascalion
-rascalism
-rascality
-rascalize
-rascallike
-rascallion
-rascally
-rascalry
-rascalship
-rasceta
-rascette
-rase
-rasen
-Rasenna
-raser
-rasgado
-rash
-rasher
-rashful
-rashing
-rashlike
-rashly
-rashness
-Rashti
-rasion
-Raskolnik
-Rasores
-rasorial
-rasp
-raspatorium
-raspatory
-raspberriade
-raspberry
-raspberrylike
-rasped
-rasper
-rasping
-raspingly
-raspingness
-raspings
-raspish
-raspite
-raspy
-rasse
-Rasselas
-rassle
-Rastaban
-raster
-rastik
-rastle
-Rastus
-rasure
-rat
-rata
-ratability
-ratable
-ratableness
-ratably
-ratafee
-ratafia
-ratal
-ratanhia
-rataplan
-ratbite
-ratcatcher
-ratcatching
-ratch
-ratchel
-ratchelly
-ratcher
-ratchet
-ratchetlike
-ratchety
-ratching
-ratchment
-rate
-rated
-ratel
-rateless
-ratement
-ratepayer
-ratepaying
-rater
-ratfish
-rath
-rathe
-rathed
-rathely
-ratheness
-rather
-ratherest
-ratheripe
-ratherish
-ratherly
-rathest
-rathite
-Rathnakumar
-rathole
-rathskeller
-raticidal
-raticide
-ratification
-ratificationist
-ratifier
-ratify
-ratihabition
-ratine
-rating
-ratio
-ratiocinant
-ratiocinate
-ratiocination
-ratiocinative
-ratiocinator
-ratiocinatory
-ratiometer
-ration
-rationable
-rationably
-rational
-rationale
-rationalism
-rationalist
-rationalistic
-rationalistical
-rationalistically
-rationalisticism
-rationality
-rationalizable
-rationalization
-rationalize
-rationalizer
-rationally
-rationalness
-rationate
-rationless
-rationment
-Ratitae
-ratite
-ratitous
-ratlike
-ratline
-ratliner
-ratoon
-ratooner
-ratproof
-ratsbane
-ratskeller
-rattage
-rattail
-rattan
-ratteen
-ratten
-rattener
-ratter
-rattery
-ratti
-rattinet
-rattish
-rattle
-rattlebag
-rattlebones
-rattlebox
-rattlebrain
-rattlebrained
-rattlebush
-rattled
-rattlehead
-rattleheaded
-rattlejack
-rattlemouse
-rattlenut
-rattlepate
-rattlepated
-rattlepod
-rattleproof
-rattler
-rattleran
-rattleroot
-rattlertree
-rattles
-rattleskull
-rattleskulled
-rattlesnake
-rattlesome
-rattletrap
-rattleweed
-rattlewort
-rattling
-rattlingly
-rattlingness
-rattly
-ratton
-rattoner
-rattrap
-Rattus
-ratty
-ratwa
-ratwood
-raucid
-raucidity
-raucity
-raucous
-raucously
-raucousness
-raught
-raugrave
-rauk
-raukle
-Raul
-rauli
-raun
-raunge
-raupo
-rauque
-Rauraci
-Raurici
-Rauwolfia
-ravage
-ravagement
-ravager
-rave
-ravehook
-raveinelike
-ravel
-raveler
-ravelin
-raveling
-ravelly
-ravelment
-ravelproof
-raven
-Ravenala
-ravendom
-ravenduck
-Ravenelia
-ravener
-ravenhood
-ravening
-ravenish
-ravenlike
-ravenous
-ravenously
-ravenousness
-ravenry
-ravens
-Ravensara
-ravensara
-ravenstone
-ravenwise
-raver
-Ravi
-ravigote
-ravin
-ravinate
-Ravindran
-Ravindranath
-ravine
-ravined
-ravinement
-raviney
-raving
-ravingly
-ravioli
-ravish
-ravishedly
-ravisher
-ravishing
-ravishingly
-ravishment
-ravison
-ravissant
-raw
-rawboned
-rawbones
-rawhead
-rawhide
-rawhider
-rawish
-rawishness
-rawness
-rax
-Ray
-ray
-raya
-rayage
-Rayan
-rayed
-rayful
-rayless
-raylessness
-raylet
-Raymond
-rayon
-rayonnance
-rayonnant
-raze
-razee
-razer
-razoo
-razor
-razorable
-razorback
-razorbill
-razoredge
-razorless
-razormaker
-razormaking
-razorman
-razorstrop
-Razoumofskya
-razz
-razzia
-razzly
-re
-rea
-reaal
-reabandon
-reabolish
-reabolition
-reabridge
-reabsence
-reabsent
-reabsolve
-reabsorb
-reabsorption
-reabuse
-reacceptance
-reaccess
-reaccession
-reacclimatization
-reacclimatize
-reaccommodate
-reaccompany
-reaccomplish
-reaccomplishment
-reaccord
-reaccost
-reaccount
-reaccredit
-reaccrue
-reaccumulate
-reaccumulation
-reaccusation
-reaccuse
-reaccustom
-reacetylation
-reach
-reachable
-reacher
-reachieve
-reachievement
-reaching
-reachless
-reachy
-reacidification
-reacidify
-reacknowledge
-reacknowledgment
-reacquaint
-reacquaintance
-reacquire
-reacquisition
-react
-reactance
-reactant
-reaction
-reactional
-reactionally
-reactionariness
-reactionarism
-reactionarist
-reactionary
-reactionaryism
-reactionism
-reactionist
-reactivate
-reactivation
-reactive
-reactively
-reactiveness
-reactivity
-reactological
-reactology
-reactor
-reactualization
-reactualize
-reactuate
-read
-readability
-readable
-readableness
-readably
-readapt
-readaptability
-readaptable
-readaptation
-readaptive
-readaptiveness
-readd
-readdition
-readdress
-reader
-readerdom
-readership
-readhere
-readhesion
-readily
-readiness
-reading
-readingdom
-readjourn
-readjournment
-readjudicate
-readjust
-readjustable
-readjuster
-readjustment
-readmeasurement
-readminister
-readmiration
-readmire
-readmission
-readmit
-readmittance
-readopt
-readoption
-readorn
-readvance
-readvancement
-readvent
-readventure
-readvertency
-readvertise
-readvertisement
-readvise
-readvocate
-ready
-reaeration
-reaffect
-reaffection
-reaffiliate
-reaffiliation
-reaffirm
-reaffirmance
-reaffirmation
-reaffirmer
-reafflict
-reafford
-reafforest
-reafforestation
-reaffusion
-reagency
-reagent
-reaggravate
-reaggravation
-reaggregate
-reaggregation
-reaggressive
-reagin
-reagitate
-reagitation
-reagree
-reagreement
-reak
-Real
-real
-realarm
-reales
-realest
-realgar
-realienate
-realienation
-realign
-realignment
-realism
-realist
-realistic
-realistically
-realisticize
-reality
-realive
-realizability
-realizable
-realizableness
-realizably
-realization
-realize
-realizer
-realizing
-realizingly
-reallegation
-reallege
-reallegorize
-realliance
-reallocate
-reallocation
-reallot
-reallotment
-reallow
-reallowance
-reallude
-reallusion
-really
-realm
-realmless
-realmlet
-realness
-realter
-realteration
-realtor
-realty
-ream
-reamage
-reamalgamate
-reamalgamation
-reamass
-reambitious
-reamend
-reamendment
-reamer
-reamerer
-reaminess
-reamputation
-reamuse
-reamy
-reanalysis
-reanalyze
-reanchor
-reanimalize
-reanimate
-reanimation
-reanneal
-reannex
-reannexation
-reannotate
-reannounce
-reannouncement
-reannoy
-reannoyance
-reanoint
-reanswer
-reanvil
-reanxiety
-reap
-reapable
-reapdole
-reaper
-reapologize
-reapology
-reapparel
-reapparition
-reappeal
-reappear
-reappearance
-reappease
-reapplaud
-reapplause
-reappliance
-reapplicant
-reapplication
-reapplier
-reapply
-reappoint
-reappointment
-reapportion
-reapportionment
-reapposition
-reappraisal
-reappraise
-reappraisement
-reappreciate
-reappreciation
-reapprehend
-reapprehension
-reapproach
-reapprobation
-reappropriate
-reappropriation
-reapproval
-reapprove
-rear
-rearbitrate
-rearbitration
-rearer
-reargue
-reargument
-rearhorse
-rearisal
-rearise
-rearling
-rearm
-rearmament
-rearmost
-rearousal
-rearouse
-rearrange
-rearrangeable
-rearrangement
-rearranger
-rearray
-rearrest
-rearrival
-rearrive
-rearward
-rearwardly
-rearwardness
-rearwards
-reascend
-reascendancy
-reascendant
-reascendency
-reascendent
-reascension
-reascensional
-reascent
-reascertain
-reascertainment
-reashlar
-reasiness
-reask
-reason
-reasonability
-reasonable
-reasonableness
-reasonably
-reasoned
-reasonedly
-reasoner
-reasoning
-reasoningly
-reasonless
-reasonlessly
-reasonlessness
-reasonproof
-reaspire
-reassail
-reassault
-reassay
-reassemblage
-reassemble
-reassembly
-reassent
-reassert
-reassertion
-reassertor
-reassess
-reassessment
-reasseverate
-reassign
-reassignation
-reassignment
-reassimilate
-reassimilation
-reassist
-reassistance
-reassociate
-reassociation
-reassort
-reassortment
-reassume
-reassumption
-reassurance
-reassure
-reassured
-reassuredly
-reassurement
-reassurer
-reassuring
-reassuringly
-reastiness
-reastonish
-reastonishment
-reastray
-reasty
-reasy
-reattach
-reattachment
-reattack
-reattain
-reattainment
-reattempt
-reattend
-reattendance
-reattention
-reattentive
-reattest
-reattire
-reattract
-reattraction
-reattribute
-reattribution
-reatus
-reaudit
-reauthenticate
-reauthentication
-reauthorization
-reauthorize
-reavail
-reavailable
-reave
-reaver
-reavoid
-reavoidance
-reavouch
-reavow
-reawait
-reawake
-reawaken
-reawakening
-reawakenment
-reaward
-reaware
-reb
-rebab
-reback
-rebag
-rebait
-rebake
-rebalance
-rebale
-reballast
-reballot
-reban
-rebandage
-rebanish
-rebanishment
-rebankrupt
-rebankruptcy
-rebaptism
-rebaptismal
-rebaptization
-rebaptize
-rebaptizer
-rebar
-rebarbarization
-rebarbarize
-rebarbative
-rebargain
-rebase
-rebasis
-rebatable
-rebate
-rebateable
-rebatement
-rebater
-rebathe
-rebato
-rebawl
-rebeamer
-rebear
-rebeat
-rebeautify
-rebec
-Rebecca
-Rebeccaism
-Rebeccaites
-rebeck
-rebecome
-rebed
-rebeg
-rebeget
-rebeggar
-rebegin
-rebeginner
-rebeginning
-rebeguile
-rebehold
-Rebekah
-rebel
-rebeldom
-rebelief
-rebelieve
-rebeller
-rebellike
-rebellion
-rebellious
-rebelliously
-rebelliousness
-rebellow
-rebelly
-rebelong
-rebelove
-rebelproof
-rebemire
-rebend
-rebenediction
-rebenefit
-rebeset
-rebesiege
-rebestow
-rebestowal
-rebetake
-rebetray
-rebewail
-rebia
-rebias
-rebid
-rebill
-rebillet
-rebilling
-rebind
-rebirth
-rebite
-reblade
-reblame
-reblast
-rebleach
-reblend
-rebless
-reblock
-rebloom
-reblossom
-reblot
-reblow
-reblue
-rebluff
-reblunder
-reboant
-reboantic
-reboard
-reboast
-rebob
-reboil
-reboiler
-reboise
-reboisement
-rebold
-rebolt
-rebone
-rebook
-rebop
-rebore
-reborn
-reborrow
-rebottle
-Reboulia
-rebounce
-rebound
-reboundable
-rebounder
-reboundingness
-rebourbonize
-rebox
-rebrace
-rebraid
-rebranch
-rebrand
-rebrandish
-rebreathe
-rebreed
-rebrew
-rebribe
-rebrick
-rebridge
-rebring
-rebringer
-rebroach
-rebroadcast
-rebronze
-rebrown
-rebrush
-rebrutalize
-rebubble
-rebuckle
-rebud
-rebudget
-rebuff
-rebuffable
-rebuffably
-rebuffet
-rebuffproof
-rebuild
-rebuilder
-rebuilt
-rebukable
-rebuke
-rebukeable
-rebukeful
-rebukefully
-rebukefulness
-rebukeproof
-rebuker
-rebukingly
-rebulk
-rebunch
-rebundle
-rebunker
-rebuoy
-rebuoyage
-reburden
-reburgeon
-reburial
-reburn
-reburnish
-reburst
-rebury
-rebus
-rebush
-rebusy
-rebut
-rebute
-rebutment
-rebuttable
-rebuttal
-rebutter
-rebutton
-rebuy
-recable
-recadency
-recage
-recalcination
-recalcine
-recalcitrance
-recalcitrant
-recalcitrate
-recalcitration
-recalculate
-recalculation
-recalesce
-recalescence
-recalescent
-recalibrate
-recalibration
-recalk
-recall
-recallable
-recallist
-recallment
-recampaign
-recancel
-recancellation
-recandescence
-recandidacy
-recant
-recantation
-recanter
-recantingly
-recanvas
-recap
-recapacitate
-recapitalization
-recapitalize
-recapitulate
-recapitulation
-recapitulationist
-recapitulative
-recapitulator
-recapitulatory
-recappable
-recapper
-recaption
-recaptivate
-recaptivation
-recaptor
-recapture
-recapturer
-recarbon
-recarbonate
-recarbonation
-recarbonization
-recarbonize
-recarbonizer
-recarburization
-recarburize
-recarburizer
-recarnify
-recarpet
-recarriage
-recarrier
-recarry
-recart
-recarve
-recase
-recash
-recasket
-recast
-recaster
-recasting
-recatalogue
-recatch
-recaulescence
-recausticize
-recce
-recco
-reccy
-recede
-recedence
-recedent
-receder
-receipt
-receiptable
-receiptless
-receiptor
-receipts
-receivability
-receivable
-receivables
-receivablness
-receival
-receive
-received
-receivedness
-receiver
-receivership
-recelebrate
-recelebration
-recement
-recementation
-recency
-recense
-recension
-recensionist
-recensor
-recensure
-recensus
-recent
-recenter
-recently
-recentness
-recentralization
-recentralize
-recentre
-recept
-receptacle
-receptacular
-receptaculite
-Receptaculites
-receptaculitid
-Receptaculitidae
-receptaculitoid
-receptaculum
-receptant
-receptibility
-receptible
-reception
-receptionism
-receptionist
-receptitious
-receptive
-receptively
-receptiveness
-receptivity
-receptor
-receptoral
-receptorial
-receptual
-receptually
-recercelee
-recertificate
-recertify
-recess
-recesser
-recession
-recessional
-recessionary
-recessive
-recessively
-recessiveness
-recesslike
-recessor
-Rechabite
-Rechabitism
-rechafe
-rechain
-rechal
-rechallenge
-rechamber
-rechange
-rechant
-rechaos
-rechar
-recharge
-recharter
-rechase
-rechaser
-rechasten
-rechaw
-recheat
-recheck
-recheer
-recherche
-rechew
-rechip
-rechisel
-rechoose
-rechristen
-rechuck
-rechurn
-recidivation
-recidive
-recidivism
-recidivist
-recidivistic
-recidivity
-recidivous
-recipe
-recipiangle
-recipience
-recipiency
-recipiend
-recipiendary
-recipient
-recipiomotor
-reciprocable
-reciprocal
-reciprocality
-reciprocalize
-reciprocally
-reciprocalness
-reciprocate
-reciprocation
-reciprocative
-reciprocator
-reciprocatory
-reciprocitarian
-reciprocity
-recircle
-recirculate
-recirculation
-recision
-recission
-recissory
-recitable
-recital
-recitalist
-recitatif
-recitation
-recitationalism
-recitationist
-recitative
-recitatively
-recitativical
-recitativo
-recite
-recitement
-reciter
-recivilization
-recivilize
-reck
-reckla
-reckless
-recklessly
-recklessness
-reckling
-reckon
-reckonable
-reckoner
-reckoning
-reclaim
-reclaimable
-reclaimableness
-reclaimably
-reclaimant
-reclaimer
-reclaimless
-reclaimment
-reclama
-reclamation
-reclang
-reclasp
-reclass
-reclassification
-reclassify
-reclean
-recleaner
-recleanse
-reclear
-reclearance
-reclimb
-reclinable
-reclinate
-reclinated
-reclination
-recline
-recliner
-reclose
-reclothe
-reclothing
-recluse
-reclusely
-recluseness
-reclusery
-reclusion
-reclusive
-reclusiveness
-reclusory
-recoach
-recoagulation
-recoal
-recoast
-recoat
-recock
-recoct
-recoction
-recode
-recodification
-recodify
-recogitate
-recogitation
-recognition
-recognitive
-recognitor
-recognitory
-recognizability
-recognizable
-recognizably
-recognizance
-recognizant
-recognize
-recognizedly
-recognizee
-recognizer
-recognizingly
-recognizor
-recognosce
-recohabitation
-recoil
-recoiler
-recoilingly
-recoilment
-recoin
-recoinage
-recoiner
-recoke
-recollapse
-recollate
-recollation
-Recollect
-recollectable
-recollected
-recollectedly
-recollectedness
-recollectible
-recollection
-recollective
-recollectively
-recollectiveness
-Recollet
-recolonization
-recolonize
-recolor
-recomb
-recombination
-recombine
-recomember
-recomfort
-recommand
-recommence
-recommencement
-recommencer
-recommend
-recommendability
-recommendable
-recommendableness
-recommendably
-recommendation
-recommendatory
-recommendee
-recommender
-recommission
-recommit
-recommitment
-recommittal
-recommunicate
-recommunion
-recompact
-recompare
-recomparison
-recompass
-recompel
-recompensable
-recompensate
-recompensation
-recompense
-recompenser
-recompensive
-recompete
-recompetition
-recompetitor
-recompilation
-recompile
-recompilement
-recomplain
-recomplaint
-recomplete
-recompletion
-recompliance
-recomplicate
-recomplication
-recomply
-recompose
-recomposer
-recomposition
-recompound
-recomprehend
-recomprehension
-recompress
-recompression
-recomputation
-recompute
-recon
-reconceal
-reconcealment
-reconcede
-reconceive
-reconcentrate
-reconcentration
-reconception
-reconcert
-reconcession
-reconcilability
-reconcilable
-reconcilableness
-reconcilably
-reconcile
-reconcilee
-reconcileless
-reconcilement
-reconciler
-reconciliability
-reconciliable
-reconciliate
-reconciliation
-reconciliative
-reconciliator
-reconciliatory
-reconciling
-reconcilingly
-reconclude
-reconclusion
-reconcoct
-reconcrete
-reconcur
-recondemn
-recondemnation
-recondensation
-recondense
-recondite
-reconditely
-reconditeness
-recondition
-recondole
-reconduct
-reconduction
-reconfer
-reconfess
-reconfide
-reconfine
-reconfinement
-reconfirm
-reconfirmation
-reconfiscate
-reconfiscation
-reconform
-reconfound
-reconfront
-reconfuse
-reconfusion
-recongeal
-recongelation
-recongest
-recongestion
-recongratulate
-recongratulation
-reconjoin
-reconjunction
-reconnaissance
-reconnect
-reconnection
-reconnoissance
-reconnoiter
-reconnoiterer
-reconnoiteringly
-reconnoitre
-reconnoitrer
-reconnoitringly
-reconquer
-reconqueror
-reconquest
-reconsecrate
-reconsecration
-reconsent
-reconsider
-reconsideration
-reconsign
-reconsignment
-reconsole
-reconsolidate
-reconsolidation
-reconstituent
-reconstitute
-reconstitution
-reconstruct
-reconstructed
-reconstruction
-reconstructional
-reconstructionary
-reconstructionist
-reconstructive
-reconstructiveness
-reconstructor
-reconstrue
-reconsult
-reconsultation
-recontact
-recontemplate
-recontemplation
-recontend
-recontest
-recontinuance
-recontinue
-recontract
-recontraction
-recontrast
-recontribute
-recontribution
-recontrivance
-recontrive
-recontrol
-reconvalesce
-reconvalescence
-reconvalescent
-reconvene
-reconvention
-reconventional
-reconverge
-reconverse
-reconversion
-reconvert
-reconvertible
-reconvey
-reconveyance
-reconvict
-reconviction
-reconvince
-reconvoke
-recook
-recool
-recooper
-recopper
-recopy
-recopyright
-record
-recordable
-recordant
-recordation
-recordative
-recordatively
-recordatory
-recordedly
-recorder
-recordership
-recording
-recordist
-recordless
-recork
-recorporification
-recorporify
-recorrect
-recorrection
-recorrupt
-recorruption
-recostume
-recounsel
-recount
-recountable
-recountal
-recountenance
-recounter
-recountless
-recoup
-recoupable
-recouper
-recouple
-recoupment
-recourse
-recover
-recoverability
-recoverable
-recoverableness
-recoverance
-recoveree
-recoverer
-recoveringly
-recoverless
-recoveror
-recovery
-recramp
-recrank
-recrate
-recreance
-recreancy
-recreant
-recreantly
-recreantness
-recrease
-recreate
-recreation
-recreational
-recreationist
-recreative
-recreatively
-recreativeness
-recreator
-recreatory
-recredit
-recrement
-recremental
-recrementitial
-recrementitious
-recrescence
-recrew
-recriminate
-recrimination
-recriminative
-recriminator
-recriminatory
-recriticize
-recroon
-recrop
-recross
-recrowd
-recrown
-recrucify
-recrudency
-recrudesce
-recrudescence
-recrudescency
-recrudescent
-recruit
-recruitable
-recruitage
-recruital
-recruitee
-recruiter
-recruithood
-recruiting
-recruitment
-recruity
-recrush
-recrusher
-recrystallization
-recrystallize
-rect
-recta
-rectal
-rectalgia
-rectally
-rectangle
-rectangled
-rectangular
-rectangularity
-rectangularly
-rectangularness
-rectangulate
-rectangulometer
-rectectomy
-recti
-rectifiable
-rectification
-rectificative
-rectificator
-rectificatory
-rectified
-rectifier
-rectify
-rectigrade
-Rectigraph
-rectilineal
-rectilineally
-rectilinear
-rectilinearism
-rectilinearity
-rectilinearly
-rectilinearness
-rectilineation
-rectinerved
-rection
-rectipetality
-rectirostral
-rectischiac
-rectiserial
-rectitic
-rectitis
-rectitude
-rectitudinous
-recto
-rectoabdominal
-rectocele
-rectoclysis
-rectococcygeal
-rectococcygeus
-rectocolitic
-rectocolonic
-rectocystotomy
-rectogenital
-rectopexy
-rectoplasty
-rector
-rectoral
-rectorate
-rectoress
-rectorial
-rectorrhaphy
-rectorship
-rectory
-rectoscope
-rectoscopy
-rectosigmoid
-rectostenosis
-rectostomy
-rectotome
-rectotomy
-rectovaginal
-rectovesical
-rectress
-rectricial
-rectrix
-rectum
-rectus
-recubant
-recubate
-recultivate
-recultivation
-recumbence
-recumbency
-recumbent
-recumbently
-recuperability
-recuperance
-recuperate
-recuperation
-recuperative
-recuperativeness
-recuperator
-recuperatory
-recur
-recure
-recureful
-recureless
-recurl
-recurrence
-recurrency
-recurrent
-recurrently
-recurrer
-recurring
-recurringly
-recurse
-recursion
-recursive
-recurtain
-recurvant
-recurvate
-recurvation
-recurvature
-recurve
-Recurvirostra
-recurvirostral
-Recurvirostridae
-recurvopatent
-recurvoternate
-recurvous
-recusance
-recusancy
-recusant
-recusation
-recusative
-recusator
-recuse
-recushion
-recussion
-recut
-recycle
-Red
-red
-redact
-redaction
-redactional
-redactor
-redactorial
-redamage
-redamnation
-redan
-redare
-redargue
-redargution
-redargutive
-redargutory
-redarken
-redarn
-redart
-redate
-redaub
-redawn
-redback
-redbait
-redbeard
-redbelly
-redberry
-redbill
-redbird
-redbone
-redbreast
-redbrush
-redbuck
-redbud
-redcap
-redcoat
-redd
-redden
-reddendo
-reddendum
-reddening
-redder
-redding
-reddingite
-reddish
-reddishness
-reddition
-reddleman
-reddock
-reddsman
-reddy
-rede
-redeal
-redebate
-redebit
-redeceive
-redecide
-redecimate
-redecision
-redeck
-redeclaration
-redeclare
-redecline
-redecorate
-redecoration
-redecrease
-redecussate
-rededicate
-rededication
-rededicatory
-rededuct
-rededuction
-redeed
-redeem
-redeemability
-redeemable
-redeemableness
-redeemably
-redeemer
-redeemeress
-redeemership
-redeemless
-redefault
-redefeat
-redefecate
-redefer
-redefiance
-redefine
-redefinition
-redeflect
-redefy
-redeify
-redelay
-redelegate
-redelegation
-redeliberate
-redeliberation
-redeliver
-redeliverance
-redeliverer
-redelivery
-redemand
-redemandable
-redemise
-redemolish
-redemonstrate
-redemonstration
-redemptible
-Redemptine
-redemption
-redemptional
-redemptioner
-Redemptionist
-redemptionless
-redemptive
-redemptively
-redemptor
-redemptorial
-Redemptorist
-redemptory
-redemptress
-redemptrice
-redenigrate
-redeny
-redepend
-redeploy
-redeployment
-redeposit
-redeposition
-redepreciate
-redepreciation
-redeprive
-rederivation
-redescend
-redescent
-redescribe
-redescription
-redesertion
-redeserve
-redesign
-redesignate
-redesignation
-redesire
-redesirous
-redesman
-redespise
-redetect
-redetention
-redetermination
-redetermine
-redevelop
-redeveloper
-redevelopment
-redevise
-redevote
-redevotion
-redeye
-redfin
-redfinch
-redfish
-redfoot
-redhead
-redheaded
-redheadedly
-redheadedness
-redhearted
-redhibition
-redhibitory
-redhoop
-redia
-redictate
-redictation
-redient
-redifferentiate
-redifferentiation
-redig
-redigest
-redigestion
-rediminish
-redingote
-redintegrate
-redintegration
-redintegrative
-redintegrator
-redip
-redipper
-redirect
-redirection
-redisable
-redisappear
-redisburse
-redisbursement
-redischarge
-rediscipline
-rediscount
-rediscourage
-rediscover
-rediscoverer
-rediscovery
-rediscuss
-rediscussion
-redisembark
-redismiss
-redispatch
-redispel
-redisperse
-redisplay
-redispose
-redisposition
-redispute
-redissect
-redissection
-redisseise
-redisseisin
-redisseisor
-redisseize
-redisseizin
-redisseizor
-redissoluble
-redissolution
-redissolvable
-redissolve
-redistend
-redistill
-redistillation
-redistiller
-redistinguish
-redistrain
-redistrainer
-redistribute
-redistributer
-redistribution
-redistributive
-redistributor
-redistributory
-redistrict
-redisturb
-redive
-rediversion
-redivert
-redivertible
-redivide
-redivision
-redivive
-redivivous
-redivivus
-redivorce
-redivorcement
-redivulge
-redivulgence
-redjacket
-redknees
-redleg
-redlegs
-redly
-redmouth
-redness
-redo
-redock
-redocket
-redolence
-redolency
-redolent
-redolently
-redominate
-redondilla
-redoom
-redouble
-redoublement
-redoubler
-redoubling
-redoubt
-redoubtable
-redoubtableness
-redoubtably
-redoubted
-redound
-redowa
-redox
-redpoll
-redraft
-redrag
-redrape
-redraw
-redrawer
-redream
-redredge
-redress
-redressable
-redressal
-redresser
-redressible
-redressive
-redressless
-redressment
-redressor
-redrill
-redrive
-redroot
-redry
-redsear
-redshank
-redshirt
-redskin
-redstart
-redstreak
-redtab
-redtail
-redthroat
-redtop
-redub
-redubber
-reduce
-reduceable
-reduceableness
-reduced
-reducement
-reducent
-reducer
-reducibility
-reducible
-reducibleness
-reducibly
-reducing
-reduct
-reductant
-reductase
-reductibility
-reduction
-reductional
-reductionism
-reductionist
-reductionistic
-reductive
-reductively
-reductor
-reductorial
-redue
-Redunca
-redundance
-redundancy
-redundant
-redundantly
-reduplicate
-reduplication
-reduplicative
-reduplicatively
-reduplicatory
-reduplicature
-reduviid
-Reduviidae
-reduvioid
-Reduvius
-redux
-redward
-redware
-redweed
-redwing
-redwithe
-redwood
-redye
-Ree
-ree
-reechy
-reed
-reedbird
-reedbuck
-reedbush
-reeded
-reeden
-reeder
-reediemadeasy
-reedily
-reediness
-reeding
-reedish
-reedition
-reedless
-reedlike
-reedling
-reedmaker
-reedmaking
-reedman
-reedplot
-reedwork
-reedy
-reef
-reefable
-reefer
-reefing
-reefy
-reek
-reeker
-reekingly
-reeky
-reel
-reelable
-reeled
-reeler
-reelingly
-reelrall
-reem
-reeming
-reemish
-reen
-reenge
-reeper
-Rees
-reese
-reeshle
-reesk
-reesle
-reest
-reester
-reestle
-reesty
-reet
-reetam
-reetle
-reeve
-reeveland
-reeveship
-ref
-reface
-refacilitate
-refall
-refallow
-refan
-refascinate
-refascination
-refashion
-refashioner
-refashionment
-refasten
-refathered
-refavor
-refect
-refection
-refectionary
-refectioner
-refective
-refectorarian
-refectorary
-refectorer
-refectorial
-refectorian
-refectory
-refederate
-refeed
-refeel
-refeign
-refel
-refence
-refer
-referable
-referee
-reference
-referenda
-referendal
-referendary
-referendaryship
-referendum
-referent
-referential
-referentially
-referently
-referment
-referral
-referrer
-referrible
-referribleness
-refertilization
-refertilize
-refetch
-refight
-refigure
-refill
-refillable
-refilm
-refilter
-refinable
-refinage
-refinance
-refind
-refine
-refined
-refinedly
-refinedness
-refinement
-refiner
-refinery
-refinger
-refining
-refiningly
-refinish
-refire
-refit
-refitment
-refix
-refixation
-refixture
-reflag
-reflagellate
-reflame
-reflash
-reflate
-reflation
-reflationism
-reflect
-reflectance
-reflected
-reflectedly
-reflectedness
-reflectent
-reflecter
-reflectibility
-reflectible
-reflecting
-reflectingly
-reflection
-reflectional
-reflectionist
-reflectionless
-reflective
-reflectively
-reflectiveness
-reflectivity
-reflectometer
-reflectometry
-reflector
-reflectoscope
-refledge
-reflee
-reflex
-reflexed
-reflexibility
-reflexible
-reflexism
-reflexive
-reflexively
-reflexiveness
-reflexivity
-reflexly
-reflexness
-reflexogenous
-reflexological
-reflexologist
-reflexology
-refling
-refloat
-refloatation
-reflog
-reflood
-refloor
-reflorescence
-reflorescent
-reflourish
-reflourishment
-reflow
-reflower
-refluctuation
-refluence
-refluency
-refluent
-reflush
-reflux
-refluxed
-refly
-refocillate
-refocillation
-refocus
-refold
-refoment
-refont
-refool
-refoot
-reforbid
-reforce
-reford
-reforecast
-reforest
-reforestation
-reforestization
-reforestize
-reforestment
-reforfeit
-reforfeiture
-reforge
-reforger
-reforget
-reforgive
-reform
-reformability
-reformable
-reformableness
-reformado
-reformandum
-Reformati
-reformation
-reformational
-reformationary
-reformationist
-reformative
-reformatively
-reformatness
-reformatory
-reformed
-reformedly
-reformer
-reformeress
-reformingly
-reformism
-reformist
-reformistic
-reformproof
-reformulate
-reformulation
-reforsake
-refortification
-refortify
-reforward
-refound
-refoundation
-refounder
-refract
-refractable
-refracted
-refractedly
-refractedness
-refractile
-refractility
-refracting
-refraction
-refractional
-refractionate
-refractionist
-refractive
-refractively
-refractiveness
-refractivity
-refractometer
-refractometric
-refractometry
-refractor
-refractorily
-refractoriness
-refractory
-refracture
-refragability
-refragable
-refragableness
-refrain
-refrainer
-refrainment
-reframe
-refrangent
-refrangibility
-refrangible
-refrangibleness
-refreeze
-refrenation
-refrenzy
-refresh
-refreshant
-refreshen
-refreshener
-refresher
-refreshful
-refreshfully
-refreshing
-refreshingly
-refreshingness
-refreshment
-refrigerant
-refrigerate
-refrigerating
-refrigeration
-refrigerative
-refrigerator
-refrigeratory
-refrighten
-refringence
-refringency
-refringent
-refront
-refrustrate
-reft
-refuel
-refueling
-refuge
-refugee
-refugeeism
-refugeeship
-refulge
-refulgence
-refulgency
-refulgent
-refulgently
-refulgentness
-refunction
-refund
-refunder
-refundment
-refurbish
-refurbishment
-refurl
-refurnish
-refurnishment
-refusable
-refusal
-refuse
-refuser
-refusing
-refusingly
-refusion
-refusive
-refutability
-refutable
-refutably
-refutal
-refutation
-refutative
-refutatory
-refute
-refuter
-reg
-regain
-regainable
-regainer
-regainment
-regal
-regale
-Regalecidae
-Regalecus
-regalement
-regaler
-regalia
-regalian
-regalism
-regalist
-regality
-regalize
-regallop
-regally
-regalness
-regalvanization
-regalvanize
-regard
-regardable
-regardance
-regardancy
-regardant
-regarder
-regardful
-regardfully
-regardfulness
-regarding
-regardless
-regardlessly
-regardlessness
-regarment
-regarnish
-regarrison
-regather
-regatta
-regauge
-regelate
-regelation
-regency
-regeneracy
-regenerance
-regenerant
-regenerate
-regenerateness
-regeneration
-regenerative
-regeneratively
-regenerator
-regeneratory
-regeneratress
-regeneratrix
-regenesis
-regent
-regental
-regentess
-regentship
-regerminate
-regermination
-reges
-reget
-Regga
-Reggie
-regia
-regicidal
-regicide
-regicidism
-regift
-regifuge
-regild
-regill
-regime
-regimen
-regimenal
-regiment
-regimental
-regimentaled
-regimentalled
-regimentally
-regimentals
-regimentary
-regimentation
-regiminal
-regin
-reginal
-Reginald
-region
-regional
-regionalism
-regionalist
-regionalistic
-regionalization
-regionalize
-regionally
-regionary
-regioned
-register
-registered
-registerer
-registership
-registrability
-registrable
-registral
-registrant
-registrar
-registrarship
-registrary
-registrate
-registration
-registrational
-registrationist
-registrator
-registrer
-registry
-regive
-regladden
-reglair
-reglaze
-regle
-reglement
-reglementary
-reglementation
-reglementist
-reglet
-reglorified
-regloss
-reglove
-reglow
-reglue
-regma
-regmacarp
-regnal
-regnancy
-regnant
-regnerable
-regolith
-regorge
-regovern
-regradation
-regrade
-regraduate
-regraduation
-regraft
-regrant
-regrasp
-regrass
-regrate
-regrater
-regratification
-regratify
-regrating
-regratingly
-regrator
-regratress
-regravel
-regrede
-regreen
-regreet
-regress
-regression
-regressionist
-regressive
-regressively
-regressiveness
-regressivity
-regressor
-regret
-regretful
-regretfully
-regretfulness
-regretless
-regrettable
-regrettableness
-regrettably
-regretter
-regrettingly
-regrind
-regrinder
-regrip
-regroup
-regroupment
-regrow
-regrowth
-reguarantee
-reguard
-reguardant
-reguide
-regula
-regulable
-regular
-Regulares
-Regularia
-regularity
-regularization
-regularize
-regularizer
-regularly
-regularness
-regulatable
-regulate
-regulated
-regulation
-regulationist
-regulative
-regulatively
-regulator
-regulatorship
-regulatory
-regulatress
-regulatris
-reguli
-reguline
-regulize
-Regulus
-regulus
-regur
-regurge
-regurgitant
-regurgitate
-regurgitation
-regush
-reh
-rehabilitate
-rehabilitation
-rehabilitative
-rehair
-rehale
-rehallow
-rehammer
-rehandicap
-rehandle
-rehandler
-rehandling
-rehang
-rehappen
-reharden
-reharm
-reharmonize
-reharness
-reharrow
-reharvest
-rehash
-rehaul
-rehazard
-rehead
-reheal
-reheap
-rehear
-rehearing
-rehearsal
-rehearse
-rehearser
-rehearten
-reheat
-reheater
-Reheboth
-rehedge
-reheel
-reheighten
-Rehoboam
-Rehoboth
-Rehobothan
-rehoe
-rehoist
-rehollow
-rehonor
-rehonour
-rehood
-rehook
-rehoop
-rehouse
-rehumanize
-rehumble
-rehumiliate
-rehumiliation
-rehung
-rehybridize
-rehydrate
-rehydration
-rehypothecate
-rehypothecation
-rehypothecator
-reichsgulden
-Reichsland
-Reichslander
-reichsmark
-reichspfennig
-reichstaler
-Reid
-reidentification
-reidentify
-reif
-reification
-reify
-reign
-reignite
-reignition
-reignore
-reillume
-reilluminate
-reillumination
-reillumine
-reillustrate
-reillustration
-reim
-reimage
-reimagination
-reimagine
-reimbark
-reimbarkation
-reimbibe
-reimbody
-reimbursable
-reimburse
-reimbursement
-reimburser
-reimbush
-reimbushment
-reimkennar
-reimmerge
-reimmerse
-reimmersion
-reimmigrant
-reimmigration
-reimpact
-reimpark
-reimpart
-reimpatriate
-reimpatriation
-reimpel
-reimplant
-reimplantation
-reimply
-reimport
-reimportation
-reimportune
-reimpose
-reimposition
-reimposure
-reimpregnate
-reimpress
-reimpression
-reimprint
-reimprison
-reimprisonment
-reimprove
-reimprovement
-reimpulse
-rein
-reina
-reinability
-reinaugurate
-reinauguration
-reincapable
-reincarnadine
-reincarnate
-reincarnation
-reincarnationism
-reincarnationist
-reincense
-reincentive
-reincidence
-reincidency
-reincite
-reinclination
-reincline
-reinclude
-reinclusion
-reincorporate
-reincorporation
-reincrease
-reincrudate
-reincrudation
-reinculcate
-reincur
-reindebted
-reindebtedness
-reindeer
-reindependence
-reindicate
-reindication
-reindict
-reindictment
-reindifferent
-reindorse
-reinduce
-reinducement
-reindue
-reindulge
-reindulgence
-Reiner
-reinette
-reinfect
-reinfection
-reinfectious
-reinfer
-reinfest
-reinfestation
-reinflame
-reinflate
-reinflation
-reinflict
-reinfliction
-reinfluence
-reinforce
-reinforcement
-reinforcer
-reinform
-reinfuse
-reinfusion
-reingraft
-reingratiate
-reingress
-reinhabit
-reinhabitation
-Reinhard
-reinherit
-reinitiate
-reinitiation
-reinject
-reinjure
-reinless
-reinoculate
-reinoculation
-reinquire
-reinquiry
-reins
-reinsane
-reinsanity
-reinscribe
-reinsert
-reinsertion
-reinsist
-reinsman
-reinspect
-reinspection
-reinspector
-reinsphere
-reinspiration
-reinspire
-reinspirit
-reinstall
-reinstallation
-reinstallment
-reinstalment
-reinstate
-reinstatement
-reinstation
-reinstator
-reinstauration
-reinstil
-reinstill
-reinstitute
-reinstitution
-reinstruct
-reinstruction
-reinsult
-reinsurance
-reinsure
-reinsurer
-reintegrate
-reintegration
-reintend
-reinter
-reintercede
-reintercession
-reinterchange
-reinterest
-reinterfere
-reinterference
-reinterment
-reinterpret
-reinterpretation
-reinterrogate
-reinterrogation
-reinterrupt
-reinterruption
-reintervene
-reintervention
-reinterview
-reinthrone
-reintimate
-reintimation
-reintitule
-reintrench
-reintroduce
-reintroduction
-reintrude
-reintrusion
-reintuition
-reintuitive
-reinvade
-reinvasion
-reinvent
-reinvention
-reinventor
-reinversion
-reinvert
-reinvest
-reinvestigate
-reinvestigation
-reinvestiture
-reinvestment
-reinvigorate
-reinvigoration
-reinvitation
-reinvite
-reinvoice
-reinvolve
-Reinwardtia
-reirrigate
-reirrigation
-reis
-reisolation
-reissuable
-reissue
-reissuement
-reissuer
-reit
-reitbok
-reitbuck
-reitemize
-reiter
-reiterable
-reiterance
-reiterant
-reiterate
-reiterated
-reiteratedly
-reiteratedness
-reiteration
-reiterative
-reiteratively
-reiver
-rejail
-Rejang
-reject
-rejectable
-rejectableness
-rejectage
-rejectamenta
-rejecter
-rejectingly
-rejection
-rejective
-rejectment
-rejector
-rejerk
-rejoice
-rejoiceful
-rejoicement
-rejoicer
-rejoicing
-rejoicingly
-rejoin
-rejoinder
-rejolt
-rejourney
-rejudge
-rejumble
-rejunction
-rejustification
-rejustify
-rejuvenant
-rejuvenate
-rejuvenation
-rejuvenative
-rejuvenator
-rejuvenesce
-rejuvenescence
-rejuvenescent
-rejuvenize
-Reki
-rekick
-rekill
-rekindle
-rekindlement
-rekindler
-reking
-rekiss
-reknit
-reknow
-rel
-relabel
-relace
-relacquer
-relade
-reladen
-relais
-relament
-relamp
-reland
-relap
-relapper
-relapsable
-relapse
-relapseproof
-relapser
-relapsing
-relast
-relaster
-relata
-relatability
-relatable
-relatch
-relate
-related
-relatedness
-relater
-relatinization
-relation
-relational
-relationality
-relationally
-relationary
-relationism
-relationist
-relationless
-relationship
-relatival
-relative
-relatively
-relativeness
-relativism
-relativist
-relativistic
-relativity
-relativization
-relativize
-relator
-relatrix
-relatum
-relaunch
-relax
-relaxable
-relaxant
-relaxation
-relaxative
-relaxatory
-relaxed
-relaxedly
-relaxedness
-relaxer
-relay
-relayman
-relbun
-relead
-releap
-relearn
-releasable
-release
-releasee
-releasement
-releaser
-releasor
-releather
-relection
-relegable
-relegate
-relegation
-relend
-relent
-relenting
-relentingly
-relentless
-relentlessly
-relentlessness
-relentment
-relessee
-relessor
-relet
-reletter
-relevance
-relevancy
-relevant
-relevantly
-relevate
-relevation
-relevator
-relevel
-relevy
-reliability
-reliable
-reliableness
-reliably
-reliance
-reliant
-reliantly
-reliberate
-relic
-relicary
-relicense
-relick
-reliclike
-relicmonger
-relict
-relicted
-reliction
-relief
-reliefless
-relier
-relievable
-relieve
-relieved
-relievedly
-reliever
-relieving
-relievingly
-relievo
-relift
-religate
-religation
-relight
-relightable
-relighten
-relightener
-relighter
-religion
-religionary
-religionate
-religioner
-religionism
-religionist
-religionistic
-religionize
-religionless
-religiose
-religiosity
-religious
-religiously
-religiousness
-relime
-relimit
-relimitation
-reline
-reliner
-relink
-relinquent
-relinquish
-relinquisher
-relinquishment
-reliquaire
-reliquary
-reliquefy
-reliquiae
-reliquian
-reliquidate
-reliquidation
-reliquism
-relish
-relishable
-relisher
-relishing
-relishingly
-relishsome
-relishy
-relist
-relisten
-relitigate
-relive
-Rellyan
-Rellyanism
-Rellyanite
-reload
-reloan
-relocable
-relocate
-relocation
-relocator
-relock
-relodge
-relook
-relose
-relost
-relot
-relove
-relower
-relucent
-reluct
-reluctance
-reluctancy
-reluctant
-reluctantly
-reluctate
-reluctation
-reluctivity
-relume
-relumine
-rely
-remade
-remagnetization
-remagnetize
-remagnification
-remagnify
-remail
-remain
-remainder
-remainderman
-remaindership
-remainer
-remains
-remaintain
-remaintenance
-remake
-remaker
-reman
-remanage
-remanagement
-remanation
-remancipate
-remancipation
-remand
-remandment
-remanence
-remanency
-remanent
-remanet
-remanipulate
-remanipulation
-remantle
-remanufacture
-remanure
-remap
-remarch
-remargin
-remark
-remarkability
-remarkable
-remarkableness
-remarkably
-remarkedly
-remarker
-remarket
-remarque
-remarriage
-remarry
-remarshal
-remask
-remass
-remast
-remasticate
-remastication
-rematch
-rematerialize
-remble
-Rembrandt
-Rembrandtesque
-Rembrandtish
-Rembrandtism
-remeant
-remeasure
-remeasurement
-remede
-remediable
-remediableness
-remediably
-remedial
-remedially
-remediation
-remediless
-remedilessly
-remedilessness
-remeditate
-remeditation
-remedy
-remeet
-remelt
-remember
-rememberability
-rememberable
-rememberably
-rememberer
-remembrance
-remembrancer
-remembrancership
-rememorize
-remenace
-remend
-remerge
-remetal
-remex
-Remi
-remica
-remicate
-remication
-remicle
-remiform
-remigate
-remigation
-remiges
-remigial
-remigrant
-remigrate
-remigration
-Remijia
-remilitarization
-remilitarize
-remill
-remimic
-remind
-remindal
-reminder
-remindful
-remindingly
-remineralization
-remineralize
-remingle
-reminisce
-reminiscence
-reminiscenceful
-reminiscencer
-reminiscency
-reminiscent
-reminiscential
-reminiscentially
-reminiscently
-reminiscer
-reminiscitory
-remint
-remiped
-remirror
-remise
-remisrepresent
-remisrepresentation
-remiss
-remissful
-remissibility
-remissible
-remissibleness
-remission
-remissive
-remissively
-remissiveness
-remissly
-remissness
-remissory
-remisunderstand
-remit
-remitment
-remittable
-remittal
-remittance
-remittancer
-remittee
-remittence
-remittency
-remittent
-remittently
-remitter
-remittitur
-remittor
-remix
-remixture
-remnant
-remnantal
-remobilization
-remobilize
-Remoboth
-remock
-remodel
-remodeler
-remodeller
-remodelment
-remodification
-remodify
-remolade
-remold
-remollient
-remonetization
-remonetize
-remonstrance
-remonstrant
-remonstrantly
-remonstrate
-remonstrating
-remonstratingly
-remonstration
-remonstrative
-remonstratively
-remonstrator
-remonstratory
-remontado
-remontant
-remontoir
-remop
-remora
-remord
-remorse
-remorseful
-remorsefully
-remorsefulness
-remorseless
-remorselessly
-remorselessness
-remorseproof
-remortgage
-remote
-remotely
-remoteness
-remotion
-remotive
-remould
-remount
-removability
-removable
-removableness
-removably
-removal
-remove
-removed
-removedly
-removedness
-removement
-remover
-removing
-remultiplication
-remultiply
-remunerability
-remunerable
-remunerably
-remunerate
-remuneration
-remunerative
-remuneratively
-remunerativeness
-remunerator
-remuneratory
-remurmur
-Remus
-remuster
-remutation
-renable
-renably
-renail
-Renaissance
-renaissance
-Renaissancist
-Renaissant
-renal
-rename
-Renardine
-renascence
-renascency
-renascent
-renascible
-renascibleness
-renature
-renavigate
-renavigation
-rencontre
-rencounter
-renculus
-rend
-render
-renderable
-renderer
-rendering
-renderset
-rendezvous
-rendibility
-rendible
-rendition
-rendlewood
-rendrock
-rendzina
-reneague
-Renealmia
-renecessitate
-reneg
-renegade
-renegadism
-renegado
-renegation
-renege
-reneger
-reneglect
-renegotiable
-renegotiate
-renegotiation
-renegotiations
-renegue
-renerve
-renes
-renet
-renew
-renewability
-renewable
-renewably
-renewal
-renewedly
-renewedness
-renewer
-renewment
-renicardiac
-renickel
-renidification
-renidify
-reniform
-Renilla
-Renillidae
-renin
-renipericardial
-reniportal
-renipuncture
-renish
-renishly
-renitence
-renitency
-renitent
-renk
-renky
-renne
-rennet
-renneting
-rennin
-renniogen
-renocutaneous
-renogastric
-renography
-renointestinal
-renominate
-renomination
-renopericardial
-renopulmonary
-renormalize
-renotation
-renotice
-renotification
-renotify
-renounce
-renounceable
-renouncement
-renouncer
-renourish
-renovate
-renovater
-renovatingly
-renovation
-renovative
-renovator
-renovatory
-renovize
-renown
-renowned
-renownedly
-renownedness
-renowner
-renownful
-renownless
-rensselaerite
-rent
-rentability
-rentable
-rentage
-rental
-rentaler
-rentaller
-rented
-rentee
-renter
-rentless
-rentrant
-rentrayeuse
-Renu
-renumber
-renumerate
-renumeration
-renunciable
-renunciance
-renunciant
-renunciate
-renunciation
-renunciative
-renunciator
-renunciatory
-renunculus
-renverse
-renvoi
-renvoy
-reobject
-reobjectivization
-reobjectivize
-reobligate
-reobligation
-reoblige
-reobscure
-reobservation
-reobserve
-reobtain
-reobtainable
-reobtainment
-reoccasion
-reoccupation
-reoccupy
-reoccur
-reoccurrence
-reoffend
-reoffense
-reoffer
-reoffset
-reoil
-reometer
-reomission
-reomit
-reopen
-reoperate
-reoperation
-reoppose
-reopposition
-reoppress
-reoppression
-reorchestrate
-reordain
-reorder
-reordinate
-reordination
-reorganization
-reorganizationist
-reorganize
-reorganizer
-reorient
-reorientation
-reornament
-reoutfit
-reoutline
-reoutput
-reoutrage
-reovercharge
-reoverflow
-reovertake
-reoverwork
-reown
-reoxidation
-reoxidize
-reoxygenate
-reoxygenize
-rep
-repace
-repacification
-repacify
-repack
-repackage
-repacker
-repaganization
-repaganize
-repaganizer
-repage
-repaint
-repair
-repairable
-repairableness
-repairer
-repairman
-repale
-repand
-repandly
-repandodentate
-repandodenticulate
-repandolobate
-repandous
-repandousness
-repanel
-repaper
-reparability
-reparable
-reparably
-reparagraph
-reparate
-reparation
-reparative
-reparatory
-repark
-repartable
-repartake
-repartee
-reparticipate
-reparticipation
-repartition
-repartitionable
-repass
-repassable
-repassage
-repasser
-repast
-repaste
-repasture
-repatch
-repatency
-repatent
-repatriable
-repatriate
-repatriation
-repatronize
-repattern
-repave
-repavement
-repawn
-repay
-repayable
-repayal
-repaying
-repayment
-repeal
-repealability
-repealable
-repealableness
-repealer
-repealist
-repealless
-repeat
-repeatability
-repeatable
-repeatal
-repeated
-repeatedly
-repeater
-repeg
-repel
-repellance
-repellant
-repellence
-repellency
-repellent
-repellently
-repeller
-repelling
-repellingly
-repellingness
-repen
-repenetrate
-repension
-repent
-repentable
-repentance
-repentant
-repentantly
-repenter
-repentingly
-repeople
-reperceive
-repercept
-reperception
-repercolation
-repercuss
-repercussion
-repercussive
-repercussively
-repercussiveness
-repercutient
-reperform
-reperformance
-reperfume
-reperible
-repermission
-repermit
-reperplex
-repersonalization
-repersonalize
-repersuade
-repersuasion
-repertoire
-repertorial
-repertorily
-repertorium
-repertory
-reperusal
-reperuse
-repetend
-repetition
-repetitional
-repetitionary
-repetitious
-repetitiously
-repetitiousness
-repetitive
-repetitively
-repetitiveness
-repetitory
-repetticoat
-repew
-Rephael
-rephase
-rephonate
-rephosphorization
-rephosphorize
-rephotograph
-rephrase
-repic
-repick
-repicture
-repiece
-repile
-repin
-repine
-repineful
-repinement
-repiner
-repiningly
-repipe
-repique
-repitch
-repkie
-replace
-replaceability
-replaceable
-replacement
-replacer
-replait
-replan
-replane
-replant
-replantable
-replantation
-replanter
-replaster
-replate
-replay
-replead
-repleader
-repleat
-repledge
-repledger
-replenish
-replenisher
-replenishingly
-replenishment
-replete
-repletely
-repleteness
-repletion
-repletive
-repletively
-repletory
-repleviable
-replevin
-replevisable
-replevisor
-replevy
-repliant
-replica
-replicate
-replicated
-replicatile
-replication
-replicative
-replicatively
-replicatory
-replier
-replight
-replod
-replot
-replotment
-replotter
-replough
-replow
-replum
-replume
-replunder
-replunge
-reply
-replyingly
-repocket
-repoint
-repolish
-repoll
-repollute
-repolon
-repolymerization
-repolymerize
-reponder
-repone
-repope
-repopulate
-repopulation
-report
-reportable
-reportage
-reportedly
-reporter
-reporteress
-reporterism
-reportership
-reportingly
-reportion
-reportorial
-reportorially
-reposal
-repose
-reposed
-reposedly
-reposedness
-reposeful
-reposefully
-reposefulness
-reposer
-reposit
-repositary
-reposition
-repositor
-repository
-repossess
-repossession
-repossessor
-repost
-repostpone
-repot
-repound
-repour
-repowder
-repp
-repped
-repractice
-repray
-repreach
-reprecipitate
-reprecipitation
-repredict
-reprefer
-reprehend
-reprehendable
-reprehendatory
-reprehender
-reprehensibility
-reprehensible
-reprehensibleness
-reprehensibly
-reprehension
-reprehensive
-reprehensively
-reprehensory
-repreparation
-reprepare
-represcribe
-represent
-representability
-representable
-representamen
-representant
-representation
-representational
-representationalism
-representationalist
-representationary
-representationism
-representationist
-representative
-representatively
-representativeness
-representativeship
-representativity
-representer
-representment
-represide
-repress
-repressed
-repressedly
-represser
-repressible
-repressibly
-repression
-repressionary
-repressionist
-repressive
-repressively
-repressiveness
-repressment
-repressor
-repressory
-repressure
-reprice
-reprieval
-reprieve
-repriever
-reprimand
-reprimander
-reprimanding
-reprimandingly
-reprime
-reprimer
-reprint
-reprinter
-reprisal
-reprisalist
-reprise
-repristinate
-repristination
-reprivatization
-reprivatize
-reprivilege
-reproach
-reproachable
-reproachableness
-reproachably
-reproacher
-reproachful
-reproachfully
-reproachfulness
-reproachingly
-reproachless
-reproachlessness
-reprobacy
-reprobance
-reprobate
-reprobateness
-reprobater
-reprobation
-reprobationary
-reprobationer
-reprobative
-reprobatively
-reprobator
-reprobatory
-reproceed
-reprocess
-reproclaim
-reproclamation
-reprocurable
-reprocure
-reproduce
-reproduceable
-reproducer
-reproducibility
-reproducible
-reproduction
-reproductionist
-reproductive
-reproductively
-reproductiveness
-reproductivity
-reproductory
-reprofane
-reprofess
-reprohibit
-repromise
-repromulgate
-repromulgation
-repronounce
-repronunciation
-reproof
-reproofless
-repropagate
-repropitiate
-repropitiation
-reproportion
-reproposal
-repropose
-reprosecute
-reprosecution
-reprosper
-reprotect
-reprotection
-reprotest
-reprovable
-reprovableness
-reprovably
-reproval
-reprove
-reprover
-reprovide
-reprovingly
-reprovision
-reprovocation
-reprovoke
-reprune
-reps
-reptant
-reptatorial
-reptatory
-reptile
-reptiledom
-reptilelike
-reptilferous
-Reptilia
-reptilian
-reptiliary
-reptiliform
-reptilious
-reptiliousness
-reptilism
-reptility
-reptilivorous
-reptiloid
-republic
-republican
-republicanism
-republicanization
-republicanize
-republicanizer
-republication
-republish
-republisher
-republishment
-repuddle
-repudiable
-repudiate
-repudiation
-repudiationist
-repudiative
-repudiator
-repudiatory
-repuff
-repugn
-repugnable
-repugnance
-repugnancy
-repugnant
-repugnantly
-repugnantness
-repugnate
-repugnatorial
-repugner
-repullulate
-repullulation
-repullulative
-repullulescent
-repulpit
-repulse
-repulseless
-repulseproof
-repulser
-repulsion
-repulsive
-repulsively
-repulsiveness
-repulsory
-repulverize
-repump
-repunish
-repunishment
-repurchase
-repurchaser
-repurge
-repurification
-repurify
-repurple
-repurpose
-repursue
-repursuit
-reputability
-reputable
-reputableness
-reputably
-reputation
-reputationless
-reputative
-reputatively
-repute
-reputed
-reputedly
-reputeless
-requalification
-requalify
-requarantine
-requeen
-requench
-request
-requester
-requestion
-requiem
-Requienia
-requiescence
-requin
-requirable
-require
-requirement
-requirer
-requisite
-requisitely
-requisiteness
-requisition
-requisitionary
-requisitioner
-requisitionist
-requisitor
-requisitorial
-requisitory
-requit
-requitable
-requital
-requitative
-requite
-requiteful
-requitement
-requiter
-requiz
-requotation
-requote
-rerack
-reracker
-reradiation
-rerail
-reraise
-rerake
-rerank
-rerate
-reread
-rereader
-rerebrace
-reredos
-reree
-rereel
-rereeve
-rerefief
-reregister
-reregistration
-reregulate
-reregulation
-rereign
-reremouse
-rerent
-rerental
-reresupper
-rerig
-rering
-rerise
-rerival
-rerivet
-rerob
-rerobe
-reroll
-reroof
-reroot
-rerope
-reroute
-rerow
-reroyalize
-rerub
-rerummage
-rerun
-resaca
-resack
-resacrifice
-resaddle
-resail
-resalable
-resale
-resalt
-resalutation
-resalute
-resalvage
-resample
-resanctify
-resanction
-resatisfaction
-resatisfy
-resaw
-resawer
-resawyer
-resay
-resazurin
-rescan
-reschedule
-rescind
-rescindable
-rescinder
-rescindment
-rescissible
-rescission
-rescissory
-rescore
-rescramble
-rescratch
-rescribe
-rescript
-rescription
-rescriptive
-rescriptively
-rescrub
-rescuable
-rescue
-rescueless
-rescuer
-reseal
-reseam
-research
-researcher
-researchful
-researchist
-reseat
-resecrete
-resecretion
-resect
-resection
-resectional
-Reseda
-reseda
-Resedaceae
-resedaceous
-resee
-reseed
-reseek
-resegment
-resegmentation
-reseise
-reseiser
-reseize
-reseizer
-reseizure
-reselect
-reselection
-reself
-resell
-reseller
-resemblable
-resemblance
-resemblant
-resemble
-resembler
-resemblingly
-reseminate
-resend
-resene
-resensation
-resensitization
-resensitize
-resent
-resentationally
-resentence
-resenter
-resentful
-resentfullness
-resentfully
-resentience
-resentingly
-resentless
-resentment
-resepulcher
-resequent
-resequester
-resequestration
-reserene
-reservable
-reserval
-reservation
-reservationist
-reservatory
-reserve
-reserved
-reservedly
-reservedness
-reservee
-reserveful
-reserveless
-reserver
-reservery
-reservice
-reservist
-reservoir
-reservor
-reset
-resettable
-resetter
-resettle
-resettlement
-resever
-resew
-resex
-resh
-reshake
-reshape
-reshare
-resharpen
-reshave
-reshear
-reshearer
-resheathe
-reshelve
-reshift
-reshine
-reshingle
-reship
-reshipment
-reshipper
-reshoe
-reshoot
-reshoulder
-reshovel
-reshower
-reshrine
-reshuffle
-reshun
-reshunt
-reshut
-reshuttle
-resiccate
-reside
-residence
-residencer
-residency
-resident
-residental
-residenter
-residential
-residentiality
-residentially
-residentiary
-residentiaryship
-residentship
-resider
-residua
-residual
-residuary
-residuation
-residue
-residuent
-residuous
-residuum
-resift
-resigh
-resign
-resignal
-resignatary
-resignation
-resignationism
-resigned
-resignedly
-resignedness
-resignee
-resigner
-resignful
-resignment
-resile
-resilement
-resilial
-resiliate
-resilience
-resiliency
-resilient
-resilifer
-resiliometer
-resilition
-resilium
-resilver
-resin
-resina
-resinaceous
-resinate
-resinbush
-resiner
-resinfiable
-resing
-resinic
-resiniferous
-resinification
-resinifluous
-resiniform
-resinify
-resinize
-resink
-resinlike
-resinoelectric
-resinoextractive
-resinogenous
-resinoid
-resinol
-resinolic
-resinophore
-resinosis
-resinous
-resinously
-resinousness
-resinovitreous
-resiny
-resipiscence
-resipiscent
-resist
-resistability
-resistable
-resistableness
-resistance
-resistant
-resistantly
-resister
-resistful
-resistibility
-resistible
-resistibleness
-resistibly
-resisting
-resistingly
-resistive
-resistively
-resistiveness
-resistivity
-resistless
-resistlessly
-resistlessness
-resistor
-resitting
-resize
-resizer
-resketch
-reskin
-reslash
-reslate
-reslay
-reslide
-reslot
-resmell
-resmelt
-resmile
-resmooth
-resnap
-resnatch
-resnatron
-resnub
-resoak
-resoap
-resoften
-resoil
-resojourn
-resolder
-resole
-resolemnize
-resolicit
-resolidification
-resolidify
-resolubility
-resoluble
-resolubleness
-resolute
-resolutely
-resoluteness
-resolution
-resolutioner
-resolutionist
-resolutory
-resolvability
-resolvable
-resolvableness
-resolvancy
-resolve
-resolved
-resolvedly
-resolvedness
-resolvent
-resolver
-resolvible
-resonance
-resonancy
-resonant
-resonantly
-resonate
-resonator
-resonatory
-resoothe
-resorb
-resorbence
-resorbent
-resorcin
-resorcine
-resorcinism
-resorcinol
-resorcinolphthalein
-resorcinum
-resorcylic
-resorption
-resorptive
-resort
-resorter
-resorufin
-resought
-resound
-resounder
-resounding
-resoundingly
-resource
-resourceful
-resourcefully
-resourcefulness
-resourceless
-resourcelessness
-resoutive
-resow
-resp
-respace
-respade
-respan
-respangle
-resparkle
-respeak
-respect
-respectability
-respectabilize
-respectable
-respectableness
-respectably
-respectant
-respecter
-respectful
-respectfully
-respectfulness
-respecting
-respective
-respectively
-respectiveness
-respectless
-respectlessly
-respectlessness
-respectworthy
-respell
-respersive
-respin
-respirability
-respirable
-respirableness
-respiration
-respirational
-respirative
-respirator
-respiratored
-respiratorium
-respiratory
-respire
-respirit
-respirometer
-respite
-respiteless
-resplend
-resplendence
-resplendency
-resplendent
-resplendently
-resplice
-resplit
-respoke
-respond
-responde
-respondence
-respondency
-respondent
-respondentia
-responder
-responsal
-responsary
-response
-responseless
-responser
-responsibility
-responsible
-responsibleness
-responsibly
-responsion
-responsive
-responsively
-responsiveness
-responsivity
-responsorial
-responsory
-respot
-respray
-respread
-respring
-resprout
-respue
-resquare
-resqueak
-ressaidar
-ressala
-ressaldar
-ressaut
-rest
-restable
-restack
-restaff
-restain
-restainable
-restake
-restamp
-restandardization
-restandardize
-restant
-restart
-restate
-restatement
-restaur
-restaurant
-restaurate
-restaurateur
-restauration
-restbalk
-resteal
-resteel
-resteep
-restem
-restep
-rester
-resterilize
-restes
-restful
-restfully
-restfulness
-restharrow
-resthouse
-Restiaceae
-restiaceous
-restiad
-restibrachium
-restiff
-restiffen
-restiffener
-restiffness
-restifle
-restiform
-restigmatize
-restimulate
-restimulation
-resting
-restingly
-Restio
-Restionaceae
-restionaceous
-restipulate
-restipulation
-restipulatory
-restir
-restis
-restitch
-restitute
-restitution
-restitutionism
-restitutionist
-restitutive
-restitutor
-restitutory
-restive
-restively
-restiveness
-restless
-restlessly
-restlessness
-restock
-restopper
-restorable
-restorableness
-restoral
-restoration
-restorationer
-restorationism
-restorationist
-restorative
-restoratively
-restorativeness
-restorator
-restoratory
-restore
-restorer
-restow
-restowal
-restproof
-restraighten
-restrain
-restrainability
-restrained
-restrainedly
-restrainedness
-restrainer
-restraining
-restrainingly
-restraint
-restraintful
-restrap
-restratification
-restream
-restrengthen
-restress
-restretch
-restrict
-restricted
-restrictedly
-restrictedness
-restriction
-restrictionary
-restrictionist
-restrictive
-restrictively
-restrictiveness
-restrike
-restring
-restringe
-restringency
-restringent
-restrip
-restrive
-restroke
-restudy
-restuff
-restward
-restwards
-resty
-restyle
-resubject
-resubjection
-resubjugate
-resublimation
-resublime
-resubmerge
-resubmission
-resubmit
-resubordinate
-resubscribe
-resubscriber
-resubscription
-resubstitute
-resubstitution
-resucceed
-resuck
-resudation
-resue
-resuffer
-resufferance
-resuggest
-resuggestion
-resuing
-resuit
-result
-resultance
-resultancy
-resultant
-resultantly
-resultative
-resultful
-resultfully
-resulting
-resultingly
-resultive
-resultless
-resultlessly
-resultlessness
-resumability
-resumable
-resume
-resumer
-resummon
-resummons
-resumption
-resumptive
-resumptively
-resun
-resup
-resuperheat
-resupervise
-resupinate
-resupinated
-resupination
-resupine
-resupply
-resupport
-resuppose
-resupposition
-resuppress
-resuppression
-resurface
-resurge
-resurgence
-resurgency
-resurgent
-resurprise
-resurrect
-resurrectible
-resurrection
-resurrectional
-resurrectionary
-resurrectioner
-resurrectioning
-resurrectionism
-resurrectionist
-resurrectionize
-resurrective
-resurrector
-resurrender
-resurround
-resurvey
-resuscitable
-resuscitant
-resuscitate
-resuscitation
-resuscitative
-resuscitator
-resuspect
-resuspend
-resuspension
-reswage
-reswallow
-resward
-reswarm
-reswear
-resweat
-resweep
-reswell
-reswill
-reswim
-resyllabification
-resymbolization
-resymbolize
-resynthesis
-resynthesize
-ret
-retable
-retack
-retackle
-retag
-retail
-retailer
-retailment
-retailor
-retain
-retainability
-retainable
-retainableness
-retainal
-retainder
-retainer
-retainership
-retaining
-retake
-retaker
-retaliate
-retaliation
-retaliationist
-retaliative
-retaliator
-retaliatory
-retalk
-retama
-retame
-retan
-retanner
-retape
-retard
-retardance
-retardant
-retardate
-retardation
-retardative
-retardatory
-retarded
-retardence
-retardent
-retarder
-retarding
-retardingly
-retardive
-retardment
-retardure
-retare
-retariff
-retaste
-retation
-retattle
-retax
-retaxation
-retch
-reteach
-retecious
-retelegraph
-retelephone
-retell
-retelling
-retem
-retemper
-retempt
-retemptation
-retenant
-retender
-retene
-retent
-retention
-retentionist
-retentive
-retentively
-retentiveness
-retentivity
-retentor
-Retepora
-retepore
-Reteporidae
-retest
-retexture
-rethank
-rethatch
-rethaw
-rethe
-retheness
-rethicken
-rethink
-rethrash
-rethread
-rethreaten
-rethresh
-rethresher
-rethrill
-rethrive
-rethrone
-rethrow
-rethrust
-rethunder
-retia
-retial
-Retiariae
-retiarian
-retiarius
-retiary
-reticella
-reticello
-reticence
-reticency
-reticent
-reticently
-reticket
-reticle
-reticula
-reticular
-Reticularia
-reticularian
-reticularly
-reticulary
-reticulate
-reticulated
-reticulately
-reticulation
-reticulatocoalescent
-reticulatogranulate
-reticulatoramose
-reticulatovenose
-reticule
-reticuled
-reticulin
-reticulitis
-reticulocyte
-reticulocytosis
-reticuloramose
-Reticulosa
-reticulose
-reticulovenose
-reticulum
-retie
-retier
-retiform
-retighten
-retile
-retill
-retimber
-retime
-retin
-retina
-retinacular
-retinaculate
-retinaculum
-retinal
-retinalite
-retinasphalt
-retinasphaltum
-retincture
-retinene
-retinerved
-retinian
-retinispora
-retinite
-retinitis
-retinize
-retinker
-retinoblastoma
-retinochorioid
-retinochorioidal
-retinochorioiditis
-retinoid
-retinol
-retinopapilitis
-retinophoral
-retinophore
-retinoscope
-retinoscopic
-retinoscopically
-retinoscopist
-retinoscopy
-Retinospora
-retinue
-retinula
-retinular
-retinule
-retip
-retiracied
-retiracy
-retirade
-retiral
-retire
-retired
-retiredly
-retiredness
-retirement
-retirer
-retiring
-retiringly
-retiringness
-retistene
-retoast
-retold
-retolerate
-retoleration
-retomb
-retonation
-retook
-retool
-retooth
-retoother
-retort
-retortable
-retorted
-retorter
-retortion
-retortive
-retorture
-retoss
-retotal
-retouch
-retoucher
-retouching
-retouchment
-retour
-retourable
-retrace
-retraceable
-retracement
-retrack
-retract
-retractability
-retractable
-retractation
-retracted
-retractibility
-retractible
-retractile
-retractility
-retraction
-retractive
-retractively
-retractiveness
-retractor
-retrad
-retrade
-retradition
-retrahent
-retrain
-retral
-retrally
-retramp
-retrample
-retranquilize
-retranscribe
-retranscription
-retransfer
-retransference
-retransfigure
-retransform
-retransformation
-retransfuse
-retransit
-retranslate
-retranslation
-retransmission
-retransmissive
-retransmit
-retransmute
-retransplant
-retransport
-retransportation
-retravel
-retraverse
-retraxit
-retread
-retreat
-retreatal
-retreatant
-retreater
-retreatful
-retreating
-retreatingness
-retreative
-retreatment
-retree
-retrench
-retrenchable
-retrencher
-retrenchment
-retrial
-retribute
-retribution
-retributive
-retributively
-retributor
-retributory
-retricked
-retrievability
-retrievable
-retrievableness
-retrievably
-retrieval
-retrieve
-retrieveless
-retrievement
-retriever
-retrieverish
-retrim
-retrimmer
-retrip
-retroact
-retroaction
-retroactive
-retroactively
-retroactivity
-retroalveolar
-retroauricular
-retrobronchial
-retrobuccal
-retrobulbar
-retrocaecal
-retrocardiac
-retrocecal
-retrocede
-retrocedence
-retrocedent
-retrocervical
-retrocession
-retrocessional
-retrocessionist
-retrocessive
-retrochoir
-retroclavicular
-retroclusion
-retrocognition
-retrocognitive
-retrocolic
-retroconsciousness
-retrocopulant
-retrocopulation
-retrocostal
-retrocouple
-retrocoupler
-retrocurved
-retrodate
-retrodeviation
-retrodisplacement
-retroduction
-retrodural
-retroesophageal
-retroflected
-retroflection
-retroflex
-retroflexed
-retroflexion
-retroflux
-retroform
-retrofract
-retrofracted
-retrofrontal
-retrogastric
-retrogenerative
-retrogradation
-retrogradatory
-retrograde
-retrogradely
-retrogradient
-retrogradingly
-retrogradism
-retrogradist
-retrogress
-retrogression
-retrogressionist
-retrogressive
-retrogressively
-retrohepatic
-retroinfection
-retroinsular
-retroiridian
-retroject
-retrojection
-retrojugular
-retrolabyrinthine
-retrolaryngeal
-retrolingual
-retrolocation
-retromammary
-retromammillary
-retromandibular
-retromastoid
-retromaxillary
-retromigration
-retromingent
-retromingently
-retromorphosed
-retromorphosis
-retronasal
-retroperitoneal
-retroperitoneally
-retropharyngeal
-retropharyngitis
-retroplacental
-retroplexed
-retroposed
-retroposition
-retropresbyteral
-retropubic
-retropulmonary
-retropulsion
-retropulsive
-retroreception
-retrorectal
-retroreflective
-retrorenal
-retrorse
-retrorsely
-retroserrate
-retroserrulate
-retrospect
-retrospection
-retrospective
-retrospectively
-retrospectiveness
-retrospectivity
-retrosplenic
-retrostalsis
-retrostaltic
-retrosternal
-retrosusception
-retrot
-retrotarsal
-retrotemporal
-retrothyroid
-retrotracheal
-retrotransfer
-retrotransference
-retrotympanic
-retrousse
-retrovaccinate
-retrovaccination
-retrovaccine
-retroverse
-retroversion
-retrovert
-retrovision
-retroxiphoid
-retrude
-retrue
-retrusible
-retrusion
-retrust
-retry
-retted
-retter
-rettery
-retting
-rettory
-retube
-retuck
-retumble
-retumescence
-retune
-returban
-returf
-returfer
-return
-returnability
-returnable
-returned
-returner
-returnless
-returnlessly
-retuse
-retwine
-retwist
-retying
-retype
-retzian
-Reub
-Reuben
-Reubenites
-Reuchlinian
-Reuchlinism
-Reuel
-reundercut
-reundergo
-reundertake
-reundulate
-reundulation
-reune
-reunfold
-reunification
-reunify
-reunion
-reunionism
-reunionist
-reunionistic
-reunitable
-reunite
-reunitedly
-reuniter
-reunition
-reunitive
-reunpack
-reuphold
-reupholster
-reuplift
-reurge
-reuse
-reutilization
-reutilize
-reutter
-reutterance
-rev
-revacate
-revaccinate
-revaccination
-revalenta
-revalescence
-revalescent
-revalidate
-revalidation
-revalorization
-revalorize
-revaluate
-revaluation
-revalue
-revamp
-revamper
-revampment
-revaporization
-revaporize
-revarnish
-revary
-reve
-reveal
-revealability
-revealable
-revealableness
-revealed
-revealedly
-revealer
-revealing
-revealingly
-revealingness
-revealment
-revegetate
-revegetation
-revehent
-reveil
-reveille
-revel
-revelability
-revelant
-revelation
-revelational
-revelationer
-revelationist
-revelationize
-revelative
-revelator
-revelatory
-reveler
-revellent
-revelly
-revelment
-revelrout
-revelry
-revenant
-revend
-revender
-revendicate
-revendication
-reveneer
-revenge
-revengeable
-revengeful
-revengefully
-revengefulness
-revengeless
-revengement
-revenger
-revengingly
-revent
-reventilate
-reventure
-revenual
-revenue
-revenued
-revenuer
-rever
-reverable
-reverb
-reverbatory
-reverberant
-reverberate
-reverberation
-reverberative
-reverberator
-reverberatory
-reverbrate
-reverdure
-revere
-revered
-reverence
-reverencer
-reverend
-reverendly
-reverendship
-reverent
-reverential
-reverentiality
-reverentially
-reverentialness
-reverently
-reverentness
-reverer
-reverie
-reverification
-reverify
-reverist
-revers
-reversability
-reversable
-reversal
-reverse
-reversed
-reversedly
-reverseful
-reverseless
-reversely
-reversement
-reverser
-reverseways
-reversewise
-reversi
-reversibility
-reversible
-reversibleness
-reversibly
-reversification
-reversifier
-reversify
-reversing
-reversingly
-reversion
-reversionable
-reversional
-reversionally
-reversionary
-reversioner
-reversionist
-reversis
-reversist
-reversive
-reverso
-revert
-revertal
-reverter
-revertibility
-revertible
-revertive
-revertively
-revery
-revest
-revestiary
-revestry
-revet
-revete
-revetement
-revetment
-revibrate
-revibration
-revibrational
-revictorious
-revictory
-revictual
-revictualment
-revie
-review
-reviewability
-reviewable
-reviewage
-reviewal
-reviewer
-revieweress
-reviewish
-reviewless
-revigorate
-revigoration
-revile
-revilement
-reviler
-reviling
-revilingly
-revindicate
-revindication
-reviolate
-reviolation
-revirescence
-revirescent
-Revisable
-revisable
-revisableness
-revisal
-revise
-Revised
-revisee
-reviser
-revisership
-revisible
-revision
-revisional
-revisionary
-revisionism
-revisionist
-revisit
-revisitant
-revisitation
-revisor
-revisory
-revisualization
-revisualize
-revitalization
-revitalize
-revitalizer
-revivability
-revivable
-revivably
-revival
-revivalism
-revivalist
-revivalistic
-revivalize
-revivatory
-revive
-revivement
-reviver
-revivification
-revivifier
-revivify
-reviving
-revivingly
-reviviscence
-reviviscency
-reviviscent
-reviviscible
-revivor
-revocability
-revocable
-revocableness
-revocably
-revocation
-revocative
-revocatory
-revoice
-revokable
-revoke
-revokement
-revoker
-revokingly
-revolant
-revolatilize
-revolt
-revolter
-revolting
-revoltingly
-revoltress
-revolubility
-revoluble
-revolubly
-revolunteer
-revolute
-revoluted
-revolution
-revolutional
-revolutionally
-revolutionarily
-revolutionariness
-revolutionary
-revolutioneering
-revolutioner
-revolutionism
-revolutionist
-revolutionize
-revolutionizement
-revolutionizer
-revolvable
-revolvably
-revolve
-revolvement
-revolvency
-revolver
-revolving
-revolvingly
-revomit
-revote
-revue
-revuette
-revuist
-revulsed
-revulsion
-revulsionary
-revulsive
-revulsively
-rewade
-rewager
-rewake
-rewaken
-rewall
-rewallow
-reward
-rewardable
-rewardableness
-rewardably
-rewardedly
-rewarder
-rewardful
-rewardfulness
-rewarding
-rewardingly
-rewardless
-rewardproof
-rewarehouse
-rewarm
-rewarn
-rewash
-rewater
-rewave
-rewax
-rewaybill
-rewayle
-reweaken
-rewear
-reweave
-rewed
-reweigh
-reweigher
-reweight
-rewelcome
-reweld
-rewend
-rewet
-rewhelp
-rewhirl
-rewhisper
-rewhiten
-rewiden
-rewin
-rewind
-rewinder
-rewirable
-rewire
-rewish
-rewithdraw
-rewithdrawal
-rewood
-reword
-rework
-reworked
-rewound
-rewove
-rewoven
-rewrap
-rewrite
-rewriter
-Rex
-rex
-rexen
-reyield
-Reynard
-Reynold
-reyoke
-reyouth
-rezbanyite
-rhabdite
-rhabditiform
-Rhabditis
-rhabdium
-Rhabdocarpum
-Rhabdocoela
-rhabdocoelan
-rhabdocoele
-Rhabdocoelida
-rhabdocoelidan
-rhabdocoelous
-rhabdoid
-rhabdoidal
-rhabdolith
-rhabdom
-rhabdomal
-rhabdomancer
-rhabdomancy
-rhabdomantic
-rhabdomantist
-Rhabdomonas
-rhabdomyoma
-rhabdomyosarcoma
-rhabdomysarcoma
-rhabdophane
-rhabdophanite
-Rhabdophora
-rhabdophoran
-Rhabdopleura
-rhabdopod
-rhabdos
-rhabdosome
-rhabdosophy
-rhabdosphere
-rhabdus
-Rhacianectes
-Rhacomitrium
-Rhacophorus
-Rhadamanthine
-Rhadamanthus
-Rhadamanthys
-Rhaetian
-Rhaetic
-rhagades
-rhagadiform
-rhagiocrin
-rhagionid
-Rhagionidae
-rhagite
-Rhagodia
-rhagon
-rhagonate
-rhagose
-rhamn
-Rhamnaceae
-rhamnaceous
-rhamnal
-Rhamnales
-rhamnetin
-rhamninase
-rhamninose
-rhamnite
-rhamnitol
-rhamnohexite
-rhamnohexitol
-rhamnohexose
-rhamnonic
-rhamnose
-rhamnoside
-Rhamnus
-rhamphoid
-Rhamphorhynchus
-Rhamphosuchus
-rhamphotheca
-Rhapidophyllum
-Rhapis
-rhapontic
-rhaponticin
-rhapontin
-rhapsode
-rhapsodic
-rhapsodical
-rhapsodically
-rhapsodie
-rhapsodism
-rhapsodist
-rhapsodistic
-rhapsodize
-rhapsodomancy
-rhapsody
-Rhaptopetalaceae
-rhason
-rhasophore
-rhatania
-rhatany
-rhe
-Rhea
-rhea
-rheadine
-Rheae
-rhebok
-rhebosis
-rheeboc
-rheebok
-rheen
-rhegmatype
-rhegmatypy
-Rhegnopteri
-rheic
-Rheidae
-Rheiformes
-rhein
-rheinic
-rhema
-rhematic
-rhematology
-rheme
-Rhemish
-Rhemist
-Rhenish
-rhenium
-rheobase
-rheocrat
-rheologist
-rheology
-rheometer
-rheometric
-rheometry
-rheophile
-rheophore
-rheophoric
-rheoplankton
-rheoscope
-rheoscopic
-rheostat
-rheostatic
-rheostatics
-rheotactic
-rheotan
-rheotaxis
-rheotome
-rheotrope
-rheotropic
-rheotropism
-rhesian
-rhesus
-rhetor
-rhetoric
-rhetorical
-rhetorically
-rhetoricalness
-rhetoricals
-rhetorician
-rhetorize
-Rheum
-rheum
-rheumarthritis
-rheumatalgia
-rheumatic
-rheumatical
-rheumatically
-rheumaticky
-rheumatism
-rheumatismal
-rheumatismoid
-rheumative
-rheumatiz
-rheumatize
-rheumatoid
-rheumatoidal
-rheumatoidally
-rheumed
-rheumic
-rheumily
-rheuminess
-rheumy
-Rhexia
-rhexis
-rhigolene
-rhigosis
-rhigotic
-Rhina
-rhinal
-rhinalgia
-Rhinanthaceae
-Rhinanthus
-rhinarium
-rhincospasm
-rhine
-Rhineland
-Rhinelander
-rhinencephalic
-rhinencephalon
-rhinencephalous
-rhinenchysis
-Rhineodon
-Rhineodontidae
-rhinestone
-Rhineura
-rhineurynter
-Rhinidae
-rhinion
-rhinitis
-rhino
-Rhinobatidae
-Rhinobatus
-rhinobyon
-rhinocaul
-rhinocele
-rhinocelian
-rhinocerial
-rhinocerian
-rhinocerine
-rhinoceroid
-rhinoceros
-rhinoceroslike
-rhinocerotic
-Rhinocerotidae
-rhinocerotiform
-rhinocerotine
-rhinocerotoid
-rhinochiloplasty
-Rhinoderma
-rhinodynia
-rhinogenous
-rhinolalia
-rhinolaryngology
-rhinolaryngoscope
-rhinolite
-rhinolith
-rhinolithic
-rhinological
-rhinologist
-rhinology
-rhinolophid
-Rhinolophidae
-rhinolophine
-rhinopharyngeal
-rhinopharyngitis
-rhinopharynx
-Rhinophidae
-Rhinophis
-rhinophonia
-rhinophore
-rhinophyma
-rhinoplastic
-rhinoplasty
-rhinopolypus
-Rhinoptera
-Rhinopteridae
-rhinorrhagia
-rhinorrhea
-rhinorrheal
-rhinoscleroma
-rhinoscope
-rhinoscopic
-rhinoscopy
-rhinosporidiosis
-Rhinosporidium
-rhinotheca
-rhinothecal
-Rhinthonic
-Rhinthonica
-rhipidate
-rhipidion
-Rhipidistia
-rhipidistian
-rhipidium
-Rhipidoglossa
-rhipidoglossal
-rhipidoglossate
-Rhipidoptera
-rhipidopterous
-rhipiphorid
-Rhipiphoridae
-Rhipiptera
-rhipipteran
-rhipipterous
-Rhipsalis
-Rhiptoglossa
-rhizanthous
-rhizautoicous
-Rhizina
-Rhizinaceae
-rhizine
-rhizinous
-Rhizobium
-rhizocarp
-Rhizocarpeae
-rhizocarpean
-rhizocarpian
-rhizocarpic
-rhizocarpous
-rhizocaul
-rhizocaulus
-Rhizocephala
-rhizocephalan
-rhizocephalous
-rhizocorm
-Rhizoctonia
-rhizoctoniose
-rhizodermis
-Rhizodus
-Rhizoflagellata
-rhizoflagellate
-rhizogen
-rhizogenetic
-rhizogenic
-rhizogenous
-rhizoid
-rhizoidal
-rhizoma
-rhizomatic
-rhizomatous
-rhizome
-rhizomelic
-rhizomic
-rhizomorph
-rhizomorphic
-rhizomorphoid
-rhizomorphous
-rhizoneure
-rhizophagous
-rhizophilous
-Rhizophora
-Rhizophoraceae
-rhizophoraceous
-rhizophore
-rhizophorous
-rhizophyte
-rhizoplast
-rhizopod
-Rhizopoda
-rhizopodal
-rhizopodan
-rhizopodist
-rhizopodous
-Rhizopogon
-Rhizopus
-rhizosphere
-Rhizostomae
-Rhizostomata
-rhizostomatous
-rhizostome
-rhizostomous
-Rhizota
-rhizotaxis
-rhizotaxy
-rhizote
-rhizotic
-rhizotomi
-rhizotomy
-rho
-Rhoda
-rhodaline
-Rhodamine
-rhodamine
-rhodanate
-Rhodanian
-rhodanic
-rhodanine
-rhodanthe
-rhodeose
-Rhodes
-Rhodesian
-Rhodesoid
-rhodeswood
-Rhodian
-rhodic
-rhoding
-rhodinol
-rhodite
-rhodium
-rhodizite
-rhodizonic
-Rhodobacteriaceae
-Rhodobacterioideae
-rhodochrosite
-Rhodococcus
-Rhodocystis
-rhodocyte
-rhododendron
-rhodolite
-Rhodomelaceae
-rhodomelaceous
-rhodonite
-Rhodope
-rhodophane
-Rhodophyceae
-rhodophyceous
-rhodophyll
-Rhodophyllidaceae
-Rhodophyta
-rhodoplast
-rhodopsin
-Rhodora
-Rhodoraceae
-rhodorhiza
-rhodosperm
-Rhodospermeae
-rhodospermin
-rhodospermous
-Rhodospirillum
-Rhodothece
-Rhodotypos
-Rhodymenia
-Rhodymeniaceae
-rhodymeniaceous
-Rhodymeniales
-Rhoeadales
-Rhoecus
-Rhoeo
-rhomb
-rhombencephalon
-rhombenporphyr
-rhombic
-rhombical
-rhombiform
-rhomboclase
-rhomboganoid
-Rhomboganoidei
-rhombogene
-rhombogenic
-rhombogenous
-rhombohedra
-rhombohedral
-rhombohedrally
-rhombohedric
-rhombohedron
-rhomboid
-rhomboidal
-rhomboidally
-rhomboideus
-rhomboidly
-rhomboquadratic
-rhomborectangular
-rhombos
-rhombovate
-Rhombozoa
-rhombus
-rhonchal
-rhonchial
-rhonchus
-Rhonda
-rhopalic
-rhopalism
-rhopalium
-Rhopalocera
-rhopaloceral
-rhopalocerous
-Rhopalura
-rhotacism
-rhotacismus
-rhotacistic
-rhotacize
-rhubarb
-rhubarby
-rhumb
-rhumba
-rhumbatron
-Rhus
-rhyacolite
-rhyme
-rhymeless
-rhymelet
-rhymemaker
-rhymemaking
-rhymeproof
-rhymer
-rhymery
-rhymester
-rhymewise
-rhymic
-rhymist
-rhymy
-Rhynchobdellae
-Rhynchobdellida
-Rhynchocephala
-Rhynchocephali
-Rhynchocephalia
-rhynchocephalian
-rhynchocephalic
-rhynchocephalous
-Rhynchocoela
-rhynchocoelan
-rhynchocoelic
-rhynchocoelous
-rhyncholite
-Rhynchonella
-Rhynchonellacea
-Rhynchonellidae
-rhynchonelloid
-Rhynchophora
-rhynchophoran
-rhynchophore
-rhynchophorous
-Rhynchopinae
-Rhynchops
-Rhynchosia
-Rhynchospora
-Rhynchota
-rhynchotal
-rhynchote
-rhynchotous
-rhynconellid
-Rhyncostomi
-Rhynia
-Rhyniaceae
-Rhynocheti
-Rhynsburger
-rhyobasalt
-rhyodacite
-rhyolite
-rhyolitic
-rhyotaxitic
-rhyparographer
-rhyparographic
-rhyparographist
-rhyparography
-rhypography
-rhyptic
-rhyptical
-rhysimeter
-Rhyssa
-rhythm
-rhythmal
-rhythmic
-rhythmical
-rhythmicality
-rhythmically
-rhythmicity
-rhythmicize
-rhythmics
-rhythmist
-rhythmizable
-rhythmization
-rhythmize
-rhythmless
-rhythmometer
-rhythmopoeia
-rhythmproof
-Rhytidodon
-rhytidome
-rhytidosis
-Rhytina
-Rhytisma
-rhyton
-ria
-rial
-riancy
-riant
-riantly
-riata
-rib
-ribald
-ribaldish
-ribaldly
-ribaldrous
-ribaldry
-riband
-Ribandism
-Ribandist
-ribandlike
-ribandmaker
-ribandry
-ribat
-ribaudequin
-ribaudred
-ribband
-ribbandry
-ribbed
-ribber
-ribbet
-ribbidge
-ribbing
-ribble
-ribbon
-ribbonback
-ribboner
-ribbonfish
-Ribbonism
-ribbonlike
-ribbonmaker
-Ribbonman
-ribbonry
-ribbonweed
-ribbonwood
-ribbony
-ribby
-ribe
-Ribes
-Ribhus
-ribless
-riblet
-riblike
-riboflavin
-ribonic
-ribonuclease
-ribonucleic
-ribose
-ribroast
-ribroaster
-ribroasting
-ribskin
-ribspare
-Ribston
-ribwork
-ribwort
-Ric
-Ricardian
-Ricardianism
-Ricardo
-Riccia
-Ricciaceae
-ricciaceous
-Ricciales
-rice
-ricebird
-riceland
-ricer
-ricey
-Rich
-rich
-Richard
-Richardia
-Richardsonia
-richdom
-Richebourg
-richellite
-richen
-riches
-richesse
-richling
-richly
-Richmond
-Richmondena
-richness
-richt
-richterite
-richweed
-ricin
-ricine
-ricinelaidic
-ricinelaidinic
-ricinic
-ricinine
-ricininic
-ricinium
-ricinoleate
-ricinoleic
-ricinolein
-ricinolic
-Ricinulei
-Ricinus
-ricinus
-Rick
-rick
-rickardite
-ricker
-ricketily
-ricketiness
-ricketish
-rickets
-Rickettsia
-rickettsial
-Rickettsiales
-rickettsialpox
-rickety
-rickey
-rickle
-rickmatic
-rickrack
-ricksha
-rickshaw
-rickstaddle
-rickstand
-rickstick
-Ricky
-rickyard
-ricochet
-ricolettaite
-ricrac
-rictal
-rictus
-rid
-ridable
-ridableness
-ridably
-riddam
-riddance
-riddel
-ridden
-ridder
-ridding
-riddle
-riddlemeree
-riddler
-riddling
-riddlingly
-riddlings
-ride
-rideable
-rideau
-riden
-rident
-rider
-ridered
-rideress
-riderless
-ridge
-ridgeband
-ridgeboard
-ridgebone
-ridged
-ridgel
-ridgelet
-ridgelike
-ridgeling
-ridgepiece
-ridgeplate
-ridgepole
-ridgepoled
-ridger
-ridgerope
-ridgetree
-ridgeway
-ridgewise
-ridgil
-ridging
-ridgingly
-ridgling
-ridgy
-ridibund
-ridicule
-ridiculer
-ridiculize
-ridiculosity
-ridiculous
-ridiculously
-ridiculousness
-riding
-ridingman
-ridotto
-rie
-riebeckite
-riem
-Riemannean
-Riemannian
-riempie
-rier
-Riesling
-rife
-rifely
-rifeness
-Riff
-riff
-Riffi
-Riffian
-riffle
-riffler
-riffraff
-Rifi
-Rifian
-rifle
-riflebird
-rifledom
-rifleman
-riflemanship
-rifleproof
-rifler
-riflery
-rifleshot
-rifling
-rift
-rifter
-riftless
-rifty
-rig
-rigadoon
-rigamajig
-rigamarole
-rigation
-rigbane
-Rigel
-Rigelian
-rigescence
-rigescent
-riggald
-rigger
-rigging
-riggish
-riggite
-riggot
-right
-rightabout
-righten
-righteous
-righteously
-righteousness
-righter
-rightful
-rightfully
-rightfulness
-rightheaded
-righthearted
-rightist
-rightle
-rightless
-rightlessness
-rightly
-rightmost
-rightness
-righto
-rightship
-rightward
-rightwardly
-rightwards
-righty
-rigid
-rigidify
-rigidist
-rigidity
-rigidly
-rigidness
-rigidulous
-rigling
-rigmaree
-rigmarole
-rigmarolery
-rigmarolic
-rigmarolish
-rigmarolishly
-rignum
-rigol
-rigolette
-rigor
-rigorism
-rigorist
-rigoristic
-rigorous
-rigorously
-rigorousness
-rigsby
-rigsdaler
-Rigsmaal
-Rigsmal
-rigwiddie
-rigwiddy
-Rik
-Rikari
-rikisha
-rikk
-riksha
-rikshaw
-Riksmaal
-Riksmal
-rilawa
-rile
-riley
-rill
-rillet
-rillett
-rillette
-rillock
-rillstone
-rilly
-rim
-rima
-rimal
-rimate
-rimbase
-rime
-rimeless
-rimer
-rimester
-rimfire
-rimiform
-rimland
-rimless
-rimmaker
-rimmaking
-rimmed
-rimmer
-rimose
-rimosely
-rimosity
-rimous
-rimpi
-rimple
-rimption
-rimrock
-rimu
-rimula
-rimulose
-rimy
-Rinaldo
-rinceau
-rinch
-rincon
-Rind
-rind
-Rinde
-rinded
-rinderpest
-rindle
-rindless
-rindy
-rine
-ring
-ringable
-Ringatu
-ringbark
-ringbarker
-ringbill
-ringbird
-ringbolt
-ringbone
-ringboned
-ringcraft
-ringdove
-ringe
-ringed
-ringent
-ringer
-ringeye
-ringgiver
-ringgiving
-ringgoer
-ringhals
-ringhead
-ringiness
-ringing
-ringingly
-ringingness
-ringite
-ringle
-ringlead
-ringleader
-ringleaderless
-ringleadership
-ringless
-ringlet
-ringleted
-ringlety
-ringlike
-ringmaker
-ringmaking
-ringman
-ringmaster
-ringneck
-ringsail
-ringside
-ringsider
-ringster
-ringtail
-ringtaw
-ringtime
-ringtoss
-ringwalk
-ringwall
-ringwise
-ringworm
-ringy
-rink
-rinka
-rinker
-rinkite
-rinncefada
-rinneite
-rinner
-rinsable
-rinse
-rinser
-rinsing
-rinthereout
-rintherout
-Rio
-rio
-riot
-rioter
-rioting
-riotingly
-riotist
-riotistic
-riotocracy
-riotous
-riotously
-riotousness
-riotproof
-riotry
-rip
-ripa
-ripal
-riparial
-riparian
-Riparii
-riparious
-ripcord
-ripe
-ripelike
-ripely
-ripen
-ripener
-ripeness
-ripening
-ripeningly
-riper
-ripgut
-ripicolous
-ripidolite
-ripienist
-ripieno
-ripier
-ripost
-riposte
-rippable
-ripper
-ripperman
-rippet
-rippier
-ripping
-rippingly
-rippingness
-rippit
-ripple
-rippleless
-rippler
-ripplet
-rippling
-ripplingly
-ripply
-rippon
-riprap
-riprapping
-ripsack
-ripsaw
-ripsnorter
-ripsnorting
-Ripuarian
-ripup
-riroriro
-risala
-risberm
-rise
-risen
-riser
-rishi
-rishtadar
-risibility
-risible
-risibleness
-risibles
-risibly
-rising
-risk
-risker
-riskful
-riskfulness
-riskily
-riskiness
-riskish
-riskless
-riskproof
-risky
-risorial
-risorius
-risp
-risper
-risque
-risquee
-Riss
-rissel
-risser
-Rissian
-rissle
-Rissoa
-rissoid
-Rissoidae
-rist
-ristori
-rit
-Rita
-rita
-Ritalynne
-ritardando
-Ritchey
-rite
-riteless
-ritelessness
-ritling
-ritornel
-ritornelle
-ritornello
-Ritschlian
-Ritschlianism
-rittingerite
-ritual
-ritualism
-ritualist
-ritualistic
-ritualistically
-rituality
-ritualize
-ritualless
-ritually
-ritzy
-riva
-rivage
-rival
-rivalable
-rivaless
-rivalism
-rivality
-rivalize
-rivalless
-rivalrous
-rivalry
-rivalship
-rive
-rivel
-rivell
-riven
-river
-riverain
-riverbank
-riverbush
-riverdamp
-rivered
-riverhead
-riverhood
-riverine
-riverish
-riverless
-riverlet
-riverlike
-riverling
-riverly
-riverman
-riverscape
-riverside
-riversider
-riverward
-riverwards
-riverwash
-riverway
-riverweed
-riverwise
-rivery
-rivet
-riveter
-rivethead
-riveting
-rivetless
-rivetlike
-Rivina
-riving
-rivingly
-Rivinian
-rivose
-Rivularia
-Rivulariaceae
-rivulariaceous
-rivulation
-rivulet
-rivulose
-rix
-rixatrix
-rixy
-riyal
-riziform
-rizzar
-rizzle
-rizzom
-rizzomed
-rizzonite
-Ro
-roach
-roachback
-road
-roadability
-roadable
-roadbed
-roadblock
-roadbook
-roadcraft
-roaded
-roader
-roadfellow
-roadhead
-roadhouse
-roading
-roadite
-roadless
-roadlessness
-roadlike
-roadman
-roadmaster
-roadside
-roadsider
-roadsman
-roadstead
-roadster
-roadstone
-roadtrack
-roadway
-roadweed
-roadwise
-roadworthiness
-roadworthy
-roam
-roamage
-roamer
-roaming
-roamingly
-roan
-roanoke
-roar
-roarer
-roaring
-roaringly
-roast
-roastable
-roaster
-roasting
-roastingly
-Rob
-rob
-robalito
-robalo
-roband
-robber
-robberproof
-robbery
-Robbin
-robbin
-robbing
-robe
-robeless
-Robenhausian
-rober
-roberd
-Roberdsman
-Robert
-Roberta
-Roberto
-Robigalia
-Robigus
-Robin
-robin
-robinet
-robing
-Robinia
-robinin
-robinoside
-roble
-robomb
-roborant
-roborate
-roboration
-roborative
-roborean
-roboreous
-robot
-robotesque
-robotian
-robotism
-robotistic
-robotization
-robotize
-robotlike
-robotry
-robur
-roburite
-robust
-robustful
-robustfully
-robustfulness
-robustic
-robusticity
-robustious
-robustiously
-robustiousness
-robustity
-robustly
-robustness
-roc
-rocambole
-Roccella
-Roccellaceae
-roccellic
-roccellin
-roccelline
-Rochea
-rochelime
-Rochelle
-rocher
-rochet
-rocheted
-rock
-rockable
-rockably
-rockaby
-rockabye
-rockallite
-Rockaway
-rockaway
-rockbell
-rockberry
-rockbird
-rockborn
-rockbrush
-rockcist
-rockcraft
-rockelay
-rocker
-rockery
-rocket
-rocketeer
-rocketer
-rocketlike
-rocketor
-rocketry
-rockety
-rockfall
-rockfish
-rockfoil
-rockhair
-rockhearted
-Rockies
-rockiness
-rocking
-rockingly
-rockish
-rocklay
-rockless
-rocklet
-rocklike
-rockling
-rockman
-rockrose
-rockshaft
-rockslide
-rockstaff
-rocktree
-rockward
-rockwards
-rockweed
-rockwood
-rockwork
-rocky
-rococo
-Rocouyenne
-rocta
-Rod
-rod
-rodd
-roddikin
-roddin
-rodding
-rode
-Rodent
-rodent
-Rodentia
-rodential
-rodentially
-rodentian
-rodenticidal
-rodenticide
-rodentproof
-rodeo
-Roderic
-Roderick
-rodge
-Rodger
-rodham
-Rodinal
-Rodinesque
-roding
-rodingite
-rodknight
-rodless
-rodlet
-rodlike
-rodmaker
-rodman
-Rodney
-rodney
-Rodolph
-Rodolphus
-rodomont
-rodomontade
-rodomontadist
-rodomontador
-rodsman
-rodster
-rodwood
-roe
-roeblingite
-roebuck
-roed
-roelike
-roentgen
-roentgenism
-roentgenization
-roentgenize
-roentgenogram
-roentgenograph
-roentgenographic
-roentgenographically
-roentgenography
-roentgenologic
-roentgenological
-roentgenologically
-roentgenologist
-roentgenology
-roentgenometer
-roentgenometry
-roentgenoscope
-roentgenoscopic
-roentgenoscopy
-roentgenotherapy
-roentgentherapy
-roer
-roestone
-roey
-rog
-rogan
-rogation
-Rogationtide
-rogative
-rogatory
-Roger
-roger
-Rogero
-rogersite
-roggle
-Rogue
-rogue
-roguedom
-rogueling
-roguery
-rogueship
-roguing
-roguish
-roguishly
-roguishness
-rohan
-Rohilla
-rohob
-rohun
-rohuna
-roi
-roid
-roil
-roily
-Roist
-roister
-roisterer
-roistering
-roisteringly
-roisterly
-roisterous
-roisterously
-roit
-Rok
-roka
-roke
-rokeage
-rokee
-rokelay
-roker
-rokey
-roky
-Roland
-Rolandic
-role
-roleo
-Rolf
-Rolfe
-roll
-rollable
-rollback
-rolled
-rollejee
-roller
-rollerer
-rollermaker
-rollermaking
-rollerman
-rollerskater
-rollerskating
-rolley
-rolleyway
-rolleywayman
-rolliche
-rollichie
-rollick
-rollicker
-rollicking
-rollickingly
-rollickingness
-rollicksome
-rollicksomeness
-rollicky
-rolling
-rollingly
-Rollinia
-rollix
-rollmop
-Rollo
-rollock
-rollway
-roloway
-Romaean
-Romagnese
-Romagnol
-Romagnole
-Romaic
-romaika
-Romain
-romaine
-Romaji
-romal
-Roman
-Romance
-romance
-romancealist
-romancean
-romanceful
-romanceish
-romanceishness
-romanceless
-romancelet
-romancelike
-romancemonger
-romanceproof
-romancer
-romanceress
-romancical
-romancing
-romancist
-romancy
-Romandom
-Romane
-Romanes
-Romanese
-Romanesque
-Romanhood
-Romanian
-Romanic
-Romaniform
-Romanish
-Romanism
-Romanist
-Romanistic
-Romanite
-Romanity
-romanium
-Romanization
-Romanize
-Romanizer
-Romanly
-Romansch
-Romansh
-romantic
-romantical
-romanticalism
-romanticality
-romantically
-romanticalness
-romanticism
-romanticist
-romanticistic
-romanticity
-romanticize
-romanticly
-romanticness
-romantism
-romantist
-Romany
-romanza
-romaunt
-rombos
-rombowline
-Rome
-romeite
-Romeo
-romerillo
-romero
-Romescot
-Romeshot
-Romeward
-Romewards
-Romic
-Romipetal
-Romish
-Romishly
-Romishness
-rommack
-Rommany
-Romney
-Romneya
-romp
-romper
-romping
-rompingly
-rompish
-rompishly
-rompishness
-rompu
-rompy
-Romulian
-Romulus
-Ron
-Ronald
-roncador
-Roncaglian
-roncet
-ronco
-rond
-rondache
-rondacher
-rondawel
-ronde
-rondeau
-rondel
-rondelet
-Rondeletia
-rondelier
-rondelle
-rondellier
-rondino
-rondle
-rondo
-rondoletto
-rondure
-rone
-Rong
-Ronga
-rongeur
-Ronni
-ronquil
-Ronsardian
-Ronsardism
-Ronsardist
-Ronsardize
-Ronsdorfer
-Ronsdorfian
-rontgen
-ronyon
-rood
-roodebok
-roodle
-roodstone
-roof
-roofage
-roofer
-roofing
-roofless
-rooflet
-rooflike
-roofman
-rooftree
-roofward
-roofwise
-roofy
-rooibok
-rooinek
-rook
-rooker
-rookeried
-rookery
-rookie
-rookish
-rooklet
-rooklike
-rooky
-rool
-room
-roomage
-roomed
-roomer
-roomful
-roomie
-roomily
-roominess
-roomkeeper
-roomless
-roomlet
-roommate
-roomstead
-roomth
-roomthily
-roomthiness
-roomthy
-roomward
-roomy
-roon
-roorback
-roosa
-Roosevelt
-Rooseveltian
-roost
-roosted
-rooster
-roosterfish
-roosterhood
-roosterless
-roosters
-roostership
-Root
-root
-rootage
-rootcap
-rooted
-rootedly
-rootedness
-rooter
-rootery
-rootfast
-rootfastness
-roothold
-rootiness
-rootle
-rootless
-rootlessness
-rootlet
-rootlike
-rootling
-rootstalk
-rootstock
-rootwalt
-rootward
-rootwise
-rootworm
-rooty
-roove
-ropable
-rope
-ropeable
-ropeband
-ropebark
-ropedance
-ropedancer
-ropedancing
-ropelayer
-ropelaying
-ropelike
-ropemaker
-ropemaking
-ropeman
-roper
-roperipe
-ropery
-ropes
-ropesmith
-ropetrick
-ropewalk
-ropewalker
-ropeway
-ropework
-ropily
-ropiness
-roping
-ropish
-ropishness
-ropp
-ropy
-roque
-roquelaure
-roquer
-roquet
-roquette
-roquist
-roral
-roratorio
-Rori
-roric
-Roridula
-Roridulaceae
-roriferous
-rorifluent
-Roripa
-Rorippa
-roritorious
-rorqual
-rorty
-rorulent
-rory
-Rosa
-Rosabel
-Rosabella
-Rosaceae
-rosacean
-rosaceous
-rosal
-Rosales
-Rosalia
-Rosalie
-Rosalind
-Rosaline
-Rosamond
-rosanilin
-rosaniline
-rosarian
-rosario
-rosarium
-rosaruby
-rosary
-rosated
-Roschach
-roscherite
-roscid
-roscoelite
-rose
-roseal
-roseate
-roseately
-rosebay
-rosebud
-rosebush
-rosed
-rosedrop
-rosefish
-rosehead
-rosehill
-rosehiller
-roseine
-rosel
-roseless
-roselet
-roselike
-roselite
-rosella
-rosellate
-roselle
-Rosellinia
-rosemary
-Rosenbergia
-rosenbuschite
-roseola
-roseolar
-roseoliform
-roseolous
-roseous
-roseroot
-rosery
-roset
-rosetan
-rosetangle
-rosetime
-Rosetta
-rosette
-rosetted
-rosetty
-rosetum
-rosety
-roseways
-rosewise
-rosewood
-rosewort
-Rosicrucian
-Rosicrucianism
-rosied
-rosier
-rosieresite
-rosilla
-rosillo
-rosily
-rosin
-rosinate
-rosinduline
-Rosine
-rosiness
-rosinous
-rosinweed
-rosinwood
-rosiny
-rosland
-rosmarine
-Rosmarinus
-Rosminian
-Rosminianism
-rosoli
-rosolic
-rosolio
-rosolite
-rosorial
-Ross
-ross
-rosser
-rossite
-rostel
-rostellar
-Rostellaria
-rostellarian
-rostellate
-rostelliform
-rostellum
-roster
-rostra
-rostral
-rostrally
-rostrate
-rostrated
-rostriferous
-rostriform
-rostroantennary
-rostrobranchial
-rostrocarinate
-rostrocaudal
-rostroid
-rostrolateral
-rostrular
-rostrulate
-rostrulum
-rostrum
-rosular
-rosulate
-rosy
-rot
-rota
-rotacism
-Rotal
-rotal
-Rotala
-Rotalia
-rotalian
-rotaliform
-rotaliiform
-rotaman
-rotameter
-rotan
-Rotanev
-rotang
-Rotarian
-Rotarianism
-rotarianize
-Rotary
-rotary
-rotascope
-rotatable
-rotate
-rotated
-rotating
-rotation
-rotational
-rotative
-rotatively
-rotativism
-rotatodentate
-rotatoplane
-rotator
-Rotatoria
-rotatorian
-rotatory
-rotch
-rote
-rotella
-rotenone
-roter
-rotge
-rotgut
-rother
-rothermuck
-rotifer
-Rotifera
-rotiferal
-rotiferan
-rotiferous
-rotiform
-rotisserie
-roto
-rotograph
-rotogravure
-rotor
-rotorcraft
-rotproof
-Rotse
-rottan
-rotten
-rottenish
-rottenly
-rottenness
-rottenstone
-rotter
-rotting
-rottle
-rottlera
-rottlerin
-rottock
-rottolo
-rotula
-rotulad
-rotular
-rotulet
-rotulian
-rotuliform
-rotulus
-rotund
-rotunda
-rotundate
-rotundifoliate
-rotundifolious
-rotundiform
-rotundify
-rotundity
-rotundly
-rotundness
-rotundo
-rotundotetragonal
-roub
-roucou
-roud
-roue
-rouelle
-rouge
-rougeau
-rougeberry
-rougelike
-rougemontite
-rougeot
-rough
-roughage
-roughcast
-roughcaster
-roughdraft
-roughdraw
-roughdress
-roughdry
-roughen
-roughener
-rougher
-roughet
-roughhearted
-roughheartedness
-roughhew
-roughhewer
-roughhewn
-roughhouse
-roughhouser
-roughhousing
-roughhousy
-roughie
-roughing
-roughings
-roughish
-roughishly
-roughishness
-roughleg
-roughly
-roughness
-roughometer
-roughride
-roughrider
-roughroot
-roughscuff
-roughsetter
-roughshod
-roughslant
-roughsome
-roughstring
-roughstuff
-roughtail
-roughtailed
-roughwork
-roughwrought
-roughy
-rougy
-rouille
-rouky
-roulade
-rouleau
-roulette
-Rouman
-Roumeliote
-roun
-rounce
-rounceval
-rouncy
-round
-roundabout
-roundaboutly
-roundaboutness
-rounded
-roundedly
-roundedness
-roundel
-roundelay
-roundeleer
-rounder
-roundfish
-roundhead
-roundheaded
-roundheadedness
-roundhouse
-rounding
-roundish
-roundishness
-roundlet
-roundline
-roundly
-roundmouthed
-roundness
-roundnose
-roundnosed
-roundridge
-roundseam
-roundsman
-roundtail
-roundtop
-roundtree
-roundup
-roundwise
-roundwood
-roundworm
-roundy
-roup
-rouper
-roupet
-roupily
-roupingwife
-roupit
-roupy
-rouse
-rouseabout
-rousedness
-rousement
-rouser
-rousing
-rousingly
-Rousseau
-Rousseauan
-Rousseauism
-Rousseauist
-Rousseauistic
-Rousseauite
-Roussellian
-roussette
-Roussillon
-roust
-roustabout
-rouster
-rousting
-rout
-route
-router
-routh
-routhercock
-routhie
-routhiness
-routhy
-routinary
-routine
-routineer
-routinely
-routing
-routinish
-routinism
-routinist
-routinization
-routinize
-routivarite
-routous
-routously
-rouvillite
-rove
-rover
-rovet
-rovetto
-roving
-rovingly
-rovingness
-row
-rowable
-rowan
-rowanberry
-rowboat
-rowdily
-rowdiness
-rowdy
-rowdydow
-rowdydowdy
-rowdyish
-rowdyishly
-rowdyishness
-rowdyism
-rowdyproof
-rowed
-rowel
-rowelhead
-rowen
-Rowena
-rower
-rowet
-rowiness
-rowing
-Rowland
-rowlandite
-Rowleian
-rowlet
-Rowley
-Rowleyan
-rowlock
-rowport
-rowty
-rowy
-rox
-Roxana
-Roxane
-Roxanne
-Roxburgh
-Roxburghiaceae
-Roxbury
-Roxie
-Roxolani
-Roxy
-roxy
-Roy
-royal
-royale
-royalet
-royalism
-royalist
-royalization
-royalize
-royally
-royalty
-Royena
-royet
-royetness
-royetous
-royetously
-Roystonea
-royt
-rozum
-Rua
-ruach
-ruana
-rub
-rubasse
-rubato
-rubbed
-rubber
-rubberer
-rubberize
-rubberless
-rubberneck
-rubbernecker
-rubbernose
-rubbers
-rubberstone
-rubberwise
-rubbery
-rubbing
-rubbingstone
-rubbish
-rubbishing
-rubbishingly
-rubbishly
-rubbishry
-rubbishy
-rubble
-rubbler
-rubblestone
-rubblework
-rubbly
-rubdown
-Rube
-rubedinous
-rubedity
-rubefacient
-rubefaction
-rubelet
-rubella
-rubelle
-rubellite
-rubellosis
-Rubensian
-rubeola
-rubeolar
-rubeoloid
-ruberythric
-ruberythrinic
-rubescence
-rubescent
-Rubia
-Rubiaceae
-rubiaceous
-Rubiales
-rubianic
-rubiate
-rubiator
-rubican
-rubicelle
-Rubicola
-Rubicon
-rubiconed
-rubicund
-rubicundity
-rubidic
-rubidine
-rubidium
-rubied
-rubific
-rubification
-rubificative
-rubify
-rubiginous
-rubijervine
-rubine
-rubineous
-rubious
-ruble
-rublis
-rubor
-rubric
-rubrica
-rubrical
-rubricality
-rubrically
-rubricate
-rubrication
-rubricator
-rubrician
-rubricism
-rubricist
-rubricity
-rubricize
-rubricose
-rubrific
-rubrification
-rubrify
-rubrisher
-rubrospinal
-rubstone
-Rubus
-ruby
-rubylike
-rubytail
-rubythroat
-rubywise
-rucervine
-Rucervus
-Ruchbah
-ruche
-ruching
-ruck
-rucker
-ruckle
-ruckling
-rucksack
-rucksey
-ruckus
-rucky
-ructation
-ruction
-rud
-rudas
-Rudbeckia
-rudd
-rudder
-rudderhead
-rudderhole
-rudderless
-rudderlike
-rudderpost
-rudderstock
-ruddied
-ruddily
-ruddiness
-ruddle
-ruddleman
-ruddock
-ruddy
-ruddyish
-rude
-rudely
-rudeness
-rudented
-rudenture
-ruderal
-rudesby
-Rudesheimer
-rudge
-rudiment
-rudimental
-rudimentarily
-rudimentariness
-rudimentary
-rudimentation
-rudish
-Rudista
-Rudistae
-rudistan
-rudistid
-rudity
-Rudmasday
-Rudolf
-Rudolph
-Rudolphus
-Rudy
-rue
-rueful
-ruefully
-ruefulness
-ruelike
-ruelle
-Ruellia
-ruen
-ruer
-ruesome
-ruesomeness
-ruewort
-rufescence
-rufescent
-ruff
-ruffable
-ruffed
-ruffer
-ruffian
-ruffianage
-ruffiandom
-ruffianhood
-ruffianish
-ruffianism
-ruffianize
-ruffianlike
-ruffianly
-ruffiano
-ruffin
-ruffle
-ruffled
-ruffleless
-rufflement
-ruffler
-rufflike
-ruffliness
-ruffling
-ruffly
-ruficarpous
-ruficaudate
-ruficoccin
-ruficornate
-rufigallic
-rufoferruginous
-rufofulvous
-rufofuscous
-rufopiceous
-rufotestaceous
-rufous
-rufter
-rufulous
-Rufus
-rufus
-rug
-ruga
-rugate
-Rugbeian
-Rugby
-rugged
-ruggedly
-ruggedness
-Rugger
-rugging
-ruggle
-ruggy
-rugheaded
-ruglike
-rugmaker
-rugmaking
-Rugosa
-rugosa
-rugose
-rugosely
-rugosity
-rugous
-rugulose
-ruin
-ruinable
-ruinate
-ruination
-ruinatious
-ruinator
-ruined
-ruiner
-ruing
-ruiniform
-ruinlike
-ruinous
-ruinously
-ruinousness
-ruinproof
-Rukbat
-rukh
-rulable
-Rulander
-rule
-ruledom
-ruleless
-rulemonger
-ruler
-rulership
-ruling
-rulingly
-rull
-ruller
-rullion
-Rum
-rum
-rumal
-Ruman
-Rumanian
-rumbelow
-rumble
-rumblegarie
-rumblegumption
-rumblement
-rumbler
-rumbling
-rumblingly
-rumbly
-rumbo
-rumbooze
-rumbowline
-rumbowling
-rumbullion
-rumbumptious
-rumbustical
-rumbustious
-rumbustiousness
-rumchunder
-Rumelian
-rumen
-rumenitis
-rumenocentesis
-rumenotomy
-Rumex
-rumfustian
-rumgumption
-rumgumptious
-ruminal
-ruminant
-Ruminantia
-ruminantly
-ruminate
-ruminating
-ruminatingly
-rumination
-ruminative
-ruminatively
-ruminator
-rumkin
-rumless
-rumly
-rummage
-rummager
-rummagy
-rummer
-rummily
-rumminess
-rummish
-rummy
-rumness
-rumney
-rumor
-rumorer
-rumormonger
-rumorous
-rumorproof
-rumourmonger
-rump
-rumpad
-rumpadder
-rumpade
-Rumper
-rumple
-rumpless
-rumply
-rumpscuttle
-rumpuncheon
-rumpus
-rumrunner
-rumrunning
-rumshop
-rumswizzle
-rumtytoo
-run
-runabout
-runagate
-runaround
-runaway
-runback
-runboard
-runby
-runch
-runchweed
-runcinate
-rundale
-Rundi
-rundle
-rundlet
-rune
-runecraft
-runed
-runefolk
-runeless
-runelike
-runer
-runesmith
-runestaff
-runeword
-runfish
-rung
-runghead
-rungless
-runholder
-runic
-runically
-runiform
-runite
-runkeeper
-runkle
-runkly
-runless
-runlet
-runman
-runnable
-runnel
-runner
-runnet
-running
-runningly
-runny
-runoff
-runologist
-runology
-runout
-runover
-runproof
-runrig
-runround
-runt
-runted
-runtee
-runtiness
-runtish
-runtishly
-runtishness
-runty
-runway
-rupa
-rupee
-Rupert
-rupestral
-rupestrian
-rupestrine
-rupia
-rupiah
-rupial
-Rupicapra
-Rupicaprinae
-rupicaprine
-Rupicola
-Rupicolinae
-rupicoline
-rupicolous
-rupie
-rupitic
-Ruppia
-ruptile
-ruption
-ruptive
-ruptuary
-rupturable
-rupture
-ruptured
-rupturewort
-rural
-ruralism
-ruralist
-ruralite
-rurality
-ruralization
-ruralize
-rurally
-ruralness
-rurban
-ruridecanal
-rurigenous
-Ruritania
-Ruritanian
-ruru
-Rus
-Rusa
-Ruscus
-ruse
-rush
-rushbush
-rushed
-rushen
-rusher
-rushiness
-rushing
-rushingly
-rushingness
-rushland
-rushlight
-rushlighted
-rushlike
-rushlit
-rushy
-Rusin
-rusine
-rusk
-ruskin
-Ruskinian
-rusky
-rusma
-rusot
-ruspone
-Russ
-russel
-Russelia
-Russell
-Russellite
-Russene
-russet
-russeting
-russetish
-russetlike
-russety
-Russia
-russia
-Russian
-Russianism
-Russianist
-Russianization
-Russianize
-Russification
-Russificator
-Russifier
-Russify
-Russine
-Russism
-Russniak
-Russolatrous
-Russolatry
-Russomania
-Russomaniac
-Russomaniacal
-Russophile
-Russophilism
-Russophilist
-Russophobe
-Russophobia
-Russophobiac
-Russophobism
-Russophobist
-russud
-Russula
-rust
-rustable
-rustful
-rustic
-rustical
-rustically
-rusticalness
-rusticate
-rustication
-rusticator
-rusticial
-rusticism
-rusticity
-rusticize
-rusticly
-rusticness
-rusticoat
-rustily
-rustiness
-rustle
-rustler
-rustless
-rustling
-rustlingly
-rustlingness
-rustly
-rustproof
-rustre
-rustred
-Rusty
-rusty
-rustyback
-rustyish
-ruswut
-rut
-Ruta
-rutabaga
-Rutaceae
-rutaceous
-rutaecarpine
-rutate
-rutch
-rutelian
-Rutelinae
-Ruth
-ruth
-ruthenate
-Ruthene
-Ruthenian
-ruthenic
-ruthenious
-ruthenium
-ruthenous
-ruther
-rutherford
-rutherfordine
-rutherfordite
-ruthful
-ruthfully
-ruthfulness
-ruthless
-ruthlessly
-ruthlessness
-rutic
-rutidosis
-rutilant
-rutilated
-rutile
-rutilous
-rutin
-rutinose
-Rutiodon
-ruttee
-rutter
-ruttiness
-ruttish
-ruttishly
-ruttishness
-rutty
-Rutuli
-rutyl
-rutylene
-ruvid
-rux
-rvulsant
-ryal
-ryania
-rybat
-ryder
-rye
-ryen
-Rymandra
-ryme
-Rynchospora
-rynchosporous
-rynd
-rynt
-ryot
-ryotwar
-ryotwari
-rype
-rypeck
-rytidosis
-Rytina
-Ryukyu
-S
-s
-sa
-saa
-Saad
-Saan
-Saarbrucken
-sab
-Saba
-sabadilla
-sabadine
-sabadinine
-Sabaean
-Sabaeanism
-Sabaeism
-sabaigrass
-Sabaism
-Sabaist
-Sabal
-Sabalaceae
-sabalo
-Saban
-sabanut
-Sabaoth
-Sabathikos
-Sabazian
-Sabazianism
-Sabazios
-sabbat
-Sabbatarian
-Sabbatarianism
-Sabbatary
-Sabbatean
-Sabbath
-sabbath
-Sabbathaian
-Sabbathaic
-Sabbathaist
-Sabbathbreaker
-Sabbathbreaking
-Sabbathism
-Sabbathize
-Sabbathkeeper
-Sabbathkeeping
-Sabbathless
-Sabbathlike
-Sabbathly
-Sabbatia
-sabbatia
-Sabbatian
-Sabbatic
-sabbatic
-Sabbatical
-sabbatical
-Sabbatically
-Sabbaticalness
-sabbatine
-sabbatism
-Sabbatist
-Sabbatization
-Sabbatize
-sabbaton
-sabbitha
-sabdariffa
-sabe
-sabeca
-Sabella
-sabella
-sabellan
-Sabellaria
-sabellarian
-Sabelli
-Sabellian
-Sabellianism
-Sabellianize
-sabellid
-Sabellidae
-sabelloid
-saber
-saberbill
-sabered
-saberleg
-saberlike
-saberproof
-sabertooth
-saberwing
-Sabia
-Sabiaceae
-sabiaceous
-Sabian
-Sabianism
-sabicu
-Sabik
-Sabina
-sabina
-Sabine
-sabine
-Sabinian
-sabino
-Sabir
-sable
-sablefish
-sableness
-sably
-sabora
-saboraim
-sabot
-sabotage
-saboted
-saboteur
-sabotine
-Sabra
-sabra
-sabretache
-Sabrina
-Sabromin
-sabromin
-Sabuja
-sabuline
-sabulite
-sabulose
-sabulosity
-sabulous
-sabulum
-saburra
-saburral
-saburration
-sabutan
-sabzi
-Sac
-sac
-Sacae
-sacalait
-sacaline
-sacaton
-sacatra
-sacbrood
-saccade
-saccadic
-Saccammina
-saccate
-saccated
-Saccha
-saccharamide
-saccharase
-saccharate
-saccharated
-saccharephidrosis
-saccharic
-saccharide
-sacchariferous
-saccharification
-saccharifier
-saccharify
-saccharilla
-saccharimeter
-saccharimetric
-saccharimetrical
-saccharimetry
-saccharin
-saccharinate
-saccharinated
-saccharine
-saccharineish
-saccharinely
-saccharinic
-saccharinity
-saccharization
-saccharize
-saccharobacillus
-saccharobiose
-saccharobutyric
-saccharoceptive
-saccharoceptor
-saccharochemotropic
-saccharocolloid
-saccharofarinaceous
-saccharogalactorrhea
-saccharogenic
-saccharohumic
-saccharoid
-saccharoidal
-saccharolactonic
-saccharolytic
-saccharometabolic
-saccharometabolism
-saccharometer
-saccharometric
-saccharometry
-saccharomucilaginous
-Saccharomyces
-saccharomyces
-Saccharomycetaceae
-saccharomycetaceous
-Saccharomycetales
-saccharomycete
-Saccharomycetes
-saccharomycetic
-saccharomycosis
-saccharon
-saccharonate
-saccharone
-saccharonic
-saccharophylly
-saccharorrhea
-saccharoscope
-saccharose
-saccharostarchy
-saccharosuria
-saccharotriose
-saccharous
-saccharulmic
-saccharulmin
-Saccharum
-saccharum
-saccharuria
-sacciferous
-sacciform
-Saccobranchiata
-saccobranchiate
-Saccobranchus
-saccoderm
-Saccolabium
-saccolabium
-saccomyian
-saccomyid
-Saccomyidae
-Saccomyina
-saccomyine
-saccomyoid
-Saccomyoidea
-saccomyoidean
-Saccomys
-Saccopharyngidae
-Saccopharynx
-Saccorhiza
-saccos
-saccular
-sacculate
-sacculated
-sacculation
-saccule
-Sacculina
-sacculoutricular
-sacculus
-saccus
-sacellum
-sacerdocy
-sacerdotage
-sacerdotal
-sacerdotalism
-sacerdotalist
-sacerdotalize
-sacerdotally
-sacerdotical
-sacerdotism
-sachamaker
-sachem
-sachemdom
-sachemic
-sachemship
-sachet
-Sacheverell
-Sacian
-sack
-sackage
-sackamaker
-sackbag
-sackbut
-sackcloth
-sackclothed
-sackdoudle
-sacked
-sacken
-sacker
-sackful
-sacking
-sackless
-sacklike
-sackmaker
-sackmaking
-sackman
-sacktime
-saclike
-saco
-sacope
-sacque
-sacra
-sacrad
-sacral
-sacralgia
-sacralization
-sacrament
-sacramental
-sacramentalism
-sacramentalist
-sacramentality
-sacramentally
-sacramentalness
-Sacramentarian
-sacramentarian
-sacramentarianism
-sacramentarist
-Sacramentary
-sacramentary
-sacramenter
-sacramentism
-sacramentize
-Sacramento
-sacramentum
-sacraria
-sacrarial
-sacrarium
-sacrectomy
-sacred
-sacredly
-sacredness
-sacrificable
-sacrificant
-Sacrificati
-sacrification
-sacrificator
-sacrificatory
-sacrificature
-sacrifice
-sacrificer
-sacrificial
-sacrificially
-sacrificing
-sacrilege
-sacrileger
-sacrilegious
-sacrilegiously
-sacrilegiousness
-sacrilegist
-sacrilumbal
-sacrilumbalis
-sacring
-Sacripant
-sacrist
-sacristan
-sacristy
-sacro
-sacrocaudal
-sacrococcygeal
-sacrococcygean
-sacrococcygeus
-sacrococcyx
-sacrocostal
-sacrocotyloid
-sacrocotyloidean
-sacrocoxalgia
-sacrocoxitis
-sacrodorsal
-sacrodynia
-sacrofemoral
-sacroiliac
-sacroinguinal
-sacroischiac
-sacroischiadic
-sacroischiatic
-sacrolumbal
-sacrolumbalis
-sacrolumbar
-sacropectineal
-sacroperineal
-sacropictorial
-sacroposterior
-sacropubic
-sacrorectal
-sacrosanct
-sacrosanctity
-sacrosanctness
-sacrosciatic
-sacrosecular
-sacrospinal
-sacrospinalis
-sacrospinous
-sacrotomy
-sacrotuberous
-sacrovertebral
-sacrum
-sad
-Sadachbia
-Sadalmelik
-Sadalsuud
-sadden
-saddening
-saddeningly
-saddik
-saddirham
-saddish
-saddle
-saddleback
-saddlebag
-saddlebow
-saddlecloth
-saddled
-saddleleaf
-saddleless
-saddlelike
-saddlenose
-saddler
-saddlery
-saddlesick
-saddlesore
-saddlesoreness
-saddlestead
-saddletree
-saddlewise
-saddling
-Sadducaic
-Sadducean
-Sadducee
-Sadduceeism
-Sadduceeist
-Sadducism
-Sadducize
-sade
-sadh
-sadhe
-sadhearted
-sadhu
-sadic
-Sadie
-sadiron
-sadism
-sadist
-sadistic
-sadistically
-Sadite
-sadly
-sadness
-sado
-sadomasochism
-Sadr
-sadr
-saecula
-saeculum
-Saeima
-saernaite
-saeter
-saeume
-Safar
-safari
-Safavi
-Safawid
-safe
-safeblower
-safeblowing
-safebreaker
-safebreaking
-safecracking
-safeguard
-safeguarder
-safehold
-safekeeper
-safekeeping
-safelight
-safely
-safemaker
-safemaking
-safen
-safener
-safeness
-safety
-Saffarian
-Saffarid
-saffian
-safflor
-safflorite
-safflow
-safflower
-saffron
-saffroned
-saffrontree
-saffronwood
-saffrony
-Safi
-Safine
-Safini
-safranin
-safranine
-safranophile
-safrole
-saft
-sag
-saga
-sagaciate
-sagacious
-sagaciously
-sagaciousness
-sagacity
-Sagai
-sagaie
-sagaman
-sagamite
-sagamore
-sagapenum
-sagathy
-sage
-sagebrush
-sagebrusher
-sagebush
-sageleaf
-sagely
-sagene
-sageness
-sagenite
-sagenitic
-Sageretia
-sagerose
-sageship
-sagewood
-sagger
-sagging
-saggon
-saggy
-saghavart
-Sagina
-saginate
-sagination
-saging
-Sagitarii
-sagitta
-sagittal
-sagittally
-Sagittaria
-Sagittariid
-Sagittarius
-sagittarius
-Sagittary
-sagittary
-sagittate
-Sagittid
-sagittiferous
-sagittiform
-sagittocyst
-sagittoid
-sagless
-sago
-sagoin
-sagolike
-Sagra
-saguaro
-Saguerus
-sagum
-saguran
-sagvandite
-sagwire
-sagy
-sah
-Sahadeva
-Sahaptin
-Sahara
-Saharan
-Saharian
-Saharic
-sahh
-sahib
-Sahibah
-Sahidic
-sahme
-Saho
-sahoukar
-sahukar
-sai
-saic
-said
-Saidi
-Saify
-saiga
-Saiid
-sail
-sailable
-sailage
-sailboat
-sailcloth
-sailed
-sailer
-sailfish
-sailflying
-sailing
-sailingly
-sailless
-sailmaker
-sailmaking
-sailor
-sailoring
-sailorizing
-sailorless
-sailorlike
-sailorly
-sailorman
-sailorproof
-sailplane
-sailship
-sailsman
-saily
-saim
-saimiri
-saimy
-sain
-Sainfoin
-saint
-saintdom
-sainted
-saintess
-sainthood
-saintish
-saintism
-saintless
-saintlike
-saintlily
-saintliness
-saintling
-saintly
-saintologist
-saintology
-Saintpaulia
-saintship
-saip
-Saiph
-sair
-sairly
-sairve
-sairy
-Saite
-saithe
-Saitic
-Saiva
-Saivism
-saj
-sajou
-Sak
-Saka
-Sakai
-Sakalava
-sake
-sakeber
-sakeen
-Sakel
-Sakelarides
-Sakell
-Sakellaridis
-saker
-sakeret
-Sakha
-saki
-sakieh
-Sakkara
-Saktism
-sakulya
-Sakyamuni
-Sal
-sal
-salaam
-salaamlike
-salability
-salable
-salableness
-salably
-salaceta
-salacious
-salaciously
-salaciousness
-salacity
-salacot
-salad
-salading
-salago
-salagrama
-salal
-salamandarin
-salamander
-salamanderlike
-Salamandra
-salamandrian
-Salamandridae
-salamandriform
-Salamandrina
-salamandrine
-salamandroid
-salambao
-Salaminian
-salamo
-salampore
-salangane
-salangid
-Salangidae
-Salar
-salar
-salariat
-salaried
-salary
-salaryless
-salat
-salay
-sale
-salegoer
-salele
-salema
-salenixon
-salep
-saleratus
-saleroom
-salesclerk
-Salesian
-saleslady
-salesman
-salesmanship
-salespeople
-salesperson
-salesroom
-saleswoman
-salework
-saleyard
-salfern
-Salian
-Saliaric
-Salic
-salic
-Salicaceae
-salicaceous
-Salicales
-Salicariaceae
-salicetum
-salicin
-salicional
-salicorn
-Salicornia
-salicyl
-salicylal
-salicylaldehyde
-salicylamide
-salicylanilide
-salicylase
-salicylate
-salicylic
-salicylide
-salicylidene
-salicylism
-salicylize
-salicylous
-salicyluric
-salicylyl
-salience
-salient
-Salientia
-salientian
-saliently
-saliferous
-salifiable
-salification
-salify
-saligenin
-saligot
-salimeter
-salimetry
-Salina
-salina
-Salinan
-salination
-saline
-Salinella
-salinelle
-salineness
-saliniferous
-salinification
-saliniform
-salinity
-salinize
-salinometer
-salinometry
-salinosulphureous
-salinoterreous
-Salisburia
-Salish
-Salishan
-salite
-salited
-Saliva
-saliva
-salival
-Salivan
-salivant
-salivary
-salivate
-salivation
-salivator
-salivatory
-salivous
-Salix
-salix
-salle
-sallee
-salleeman
-sallenders
-sallet
-sallier
-salloo
-sallow
-sallowish
-sallowness
-sallowy
-Sally
-sally
-Sallybloom
-sallyman
-sallywood
-Salm
-salma
-salmagundi
-salmiac
-salmine
-salmis
-Salmo
-Salmon
-salmon
-salmonberry
-Salmonella
-salmonella
-salmonellae
-salmonellosis
-salmonet
-salmonid
-Salmonidae
-salmoniform
-salmonlike
-salmonoid
-Salmonoidea
-Salmonoidei
-salmonsite
-salmwood
-salnatron
-Salol
-salol
-Salome
-salometer
-salometry
-salomon
-Salomonia
-Salomonian
-Salomonic
-salon
-saloon
-saloonist
-saloonkeeper
-saloop
-Salopian
-salopian
-salp
-Salpa
-salpa
-salpacean
-salpian
-salpicon
-Salpidae
-salpiform
-Salpiglossis
-salpiglossis
-salpingectomy
-salpingemphraxis
-salpinges
-salpingian
-salpingion
-salpingitic
-salpingitis
-salpingocatheterism
-salpingocele
-salpingocyesis
-salpingomalleus
-salpingonasal
-salpingopalatal
-salpingopalatine
-salpingoperitonitis
-salpingopexy
-salpingopharyngeal
-salpingopharyngeus
-salpingopterygoid
-salpingorrhaphy
-salpingoscope
-salpingostaphyline
-salpingostenochoria
-salpingostomatomy
-salpingostomy
-salpingotomy
-salpinx
-salpoid
-salse
-salsifis
-salsify
-salsilla
-Salsola
-Salsolaceae
-salsolaceous
-salsuginous
-salt
-salta
-saltant
-saltarella
-saltarello
-saltary
-saltate
-saltation
-saltativeness
-Saltator
-saltator
-Saltatoria
-saltatorial
-saltatorian
-saltatoric
-saltatorious
-saltatory
-saltbush
-saltcat
-saltcatch
-saltcellar
-salted
-saltee
-salten
-salter
-saltern
-saltery
-saltfat
-saltfoot
-salthouse
-saltier
-saltierra
-saltierwise
-Saltigradae
-saltigrade
-saltimbanco
-saltimbank
-saltimbankery
-saltine
-saltiness
-salting
-saltish
-saltishly
-saltishness
-saltless
-saltlessness
-saltly
-saltmaker
-saltmaking
-saltman
-saltmouth
-saltness
-saltometer
-saltorel
-saltpan
-saltpeter
-saltpetrous
-saltpond
-saltspoon
-saltspoonful
-saltsprinkler
-saltus
-saltweed
-saltwife
-saltworker
-saltworks
-saltwort
-salty
-salubrify
-salubrious
-salubriously
-salubriousness
-salubrity
-saluki
-salung
-salutarily
-salutariness
-salutary
-salutation
-salutational
-salutationless
-salutatious
-salutatorian
-salutatorily
-salutatorium
-salutatory
-salute
-saluter
-salutiferous
-salutiferously
-Salva
-salvability
-salvable
-salvableness
-salvably
-Salvadora
-salvadora
-Salvadoraceae
-salvadoraceous
-Salvadoran
-Salvadorian
-salvage
-salvageable
-salvagee
-salvageproof
-salvager
-salvaging
-Salvarsan
-salvarsan
-salvatella
-salvation
-salvational
-salvationism
-salvationist
-salvatory
-salve
-salveline
-Salvelinus
-salver
-salverform
-Salvia
-salvianin
-salvific
-salvifical
-salvifically
-Salvinia
-Salviniaceae
-salviniaceous
-Salviniales
-salviol
-salvo
-salvor
-salvy
-Salwey
-salzfelle
-Sam
-sam
-Samadera
-samadh
-samadhi
-samaj
-Samal
-saman
-Samandura
-Samani
-Samanid
-Samantha
-samara
-samaria
-samariform
-Samaritan
-Samaritaness
-Samaritanism
-samarium
-Samarkand
-samaroid
-samarra
-samarskite
-Samas
-samba
-Sambal
-sambal
-sambaqui
-sambar
-Sambara
-Sambathe
-sambhogakaya
-Sambo
-sambo
-Sambucaceae
-Sambucus
-sambuk
-sambuke
-sambunigrin
-Samburu
-same
-samekh
-samel
-sameliness
-samely
-samen
-sameness
-samesome
-Samgarnebo
-samh
-Samhain
-samhita
-Samian
-samiel
-Samir
-samiresite
-samiri
-samisen
-Samish
-samite
-samkara
-samlet
-sammel
-sammer
-sammier
-Sammy
-sammy
-Samnani
-Samnite
-Samoan
-Samogitian
-samogonka
-Samolus
-Samosatenian
-samothere
-Samotherium
-Samothracian
-samovar
-Samoyed
-Samoyedic
-samp
-sampaguita
-sampaloc
-sampan
-samphire
-sampi
-sample
-sampleman
-sampler
-samplery
-sampling
-Sampsaean
-Samsam
-samsara
-samshu
-Samsien
-samskara
-Samson
-samson
-Samsoness
-Samsonian
-Samsonic
-Samsonistic
-samsonite
-Samucan
-Samucu
-Samuel
-samurai
-Samydaceae
-San
-san
-sanability
-sanable
-sanableness
-sanai
-Sanand
-sanative
-sanativeness
-sanatoria
-sanatorium
-sanatory
-Sanballat
-sanbenito
-Sanche
-sancho
-sanct
-sancta
-sanctanimity
-sanctifiable
-sanctifiableness
-sanctifiably
-sanctificate
-sanctification
-sanctified
-sanctifiedly
-sanctifier
-sanctify
-sanctifyingly
-sanctilogy
-sanctiloquent
-sanctimonial
-sanctimonious
-sanctimoniously
-sanctimoniousness
-sanctimony
-sanction
-sanctionable
-sanctionary
-sanctionative
-sanctioner
-sanctionist
-sanctionless
-sanctionment
-sanctitude
-sanctity
-sanctologist
-Sanctology
-sanctorium
-sanctuaried
-sanctuarize
-sanctuary
-sanctum
-Sanctus
-Sancy
-sancyite
-sand
-sandak
-sandal
-sandaled
-sandaliform
-sandaling
-sandalwood
-sandalwort
-sandan
-sandarac
-sandaracin
-sandastros
-Sandawe
-sandbag
-sandbagger
-sandbank
-sandbin
-sandblast
-sandboard
-sandbox
-sandboy
-sandbur
-sandclub
-sandculture
-sanded
-Sandeep
-Sandemanian
-Sandemanianism
-Sandemanism
-Sander
-sander
-sanderling
-sanders
-sandfish
-sandflower
-sandglass
-sandheat
-sandhi
-sandiferous
-sandiness
-sanding
-Sandip
-sandiver
-sandix
-sandlapper
-sandless
-sandlike
-sandling
-sandman
-sandnatter
-sandnecker
-sandpaper
-sandpaperer
-sandpeep
-sandpiper
-sandproof
-Sandra
-sandrock
-sandspit
-sandspur
-sandstay
-sandstone
-sandstorm
-sandust
-sandweed
-sandweld
-sandwich
-sandwood
-sandworm
-sandwort
-Sandy
-sandy
-sandyish
-sane
-sanely
-saneness
-Sanetch
-Sanford
-Sanforized
-sang
-sanga
-Sangamon
-sangar
-sangaree
-sangei
-sanger
-sangerbund
-sangerfest
-Sanggil
-sangha
-Sangho
-Sangir
-Sangirese
-sanglant
-sangley
-Sangraal
-sangreeroot
-sangrel
-sangsue
-sanguicolous
-sanguifacient
-sanguiferous
-sanguification
-sanguifier
-sanguifluous
-sanguimotor
-sanguimotory
-sanguinaceous
-Sanguinaria
-sanguinarily
-sanguinariness
-sanguinary
-sanguine
-sanguineless
-sanguinely
-sanguineness
-sanguineobilious
-sanguineophlegmatic
-sanguineous
-sanguineousness
-sanguineovascular
-sanguinicolous
-sanguiniferous
-sanguinification
-sanguinism
-sanguinity
-sanguinivorous
-sanguinocholeric
-sanguinolency
-sanguinolent
-sanguinopoietic
-sanguinous
-Sanguisorba
-Sanguisorbaceae
-sanguisuge
-sanguisugent
-sanguisugous
-sanguivorous
-Sanhedrim
-Sanhedrin
-Sanhedrist
-Sanhita
-sanicle
-Sanicula
-sanidine
-sanidinic
-sanidinite
-sanies
-sanification
-sanify
-sanious
-sanipractic
-sanitarian
-sanitarily
-sanitarist
-sanitarium
-sanitary
-sanitate
-sanitation
-sanitationist
-sanitist
-sanitize
-Sanity
-sanity
-sanjak
-sanjakate
-sanjakbeg
-sanjakship
-Sanjay
-Sanjeev
-Sanjib
-sank
-sankha
-Sankhya
-sannaite
-Sannoisian
-sannup
-sannyasi
-sannyasin
-sanopurulent
-sanoserous
-Sanpoil
-sans
-Sansar
-sansei
-Sansevieria
-sanshach
-sansi
-Sanskrit
-Sanskritic
-Sanskritist
-Sanskritization
-Sanskritize
-sant
-Santa
-Santal
-santal
-Santalaceae
-santalaceous
-Santalales
-Santali
-santalic
-santalin
-santalol
-Santalum
-santalwood
-santapee
-Santee
-santene
-Santiago
-santimi
-santims
-santir
-Santo
-Santolina
-santon
-santonica
-santonin
-santoninic
-santorinite
-Santos
-sanukite
-Sanvitalia
-Sanyakoan
-sao
-Saoshyant
-sap
-sapa
-sapajou
-sapan
-sapanwood
-sapbush
-sapek
-Saperda
-sapful
-Sapharensian
-saphead
-sapheaded
-sapheadedness
-saphena
-saphenal
-saphenous
-saphie
-sapid
-sapidity
-sapidless
-sapidness
-sapience
-sapiency
-sapient
-sapiential
-sapientially
-sapientize
-sapiently
-sapin
-sapinda
-Sapindaceae
-sapindaceous
-Sapindales
-sapindaship
-Sapindus
-Sapium
-sapiutan
-saple
-sapless
-saplessness
-sapling
-saplinghood
-sapo
-sapodilla
-sapogenin
-saponaceous
-saponaceousness
-saponacity
-Saponaria
-saponarin
-saponary
-Saponi
-saponifiable
-saponification
-saponifier
-saponify
-saponin
-saponite
-sapophoric
-sapor
-saporific
-saporosity
-saporous
-Sapota
-sapota
-Sapotaceae
-sapotaceous
-sapote
-sapotilha
-sapotilla
-sapotoxin
-sappanwood
-sappare
-sapper
-Sapphic
-sapphic
-sapphire
-sapphireberry
-sapphired
-sapphirewing
-sapphiric
-sapphirine
-Sapphism
-Sapphist
-Sappho
-sappiness
-sapping
-sapples
-sappy
-sapremia
-sapremic
-saprine
-saprocoll
-saprodil
-saprodontia
-saprogenic
-saprogenous
-Saprolegnia
-Saprolegniaceae
-saprolegniaceous
-Saprolegniales
-saprolegnious
-saprolite
-saprolitic
-sapropel
-sapropelic
-sapropelite
-saprophagan
-saprophagous
-saprophile
-saprophilous
-saprophyte
-saprophytic
-saprophytically
-saprophytism
-saprostomous
-saprozoic
-sapsago
-sapskull
-sapsuck
-sapsucker
-sapucaia
-sapucainha
-sapwood
-sapwort
-Saqib
-sar
-Sara
-saraad
-sarabacan
-Sarabaite
-saraband
-Saracen
-Saracenian
-Saracenic
-Saracenical
-Saracenism
-Saracenlike
-Sarada
-saraf
-Sarah
-Sarakolet
-Sarakolle
-Saramaccaner
-Saran
-sarangi
-sarangousty
-Saratoga
-Saratogan
-Saravan
-Sarawakese
-sarawakite
-Sarawan
-sarbacane
-sarbican
-sarcasm
-sarcasmproof
-sarcast
-sarcastic
-sarcastical
-sarcastically
-sarcasticalness
-sarcasticness
-sarcelle
-sarcenet
-sarcilis
-Sarcina
-sarcine
-sarcitis
-sarcle
-sarcler
-sarcoadenoma
-Sarcobatus
-sarcoblast
-sarcocarcinoma
-sarcocarp
-sarcocele
-Sarcococca
-Sarcocolla
-sarcocollin
-sarcocyst
-Sarcocystidea
-sarcocystidean
-sarcocystidian
-Sarcocystis
-sarcocystoid
-sarcocyte
-sarcode
-sarcoderm
-Sarcodes
-sarcodic
-sarcodictyum
-Sarcodina
-sarcodous
-sarcoenchondroma
-sarcogenic
-sarcogenous
-sarcoglia
-Sarcogyps
-sarcoid
-sarcolactic
-sarcolemma
-sarcolemmic
-sarcolemmous
-sarcoline
-sarcolite
-sarcologic
-sarcological
-sarcologist
-sarcology
-sarcolysis
-sarcolyte
-sarcolytic
-sarcoma
-sarcomatoid
-sarcomatosis
-sarcomatous
-sarcomere
-Sarcophaga
-sarcophagal
-sarcophagi
-sarcophagic
-sarcophagid
-Sarcophagidae
-sarcophagine
-sarcophagize
-sarcophagous
-sarcophagus
-sarcophagy
-sarcophile
-sarcophilous
-Sarcophilus
-sarcoplasm
-sarcoplasma
-sarcoplasmatic
-sarcoplasmic
-sarcoplast
-sarcoplastic
-sarcopoietic
-Sarcopsylla
-Sarcopsyllidae
-Sarcoptes
-sarcoptic
-sarcoptid
-Sarcoptidae
-Sarcorhamphus
-sarcosepsis
-sarcosepta
-sarcoseptum
-sarcosine
-sarcosis
-sarcosoma
-sarcosperm
-sarcosporid
-Sarcosporida
-Sarcosporidia
-sarcosporidial
-sarcosporidian
-sarcosporidiosis
-sarcostosis
-sarcostyle
-sarcotheca
-sarcotherapeutics
-sarcotherapy
-sarcotic
-sarcous
-Sarcura
-Sard
-sard
-sardachate
-Sardanapalian
-Sardanapalus
-sardel
-Sardian
-sardine
-sardinewise
-Sardinian
-sardius
-Sardoin
-sardonic
-sardonical
-sardonically
-sardonicism
-sardonyx
-sare
-sargasso
-Sargassum
-sargassum
-sargo
-Sargonic
-Sargonid
-Sargonide
-sargus
-sari
-sarif
-Sarigue
-sarigue
-sarinda
-sarip
-sark
-sarkar
-sarkful
-sarkical
-sarkine
-sarking
-sarkinite
-sarkit
-sarkless
-sarlak
-sarlyk
-Sarmatian
-Sarmatic
-sarmatier
-sarment
-sarmenta
-sarmentaceous
-sarmentiferous
-sarmentose
-sarmentous
-sarmentum
-sarna
-sarod
-saron
-sarong
-saronic
-saronide
-saros
-Sarothamnus
-Sarothra
-sarothrum
-sarpler
-sarpo
-sarra
-Sarracenia
-sarracenia
-Sarraceniaceae
-sarraceniaceous
-sarracenial
-Sarraceniales
-sarraf
-sarrazin
-sarrusophone
-sarrusophonist
-sarsa
-sarsaparilla
-sarsaparillin
-Sarsar
-Sarsechim
-sarsen
-sarsenet
-Sarsi
-Sart
-sart
-sartage
-sartain
-Sartish
-sartor
-sartoriad
-sartorial
-sartorially
-sartorian
-sartorite
-sartorius
-Saruk
-sarus
-Sarvarthasiddha
-sarwan
-Sarzan
-sasa
-sasan
-sasani
-sasanqua
-sash
-sashay
-sashery
-sashing
-sashless
-sasin
-sasine
-saskatoon
-sassaby
-sassafac
-sassafrack
-sassafras
-Sassak
-Sassan
-Sassanian
-Sassanid
-Sassanidae
-Sassanide
-Sassenach
-sassolite
-sassy
-sassywood
-Sastean
-sat
-satable
-Satan
-satan
-Satanael
-Satanas
-satang
-satanic
-satanical
-satanically
-satanicalness
-Satanism
-Satanist
-satanist
-Satanistic
-Satanity
-satanize
-Satanology
-Satanophany
-Satanophil
-Satanophobia
-Satanship
-satara
-satchel
-satcheled
-sate
-sateen
-sateenwood
-sateless
-satelles
-satellitarian
-satellite
-satellited
-satellitesimal
-satellitian
-satellitic
-satellitious
-satellitium
-satellitoid
-satellitory
-satelloid
-satiability
-satiable
-satiableness
-satiably
-satiate
-satiation
-Satieno
-satient
-satiety
-satin
-satinbush
-satine
-satined
-satinette
-satinfin
-satinflower
-satinite
-satinity
-satinize
-satinleaf
-satinlike
-satinpod
-satinwood
-satiny
-satire
-satireproof
-satiric
-satirical
-satirically
-satiricalness
-satirist
-satirizable
-satirize
-satirizer
-satisdation
-satisdiction
-satisfaction
-satisfactional
-satisfactionist
-satisfactionless
-satisfactive
-satisfactorily
-satisfactoriness
-satisfactorious
-satisfactory
-satisfiable
-satisfice
-satisfied
-satisfiedly
-satisfiedness
-satisfier
-satisfy
-satisfying
-satisfyingly
-satisfyingness
-satispassion
-satlijk
-Satrae
-satrap
-satrapal
-satrapess
-satrapic
-satrapical
-satrapy
-satron
-Satsuma
-sattle
-sattva
-satura
-saturability
-saturable
-saturant
-saturate
-saturated
-saturater
-saturation
-saturator
-Saturday
-Satureia
-Saturn
-Saturnal
-Saturnale
-Saturnalia
-saturnalia
-Saturnalian
-saturnalian
-Saturnia
-Saturnian
-saturnian
-Saturnicentric
-saturniid
-Saturniidae
-Saturnine
-saturnine
-saturninely
-saturnineness
-saturninity
-saturnism
-saturnity
-saturnize
-Saturnus
-satyagrahi
-satyashodak
-satyr
-satyresque
-satyress
-satyriasis
-satyric
-Satyridae
-Satyrinae
-satyrine
-satyrion
-satyrism
-satyrlike
-satyromaniac
-sauce
-sauceboat
-saucebox
-saucedish
-sauceless
-sauceline
-saucemaker
-saucemaking
-sauceman
-saucepan
-sauceplate
-saucer
-saucerful
-saucerleaf
-saucerless
-saucerlike
-saucily
-sauciness
-saucy
-Sauerbraten
-sauerkraut
-sauf
-sauger
-saugh
-saughen
-Saul
-sauld
-saulie
-sault
-saulter
-Saulteur
-saum
-saumon
-saumont
-Saumur
-Saumya
-sauna
-saunders
-saunderswood
-saunter
-saunterer
-sauntering
-saunteringly
-sauqui
-saur
-Saura
-Sauraseni
-Saurauia
-Saurauiaceae
-saurel
-Sauria
-saurian
-sauriasis
-sauriosis
-Saurischia
-saurischian
-Sauroctonos
-saurodont
-Saurodontidae
-Saurognathae
-saurognathism
-saurognathous
-Sauromatian
-saurophagous
-sauropod
-Sauropoda
-sauropodous
-sauropsid
-Sauropsida
-sauropsidan
-sauropsidian
-Sauropterygia
-sauropterygian
-Saurornithes
-saurornithic
-Saururaceae
-saururaceous
-Saururae
-saururan
-saururous
-Saururus
-saury
-sausage
-sausagelike
-sausinger
-Saussurea
-saussurite
-saussuritic
-saussuritization
-saussuritize
-saut
-saute
-sauterelle
-sauterne
-sauternes
-sauteur
-sauty
-Sauvagesia
-sauve
-sauvegarde
-savable
-savableness
-savacu
-savage
-savagedom
-savagely
-savageness
-savagerous
-savagery
-savagess
-savagism
-savagize
-savanilla
-savanna
-Savannah
-savant
-Savara
-savarin
-savation
-save
-saved
-saveloy
-saver
-Savery
-savin
-saving
-savingly
-savingness
-savior
-savioress
-saviorhood
-saviorship
-Saviour
-Savitar
-Savitri
-savola
-Savonarolist
-Savonnerie
-savor
-savored
-savorer
-savorily
-savoriness
-savoringly
-savorless
-savorous
-savorsome
-savory
-savour
-savoy
-Savoyard
-savoyed
-savoying
-savssat
-savvy
-saw
-sawah
-Sawaiori
-sawali
-Sawan
-sawarra
-sawback
-sawbelly
-sawbill
-sawbones
-sawbuck
-sawbwa
-sawder
-sawdust
-sawdustish
-sawdustlike
-sawdusty
-sawed
-sawer
-sawfish
-sawfly
-sawhorse
-sawing
-sawish
-sawlike
-sawmaker
-sawmaking
-sawman
-sawmill
-sawmiller
-sawmilling
-sawmon
-sawmont
-sawn
-Sawney
-sawney
-sawsetter
-sawsharper
-sawsmith
-sawt
-sawway
-sawworker
-sawwort
-sawyer
-sax
-saxatile
-saxboard
-saxcornet
-Saxe
-saxhorn
-Saxicava
-saxicavous
-Saxicola
-saxicole
-Saxicolidae
-Saxicolinae
-saxicoline
-saxicolous
-Saxifraga
-Saxifragaceae
-saxifragaceous
-saxifragant
-saxifrage
-saxifragous
-saxifrax
-saxigenous
-Saxish
-Saxon
-Saxondom
-Saxonian
-Saxonic
-Saxonical
-Saxonically
-Saxonish
-Saxonism
-Saxonist
-saxonite
-Saxonization
-Saxonize
-Saxonly
-Saxony
-saxophone
-saxophonist
-saxotromba
-saxpence
-saxten
-saxtie
-saxtuba
-say
-saya
-sayability
-sayable
-sayableness
-Sayal
-sayer
-sayette
-sayid
-saying
-sazen
-Sbaikian
-sblood
-sbodikins
-scab
-scabbard
-scabbardless
-scabbed
-scabbedness
-scabbery
-scabbily
-scabbiness
-scabble
-scabbler
-scabbling
-scabby
-scabellum
-scaberulous
-scabid
-scabies
-scabietic
-scabinus
-Scabiosa
-scabiosity
-scabious
-scabish
-scabland
-scabrate
-scabrescent
-scabrid
-scabridity
-scabridulous
-scabrities
-scabriusculose
-scabriusculous
-scabrosely
-scabrous
-scabrously
-scabrousness
-scabwort
-scacchic
-scacchite
-scad
-scaddle
-scads
-Scaean
-scaff
-scaffer
-scaffery
-scaffie
-scaffle
-scaffold
-scaffoldage
-scaffolder
-scaffolding
-scaglia
-scagliola
-scagliolist
-scala
-scalable
-scalableness
-scalably
-scalage
-scalar
-scalare
-Scalaria
-scalarian
-scalariform
-Scalariidae
-scalarwise
-scalation
-scalawag
-scalawaggery
-scalawaggy
-scald
-scaldberry
-scalded
-scalder
-scaldfish
-scaldic
-scalding
-scaldweed
-scaldy
-scale
-scaleback
-scalebark
-scaleboard
-scaled
-scaledrake
-scalefish
-scaleful
-scaleless
-scalelet
-scalelike
-scaleman
-scalena
-scalene
-scalenohedral
-scalenohedron
-scalenon
-scalenous
-scalenum
-scalenus
-scalepan
-scaleproof
-scaler
-scales
-scalesman
-scalesmith
-scaletail
-scalewing
-scalewise
-scalework
-scalewort
-scaliger
-scaliness
-scaling
-scall
-scalled
-scallion
-scallola
-scallom
-scallop
-scalloper
-scalloping
-scallopwise
-scalma
-scaloni
-Scalops
-Scalopus
-scalp
-scalpeen
-scalpel
-scalpellar
-scalpellic
-scalpellum
-scalpellus
-scalper
-scalping
-scalpless
-scalpriform
-scalprum
-scalpture
-scalt
-scaly
-scalytail
-scam
-scamander
-Scamandrius
-scamble
-scambler
-scambling
-scamell
-scamler
-scamles
-scammoniate
-scammonin
-scammony
-scammonyroot
-scamp
-scampavia
-scamper
-scamperer
-scamphood
-scamping
-scampingly
-scampish
-scampishly
-scampishness
-scampsman
-scan
-scandal
-scandalization
-scandalize
-scandalizer
-scandalmonger
-scandalmongering
-scandalmongery
-scandalmonging
-scandalous
-scandalously
-scandalousness
-scandalproof
-scandaroon
-scandent
-scandia
-Scandian
-scandic
-scandicus
-Scandinavia
-Scandinavian
-Scandinavianism
-scandium
-Scandix
-Scania
-Scanian
-Scanic
-scanmag
-scannable
-scanner
-scanning
-scanningly
-scansion
-scansionist
-Scansores
-scansorial
-scansorious
-scant
-scanties
-scantily
-scantiness
-scantity
-scantle
-scantling
-scantlinged
-scantly
-scantness
-scanty
-scap
-scape
-scapegallows
-scapegoat
-scapegoatism
-scapegrace
-scapel
-scapeless
-scapement
-scapethrift
-scapha
-Scaphander
-Scaphandridae
-scaphion
-Scaphiopodidae
-Scaphiopus
-scaphism
-scaphite
-Scaphites
-Scaphitidae
-scaphitoid
-scaphocephalic
-scaphocephalism
-scaphocephalous
-scaphocephalus
-scaphocephaly
-scaphocerite
-scaphoceritic
-scaphognathite
-scaphognathitic
-scaphoid
-scapholunar
-scaphopod
-Scaphopoda
-scaphopodous
-scapiform
-scapigerous
-scapoid
-scapolite
-scapolitization
-scapose
-scapple
-scappler
-scapula
-scapulalgia
-scapular
-scapulare
-scapulary
-scapulated
-scapulectomy
-scapulet
-scapulimancy
-scapuloaxillary
-scapulobrachial
-scapuloclavicular
-scapulocoracoid
-scapulodynia
-scapulohumeral
-scapulopexy
-scapuloradial
-scapulospinal
-scapulothoracic
-scapuloulnar
-scapulovertebral
-scapus
-scar
-scarab
-scarabaean
-scarabaei
-scarabaeid
-Scarabaeidae
-scarabaeidoid
-scarabaeiform
-Scarabaeinae
-scarabaeoid
-scarabaeus
-scarabee
-scaraboid
-Scaramouch
-scaramouch
-scarce
-scarcelins
-scarcely
-scarcement
-scarcen
-scarceness
-scarcity
-scare
-scarebabe
-scarecrow
-scarecrowish
-scarecrowy
-scareful
-scarehead
-scaremonger
-scaremongering
-scareproof
-scarer
-scaresome
-scarf
-scarface
-scarfed
-scarfer
-scarflike
-scarfpin
-scarfskin
-scarfwise
-scarfy
-scarid
-Scaridae
-scarification
-scarificator
-scarifier
-scarify
-scarily
-scariose
-scarious
-scarlatina
-scarlatinal
-scarlatiniform
-scarlatinoid
-scarlatinous
-scarless
-scarlet
-scarletberry
-scarletseed
-scarlety
-scarman
-scarn
-scaroid
-scarp
-scarpines
-scarping
-scarpment
-scarproof
-scarred
-scarrer
-scarring
-scarry
-scart
-scarth
-Scarus
-scarus
-scarved
-scary
-scase
-scasely
-scat
-scatch
-scathe
-scatheful
-scatheless
-scathelessly
-scathing
-scathingly
-Scaticook
-scatland
-scatologia
-scatologic
-scatological
-scatology
-scatomancy
-scatophagid
-Scatophagidae
-scatophagoid
-scatophagous
-scatophagy
-scatoscopy
-scatter
-scatterable
-scatteration
-scatteraway
-scatterbrain
-scatterbrained
-scatterbrains
-scattered
-scatteredly
-scatteredness
-scatterer
-scattergood
-scattering
-scatteringly
-scatterling
-scattermouch
-scattery
-scatty
-scatula
-scaturient
-scaul
-scaum
-scaup
-scauper
-scaur
-scaurie
-scaut
-scavage
-scavel
-scavenage
-scavenge
-scavenger
-scavengerism
-scavengership
-scavengery
-scavenging
-scaw
-scawd
-scawl
-scazon
-scazontic
-sceat
-scelalgia
-scelerat
-scelidosaur
-scelidosaurian
-scelidosauroid
-Scelidosaurus
-Scelidotherium
-Sceliphron
-sceloncus
-Sceloporus
-scelotyrbe
-scena
-scenario
-scenarioist
-scenarioization
-scenarioize
-scenarist
-scenarization
-scenarize
-scenary
-scend
-scene
-scenecraft
-Scenedesmus
-sceneful
-sceneman
-scenery
-sceneshifter
-scenewright
-scenic
-scenical
-scenically
-scenist
-scenite
-scenograph
-scenographer
-scenographic
-scenographical
-scenographically
-scenography
-Scenopinidae
-scent
-scented
-scenter
-scentful
-scenting
-scentless
-scentlessness
-scentproof
-scentwood
-scepsis
-scepter
-scepterdom
-sceptered
-scepterless
-sceptic
-sceptral
-sceptropherous
-sceptrosophy
-sceptry
-scerne
-sceuophorion
-sceuophylacium
-sceuophylax
-schaapsteker
-Schaefferia
-schairerite
-schalmei
-schalmey
-schalstein
-schanz
-schapbachite
-schappe
-schapped
-schapping
-scharf
-Scharlachberger
-schatchen
-Scheat
-Schedar
-schediasm
-schediastic
-Schedius
-schedular
-schedulate
-schedule
-schedulize
-scheelite
-scheffel
-schefferite
-schelling
-Schellingian
-Schellingianism
-Schellingism
-schelly
-scheltopusik
-schema
-schemata
-schematic
-schematically
-schematism
-schematist
-schematization
-schematize
-schematizer
-schematogram
-schematograph
-schematologetically
-schematomancy
-schematonics
-scheme
-schemeful
-schemeless
-schemer
-schemery
-scheming
-schemingly
-schemist
-schemy
-schene
-schepel
-schepen
-scherm
-scherzando
-scherzi
-scherzo
-schesis
-Scheuchzeria
-Scheuchzeriaceae
-scheuchzeriaceous
-schiavone
-Schiedam
-schiffli
-schiller
-schillerfels
-schillerization
-schillerize
-schilling
-schimmel
-schindylesis
-schindyletic
-Schinus
-schipperke
-Schisandra
-Schisandraceae
-schism
-schisma
-schismatic
-schismatical
-schismatically
-schismaticalness
-schismatism
-schismatist
-schismatize
-schismic
-schismless
-schist
-schistaceous
-schistic
-schistocelia
-schistocephalus
-Schistocerca
-schistocoelia
-schistocormia
-schistocormus
-schistocyte
-schistocytosis
-schistoglossia
-schistoid
-schistomelia
-schistomelus
-schistoprosopia
-schistoprosopus
-schistorrhachis
-schistoscope
-schistose
-schistosity
-Schistosoma
-schistosome
-schistosomia
-schistosomiasis
-schistosomus
-schistosternia
-schistothorax
-schistous
-schistus
-Schizaea
-Schizaeaceae
-schizaeaceous
-Schizanthus
-schizanthus
-schizaxon
-schizocarp
-schizocarpic
-schizocarpous
-schizochroal
-schizocoele
-schizocoelic
-schizocoelous
-schizocyte
-schizocytosis
-schizodinic
-schizogamy
-schizogenesis
-schizogenetic
-schizogenetically
-schizogenic
-schizogenous
-schizogenously
-schizognath
-Schizognathae
-schizognathism
-schizognathous
-schizogonic
-schizogony
-Schizogregarinae
-schizogregarine
-Schizogregarinida
-schizoid
-schizoidism
-Schizolaenaceae
-schizolaenaceous
-schizolite
-schizolysigenous
-Schizomeria
-schizomycete
-Schizomycetes
-schizomycetic
-schizomycetous
-schizomycosis
-Schizonemertea
-schizonemertean
-schizonemertine
-Schizoneura
-Schizonotus
-schizont
-schizopelmous
-Schizopetalon
-schizophasia
-Schizophragma
-schizophrene
-schizophrenia
-schizophreniac
-schizophrenic
-Schizophyceae
-Schizophyllum
-Schizophyta
-schizophyte
-schizophytic
-schizopod
-Schizopoda
-schizopodal
-schizopodous
-schizorhinal
-schizospore
-schizostele
-schizostelic
-schizostely
-schizothecal
-schizothoracic
-schizothyme
-schizothymia
-schizothymic
-schizotrichia
-Schizotrypanum
-schiztic
-Schlauraffenland
-Schleichera
-schlemiel
-schlemihl
-schlenter
-schlieren
-schlieric
-schloop
-Schmalkaldic
-schmaltz
-schmelz
-schmelze
-schnabel
-Schnabelkanne
-schnapper
-schnapps
-schnauzer
-schneider
-Schneiderian
-schnitzel
-schnorchel
-schnorkel
-schnorrer
-scho
-schochat
-schochet
-schoenobatic
-schoenobatist
-Schoenocaulon
-Schoenus
-schoenus
-Schoharie
-schola
-scholae
-scholaptitude
-scholar
-scholarch
-scholardom
-scholarian
-scholarism
-scholarless
-scholarlike
-scholarliness
-scholarly
-scholarship
-scholasm
-scholastic
-scholastical
-scholastically
-scholasticate
-scholasticism
-scholasticly
-scholia
-scholiast
-scholiastic
-scholion
-scholium
-Schomburgkia
-schone
-schonfelsite
-Schoodic
-School
-school
-schoolable
-schoolbag
-schoolbook
-schoolbookish
-schoolboy
-schoolboydom
-schoolboyhood
-schoolboyish
-schoolboyishly
-schoolboyishness
-schoolboyism
-schoolbutter
-schoolcraft
-schooldame
-schooldom
-schooled
-schoolery
-schoolfellow
-schoolfellowship
-schoolful
-schoolgirl
-schoolgirlhood
-schoolgirlish
-schoolgirlishly
-schoolgirlishness
-schoolgirlism
-schoolgirly
-schoolgoing
-schoolhouse
-schooling
-schoolingly
-schoolish
-schoolkeeper
-schoolkeeping
-schoolless
-schoollike
-schoolmaam
-schoolmaamish
-schoolmaid
-schoolman
-schoolmaster
-schoolmasterhood
-schoolmastering
-schoolmasterish
-schoolmasterishly
-schoolmasterishness
-schoolmasterism
-schoolmasterly
-schoolmastership
-schoolmastery
-schoolmate
-schoolmiss
-schoolmistress
-schoolmistressy
-schoolroom
-schoolteacher
-schoolteacherish
-schoolteacherly
-schoolteachery
-schoolteaching
-schooltide
-schooltime
-schoolward
-schoolwork
-schoolyard
-schoon
-schooner
-Schopenhauereanism
-Schopenhauerian
-Schopenhauerism
-schoppen
-schorenbergite
-schorl
-schorlaceous
-schorlomite
-schorlous
-schorly
-schottische
-schottish
-schout
-schraubthaler
-Schrebera
-schreiner
-schreinerize
-schriesheimite
-Schrund
-schtoff
-schuh
-schuhe
-schuit
-schule
-schultenite
-schungite
-schuss
-schute
-schwa
-schwabacher
-Schwalbea
-schwarz
-Schwarzian
-schweizer
-schweizerkase
-Schwendenerian
-Schwenkfelder
-Schwenkfeldian
-Sciadopitys
-Sciaena
-sciaenid
-Sciaenidae
-sciaeniform
-Sciaeniformes
-sciaenoid
-scialytic
-sciamachy
-Scian
-sciapod
-sciapodous
-Sciara
-sciarid
-Sciaridae
-Sciarinae
-sciatheric
-sciatherical
-sciatherically
-sciatic
-sciatica
-sciatical
-sciatically
-sciaticky
-scibile
-science
-scienced
-scient
-sciential
-scientician
-scientific
-scientifical
-scientifically
-scientificalness
-scientificogeographical
-scientificohistorical
-scientificophilosophical
-scientificopoetic
-scientificoreligious
-scientificoromantic
-scientintically
-scientism
-Scientist
-scientist
-scientistic
-scientistically
-scientize
-scientolism
-scilicet
-Scilla
-scillain
-scillipicrin
-Scillitan
-scillitin
-scillitoxin
-Scillonian
-scimitar
-scimitared
-scimitarpod
-scincid
-Scincidae
-scincidoid
-scinciform
-scincoid
-scincoidian
-Scincomorpha
-Scincus
-scind
-sciniph
-scintilla
-scintillant
-scintillantly
-scintillate
-scintillating
-scintillatingly
-scintillation
-scintillator
-scintillescent
-scintillize
-scintillometer
-scintilloscope
-scintillose
-scintillously
-scintle
-scintler
-scintling
-sciograph
-sciographic
-sciography
-sciolism
-sciolist
-sciolistic
-sciolous
-sciomachiology
-sciomachy
-sciomancy
-sciomantic
-scion
-sciophilous
-sciophyte
-scioptic
-sciopticon
-scioptics
-scioptric
-sciosophist
-sciosophy
-Sciot
-scioterical
-scioterique
-sciotheism
-sciotheric
-sciotherical
-sciotherically
-scious
-scirenga
-Scirophoria
-Scirophorion
-Scirpus
-scirrhi
-scirrhogastria
-scirrhoid
-scirrhoma
-scirrhosis
-scirrhous
-scirrhus
-scirrosity
-scirtopod
-Scirtopoda
-scirtopodous
-scissel
-scissible
-scissile
-scission
-scissiparity
-scissor
-scissorbill
-scissorbird
-scissorer
-scissoring
-scissorium
-scissorlike
-scissorlikeness
-scissors
-scissorsbird
-scissorsmith
-scissorstail
-scissortail
-scissorwise
-scissura
-scissure
-Scissurella
-scissurellid
-Scissurellidae
-Scitaminales
-Scitamineae
-sciurid
-Sciuridae
-sciurine
-sciuroid
-sciuromorph
-Sciuromorpha
-sciuromorphic
-Sciuropterus
-Sciurus
-sclaff
-sclate
-sclater
-Sclav
-Sclavonian
-sclaw
-scler
-sclera
-scleral
-scleranth
-Scleranthaceae
-Scleranthus
-scleratogenous
-sclere
-sclerectasia
-sclerectomy
-scleredema
-sclereid
-sclerema
-sclerencephalia
-sclerenchyma
-sclerenchymatous
-sclerenchyme
-sclererythrin
-scleretinite
-Scleria
-scleriasis
-sclerification
-sclerify
-sclerite
-scleritic
-scleritis
-sclerized
-sclerobase
-sclerobasic
-scleroblast
-scleroblastema
-scleroblastemic
-scleroblastic
-sclerocauly
-sclerochorioiditis
-sclerochoroiditis
-scleroconjunctival
-scleroconjunctivitis
-sclerocornea
-sclerocorneal
-sclerodactylia
-sclerodactyly
-scleroderm
-Scleroderma
-scleroderma
-Sclerodermaceae
-Sclerodermata
-Sclerodermatales
-sclerodermatitis
-sclerodermatous
-Sclerodermi
-sclerodermia
-sclerodermic
-sclerodermite
-sclerodermitic
-sclerodermitis
-sclerodermous
-sclerogen
-Sclerogeni
-sclerogenoid
-sclerogenous
-scleroid
-scleroiritis
-sclerokeratitis
-sclerokeratoiritis
-scleroma
-scleromata
-scleromeninx
-scleromere
-sclerometer
-sclerometric
-scleronychia
-scleronyxis
-Scleropages
-Scleroparei
-sclerophthalmia
-sclerophyll
-sclerophyllous
-sclerophylly
-scleroprotein
-sclerosal
-sclerosarcoma
-Scleroscope
-scleroscope
-sclerose
-sclerosed
-scleroseptum
-sclerosis
-scleroskeletal
-scleroskeleton
-Sclerospora
-sclerostenosis
-Sclerostoma
-sclerostomiasis
-sclerotal
-sclerote
-sclerotia
-sclerotial
-sclerotic
-sclerotica
-sclerotical
-scleroticectomy
-scleroticochorioiditis
-scleroticochoroiditis
-scleroticonyxis
-scleroticotomy
-Sclerotinia
-sclerotinial
-sclerotiniose
-sclerotioid
-sclerotitic
-sclerotitis
-sclerotium
-sclerotized
-sclerotoid
-sclerotome
-sclerotomic
-sclerotomy
-sclerous
-scleroxanthin
-sclerozone
-scliff
-sclim
-sclimb
-scoad
-scob
-scobby
-scobicular
-scobiform
-scobs
-scoff
-scoffer
-scoffery
-scoffing
-scoffingly
-scoffingstock
-scofflaw
-scog
-scoggan
-scogger
-scoggin
-scogginism
-scogginist
-scoinson
-scoke
-scolb
-scold
-scoldable
-scoldenore
-scolder
-scolding
-scoldingly
-scoleces
-scoleciasis
-scolecid
-Scolecida
-scoleciform
-scolecite
-scolecoid
-scolecology
-scolecophagous
-scolecospore
-scoleryng
-scolex
-Scolia
-scolia
-scolices
-scoliid
-Scoliidae
-scoliograptic
-scoliokyposis
-scoliometer
-scolion
-scoliorachitic
-scoliosis
-scoliotic
-scoliotone
-scolite
-scollop
-scolog
-scolopaceous
-Scolopacidae
-scolopacine
-Scolopax
-Scolopendra
-scolopendra
-Scolopendrella
-Scolopendrellidae
-scolopendrelloid
-scolopendrid
-Scolopendridae
-scolopendriform
-scolopendrine
-Scolopendrium
-scolopendroid
-scolophore
-scolopophore
-Scolymus
-scolytid
-Scolytidae
-scolytoid
-Scolytus
-Scomber
-scomberoid
-Scombresocidae
-Scombresox
-scombrid
-Scombridae
-scombriform
-Scombriformes
-scombrine
-scombroid
-Scombroidea
-scombroidean
-scombrone
-sconce
-sconcer
-sconcheon
-sconcible
-scone
-scoon
-scoop
-scooped
-scooper
-scoopful
-scooping
-scoopingly
-scoot
-scooter
-scopa
-scoparin
-scoparius
-scopate
-scope
-scopeless
-scopelid
-Scopelidae
-scopeliform
-scopelism
-scopeloid
-Scopelus
-scopet
-scopic
-Scopidae
-scopiferous
-scopiform
-scopiformly
-scopine
-scopiped
-scopola
-scopolamine
-scopoleine
-scopoletin
-scopoline
-scopperil
-scops
-scoptical
-scoptically
-scoptophilia
-scoptophiliac
-scoptophilic
-scoptophobia
-scopula
-Scopularia
-scopularian
-scopulate
-scopuliferous
-scopuliform
-scopuliped
-Scopulipedes
-scopulite
-scopulous
-scopulousness
-Scopus
-scorbute
-scorbutic
-scorbutical
-scorbutically
-scorbutize
-scorbutus
-scorch
-scorched
-scorcher
-scorching
-scorchingly
-scorchingness
-scorchproof
-score
-scoreboard
-scorebook
-scored
-scorekeeper
-scorekeeping
-scoreless
-scorer
-scoria
-scoriac
-scoriaceous
-scoriae
-scorification
-scorifier
-scoriform
-scorify
-scoring
-scorious
-scorn
-scorned
-scorner
-scornful
-scornfully
-scornfulness
-scorningly
-scornproof
-scorny
-scorodite
-Scorpaena
-scorpaenid
-Scorpaenidae
-scorpaenoid
-scorpene
-scorper
-Scorpidae
-Scorpididae
-Scorpii
-Scorpiid
-Scorpio
-scorpioid
-scorpioidal
-Scorpioidea
-scorpion
-Scorpiones
-scorpionic
-scorpionid
-Scorpionida
-Scorpionidea
-Scorpionis
-scorpionweed
-scorpionwort
-Scorpiurus
-Scorpius
-scorse
-scortation
-scortatory
-Scorzonera
-Scot
-scot
-scotale
-Scotch
-scotch
-scotcher
-Scotchery
-Scotchification
-Scotchify
-Scotchiness
-scotching
-Scotchman
-scotchman
-Scotchness
-Scotchwoman
-Scotchy
-scote
-scoter
-scoterythrous
-Scotia
-scotia
-Scotic
-scotino
-Scotism
-Scotist
-Scotistic
-Scotistical
-Scotize
-Scotlandwards
-scotodinia
-scotogram
-scotograph
-scotographic
-scotography
-scotoma
-scotomata
-scotomatic
-scotomatical
-scotomatous
-scotomia
-scotomic
-scotomy
-scotophobia
-scotopia
-scotopic
-scotoscope
-scotosis
-Scots
-Scotsman
-Scotswoman
-Scott
-Scotticism
-Scotticize
-Scottie
-Scottification
-Scottify
-Scottish
-Scottisher
-Scottishly
-Scottishman
-Scottishness
-Scotty
-scouch
-scouk
-scoundrel
-scoundreldom
-scoundrelish
-scoundrelism
-scoundrelly
-scoundrelship
-scoup
-scour
-scourage
-scoured
-scourer
-scouress
-scourfish
-scourge
-scourger
-scourging
-scourgingly
-scouriness
-scouring
-scourings
-scourway
-scourweed
-scourwort
-scoury
-scouse
-scout
-scoutcraft
-scoutdom
-scouter
-scouth
-scouther
-scouthood
-scouting
-scoutingly
-scoutish
-scoutmaster
-scoutwatch
-scove
-scovel
-scovillite
-scovy
-scow
-scowbank
-scowbanker
-scowder
-scowl
-scowler
-scowlful
-scowling
-scowlingly
-scowlproof
-scowman
-scrab
-scrabble
-scrabbled
-scrabbler
-scrabe
-scrae
-scraffle
-scrag
-scragged
-scraggedly
-scraggedness
-scragger
-scraggily
-scragginess
-scragging
-scraggled
-scraggling
-scraggly
-scraggy
-scraily
-scram
-scramasax
-scramble
-scramblement
-scrambler
-scrambling
-scramblingly
-scrambly
-scrampum
-scran
-scranch
-scrank
-scranky
-scrannel
-scranning
-scranny
-scrap
-scrapable
-scrapbook
-scrape
-scrapeage
-scraped
-scrapepenny
-scraper
-scrapie
-scraping
-scrapingly
-scrapler
-scraplet
-scrapling
-scrapman
-scrapmonger
-scrappage
-scrapped
-scrapper
-scrappet
-scrappily
-scrappiness
-scrapping
-scrappingly
-scrapple
-scrappler
-scrappy
-scrapworks
-scrapy
-scrat
-scratch
-scratchable
-scratchably
-scratchback
-scratchboard
-scratchbrush
-scratchcard
-scratchcarding
-scratchcat
-scratcher
-scratches
-scratchification
-scratchiness
-scratching
-scratchingly
-scratchless
-scratchlike
-scratchman
-scratchproof
-scratchweed
-scratchwork
-scratchy
-scrath
-scratter
-scrattle
-scrattling
-scrauch
-scrauchle
-scraunch
-scraw
-scrawk
-scrawl
-scrawler
-scrawliness
-scrawly
-scrawm
-scrawnily
-scrawniness
-scrawny
-scray
-scraze
-screak
-screaking
-screaky
-scream
-screamer
-screaminess
-screaming
-screamingly
-screamproof
-screamy
-scree
-screech
-screechbird
-screecher
-screechily
-screechiness
-screeching
-screechingly
-screechy
-screed
-screek
-screel
-screeman
-screen
-screenable
-screenage
-screencraft
-screendom
-screened
-screener
-screening
-screenless
-screenlike
-screenman
-screenplay
-screensman
-screenwise
-screenwork
-screenwriter
-screeny
-screet
-screeve
-screeved
-screever
-screich
-screigh
-screve
-screver
-screw
-screwable
-screwage
-screwball
-screwbarrel
-screwdrive
-screwdriver
-screwed
-screwer
-screwhead
-screwiness
-screwing
-screwish
-screwless
-screwlike
-screwman
-screwmatics
-screwship
-screwsman
-screwstem
-screwstock
-screwwise
-screwworm
-screwy
-scribable
-scribacious
-scribaciousness
-scribal
-scribatious
-scribatiousness
-scribblage
-scribblative
-scribblatory
-scribble
-scribbleable
-scribbled
-scribbledom
-scribbleism
-scribblemania
-scribblement
-scribbleomania
-scribbler
-scribbling
-scribblingly
-scribbly
-scribe
-scriber
-scribeship
-scribing
-scribism
-scribophilous
-scride
-scrieve
-scriever
-scriggle
-scriggler
-scriggly
-scrike
-scrim
-scrime
-scrimer
-scrimmage
-scrimmager
-scrimp
-scrimped
-scrimpily
-scrimpiness
-scrimpingly
-scrimply
-scrimpness
-scrimption
-scrimpy
-scrimshander
-scrimshandy
-scrimshank
-scrimshanker
-scrimshaw
-scrimshon
-scrimshorn
-scrin
-scrinch
-scrine
-scringe
-scriniary
-scrip
-scripee
-scripless
-scrippage
-script
-scription
-scriptitious
-scriptitiously
-scriptitory
-scriptive
-scriptor
-scriptorial
-scriptorium
-scriptory
-scriptural
-Scripturalism
-scripturalism
-Scripturalist
-scripturalist
-Scripturality
-scripturality
-scripturalize
-scripturally
-scripturalness
-Scripturarian
-Scripture
-scripture
-Scriptured
-scriptured
-Scriptureless
-scripturiency
-scripturient
-Scripturism
-scripturism
-Scripturist
-scripula
-scripulum
-scritch
-scritoire
-scrivaille
-scrive
-scrivello
-scriven
-scrivener
-scrivenership
-scrivenery
-scrivening
-scrivenly
-scriver
-scrob
-scrobble
-scrobe
-scrobicula
-scrobicular
-scrobiculate
-scrobiculated
-scrobicule
-scrobiculus
-scrobis
-scrod
-scrodgill
-scroff
-scrofula
-scrofularoot
-scrofulaweed
-scrofulide
-scrofulism
-scrofulitic
-scrofuloderm
-scrofuloderma
-scrofulorachitic
-scrofulosis
-scrofulotuberculous
-scrofulous
-scrofulously
-scrofulousness
-scrog
-scroggy
-scrolar
-scroll
-scrolled
-scrollery
-scrollhead
-scrollwise
-scrollwork
-scrolly
-scronach
-scroo
-scrooch
-scrooge
-scroop
-Scrophularia
-Scrophulariaceae
-scrophulariaceous
-scrota
-scrotal
-scrotectomy
-scrotiform
-scrotitis
-scrotocele
-scrotofemoral
-scrotum
-scrouge
-scrouger
-scrounge
-scrounger
-scrounging
-scrout
-scrow
-scroyle
-scrub
-scrubbable
-scrubbed
-scrubber
-scrubbery
-scrubbily
-scrubbiness
-scrubbird
-scrubbly
-scrubboard
-scrubby
-scrubgrass
-scrubland
-scrubwood
-scruf
-scruff
-scruffle
-scruffman
-scruffy
-scruft
-scrum
-scrummage
-scrummager
-scrump
-scrumple
-scrumption
-scrumptious
-scrumptiously
-scrumptiousness
-scrunch
-scrunchy
-scrunge
-scrunger
-scrunt
-scruple
-scrupleless
-scrupler
-scruplesome
-scruplesomeness
-scrupula
-scrupular
-scrupuli
-scrupulist
-scrupulosity
-scrupulous
-scrupulously
-scrupulousness
-scrupulum
-scrupulus
-scrush
-scrutability
-scrutable
-scrutate
-scrutation
-scrutator
-scrutatory
-scrutinant
-scrutinate
-scrutineer
-scrutinization
-scrutinize
-scrutinizer
-scrutinizingly
-scrutinous
-scrutinously
-scrutiny
-scruto
-scrutoire
-scruze
-scry
-scryer
-scud
-scuddaler
-scuddawn
-scudder
-scuddick
-scuddle
-scuddy
-scudi
-scudler
-scudo
-scuff
-scuffed
-scuffer
-scuffle
-scuffler
-scufflingly
-scuffly
-scuffy
-scuft
-scufter
-scug
-scuggery
-sculch
-sculduddery
-scull
-sculler
-scullery
-scullful
-scullion
-scullionish
-scullionize
-scullionship
-scullog
-sculp
-sculper
-sculpin
-sculpt
-sculptile
-sculptitory
-sculptograph
-sculptography
-Sculptor
-sculptor
-Sculptorid
-sculptress
-sculptural
-sculpturally
-sculpturation
-sculpture
-sculptured
-sculpturer
-sculpturesque
-sculpturesquely
-sculpturesqueness
-sculpturing
-sculsh
-scum
-scumber
-scumble
-scumbling
-scumboard
-scumfish
-scumless
-scumlike
-scummed
-scummer
-scumming
-scummy
-scumproof
-scun
-scuncheon
-scunder
-scunner
-scup
-scupful
-scuppaug
-scupper
-scuppernong
-scuppet
-scuppler
-scur
-scurdy
-scurf
-scurfer
-scurfily
-scurfiness
-scurflike
-scurfy
-scurrier
-scurrile
-scurrilist
-scurrility
-scurrilize
-scurrilous
-scurrilously
-scurrilousness
-scurry
-scurvied
-scurvily
-scurviness
-scurvish
-scurvy
-scurvyweed
-scusation
-scuse
-scut
-scuta
-scutage
-scutal
-scutate
-scutated
-scutatiform
-scutation
-scutch
-scutcheon
-scutcheoned
-scutcheonless
-scutcheonlike
-scutcheonwise
-scutcher
-scutching
-scute
-scutel
-scutella
-scutellae
-scutellar
-Scutellaria
-scutellarin
-scutellate
-scutellated
-scutellation
-scutellerid
-Scutelleridae
-scutelliform
-scutelligerous
-scutelliplantar
-scutelliplantation
-scutellum
-scutibranch
-Scutibranchia
-scutibranchian
-scutibranchiate
-scutifer
-scutiferous
-scutiform
-scutiger
-Scutigera
-scutigeral
-Scutigeridae
-scutigerous
-scutiped
-scutter
-scuttle
-scuttlebutt
-scuttleful
-scuttleman
-scuttler
-scuttling
-scuttock
-scutty
-scutula
-scutular
-scutulate
-scutulated
-scutulum
-Scutum
-scutum
-scybala
-scybalous
-scybalum
-scye
-scyelite
-Scyld
-Scylla
-Scyllaea
-Scyllaeidae
-scyllarian
-Scyllaridae
-scyllaroid
-Scyllarus
-Scyllidae
-Scylliidae
-scyllioid
-Scylliorhinidae
-scylliorhinoid
-Scylliorhinus
-scyllite
-scyllitol
-Scyllium
-scypha
-scyphae
-scyphate
-scyphi
-scyphiferous
-scyphiform
-scyphiphorous
-scyphistoma
-scyphistomae
-scyphistomoid
-scyphistomous
-scyphoi
-scyphomancy
-Scyphomedusae
-scyphomedusan
-scyphomedusoid
-scyphophore
-Scyphophori
-scyphophorous
-scyphopolyp
-scyphose
-scyphostoma
-Scyphozoa
-scyphozoan
-scyphula
-scyphulus
-scyphus
-scyt
-scytale
-Scyth
-scythe
-scytheless
-scythelike
-scytheman
-scythesmith
-scythestone
-scythework
-Scythian
-Scythic
-Scythize
-scytitis
-scytoblastema
-scytodepsic
-Scytonema
-Scytonemataceae
-scytonemataceous
-scytonematoid
-scytonematous
-Scytopetalaceae
-scytopetalaceous
-Scytopetalum
-sdeath
-sdrucciola
-se
-sea
-seabeach
-seabeard
-Seabee
-seaberry
-seaboard
-seaborderer
-seabound
-seacannie
-seacatch
-seacoast
-seaconny
-seacraft
-seacrafty
-seacunny
-seadog
-seadrome
-seafardinger
-seafare
-seafarer
-seafaring
-seaflood
-seaflower
-seafolk
-Seaforthia
-seafowl
-Seaghan
-seagirt
-seagoer
-seagoing
-seah
-seahound
-seak
-seal
-sealable
-sealant
-sealch
-sealed
-sealer
-sealery
-sealess
-sealet
-sealette
-sealflower
-sealike
-sealine
-sealing
-sealless
-seallike
-sealskin
-sealwort
-Sealyham
-seam
-seaman
-seamancraft
-seamanite
-seamanlike
-seamanly
-seamanship
-seamark
-Seamas
-seambiter
-seamed
-seamer
-seaminess
-seaming
-seamless
-seamlessly
-seamlessness
-seamlet
-seamlike
-seamost
-seamrend
-seamrog
-seamster
-seamstress
-Seamus
-seamy
-Sean
-seance
-seapiece
-seaplane
-seaport
-seaquake
-sear
-searce
-searcer
-search
-searchable
-searchableness
-searchant
-searcher
-searcheress
-searcherlike
-searchership
-searchful
-searching
-searchingly
-searchingness
-searchless
-searchlight
-searchment
-searcloth
-seared
-searedness
-searer
-searing
-searlesite
-searness
-seary
-Seasan
-seascape
-seascapist
-seascout
-seascouting
-seashine
-seashore
-seasick
-seasickness
-seaside
-seasider
-season
-seasonable
-seasonableness
-seasonably
-seasonal
-seasonality
-seasonally
-seasonalness
-seasoned
-seasonedly
-seasoner
-seasoning
-seasoninglike
-seasonless
-seastrand
-seastroke
-seat
-seatang
-seated
-seater
-seathe
-seating
-seatless
-seatrain
-seatron
-seatsman
-seatwork
-seave
-seavy
-seawant
-seaward
-seawardly
-seaware
-seaway
-seaweed
-seaweedy
-seawife
-seawoman
-seaworn
-seaworthiness
-seaworthy
-seax
-Seba
-sebacate
-sebaceous
-sebacic
-sebait
-Sebastian
-sebastianite
-Sebastichthys
-Sebastodes
-sebate
-sebesten
-sebiferous
-sebific
-sebilla
-sebiparous
-sebkha
-sebolith
-seborrhagia
-seborrhea
-seborrheal
-seborrheic
-seborrhoic
-Sebright
-sebum
-sebundy
-sec
-secability
-secable
-Secale
-secalin
-secaline
-secalose
-Secamone
-secancy
-secant
-secantly
-secateur
-secede
-Seceder
-seceder
-secern
-secernent
-secernment
-secesh
-secesher
-Secessia
-Secession
-secession
-Secessional
-secessional
-secessionalist
-Secessiondom
-secessioner
-secessionism
-secessionist
-sech
-Sechium
-Sechuana
-seck
-Seckel
-seclude
-secluded
-secludedly
-secludedness
-secluding
-secluse
-seclusion
-seclusionist
-seclusive
-seclusively
-seclusiveness
-secodont
-secohm
-secohmmeter
-second
-secondar
-secondarily
-secondariness
-secondary
-seconde
-seconder
-secondhand
-secondhanded
-secondhandedly
-secondhandedness
-secondly
-secondment
-secondness
-secos
-secpar
-secque
-secre
-secrecy
-secret
-secreta
-secretage
-secretagogue
-secretarial
-secretarian
-Secretariat
-secretariat
-secretariate
-secretary
-secretaryship
-secrete
-secretin
-secretion
-secretional
-secretionary
-secretitious
-secretive
-secretively
-secretiveness
-secretly
-secretmonger
-secretness
-secreto
-secretomotor
-secretor
-secretory
-secretum
-sect
-sectarial
-sectarian
-sectarianism
-sectarianize
-sectarianly
-sectarism
-sectarist
-sectary
-sectator
-sectile
-sectility
-section
-sectional
-sectionalism
-sectionalist
-sectionality
-sectionalization
-sectionalize
-sectionally
-sectionary
-sectionist
-sectionize
-sectioplanography
-sectism
-sectist
-sectiuncle
-sective
-sector
-sectoral
-sectored
-sectorial
-sectroid
-sectwise
-secular
-secularism
-secularist
-secularistic
-secularity
-secularization
-secularize
-secularizer
-secularly
-secularness
-secund
-secundate
-secundation
-secundiflorous
-secundigravida
-secundine
-secundipara
-secundiparity
-secundiparous
-secundly
-secundogeniture
-secundoprimary
-secundus
-securable
-securance
-secure
-securely
-securement
-secureness
-securer
-securicornate
-securifer
-Securifera
-securiferous
-securiform
-Securigera
-securigerous
-securitan
-security
-Sedaceae
-Sedan
-sedan
-Sedang
-sedanier
-Sedat
-sedate
-sedately
-sedateness
-sedation
-sedative
-sedent
-Sedentaria
-sedentarily
-sedentariness
-sedentary
-sedentation
-Seder
-sederunt
-sedge
-sedged
-sedgelike
-sedging
-sedgy
-sedigitate
-sedigitated
-sedile
-sedilia
-sediment
-sedimental
-sedimentarily
-sedimentary
-sedimentate
-sedimentation
-sedimentous
-sedimetric
-sedimetrical
-sedition
-seditionary
-seditionist
-seditious
-seditiously
-seditiousness
-sedjadeh
-Sedovic
-seduce
-seduceable
-seducee
-seducement
-seducer
-seducible
-seducing
-seducingly
-seducive
-seduct
-seduction
-seductionist
-seductive
-seductively
-seductiveness
-seductress
-sedulity
-sedulous
-sedulously
-sedulousness
-Sedum
-sedum
-see
-seeable
-seeableness
-Seebeck
-seecatch
-seech
-seed
-seedage
-seedbed
-seedbird
-seedbox
-seedcake
-seedcase
-seedeater
-seeded
-Seeder
-seeder
-seedful
-seedgall
-seedily
-seediness
-seedkin
-seedless
-seedlessness
-seedlet
-seedlike
-seedling
-seedlip
-seedman
-seedness
-seedsman
-seedstalk
-seedtime
-seedy
-seege
-seeing
-seeingly
-seeingness
-seek
-seeker
-Seekerism
-seeking
-seel
-seelful
-seely
-seem
-seemable
-seemably
-seemer
-seeming
-seemingly
-seemingness
-seemless
-seemlihead
-seemlily
-seemliness
-seemly
-seen
-seenie
-Seenu
-seep
-seepage
-seeped
-seepweed
-seepy
-seer
-seerband
-seercraft
-seeress
-seerfish
-seerhand
-seerhood
-seerlike
-seerpaw
-seership
-seersucker
-seesaw
-seesawiness
-seesee
-seethe
-seething
-seethingly
-seetulputty
-Sefekhet
-seg
-seggar
-seggard
-segged
-seggrom
-Seginus
-segment
-segmental
-segmentally
-segmentary
-segmentate
-segmentation
-segmented
-sego
-segol
-segolate
-segreant
-segregable
-segregant
-segregate
-segregateness
-segregation
-segregational
-segregationist
-segregative
-segregator
-Sehyo
-seiche
-Seid
-Seidel
-seidel
-Seidlitz
-seigneur
-seigneurage
-seigneuress
-seigneurial
-seigneury
-seignior
-seigniorage
-seignioral
-seignioralty
-seigniorial
-seigniority
-seigniorship
-seigniory
-seignorage
-seignoral
-seignorial
-seignorize
-seignory
-seilenoi
-seilenos
-seine
-seiner
-seirospore
-seirosporic
-seise
-seism
-seismal
-seismatical
-seismetic
-seismic
-seismically
-seismicity
-seismism
-seismochronograph
-seismogram
-seismograph
-seismographer
-seismographic
-seismographical
-seismography
-seismologic
-seismological
-seismologically
-seismologist
-seismologue
-seismology
-seismometer
-seismometric
-seismometrical
-seismometrograph
-seismometry
-seismomicrophone
-seismoscope
-seismoscopic
-seismotectonic
-seismotherapy
-seismotic
-seit
-seity
-Seiurus
-Seiyuhonto
-Seiyukai
-seizable
-seize
-seizer
-seizin
-seizing
-seizor
-seizure
-sejant
-sejoin
-sejoined
-sejugate
-sejugous
-sejunct
-sejunctive
-sejunctively
-sejunctly
-Sekane
-Sekani
-Sekar
-Seker
-Sekhwan
-sekos
-selachian
-Selachii
-selachoid
-Selachoidei
-Selachostome
-Selachostomi
-selachostomous
-seladang
-Selaginaceae
-Selaginella
-Selaginellaceae
-selaginellaceous
-selagite
-Selago
-selah
-selamin
-selamlik
-selbergite
-Selbornian
-seldom
-seldomcy
-seldomer
-seldomly
-seldomness
-seldor
-seldseen
-sele
-select
-selectable
-selected
-selectedly
-selectee
-selection
-selectionism
-selectionist
-selective
-selectively
-selectiveness
-selectivity
-selectly
-selectman
-selectness
-selector
-Selena
-selenate
-Selene
-selenian
-seleniate
-selenic
-Selenicereus
-selenide
-Selenidera
-seleniferous
-selenigenous
-selenion
-selenious
-Selenipedium
-selenite
-selenitic
-selenitical
-selenitiferous
-selenitish
-selenium
-seleniuret
-selenobismuthite
-selenocentric
-selenodont
-Selenodonta
-selenodonty
-selenograph
-selenographer
-selenographic
-selenographical
-selenographically
-selenographist
-selenography
-selenolatry
-selenological
-selenologist
-selenology
-selenomancy
-selenoscope
-selenosis
-selenotropic
-selenotropism
-selenotropy
-selensilver
-selensulphur
-Seleucian
-Seleucid
-Seleucidae
-Seleucidan
-Seleucidean
-Seleucidian
-Seleucidic
-self
-selfcide
-selfdom
-selfful
-selffulness
-selfheal
-selfhood
-selfish
-selfishly
-selfishness
-selfism
-selfist
-selfless
-selflessly
-selflessness
-selfly
-selfness
-selfpreservatory
-selfsame
-selfsameness
-selfward
-selfwards
-selictar
-seligmannite
-selihoth
-Selina
-Selinuntine
-selion
-Seljuk
-Seljukian
-sell
-sella
-sellable
-sellably
-sellaite
-sellar
-sellate
-sellenders
-seller
-Selli
-sellie
-selliform
-selling
-sellout
-selly
-selsoviet
-selsyn
-selt
-Selter
-Seltzer
-seltzogene
-Selung
-selva
-selvage
-selvaged
-selvagee
-selvedge
-selzogene
-Semaeostomae
-Semaeostomata
-Semang
-semanteme
-semantic
-semantical
-semantically
-semantician
-semanticist
-semantics
-semantological
-semantology
-semantron
-semaphore
-semaphoric
-semaphorical
-semaphorically
-semaphorist
-semarum
-semasiological
-semasiologically
-semasiologist
-semasiology
-semateme
-sematic
-sematographic
-sematography
-sematology
-sematrope
-semball
-semblable
-semblably
-semblance
-semblant
-semblative
-semble
-seme
-Semecarpus
-semeed
-semeia
-semeiography
-semeiologic
-semeiological
-semeiologist
-semeiology
-semeion
-semeiotic
-semeiotical
-semeiotics
-semelfactive
-semelincident
-semen
-semence
-Semeostoma
-semese
-semester
-semestral
-semestrial
-semi
-semiabstracted
-semiaccomplishment
-semiacid
-semiacidified
-semiacquaintance
-semiadherent
-semiadjectively
-semiadnate
-semiaerial
-semiaffectionate
-semiagricultural
-Semiahmoo
-semialbinism
-semialcoholic
-semialien
-semiallegiance
-semialpine
-semialuminous
-semiamplexicaul
-semiamplitude
-semianarchist
-semianatomical
-semianatropal
-semianatropous
-semiangle
-semiangular
-semianimal
-semianimate
-semianimated
-semiannealed
-semiannual
-semiannually
-semiannular
-semianthracite
-semiantiministerial
-semiantique
-semiape
-semiaperiodic
-semiaperture
-semiappressed
-semiaquatic
-semiarborescent
-semiarc
-semiarch
-semiarchitectural
-semiarid
-semiaridity
-semiarticulate
-semiasphaltic
-semiatheist
-semiattached
-semiautomatic
-semiautomatically
-semiautonomous
-semiaxis
-semibacchanalian
-semibachelor
-semibald
-semibalked
-semiball
-semiballoon
-semiband
-semibarbarian
-semibarbarianism
-semibarbaric
-semibarbarism
-semibarbarous
-semibaronial
-semibarren
-semibase
-semibasement
-semibastion
-semibay
-semibeam
-semibejan
-semibelted
-semibifid
-semibituminous
-semibleached
-semiblind
-semiblunt
-semibody
-semiboiled
-semibolshevist
-semibolshevized
-semibouffant
-semibourgeois
-semibreve
-semibull
-semiburrowing
-semic
-semicadence
-semicalcareous
-semicalcined
-semicallipygian
-semicanal
-semicanalis
-semicannibalic
-semicantilever
-semicarbazide
-semicarbazone
-semicarbonate
-semicarbonize
-semicardinal
-semicartilaginous
-semicastrate
-semicastration
-semicatholicism
-semicaudate
-semicelestial
-semicell
-semicellulose
-semicentenarian
-semicentenary
-semicentennial
-semicentury
-semichannel
-semichaotic
-semichemical
-semicheviot
-semichevron
-semichiffon
-semichivalrous
-semichoric
-semichorus
-semichrome
-semicircle
-semicircled
-semicircular
-semicircularity
-semicircularly
-semicircularness
-semicircumference
-semicircumferentor
-semicircumvolution
-semicirque
-semicitizen
-semicivilization
-semicivilized
-semiclassic
-semiclassical
-semiclause
-semicleric
-semiclerical
-semiclimber
-semiclimbing
-semiclose
-semiclosed
-semiclosure
-semicoagulated
-semicoke
-semicollapsible
-semicollar
-semicollegiate
-semicolloid
-semicolloquial
-semicolon
-semicolonial
-semicolumn
-semicolumnar
-semicoma
-semicomatose
-semicombined
-semicombust
-semicomic
-semicomical
-semicommercial
-semicompact
-semicompacted
-semicomplete
-semicomplicated
-semiconceal
-semiconcrete
-semiconducting
-semiconductor
-semicone
-semiconfident
-semiconfinement
-semiconfluent
-semiconformist
-semiconformity
-semiconic
-semiconical
-semiconnate
-semiconnection
-semiconoidal
-semiconscious
-semiconsciously
-semiconsciousness
-semiconservative
-semiconsonant
-semiconsonantal
-semiconspicuous
-semicontinent
-semicontinuum
-semicontraction
-semicontradiction
-semiconvergence
-semiconvergent
-semiconversion
-semiconvert
-semicordate
-semicordated
-semicoriaceous
-semicorneous
-semicoronate
-semicoronated
-semicoronet
-semicostal
-semicostiferous
-semicotton
-semicotyle
-semicounterarch
-semicountry
-semicrepe
-semicrescentic
-semicretin
-semicretinism
-semicriminal
-semicroma
-semicrome
-semicrustaceous
-semicrystallinc
-semicubical
-semicubit
-semicup
-semicupium
-semicupola
-semicured
-semicurl
-semicursive
-semicurvilinear
-semicyclic
-semicycloid
-semicylinder
-semicylindric
-semicylindrical
-semicynical
-semidaily
-semidangerous
-semidark
-semidarkness
-semidead
-semideaf
-semidecay
-semidecussation
-semidefinite
-semideific
-semideification
-semideistical
-semideity
-semidelight
-semidelirious
-semideltaic
-semidemented
-semidenatured
-semidependence
-semidependent
-semideponent
-semidesert
-semidestructive
-semidetached
-semidetachment
-semideveloped
-semidiagrammatic
-semidiameter
-semidiapason
-semidiapente
-semidiaphaneity
-semidiaphanous
-semidiatessaron
-semidifference
-semidigested
-semidigitigrade
-semidigression
-semidilapidation
-semidine
-semidirect
-semidisabled
-semidisk
-semiditone
-semidiurnal
-semidivided
-semidivine
-semidocumentary
-semidodecagon
-semidole
-semidome
-semidomed
-semidomestic
-semidomesticated
-semidomestication
-semidomical
-semidormant
-semidouble
-semidrachm
-semidramatic
-semidress
-semidressy
-semidried
-semidry
-semidrying
-semiductile
-semidull
-semiduplex
-semiduration
-semieducated
-semieffigy
-semiegg
-semiegret
-semielastic
-semielision
-semiellipse
-semiellipsis
-semiellipsoidal
-semielliptic
-semielliptical
-semienclosed
-semiengaged
-semiequitant
-semierect
-semieremitical
-semiessay
-semiexecutive
-semiexpanded
-semiexplanation
-semiexposed
-semiexternal
-semiextinct
-semiextinction
-semifable
-semifabulous
-semifailure
-semifamine
-semifascia
-semifasciated
-semifashion
-semifast
-semifatalistic
-semiferal
-semiferous
-semifeudal
-semifeudalism
-semifib
-semifiction
-semifictional
-semifigurative
-semifigure
-semifinal
-semifinalist
-semifine
-semifinish
-semifinished
-semifiscal
-semifistular
-semifit
-semifitting
-semifixed
-semiflashproof
-semiflex
-semiflexed
-semiflexible
-semiflexion
-semiflexure
-semiflint
-semifloating
-semifloret
-semifloscular
-semifloscule
-semiflosculose
-semiflosculous
-semifluctuant
-semifluctuating
-semifluid
-semifluidic
-semifluidity
-semifoaming
-semiforbidding
-semiforeign
-semiform
-semiformal
-semiformed
-semifossil
-semifossilized
-semifrantic
-semifriable
-semifrontier
-semifuddle
-semifunctional
-semifused
-semifusion
-semify
-semigala
-semigelatinous
-semigentleman
-semigenuflection
-semigirder
-semiglaze
-semiglazed
-semiglobe
-semiglobose
-semiglobular
-semiglobularly
-semiglorious
-semiglutin
-semigod
-semigovernmental
-semigrainy
-semigranitic
-semigranulate
-semigravel
-semigroove
-semihand
-semihard
-semiharden
-semihardy
-semihastate
-semihepatization
-semiherbaceous
-semiheterocercal
-semihexagon
-semihexagonal
-semihiant
-semihiatus
-semihibernation
-semihigh
-semihistorical
-semihobo
-semihonor
-semihoral
-semihorny
-semihostile
-semihot
-semihuman
-semihumanitarian
-semihumanized
-semihumbug
-semihumorous
-semihumorously
-semihyaline
-semihydrate
-semihydrobenzoinic
-semihyperbola
-semihyperbolic
-semihyperbolical
-semijealousy
-semijubilee
-semijudicial
-semijuridical
-semilanceolate
-semilatent
-semilatus
-semileafless
-semilegendary
-semilegislative
-semilens
-semilenticular
-semilethal
-semiliberal
-semilichen
-semiligneous
-semilimber
-semilined
-semiliquid
-semiliquidity
-semiliterate
-semilocular
-semilogarithmic
-semilogical
-semilong
-semilooper
-semiloose
-semiloyalty
-semilucent
-semilunar
-semilunare
-semilunary
-semilunate
-semilunation
-semilune
-semiluxation
-semiluxury
-semimachine
-semimade
-semimadman
-semimagical
-semimagnetic
-semimajor
-semimalignant
-semimanufacture
-semimanufactured
-semimarine
-semimarking
-semimathematical
-semimature
-semimechanical
-semimedicinal
-semimember
-semimembranosus
-semimembranous
-semimenstrual
-semimercerized
-semimessianic
-semimetal
-semimetallic
-semimetamorphosis
-semimicrochemical
-semimild
-semimilitary
-semimill
-semimineral
-semimineralized
-semiminim
-semiminor
-semimolecule
-semimonastic
-semimonitor
-semimonopoly
-semimonster
-semimonthly
-semimoron
-semimucous
-semimute
-semimystic
-semimystical
-semimythical
-seminaked
-seminal
-seminality
-seminally
-seminaphthalidine
-seminaphthylamine
-seminar
-seminarcosis
-seminarial
-seminarian
-seminarianism
-seminarist
-seminaristic
-seminarize
-seminary
-seminasal
-seminase
-seminatant
-seminate
-semination
-seminationalization
-seminative
-seminebulous
-seminecessary
-seminegro
-seminervous
-seminiferal
-seminiferous
-seminific
-seminifical
-seminification
-seminist
-seminium
-seminivorous
-seminocturnal
-Seminole
-seminoma
-seminomad
-seminomadic
-seminomata
-seminonconformist
-seminonflammable
-seminonsensical
-seminormal
-seminose
-seminovel
-seminovelty
-seminude
-seminudity
-seminule
-seminuliferous
-seminuria
-seminvariant
-seminvariantive
-semioblivion
-semioblivious
-semiobscurity
-semioccasional
-semioccasionally
-semiocclusive
-semioctagonal
-semiofficial
-semiofficially
-semiography
-Semionotidae
-Semionotus
-semiopacity
-semiopacous
-semiopal
-semiopalescent
-semiopaque
-semiopened
-semiorb
-semiorbicular
-semiorbicularis
-semiorbiculate
-semiordinate
-semiorganized
-semioriental
-semioscillation
-semiosseous
-semiostracism
-semiotic
-semiotician
-semioval
-semiovaloid
-semiovate
-semioviparous
-semiovoid
-semiovoidal
-semioxidated
-semioxidized
-semioxygenated
-semioxygenized
-semipagan
-semipalmate
-semipalmated
-semipalmation
-semipanic
-semipapal
-semipapist
-semiparallel
-semiparalysis
-semiparameter
-semiparasitic
-semiparasitism
-semipaste
-semipastoral
-semipasty
-semipause
-semipeace
-semipectinate
-semipectinated
-semipectoral
-semiped
-semipedal
-semipellucid
-semipellucidity
-semipendent
-semipenniform
-semiperfect
-semiperimeter
-semiperimetry
-semiperiphery
-semipermanent
-semipermeability
-semipermeable
-semiperoid
-semiperspicuous
-semipertinent
-semipervious
-semipetaloid
-semipetrified
-semiphase
-semiphilologist
-semiphilosophic
-semiphilosophical
-semiphlogisticated
-semiphonotypy
-semiphosphorescent
-semipinacolic
-semipinacolin
-semipinnate
-semipiscine
-semiplantigrade
-semiplastic
-semiplumaceous
-semiplume
-semipolar
-semipolitical
-semipolitician
-semipoor
-semipopish
-semipopular
-semiporcelain
-semiporous
-semiporphyritic
-semiportable
-semipostal
-semipractical
-semiprecious
-semipreservation
-semiprimigenous
-semiprivacy
-semiprivate
-semipro
-semiprofane
-semiprofessional
-semiprofessionalized
-semipronation
-semiprone
-semipronominal
-semiproof
-semiproselyte
-semiprosthetic
-semiprostrate
-semiprotectorate
-semiproven
-semipublic
-semipupa
-semipurulent
-semiputrid
-semipyramidal
-semipyramidical
-semipyritic
-semiquadrangle
-semiquadrantly
-semiquadrate
-semiquantitative
-semiquantitatively
-semiquartile
-semiquaver
-semiquietism
-semiquietist
-semiquinquefid
-semiquintile
-semiquote
-semiradial
-semiradiate
-Semiramis
-Semiramize
-semirapacious
-semirare
-semirattlesnake
-semiraw
-semirebellion
-semirecondite
-semirecumbent
-semirefined
-semireflex
-semiregular
-semirelief
-semireligious
-semireniform
-semirepublican
-semiresinous
-semiresolute
-semirespectability
-semirespectable
-semireticulate
-semiretirement
-semiretractile
-semireverberatory
-semirevolute
-semirevolution
-semirevolutionist
-semirhythm
-semiriddle
-semirigid
-semiring
-semiroll
-semirotary
-semirotating
-semirotative
-semirotatory
-semirotund
-semirotunda
-semiround
-semiroyal
-semiruin
-semirural
-semirustic
-semis
-semisacerdotal
-semisacred
-semisagittate
-semisaint
-semisaline
-semisaltire
-semisaprophyte
-semisaprophytic
-semisarcodic
-semisatiric
-semisaturation
-semisavage
-semisavagedom
-semisavagery
-semiscenic
-semischolastic
-semiscientific
-semiseafaring
-semisecondary
-semisecrecy
-semisecret
-semisection
-semisedentary
-semisegment
-semisensuous
-semisentient
-semisentimental
-semiseparatist
-semiseptate
-semiserf
-semiserious
-semiseriously
-semiseriousness
-semiservile
-semisevere
-semiseverely
-semiseverity
-semisextile
-semishady
-semishaft
-semisheer
-semishirker
-semishrub
-semishrubby
-semisightseeing
-semisilica
-semisimious
-semisimple
-semisingle
-semisixth
-semiskilled
-semislave
-semismelting
-semismile
-semisocial
-semisocialism
-semisociative
-semisocinian
-semisoft
-semisolemn
-semisolemnity
-semisolemnly
-semisolid
-semisolute
-semisomnambulistic
-semisomnolence
-semisomnous
-semisopor
-semisovereignty
-semispan
-semispeculation
-semisphere
-semispheric
-semispherical
-semispheroidal
-semispinalis
-semispiral
-semispiritous
-semispontaneity
-semispontaneous
-semispontaneously
-semispontaneousness
-semisport
-semisporting
-semisquare
-semistagnation
-semistaminate
-semistarvation
-semistarved
-semistate
-semisteel
-semistiff
-semistill
-semistock
-semistory
-semistratified
-semistriate
-semistriated
-semistuporous
-semisubterranean
-semisuburban
-semisuccess
-semisuccessful
-semisuccessfully
-semisucculent
-semisupernatural
-semisupinated
-semisupination
-semisupine
-semisuspension
-semisymmetric
-semita
-semitact
-semitae
-semitailored
-semital
-semitandem
-semitangent
-semitaur
-Semite
-semitechnical
-semiteetotal
-semitelic
-semitendinosus
-semitendinous
-semiterete
-semiterrestrial
-semitertian
-semitesseral
-semitessular
-semitheological
-semithoroughfare
-Semitic
-Semiticism
-Semiticize
-Semitics
-semitime
-Semitism
-Semitist
-Semitization
-Semitize
-semitonal
-semitonally
-semitone
-semitonic
-semitonically
-semitontine
-semitorpid
-semitour
-semitrailer
-semitrained
-semitransept
-semitranslucent
-semitransparency
-semitransparent
-semitransverse
-semitreasonable
-semitrimmed
-semitropic
-semitropical
-semitropics
-semitruth
-semituberous
-semitubular
-semiuncial
-semiundressed
-semiuniversalist
-semiupright
-semiurban
-semiurn
-semivalvate
-semivault
-semivector
-semivegetable
-semivertebral
-semiverticillate
-semivibration
-semivirtue
-semiviscid
-semivital
-semivitreous
-semivitrification
-semivitrified
-semivocal
-semivocalic
-semivolatile
-semivolcanic
-semivoluntary
-semivowel
-semivulcanized
-semiwaking
-semiwarfare
-semiweekly
-semiwild
-semiwoody
-semiyearly
-semmet
-semmit
-Semnae
-Semnones
-Semnopithecinae
-semnopithecine
-Semnopithecus
-semola
-semolella
-semolina
-semological
-semology
-Semostomae
-semostomeous
-semostomous
-semperannual
-sempergreen
-semperidentical
-semperjuvenescent
-sempervirent
-sempervirid
-Sempervivum
-sempitern
-sempiternal
-sempiternally
-sempiternity
-sempiternize
-sempiternous
-sempstrywork
-semsem
-semuncia
-semuncial
-sen
-Senaah
-senaite
-senam
-senarian
-senarius
-senarmontite
-senary
-senate
-senator
-senatorial
-senatorially
-senatorian
-senatorship
-senatory
-senatress
-senatrices
-senatrix
-sence
-Senci
-sencion
-send
-sendable
-sendal
-sendee
-sender
-sending
-Seneca
-Senecan
-Senecio
-senecioid
-senecionine
-senectitude
-senectude
-senectuous
-senega
-Senegal
-Senegalese
-Senegambian
-senegin
-senesce
-senescence
-senescent
-seneschal
-seneschally
-seneschalship
-seneschalsy
-seneschalty
-sengreen
-senicide
-Senijextee
-senile
-senilely
-senilism
-senility
-senilize
-senior
-seniority
-seniorship
-Senlac
-Senna
-senna
-sennegrass
-sennet
-sennight
-sennit
-sennite
-senocular
-Senones
-Senonian
-sensa
-sensable
-sensal
-sensate
-sensation
-sensational
-sensationalism
-sensationalist
-sensationalistic
-sensationalize
-sensationally
-sensationary
-sensationish
-sensationism
-sensationist
-sensationistic
-sensationless
-sensatorial
-sensatory
-sense
-sensed
-senseful
-senseless
-senselessly
-senselessness
-sensibilia
-sensibilisin
-sensibilitist
-sensibilitous
-sensibility
-sensibilium
-sensibilization
-sensibilize
-sensible
-sensibleness
-sensibly
-sensical
-sensifacient
-sensiferous
-sensific
-sensificatory
-sensifics
-sensify
-sensigenous
-sensile
-sensilia
-sensilla
-sensillum
-sension
-sensism
-sensist
-sensistic
-sensitive
-sensitively
-sensitiveness
-sensitivity
-sensitization
-sensitize
-sensitizer
-sensitometer
-sensitometric
-sensitometry
-sensitory
-sensive
-sensize
-senso
-sensomobile
-sensomobility
-sensomotor
-sensoparalysis
-sensor
-sensoria
-sensorial
-sensoriglandular
-sensorimotor
-sensorimuscular
-sensorium
-sensorivascular
-sensorivasomotor
-sensorivolitional
-sensory
-sensual
-sensualism
-sensualist
-sensualistic
-sensuality
-sensualization
-sensualize
-sensually
-sensualness
-sensuism
-sensuist
-sensum
-sensuosity
-sensuous
-sensuously
-sensuousness
-sensyne
-sent
-sentence
-sentencer
-sentential
-sententially
-sententiarian
-sententiarist
-sententiary
-sententiosity
-sententious
-sententiously
-sententiousness
-sentience
-sentiendum
-sentient
-sentiently
-sentiment
-sentimental
-sentimentalism
-sentimentalist
-sentimentality
-sentimentalization
-sentimentalize
-sentimentalizer
-sentimentally
-sentimenter
-sentimentless
-sentinel
-sentinellike
-sentinelship
-sentinelwise
-sentisection
-sentition
-sentry
-Senusi
-Senusian
-Senusism
-sepad
-sepal
-sepaled
-sepaline
-sepalled
-sepalody
-sepaloid
-separability
-separable
-separableness
-separably
-separata
-separate
-separatedly
-separately
-separateness
-separates
-separatical
-separating
-separation
-separationism
-separationist
-separatism
-separatist
-separatistic
-separative
-separatively
-separativeness
-separator
-separatory
-separatress
-separatrix
-separatum
-Sepharad
-Sephardi
-Sephardic
-Sephardim
-Sepharvites
-sephen
-sephiric
-sephirothic
-sepia
-sepiaceous
-sepialike
-sepian
-sepiarian
-sepiary
-sepic
-sepicolous
-Sepiidae
-sepiment
-sepioid
-Sepioidea
-Sepiola
-Sepiolidae
-sepiolite
-sepion
-sepiost
-sepiostaire
-sepium
-sepone
-sepoy
-seppuku
-seps
-Sepsidae
-sepsine
-sepsis
-Sept
-sept
-septa
-septal
-septan
-septane
-septangle
-septangled
-septangular
-septangularness
-septarian
-septariate
-septarium
-septate
-septated
-septation
-septatoarticulate
-septavalent
-septave
-septcentenary
-septectomy
-September
-Septemberer
-Septemberism
-Septemberist
-Septembral
-Septembrian
-Septembrist
-Septembrize
-Septembrizer
-septemdecenary
-septemfid
-septemfluous
-septemfoliate
-septemfoliolate
-septemia
-septempartite
-septemplicate
-septemvious
-septemvir
-septemvirate
-septemviri
-septenar
-septenarian
-septenarius
-septenary
-septenate
-septendecennial
-septendecimal
-septennary
-septennate
-septenniad
-septennial
-septennialist
-septenniality
-septennially
-septennium
-septenous
-Septentrio
-Septentrion
-septentrional
-septentrionality
-septentrionally
-septentrionate
-septentrionic
-septerium
-septet
-septfoil
-Septi
-Septibranchia
-Septibranchiata
-septic
-septical
-septically
-septicemia
-septicemic
-septicidal
-septicidally
-septicity
-septicization
-septicolored
-septicopyemia
-septicopyemic
-septier
-septifarious
-septiferous
-septifluous
-septifolious
-septiform
-septifragal
-septifragally
-septilateral
-septile
-septillion
-septillionth
-septimal
-septimanal
-septimanarian
-septime
-septimetritis
-septimole
-septinsular
-septipartite
-septisyllabic
-septisyllable
-septivalent
-septleva
-Septobasidium
-septocosta
-septocylindrical
-Septocylindrium
-septodiarrhea
-septogerm
-Septogloeum
-septoic
-septole
-septomarginal
-septomaxillary
-septonasal
-Septoria
-septotomy
-septship
-septuagenarian
-septuagenarianism
-septuagenary
-septuagesima
-Septuagint
-septuagint
-Septuagintal
-septulate
-septulum
-septum
-septuncial
-septuor
-septuple
-septuplet
-septuplicate
-septuplication
-sepulcher
-sepulchral
-sepulchralize
-sepulchrally
-sepulchrous
-sepultural
-sepulture
-sequa
-sequacious
-sequaciously
-sequaciousness
-sequacity
-Sequan
-Sequani
-Sequanian
-sequel
-sequela
-sequelae
-sequelant
-sequence
-sequencer
-sequency
-sequent
-sequential
-sequentiality
-sequentially
-sequently
-sequest
-sequester
-sequestered
-sequesterment
-sequestra
-sequestrable
-sequestral
-sequestrate
-sequestration
-sequestrator
-sequestratrices
-sequestratrix
-sequestrectomy
-sequestrotomy
-sequestrum
-sequin
-sequitur
-Sequoia
-ser
-sera
-serab
-Serabend
-seragli
-seraglio
-serai
-serail
-seral
-seralbumin
-seralbuminous
-serang
-serape
-Serapea
-Serapeum
-seraph
-seraphic
-seraphical
-seraphically
-seraphicalness
-seraphicism
-seraphicness
-seraphim
-seraphina
-seraphine
-seraphism
-seraphlike
-seraphtide
-Serapias
-Serapic
-Serapis
-Serapist
-serasker
-seraskerate
-seraskier
-seraskierat
-serau
-seraw
-Serb
-Serbdom
-Serbian
-Serbize
-Serbonian
-Serbophile
-Serbophobe
-sercial
-serdab
-Serdar
-Sere
-sere
-Serean
-sereh
-Serena
-serenade
-serenader
-serenata
-serenate
-Serendib
-serendibite
-serendipity
-serendite
-serene
-serenely
-sereneness
-serenify
-serenissime
-serenissimi
-serenissimo
-serenity
-serenize
-Serenoa
-Serer
-Seres
-sereward
-serf
-serfage
-serfdom
-serfhood
-serfish
-serfishly
-serfishness
-serfism
-serflike
-serfship
-Serge
-serge
-sergeancy
-Sergeant
-sergeant
-sergeantcy
-sergeantess
-sergeantry
-sergeantship
-sergeanty
-sergedesoy
-Sergei
-serger
-sergette
-serging
-Sergio
-Sergiu
-Sergius
-serglobulin
-Seri
-serial
-serialist
-seriality
-serialization
-serialize
-serially
-Serian
-seriary
-seriate
-seriately
-seriatim
-seriation
-Seric
-Sericana
-sericate
-sericated
-sericea
-sericeotomentose
-sericeous
-sericicultural
-sericiculture
-sericiculturist
-sericin
-sericipary
-sericite
-sericitic
-sericitization
-Sericocarpus
-sericteria
-sericterium
-serictery
-sericultural
-sericulture
-sericulturist
-seriema
-series
-serif
-serific
-Seriform
-serigraph
-serigrapher
-serigraphy
-serimeter
-serin
-serine
-serinette
-seringa
-seringal
-seringhi
-Serinus
-serio
-seriocomedy
-seriocomic
-seriocomical
-seriocomically
-seriogrotesque
-Seriola
-Seriolidae
-serioline
-serioludicrous
-seriopantomimic
-serioridiculous
-seriosity
-serious
-seriously
-seriousness
-seripositor
-Serjania
-serjeant
-serment
-sermo
-sermocination
-sermocinatrix
-sermon
-sermoneer
-sermoner
-sermonesque
-sermonet
-sermonettino
-sermonic
-sermonically
-sermonics
-sermonish
-sermonism
-sermonist
-sermonize
-sermonizer
-sermonless
-sermonoid
-sermonolatry
-sermonology
-sermonproof
-sermonwise
-sermuncle
-sernamby
-sero
-seroalbumin
-seroalbuminuria
-seroanaphylaxis
-serobiological
-serocolitis
-serocyst
-serocystic
-serodermatosis
-serodermitis
-serodiagnosis
-serodiagnostic
-seroenteritis
-seroenzyme
-serofibrinous
-serofibrous
-serofluid
-serogelatinous
-serohemorrhagic
-serohepatitis
-seroimmunity
-serolactescent
-serolemma
-serolin
-serolipase
-serologic
-serological
-serologically
-serologist
-serology
-seromaniac
-seromembranous
-seromucous
-seromuscular
-seron
-seronegative
-seronegativity
-seroon
-seroot
-seroperitoneum
-serophthisis
-serophysiology
-seroplastic
-seropneumothorax
-seropositive
-seroprevention
-seroprognosis
-seroprophylaxis
-seroprotease
-seropuriform
-seropurulent
-seropus
-seroreaction
-serosa
-serosanguineous
-serosanguinolent
-seroscopy
-serositis
-serosity
-serosynovial
-serosynovitis
-serotherapeutic
-serotherapeutics
-serotherapist
-serotherapy
-serotina
-serotinal
-serotine
-serotinous
-serotoxin
-serous
-serousness
-serovaccine
-serow
-serozyme
-Serpari
-serpedinous
-Serpens
-Serpent
-serpent
-serpentaria
-Serpentarian
-Serpentarii
-serpentarium
-Serpentarius
-serpentary
-serpentcleide
-serpenteau
-Serpentes
-serpentess
-Serpentian
-serpenticidal
-serpenticide
-Serpentid
-serpentiferous
-serpentiform
-serpentina
-serpentine
-serpentinely
-Serpentinian
-serpentinic
-serpentiningly
-serpentinization
-serpentinize
-serpentinoid
-serpentinous
-Serpentis
-serpentivorous
-serpentize
-serpentlike
-serpently
-serpentoid
-serpentry
-serpentwood
-serphid
-Serphidae
-serphoid
-Serphoidea
-serpierite
-serpiginous
-serpiginously
-serpigo
-serpivolant
-serpolet
-Serpula
-serpula
-Serpulae
-serpulae
-serpulan
-serpulid
-Serpulidae
-serpulidan
-serpuline
-serpulite
-serpulitic
-serpuloid
-serra
-serradella
-serrage
-serran
-serrana
-serranid
-Serranidae
-Serrano
-serrano
-serranoid
-Serranus
-Serrasalmo
-serrate
-serrated
-serratic
-serratiform
-serratile
-serration
-serratirostral
-serratocrenate
-serratodentate
-serratodenticulate
-serratoglandulous
-serratospinose
-serrature
-serricorn
-Serricornia
-Serridentines
-Serridentinus
-serried
-serriedly
-serriedness
-Serrifera
-serriferous
-serriform
-serriped
-serrirostrate
-serrulate
-serrulated
-serrulation
-serry
-sert
-serta
-Sertularia
-sertularian
-Sertulariidae
-sertularioid
-sertule
-sertulum
-sertum
-serum
-serumal
-serut
-servable
-servage
-serval
-servaline
-servant
-servantcy
-servantdom
-servantess
-servantless
-servantlike
-servantry
-servantship
-servation
-serve
-servente
-serventism
-server
-servery
-servet
-Servetian
-Servetianism
-Servian
-service
-serviceability
-serviceable
-serviceableness
-serviceably
-serviceberry
-serviceless
-servicelessness
-serviceman
-Servidor
-servidor
-servient
-serviential
-serviette
-servile
-servilely
-servileness
-servilism
-servility
-servilize
-serving
-servingman
-servist
-Servite
-servitor
-servitorial
-servitorship
-servitress
-servitrix
-servitude
-serviture
-Servius
-servo
-servomechanism
-servomotor
-servulate
-serwamby
-sesame
-sesamoid
-sesamoidal
-sesamoiditis
-Sesamum
-Sesban
-Sesbania
-sescuple
-Seseli
-Seshat
-Sesia
-Sesiidae
-sesma
-sesqui
-sesquialter
-sesquialtera
-sesquialteral
-sesquialteran
-sesquialterous
-sesquibasic
-sesquicarbonate
-sesquicentennial
-sesquichloride
-sesquiduplicate
-sesquihydrate
-sesquihydrated
-sesquinona
-sesquinonal
-sesquioctava
-sesquioctaval
-sesquioxide
-sesquipedal
-sesquipedalian
-sesquipedalianism
-sesquipedality
-sesquiplicate
-sesquiquadrate
-sesquiquarta
-sesquiquartal
-sesquiquartile
-sesquiquinta
-sesquiquintal
-sesquiquintile
-sesquisalt
-sesquiseptimal
-sesquisextal
-sesquisilicate
-sesquisquare
-sesquisulphate
-sesquisulphide
-sesquisulphuret
-sesquiterpene
-sesquitertia
-sesquitertial
-sesquitertian
-sesquitertianal
-sess
-sessile
-sessility
-Sessiliventres
-session
-sessional
-sessionary
-sessions
-sesterce
-sestertium
-sestet
-sesti
-sestiad
-Sestian
-sestina
-sestine
-sestole
-sestuor
-Sesuto
-Sesuvium
-set
-seta
-setaceous
-setaceously
-setae
-setal
-Setaria
-setarious
-setback
-setbolt
-setdown
-setfast
-Seth
-seth
-sethead
-Sethian
-Sethic
-Sethite
-Setibo
-setier
-Setifera
-setiferous
-setiform
-setigerous
-setiparous
-setirostral
-setline
-setness
-setoff
-seton
-Setophaga
-Setophaginae
-setophagine
-setose
-setous
-setout
-setover
-setscrew
-setsman
-sett
-settable
-settaine
-settee
-setter
-settergrass
-setterwort
-setting
-settle
-settleable
-settled
-settledly
-settledness
-settlement
-settler
-settlerdom
-settling
-settlings
-settlor
-settsman
-setula
-setule
-setuliform
-setulose
-setulous
-setup
-setwall
-setwise
-setwork
-seugh
-Sevastopol
-seven
-sevenbark
-sevener
-sevenfold
-sevenfolded
-sevenfoldness
-sevennight
-sevenpence
-sevenpenny
-sevenscore
-seventeen
-seventeenfold
-seventeenth
-seventeenthly
-seventh
-seventhly
-seventieth
-seventy
-seventyfold
-sever
-severable
-several
-severalfold
-severality
-severalize
-severally
-severalness
-severalth
-severalty
-severance
-severation
-severe
-severedly
-severely
-severeness
-severer
-Severian
-severingly
-severish
-severity
-severization
-severize
-severy
-Sevillian
-sew
-sewable
-sewage
-sewan
-sewed
-sewellel
-sewen
-sewer
-sewerage
-sewered
-sewerless
-sewerlike
-sewerman
-sewery
-sewing
-sewless
-sewn
-sewround
-sex
-sexadecimal
-sexagenarian
-sexagenarianism
-sexagenary
-Sexagesima
-sexagesimal
-sexagesimally
-sexagesimals
-sexagonal
-sexangle
-sexangled
-sexangular
-sexangularly
-sexannulate
-sexarticulate
-sexcentenary
-sexcuspidate
-sexdigital
-sexdigitate
-sexdigitated
-sexdigitism
-sexed
-sexenary
-sexennial
-sexennially
-sexennium
-sexern
-sexfarious
-sexfid
-sexfoil
-sexhood
-sexifid
-sexillion
-sexiped
-sexipolar
-sexisyllabic
-sexisyllable
-sexitubercular
-sexivalence
-sexivalency
-sexivalent
-sexless
-sexlessly
-sexlessness
-sexlike
-sexlocular
-sexly
-sexological
-sexologist
-sexology
-sexpartite
-sexradiate
-sext
-sextactic
-sextain
-sextan
-sextans
-Sextant
-sextant
-sextantal
-sextar
-sextarii
-sextarius
-sextary
-sextennial
-sextern
-sextet
-sextic
-sextile
-Sextilis
-sextillion
-sextillionth
-sextipara
-sextipartite
-sextipartition
-sextiply
-sextipolar
-sexto
-sextodecimo
-sextole
-sextolet
-sexton
-sextoness
-sextonship
-sextry
-sextubercular
-sextuberculate
-sextula
-sextulary
-sextumvirate
-sextuple
-sextuplet
-sextuplex
-sextuplicate
-sextuply
-sexual
-sexuale
-sexualism
-sexualist
-sexuality
-sexualization
-sexualize
-sexually
-sexuous
-sexupara
-sexuparous
-sexy
-sey
-seybertite
-Seymeria
-Seymour
-sfoot
-Sgad
-sgraffiato
-sgraffito
-sh
-sha
-shaatnez
-shab
-Shaban
-shabash
-Shabbath
-shabbed
-shabbify
-shabbily
-shabbiness
-shabble
-shabby
-shabbyish
-shabrack
-shabunder
-Shabuoth
-shachle
-shachly
-shack
-shackanite
-shackatory
-shackbolt
-shackland
-shackle
-shacklebone
-shackledom
-shackler
-shacklewise
-shackling
-shackly
-shacky
-shad
-shadbelly
-shadberry
-shadbird
-shadbush
-shadchan
-shaddock
-shade
-shaded
-shadeful
-shadeless
-shadelessness
-shader
-shadetail
-shadflower
-shadily
-shadine
-shadiness
-shading
-shadkan
-shadoof
-Shadow
-shadow
-shadowable
-shadowbox
-shadowboxing
-shadowed
-shadower
-shadowfoot
-shadowgram
-shadowgraph
-shadowgraphic
-shadowgraphist
-shadowgraphy
-shadowily
-shadowiness
-shadowing
-shadowishly
-shadowist
-shadowland
-shadowless
-shadowlessness
-shadowlike
-shadowly
-shadowy
-shadrach
-shady
-shaffle
-Shafiite
-shaft
-shafted
-shafter
-shaftfoot
-shafting
-shaftless
-shaftlike
-shaftman
-shaftment
-shaftsman
-shaftway
-shafty
-shag
-shaganappi
-shagbag
-shagbark
-shagged
-shaggedness
-shaggily
-shagginess
-shaggy
-Shagia
-shaglet
-shaglike
-shagpate
-shagrag
-shagreen
-shagreened
-shagroon
-shagtail
-shah
-Shahaptian
-shaharith
-shahdom
-shahi
-Shahid
-shahin
-shahzada
-Shai
-Shaigia
-shaikh
-Shaikiyeh
-shaitan
-Shaiva
-Shaivism
-Shaka
-shakable
-shake
-shakeable
-shakebly
-shakedown
-shakefork
-shaken
-shakenly
-shakeout
-shakeproof
-Shaker
-shaker
-shakerag
-Shakerdom
-Shakeress
-Shakerism
-Shakerlike
-shakers
-shakescene
-Shakespearean
-Shakespeareana
-Shakespeareanism
-Shakespeareanly
-Shakespearize
-Shakespearolater
-Shakespearolatry
-shakha
-Shakil
-shakily
-shakiness
-shaking
-shakingly
-shako
-shaksheer
-Shakta
-Shakti
-shakti
-Shaktism
-shaku
-shaky
-Shakyamuni
-Shalako
-shale
-shalelike
-shaleman
-shall
-shallal
-shallon
-shalloon
-shallop
-shallopy
-shallot
-shallow
-shallowbrained
-shallowhearted
-shallowish
-shallowist
-shallowly
-shallowness
-shallowpate
-shallowpated
-shallows
-shallowy
-shallu
-shalom
-shalt
-shalwar
-shaly
-Sham
-sham
-shama
-shamable
-shamableness
-shamably
-shamal
-shamalo
-shaman
-shamaness
-shamanic
-shamanism
-shamanist
-shamanistic
-shamanize
-shamateur
-shamba
-Shambala
-shamble
-shambling
-shamblingly
-shambrier
-Shambu
-shame
-shameable
-shamed
-shameface
-shamefaced
-shamefacedly
-shamefacedness
-shamefast
-shamefastly
-shamefastness
-shameful
-shamefully
-shamefulness
-shameless
-shamelessly
-shamelessness
-shameproof
-shamer
-shamesick
-shameworthy
-shamianah
-Shamim
-shamir
-Shammar
-shammed
-shammer
-shammick
-shamming
-shammish
-shammock
-shammocking
-shammocky
-shammy
-shampoo
-shampooer
-shamrock
-shamroot
-shamsheer
-Shan
-shan
-shanachas
-shanachie
-Shandean
-shandry
-shandrydan
-Shandy
-shandy
-shandygaff
-Shandyism
-Shane
-Shang
-Shangalla
-shangan
-Shanghai
-shanghai
-shanghaier
-shank
-Shankar
-shanked
-shanker
-shankings
-shankpiece
-shanksman
-shanna
-Shannon
-shanny
-shansa
-shant
-Shantung
-shanty
-shantylike
-shantyman
-shantytown
-shap
-shapable
-Shape
-shape
-shaped
-shapeful
-shapeless
-shapelessly
-shapelessness
-shapeliness
-shapely
-shapen
-shaper
-shapeshifter
-shapesmith
-shaping
-shapingly
-shapometer
-shaps
-Shaptan
-shapy
-sharable
-Sharada
-Sharan
-shard
-Shardana
-sharded
-shardy
-share
-shareable
-sharebone
-sharebroker
-sharecrop
-sharecropper
-shareholder
-shareholdership
-shareman
-sharepenny
-sharer
-shareship
-sharesman
-sharewort
-Sharezer
-shargar
-Shari
-Sharia
-Sharira
-shark
-sharkful
-sharkish
-sharklet
-sharklike
-sharkship
-sharkskin
-sharky
-sharn
-sharnbud
-sharny
-Sharon
-sharp
-sharpen
-sharpener
-sharper
-sharpie
-sharpish
-sharply
-sharpness
-sharps
-sharpsaw
-sharpshin
-sharpshod
-sharpshooter
-sharpshooting
-sharptail
-sharpware
-sharpy
-Sharra
-sharrag
-sharry
-Shasta
-shastaite
-Shastan
-shaster
-shastra
-shastraik
-shastri
-shastrik
-shat
-shatan
-shathmont
-Shatter
-shatter
-shatterbrain
-shatterbrained
-shatterer
-shatterheaded
-shattering
-shatteringly
-shatterment
-shatterpated
-shatterproof
-shatterwit
-shattery
-shattuckite
-shauchle
-shaugh
-shaul
-Shaula
-shaup
-shauri
-shauwe
-shavable
-shave
-shaveable
-shaved
-shavee
-shaveling
-shaven
-shaver
-shavery
-Shavese
-shavester
-shavetail
-shaveweed
-Shavian
-Shaviana
-Shavianism
-shaving
-shavings
-Shaw
-shaw
-Shawanese
-Shawano
-shawl
-shawled
-shawling
-shawlless
-shawllike
-shawlwise
-shawm
-Shawn
-Shawnee
-shawneewood
-shawny
-Shawwal
-shawy
-shay
-Shaysite
-she
-shea
-sheading
-sheaf
-sheafage
-sheaflike
-sheafripe
-sheafy
-sheal
-shealing
-Shean
-shear
-shearbill
-sheard
-shearer
-sheargrass
-shearhog
-shearing
-shearless
-shearling
-shearman
-shearmouse
-shears
-shearsman
-sheartail
-shearwater
-shearwaters
-sheat
-sheatfish
-sheath
-sheathbill
-sheathe
-sheathed
-sheather
-sheathery
-sheathing
-sheathless
-sheathlike
-sheathy
-sheave
-sheaved
-sheaveless
-sheaveman
-shebang
-Shebat
-shebeen
-shebeener
-Shechem
-Shechemites
-shed
-shedded
-shedder
-shedding
-sheder
-shedhand
-shedlike
-shedman
-shedwise
-shee
-sheely
-sheen
-sheenful
-sheenless
-sheenly
-sheeny
-sheep
-sheepback
-sheepberry
-sheepbine
-sheepbiter
-sheepbiting
-sheepcote
-sheepcrook
-sheepfaced
-sheepfacedly
-sheepfacedness
-sheepfold
-sheepfoot
-sheepgate
-sheephead
-sheepheaded
-sheephearted
-sheepherder
-sheepherding
-sheephook
-sheephouse
-sheepify
-sheepish
-sheepishly
-sheepishness
-sheepkeeper
-sheepkeeping
-sheepkill
-sheepless
-sheeplet
-sheeplike
-sheepling
-sheepman
-sheepmaster
-sheepmonger
-sheepnose
-sheepnut
-sheeppen
-sheepshank
-sheepshead
-sheepsheadism
-sheepshear
-sheepshearer
-sheepshearing
-sheepshed
-sheepskin
-sheepsplit
-sheepsteal
-sheepstealer
-sheepstealing
-sheepwalk
-sheepwalker
-sheepweed
-sheepy
-sheer
-sheered
-sheering
-sheerly
-sheerness
-sheet
-sheetage
-sheeted
-sheeter
-sheetflood
-sheetful
-sheeting
-sheetless
-sheetlet
-sheetlike
-sheetling
-sheetways
-sheetwise
-sheetwork
-sheetwriting
-sheety
-Sheffield
-shehitah
-sheik
-sheikdom
-sheikhlike
-sheikhly
-sheiklike
-sheikly
-Sheila
-shekel
-Shekinah
-Shel
-shela
-sheld
-sheldapple
-shelder
-sheldfowl
-sheldrake
-shelduck
-shelf
-shelfback
-shelffellow
-shelfful
-shelflist
-shelfmate
-shelfpiece
-shelfroom
-shelfworn
-shelfy
-shell
-shellac
-shellacker
-shellacking
-shellapple
-shellback
-shellblow
-shellblowing
-shellbound
-shellburst
-shellcracker
-shelleater
-shelled
-sheller
-Shelleyan
-Shelleyana
-shellfire
-shellfish
-shellfishery
-shellflower
-shellful
-shellhead
-shelliness
-shelling
-shellman
-shellmonger
-shellproof
-shellshake
-shellum
-shellwork
-shellworker
-shelly
-shellycoat
-shelta
-shelter
-shelterage
-sheltered
-shelterer
-shelteringly
-shelterless
-shelterlessness
-shelterwood
-sheltery
-sheltron
-shelty
-shelve
-shelver
-shelving
-shelvingly
-shelvingness
-shelvy
-Shelyak
-Shemaka
-sheminith
-Shemite
-Shemitic
-Shemitish
-Shemu
-Shen
-shenanigan
-shend
-sheng
-Shenshai
-Sheol
-sheolic
-shepherd
-shepherdage
-shepherddom
-shepherdess
-shepherdhood
-Shepherdia
-shepherdish
-shepherdism
-shepherdize
-shepherdless
-shepherdlike
-shepherdling
-shepherdly
-shepherdry
-sheppeck
-sheppey
-shepstare
-sher
-Sherani
-Sherardia
-sherardize
-sherardizer
-Sheratan
-Sheraton
-sherbacha
-sherbet
-sherbetlee
-sherbetzide
-sheriat
-sherif
-sherifa
-sherifate
-sheriff
-sheriffalty
-sheriffdom
-sheriffess
-sheriffhood
-sheriffry
-sheriffship
-sheriffwick
-sherifi
-sherifian
-sherify
-sheristadar
-Sheriyat
-sherlock
-Sherman
-Sherpa
-Sherramoor
-Sherri
-sherry
-Sherrymoor
-sherryvallies
-Shesha
-sheth
-Shetland
-Shetlander
-Shetlandic
-sheugh
-sheva
-shevel
-sheveled
-shevri
-shewa
-shewbread
-shewel
-sheyle
-shi
-Shiah
-shibah
-shibar
-shibboleth
-shibbolethic
-shibuichi
-shice
-shicer
-shicker
-shickered
-shide
-shied
-shiel
-shield
-shieldable
-shieldboard
-shielddrake
-shielded
-shielder
-shieldflower
-shielding
-shieldless
-shieldlessly
-shieldlessness
-shieldlike
-shieldling
-shieldmaker
-shieldmay
-shieldtail
-shieling
-shier
-shies
-shiest
-shift
-shiftable
-shiftage
-shifter
-shiftful
-shiftfulness
-shiftily
-shiftiness
-shifting
-shiftingly
-shiftingness
-shiftless
-shiftlessly
-shiftlessness
-shifty
-Shigella
-shiggaion
-shigram
-shih
-Shiism
-Shiite
-Shiitic
-Shik
-shikar
-shikara
-shikargah
-shikari
-shikasta
-shikimi
-shikimic
-shikimole
-shikimotoxin
-shikken
-shiko
-shikra
-shilf
-shilfa
-Shilh
-Shilha
-shill
-shilla
-shillaber
-shillelagh
-shillet
-shillety
-shillhouse
-shillibeer
-shilling
-shillingless
-shillingsworth
-shilloo
-Shilluh
-Shilluk
-Shiloh
-shilpit
-shim
-shimal
-Shimei
-shimmer
-shimmering
-shimmeringly
-shimmery
-shimmy
-Shimonoseki
-shimose
-shimper
-shin
-Shina
-shinaniging
-shinarump
-shinbone
-shindig
-shindle
-shindy
-shine
-shineless
-shiner
-shingle
-shingled
-shingler
-shingles
-shinglewise
-shinglewood
-shingling
-shingly
-shinily
-shininess
-shining
-shiningly
-shiningness
-shinleaf
-Shinnecock
-shinner
-shinnery
-shinning
-shinny
-shinplaster
-shintiyan
-Shinto
-Shintoism
-Shintoist
-Shintoistic
-Shintoize
-shinty
-Shinwari
-shinwood
-shiny
-shinza
-ship
-shipboard
-shipbound
-shipboy
-shipbreaking
-shipbroken
-shipbuilder
-shipbuilding
-shipcraft
-shipentine
-shipful
-shipkeeper
-shiplap
-shipless
-shiplessly
-shiplet
-shipload
-shipman
-shipmanship
-shipmast
-shipmaster
-shipmate
-shipmatish
-shipment
-shipowner
-shipowning
-shippable
-shippage
-shipped
-shipper
-shipping
-shipplane
-shippo
-shippon
-shippy
-shipshape
-shipshapely
-shipside
-shipsmith
-shipward
-shipwards
-shipway
-shipwork
-shipworm
-shipwreck
-shipwrecky
-shipwright
-shipwrightery
-shipwrightry
-shipyard
-shirakashi
-shirallee
-Shiraz
-shire
-shirehouse
-shireman
-shirewick
-shirk
-shirker
-shirky
-shirl
-shirlcock
-Shirley
-shirpit
-shirr
-shirring
-shirt
-shirtband
-shirtiness
-shirting
-shirtless
-shirtlessness
-shirtlike
-shirtmaker
-shirtmaking
-shirtman
-shirttail
-shirtwaist
-shirty
-Shirvan
-shish
-shisham
-shisn
-shita
-shitepoke
-shither
-shittah
-shittim
-shittimwood
-shiv
-Shivaism
-Shivaist
-Shivaistic
-Shivaite
-shivaree
-shive
-shiver
-shivereens
-shiverer
-shivering
-shiveringly
-shiverproof
-shiversome
-shiverweed
-shivery
-shivey
-shivoo
-shivy
-shivzoku
-Shkupetar
-Shlu
-Shluh
-Sho
-sho
-Shoa
-shoad
-shoader
-shoal
-shoalbrain
-shoaler
-shoaliness
-shoalness
-shoalwise
-shoaly
-shoat
-shock
-shockability
-shockable
-shockedness
-shocker
-shockheaded
-shocking
-shockingly
-shockingness
-shocklike
-shockproof
-shod
-shodden
-shoddily
-shoddiness
-shoddy
-shoddydom
-shoddyism
-shoddyite
-shoddylike
-shoddyward
-shoddywards
-shode
-shoder
-shoe
-shoebill
-shoebinder
-shoebindery
-shoebinding
-shoebird
-shoeblack
-shoeboy
-shoebrush
-shoecraft
-shoeflower
-shoehorn
-shoeing
-shoeingsmith
-shoelace
-shoeless
-shoemaker
-shoemaking
-shoeman
-shoepack
-shoer
-shoescraper
-shoeshine
-shoeshop
-shoesmith
-shoestring
-shoewoman
-shoful
-shog
-shogaol
-shoggie
-shoggle
-shoggly
-shogi
-shogun
-shogunal
-shogunate
-shohet
-shoji
-Shojo
-shola
-shole
-Shona
-shone
-shoneen
-shonkinite
-shoo
-shood
-shoofa
-shoofly
-shooi
-shook
-shool
-shooldarry
-shooler
-shoop
-shoopiltie
-shoor
-shoot
-shootable
-shootboard
-shootee
-shooter
-shoother
-shooting
-shootist
-shootman
-shop
-shopboard
-shopbook
-shopboy
-shopbreaker
-shopbreaking
-shopfolk
-shopful
-shopgirl
-shopgirlish
-shophar
-shopkeeper
-shopkeeperess
-shopkeeperish
-shopkeeperism
-shopkeepery
-shopkeeping
-shopland
-shoplet
-shoplifter
-shoplifting
-shoplike
-shopmaid
-shopman
-shopmark
-shopmate
-shopocracy
-shopocrat
-shoppe
-shopper
-shopping
-shoppish
-shoppishness
-shoppy
-shopster
-shoptalk
-shopwalker
-shopwear
-shopwife
-shopwindow
-shopwoman
-shopwork
-shopworker
-shopworn
-shoq
-Shor
-shor
-shoran
-shore
-Shorea
-shoreberry
-shorebush
-shored
-shoregoing
-shoreland
-shoreless
-shoreman
-shorer
-shoreside
-shoresman
-shoreward
-shorewards
-shoreweed
-shoreyer
-shoring
-shorling
-shorn
-short
-shortage
-shortbread
-shortcake
-shortchange
-shortchanger
-shortclothes
-shortcoat
-shortcomer
-shortcoming
-shorten
-shortener
-shortening
-shorter
-shortfall
-shorthand
-shorthanded
-shorthandedness
-shorthander
-shorthead
-shorthorn
-Shortia
-shortish
-shortly
-shortness
-shorts
-shortschat
-shortsighted
-shortsightedly
-shortsightedness
-shortsome
-shortstaff
-shortstop
-shorttail
-Shortzy
-Shoshonean
-shoshonite
-shot
-shotbush
-shote
-shotgun
-shotless
-shotlike
-shotmaker
-shotman
-shotproof
-shotsman
-shotstar
-shott
-shotted
-shotten
-shotter
-shotty
-Shotweld
-shou
-should
-shoulder
-shouldered
-shoulderer
-shoulderette
-shouldering
-shouldna
-shouldnt
-shoupeltin
-shout
-shouter
-shouting
-shoutingly
-shoval
-shove
-shovegroat
-shovel
-shovelard
-shovelbill
-shovelboard
-shovelfish
-shovelful
-shovelhead
-shovelmaker
-shovelman
-shovelnose
-shovelweed
-shover
-show
-showable
-showance
-showbird
-showboard
-showboat
-showboater
-showboating
-showcase
-showdom
-showdown
-shower
-showerer
-showerful
-showeriness
-showerless
-showerlike
-showerproof
-showery
-showily
-showiness
-showing
-showish
-showless
-showman
-showmanism
-showmanry
-showmanship
-shown
-showpiece
-showroom
-showup
-showworthy
-showy
-showyard
-shoya
-shrab
-shraddha
-shradh
-shraf
-shrag
-shram
-shrank
-shrap
-shrapnel
-shrave
-shravey
-shreadhead
-shred
-shredcock
-shredder
-shredding
-shreddy
-shredless
-shredlike
-Shree
-shree
-shreeve
-shrend
-shrew
-shrewd
-shrewdish
-shrewdly
-shrewdness
-shrewdom
-shrewdy
-shrewish
-shrewishly
-shrewishness
-shrewlike
-shrewly
-shrewmouse
-shrewstruck
-shriek
-shrieker
-shriekery
-shriekily
-shriekiness
-shriekingly
-shriekproof
-shrieky
-shrieval
-shrievalty
-shrift
-shrike
-shrill
-shrilling
-shrillish
-shrillness
-shrilly
-shrimp
-shrimper
-shrimpfish
-shrimpi
-shrimpish
-shrimpishness
-shrimplike
-shrimpy
-shrinal
-Shrine
-shrine
-shrineless
-shrinelet
-shrinelike
-Shriner
-shrink
-shrinkable
-shrinkage
-shrinkageproof
-shrinker
-shrinkhead
-shrinking
-shrinkingly
-shrinkproof
-shrinky
-shrip
-shrite
-shrive
-shrivel
-shriven
-shriver
-shriving
-shroff
-shrog
-Shropshire
-shroud
-shrouded
-shrouding
-shroudless
-shroudlike
-shroudy
-Shrove
-shrove
-shrover
-Shrovetide
-shrub
-shrubbed
-shrubbery
-shrubbiness
-shrubbish
-shrubby
-shrubland
-shrubless
-shrublet
-shrublike
-shrubwood
-shruff
-shrug
-shruggingly
-shrunk
-shrunken
-shrups
-Shtokavski
-shtreimel
-Shu
-shuba
-shubunkin
-shuck
-shucker
-shucking
-shuckins
-shuckpen
-shucks
-shudder
-shudderful
-shudderiness
-shudderingly
-shuddersome
-shuddery
-shuff
-shuffle
-shuffleboard
-shufflecap
-shuffler
-shufflewing
-shuffling
-shufflingly
-shug
-Shuhali
-Shukria
-Shukulumbwe
-shul
-Shulamite
-shuler
-shulwaurs
-shumac
-shun
-Shunammite
-shune
-shunless
-shunnable
-shunner
-shunt
-shunter
-shunting
-shure
-shurf
-shush
-shusher
-Shuswap
-shut
-shutdown
-shutness
-shutoff
-Shutoku
-shutout
-shuttance
-shutten
-shutter
-shuttering
-shutterless
-shutterwise
-shutting
-shuttle
-shuttlecock
-shuttleheaded
-shuttlelike
-shuttlewise
-Shuvra
-shwanpan
-shy
-Shyam
-shydepoke
-shyer
-shyish
-Shylock
-Shylockism
-shyly
-shyness
-shyster
-si
-Sia
-siak
-sial
-sialaden
-sialadenitis
-sialadenoncus
-sialagogic
-sialagogue
-sialagoguic
-sialemesis
-Sialia
-sialic
-sialid
-Sialidae
-sialidan
-Sialis
-sialoangitis
-sialogenous
-sialoid
-sialolith
-sialolithiasis
-sialology
-sialorrhea
-sialoschesis
-sialosemeiology
-sialosis
-sialostenosis
-sialosyrinx
-sialozemia
-Siam
-siamang
-Siamese
-sib
-Sibbaldus
-sibbed
-sibbens
-sibber
-sibboleth
-sibby
-Siberian
-Siberic
-siberite
-sibilance
-sibilancy
-sibilant
-sibilantly
-sibilate
-sibilatingly
-sibilator
-sibilatory
-sibilous
-sibilus
-Sibiric
-sibling
-sibness
-sibrede
-sibship
-sibyl
-sibylesque
-sibylic
-sibylism
-sibylla
-sibylline
-sibyllist
-sic
-Sicambri
-Sicambrian
-Sicana
-Sicani
-Sicanian
-sicarian
-sicarious
-sicarius
-sicca
-siccaneous
-siccant
-siccate
-siccation
-siccative
-siccimeter
-siccity
-sice
-Sicel
-Siceliot
-Sicilian
-sicilian
-siciliana
-Sicilianism
-sicilica
-sicilicum
-sicilienne
-sicinnian
-sick
-sickbed
-sicken
-sickener
-sickening
-sickeningly
-sicker
-sickerly
-sickerness
-sickhearted
-sickish
-sickishly
-sickishness
-sickle
-sicklebill
-sickled
-sicklelike
-sickleman
-sicklemia
-sicklemic
-sicklepod
-sickler
-sicklerite
-sickless
-sickleweed
-sicklewise
-sicklewort
-sicklied
-sicklily
-sickliness
-sickling
-sickly
-sickness
-sicknessproof
-sickroom
-sicsac
-sicula
-sicular
-Siculi
-Siculian
-Sicyonian
-Sicyonic
-Sicyos
-Sid
-Sida
-Sidalcea
-sidder
-Siddha
-Siddhanta
-Siddhartha
-Siddhi
-siddur
-side
-sideage
-sidearm
-sideboard
-sidebone
-sidebones
-sideburns
-sidecar
-sidecarist
-sidecheck
-sided
-sidedness
-sideflash
-sidehead
-sidehill
-sidekicker
-sidelang
-sideless
-sideline
-sideling
-sidelings
-sidelingwise
-sidelong
-sidenote
-sidepiece
-sider
-sideral
-sideration
-siderealize
-sidereally
-siderean
-siderin
-siderism
-siderite
-sideritic
-Sideritis
-siderognost
-siderographic
-siderographical
-siderographist
-siderography
-siderolite
-siderology
-sideromagnetic
-sideromancy
-sideromelane
-sideronatrite
-sideronym
-sideroscope
-siderose
-siderosis
-siderostat
-siderostatic
-siderotechny
-siderous
-Sideroxylon
-sidership
-siderurgical
-siderurgy
-sides
-sidesaddle
-sideshake
-sideslip
-sidesman
-sidesplitter
-sidesplitting
-sidesplittingly
-sidesway
-sideswipe
-sideswiper
-sidetrack
-sidewalk
-sideward
-sidewards
-sideway
-sideways
-sidewinder
-sidewipe
-sidewiper
-sidewise
-sidhe
-sidi
-siding
-sidle
-sidler
-sidling
-sidlingly
-Sidney
-Sidonian
-Sidrach
-sidth
-sidy
-sie
-siege
-siegeable
-siegecraft
-siegenite
-sieger
-siegework
-Siegfried
-Sieglingia
-Siegmund
-Siegurd
-Siena
-Sienese
-sienna
-sier
-siering
-sierozem
-Sierra
-sierra
-sierran
-siesta
-siestaland
-Sieva
-sieve
-sieveful
-sievelike
-siever
-Sieversia
-sievings
-sievy
-sifac
-sifaka
-Sifatite
-sife
-siffilate
-siffle
-sifflement
-sifflet
-sifflot
-sift
-siftage
-sifted
-sifter
-sifting
-sig
-Siganidae
-Siganus
-sigatoka
-Sigaultian
-sigger
-sigh
-sigher
-sighful
-sighfully
-sighing
-sighingly
-sighingness
-sighless
-sighlike
-sight
-sightable
-sighted
-sighten
-sightening
-sighter
-sightful
-sightfulness
-sighthole
-sighting
-sightless
-sightlessly
-sightlessness
-sightlily
-sightliness
-sightly
-sightproof
-sightworthiness
-sightworthy
-sighty
-sigil
-sigilative
-Sigillaria
-Sigillariaceae
-sigillariaceous
-sigillarian
-sigillarid
-sigillarioid
-sigillarist
-sigillaroid
-sigillary
-sigillate
-sigillated
-sigillation
-sigillistic
-sigillographer
-sigillographical
-sigillography
-sigillum
-sigla
-siglarian
-siglos
-Sigma
-sigma
-sigmaspire
-sigmate
-sigmatic
-sigmation
-sigmatism
-sigmodont
-Sigmodontes
-sigmoid
-sigmoidal
-sigmoidally
-sigmoidectomy
-sigmoiditis
-sigmoidopexy
-sigmoidoproctostomy
-sigmoidorectostomy
-sigmoidoscope
-sigmoidoscopy
-sigmoidostomy
-Sigmund
-sign
-signable
-signal
-signalee
-signaler
-signalese
-signaletic
-signaletics
-signalism
-signalist
-signality
-signalize
-signally
-signalman
-signalment
-signary
-signatary
-signate
-signation
-signator
-signatory
-signatural
-signature
-signatureless
-signaturist
-signboard
-signee
-signer
-signet
-signetwise
-signifer
-signifiable
-significal
-significance
-significancy
-significant
-significantly
-significantness
-significate
-signification
-significatist
-significative
-significatively
-significativeness
-significator
-significatory
-significatrix
-significature
-significavit
-significian
-significs
-signifier
-signify
-signior
-signiorship
-signist
-signless
-signlike
-signman
-signorial
-signorship
-signory
-signpost
-signum
-signwriter
-Sigurd
-Sihasapa
-Sika
-sika
-sikar
-sikatch
-sike
-sikerly
-sikerness
-siket
-Sikh
-sikhara
-Sikhism
-sikhra
-Sikinnis
-Sikkimese
-Siksika
-sil
-silage
-silaginoid
-silane
-Silas
-silbergroschen
-silcrete
-sile
-silen
-Silenaceae
-silenaceous
-Silenales
-silence
-silenced
-silencer
-silency
-Silene
-sileni
-silenic
-silent
-silential
-silentiary
-silentious
-silentish
-silently
-silentness
-silenus
-silesia
-Silesian
-Siletz
-silex
-silexite
-silhouette
-silhouettist
-silhouettograph
-silica
-silicam
-silicane
-silicate
-silication
-silicatization
-Silicea
-silicean
-siliceocalcareous
-siliceofelspathic
-siliceofluoric
-siliceous
-silicic
-silicicalcareous
-silicicolous
-silicide
-silicidize
-siliciferous
-silicification
-silicifluoric
-silicifluoride
-silicify
-siliciophite
-silicious
-Silicispongiae
-silicium
-siliciuretted
-silicize
-silicle
-silico
-silicoacetic
-silicoalkaline
-silicoaluminate
-silicoarsenide
-silicocalcareous
-silicochloroform
-silicocyanide
-silicoethane
-silicoferruginous
-Silicoflagellata
-Silicoflagellatae
-silicoflagellate
-Silicoflagellidae
-silicofluoric
-silicofluoride
-silicohydrocarbon
-Silicoidea
-silicomagnesian
-silicomanganese
-silicomethane
-silicon
-silicone
-siliconize
-silicononane
-silicopropane
-silicosis
-Silicospongiae
-silicotalcose
-silicotic
-silicotitanate
-silicotungstate
-silicotungstic
-silicula
-silicular
-silicule
-siliculose
-siliculous
-silicyl
-Silipan
-siliqua
-siliquaceous
-siliquae
-Siliquaria
-Siliquariidae
-silique
-siliquiferous
-siliquiform
-siliquose
-siliquous
-silk
-silkalene
-silkaline
-silked
-silken
-silker
-silkflower
-silkgrower
-silkie
-silkily
-silkiness
-silklike
-silkman
-silkness
-silksman
-silktail
-silkweed
-silkwoman
-silkwood
-silkwork
-silkworks
-silkworm
-silky
-sill
-sillabub
-silladar
-Sillaginidae
-Sillago
-sillandar
-sillar
-siller
-Sillery
-sillibouk
-sillikin
-sillily
-sillimanite
-silliness
-sillock
-sillograph
-sillographer
-sillographist
-sillometer
-sillon
-silly
-sillyhood
-sillyhow
-sillyish
-sillyism
-sillyton
-silo
-siloist
-Silpha
-silphid
-Silphidae
-silphium
-silt
-siltage
-siltation
-silting
-siltlike
-silty
-silundum
-Silures
-Silurian
-Siluric
-silurid
-Siluridae
-Siluridan
-siluroid
-Siluroidei
-Silurus
-silva
-silvan
-silvanity
-silvanry
-Silvanus
-silvendy
-silver
-silverback
-silverbeater
-silverbelly
-silverberry
-silverbill
-silverboom
-silverbush
-silvered
-silverer
-silvereye
-silverfin
-silverfish
-silverhead
-silverily
-silveriness
-silvering
-silverish
-silverite
-silverize
-silverizer
-silverleaf
-silverless
-silverlike
-silverling
-silverly
-silvern
-silverness
-silverpoint
-silverrod
-silverside
-silversides
-silverskin
-silversmith
-silversmithing
-silverspot
-silvertail
-silvertip
-silvertop
-silvervine
-silverware
-silverweed
-silverwing
-silverwood
-silverwork
-silverworker
-silvery
-Silvester
-Silvia
-silvical
-silvicolous
-silvics
-silvicultural
-silviculturally
-silviculture
-silviculturist
-Silvius
-Silybum
-silyl
-Sim
-sima
-Simaba
-simal
-simar
-Simarouba
-Simaroubaceae
-simaroubaceous
-simball
-simbil
-simblin
-simblot
-Simblum
-sime
-Simeon
-Simeonism
-Simeonite
-Simia
-simiad
-simial
-simian
-simianity
-simiesque
-Simiidae
-Simiinae
-similar
-similarity
-similarize
-similarly
-similative
-simile
-similimum
-similiter
-similitive
-similitude
-similitudinize
-simility
-similize
-similor
-simioid
-simious
-simiousness
-simity
-simkin
-simlin
-simling
-simmer
-simmeringly
-simmon
-simnel
-simnelwise
-simoleon
-Simon
-simoniac
-simoniacal
-simoniacally
-Simonian
-Simonianism
-simonious
-simonism
-Simonist
-simonist
-simony
-simool
-simoom
-simoon
-Simosaurus
-simous
-simp
-simpai
-simper
-simperer
-simperingly
-simple
-simplehearted
-simpleheartedly
-simpleheartedness
-simpleness
-simpler
-simpleton
-simpletonian
-simpletonianism
-simpletonic
-simpletonish
-simpletonism
-simplex
-simplexed
-simplexity
-simplicident
-Simplicidentata
-simplicidentate
-simplicist
-simplicitarian
-simplicity
-simplicize
-simplification
-simplificative
-simplificator
-simplified
-simplifiedly
-simplifier
-simplify
-simplism
-simplist
-simplistic
-simply
-simsim
-simson
-simulacra
-simulacral
-simulacre
-simulacrize
-simulacrum
-simulance
-simulant
-simular
-simulate
-simulation
-simulative
-simulatively
-simulator
-simulatory
-simulcast
-simuler
-simuliid
-Simuliidae
-simulioid
-Simulium
-simultaneity
-simultaneous
-simultaneously
-simultaneousness
-sin
-sina
-Sinae
-Sinaean
-Sinaic
-sinaite
-Sinaitic
-sinal
-sinalbin
-Sinaloa
-sinamay
-sinamine
-sinapate
-sinapic
-sinapine
-sinapinic
-Sinapis
-sinapis
-sinapism
-sinapize
-sinapoline
-sinarchism
-sinarchist
-sinarquism
-sinarquist
-sinarquista
-sinawa
-sincaline
-since
-sincere
-sincerely
-sincereness
-sincerity
-sincipital
-sinciput
-sind
-sinder
-Sindhi
-sindle
-sindoc
-sindon
-sindry
-sine
-sinecural
-sinecure
-sinecureship
-sinecurism
-sinecurist
-Sinesian
-sinew
-sinewed
-sinewiness
-sinewless
-sinewous
-sinewy
-sinfonia
-sinfonie
-sinfonietta
-sinful
-sinfully
-sinfulness
-sing
-singability
-singable
-singableness
-singally
-singarip
-singe
-singed
-singeing
-singeingly
-singer
-singey
-Singfo
-singh
-Singhalese
-singillatim
-singing
-singingly
-singkamas
-single
-singlebar
-singled
-singlehanded
-singlehandedly
-singlehandedness
-singlehearted
-singleheartedly
-singleheartedness
-singlehood
-singleness
-singler
-singles
-singlestick
-singlesticker
-singlet
-singleton
-singletree
-singlings
-singly
-Singpho
-Singsing
-singsong
-singsongy
-Singspiel
-singspiel
-singstress
-singular
-singularism
-singularist
-singularity
-singularization
-singularize
-singularly
-singularness
-singult
-singultous
-singultus
-sinh
-Sinhalese
-Sinian
-Sinic
-Sinicism
-Sinicization
-Sinicize
-Sinico
-Sinification
-Sinify
-sinigrin
-sinigrinase
-sinigrosid
-sinigroside
-Sinisian
-Sinism
-sinister
-sinisterly
-sinisterness
-sinisterwise
-sinistrad
-sinistral
-sinistrality
-sinistrally
-sinistration
-sinistrin
-sinistrocerebral
-sinistrocular
-sinistrodextral
-sinistrogyrate
-sinistrogyration
-sinistrogyric
-sinistromanual
-sinistrorsal
-sinistrorsally
-sinistrorse
-sinistrous
-sinistrously
-sinistruous
-Sinite
-Sinitic
-sink
-sinkable
-sinkage
-sinker
-sinkerless
-sinkfield
-sinkhead
-sinkhole
-sinking
-Sinkiuse
-sinkless
-sinklike
-sinkroom
-sinkstone
-sinky
-sinless
-sinlessly
-sinlessness
-sinlike
-sinnable
-sinnableness
-sinnen
-sinner
-sinneress
-sinnership
-sinnet
-Sinningia
-sinningly
-sinningness
-sinoatrial
-sinoauricular
-Sinogram
-sinoidal
-Sinolog
-Sinologer
-Sinological
-Sinologist
-Sinologue
-Sinology
-sinomenine
-Sinonism
-Sinophile
-Sinophilism
-sinopia
-Sinopic
-sinopite
-sinople
-sinproof
-Sinsiga
-sinsion
-sinsring
-sinsyne
-sinter
-Sinto
-sintoc
-Sintoism
-Sintoist
-Sintsink
-Sintu
-sinuate
-sinuated
-sinuatedentate
-sinuately
-sinuation
-sinuatocontorted
-sinuatodentate
-sinuatodentated
-sinuatopinnatifid
-sinuatoserrated
-sinuatoundulate
-sinuatrial
-sinuauricular
-sinuitis
-sinuose
-sinuosely
-sinuosity
-sinuous
-sinuously
-sinuousness
-Sinupallia
-sinupallial
-Sinupallialia
-Sinupalliata
-sinupalliate
-sinus
-sinusal
-sinusitis
-sinuslike
-sinusoid
-sinusoidal
-sinusoidally
-sinuventricular
-sinward
-siol
-Sion
-sion
-Sionite
-Siouan
-Sioux
-sip
-sipage
-sipe
-siper
-siphoid
-siphon
-siphonaceous
-siphonage
-siphonal
-Siphonales
-Siphonaptera
-siphonapterous
-Siphonaria
-siphonariid
-Siphonariidae
-Siphonata
-siphonate
-Siphoneae
-siphoneous
-siphonet
-siphonia
-siphonial
-Siphoniata
-siphonic
-Siphonifera
-siphoniferous
-siphoniform
-siphonium
-siphonless
-siphonlike
-Siphonobranchiata
-siphonobranchiate
-Siphonocladales
-Siphonocladiales
-siphonogam
-Siphonogama
-siphonogamic
-siphonogamous
-siphonogamy
-siphonoglyph
-siphonoglyphe
-siphonognathid
-Siphonognathidae
-siphonognathous
-Siphonognathus
-Siphonophora
-siphonophoran
-siphonophore
-siphonophorous
-siphonoplax
-siphonopore
-siphonorhinal
-siphonorhine
-siphonosome
-siphonostele
-siphonostelic
-siphonostely
-Siphonostoma
-Siphonostomata
-siphonostomatous
-siphonostome
-siphonostomous
-siphonozooid
-siphonula
-siphorhinal
-siphorhinian
-siphosome
-siphuncle
-siphuncled
-siphuncular
-Siphunculata
-siphunculate
-siphunculated
-Sipibo
-sipid
-sipidity
-Siping
-siping
-sipling
-sipper
-sippet
-sippingly
-sippio
-Sipunculacea
-sipunculacean
-sipunculid
-Sipunculida
-sipunculoid
-Sipunculoidea
-Sipunculus
-sipylite
-Sir
-sir
-sircar
-sirdar
-sirdarship
-sire
-Siredon
-sireless
-siren
-sirene
-Sirenia
-sirenian
-sirenic
-sirenical
-sirenically
-Sirenidae
-sirening
-sirenize
-sirenlike
-sirenoid
-Sirenoidea
-Sirenoidei
-sireny
-sireship
-siress
-sirgang
-Sirian
-sirian
-Sirianian
-siriasis
-siricid
-Siricidae
-Siricoidea
-sirih
-siriometer
-Sirione
-siris
-Sirius
-sirkeer
-sirki
-sirky
-sirloin
-sirloiny
-Sirmian
-Sirmuellera
-siroc
-sirocco
-siroccoish
-siroccoishly
-sirpea
-sirple
-sirpoon
-sirrah
-sirree
-sirship
-siruaballi
-siruelas
-sirup
-siruped
-siruper
-sirupy
-Siryan
-Sis
-sis
-sisal
-siscowet
-sise
-sisel
-siserara
-siserary
-siserskite
-sish
-sisham
-sisi
-siskin
-Sisley
-sismotherapy
-siss
-Sisseton
-sissification
-sissify
-sissiness
-sissoo
-Sissu
-sissy
-sissyish
-sissyism
-sist
-Sistani
-sister
-sisterhood
-sisterin
-sistering
-sisterize
-sisterless
-sisterlike
-sisterliness
-sisterly
-sistern
-Sistine
-sistle
-sistomensin
-sistrum
-Sistrurus
-Sisymbrium
-Sisyphean
-Sisyphian
-Sisyphides
-Sisyphism
-Sisyphist
-Sisyphus
-Sisyrinchium
-sisyrinchium
-sit
-Sita
-sitao
-sitar
-sitatunga
-sitch
-site
-sitfast
-sith
-sithcund
-sithe
-sithement
-sithence
-sithens
-sitient
-sitio
-sitiology
-sitiomania
-sitiophobia
-Sitka
-Sitkan
-sitology
-sitomania
-Sitophilus
-sitophobia
-sitophobic
-sitosterin
-sitosterol
-sitotoxism
-Sitta
-sittee
-sitten
-sitter
-Sittidae
-Sittinae
-sittine
-sitting
-sittringy
-situal
-situate
-situated
-situation
-situational
-situla
-situlae
-situs
-Sium
-Siusi
-Siuslaw
-Siva
-siva
-Sivaism
-Sivaist
-Sivaistic
-Sivaite
-Sivan
-Sivapithecus
-sivathere
-Sivatheriidae
-Sivatheriinae
-sivatherioid
-Sivatherium
-siver
-sivvens
-Siwan
-Siwash
-siwash
-six
-sixain
-sixer
-sixfoil
-sixfold
-sixhaend
-sixhynde
-sixpence
-sixpenny
-sixpennyworth
-sixscore
-sixsome
-sixte
-sixteen
-sixteener
-sixteenfold
-sixteenmo
-sixteenth
-sixteenthly
-sixth
-sixthet
-sixthly
-sixtieth
-Sixtowns
-Sixtus
-sixty
-sixtyfold
-sixtypenny
-sizable
-sizableness
-sizably
-sizal
-sizar
-sizarship
-size
-sizeable
-sizeableness
-sized
-sizeman
-sizer
-sizes
-siziness
-sizing
-sizy
-sizygia
-sizygium
-sizz
-sizzard
-sizzing
-sizzle
-sizzling
-sizzlingly
-Sjaak
-sjambok
-Sjouke
-skaddle
-skaff
-skaffie
-skag
-skaillie
-skainsmate
-skair
-skaitbird
-skal
-skalawag
-skaldship
-skance
-Skanda
-skandhas
-skart
-skasely
-Skat
-skat
-skate
-skateable
-skater
-skatikas
-skatiku
-skating
-skatist
-skatole
-skatosine
-skatoxyl
-skaw
-skean
-skeanockle
-skedaddle
-skedaddler
-skedge
-skedgewith
-skedlock
-skee
-skeed
-skeeg
-skeel
-skeeling
-skeely
-skeen
-skeenyie
-skeer
-skeered
-skeery
-skeesicks
-skeet
-Skeeter
-skeeter
-skeezix
-Skef
-skeg
-skegger
-skeif
-skeigh
-skeily
-skein
-skeiner
-skeipp
-skel
-skelder
-skelderdrake
-skeldrake
-skeletal
-skeletin
-skeletogenous
-skeletogeny
-skeletomuscular
-skeleton
-skeletonian
-skeletonic
-skeletonization
-skeletonize
-skeletonizer
-skeletonless
-skeletonweed
-skeletony
-skelf
-skelgoose
-skelic
-skell
-skellat
-skeller
-skelloch
-skellum
-skelly
-skelp
-skelper
-skelpin
-skelping
-skelter
-Skeltonian
-Skeltonic
-Skeltonical
-Skeltonics
-skemmel
-skemp
-sken
-skene
-skeo
-skeough
-skep
-skepful
-skeppist
-skeppund
-skeptic
-skeptical
-skeptically
-skepticalness
-skepticism
-skepticize
-sker
-skere
-skerret
-skerrick
-skerry
-sketch
-sketchability
-sketchable
-sketchbook
-sketchee
-sketcher
-sketchily
-sketchiness
-sketching
-sketchingly
-sketchist
-sketchlike
-sketchy
-skete
-sketiotai
-skeuomorph
-skeuomorphic
-skevish
-skew
-skewback
-skewbacked
-skewbald
-skewed
-skewer
-skewerer
-skewerwood
-skewings
-skewl
-skewly
-skewness
-skewwhiff
-skewwise
-skewy
-skey
-skeyting
-ski
-skiagram
-skiagraph
-skiagrapher
-skiagraphic
-skiagraphical
-skiagraphically
-skiagraphy
-skiameter
-skiametry
-skiapod
-skiapodous
-skiascope
-skiascopy
-skibby
-skibslast
-skice
-skid
-skidded
-skidder
-skidding
-skiddingly
-skiddoo
-skiddy
-Skidi
-skidpan
-skidproof
-skidway
-skied
-skieppe
-skiepper
-skier
-skies
-skiff
-skiffless
-skiffling
-skift
-skiing
-skijore
-skijorer
-skijoring
-skil
-skilder
-skildfel
-skilfish
-skill
-skillagalee
-skilled
-skillenton
-skillessness
-skillet
-skillful
-skillfully
-skillfulness
-skilligalee
-skilling
-skillion
-skilly
-skilpot
-skilts
-skim
-skimback
-skime
-skimmed
-skimmer
-skimmerton
-Skimmia
-skimming
-skimmingly
-skimmington
-skimmity
-skimp
-skimpily
-skimpiness
-skimpingly
-skimpy
-skin
-skinbound
-skinch
-skinflint
-skinflintily
-skinflintiness
-skinflinty
-skinful
-skink
-skinker
-skinking
-skinkle
-skinless
-skinlike
-skinned
-skinner
-skinnery
-skinniness
-skinning
-skinny
-skintight
-skinworm
-skiogram
-skiograph
-skiophyte
-Skip
-skip
-skipbrain
-Skipetar
-skipjack
-skipjackly
-skipkennel
-skipman
-skippable
-skippel
-skipper
-skippered
-skippership
-skippery
-skippet
-skipping
-skippingly
-skipple
-skippund
-skippy
-skiptail
-skirl
-skirlcock
-skirling
-skirmish
-skirmisher
-skirmishing
-skirmishingly
-skirp
-skirr
-skirreh
-skirret
-skirt
-skirtboard
-skirted
-skirter
-skirting
-skirtingly
-skirtless
-skirtlike
-skirty
-skirwhit
-skirwort
-skit
-skite
-skiter
-skither
-Skitswish
-Skittaget
-Skittagetan
-skitter
-skittish
-skittishly
-skittishness
-skittle
-skittled
-skittler
-skittles
-skitty
-skittyboot
-skiv
-skive
-skiver
-skiverwood
-skiving
-skivvies
-sklate
-sklater
-sklent
-skleropelite
-sklinter
-skoal
-Skodaic
-skogbolite
-Skoinolon
-skokiaan
-Skokomish
-skomerite
-skoo
-skookum
-Skopets
-skoptsy
-skout
-skraeling
-skraigh
-skrike
-skrimshander
-skrupul
-skua
-skulduggery
-skulk
-skulker
-skulking
-skulkingly
-skull
-skullbanker
-skullcap
-skulled
-skullery
-skullfish
-skullful
-skully
-skulp
-skun
-skunk
-skunkbill
-skunkbush
-skunkdom
-skunkery
-skunkhead
-skunkish
-skunklet
-skunktop
-skunkweed
-skunky
-Skupshtina
-skuse
-skutterudite
-sky
-skybal
-skycraft
-Skye
-skyey
-skyful
-skyish
-skylark
-skylarker
-skyless
-skylight
-skylike
-skylook
-skyman
-skyphoi
-skyphos
-skyplast
-skyre
-skyrgaliard
-skyrocket
-skyrockety
-skysail
-skyscape
-skyscraper
-skyscraping
-skyshine
-skyugle
-skyward
-skywards
-skyway
-skywrite
-skywriter
-skywriting
-sla
-slab
-slabbed
-slabber
-slabberer
-slabbery
-slabbiness
-slabbing
-slabby
-slabman
-slabness
-slabstone
-slack
-slackage
-slacked
-slacken
-slackener
-slacker
-slackerism
-slacking
-slackingly
-slackly
-slackness
-slad
-sladang
-slade
-slae
-slag
-slaggability
-slaggable
-slagger
-slagging
-slaggy
-slagless
-slaglessness
-slagman
-slain
-slainte
-slaister
-slaistery
-slait
-slake
-slakeable
-slakeless
-slaker
-slaking
-slaky
-slam
-slammakin
-slammerkin
-slammock
-slammocking
-slammocky
-slamp
-slampamp
-slampant
-slander
-slanderer
-slanderful
-slanderfully
-slandering
-slanderingly
-slanderous
-slanderously
-slanderousness
-slanderproof
-slane
-slang
-slangily
-slanginess
-slangish
-slangishly
-slangism
-slangkop
-slangous
-slangster
-slanguage
-slangular
-slangy
-slank
-slant
-slantindicular
-slantindicularly
-slanting
-slantingly
-slantingways
-slantly
-slantways
-slantwise
-slap
-slapdash
-slapdashery
-slape
-slaphappy
-slapjack
-slapper
-slapping
-slapstick
-slapsticky
-slare
-slart
-slarth
-Slartibartfast
-slash
-slashed
-slasher
-slashing
-slashingly
-slashy
-slat
-slatch
-slate
-slateful
-slatelike
-slatemaker
-slatemaking
-slater
-slateworks
-slateyard
-slath
-slather
-slatify
-slatiness
-slating
-slatish
-slatted
-slatter
-slattern
-slatternish
-slatternliness
-slatternly
-slatternness
-slattery
-slatting
-slaty
-slaughter
-slaughterer
-slaughterhouse
-slaughteringly
-slaughterman
-slaughterous
-slaughterously
-slaughteryard
-slaum
-Slav
-Slavdom
-Slave
-slave
-slaveborn
-slaved
-slaveholder
-slaveholding
-slaveland
-slaveless
-slavelet
-slavelike
-slaveling
-slavemonger
-slaveowner
-slaveownership
-slavepen
-slaver
-slaverer
-slavering
-slaveringly
-slavery
-Slavey
-slavey
-Slavi
-Slavian
-Slavic
-Slavicism
-Slavicize
-Slavification
-Slavify
-slavikite
-slaving
-Slavish
-slavish
-slavishly
-slavishness
-Slavism
-Slavist
-Slavistic
-Slavization
-Slavize
-slavocracy
-slavocrat
-slavocratic
-Slavonian
-Slavonianize
-Slavonic
-Slavonically
-Slavonicize
-Slavonish
-Slavonism
-Slavonization
-Slavonize
-Slavophile
-Slavophilism
-Slavophobe
-Slavophobist
-slaw
-slay
-slayable
-slayer
-slaying
-sleathy
-sleave
-sleaved
-sleaziness
-sleazy
-Sleb
-sleck
-sled
-sledded
-sledder
-sledding
-sledful
-sledge
-sledgeless
-sledgemeter
-sledger
-sledging
-sledlike
-slee
-sleech
-sleechy
-sleek
-sleeken
-sleeker
-sleeking
-sleekit
-sleekly
-sleekness
-sleeky
-sleep
-sleeper
-sleepered
-sleepful
-sleepfulness
-sleepify
-sleepily
-sleepiness
-sleeping
-sleepingly
-sleepland
-sleepless
-sleeplessly
-sleeplessness
-sleeplike
-sleepmarken
-sleepproof
-sleepry
-sleepwaker
-sleepwaking
-sleepwalk
-sleepwalker
-sleepwalking
-sleepward
-sleepwort
-sleepy
-sleepyhead
-sleer
-sleet
-sleetiness
-sleeting
-sleetproof
-sleety
-sleeve
-sleeveband
-sleeveboard
-sleeved
-sleeveen
-sleevefish
-sleeveful
-sleeveless
-sleevelessness
-sleevelet
-sleevelike
-sleever
-sleigh
-sleigher
-sleighing
-sleight
-sleightful
-sleighty
-slendang
-slender
-slenderish
-slenderize
-slenderly
-slenderness
-slent
-slepez
-slept
-slete
-sleuth
-sleuthdog
-sleuthful
-sleuthhound
-sleuthlike
-slew
-slewed
-slewer
-slewing
-sley
-sleyer
-slice
-sliceable
-sliced
-slicer
-slich
-slicht
-slicing
-slicingly
-slick
-slicken
-slickens
-slickenside
-slicker
-slickered
-slickery
-slicking
-slickly
-slickness
-slid
-slidable
-slidableness
-slidably
-slidage
-slidden
-slidder
-sliddery
-slide
-slideable
-slideableness
-slideably
-slided
-slidehead
-slideman
-slideproof
-slider
-slideway
-sliding
-slidingly
-slidingness
-slidometer
-slifter
-slight
-slighted
-slighter
-slightily
-slightiness
-slighting
-slightingly
-slightish
-slightly
-slightness
-slighty
-slim
-slime
-slimeman
-slimer
-slimily
-sliminess
-slimish
-slimishness
-slimly
-slimmish
-slimness
-slimpsy
-slimsy
-slimy
-sline
-sling
-slingball
-slinge
-slinger
-slinging
-slingshot
-slingsman
-slingstone
-slink
-slinker
-slinkily
-slinkiness
-slinking
-slinkingly
-slinkskin
-slinkweed
-slinky
-slip
-slipback
-slipband
-slipboard
-slipbody
-slipcase
-slipcoach
-slipcoat
-slipe
-slipgibbet
-sliphorn
-sliphouse
-slipknot
-slipless
-slipman
-slipover
-slippage
-slipped
-slipper
-slippered
-slipperflower
-slipperily
-slipperiness
-slipperlike
-slipperweed
-slipperwort
-slippery
-slipperyback
-slipperyroot
-slippiness
-slipping
-slippingly
-slipproof
-slippy
-slipshod
-slipshoddiness
-slipshoddy
-slipshodness
-slipshoe
-slipslap
-slipslop
-slipsloppish
-slipsloppism
-slipsole
-slipstep
-slipstring
-sliptopped
-slipway
-slirt
-slish
-slit
-slitch
-slite
-slither
-slithering
-slitheroo
-slithers
-slithery
-slithy
-slitless
-slitlike
-slitshell
-slitted
-slitter
-slitting
-slitty
-slitwise
-slive
-sliver
-sliverer
-sliverlike
-sliverproof
-slivery
-sliving
-slivovitz
-sloan
-Sloanea
-slob
-slobber
-slobberchops
-slobberer
-slobbers
-slobbery
-slobby
-slock
-slocken
-slod
-slodder
-slodge
-slodger
-sloe
-sloeberry
-sloebush
-sloetree
-slog
-slogan
-sloganeer
-sloganize
-slogger
-slogging
-slogwood
-sloka
-sloke
-slommock
-slon
-slone
-slonk
-sloo
-sloom
-sloomy
-sloop
-sloopman
-sloosh
-slop
-slopdash
-slope
-sloped
-slopely
-slopeness
-sloper
-slopeways
-slopewise
-sloping
-slopingly
-slopingness
-slopmaker
-slopmaking
-sloppage
-slopped
-sloppery
-sloppily
-sloppiness
-slopping
-sloppy
-slops
-slopseller
-slopselling
-slopshop
-slopstone
-slopwork
-slopworker
-slopy
-slorp
-slosh
-slosher
-sloshily
-sloshiness
-sloshy
-slot
-slote
-sloted
-sloth
-slothful
-slothfully
-slothfulness
-slothound
-slotted
-slotter
-slottery
-slotting
-slotwise
-slouch
-sloucher
-slouchily
-slouchiness
-slouching
-slouchingly
-slouchy
-slough
-sloughiness
-sloughy
-slour
-sloush
-Slovak
-Slovakian
-Slovakish
-sloven
-Slovene
-Slovenian
-Slovenish
-slovenlike
-slovenliness
-slovenly
-slovenwood
-Slovintzi
-slow
-slowbellied
-slowbelly
-slowdown
-slowgoing
-slowheaded
-slowhearted
-slowheartedness
-slowhound
-slowish
-slowly
-slowmouthed
-slowpoke
-slowrie
-slows
-slowworm
-sloyd
-slub
-slubber
-slubberdegullion
-slubberer
-slubbering
-slubberingly
-slubberly
-slubbery
-slubbing
-slubby
-slud
-sludder
-sluddery
-sludge
-sludged
-sludger
-sludgy
-slue
-sluer
-slug
-slugabed
-sluggard
-sluggarding
-sluggardize
-sluggardliness
-sluggardly
-sluggardness
-sluggardry
-slugged
-slugger
-slugging
-sluggingly
-sluggish
-sluggishly
-sluggishness
-sluggy
-sluglike
-slugwood
-sluice
-sluicelike
-sluicer
-sluiceway
-sluicing
-sluicy
-sluig
-sluit
-slum
-slumber
-slumberer
-slumberful
-slumbering
-slumberingly
-slumberland
-slumberless
-slumberous
-slumberously
-slumberousness
-slumberproof
-slumbersome
-slumbery
-slumbrous
-slumdom
-slumgullion
-slumgum
-slumland
-slummage
-slummer
-slumminess
-slumming
-slummock
-slummocky
-slummy
-slump
-slumpproof
-slumproof
-slumpwork
-slumpy
-slumward
-slumwise
-slung
-slungbody
-slunge
-slunk
-slunken
-slur
-slurbow
-slurp
-slurry
-slush
-slusher
-slushily
-slushiness
-slushy
-slut
-slutch
-slutchy
-sluther
-sluthood
-slutter
-sluttery
-sluttikin
-sluttish
-sluttishly
-sluttishness
-slutty
-sly
-slyboots
-slyish
-slyly
-slyness
-slype
-sma
-smachrie
-smack
-smackee
-smacker
-smackful
-smacking
-smackingly
-smacksman
-smaik
-Smalcaldian
-Smalcaldic
-small
-smallage
-smallclothes
-smallcoal
-smallen
-smaller
-smallhearted
-smallholder
-smalling
-smallish
-smallmouth
-smallmouthed
-smallness
-smallpox
-smalls
-smallsword
-smalltime
-smallware
-smally
-smalm
-smalt
-smalter
-smaltine
-smaltite
-smalts
-smaragd
-smaragdine
-smaragdite
-smaragdus
-smarm
-smarmy
-smart
-smarten
-smarting
-smartingly
-smartish
-smartism
-smartless
-smartly
-smartness
-smartweed
-smarty
-smash
-smashable
-smashage
-smashboard
-smasher
-smashery
-smashing
-smashingly
-smashment
-smashup
-smatter
-smatterer
-smattering
-smatteringly
-smattery
-smaze
-smear
-smearcase
-smeared
-smearer
-smeariness
-smearless
-smeary
-smectic
-smectis
-smectite
-Smectymnuan
-Smectymnuus
-smeddum
-smee
-smeech
-smeek
-smeeky
-smeer
-smeeth
-smegma
-smell
-smellable
-smellage
-smelled
-smeller
-smellful
-smellfungi
-smellfungus
-smelliness
-smelling
-smellproof
-smellsome
-smelly
-smelt
-smelter
-smelterman
-smeltery
-smeltman
-smeth
-smethe
-smeuse
-smew
-smich
-smicker
-smicket
-smiddie
-smiddum
-smidge
-smidgen
-smifligate
-smifligation
-smiggins
-Smilacaceae
-smilacaceous
-Smilaceae
-smilaceous
-smilacin
-Smilacina
-Smilax
-smilax
-smile
-smileable
-smileage
-smileful
-smilefulness
-smileless
-smilelessly
-smilelessness
-smilemaker
-smilemaking
-smileproof
-smiler
-smilet
-smiling
-smilingly
-smilingness
-Smilodon
-smily
-Smintheus
-Sminthian
-sminthurid
-Sminthuridae
-Sminthurus
-smirch
-smircher
-smirchless
-smirchy
-smiris
-smirk
-smirker
-smirking
-smirkingly
-smirkish
-smirkle
-smirkly
-smirky
-smirtle
-smit
-smitch
-smite
-smiter
-smith
-smitham
-smithcraft
-smither
-smithereens
-smithery
-Smithian
-Smithianism
-smithing
-smithite
-Smithsonian
-smithsonite
-smithwork
-smithy
-smithydander
-smiting
-smitten
-smitting
-smock
-smocker
-smockface
-smocking
-smockless
-smocklike
-smog
-smokables
-smoke
-smokeable
-smokebox
-smokebush
-smoked
-smokefarthings
-smokehouse
-smokejack
-smokeless
-smokelessly
-smokelessness
-smokelike
-smokeproof
-smoker
-smokery
-smokestack
-smokestone
-smoketight
-smokewood
-smokily
-smokiness
-smoking
-smokish
-smoky
-smokyseeming
-smolder
-smolderingness
-smolt
-smooch
-smoochy
-smoodge
-smoodger
-smook
-smoorich
-Smoos
-smoot
-smooth
-smoothable
-smoothback
-smoothbore
-smoothbored
-smoothcoat
-smoothen
-smoother
-smoothification
-smoothify
-smoothing
-smoothingly
-smoothish
-smoothly
-smoothmouthed
-smoothness
-smoothpate
-smopple
-smore
-smorgasbord
-smote
-smother
-smotherable
-smotheration
-smothered
-smotherer
-smotheriness
-smothering
-smotheringly
-smothery
-smotter
-smouch
-smoucher
-smous
-smouse
-smouser
-smout
-smriti
-smudge
-smudged
-smudgedly
-smudgeless
-smudgeproof
-smudger
-smudgily
-smudginess
-smudgy
-smug
-smuggery
-smuggish
-smuggishly
-smuggishness
-smuggle
-smuggleable
-smuggler
-smugglery
-smuggling
-smugism
-smugly
-smugness
-smuisty
-smur
-smurr
-smurry
-smuse
-smush
-smut
-smutch
-smutchin
-smutchless
-smutchy
-smutproof
-smutted
-smutter
-smuttily
-smuttiness
-smutty
-Smyrna
-Smyrnaite
-Smyrnean
-Smyrniot
-Smyrniote
-smyth
-smytrie
-snab
-snabbie
-snabble
-snack
-snackle
-snackman
-snaff
-snaffle
-snaffles
-snafu
-snag
-snagbush
-snagged
-snagger
-snaggled
-snaggletooth
-snaggy
-snagrel
-snail
-snaileater
-snailery
-snailfish
-snailflower
-snailish
-snailishly
-snaillike
-snails
-snaily
-snaith
-snake
-snakebark
-snakeberry
-snakebird
-snakebite
-snakefish
-snakeflower
-snakehead
-snakeholing
-snakeleaf
-snakeless
-snakelet
-snakelike
-snakeling
-snakemouth
-snakeneck
-snakeology
-snakephobia
-snakepiece
-snakepipe
-snakeproof
-snaker
-snakeroot
-snakery
-snakeship
-snakeskin
-snakestone
-snakeweed
-snakewise
-snakewood
-snakeworm
-snakewort
-snakily
-snakiness
-snaking
-snakish
-snaky
-snap
-snapback
-snapbag
-snapberry
-snapdragon
-snape
-snaper
-snaphead
-snapholder
-snapjack
-snapless
-snappable
-snapped
-snapper
-snappily
-snappiness
-snapping
-snappingly
-snappish
-snappishly
-snappishness
-snapps
-snappy
-snaps
-snapsack
-snapshot
-snapshotter
-snapweed
-snapwood
-snapwort
-snapy
-snare
-snareless
-snarer
-snaringly
-snark
-snarl
-snarler
-snarleyyow
-snarlingly
-snarlish
-snarly
-snary
-snaste
-snatch
-snatchable
-snatched
-snatcher
-snatchily
-snatching
-snatchingly
-snatchproof
-snatchy
-snath
-snathe
-snavel
-snavvle
-snaw
-snead
-sneak
-sneaker
-sneakiness
-sneaking
-sneakingly
-sneakingness
-sneakish
-sneakishly
-sneakishness
-sneaksby
-sneaksman
-sneaky
-sneap
-sneath
-sneathe
-sneb
-sneck
-sneckdraw
-sneckdrawing
-sneckdrawn
-snecker
-snecket
-sned
-snee
-sneer
-sneerer
-sneerful
-sneerfulness
-sneering
-sneeringly
-sneerless
-sneery
-sneesh
-sneeshing
-sneest
-sneesty
-sneeze
-sneezeless
-sneezeproof
-sneezer
-sneezeweed
-sneezewood
-sneezewort
-sneezing
-sneezy
-snell
-snelly
-Snemovna
-snerp
-snew
-snib
-snibble
-snibbled
-snibbler
-snibel
-snicher
-snick
-snickdraw
-snickdrawing
-snicker
-snickering
-snickeringly
-snickersnee
-snicket
-snickey
-snickle
-sniddle
-snide
-snideness
-sniff
-sniffer
-sniffily
-sniffiness
-sniffing
-sniffingly
-sniffish
-sniffishness
-sniffle
-sniffler
-sniffly
-sniffy
-snift
-snifter
-snifty
-snig
-snigger
-sniggerer
-sniggering
-sniggle
-sniggler
-sniggoringly
-snip
-snipe
-snipebill
-snipefish
-snipelike
-sniper
-sniperscope
-sniping
-snipish
-snipjack
-snipnose
-snipocracy
-snipper
-snippersnapper
-snipperty
-snippet
-snippetiness
-snippety
-snippiness
-snipping
-snippish
-snippy
-snipsnapsnorum
-sniptious
-snipy
-snirl
-snirt
-snirtle
-snitch
-snitcher
-snite
-snithe
-snithy
-snittle
-snivel
-sniveled
-sniveler
-sniveling
-snively
-snivy
-snob
-snobber
-snobbery
-snobbess
-snobbing
-snobbish
-snobbishly
-snobbishness
-snobbism
-snobby
-snobdom
-snobling
-snobocracy
-snobocrat
-snobographer
-snobography
-snobologist
-snobonomer
-snobscat
-snocher
-snock
-snocker
-snod
-snodly
-snoek
-snoeking
-snog
-snoga
-Snohomish
-snoke
-Snonowas
-snood
-snooded
-snooding
-snook
-snooker
-snookered
-snoop
-snooper
-snooperscope
-snoopy
-snoose
-snoot
-snootily
-snootiness
-snooty
-snoove
-snooze
-snoozer
-snooziness
-snoozle
-snoozy
-snop
-Snoqualmie
-Snoquamish
-snore
-snoreless
-snorer
-snoring
-snoringly
-snork
-snorkel
-snorker
-snort
-snorter
-snorting
-snortingly
-snortle
-snorty
-snot
-snotter
-snottily
-snottiness
-snotty
-snouch
-snout
-snouted
-snouter
-snoutish
-snoutless
-snoutlike
-snouty
-Snow
-snow
-Snowball
-snowball
-snowbank
-snowbell
-snowberg
-snowberry
-snowbird
-snowblink
-snowbound
-snowbreak
-snowbush
-snowcap
-snowcraft
-Snowdonian
-snowdrift
-snowdrop
-snowfall
-snowflake
-snowflight
-snowflower
-snowfowl
-snowhammer
-snowhouse
-snowie
-snowily
-snowiness
-snowish
-snowk
-snowl
-snowland
-snowless
-snowlike
-snowmanship
-snowmobile
-snowplow
-snowproof
-snowscape
-snowshade
-snowshed
-snowshine
-snowshoe
-snowshoed
-snowshoeing
-snowshoer
-snowslide
-snowslip
-snowstorm
-snowsuit
-snowworm
-snowy
-snozzle
-snub
-snubbable
-snubbed
-snubbee
-snubber
-snubbiness
-snubbing
-snubbingly
-snubbish
-snubbishly
-snubbishness
-snubby
-snubproof
-snuck
-snudge
-snuff
-snuffbox
-snuffboxer
-snuffcolored
-snuffer
-snuffers
-snuffiness
-snuffing
-snuffingly
-snuffish
-snuffle
-snuffler
-snuffles
-snuffless
-snuffliness
-snuffling
-snufflingly
-snuffly
-snuffman
-snuffy
-snug
-snugger
-snuggery
-snuggish
-snuggle
-snugify
-snugly
-snugness
-snum
-snup
-snupper
-snur
-snurl
-snurly
-snurp
-snurt
-snuzzle
-sny
-snying
-so
-soak
-soakage
-soakaway
-soaked
-soaken
-soaker
-soaking
-soakingly
-soakman
-soaky
-soally
-soam
-soap
-soapbark
-soapberry
-soapbox
-soapboxer
-soapbubbly
-soapbush
-soaper
-soapery
-soapfish
-soapily
-soapiness
-soaplees
-soapless
-soaplike
-soapmaker
-soapmaking
-soapmonger
-soaprock
-soaproot
-soapstone
-soapsud
-soapsuddy
-soapsuds
-soapsudsy
-soapweed
-soapwood
-soapwort
-soapy
-soar
-soarability
-soarable
-soarer
-soaring
-soaringly
-soary
-sob
-sobber
-sobbing
-sobbingly
-sobby
-sobeit
-sober
-soberer
-sobering
-soberingly
-soberize
-soberlike
-soberly
-soberness
-sobersault
-sobersided
-sobersides
-soberwise
-sobful
-soboles
-soboliferous
-sobproof
-Sobralia
-sobralite
-Sobranje
-sobrevest
-sobriety
-sobriquet
-sobriquetical
-soc
-socage
-socager
-soccer
-soccerist
-soccerite
-soce
-socht
-sociability
-sociable
-sociableness
-sociably
-social
-Sociales
-socialism
-socialist
-socialistic
-socialite
-sociality
-socializable
-socialization
-socialize
-socializer
-socially
-socialness
-sociation
-sociative
-societal
-societally
-societarian
-societarianism
-societary
-societified
-societism
-societist
-societologist
-societology
-society
-societyish
-societyless
-socii
-Socinian
-Socinianism
-Socinianistic
-Socinianize
-sociobiological
-sociocentric
-sociocracy
-sociocrat
-sociocratic
-sociocultural
-sociodrama
-sociodramatic
-socioeconomic
-socioeducational
-sociogenesis
-sociogenetic
-sociogeny
-sociography
-sociolatry
-sociolegal
-sociologian
-sociologic
-sociological
-sociologically
-sociologism
-sociologist
-sociologistic
-sociologize
-sociologizer
-sociologizing
-sociology
-sociomedical
-sociometric
-sociometry
-socionomic
-socionomics
-socionomy
-sociophagous
-sociopolitical
-socioreligious
-socioromantic
-sociostatic
-sociotechnical
-socius
-sock
-sockdolager
-socker
-socket
-socketful
-socketless
-sockeye
-sockless
-socklessness
-sockmaker
-sockmaking
-socky
-socle
-socman
-socmanry
-soco
-Socorrito
-Socotran
-Socotri
-Socotrine
-Socratean
-Socratic
-Socratical
-Socratically
-Socraticism
-Socratism
-Socratist
-Socratize
-sod
-soda
-sodaclase
-sodaic
-sodaless
-sodalist
-sodalite
-sodalithite
-sodality
-sodamide
-sodbuster
-sodded
-sodden
-soddenly
-soddenness
-sodding
-soddite
-soddy
-sodic
-sodio
-sodioaluminic
-sodioaurous
-sodiocitrate
-sodiohydric
-sodioplatinic
-sodiosalicylate
-sodiotartrate
-sodium
-sodless
-sodoku
-Sodom
-sodomic
-Sodomist
-Sodomite
-sodomitess
-sodomitic
-sodomitical
-sodomitically
-Sodomitish
-sodomy
-sodwork
-sody
-soe
-soekoe
-soever
-sofa
-sofane
-sofar
-soffit
-Sofia
-Sofoklis
-Sofronia
-soft
-softa
-softball
-softbrained
-soften
-softener
-softening
-softhead
-softheaded
-softhearted
-softheartedly
-softheartedness
-softhorn
-softish
-softling
-softly
-softner
-softness
-softship
-softtack
-softwood
-softy
-sog
-Soga
-Sogdian
-Sogdianese
-Sogdianian
-Sogdoite
-soger
-soget
-soggarth
-soggendalite
-soggily
-sogginess
-sogging
-soggy
-soh
-soho
-Soiesette
-soiesette
-soil
-soilage
-soiled
-soiling
-soilless
-soilproof
-soilure
-soily
-soiree
-soixantine
-Soja
-soja
-sojourn
-sojourner
-sojourney
-sojournment
-sok
-soka
-soke
-sokeman
-sokemanemot
-sokemanry
-soken
-Sokoki
-Sokotri
-Sokulk
-Sol
-sol
-sola
-solace
-solaceful
-solacement
-solaceproof
-solacer
-solacious
-solaciously
-solaciousness
-solan
-Solanaceae
-solanaceous
-solanal
-Solanales
-solander
-solaneine
-solaneous
-solanidine
-solanine
-Solanum
-solanum
-solar
-solarism
-solarist
-solaristic
-solaristically
-solaristics
-Solarium
-solarium
-solarization
-solarize
-solarometer
-solate
-solatia
-solation
-solatium
-solay
-sold
-soldado
-Soldan
-soldan
-soldanel
-Soldanella
-soldanelle
-soldanrie
-solder
-solderer
-soldering
-solderless
-soldi
-soldier
-soldierbird
-soldierbush
-soldierdom
-soldieress
-soldierfish
-soldierhearted
-soldierhood
-soldiering
-soldierize
-soldierlike
-soldierliness
-soldierly
-soldierproof
-soldiership
-soldierwise
-soldierwood
-soldiery
-soldo
-sole
-Solea
-solea
-soleas
-solecism
-solecist
-solecistic
-solecistical
-solecistically
-solecize
-solecizer
-Soleidae
-soleiform
-soleil
-soleless
-solely
-solemn
-solemncholy
-solemnify
-solemnitude
-solemnity
-solemnization
-solemnize
-solemnizer
-solemnly
-solemnness
-Solen
-solen
-solenacean
-solenaceous
-soleness
-solenette
-solenial
-Solenidae
-solenite
-solenitis
-solenium
-solenoconch
-Solenoconcha
-solenocyte
-Solenodon
-solenodont
-Solenodontidae
-solenogaster
-Solenogastres
-solenoglyph
-Solenoglypha
-solenoglyphic
-solenoid
-solenoidal
-solenoidally
-Solenopsis
-solenostele
-solenostelic
-solenostomid
-Solenostomidae
-solenostomoid
-solenostomous
-Solenostomus
-solent
-solentine
-solepiece
-soleplate
-soleprint
-soler
-Solera
-soles
-soleus
-soleyn
-solfataric
-solfeggio
-solferino
-soli
-soliative
-solicit
-solicitant
-solicitation
-solicitationism
-solicited
-solicitee
-soliciter
-soliciting
-solicitor
-solicitorship
-solicitous
-solicitously
-solicitousness
-solicitress
-solicitrix
-solicitude
-solicitudinous
-solid
-Solidago
-solidago
-solidaric
-solidarily
-solidarism
-solidarist
-solidaristic
-solidarity
-solidarize
-solidary
-solidate
-solidi
-solidifiability
-solidifiable
-solidifiableness
-solidification
-solidifier
-solidiform
-solidify
-solidish
-solidism
-solidist
-solidistic
-solidity
-solidly
-solidness
-solidum
-Solidungula
-solidungular
-solidungulate
-solidus
-solifidian
-solifidianism
-solifluction
-solifluctional
-soliform
-Solifugae
-solifuge
-solifugean
-solifugid
-solifugous
-soliloquacious
-soliloquist
-soliloquium
-soliloquize
-soliloquizer
-soliloquizing
-soliloquizingly
-soliloquy
-solilunar
-Solio
-solio
-soliped
-solipedal
-solipedous
-solipsism
-solipsismal
-solipsist
-solipsistic
-solist
-solitaire
-solitarian
-solitarily
-solitariness
-solitary
-soliterraneous
-solitidal
-solitude
-solitudinarian
-solitudinize
-solitudinous
-solivagant
-solivagous
-sollar
-solleret
-Sollya
-solmizate
-solmization
-solo
-solod
-solodi
-solodization
-solodize
-soloecophanes
-soloist
-Solomon
-Solomonian
-Solomonic
-Solomonical
-Solomonitic
-Solon
-solon
-solonchak
-solonetz
-solonetzic
-solonetzicity
-Solonian
-Solonic
-solonist
-soloth
-solotink
-solotnik
-solpugid
-Solpugida
-Solpugidea
-Solpugides
-solstice
-solsticion
-solstitia
-solstitial
-solstitially
-solstitium
-solubility
-solubilization
-solubilize
-soluble
-solubleness
-solubly
-solum
-solute
-solution
-solutional
-solutioner
-solutionist
-solutize
-solutizer
-Solutrean
-solvability
-solvable
-solvableness
-solvate
-solvation
-solve
-solvement
-solvency
-solvend
-solvent
-solvently
-solventproof
-solver
-solvolysis
-solvolytic
-solvolyze
-solvsbergite
-Solyma
-Solymaean
-soma
-somacule
-Somal
-somal
-Somali
-somaplasm
-Somaschian
-somasthenia
-somata
-somatasthenia
-Somateria
-somatic
-somatical
-somatically
-somaticosplanchnic
-somaticovisceral
-somatics
-somatism
-somatist
-somatization
-somatochrome
-somatocyst
-somatocystic
-somatoderm
-somatogenetic
-somatogenic
-somatognosis
-somatognostic
-somatologic
-somatological
-somatologically
-somatologist
-somatology
-somatome
-somatomic
-somatophyte
-somatophytic
-somatoplasm
-somatopleural
-somatopleure
-somatopleuric
-somatopsychic
-somatosplanchnic
-somatotonia
-somatotonic
-somatotropic
-somatotropically
-somatotropism
-somatotype
-somatotyper
-somatotypy
-somatous
-somber
-somberish
-somberly
-somberness
-sombre
-sombrerite
-sombrero
-sombreroed
-sombrous
-sombrously
-sombrousness
-some
-somebody
-someday
-somedeal
-somegate
-somehow
-someone
-somepart
-someplace
-somers
-somersault
-somerset
-Somersetian
-somervillite
-somesthesia
-somesthesis
-somesthetic
-something
-somethingness
-sometime
-sometimes
-someway
-someways
-somewhat
-somewhatly
-somewhatness
-somewhen
-somewhence
-somewhere
-somewheres
-somewhile
-somewhiles
-somewhither
-somewhy
-somewise
-somital
-somite
-somitic
-somma
-sommaite
-sommelier
-somnambulance
-somnambulancy
-somnambulant
-somnambular
-somnambulary
-somnambulate
-somnambulation
-somnambulator
-somnambule
-somnambulency
-somnambulic
-somnambulically
-somnambulism
-somnambulist
-somnambulistic
-somnambulize
-somnambulous
-somnial
-somniative
-somnifacient
-somniferous
-somniferously
-somnific
-somnifuge
-somnify
-somniloquacious
-somniloquence
-somniloquent
-somniloquism
-somniloquist
-somniloquize
-somniloquous
-somniloquy
-Somniosus
-somnipathist
-somnipathy
-somnivolency
-somnivolent
-somnolence
-somnolency
-somnolent
-somnolently
-somnolescence
-somnolescent
-somnolism
-somnolize
-somnopathy
-somnorific
-somnus
-sompay
-sompne
-sompner
-Son
-son
-sonable
-sonance
-sonancy
-sonant
-sonantal
-sonantic
-sonantina
-sonantized
-sonar
-sonata
-sonatina
-sonation
-Sonchus
-sond
-sondation
-sondeli
-Sonderbund
-sonderclass
-Sondergotter
-Sondylomorum
-soneri
-song
-songbird
-songbook
-songcraft
-songfest
-songful
-songfully
-songfulness
-Songhai
-Songish
-songish
-songland
-songle
-songless
-songlessly
-songlessness
-songlet
-songlike
-songman
-Songo
-Songoi
-songster
-songstress
-songworthy
-songwright
-songy
-sonhood
-sonic
-soniferous
-sonification
-soniou
-Sonja
-sonk
-sonless
-sonlike
-sonlikeness
-sonly
-Sonneratia
-Sonneratiaceae
-sonneratiaceous
-sonnet
-sonnetary
-sonneteer
-sonneteeress
-sonnetic
-sonneting
-sonnetish
-sonnetist
-sonnetize
-sonnetlike
-sonnetwise
-sonnikins
-Sonny
-sonny
-sonobuoy
-sonometer
-Sonoran
-sonorant
-sonorescence
-sonorescent
-sonoric
-sonoriferous
-sonoriferously
-sonorific
-sonority
-sonorophone
-sonorosity
-sonorous
-sonorously
-sonorousness
-Sonrai
-sons
-sonship
-sonsy
-sontag
-soodle
-soodly
-Soohong
-sook
-Sooke
-sooky
-sool
-sooloos
-soon
-sooner
-soonish
-soonly
-Soorah
-soorawn
-soord
-soorkee
-Soot
-soot
-sooter
-sooterkin
-sooth
-soothe
-soother
-sootherer
-soothful
-soothing
-soothingly
-soothingness
-soothless
-soothsay
-soothsayer
-soothsayership
-soothsaying
-sootily
-sootiness
-sootless
-sootlike
-sootproof
-sooty
-sootylike
-sop
-sope
-soph
-Sopheric
-Sopherim
-Sophia
-sophia
-Sophian
-sophic
-sophical
-sophically
-sophiologic
-sophiology
-sophism
-Sophist
-sophister
-sophistic
-sophistical
-sophistically
-sophisticalness
-sophisticant
-sophisticate
-sophisticated
-sophistication
-sophisticative
-sophisticator
-sophisticism
-Sophistress
-sophistress
-sophistry
-Sophoclean
-sophomore
-sophomoric
-sophomorical
-sophomorically
-Sophora
-sophoria
-Sophronia
-sophronize
-Sophy
-sophy
-sopite
-sopition
-sopor
-soporiferous
-soporiferously
-soporiferousness
-soporific
-soporifical
-soporifically
-soporose
-sopper
-soppiness
-sopping
-soppy
-soprani
-sopranino
-sopranist
-soprano
-sora
-Sorabian
-sorage
-soral
-Sorb
-sorb
-Sorbaria
-sorbate
-sorbefacient
-sorbent
-Sorbian
-sorbic
-sorbile
-sorbin
-sorbinose
-Sorbish
-sorbite
-sorbitic
-sorbitize
-sorbitol
-Sorbonic
-Sorbonical
-Sorbonist
-Sorbonne
-sorbose
-sorboside
-Sorbus
-sorbus
-sorcer
-sorcerer
-sorceress
-sorcering
-sorcerous
-sorcerously
-sorcery
-sorchin
-sorda
-Sordaria
-Sordariaceae
-sordawalite
-sordellina
-Sordello
-sordes
-sordid
-sordidity
-sordidly
-sordidness
-sordine
-sordino
-sordor
-sore
-soredia
-soredial
-sorediate
-sorediferous
-sorediform
-soredioid
-soredium
-soree
-sorefalcon
-sorefoot
-sorehawk
-sorehead
-soreheaded
-soreheadedly
-soreheadedness
-sorehearted
-sorehon
-sorely
-sorema
-soreness
-Sorex
-sorgho
-Sorghum
-sorghum
-sorgo
-sori
-soricid
-Soricidae
-soricident
-Soricinae
-soricine
-soricoid
-Soricoidea
-soriferous
-sorite
-sorites
-soritical
-sorn
-sornare
-sornari
-sorner
-sorning
-soroban
-Soroptimist
-sororal
-sororate
-sororial
-sororially
-sororicidal
-sororicide
-sorority
-sororize
-sorose
-sorosis
-sorosphere
-Sorosporella
-Sorosporium
-sorption
-sorra
-Sorrel
-sorrel
-sorrento
-sorrily
-sorriness
-sorroa
-sorrow
-sorrower
-sorrowful
-sorrowfully
-sorrowfulness
-sorrowing
-sorrowingly
-sorrowless
-sorrowproof
-sorrowy
-sorry
-sorryhearted
-sorryish
-sort
-sortable
-sortably
-sortal
-sortation
-sorted
-sorter
-sortie
-sortilege
-sortileger
-sortilegic
-sortilegious
-sortilegus
-sortilegy
-sortiment
-sortition
-sortly
-sorty
-sorus
-sorva
-sory
-sosh
-soshed
-Sosia
-soso
-sosoish
-Sospita
-soss
-sossle
-sostenuto
-sot
-Sotadean
-Sotadic
-Soter
-Soteres
-soterial
-soteriologic
-soteriological
-soteriology
-Sothiac
-Sothiacal
-Sothic
-Sothis
-Sotho
-sotie
-Sotik
-sotnia
-sotnik
-sotol
-sots
-sottage
-sotted
-sotter
-sottish
-sottishly
-sottishness
-sou
-souari
-soubise
-soubrette
-soubrettish
-soucar
-souchet
-Souchong
-souchong
-souchy
-soud
-soudagur
-souffle
-souffleed
-sough
-sougher
-soughing
-sought
-Souhegan
-soul
-soulack
-soulcake
-souled
-Souletin
-soulful
-soulfully
-soulfulness
-soulical
-soulish
-soulless
-soullessly
-soullessness
-soullike
-Soulmass
-soulsaving
-soulward
-souly
-soum
-soumansite
-soumarque
-sound
-soundable
-soundage
-soundboard
-sounder
-soundful
-soundheaded
-soundheadedness
-soundhearted
-soundheartednes
-sounding
-soundingly
-soundingness
-soundless
-soundlessly
-soundlessness
-soundly
-soundness
-soundproof
-soundproofing
-soup
-soupbone
-soupcon
-souper
-souple
-soupless
-souplike
-soupspoon
-soupy
-sour
-sourbelly
-sourberry
-sourbread
-sourbush
-sourcake
-source
-sourceful
-sourcefulness
-sourceless
-sourcrout
-sourdeline
-sourdine
-soured
-souredness
-souren
-sourer
-sourhearted
-souring
-sourish
-sourishly
-sourishness
-sourjack
-sourling
-sourly
-sourness
-sourock
-soursop
-sourtop
-sourweed
-sourwood
-soury
-sousaphone
-sousaphonist
-souse
-souser
-souslik
-soutane
-souter
-souterrain
-South
-south
-southard
-southbound
-Southcottian
-Southdown
-southeast
-southeaster
-southeasterly
-southeastern
-southeasternmost
-southeastward
-southeastwardly
-southeastwards
-souther
-southerland
-southerliness
-southerly
-southermost
-southern
-Southerner
-southerner
-southernism
-southernize
-southernliness
-southernly
-southernmost
-southernness
-southernwood
-southing
-southland
-southlander
-southmost
-southness
-southpaw
-Southron
-southron
-Southronie
-Southumbrian
-southward
-southwardly
-southwards
-southwest
-southwester
-southwesterly
-southwestern
-Southwesterner
-southwesternmost
-southwestward
-southwestwardly
-souvenir
-souverain
-souwester
-sov
-sovereign
-sovereigness
-sovereignly
-sovereignness
-sovereignship
-sovereignty
-soviet
-sovietdom
-sovietic
-sovietism
-sovietist
-sovietization
-sovietize
-sovite
-sovkhose
-sovkhoz
-sovran
-sovranty
-sow
-sowable
-sowan
-sowans
-sowar
-sowarry
-sowback
-sowbacked
-sowbane
-sowbelly
-sowbread
-sowdones
-sowel
-sowens
-sower
-sowfoot
-sowing
-sowins
-sowl
-sowle
-sowlike
-sowlth
-sown
-sowse
-sowt
-sowte
-Soxhlet
-soy
-soya
-soybean
-Soyot
-sozin
-sozolic
-sozzle
-sozzly
-spa
-Space
-space
-spaceband
-spaced
-spaceful
-spaceless
-spacer
-spacesaving
-spaceship
-spaciness
-spacing
-spaciosity
-spaciotemporal
-spacious
-spaciously
-spaciousness
-spack
-spacy
-spad
-spade
-spadebone
-spaded
-spadefish
-spadefoot
-spadeful
-spadelike
-spademan
-spader
-spadesman
-spadewise
-spadework
-spadger
-spadiceous
-spadices
-spadicifloral
-spadiciflorous
-spadiciform
-spadicose
-spadilla
-spadille
-spading
-spadix
-spadone
-spadonic
-spadonism
-spadrone
-spadroon
-spae
-spaebook
-spaecraft
-spaedom
-spaeman
-spaer
-spaewife
-spaewoman
-spaework
-spaewright
-spaghetti
-Spagnuoli
-spagyric
-spagyrical
-spagyrically
-spagyrist
-spahi
-spaid
-spaik
-spairge
-spak
-Spalacidae
-spalacine
-Spalax
-spald
-spalder
-spalding
-spale
-spall
-spallation
-spaller
-spalling
-spalpeen
-spalt
-span
-spancel
-spandle
-spandrel
-spandy
-spane
-spanemia
-spanemy
-spang
-spanghew
-spangle
-spangled
-spangler
-spanglet
-spangly
-spangolite
-Spaniard
-Spaniardization
-Spaniardize
-Spaniardo
-spaniel
-spaniellike
-spanielship
-spaning
-Spaniol
-Spaniolate
-Spanioli
-Spaniolize
-spanipelagic
-Spanish
-Spanishize
-Spanishly
-spank
-spanker
-spankily
-spanking
-spankingly
-spanky
-spanless
-spann
-spannel
-spanner
-spannerman
-spanopnoea
-spanpiece
-spantoon
-spanule
-spanworm
-Spar
-spar
-sparable
-sparada
-sparadrap
-sparagrass
-sparagus
-Sparassis
-sparassodont
-Sparassodonta
-Sparaxis
-sparaxis
-sparch
-spare
-spareable
-spareless
-sparely
-spareness
-sparer
-sparerib
-sparesome
-Sparganiaceae
-Sparganium
-sparganium
-sparganosis
-sparganum
-sparge
-sparger
-spargosis
-sparhawk
-sparid
-Sparidae
-sparing
-sparingly
-sparingness
-spark
-sparkback
-sparked
-sparker
-sparkiness
-sparking
-sparkish
-sparkishly
-sparkishness
-sparkle
-sparkleberry
-sparkler
-sparkless
-sparklessly
-sparklet
-sparklike
-sparkliness
-sparkling
-sparklingly
-sparklingness
-sparkly
-sparkproof
-sparks
-sparky
-sparlike
-sparling
-sparm
-Sparmannia
-Sparnacian
-sparoid
-sparpiece
-sparred
-sparrer
-sparring
-sparringly
-sparrow
-sparrowbill
-sparrowcide
-sparrowdom
-sparrowgrass
-sparrowish
-sparrowless
-sparrowlike
-sparrowtail
-sparrowtongue
-sparrowwort
-sparrowy
-sparry
-sparse
-sparsedly
-sparsely
-sparsile
-sparsioplast
-sparsity
-spart
-Spartacan
-Spartacide
-Spartacism
-Spartacist
-spartacist
-Spartan
-Spartanhood
-Spartanic
-Spartanically
-Spartanism
-Spartanize
-Spartanlike
-Spartanly
-sparteine
-sparterie
-sparth
-Spartiate
-Spartina
-Spartium
-spartle
-Sparus
-sparver
-spary
-spasm
-spasmatic
-spasmatical
-spasmatomancy
-spasmed
-spasmic
-spasmodic
-spasmodical
-spasmodically
-spasmodicalness
-spasmodism
-spasmodist
-spasmolytic
-spasmophilia
-spasmophilic
-spasmotin
-spasmotoxin
-spasmous
-Spass
-spastic
-spastically
-spasticity
-spat
-spatalamancy
-Spatangida
-Spatangina
-spatangoid
-Spatangoida
-Spatangoidea
-spatangoidean
-Spatangus
-spatchcock
-spate
-spatha
-spathaceous
-spathal
-spathe
-spathed
-spatheful
-spathic
-Spathiflorae
-spathilae
-spathilla
-spathose
-spathous
-spathulate
-Spathyema
-spatial
-spatiality
-spatialization
-spatialize
-spatially
-spatiate
-spatiation
-spatilomancy
-spatiotemporal
-spatling
-spatted
-spatter
-spatterdashed
-spatterdasher
-spatterdock
-spattering
-spatteringly
-spatterproof
-spatterwork
-spatting
-spattle
-spattlehoe
-Spatula
-spatula
-spatulamancy
-spatular
-spatulate
-spatulation
-spatule
-spatuliform
-spatulose
-spave
-spaver
-spavie
-spavied
-spaviet
-spavin
-spavindy
-spavined
-spawn
-spawneater
-spawner
-spawning
-spawny
-spay
-spayad
-spayard
-spaying
-speak
-speakable
-speakableness
-speakably
-speaker
-speakeress
-speakership
-speakhouse
-speakies
-speaking
-speakingly
-speakingness
-speakless
-speaklessly
-speal
-spealbone
-spean
-spear
-spearcast
-spearer
-spearfish
-spearflower
-spearhead
-spearing
-spearman
-spearmanship
-spearmint
-spearproof
-spearsman
-spearwood
-spearwort
-speary
-spec
-specchie
-spece
-special
-specialism
-specialist
-specialistic
-speciality
-specialization
-specialize
-specialized
-specializer
-specially
-specialness
-specialty
-speciation
-specie
-species
-speciestaler
-specifiable
-specific
-specifical
-specificality
-specifically
-specificalness
-specificate
-specification
-specificative
-specificatively
-specificity
-specificize
-specificly
-specificness
-specifier
-specifist
-specify
-specillum
-specimen
-specimenize
-speciology
-speciosity
-specious
-speciously
-speciousness
-speck
-specked
-speckedness
-speckfall
-speckiness
-specking
-speckle
-specklebelly
-specklebreast
-speckled
-speckledbill
-speckledness
-speckless
-specklessly
-specklessness
-speckling
-speckly
-speckproof
-specks
-specksioneer
-specky
-specs
-spectacle
-spectacled
-spectacleless
-spectaclelike
-spectaclemaker
-spectaclemaking
-spectacles
-spectacular
-spectacularism
-spectacularity
-spectacularly
-spectator
-spectatordom
-spectatorial
-spectatorship
-spectatory
-spectatress
-spectatrix
-specter
-spectered
-specterlike
-spectra
-spectral
-spectralism
-spectrality
-spectrally
-spectralness
-spectrobolograph
-spectrobolographic
-spectrobolometer
-spectrobolometric
-spectrochemical
-spectrochemistry
-spectrocolorimetry
-spectrocomparator
-spectroelectric
-spectrogram
-spectrograph
-spectrographic
-spectrographically
-spectrography
-spectroheliogram
-spectroheliograph
-spectroheliographic
-spectrohelioscope
-spectrological
-spectrologically
-spectrology
-spectrometer
-spectrometric
-spectrometry
-spectromicroscope
-spectromicroscopical
-spectrophobia
-spectrophone
-spectrophonic
-spectrophotoelectric
-spectrophotograph
-spectrophotography
-spectrophotometer
-spectrophotometric
-spectrophotometry
-spectropolarimeter
-spectropolariscope
-spectropyrheliometer
-spectropyrometer
-spectroradiometer
-spectroradiometric
-spectroradiometry
-spectroscope
-spectroscopic
-spectroscopically
-spectroscopist
-spectroscopy
-spectrotelescope
-spectrous
-spectrum
-spectry
-specula
-specular
-Specularia
-specularly
-speculate
-speculation
-speculatist
-speculative
-speculatively
-speculativeness
-speculativism
-speculator
-speculatory
-speculatrices
-speculatrix
-speculist
-speculum
-specus
-sped
-speech
-speechcraft
-speecher
-speechful
-speechfulness
-speechification
-speechifier
-speechify
-speeching
-speechless
-speechlessly
-speechlessness
-speechlore
-speechmaker
-speechmaking
-speechment
-speed
-speedaway
-speedboat
-speedboating
-speedboatman
-speeder
-speedful
-speedfully
-speedfulness
-speedily
-speediness
-speeding
-speedingly
-speedless
-speedometer
-speedster
-speedway
-speedwell
-speedy
-speel
-speelken
-speelless
-speen
-speer
-speering
-speerity
-speiskobalt
-speiss
-spekboom
-spelaean
-spelder
-spelding
-speldring
-speleological
-speleologist
-speleology
-spelk
-spell
-spellable
-spellbind
-spellbinder
-spellbinding
-spellbound
-spellcraft
-spelldown
-speller
-spellful
-spelling
-spellingdown
-spellingly
-spellmonger
-spellproof
-spellword
-spellwork
-spelt
-spelter
-spelterman
-speltoid
-speltz
-speluncar
-speluncean
-spelunk
-spelunker
-spence
-Spencean
-Spencer
-spencer
-Spencerian
-Spencerianism
-Spencerism
-spencerite
-spend
-spendable
-spender
-spendful
-spendible
-spending
-spendless
-spendthrift
-spendthrifty
-Spenerism
-spense
-Spenserian
-spent
-speos
-Speotyto
-sperable
-Speranza
-sperate
-Spergula
-Spergularia
-sperity
-sperket
-sperling
-sperm
-sperma
-spermaceti
-spermacetilike
-spermaduct
-spermalist
-Spermaphyta
-spermaphyte
-spermaphytic
-spermarium
-spermary
-spermashion
-spermatangium
-spermatheca
-spermathecal
-spermatic
-spermatically
-spermatid
-spermatiferous
-spermatin
-spermatiogenous
-spermation
-spermatiophore
-spermatism
-spermatist
-spermatitis
-spermatium
-spermatize
-spermatoblast
-spermatoblastic
-spermatocele
-spermatocyst
-spermatocystic
-spermatocystitis
-spermatocytal
-spermatocyte
-spermatogemma
-spermatogenesis
-spermatogenetic
-spermatogenic
-spermatogenous
-spermatogeny
-spermatogonial
-spermatogonium
-spermatoid
-spermatolysis
-spermatolytic
-spermatophoral
-spermatophore
-spermatophorous
-Spermatophyta
-spermatophyte
-spermatophytic
-spermatoplasm
-spermatoplasmic
-spermatoplast
-spermatorrhea
-spermatospore
-spermatotheca
-spermatova
-spermatovum
-spermatoxin
-spermatozoa
-spermatozoal
-spermatozoan
-spermatozoic
-spermatozoid
-spermatozoon
-spermaturia
-spermic
-spermidine
-spermiducal
-spermiduct
-spermigerous
-spermine
-spermiogenesis
-spermism
-spermist
-spermoblast
-spermoblastic
-spermocarp
-spermocenter
-spermoderm
-spermoduct
-spermogenesis
-spermogenous
-spermogone
-spermogoniferous
-spermogonium
-spermogonous
-spermologer
-spermological
-spermologist
-spermology
-spermolysis
-spermolytic
-spermophile
-spermophiline
-Spermophilus
-spermophore
-spermophorium
-Spermophyta
-spermophyte
-spermophytic
-spermosphere
-spermotheca
-spermotoxin
-spermous
-spermoviduct
-spermy
-speronara
-speronaro
-sperone
-sperrylite
-spessartite
-spet
-spetch
-spetrophoby
-speuchan
-spew
-spewer
-spewiness
-spewing
-spewy
-spex
-sphacel
-Sphacelaria
-Sphacelariaceae
-sphacelariaceous
-Sphacelariales
-sphacelate
-sphacelated
-sphacelation
-sphacelia
-sphacelial
-sphacelism
-sphaceloderma
-Sphaceloma
-sphacelotoxin
-sphacelous
-sphacelus
-Sphaeralcea
-sphaeraphides
-Sphaerella
-sphaerenchyma
-Sphaeriaceae
-sphaeriaceous
-Sphaeriales
-sphaeridia
-sphaeridial
-sphaeridium
-Sphaeriidae
-Sphaerioidaceae
-sphaeristerium
-sphaerite
-Sphaerium
-sphaeroblast
-Sphaerobolaceae
-Sphaerobolus
-Sphaerocarpaceae
-Sphaerocarpales
-Sphaerocarpus
-sphaerocobaltite
-Sphaerococcaceae
-sphaerococcaceous
-Sphaerococcus
-sphaerolite
-sphaerolitic
-Sphaeroma
-Sphaeromidae
-Sphaerophoraceae
-Sphaerophorus
-Sphaeropsidaceae
-Sphaeropsidales
-Sphaeropsis
-sphaerosiderite
-sphaerosome
-sphaerospore
-Sphaerostilbe
-Sphaerotheca
-Sphaerotilus
-sphagion
-Sphagnaceae
-sphagnaceous
-Sphagnales
-sphagnicolous
-sphagnologist
-sphagnology
-sphagnous
-Sphagnum
-sphagnum
-Sphakiot
-sphalerite
-Sphargis
-sphecid
-Sphecidae
-Sphecina
-Sphecoidea
-spheges
-sphegid
-Sphegidae
-Sphegoidea
-sphendone
-sphene
-sphenethmoid
-sphenethmoidal
-sphenic
-sphenion
-Sphenisci
-Spheniscidae
-Sphenisciformes
-spheniscine
-spheniscomorph
-Spheniscomorphae
-spheniscomorphic
-Spheniscus
-sphenobasilar
-sphenobasilic
-sphenocephalia
-sphenocephalic
-sphenocephalous
-sphenocephaly
-Sphenodon
-sphenodon
-sphenodont
-Sphenodontia
-Sphenodontidae
-sphenoethmoid
-sphenoethmoidal
-sphenofrontal
-sphenogram
-sphenographic
-sphenographist
-sphenography
-sphenoid
-sphenoidal
-sphenoiditis
-sphenolith
-sphenomalar
-sphenomandibular
-sphenomaxillary
-sphenopalatine
-sphenoparietal
-sphenopetrosal
-Sphenophorus
-Sphenophyllaceae
-sphenophyllaceous
-Sphenophyllales
-Sphenophyllum
-Sphenopteris
-sphenosquamosal
-sphenotemporal
-sphenotic
-sphenotribe
-sphenotripsy
-sphenoturbinal
-sphenovomerine
-sphenozygomatic
-spherable
-spheral
-spherality
-spheraster
-spheration
-sphere
-sphereless
-spheric
-spherical
-sphericality
-spherically
-sphericalness
-sphericist
-sphericity
-sphericle
-sphericocylindrical
-sphericotetrahedral
-sphericotriangular
-spherics
-spheriform
-spherify
-spheroconic
-spherocrystal
-spherograph
-spheroidal
-spheroidally
-spheroidic
-spheroidical
-spheroidically
-spheroidicity
-spheroidism
-spheroidity
-spheroidize
-spheromere
-spherometer
-spheroquartic
-spherula
-spherular
-spherulate
-spherule
-spherulite
-spherulitic
-spherulitize
-sphery
-spheterize
-Sphex
-sphexide
-sphincter
-sphincteral
-sphincteralgia
-sphincterate
-sphincterectomy
-sphincterial
-sphincteric
-sphincterismus
-sphincteroscope
-sphincteroscopy
-sphincterotomy
-sphindid
-Sphindidae
-Sphindus
-sphingal
-sphinges
-sphingid
-Sphingidae
-sphingiform
-sphingine
-sphingoid
-sphingometer
-sphingomyelin
-sphingosine
-Sphingurinae
-Sphingurus
-sphinx
-sphinxian
-sphinxianness
-sphinxlike
-Sphoeroides
-sphragide
-sphragistic
-sphragistics
-sphygmia
-sphygmic
-sphygmochronograph
-sphygmodic
-sphygmogram
-sphygmograph
-sphygmographic
-sphygmography
-sphygmoid
-sphygmology
-sphygmomanometer
-sphygmomanometric
-sphygmomanometry
-sphygmometer
-sphygmometric
-sphygmophone
-sphygmophonic
-sphygmoscope
-sphygmus
-Sphyraena
-sphyraenid
-Sphyraenidae
-sphyraenoid
-Sphyrapicus
-Sphyrna
-Sphyrnidae
-Spica
-spica
-spical
-spicant
-Spicaria
-spicate
-spicated
-spiccato
-spice
-spiceable
-spiceberry
-spicebush
-spicecake
-spiced
-spiceful
-spicehouse
-spiceland
-spiceless
-spicelike
-spicer
-spicery
-spicewood
-spiciferous
-spiciform
-spicigerous
-spicilege
-spicily
-spiciness
-spicing
-spick
-spicket
-spickle
-spicknel
-spicose
-spicosity
-spicous
-spicousness
-spicula
-spiculae
-spicular
-spiculate
-spiculated
-spiculation
-spicule
-spiculiferous
-spiculiform
-spiculigenous
-spiculigerous
-spiculofiber
-spiculose
-spiculous
-spiculum
-spiculumamoris
-spicy
-spider
-spidered
-spiderflower
-spiderish
-spiderless
-spiderlike
-spiderling
-spiderly
-spiderweb
-spiderwork
-spiderwort
-spidery
-spidger
-spied
-spiegel
-spiegeleisen
-spiel
-spieler
-spier
-spiff
-spiffed
-spiffily
-spiffiness
-spiffing
-spiffy
-spiflicate
-spiflicated
-spiflication
-spig
-Spigelia
-Spigeliaceae
-Spigelian
-spiggoty
-spignet
-spigot
-Spike
-spike
-spikebill
-spiked
-spikedness
-spikefish
-spikehorn
-spikelet
-spikelike
-spikenard
-spiker
-spiketail
-spiketop
-spikeweed
-spikewise
-spikily
-spikiness
-spiking
-spiky
-Spilanthes
-spile
-spilehole
-spiler
-spileworm
-spilikin
-spiling
-spilite
-spilitic
-spill
-spillage
-spiller
-spillet
-spillproof
-spillway
-spilly
-Spilogale
-spiloma
-spilosite
-spilt
-spilth
-spilus
-spin
-spina
-spinacene
-spinaceous
-spinach
-spinachlike
-Spinacia
-spinae
-spinage
-spinal
-spinales
-spinalis
-spinally
-spinate
-spinder
-spindlage
-spindle
-spindleage
-spindled
-spindleful
-spindlehead
-spindlelegs
-spindlelike
-spindler
-spindleshanks
-spindletail
-spindlewise
-spindlewood
-spindleworm
-spindliness
-spindling
-spindly
-spindrift
-spine
-spinebill
-spinebone
-spined
-spinel
-spineless
-spinelessly
-spinelessness
-spinelet
-spinelike
-spinescence
-spinescent
-spinet
-spinetail
-spingel
-spinibulbar
-spinicarpous
-spinicerebellar
-spinidentate
-spiniferous
-Spinifex
-spinifex
-spiniform
-spinifugal
-spinigerous
-spinigrade
-spininess
-spinipetal
-spinitis
-spinituberculate
-spink
-spinnable
-spinnaker
-spinner
-spinneret
-spinnerular
-spinnerule
-spinnery
-spinney
-spinning
-spinningly
-spinobulbar
-spinocarpous
-spinocerebellar
-spinogalvanization
-spinoglenoid
-spinoid
-spinomuscular
-spinoneural
-spinoperipheral
-spinose
-spinosely
-spinoseness
-spinosity
-spinosodentate
-spinosodenticulate
-spinosotubercular
-spinosotuberculate
-spinosympathetic
-spinotectal
-spinothalamic
-spinotuberculous
-spinous
-spinousness
-Spinozism
-Spinozist
-Spinozistic
-spinster
-spinsterdom
-spinsterhood
-spinsterial
-spinsterish
-spinsterishly
-spinsterism
-spinsterlike
-spinsterly
-spinsterous
-spinstership
-spinstress
-spintext
-spinthariscope
-spinthariscopic
-spintherism
-spinulate
-spinulation
-spinule
-spinulescent
-spinuliferous
-spinuliform
-Spinulosa
-spinulose
-spinulosely
-spinulosociliate
-spinulosodentate
-spinulosodenticulate
-spinulosogranulate
-spinulososerrate
-spinulous
-spiny
-spionid
-Spionidae
-Spioniformia
-spiracle
-spiracula
-spiracular
-spiraculate
-spiraculiferous
-spiraculiform
-spiraculum
-Spiraea
-Spiraeaceae
-spiral
-spirale
-spiraled
-spiraliform
-spiralism
-spirality
-spiralization
-spiralize
-spirally
-spiraloid
-spiraltail
-spiralwise
-spiran
-spirant
-Spiranthes
-spiranthic
-spiranthy
-spirantic
-spirantize
-spiraster
-spirate
-spirated
-spiration
-spire
-spirea
-spired
-spiregrass
-spireless
-spirelet
-spireme
-spirepole
-spireward
-spirewise
-spiricle
-Spirifer
-Spirifera
-Spiriferacea
-spiriferid
-Spiriferidae
-spiriferoid
-spiriferous
-spiriform
-spirignath
-spirignathous
-spirilla
-Spirillaceae
-spirillaceous
-spirillar
-spirillolysis
-spirillosis
-spirillotropic
-spirillotropism
-spirillum
-spiring
-spirit
-spiritally
-spiritdom
-spirited
-spiritedly
-spiritedness
-spiriter
-spiritful
-spiritfully
-spiritfulness
-spirithood
-spiriting
-spiritism
-spiritist
-spiritistic
-spiritize
-spiritland
-spiritleaf
-spiritless
-spiritlessly
-spiritlessness
-spiritlike
-spiritmonger
-spiritous
-spiritrompe
-spiritsome
-spiritual
-spiritualism
-spiritualist
-spiritualistic
-spiritualistically
-spirituality
-spiritualization
-spiritualize
-spiritualizer
-spiritually
-spiritualness
-spiritualship
-spiritualty
-spirituosity
-spirituous
-spirituously
-spirituousness
-spiritus
-spiritweed
-spirity
-spirivalve
-spirket
-spirketing
-spirling
-spiro
-Spirobranchia
-Spirobranchiata
-spirobranchiate
-Spirochaeta
-Spirochaetaceae
-spirochaetal
-Spirochaetales
-Spirochaete
-spirochetal
-spirochete
-spirochetemia
-spirochetic
-spirocheticidal
-spirocheticide
-spirochetosis
-spirochetotic
-Spirodela
-spirogram
-spirograph
-spirographidin
-spirographin
-Spirographis
-Spirogyra
-spiroid
-spiroloculine
-spirometer
-spirometric
-spirometrical
-spirometry
-Spironema
-spiropentane
-Spirophyton
-Spirorbis
-spiroscope
-Spirosoma
-spirous
-spirt
-Spirula
-spirulate
-spiry
-spise
-spissated
-spissitude
-Spisula
-spit
-spital
-spitball
-spitballer
-spitbox
-spitchcock
-spite
-spiteful
-spitefully
-spitefulness
-spiteless
-spiteproof
-spitfire
-spitful
-spithamai
-spithame
-spitish
-spitpoison
-spitscocked
-spitstick
-spitted
-spitten
-spitter
-spitting
-spittle
-spittlefork
-spittlestaff
-spittoon
-spitz
-Spitzenburg
-spitzkop
-spiv
-spivery
-Spizella
-spizzerinctum
-Splachnaceae
-splachnaceous
-splachnoid
-Splachnum
-splacknuck
-splairge
-splanchnapophysial
-splanchnapophysis
-splanchnectopia
-splanchnemphraxis
-splanchnesthesia
-splanchnesthetic
-splanchnic
-splanchnoblast
-splanchnocoele
-splanchnoderm
-splanchnodiastasis
-splanchnodynia
-splanchnographer
-splanchnographical
-splanchnography
-splanchnolith
-splanchnological
-splanchnologist
-splanchnology
-splanchnomegalia
-splanchnomegaly
-splanchnopathy
-splanchnopleural
-splanchnopleure
-splanchnopleuric
-splanchnoptosia
-splanchnoptosis
-splanchnosclerosis
-splanchnoscopy
-splanchnoskeletal
-splanchnoskeleton
-splanchnosomatic
-splanchnotomical
-splanchnotomy
-splanchnotribe
-splash
-splashboard
-splashed
-splasher
-splashiness
-splashing
-splashingly
-splashproof
-splashy
-splat
-splatch
-splatcher
-splatchy
-splathering
-splatter
-splatterdash
-splatterdock
-splatterer
-splatterfaced
-splatterwork
-splay
-splayed
-splayer
-splayfoot
-splayfooted
-splaymouth
-splaymouthed
-spleen
-spleenful
-spleenfully
-spleenish
-spleenishly
-spleenishness
-spleenless
-spleenwort
-spleeny
-spleet
-spleetnew
-splenadenoma
-splenalgia
-splenalgic
-splenalgy
-splenatrophia
-splenatrophy
-splenauxe
-splenculus
-splendacious
-splendaciously
-splendaciousness
-splendent
-splendently
-splender
-splendescent
-splendid
-splendidly
-splendidness
-splendiferous
-splendiferously
-splendiferousness
-splendor
-splendorous
-splendorproof
-splendourproof
-splenectama
-splenectasis
-splenectomist
-splenectomize
-splenectomy
-splenectopia
-splenectopy
-splenelcosis
-splenemia
-splenemphraxis
-spleneolus
-splenepatitis
-splenetic
-splenetical
-splenetically
-splenetive
-splenial
-splenic
-splenical
-splenicterus
-splenification
-spleniform
-splenitis
-splenitive
-splenium
-splenius
-splenization
-splenoblast
-splenocele
-splenoceratosis
-splenocleisis
-splenocolic
-splenocyte
-splenodiagnosis
-splenodynia
-splenography
-splenohemia
-splenoid
-splenolaparotomy
-splenology
-splenolymph
-splenolymphatic
-splenolysin
-splenolysis
-splenoma
-splenomalacia
-splenomedullary
-splenomegalia
-splenomegalic
-splenomegaly
-splenomyelogenous
-splenoncus
-splenonephric
-splenopancreatic
-splenoparectama
-splenoparectasis
-splenopathy
-splenopexia
-splenopexis
-splenopexy
-splenophrenic
-splenopneumonia
-splenoptosia
-splenoptosis
-splenorrhagia
-splenorrhaphy
-splenotomy
-splenotoxin
-splenotyphoid
-splenulus
-splenunculus
-splet
-spleuchan
-splice
-spliceable
-splicer
-splicing
-splinder
-spline
-splineway
-splint
-splintage
-splinter
-splinterd
-splinterless
-splinternew
-splinterproof
-splintery
-splintwood
-splinty
-split
-splitbeak
-splitfinger
-splitfruit
-splitmouth
-splitnew
-splitsaw
-splittail
-splitten
-splitter
-splitting
-splitworm
-splodge
-splodgy
-splore
-splosh
-splotch
-splotchily
-splotchiness
-splotchy
-splother
-splunge
-splurge
-splurgily
-splurgy
-splurt
-spluther
-splutter
-splutterer
-spoach
-Spock
-spode
-spodiosite
-spodium
-spodogenic
-spodogenous
-spodomancy
-spodomantic
-spodumene
-spoffish
-spoffle
-spoffy
-spogel
-spoil
-spoilable
-spoilage
-spoilation
-spoiled
-spoiler
-spoilfive
-spoilful
-spoiling
-spoilless
-spoilment
-spoilsman
-spoilsmonger
-spoilsport
-spoilt
-Spokan
-spoke
-spokeless
-spoken
-spokeshave
-spokesman
-spokesmanship
-spokester
-spokeswoman
-spokeswomanship
-spokewise
-spoky
-spole
-spolia
-spoliarium
-spoliary
-spoliate
-spoliation
-spoliator
-spoliatory
-spolium
-spondaic
-spondaical
-spondaize
-spondean
-spondee
-spondiac
-Spondiaceae
-Spondias
-spondulics
-spondyl
-spondylalgia
-spondylarthritis
-spondylarthrocace
-spondylexarthrosis
-spondylic
-spondylid
-Spondylidae
-spondylioid
-spondylitic
-spondylitis
-spondylium
-spondylizema
-spondylocace
-Spondylocladium
-spondylodiagnosis
-spondylodidymia
-spondylodymus
-spondyloid
-spondylolisthesis
-spondylolisthetic
-spondylopathy
-spondylopyosis
-spondyloschisis
-spondylosis
-spondylosyndesis
-spondylotherapeutics
-spondylotherapist
-spondylotherapy
-spondylotomy
-spondylous
-Spondylus
-spondylus
-spong
-sponge
-spongecake
-sponged
-spongeful
-spongeless
-spongelet
-spongelike
-spongeous
-spongeproof
-sponger
-spongewood
-Spongiae
-spongian
-spongicolous
-spongiculture
-Spongida
-spongiferous
-spongiform
-Spongiidae
-Spongilla
-spongillid
-Spongillidae
-spongilline
-spongily
-spongin
-sponginblast
-sponginblastic
-sponginess
-sponging
-spongingly
-spongioblast
-spongioblastoma
-spongiocyte
-spongiolin
-spongiopilin
-spongioplasm
-spongioplasmic
-spongiose
-spongiosity
-spongiousness
-Spongiozoa
-spongiozoon
-spongoblast
-spongoblastic
-spongoid
-spongology
-spongophore
-Spongospora
-spongy
-sponsal
-sponsalia
-sponsibility
-sponsible
-sponsing
-sponsion
-sponsional
-sponson
-sponsor
-sponsorial
-sponsorship
-sponspeck
-spontaneity
-spontaneous
-spontaneously
-spontaneousness
-spontoon
-spoof
-spoofer
-spoofery
-spoofish
-spook
-spookdom
-spookery
-spookily
-spookiness
-spookish
-spookism
-spookist
-spookological
-spookologist
-spookology
-spooky
-spool
-spooler
-spoolful
-spoollike
-spoolwood
-spoom
-spoon
-spoonbill
-spoondrift
-spooner
-spoonerism
-spooneyism
-spooneyly
-spooneyness
-spoonflower
-spoonful
-spoonhutch
-spoonily
-spooniness
-spooning
-spoonism
-spoonless
-spoonlike
-spoonmaker
-spoonmaking
-spoonways
-spoonwood
-spoony
-spoonyism
-spoor
-spoorer
-spoot
-spor
-sporabola
-sporaceous
-sporades
-sporadial
-sporadic
-sporadical
-sporadically
-sporadicalness
-sporadicity
-sporadism
-sporadosiderite
-sporal
-sporange
-sporangia
-sporangial
-sporangidium
-sporangiferous
-sporangiform
-sporangioid
-sporangiola
-sporangiole
-sporangiolum
-sporangiophore
-sporangiospore
-sporangite
-Sporangites
-sporangium
-sporation
-spore
-spored
-sporeformer
-sporeforming
-sporeling
-sporicide
-sporid
-sporidesm
-sporidia
-sporidial
-sporidiferous
-sporidiole
-sporidiolum
-sporidium
-sporiferous
-sporification
-sporiparity
-sporiparous
-sporoblast
-Sporobolus
-sporocarp
-sporocarpium
-Sporochnaceae
-Sporochnus
-sporocyst
-sporocystic
-sporocystid
-sporocyte
-sporodochia
-sporodochium
-sporoduct
-sporogenesis
-sporogenic
-sporogenous
-sporogeny
-sporogone
-sporogonial
-sporogonic
-sporogonium
-sporogony
-sporoid
-sporologist
-sporomycosis
-sporont
-sporophore
-sporophoric
-sporophorous
-sporophydium
-sporophyll
-sporophyllary
-sporophyllum
-sporophyte
-sporophytic
-sporoplasm
-sporosac
-sporostegium
-sporostrote
-sporotrichosis
-sporotrichotic
-Sporotrichum
-sporous
-Sporozoa
-sporozoal
-sporozoan
-sporozoic
-sporozoite
-sporozoon
-sporran
-sport
-sportability
-sportable
-sportance
-sporter
-sportful
-sportfully
-sportfulness
-sportily
-sportiness
-sporting
-sportingly
-sportive
-sportively
-sportiveness
-sportless
-sportling
-sportly
-sports
-sportsman
-sportsmanlike
-sportsmanliness
-sportsmanly
-sportsmanship
-sportsome
-sportswear
-sportswoman
-sportswomanly
-sportswomanship
-sportula
-sportulae
-sporty
-sporular
-sporulate
-sporulation
-sporule
-sporuliferous
-sporuloid
-sposh
-sposhy
-spot
-spotless
-spotlessly
-spotlessness
-spotlight
-spotlighter
-spotlike
-spotrump
-spotsman
-spottable
-spotted
-spottedly
-spottedness
-spotteldy
-spotter
-spottily
-spottiness
-spotting
-spottle
-spotty
-spoucher
-spousage
-spousal
-spousally
-spouse
-spousehood
-spouseless
-spousy
-spout
-spouter
-spoutiness
-spouting
-spoutless
-spoutlike
-spoutman
-spouty
-sprachle
-sprack
-sprackish
-sprackle
-sprackly
-sprackness
-sprad
-spraddle
-sprag
-spragger
-spraggly
-spraich
-sprain
-spraint
-spraints
-sprang
-sprangle
-sprangly
-sprank
-sprat
-spratter
-spratty
-sprauchle
-sprawl
-sprawler
-sprawling
-sprawlingly
-sprawly
-spray
-sprayboard
-sprayer
-sprayey
-sprayful
-sprayfully
-sprayless
-spraylike
-sprayproof
-spread
-spreadation
-spreadboard
-spreaded
-spreader
-spreadhead
-spreading
-spreadingly
-spreadingness
-spreadover
-spready
-spreaghery
-spreath
-spreckle
-spree
-spreeuw
-Sprekelia
-spreng
-sprent
-spret
-sprew
-sprewl
-spridhogue
-spried
-sprier
-spriest
-sprig
-sprigged
-sprigger
-spriggy
-sprightful
-sprightfully
-sprightfulness
-sprightlily
-sprightliness
-sprightly
-sprighty
-spriglet
-sprigtail
-Spring
-spring
-springal
-springald
-springboard
-springbok
-springbuck
-springe
-springer
-springerle
-springfinger
-springfish
-springful
-springhaas
-springhalt
-springhead
-springhouse
-springily
-springiness
-springing
-springingly
-springle
-springless
-springlet
-springlike
-springly
-springmaker
-springmaking
-springtail
-springtide
-springtime
-springtrap
-springwood
-springworm
-springwort
-springwurzel
-springy
-sprink
-sprinkle
-sprinkled
-sprinkleproof
-sprinkler
-sprinklered
-sprinkling
-sprint
-sprinter
-sprit
-sprite
-spritehood
-spritsail
-sprittail
-sprittie
-spritty
-sproat
-sprocket
-sprod
-sprogue
-sproil
-sprong
-sprose
-sprottle
-sprout
-sproutage
-sprouter
-sproutful
-sprouting
-sproutland
-sproutling
-sprowsy
-spruce
-sprucely
-spruceness
-sprucery
-sprucification
-sprucify
-sprue
-spruer
-sprug
-spruiker
-spruit
-sprung
-sprunny
-sprunt
-spruntly
-spry
-spryly
-spryness
-spud
-Spudboy
-spudder
-spuddle
-spuddy
-spuffle
-spug
-spuilyie
-spuilzie
-spuke
-spume
-spumescence
-spumescent
-spumiferous
-spumification
-spumiform
-spumone
-spumose
-spumous
-spumy
-spun
-spung
-spunk
-spunkie
-spunkily
-spunkiness
-spunkless
-spunky
-spunny
-spur
-spurflower
-spurgall
-spurge
-spurgewort
-spuriae
-spuriosity
-spurious
-spuriously
-spuriousness
-Spurius
-spurl
-spurless
-spurlet
-spurlike
-spurling
-spurmaker
-spurmoney
-spurn
-spurner
-spurnpoint
-spurnwater
-spurproof
-spurred
-spurrer
-spurrial
-spurrier
-spurrings
-spurrite
-spurry
-spurt
-spurter
-spurtive
-spurtively
-spurtle
-spurway
-spurwing
-spurwinged
-spurwort
-sput
-sputa
-sputative
-sputter
-sputterer
-sputtering
-sputteringly
-sputtery
-sputum
-sputumary
-sputumose
-sputumous
-Spy
-spy
-spyboat
-spydom
-spyer
-spyfault
-spyglass
-spyhole
-spyism
-spyproof
-Spyros
-spyship
-spytower
-squab
-squabash
-squabasher
-squabbed
-squabbish
-squabble
-squabbler
-squabbling
-squabblingly
-squabbly
-squabby
-squacco
-squad
-squaddy
-squadrate
-squadrism
-squadron
-squadrone
-squadroned
-squail
-squailer
-squalene
-Squali
-squalid
-Squalida
-Squalidae
-squalidity
-squalidly
-squalidness
-squaliform
-squall
-squaller
-squallery
-squallish
-squally
-squalm
-Squalodon
-squalodont
-Squalodontidae
-squaloid
-Squaloidei
-squalor
-Squalus
-squam
-squama
-squamaceous
-squamae
-Squamariaceae
-Squamata
-squamate
-squamated
-squamatine
-squamation
-squamatogranulous
-squamatotuberculate
-squame
-squamella
-squamellate
-squamelliferous
-squamelliform
-squameous
-squamiferous
-squamiform
-squamify
-squamigerous
-squamipennate
-Squamipennes
-squamipinnate
-Squamipinnes
-squamocellular
-squamoepithelial
-squamoid
-squamomastoid
-squamoparietal
-squamopetrosal
-squamosa
-squamosal
-squamose
-squamosely
-squamoseness
-squamosis
-squamosity
-squamosodentated
-squamosoimbricated
-squamosomaxillary
-squamosoparietal
-squamosoradiate
-squamosotemporal
-squamosozygomatic
-squamosphenoid
-squamosphenoidal
-squamotemporal
-squamous
-squamously
-squamousness
-squamozygomatic
-Squamscot
-squamula
-squamulae
-squamulate
-squamulation
-squamule
-squamuliform
-squamulose
-squander
-squanderer
-squanderingly
-squandermania
-squandermaniac
-squantum
-squarable
-square
-squareage
-squarecap
-squared
-squaredly
-squareface
-squareflipper
-squarehead
-squarelike
-squarely
-squareman
-squaremouth
-squareness
-squarer
-squaretail
-squarewise
-squaring
-squarish
-squarishly
-squark
-squarrose
-squarrosely
-squarrous
-squarrulose
-squarson
-squarsonry
-squary
-squash
-squashberry
-squasher
-squashily
-squashiness
-squashy
-squat
-Squatarola
-squatarole
-Squatina
-squatina
-squatinid
-Squatinidae
-squatinoid
-Squatinoidei
-squatly
-squatment
-squatmore
-squatness
-squattage
-squatted
-squatter
-squatterarchy
-squatterdom
-squatterproof
-squattily
-squattiness
-squatting
-squattingly
-squattish
-squattocracy
-squattocratic
-squatty
-squatwise
-squaw
-squawberry
-squawbush
-squawdom
-squawfish
-squawflower
-squawk
-squawker
-squawkie
-squawking
-squawkingly
-squawky
-Squawmish
-squawroot
-Squawtits
-squawweed
-Squaxon
-squdge
-squdgy
-squeak
-squeaker
-squeakery
-squeakily
-squeakiness
-squeaking
-squeakingly
-squeaklet
-squeakproof
-squeaky
-squeakyish
-squeal
-squeald
-squealer
-squealing
-squeam
-squeamish
-squeamishly
-squeamishness
-squeamous
-squeamy
-Squedunk
-squeege
-squeegee
-squeezability
-squeezable
-squeezableness
-squeezably
-squeeze
-squeezeman
-squeezer
-squeezing
-squeezingly
-squeezy
-squelch
-squelcher
-squelchily
-squelchiness
-squelching
-squelchingly
-squelchingness
-squelchy
-squench
-squencher
-squeteague
-squib
-squibber
-squibbery
-squibbish
-squiblet
-squibling
-squid
-squiddle
-squidge
-squidgereen
-squidgy
-squiffed
-squiffer
-squiffy
-squiggle
-squiggly
-squilgee
-squilgeer
-Squill
-Squilla
-squilla
-squillagee
-squillery
-squillian
-squillid
-Squillidae
-squilloid
-Squilloidea
-squimmidge
-squin
-squinance
-squinancy
-squinch
-squinny
-squinsy
-squint
-squinted
-squinter
-squinting
-squintingly
-squintingness
-squintly
-squintness
-squinty
-squirage
-squiralty
-squire
-squirearch
-squirearchal
-squirearchical
-squirearchy
-squiredom
-squireen
-squirehood
-squireless
-squirelet
-squirelike
-squireling
-squirely
-squireocracy
-squireship
-squiress
-squiret
-squirewise
-squirish
-squirism
-squirk
-squirm
-squirminess
-squirming
-squirmingly
-squirmy
-squirr
-squirrel
-squirrelfish
-squirrelian
-squirreline
-squirrelish
-squirrellike
-squirrelproof
-squirreltail
-squirt
-squirter
-squirtiness
-squirting
-squirtingly
-squirtish
-squirty
-squish
-squishy
-squit
-squitch
-squitchy
-squitter
-squoze
-squush
-squushy
-sraddha
-sramana
-Sri
-sri
-Sridhar
-Sridharan
-Srikanth
-Srinivas
-Srinivasan
-Sriram
-Srivatsan
-sruti
-Ssi
-ssu
-st
-staab
-Staatsrat
-stab
-stabber
-stabbing
-stabbingly
-stabile
-stabilify
-stabilist
-stabilitate
-stability
-stabilization
-stabilizator
-stabilize
-stabilizer
-stable
-stableboy
-stableful
-stablekeeper
-stablelike
-stableman
-stableness
-stabler
-stablestand
-stableward
-stablewards
-stabling
-stablishment
-stably
-staboy
-stabproof
-stabulate
-stabulation
-stabwort
-staccato
-Stacey
-stacher
-stachydrin
-stachydrine
-stachyose
-Stachys
-stachys
-Stachytarpheta
-Stachyuraceae
-stachyuraceous
-Stachyurus
-stack
-stackage
-stackencloud
-stacker
-stackfreed
-stackful
-stackgarth
-Stackhousia
-Stackhousiaceae
-stackhousiaceous
-stackless
-stackman
-stackstand
-stackyard
-stacte
-stactometer
-Stacy
-stadda
-staddle
-staddling
-stade
-stadholder
-stadholderate
-stadholdership
-stadhouse
-stadia
-stadic
-stadimeter
-stadiometer
-stadion
-stadium
-stafette
-staff
-staffed
-staffelite
-staffer
-staffless
-staffman
-stag
-stagbush
-stage
-stageability
-stageable
-stageableness
-stageably
-stagecoach
-stagecoaching
-stagecraft
-staged
-stagedom
-stagehand
-stagehouse
-stageland
-stagelike
-stageman
-stager
-stagery
-stagese
-stagewise
-stageworthy
-stagewright
-staggard
-staggart
-staggarth
-Stagger
-stagger
-staggerbush
-staggerer
-staggering
-staggeringly
-staggers
-staggerweed
-staggerwort
-staggery
-staggie
-staggy
-staghead
-staghorn
-staghound
-staghunt
-staghunter
-staghunting
-stagiary
-stagily
-staginess
-staging
-Stagirite
-Stagiritic
-staglike
-stagmometer
-stagnance
-stagnancy
-stagnant
-stagnantly
-stagnantness
-stagnate
-stagnation
-stagnatory
-stagnature
-stagnicolous
-stagnize
-stagnum
-Stagonospora
-stagskin
-stagworm
-stagy
-Stahlhelm
-Stahlhelmer
-Stahlhelmist
-Stahlian
-Stahlianism
-Stahlism
-staia
-staid
-staidly
-staidness
-stain
-stainability
-stainable
-stainableness
-stainably
-stainer
-stainful
-stainierite
-staining
-stainless
-stainlessly
-stainlessness
-stainproof
-staio
-stair
-stairbeak
-stairbuilder
-stairbuilding
-staircase
-staired
-stairhead
-stairless
-stairlike
-stairstep
-stairway
-stairwise
-stairwork
-stairy
-staith
-staithman
-staiver
-stake
-stakehead
-stakeholder
-stakemaster
-staker
-stakerope
-Stakhanovism
-Stakhanovite
-stalactic
-stalactical
-stalactiform
-stalactital
-stalactite
-stalactited
-stalactitic
-stalactitical
-stalactitically
-stalactitiform
-stalactitious
-stalagma
-stalagmite
-stalagmitic
-stalagmitical
-stalagmitically
-stalagmometer
-stalagmometric
-stalagmometry
-stale
-stalely
-stalemate
-staleness
-staling
-Stalinism
-Stalinist
-Stalinite
-stalk
-stalkable
-stalked
-stalker
-stalkily
-stalkiness
-stalking
-stalkingly
-stalkless
-stalklet
-stalklike
-stalko
-stalky
-stall
-stallage
-stallar
-stallboard
-stallenger
-staller
-stallership
-stalling
-stallion
-stallionize
-stallman
-stallment
-stalwart
-stalwartism
-stalwartize
-stalwartly
-stalwartness
-stam
-stambha
-stambouline
-stamen
-stamened
-stamin
-stamina
-staminal
-staminate
-stamineal
-stamineous
-staminiferous
-staminigerous
-staminode
-staminodium
-staminody
-stammel
-stammer
-stammerer
-stammering
-stammeringly
-stammeringness
-stammerwort
-stamnos
-stamp
-stampable
-stampage
-stampedable
-stampede
-stampeder
-stampedingly
-stampee
-stamper
-stampery
-stamphead
-Stampian
-stamping
-stample
-stampless
-stampman
-stampsman
-stampweed
-Stan
-stance
-stanch
-stanchable
-stanchel
-stancheled
-stancher
-stanchion
-stanchless
-stanchly
-stanchness
-stand
-standage
-standard
-standardbred
-standardizable
-standardization
-standardize
-standardized
-standardizer
-standardwise
-standee
-standel
-standelwelks
-standelwort
-stander
-standergrass
-standerwort
-standfast
-standing
-standish
-standoff
-standoffish
-standoffishness
-standout
-standpat
-standpatism
-standpatter
-standpipe
-standpoint
-standpost
-standstill
-stane
-stanechat
-stang
-Stangeria
-stanhope
-Stanhopea
-stanine
-Stanislaw
-stanjen
-stank
-stankie
-Stanley
-Stanly
-stannane
-stannary
-stannate
-stannator
-stannel
-stanner
-stannery
-stannic
-stannide
-stanniferous
-stannite
-stanno
-stannotype
-stannous
-stannoxyl
-stannum
-stannyl
-stanza
-stanzaed
-stanzaic
-stanzaical
-stanzaically
-stanze
-stap
-stapedectomy
-stapedial
-stapediform
-stapediovestibular
-stapedius
-Stapelia
-stapelia
-stapes
-staphisagria
-staphyle
-Staphylea
-Staphyleaceae
-staphyleaceous
-staphylectomy
-staphyledema
-staphylematoma
-staphylic
-staphyline
-staphylinic
-staphylinid
-Staphylinidae
-staphylinideous
-Staphylinoidea
-Staphylinus
-staphylion
-staphylitis
-staphyloangina
-staphylococcal
-staphylococci
-staphylococcic
-Staphylococcus
-staphylococcus
-staphylodermatitis
-staphylodialysis
-staphyloedema
-staphylohemia
-staphylolysin
-staphyloma
-staphylomatic
-staphylomatous
-staphylomycosis
-staphyloncus
-staphyloplastic
-staphyloplasty
-staphyloptosia
-staphyloptosis
-staphyloraphic
-staphylorrhaphic
-staphylorrhaphy
-staphyloschisis
-staphylosis
-staphylotome
-staphylotomy
-staphylotoxin
-staple
-stapled
-stapler
-staplewise
-stapling
-Star
-star
-starblind
-starbloom
-starboard
-starbolins
-starbright
-Starbuck
-starch
-starchboard
-starched
-starchedly
-starchedness
-starcher
-starchflower
-starchily
-starchiness
-starchless
-starchlike
-starchly
-starchmaker
-starchmaking
-starchman
-starchness
-starchroot
-starchworks
-starchwort
-starchy
-starcraft
-stardom
-stare
-staree
-starer
-starets
-starfish
-starflower
-starfruit
-starful
-stargaze
-stargazer
-stargazing
-staring
-staringly
-stark
-starken
-starkly
-starkness
-starky
-starless
-starlessly
-starlessness
-starlet
-starlight
-starlighted
-starlights
-starlike
-starling
-starlit
-starlite
-starlitten
-starmonger
-starn
-starnel
-starnie
-starnose
-Staroobriadtsi
-starost
-starosta
-starosty
-starred
-starrily
-starriness
-starring
-starringly
-starry
-starshake
-starshine
-starship
-starshoot
-starshot
-starstone
-starstroke
-start
-starter
-startful
-startfulness
-starthroat
-starting
-startingly
-startish
-startle
-startler
-startling
-startlingly
-startlingness
-startlish
-startlishness
-startly
-startor
-starty
-starvation
-starve
-starveacre
-starved
-starvedly
-starveling
-starver
-starvy
-starward
-starwise
-starworm
-starwort
-stary
-stases
-stash
-stashie
-stasidion
-stasimetric
-stasimon
-stasimorphy
-stasiphobia
-stasis
-stassfurtite
-statable
-statal
-statant
-statcoulomb
-State
-state
-statecraft
-stated
-statedly
-stateful
-statefully
-statefulness
-statehood
-Statehouse
-stateless
-statelet
-statelich
-statelily
-stateliness
-stately
-statement
-statemonger
-statequake
-stater
-stateroom
-statesboy
-stateside
-statesider
-statesman
-statesmanese
-statesmanlike
-statesmanly
-statesmanship
-statesmonger
-stateswoman
-stateway
-statfarad
-stathmoi
-stathmos
-static
-statical
-statically
-Statice
-staticproof
-statics
-station
-stational
-stationarily
-stationariness
-stationary
-stationer
-stationery
-stationman
-stationmaster
-statiscope
-statism
-statist
-statistic
-statistical
-statistically
-statistician
-statisticize
-statistics
-statistology
-stative
-statoblast
-statocracy
-statocyst
-statolatry
-statolith
-statolithic
-statometer
-stator
-statoreceptor
-statorhab
-statoscope
-statospore
-statuarism
-statuarist
-statuary
-statue
-statuecraft
-statued
-statueless
-statuelike
-statuesque
-statuesquely
-statuesqueness
-statuette
-stature
-statured
-status
-statutable
-statutableness
-statutably
-statutary
-statute
-statutorily
-statutory
-statvolt
-staucher
-stauk
-staumer
-staun
-staunch
-staunchable
-staunchly
-staunchness
-staup
-stauracin
-stauraxonia
-stauraxonial
-staurion
-staurolatry
-staurolite
-staurolitic
-staurology
-Stauromedusae
-stauromedusan
-stauropegial
-stauropegion
-stauroscope
-stauroscopic
-stauroscopically
-staurotide
-stauter
-stave
-staveable
-staveless
-staver
-stavers
-staverwort
-stavesacre
-stavewise
-stavewood
-staving
-stavrite
-staw
-stawn
-staxis
-stay
-stayable
-stayed
-stayer
-staylace
-stayless
-staylessness
-staymaker
-staymaking
-staynil
-stays
-staysail
-stayship
-stchi
-stead
-steadfast
-steadfastly
-steadfastness
-steadier
-steadily
-steadiment
-steadiness
-steading
-steadman
-steady
-steadying
-steadyingly
-steadyish
-steak
-steal
-stealability
-stealable
-stealage
-stealed
-stealer
-stealing
-stealingly
-stealth
-stealthful
-stealthfully
-stealthily
-stealthiness
-stealthless
-stealthlike
-stealthwise
-stealthy
-stealy
-steam
-steamboat
-steamboating
-steamboatman
-steamcar
-steamer
-steamerful
-steamerless
-steamerload
-steamily
-steaminess
-steaming
-steamless
-steamlike
-steampipe
-steamproof
-steamship
-steamtight
-steamtightness
-steamy
-stean
-steaning
-steapsin
-stearate
-stearic
-steariform
-stearin
-stearolactone
-stearone
-stearoptene
-stearrhea
-stearyl
-steatin
-steatite
-steatitic
-steatocele
-steatogenous
-steatolysis
-steatolytic
-steatoma
-steatomatous
-steatopathic
-steatopyga
-steatopygia
-steatopygic
-steatopygous
-Steatornis
-Steatornithes
-Steatornithidae
-steatorrhea
-steatosis
-stech
-stechados
-steckling
-steddle
-Stedman
-steed
-steedless
-steedlike
-steek
-steekkan
-steekkannen
-steel
-Steelboy
-steeler
-steelhead
-steelhearted
-steelification
-steelify
-steeliness
-steeling
-steelless
-steellike
-steelmaker
-steelmaking
-steelproof
-steelware
-steelwork
-steelworker
-steelworks
-steely
-steelyard
-Steen
-steen
-steenboc
-steenbock
-steenbok
-Steenie
-steenkirk
-steenstrupine
-steenth
-steep
-steepdown
-steepen
-steeper
-steepgrass
-steepish
-steeple
-steeplebush
-steeplechase
-steeplechaser
-steeplechasing
-steepled
-steepleless
-steeplelike
-steepletop
-steeply
-steepness
-steepweed
-steepwort
-steepy
-steer
-steerability
-steerable
-steerage
-steerageway
-steerer
-steering
-steeringly
-steerling
-steerman
-steermanship
-steersman
-steerswoman
-steeve
-steevely
-steever
-steeving
-Stefan
-steg
-steganogram
-steganographical
-steganographist
-steganography
-Steganophthalmata
-steganophthalmate
-steganophthalmatous
-Steganophthalmia
-steganopod
-steganopodan
-Steganopodes
-steganopodous
-stegnosis
-stegnotic
-stegocarpous
-Stegocephalia
-stegocephalian
-stegocephalous
-Stegodon
-stegodont
-stegodontine
-Stegomus
-Stegomyia
-stegosaur
-Stegosauria
-stegosaurian
-stegosauroid
-Stegosaurus
-steid
-steigh
-Stein
-stein
-Steinberger
-steinbok
-Steinerian
-steinful
-steinkirk
-Steironema
-stekan
-stela
-stelae
-stelai
-stelar
-stele
-stell
-Stella
-stella
-stellar
-Stellaria
-stellary
-stellate
-stellated
-stellately
-stellature
-stelleridean
-stellerine
-stelliferous
-stellification
-stelliform
-stellify
-stelling
-stellionate
-stelliscript
-Stellite
-stellite
-stellular
-stellularly
-stellulate
-stelography
-stem
-stema
-stemhead
-stemless
-stemlet
-stemlike
-stemma
-stemmata
-stemmatiform
-stemmatous
-stemmed
-stemmer
-stemmery
-stemming
-stemmy
-Stemona
-Stemonaceae
-stemonaceous
-stemple
-stempost
-stemson
-stemwards
-stemware
-sten
-stenar
-stench
-stenchel
-stenchful
-stenching
-stenchion
-stenchy
-stencil
-stenciler
-stencilmaker
-stencilmaking
-stend
-steng
-stengah
-stenion
-steno
-stenobathic
-stenobenthic
-stenobragmatic
-stenobregma
-stenocardia
-stenocardiac
-Stenocarpus
-stenocephalia
-stenocephalic
-stenocephalous
-stenocephaly
-stenochoria
-stenochrome
-stenochromy
-stenocoriasis
-stenocranial
-stenocrotaphia
-Stenofiber
-stenog
-stenogastric
-stenogastry
-Stenoglossa
-stenograph
-stenographer
-stenographic
-stenographical
-stenographically
-stenographist
-stenography
-stenohaline
-stenometer
-stenopaic
-Stenopelmatidae
-stenopetalous
-stenophile
-Stenophragma
-stenophyllous
-stenorhyncous
-stenosed
-stenosepalous
-stenosis
-stenosphere
-stenostomatous
-stenostomia
-Stenotaphrum
-stenotelegraphy
-stenothermal
-stenothorax
-stenotic
-stenotype
-stenotypic
-stenotypist
-stenotypy
-stent
-stenter
-stenterer
-stenton
-Stentor
-stentorian
-stentorianly
-stentorine
-stentorious
-stentoriously
-stentoriousness
-stentoronic
-stentorophonic
-stentrel
-step
-stepaunt
-stepbairn
-stepbrother
-stepbrotherhood
-stepchild
-stepdame
-stepdaughter
-stepfather
-stepfatherhood
-stepfatherly
-stepgrandchild
-stepgrandfather
-stepgrandmother
-stepgrandson
-Stephan
-Stephana
-stephane
-stephanial
-Stephanian
-stephanic
-Stephanie
-stephanion
-stephanite
-Stephanoceros
-Stephanokontae
-stephanome
-stephanos
-Stephanotis
-stephanotis
-Stephanurus
-Stephe
-Stephen
-stepladder
-stepless
-steplike
-stepminnie
-stepmother
-stepmotherhood
-stepmotherless
-stepmotherliness
-stepmotherly
-stepnephew
-stepniece
-stepparent
-steppe
-stepped
-steppeland
-stepper
-stepping
-steppingstone
-steprelation
-steprelationship
-stepsire
-stepsister
-stepson
-stepstone
-stept
-stepuncle
-stepway
-stepwise
-steradian
-stercobilin
-stercolin
-stercophagic
-stercophagous
-stercoraceous
-stercoral
-Stercoranism
-Stercoranist
-Stercorariidae
-Stercorariinae
-stercorarious
-Stercorarius
-stercorary
-stercorate
-stercoration
-stercorean
-stercoremia
-stercoreous
-Stercorianism
-stercoricolous
-Stercorist
-stercorite
-stercorol
-stercorous
-stercovorous
-Sterculia
-Sterculiaceae
-sterculiaceous
-sterculiad
-stere
-stereagnosis
-Sterelmintha
-sterelminthic
-sterelminthous
-stereo
-stereobate
-stereobatic
-stereoblastula
-stereocamera
-stereocampimeter
-stereochemic
-stereochemical
-stereochemically
-stereochemistry
-stereochromatic
-stereochromatically
-stereochrome
-stereochromic
-stereochromically
-stereochromy
-stereocomparagraph
-stereocomparator
-stereoelectric
-stereofluoroscopic
-stereofluoroscopy
-stereogastrula
-stereognosis
-stereognostic
-stereogoniometer
-stereogram
-stereograph
-stereographer
-stereographic
-stereographical
-stereographically
-stereography
-stereoisomer
-stereoisomeric
-stereoisomerical
-stereoisomeride
-stereoisomerism
-stereomatrix
-stereome
-stereomer
-stereomeric
-stereomerical
-stereomerism
-stereometer
-stereometric
-stereometrical
-stereometrically
-stereometry
-stereomicrometer
-stereomonoscope
-stereoneural
-stereophantascope
-stereophonic
-stereophony
-stereophotogrammetry
-stereophotograph
-stereophotographic
-stereophotography
-stereophotomicrograph
-stereophotomicrography
-stereophysics
-stereopicture
-stereoplanigraph
-stereoplanula
-stereoplasm
-stereoplasma
-stereoplasmic
-stereopsis
-stereoptician
-stereopticon
-stereoradiograph
-stereoradiography
-Stereornithes
-stereornithic
-stereoroentgenogram
-stereoroentgenography
-stereoscope
-stereoscopic
-stereoscopically
-stereoscopism
-stereoscopist
-stereoscopy
-Stereospondyli
-stereospondylous
-stereostatic
-stereostatics
-stereotactic
-stereotactically
-stereotaxis
-stereotelemeter
-stereotelescope
-stereotomic
-stereotomical
-stereotomist
-stereotomy
-stereotropic
-stereotropism
-stereotypable
-stereotype
-stereotyped
-stereotyper
-stereotypery
-stereotypic
-stereotypical
-stereotyping
-stereotypist
-stereotypographer
-stereotypography
-stereotypy
-Stereum
-sterhydraulic
-steri
-steric
-sterically
-sterics
-steride
-sterigma
-sterigmata
-sterigmatic
-sterile
-sterilely
-sterileness
-sterilisable
-sterility
-sterilizability
-sterilizable
-sterilization
-sterilize
-sterilizer
-sterin
-sterk
-sterlet
-Sterling
-sterling
-sterlingly
-sterlingness
-Stern
-stern
-Sterna
-sterna
-sternad
-sternage
-sternal
-sternalis
-sternbergite
-sterncastle
-sterneber
-sternebra
-sternebrae
-sternebral
-sterned
-sternforemost
-Sterninae
-sternite
-sternitic
-sternly
-sternman
-sternmost
-sternness
-Sterno
-sternoclavicular
-sternocleidomastoid
-sternoclidomastoid
-sternocoracoid
-sternocostal
-sternofacial
-sternofacialis
-sternoglossal
-sternohumeral
-sternohyoid
-sternohyoidean
-sternomancy
-sternomastoid
-sternomaxillary
-sternonuchal
-sternopericardiac
-sternopericardial
-sternoscapular
-sternothere
-Sternotherus
-sternothyroid
-sternotracheal
-sternotribe
-sternovertebral
-sternoxiphoid
-sternpost
-sternson
-sternum
-sternutation
-sternutative
-sternutator
-sternutatory
-sternward
-sternway
-sternways
-sternworks
-stero
-steroid
-sterol
-Sterope
-sterrinck
-stert
-stertor
-stertorious
-stertoriously
-stertoriousness
-stertorous
-stertorously
-stertorousness
-sterve
-Stesichorean
-stet
-stetch
-stetharteritis
-stethogoniometer
-stethograph
-stethographic
-stethokyrtograph
-stethometer
-stethometric
-stethometry
-stethoparalysis
-stethophone
-stethophonometer
-stethoscope
-stethoscopic
-stethoscopical
-stethoscopically
-stethoscopist
-stethoscopy
-stethospasm
-Stevan
-Steve
-stevedorage
-stevedore
-stevedoring
-stevel
-Steven
-steven
-Stevensonian
-Stevensoniana
-Stevia
-stevia
-stew
-stewable
-steward
-stewardess
-stewardly
-stewardry
-stewardship
-Stewart
-Stewartia
-stewartry
-stewarty
-stewed
-stewpan
-stewpond
-stewpot
-stewy
-stey
-sthenia
-sthenic
-sthenochire
-stib
-stibbler
-stibblerig
-stibethyl
-stibial
-stibialism
-stibiate
-stibiated
-stibic
-stibiconite
-stibine
-stibious
-stibium
-stibnite
-stibonium
-sticcado
-stich
-sticharion
-sticheron
-stichic
-stichically
-stichid
-stichidium
-stichomancy
-stichometric
-stichometrical
-stichometrically
-stichometry
-stichomythic
-stichomythy
-stick
-stickability
-stickable
-stickadore
-stickadove
-stickage
-stickball
-sticked
-sticker
-stickers
-stickfast
-stickful
-stickily
-stickiness
-sticking
-stickit
-stickle
-stickleaf
-stickleback
-stickler
-stickless
-sticklike
-stickling
-stickly
-stickpin
-sticks
-stickseed
-sticksmanship
-sticktail
-sticktight
-stickum
-stickwater
-stickweed
-stickwork
-sticky
-Sticta
-Stictaceae
-Stictidaceae
-stictiform
-Stictis
-stid
-stiddy
-stife
-stiff
-stiffen
-stiffener
-stiffening
-stiffhearted
-stiffish
-stiffleg
-stifflike
-stiffly
-stiffneck
-stiffness
-stiffrump
-stifftail
-stifle
-stifledly
-stifler
-stifling
-stiflingly
-stigma
-stigmai
-stigmal
-stigmaria
-stigmarian
-stigmarioid
-stigmasterol
-stigmata
-stigmatal
-stigmatic
-stigmatical
-stigmatically
-stigmaticalness
-stigmatiferous
-stigmatiform
-stigmatism
-stigmatist
-stigmatization
-stigmatize
-stigmatizer
-stigmatoid
-stigmatose
-stigme
-stigmeology
-stigmonose
-stigonomancy
-Stikine
-Stilbaceae
-Stilbella
-stilbene
-stilbestrol
-stilbite
-stilboestrol
-Stilbum
-stile
-stileman
-stilet
-stiletto
-stilettolike
-still
-stillage
-stillatitious
-stillatory
-stillbirth
-stillborn
-stiller
-stillhouse
-stillicide
-stillicidium
-stilliform
-stilling
-Stillingia
-stillion
-stillish
-stillman
-stillness
-stillroom
-stillstand
-Stillwater
-stilly
-Stilophora
-Stilophoraceae
-stilpnomelane
-stilpnosiderite
-stilt
-stiltbird
-stilted
-stilter
-stiltify
-stiltiness
-stiltish
-stiltlike
-Stilton
-stilty
-stim
-stime
-stimpart
-stimpert
-stimulability
-stimulable
-stimulance
-stimulancy
-stimulant
-stimulate
-stimulatingly
-stimulation
-stimulative
-stimulator
-stimulatory
-stimulatress
-stimulatrix
-stimuli
-stimulogenous
-stimulus
-stimy
-stine
-sting
-stingaree
-stingareeing
-stingbull
-stinge
-stinger
-stingfish
-stingily
-stinginess
-stinging
-stingingly
-stingingness
-stingless
-stingo
-stingproof
-stingray
-stingtail
-stingy
-stink
-stinkard
-stinkardly
-stinkball
-stinkberry
-stinkbird
-stinkbug
-stinkbush
-stinkdamp
-stinker
-stinkhorn
-stinking
-stinkingly
-stinkingness
-stinkpot
-stinkstone
-stinkweed
-stinkwood
-stinkwort
-stint
-stinted
-stintedly
-stintedness
-stinter
-stintingly
-stintless
-stinty
-stion
-stionic
-Stipa
-stipe
-stiped
-stipel
-stipellate
-stipend
-stipendial
-stipendiarian
-stipendiary
-stipendiate
-stipendium
-stipendless
-stipes
-stipiform
-stipitate
-stipitiform
-stipiture
-Stipiturus
-stippen
-stipple
-stippled
-stippler
-stippling
-stipply
-stipula
-stipulable
-stipulaceous
-stipulae
-stipular
-stipulary
-stipulate
-stipulation
-stipulator
-stipulatory
-stipule
-stipuled
-stipuliferous
-stipuliform
-stir
-stirabout
-stirk
-stirless
-stirlessly
-stirlessness
-stirp
-stirpicultural
-stirpiculture
-stirpiculturist
-stirps
-stirra
-stirrable
-stirrage
-stirrer
-stirring
-stirringly
-stirrup
-stirrupless
-stirruplike
-stirrupwise
-stitch
-stitchbird
-stitchdown
-stitcher
-stitchery
-stitching
-stitchlike
-stitchwhile
-stitchwork
-stitchwort
-stite
-stith
-stithy
-stive
-stiver
-stivy
-Stizolobium
-stoa
-stoach
-stoat
-stoater
-stob
-stocah
-stoccado
-stoccata
-stochastic
-stochastical
-stochastically
-stock
-stockade
-stockannet
-stockbow
-stockbreeder
-stockbreeding
-Stockbridge
-stockbroker
-stockbrokerage
-stockbroking
-stockcar
-stocker
-stockfather
-stockfish
-stockholder
-stockholding
-stockhouse
-stockily
-stockiness
-stockinet
-stocking
-stockinger
-stockingless
-stockish
-stockishly
-stockishness
-stockjobber
-stockjobbery
-stockjobbing
-stockjudging
-stockkeeper
-stockkeeping
-stockless
-stocklike
-stockmaker
-stockmaking
-stockman
-stockowner
-stockpile
-stockpot
-stockproof
-stockrider
-stockriding
-stocks
-stockstone
-stocktaker
-stocktaking
-Stockton
-stockwork
-stockwright
-stocky
-stockyard
-stod
-stodge
-stodger
-stodgery
-stodgily
-stodginess
-stodgy
-stoechas
-stoep
-stof
-stoff
-stog
-stoga
-stogie
-stogy
-Stoic
-stoic
-stoical
-stoically
-stoicalness
-stoicharion
-stoichiological
-stoichiology
-stoichiometric
-stoichiometrical
-stoichiometrically
-stoichiometry
-Stoicism
-stoicism
-Stokavci
-Stokavian
-Stokavski
-stoke
-stokehold
-stokehole
-stoker
-stokerless
-Stokesia
-stokesite
-stola
-stolae
-stole
-stoled
-stolelike
-stolen
-stolenly
-stolenness
-stolenwise
-stolewise
-stolid
-stolidity
-stolidly
-stolidness
-stolist
-stolkjaerre
-stollen
-stolon
-stolonate
-stoloniferous
-stoloniferously
-stolonlike
-stolzite
-stoma
-stomacace
-stomach
-stomachable
-stomachal
-stomacher
-stomachful
-stomachfully
-stomachfulness
-stomachic
-stomachically
-stomachicness
-stomaching
-stomachless
-stomachlessness
-stomachy
-stomapod
-Stomapoda
-stomapodiform
-stomapodous
-stomata
-stomatal
-stomatalgia
-stomate
-stomatic
-stomatiferous
-stomatitic
-stomatitis
-stomatocace
-Stomatoda
-stomatodaeal
-stomatodaeum
-stomatode
-stomatodeum
-stomatodynia
-stomatogastric
-stomatograph
-stomatography
-stomatolalia
-stomatologic
-stomatological
-stomatologist
-stomatology
-stomatomalacia
-stomatomenia
-stomatomy
-stomatomycosis
-stomatonecrosis
-stomatopathy
-Stomatophora
-stomatophorous
-stomatoplastic
-stomatoplasty
-stomatopod
-Stomatopoda
-stomatopodous
-stomatorrhagia
-stomatoscope
-stomatoscopy
-stomatose
-stomatosepsis
-stomatotomy
-stomatotyphus
-stomatous
-stomenorrhagia
-stomium
-stomodaea
-stomodaeal
-stomodaeum
-Stomoisia
-stomoxys
-stomp
-stomper
-stonable
-stond
-Stone
-stone
-stoneable
-stonebird
-stonebiter
-stoneboat
-stonebow
-stonebrash
-stonebreak
-stonebrood
-stonecast
-stonechat
-stonecraft
-stonecrop
-stonecutter
-stoned
-stonedamp
-stonefish
-stonegale
-stonegall
-stonehand
-stonehatch
-stonehead
-stonehearted
-Stonehenge
-stonelayer
-stonelaying
-stoneless
-stonelessness
-stonelike
-stoneman
-stonemason
-stonemasonry
-stonen
-stonepecker
-stoner
-stoneroot
-stoneseed
-stoneshot
-stonesmatch
-stonesmich
-stonesmitch
-stonesmith
-stonewall
-stonewaller
-stonewally
-stoneware
-stoneweed
-stonewise
-stonewood
-stonework
-stoneworker
-stonewort
-stoneyard
-stong
-stonied
-stonifiable
-stonify
-stonily
-stoniness
-stoning
-stonish
-stonishment
-stonker
-stony
-stonyhearted
-stonyheartedly
-stonyheartedness
-stood
-stooded
-stooden
-stoof
-stooge
-stook
-stooker
-stookie
-stool
-stoolball
-stoollike
-stoon
-stoond
-stoop
-stooper
-stoopgallant
-stooping
-stoopingly
-stoory
-stoot
-stoothing
-stop
-stopa
-stopback
-stopblock
-stopboard
-stopcock
-stope
-stoper
-stopgap
-stophound
-stoping
-stopless
-stoplessness
-stopover
-stoppability
-stoppable
-stoppableness
-stoppably
-stoppage
-stopped
-stopper
-stopperless
-stoppeur
-stopping
-stoppit
-stopple
-stopwater
-stopwork
-storable
-storage
-storax
-store
-storeen
-storehouse
-storehouseman
-storekeep
-storekeeper
-storekeeping
-storeman
-storer
-storeroom
-storeship
-storesman
-storge
-storiate
-storiation
-storied
-storier
-storiette
-storify
-storiological
-storiologist
-storiology
-stork
-storken
-storkish
-storklike
-storkling
-storkwise
-storm
-stormable
-Stormberg
-stormbird
-stormbound
-stormcock
-stormer
-stormful
-stormfully
-stormfulness
-stormily
-storminess
-storming
-stormingly
-stormish
-stormless
-stormlessness
-stormlike
-stormproof
-stormward
-stormwind
-stormwise
-stormy
-Storting
-story
-storybook
-storyless
-storymaker
-storymonger
-storyteller
-storytelling
-storywise
-storywork
-stosh
-stoss
-stosston
-stot
-stotinka
-stotter
-stotterel
-stoun
-stound
-stoundmeal
-stoup
-stoupful
-stour
-stouring
-stourliness
-stourness
-stoury
-stoush
-stout
-stouten
-stouth
-stouthearted
-stoutheartedly
-stoutheartedness
-stoutish
-stoutly
-stoutness
-stoutwood
-stouty
-stove
-stovebrush
-stoveful
-stovehouse
-stoveless
-stovemaker
-stovemaking
-stoveman
-stoven
-stovepipe
-stover
-stovewood
-stow
-stowable
-stowage
-stowaway
-stowbord
-stowbordman
-stowce
-stowdown
-stower
-stowing
-stownlins
-stowwood
-stra
-strabism
-strabismal
-strabismally
-strabismic
-strabismical
-strabismometer
-strabismometry
-strabismus
-strabometer
-strabometry
-strabotome
-strabotomy
-strack
-strackling
-stract
-Strad
-strad
-stradametrical
-straddle
-straddleback
-straddlebug
-straddler
-straddleways
-straddlewise
-straddling
-straddlingly
-strade
-stradine
-stradiot
-Stradivari
-Stradivarius
-stradl
-stradld
-stradlings
-strae
-strafe
-strafer
-Straffordian
-strag
-straggle
-straggler
-straggling
-stragglingly
-straggly
-stragular
-stragulum
-straight
-straightabout
-straightaway
-straightedge
-straighten
-straightener
-straightforward
-straightforwardly
-straightforwardness
-straightforwards
-straighthead
-straightish
-straightly
-straightness
-straighttail
-straightup
-straightwards
-straightway
-straightways
-straightwise
-straik
-strain
-strainable
-strainableness
-strainably
-strained
-strainedly
-strainedness
-strainer
-strainerman
-straining
-strainingly
-strainless
-strainlessly
-strainproof
-strainslip
-straint
-strait
-straiten
-straitlacedness
-straitlacing
-straitly
-straitness
-straitsman
-straitwork
-Straka
-strake
-straked
-straky
-stram
-stramash
-stramazon
-stramineous
-stramineously
-strammel
-strammer
-stramonium
-stramony
-stramp
-strand
-strandage
-strander
-stranding
-strandless
-strandward
-strang
-strange
-strangeling
-strangely
-strangeness
-stranger
-strangerdom
-strangerhood
-strangerlike
-strangership
-strangerwise
-strangle
-strangleable
-stranglement
-strangler
-strangles
-strangletare
-strangleweed
-strangling
-stranglingly
-strangulable
-strangulate
-strangulation
-strangulative
-strangulatory
-strangullion
-strangurious
-strangury
-stranner
-strany
-strap
-straphang
-straphanger
-straphead
-strapless
-straplike
-strappable
-strappado
-strappan
-strapped
-strapper
-strapping
-strapple
-strapwork
-strapwort
-strass
-strata
-stratagem
-stratagematic
-stratagematical
-stratagematically
-stratagematist
-stratagemical
-stratagemically
-stratal
-stratameter
-stratege
-strategetic
-strategetics
-strategi
-strategian
-strategic
-strategical
-strategically
-strategics
-strategist
-strategize
-strategos
-strategy
-Stratfordian
-strath
-strathspey
-strati
-stratic
-straticulate
-straticulation
-stratification
-stratified
-stratiform
-stratify
-stratigrapher
-stratigraphic
-stratigraphical
-stratigraphically
-stratigraphist
-stratigraphy
-Stratiomyiidae
-Stratiotes
-stratlin
-stratochamber
-stratocracy
-stratocrat
-stratocratic
-stratographic
-stratographical
-stratographically
-stratography
-stratonic
-Stratonical
-stratopedarch
-stratoplane
-stratose
-stratosphere
-stratospheric
-stratospherical
-stratotrainer
-stratous
-stratum
-stratus
-straucht
-strauchten
-stravage
-strave
-straw
-strawberry
-strawberrylike
-strawbill
-strawboard
-strawbreadth
-strawen
-strawer
-strawflower
-strawfork
-strawless
-strawlike
-strawman
-strawmote
-strawsmall
-strawsmear
-strawstack
-strawstacker
-strawwalker
-strawwork
-strawworm
-strawy
-strawyard
-stray
-strayaway
-strayer
-strayling
-stre
-streahte
-streak
-streaked
-streakedly
-streakedness
-streaker
-streakily
-streakiness
-streaklike
-streakwise
-streaky
-stream
-streamer
-streamful
-streamhead
-streaminess
-streaming
-streamingly
-streamless
-streamlet
-streamlike
-streamline
-streamlined
-streamliner
-streamling
-streamside
-streamward
-streamway
-streamwort
-streamy
-streck
-streckly
-stree
-streek
-streel
-streeler
-streen
-streep
-street
-streetage
-streetcar
-streetful
-streetless
-streetlet
-streetlike
-streets
-streetside
-streetwalker
-streetwalking
-streetward
-streetway
-streetwise
-streite
-streke
-Strelitz
-Strelitzi
-strelitzi
-Strelitzia
-Streltzi
-streltzi
-stremma
-stremmatograph
-streng
-strengite
-strength
-strengthen
-strengthener
-strengthening
-strengtheningly
-strengthful
-strengthfulness
-strengthily
-strengthless
-strengthlessly
-strengthlessness
-strengthy
-strent
-strenth
-strenuity
-strenuosity
-strenuous
-strenuously
-strenuousness
-strepen
-strepent
-strepera
-streperous
-strephonade
-strephosymbolia
-strepitant
-strepitantly
-strepitation
-strepitous
-strepor
-Strepsiceros
-strepsiceros
-strepsinema
-Strepsiptera
-strepsipteral
-strepsipteran
-strepsipteron
-strepsipterous
-strepsis
-strepsitene
-streptaster
-streptobacilli
-streptobacillus
-Streptocarpus
-streptococcal
-streptococci
-streptococcic
-Streptococcus
-streptococcus
-streptolysin
-Streptomyces
-streptomycin
-Streptoneura
-streptoneural
-streptoneurous
-streptosepticemia
-streptothricial
-streptothricin
-streptothricosis
-Streptothrix
-streptotrichal
-streptotrichosis
-stress
-stresser
-stressful
-stressfully
-stressless
-stresslessness
-stret
-stretch
-stretchable
-stretchberry
-stretcher
-stretcherman
-stretchiness
-stretchneck
-stretchproof
-stretchy
-stretman
-strette
-stretti
-stretto
-strew
-strewage
-strewer
-strewment
-strewn
-strey
-streyne
-stria
-striae
-strial
-Striaria
-Striariaceae
-striatal
-striate
-striated
-striation
-striatum
-striature
-strich
-striche
-strick
-stricken
-strickenly
-strickenness
-stricker
-strickle
-strickler
-strickless
-strict
-striction
-strictish
-strictly
-strictness
-stricture
-strictured
-strid
-stridden
-striddle
-stride
-strideleg
-stridelegs
-stridence
-stridency
-strident
-stridently
-strider
-strideways
-stridhan
-stridhana
-stridhanum
-stridingly
-stridling
-stridlins
-stridor
-stridulant
-stridulate
-stridulation
-stridulator
-stridulatory
-stridulent
-stridulous
-stridulously
-stridulousness
-strife
-strifeful
-strifeless
-strifemaker
-strifemaking
-strifemonger
-strifeproof
-striffen
-strig
-Striga
-striga
-strigae
-strigal
-strigate
-Striges
-striggle
-stright
-Strigidae
-Strigiformes
-strigil
-strigilate
-strigilation
-strigilator
-strigiles
-strigilis
-strigillose
-strigilous
-Striginae
-strigine
-strigose
-strigous
-strigovite
-Strigula
-Strigulaceae
-strigulose
-strike
-strikeboat
-strikebreaker
-strikebreaking
-strikeless
-striker
-striking
-strikingly
-strikingness
-strind
-string
-stringboard
-stringcourse
-stringed
-stringency
-stringene
-stringent
-stringently
-stringentness
-stringer
-stringful
-stringhalt
-stringhalted
-stringhaltedness
-stringiness
-stringing
-stringless
-stringlike
-stringmaker
-stringmaking
-stringman
-stringpiece
-stringsman
-stringways
-stringwood
-stringy
-stringybark
-strinkle
-striola
-striolae
-striolate
-striolated
-striolet
-strip
-stripe
-striped
-stripeless
-striper
-striplet
-stripling
-strippage
-stripped
-stripper
-stripping
-strippit
-strippler
-stript
-stripy
-strit
-strive
-strived
-striven
-striver
-striving
-strivingly
-Strix
-strix
-stroam
-strobic
-strobila
-strobilaceous
-strobilae
-strobilate
-strobilation
-strobile
-strobili
-strobiliferous
-strobiliform
-strobiline
-strobilization
-strobiloid
-Strobilomyces
-Strobilophyta
-strobilus
-stroboscope
-stroboscopic
-stroboscopical
-stroboscopy
-strobotron
-strockle
-stroddle
-strode
-stroil
-stroke
-stroker
-strokesman
-stroking
-stroky
-strold
-stroll
-strolld
-stroller
-strom
-stroma
-stromal
-stromata
-Stromateidae
-stromateoid
-stromatic
-stromatiform
-stromatology
-Stromatopora
-Stromatoporidae
-stromatoporoid
-Stromatoporoidea
-stromatous
-stromb
-Strombidae
-strombiform
-strombite
-stromboid
-strombolian
-strombuliferous
-strombuliform
-Strombus
-strome
-stromeyerite
-stromming
-strone
-strong
-strongback
-strongbark
-strongbox
-strongbrained
-strongfully
-stronghand
-stronghead
-strongheadedly
-strongheadedness
-stronghearted
-stronghold
-strongish
-stronglike
-strongly
-strongness
-strongylate
-strongyle
-strongyliasis
-strongylid
-Strongylidae
-strongylidosis
-strongyloid
-Strongyloides
-strongyloidosis
-strongylon
-Strongyloplasmata
-Strongylosis
-strongylosis
-Strongylus
-strontia
-strontian
-strontianiferous
-strontianite
-strontic
-strontion
-strontitic
-strontium
-strook
-strooken
-stroot
-strop
-strophaic
-strophanhin
-Strophanthus
-Stropharia
-strophe
-strophic
-strophical
-strophically
-strophiolate
-strophiolated
-strophiole
-strophoid
-Strophomena
-Strophomenacea
-strophomenid
-Strophomenidae
-strophomenoid
-strophosis
-strophotaxis
-strophulus
-stropper
-stroppings
-stroth
-stroud
-strouding
-strounge
-stroup
-strouthiocamel
-strouthiocamelian
-strouthocamelian
-strove
-strow
-strowd
-strown
-stroy
-stroyer
-stroygood
-strub
-strubbly
-struck
-strucken
-structural
-structuralism
-structuralist
-structuralization
-structuralize
-structurally
-structuration
-structure
-structured
-structureless
-structurely
-structurist
-strudel
-strue
-struggle
-struggler
-struggling
-strugglingly
-Struldbrug
-Struldbruggian
-Struldbruggism
-strum
-struma
-strumae
-strumatic
-strumaticness
-strumectomy
-Strumella
-strumiferous
-strumiform
-strumiprivic
-strumiprivous
-strumitis
-strummer
-strumose
-strumous
-strumousness
-strumpet
-strumpetlike
-strumpetry
-strumstrum
-strumulose
-strung
-strunt
-strut
-struth
-struthian
-struthiform
-Struthio
-struthioid
-Struthiomimus
-Struthiones
-Struthionidae
-struthioniform
-Struthioniformes
-Struthiopteris
-struthious
-struthonine
-strutter
-strutting
-struttingly
-struv
-struvite
-strych
-strychnia
-strychnic
-strychnin
-strychnine
-strychninic
-strychninism
-strychninization
-strychninize
-strychnize
-strychnol
-Strychnos
-Strymon
-Stu
-Stuart
-Stuartia
-stub
-stubachite
-stubb
-stubbed
-stubbedness
-stubber
-stubbiness
-stubble
-stubbleberry
-stubbled
-stubbleward
-stubbly
-stubborn
-stubbornhearted
-stubbornly
-stubbornness
-stubboy
-stubby
-stubchen
-stuber
-stuboy
-stubrunner
-stucco
-stuccoer
-stuccowork
-stuccoworker
-stuccoyer
-stuck
-stuckling
-stucturelessness
-stud
-studbook
-studder
-studdie
-studding
-studdle
-stude
-student
-studenthood
-studentless
-studentlike
-studentry
-studentship
-studerite
-studfish
-studflower
-studhorse
-studia
-studiable
-studied
-studiedly
-studiedness
-studier
-studio
-studious
-studiously
-studiousness
-Studite
-Studium
-studium
-studwork
-study
-stue
-stuff
-stuffed
-stuffender
-stuffer
-stuffgownsman
-stuffily
-stuffiness
-stuffing
-stuffy
-stug
-stuggy
-stuiver
-stull
-stuller
-stulm
-stultification
-stultifier
-stultify
-stultiloquence
-stultiloquently
-stultiloquious
-stultioquy
-stultloquent
-stum
-stumble
-stumbler
-stumbling
-stumblingly
-stumbly
-stumer
-stummer
-stummy
-stump
-stumpage
-stumper
-stumpily
-stumpiness
-stumpish
-stumpless
-stumplike
-stumpling
-stumpnose
-stumpwise
-stumpy
-stun
-Stundism
-Stundist
-stung
-stunk
-stunkard
-stunner
-stunning
-stunningly
-stunpoll
-stunsail
-stunsle
-stunt
-stunted
-stuntedly
-stuntedness
-stunter
-stuntiness
-stuntness
-stunty
-stupa
-stupe
-stupefacient
-stupefaction
-stupefactive
-stupefactiveness
-stupefied
-stupefiedness
-stupefier
-stupefy
-stupend
-stupendly
-stupendous
-stupendously
-stupendousness
-stupent
-stupeous
-stupex
-stupid
-stupidhead
-stupidish
-stupidity
-stupidly
-stupidness
-stupor
-stuporific
-stuporose
-stuporous
-stupose
-stupp
-stuprate
-stupration
-stuprum
-stupulose
-sturdied
-sturdily
-sturdiness
-sturdy
-sturdyhearted
-sturgeon
-sturine
-Sturiones
-sturionine
-sturk
-Sturmian
-Sturnella
-Sturnidae
-sturniform
-Sturninae
-sturnine
-sturnoid
-Sturnus
-sturt
-sturtan
-sturtin
-sturtion
-sturtite
-stuss
-stut
-stutter
-stutterer
-stuttering
-stutteringly
-sty
-styan
-styca
-styceric
-stycerin
-stycerinol
-stychomythia
-styful
-styfziekte
-Stygial
-Stygian
-stylar
-Stylaster
-Stylasteridae
-stylate
-style
-stylebook
-styledom
-styleless
-stylelessness
-stylelike
-styler
-stylet
-stylewort
-Stylidiaceae
-stylidiaceous
-Stylidium
-styliferous
-styliform
-styline
-styling
-stylish
-stylishly
-stylishness
-stylist
-stylistic
-stylistical
-stylistically
-stylistics
-stylite
-stylitic
-stylitism
-stylization
-stylize
-stylizer
-stylo
-styloauricularis
-stylobate
-Stylochus
-styloglossal
-styloglossus
-stylogonidium
-stylograph
-stylographic
-stylographical
-stylographically
-stylography
-stylohyal
-stylohyoid
-stylohyoidean
-stylohyoideus
-styloid
-stylolite
-stylolitic
-stylomandibular
-stylomastoid
-stylomaxillary
-stylometer
-Stylommatophora
-stylommatophorous
-stylomyloid
-Stylonurus
-Stylonychia
-stylopharyngeal
-stylopharyngeus
-stylopid
-Stylopidae
-stylopization
-stylopized
-stylopod
-stylopodium
-Stylops
-stylops
-Stylosanthes
-stylospore
-stylosporous
-stylostegium
-stylotypite
-stylus
-stymie
-Stymphalian
-Stymphalid
-Stymphalides
-Styphelia
-styphnate
-styphnic
-stypsis
-styptic
-styptical
-stypticalness
-stypticity
-stypticness
-Styracaceae
-styracaceous
-styracin
-Styrax
-styrax
-styrene
-Styrian
-styrogallol
-styrol
-styrolene
-styrone
-styryl
-styrylic
-stythe
-styward
-Styx
-Styxian
-suability
-suable
-suably
-suade
-Suaeda
-suaharo
-Sualocin
-Suanitian
-suant
-suantly
-suasible
-suasion
-suasionist
-suasive
-suasively
-suasiveness
-suasory
-suavastika
-suave
-suavely
-suaveness
-suaveolent
-suavify
-suaviloquence
-suaviloquent
-suavity
-sub
-subabbot
-subabdominal
-subability
-subabsolute
-subacademic
-subaccount
-subacetate
-subacid
-subacidity
-subacidly
-subacidness
-subacidulous
-subacrid
-subacrodrome
-subacromial
-subact
-subacuminate
-subacute
-subacutely
-subadditive
-subadjacent
-subadjutor
-subadministrate
-subadministration
-subadministrator
-subadult
-subaduncate
-subaerate
-subaeration
-subaerial
-subaerially
-subaetheric
-subaffluent
-subage
-subagency
-subagent
-subaggregate
-subah
-subahdar
-subahdary
-subahship
-subaid
-Subakhmimic
-subalary
-subalate
-subalgebra
-subalkaline
-suballiance
-subalmoner
-subalpine
-subaltern
-subalternant
-subalternate
-subalternately
-subalternating
-subalternation
-subalternity
-subanal
-subandean
-subangled
-subangular
-subangulate
-subangulated
-subanniversary
-subantarctic
-subantichrist
-subantique
-Subanun
-subapical
-subaponeurotic
-subapostolic
-subapparent
-subappearance
-subappressed
-subapprobation
-subapterous
-subaquatic
-subaquean
-subaqueous
-subarachnoid
-subarachnoidal
-subarachnoidean
-subarboraceous
-subarboreal
-subarborescent
-subarch
-subarchesporial
-subarchitect
-subarctic
-subarcuate
-subarcuated
-subarcuation
-subarea
-subareolar
-subareolet
-Subarian
-subarmor
-subarouse
-subarrhation
-subartesian
-subarticle
-subarytenoid
-subascending
-subassemblage
-subassembly
-subassociation
-subastragalar
-subastragaloid
-subastral
-subastringent
-subatom
-subatomic
-subattenuate
-subattenuated
-subattorney
-subaud
-subaudible
-subaudition
-subauditionist
-subauditor
-subauditur
-subaural
-subauricular
-subautomatic
-subaverage
-subaxillar
-subaxillary
-subbailie
-subbailiff
-subbailiwick
-subballast
-subband
-subbank
-subbasal
-subbasaltic
-subbase
-subbasement
-subbass
-subbeadle
-subbeau
-subbias
-subbifid
-subbing
-subbituminous
-subbookkeeper
-subboreal
-subbourdon
-subbrachycephalic
-subbrachycephaly
-subbrachyskelic
-subbranch
-subbranched
-subbranchial
-subbreed
-subbrigade
-subbrigadier
-subbroker
-subbromid
-subbromide
-subbronchial
-subbureau
-subcaecal
-subcalcareous
-subcalcarine
-subcaliber
-subcallosal
-subcampanulate
-subcancellate
-subcandid
-subcantor
-subcapsular
-subcaptain
-subcaption
-subcarbide
-subcarbonate
-Subcarboniferous
-subcarbureted
-subcarburetted
-subcardinal
-subcarinate
-subcartilaginous
-subcase
-subcash
-subcashier
-subcasino
-subcast
-subcaste
-subcategory
-subcaudal
-subcaudate
-subcaulescent
-subcause
-subcavate
-subcavity
-subcelestial
-subcell
-subcellar
-subcenter
-subcentral
-subcentrally
-subchairman
-subchamberer
-subchancel
-subchanter
-subchapter
-subchaser
-subchela
-subchelate
-subcheliform
-subchief
-subchloride
-subchondral
-subchordal
-subchorioid
-subchorioidal
-subchorionic
-subchoroid
-subchoroidal
-subcinctorium
-subcineritious
-subcingulum
-subcircuit
-subcircular
-subcision
-subcity
-subclaim
-Subclamatores
-subclan
-subclass
-subclassify
-subclause
-subclavate
-subclavia
-subclavian
-subclavicular
-subclavioaxillary
-subclaviojugular
-subclavius
-subclerk
-subclimate
-subclimax
-subclinical
-subclover
-subcoastal
-subcollateral
-subcollector
-subcollegiate
-subcolumnar
-subcommander
-subcommendation
-subcommended
-subcommissary
-subcommissaryship
-subcommission
-subcommissioner
-subcommit
-subcommittee
-subcompany
-subcompensate
-subcompensation
-subcompressed
-subconcave
-subconcession
-subconcessionaire
-subconchoidal
-subconference
-subconformable
-subconical
-subconjunctival
-subconjunctively
-subconnate
-subconnect
-subconnivent
-subconscience
-subconscious
-subconsciously
-subconsciousness
-subconservator
-subconsideration
-subconstable
-subconstellation
-subconsul
-subcontained
-subcontest
-subcontiguous
-subcontinent
-subcontinental
-subcontinual
-subcontinued
-subcontinuous
-subcontract
-subcontracted
-subcontractor
-subcontraoctave
-subcontrariety
-subcontrarily
-subcontrary
-subcontrol
-subconvex
-subconvolute
-subcool
-subcoracoid
-subcordate
-subcordiform
-subcoriaceous
-subcorneous
-subcorporation
-subcortex
-subcortical
-subcortically
-subcorymbose
-subcosta
-subcostal
-subcostalis
-subcouncil
-subcranial
-subcreative
-subcreek
-subcrenate
-subcrepitant
-subcrepitation
-subcrescentic
-subcrest
-subcriminal
-subcrossing
-subcrureal
-subcrureus
-subcrust
-subcrustaceous
-subcrustal
-subcrystalline
-subcubical
-subcuboidal
-subcultrate
-subcultural
-subculture
-subcurate
-subcurator
-subcuratorship
-subcurrent
-subcutaneous
-subcutaneously
-subcutaneousness
-subcuticular
-subcutis
-subcyaneous
-subcyanide
-subcylindric
-subcylindrical
-subdatary
-subdate
-subdeacon
-subdeaconate
-subdeaconess
-subdeaconry
-subdeaconship
-subdealer
-subdean
-subdeanery
-subdeb
-subdebutante
-subdecanal
-subdecimal
-subdecuple
-subdeducible
-subdefinition
-subdelegate
-subdelegation
-subdelirium
-subdeltaic
-subdeltoid
-subdeltoidal
-subdemonstrate
-subdemonstration
-subdenomination
-subdentate
-subdentated
-subdented
-subdenticulate
-subdepartment
-subdeposit
-subdepository
-subdepot
-subdepressed
-subdeputy
-subderivative
-subdermal
-subdeterminant
-subdevil
-subdiaconal
-subdiaconate
-subdial
-subdialect
-subdialectal
-subdialectally
-subdiapason
-subdiapente
-subdiaphragmatic
-subdichotomize
-subdichotomous
-subdichotomously
-subdichotomy
-subdie
-subdilated
-subdirector
-subdiscoidal
-subdisjunctive
-subdistich
-subdistichous
-subdistinction
-subdistinguish
-subdistinguished
-subdistrict
-subdititious
-subdititiously
-subdivecious
-subdiversify
-subdividable
-subdivide
-subdivider
-subdividing
-subdividingly
-subdivine
-subdivisible
-subdivision
-subdivisional
-subdivisive
-subdoctor
-subdolent
-subdolichocephalic
-subdolichocephaly
-subdolous
-subdolously
-subdolousness
-subdominant
-subdorsal
-subdorsally
-subdouble
-subdrain
-subdrainage
-subdrill
-subdruid
-subduable
-subduableness
-subduably
-subdual
-subduce
-subduct
-subduction
-subdue
-subdued
-subduedly
-subduedness
-subduement
-subduer
-subduing
-subduingly
-subduple
-subduplicate
-subdural
-subdurally
-subecho
-subectodermal
-subedit
-subeditor
-subeditorial
-subeditorship
-subeffective
-subelection
-subelectron
-subelement
-subelementary
-subelliptic
-subelliptical
-subelongate
-subemarginate
-subencephalon
-subencephaltic
-subendocardial
-subendorse
-subendorsement
-subendothelial
-subendymal
-subenfeoff
-subengineer
-subentire
-subentitle
-subentry
-subepidermal
-subepiglottic
-subepithelial
-subepoch
-subequal
-subequality
-subequally
-subequatorial
-subequilateral
-subequivalve
-suber
-suberane
-suberate
-suberect
-subereous
-suberic
-suberiferous
-suberification
-suberiform
-suberin
-suberinization
-suberinize
-Suberites
-Suberitidae
-suberization
-suberize
-suberone
-suberose
-suberous
-subescheator
-subesophageal
-subessential
-subetheric
-subexaminer
-subexcitation
-subexcite
-subexecutor
-subexternal
-subface
-subfacies
-subfactor
-subfactorial
-subfactory
-subfalcate
-subfalcial
-subfalciform
-subfamily
-subfascial
-subfastigiate
-subfebrile
-subferryman
-subfestive
-subfeu
-subfeudation
-subfeudatory
-subfibrous
-subfief
-subfigure
-subfissure
-subfix
-subflavor
-subflexuose
-subfloor
-subflooring
-subflora
-subflush
-subfluvial
-subfocal
-subfoliar
-subforeman
-subform
-subformation
-subfossil
-subfossorial
-subfoundation
-subfraction
-subframe
-subfreshman
-subfrontal
-subfulgent
-subfumigation
-subfumose
-subfunctional
-subfusc
-subfuscous
-subfusiform
-subfusk
-subgalea
-subgallate
-subganger
-subgape
-subgelatinous
-subgeneric
-subgenerical
-subgenerically
-subgeniculate
-subgenital
-subgens
-subgenual
-subgenus
-subgeometric
-subget
-subgit
-subglabrous
-subglacial
-subglacially
-subglenoid
-subglobose
-subglobosely
-subglobular
-subglobulose
-subglossal
-subglossitis
-subglottic
-subglumaceous
-subgod
-subgoverness
-subgovernor
-subgrade
-subgranular
-subgrin
-subgroup
-subgular
-subgwely
-subgyre
-subgyrus
-subhalid
-subhalide
-subhall
-subharmonic
-subhastation
-subhatchery
-subhead
-subheading
-subheadquarters
-subheadwaiter
-subhealth
-subhedral
-subhemispherical
-subhepatic
-subherd
-subhero
-subhexagonal
-subhirsute
-subhooked
-subhorizontal
-subhornblendic
-subhouse
-subhuman
-subhumid
-subhyaline
-subhyaloid
-subhymenial
-subhymenium
-subhyoid
-subhyoidean
-subhypothesis
-subhysteria
-subicle
-subicteric
-subicular
-subiculum
-subidar
-subidea
-subideal
-subimaginal
-subimago
-subimbricate
-subimbricated
-subimposed
-subimpressed
-subincandescent
-subincident
-subincise
-subincision
-subincomplete
-subindex
-subindicate
-subindication
-subindicative
-subindices
-subindividual
-subinduce
-subinfer
-subinfeud
-subinfeudate
-subinfeudation
-subinfeudatory
-subinflammation
-subinflammatory
-subinform
-subingression
-subinguinal
-subinitial
-subinoculate
-subinoculation
-subinsert
-subinsertion
-subinspector
-subinspectorship
-subintegumental
-subintellection
-subintelligential
-subintelligitur
-subintent
-subintention
-subintercessor
-subinternal
-subinterval
-subintestinal
-subintroduce
-subintroduction
-subintroductory
-subinvoluted
-subinvolution
-subiodide
-subirrigate
-subirrigation
-subitane
-subitaneous
-subitem
-Subiya
-subjacency
-subjacent
-subjacently
-subjack
-subject
-subjectability
-subjectable
-subjectdom
-subjected
-subjectedly
-subjectedness
-subjecthood
-subjectibility
-subjectible
-subjectification
-subjectify
-subjectile
-subjection
-subjectional
-subjectist
-subjective
-subjectively
-subjectiveness
-subjectivism
-subjectivist
-subjectivistic
-subjectivistically
-subjectivity
-subjectivize
-subjectivoidealistic
-subjectless
-subjectlike
-subjectness
-subjectship
-subjee
-subjicible
-subjoin
-subjoinder
-subjoint
-subjudge
-subjudiciary
-subjugable
-subjugal
-subjugate
-subjugation
-subjugator
-subjugular
-subjunct
-subjunction
-subjunctive
-subjunctively
-subjunior
-subking
-subkingdom
-sublabial
-sublaciniate
-sublacustrine
-sublanate
-sublanceolate
-sublanguage
-sublapsarian
-sublapsarianism
-sublapsary
-sublaryngeal
-sublate
-sublateral
-sublation
-sublative
-subleader
-sublease
-sublecturer
-sublegislation
-sublegislature
-sublenticular
-sublessee
-sublessor
-sublet
-sublethal
-sublettable
-subletter
-sublevaminous
-sublevate
-sublevation
-sublevel
-sublibrarian
-sublicense
-sublicensee
-sublid
-sublieutenancy
-sublieutenant
-subligation
-sublighted
-sublimable
-sublimableness
-sublimant
-sublimate
-sublimation
-sublimational
-sublimationist
-sublimator
-sublimatory
-sublime
-sublimed
-sublimely
-sublimeness
-sublimer
-subliminal
-subliminally
-sublimish
-sublimitation
-sublimity
-sublimize
-sublinear
-sublineation
-sublingua
-sublinguae
-sublingual
-sublinguate
-sublittoral
-sublobular
-sublong
-subloral
-subloreal
-sublot
-sublumbar
-sublunar
-sublunary
-sublunate
-sublustrous
-subluxate
-subluxation
-submaid
-submain
-submakroskelic
-submammary
-subman
-submanager
-submania
-submanic
-submanor
-submarginal
-submarginally
-submarginate
-submargined
-submarine
-submariner
-submarinism
-submarinist
-submarshal
-submaster
-submaxilla
-submaxillary
-submaximal
-submeaning
-submedial
-submedian
-submediant
-submediation
-submediocre
-submeeting
-submember
-submembranaceous
-submembranous
-submeningeal
-submental
-submentum
-submerge
-submerged
-submergement
-submergence
-submergibility
-submergible
-submerse
-submersed
-submersibility
-submersible
-submersion
-submetallic
-submeter
-submetering
-submicron
-submicroscopic
-submicroscopically
-submiliary
-submind
-subminimal
-subminister
-submiss
-submissible
-submission
-submissionist
-submissive
-submissively
-submissiveness
-submissly
-submissness
-submit
-submittal
-submittance
-submitter
-submittingly
-submolecule
-submonition
-submontagne
-submontane
-submontanely
-submontaneous
-submorphous
-submortgage
-submotive
-submountain
-submucosa
-submucosal
-submucous
-submucronate
-submultiple
-submundane
-submuriate
-submuscular
-Submytilacea
-subnarcotic
-subnasal
-subnascent
-subnatural
-subnect
-subnervian
-subness
-subneural
-subnex
-subnitrate
-subnitrated
-subniveal
-subnivean
-subnormal
-subnormality
-subnotation
-subnote
-subnotochordal
-subnubilar
-subnucleus
-subnude
-subnumber
-subnuvolar
-suboblique
-subobscure
-subobscurely
-subobtuse
-suboccipital
-subocean
-suboceanic
-suboctave
-suboctile
-suboctuple
-subocular
-suboesophageal
-suboffice
-subofficer
-subofficial
-subolive
-subopaque
-subopercle
-subopercular
-suboperculum
-subopposite
-suboptic
-suboptimal
-suboptimum
-suboral
-suborbicular
-suborbiculate
-suborbiculated
-suborbital
-suborbitar
-suborbitary
-subordain
-suborder
-subordinacy
-subordinal
-subordinary
-subordinate
-subordinately
-subordinateness
-subordinating
-subordinatingly
-subordination
-subordinationism
-subordinationist
-subordinative
-suborganic
-suborn
-subornation
-subornative
-suborner
-Suboscines
-suboval
-subovate
-subovated
-suboverseer
-subovoid
-suboxidation
-suboxide
-subpackage
-subpagoda
-subpallial
-subpalmate
-subpanel
-subparagraph
-subparallel
-subpart
-subpartition
-subpartitioned
-subpartitionment
-subparty
-subpass
-subpassage
-subpastor
-subpatron
-subpattern
-subpavement
-subpectinate
-subpectoral
-subpeduncle
-subpeduncular
-subpedunculate
-subpellucid
-subpeltate
-subpeltated
-subpentagonal
-subpentangular
-subpericardial
-subperiod
-subperiosteal
-subperiosteally
-subperitoneal
-subperitoneally
-subpermanent
-subpermanently
-subperpendicular
-subpetiolar
-subpetiolate
-subpharyngeal
-subphosphate
-subphratry
-subphrenic
-subphylar
-subphylum
-subpial
-subpilose
-subpimp
-subpiston
-subplacenta
-subplant
-subplantigrade
-subplat
-subpleural
-subplinth
-subplot
-subplow
-subpodophyllous
-subpoena
-subpoenal
-subpolar
-subpolygonal
-subpool
-subpopular
-subpopulation
-subporphyritic
-subport
-subpostmaster
-subpostmastership
-subpostscript
-subpotency
-subpotent
-subpreceptor
-subpreceptorial
-subpredicate
-subpredication
-subprefect
-subprefectorial
-subprefecture
-subprehensile
-subpress
-subprimary
-subprincipal
-subprior
-subprioress
-subproblem
-subproctor
-subproduct
-subprofessional
-subprofessor
-subprofessoriate
-subprofitable
-subproportional
-subprotector
-subprovince
-subprovincial
-subpubescent
-subpubic
-subpulmonary
-subpulverizer
-subpunch
-subpunctuation
-subpurchaser
-subpurlin
-subputation
-subpyramidal
-subpyriform
-subquadrangular
-subquadrate
-subquality
-subquestion
-subquinquefid
-subquintuple
-Subra
-subrace
-subradial
-subradiance
-subradiate
-subradical
-subradius
-subradular
-subrailway
-subrameal
-subramose
-subramous
-subrange
-subrational
-subreader
-subreason
-subrebellion
-subrectangular
-subrector
-subreference
-subregent
-subregion
-subregional
-subregular
-subreguli
-subregulus
-subrelation
-subreligion
-subreniform
-subrent
-subrepand
-subrepent
-subreport
-subreptary
-subreption
-subreptitious
-subreputable
-subresin
-subretinal
-subrhombic
-subrhomboid
-subrhomboidal
-subrictal
-subrident
-subridently
-subrigid
-subrision
-subrisive
-subrisory
-subrogate
-subrogation
-subroot
-subrostral
-subround
-subrule
-subruler
-subsacral
-subsale
-subsaline
-subsalt
-subsample
-subsartorial
-subsatiric
-subsatirical
-subsaturated
-subsaturation
-subscapular
-subscapularis
-subscapulary
-subschedule
-subscheme
-subschool
-subscience
-subscleral
-subsclerotic
-subscribable
-subscribe
-subscriber
-subscribership
-subscript
-subscription
-subscriptionist
-subscriptive
-subscriptively
-subscripture
-subscrive
-subscriver
-subsea
-subsecive
-subsecretarial
-subsecretary
-subsect
-subsection
-subsecurity
-subsecute
-subsecutive
-subsegment
-subsemifusa
-subsemitone
-subsensation
-subsensible
-subsensual
-subsensuous
-subsept
-subseptuple
-subsequence
-subsequency
-subsequent
-subsequential
-subsequentially
-subsequently
-subsequentness
-subseries
-subserosa
-subserous
-subserrate
-subserve
-subserviate
-subservience
-subserviency
-subservient
-subserviently
-subservientness
-subsessile
-subset
-subsewer
-subsextuple
-subshaft
-subsheriff
-subshire
-subshrub
-subshrubby
-subside
-subsidence
-subsidency
-subsident
-subsider
-subsidiarie
-subsidiarily
-subsidiariness
-subsidiary
-subsiding
-subsidist
-subsidizable
-subsidization
-subsidize
-subsidizer
-subsidy
-subsilicate
-subsilicic
-subsill
-subsimilation
-subsimious
-subsimple
-subsinuous
-subsist
-subsistence
-subsistency
-subsistent
-subsistential
-subsistingly
-subsizar
-subsizarship
-subsmile
-subsneer
-subsocial
-subsoil
-subsoiler
-subsolar
-subsolid
-subsonic
-subsorter
-subsovereign
-subspace
-subspatulate
-subspecialist
-subspecialize
-subspecialty
-subspecies
-subspecific
-subspecifically
-subsphenoidal
-subsphere
-subspherical
-subspherically
-subspinous
-subspiral
-subspontaneous
-subsquadron
-substage
-substalagmite
-substalagmitic
-substance
-substanceless
-substanch
-substandard
-substandardize
-substant
-substantiability
-substantial
-substantialia
-substantialism
-substantialist
-substantiality
-substantialize
-substantially
-substantialness
-substantiate
-substantiation
-substantiative
-substantiator
-substantify
-substantious
-substantival
-substantivally
-substantive
-substantively
-substantiveness
-substantivity
-substantivize
-substantize
-substation
-substernal
-substituent
-substitutable
-substitute
-substituted
-substituter
-substituting
-substitutingly
-substitution
-substitutional
-substitutionally
-substitutionary
-substitutive
-substitutively
-substock
-substoreroom
-substory
-substract
-substraction
-substratal
-substrate
-substrati
-substrative
-substrator
-substratose
-substratosphere
-substratospheric
-substratum
-substriate
-substruct
-substruction
-substructional
-substructural
-substructure
-substylar
-substyle
-subsulfid
-subsulfide
-subsulphate
-subsulphid
-subsulphide
-subsult
-subsultive
-subsultorily
-subsultorious
-subsultory
-subsultus
-subsumable
-subsume
-subsumption
-subsumptive
-subsuperficial
-subsurety
-subsurface
-subsyndicate
-subsynod
-subsynodical
-subsystem
-subtack
-subtacksman
-subtangent
-subtarget
-subtartarean
-subtectal
-subtegminal
-subtegulaneous
-subtemperate
-subtenancy
-subtenant
-subtend
-subtense
-subtenure
-subtepid
-subteraqueous
-subterbrutish
-subtercelestial
-subterconscious
-subtercutaneous
-subterethereal
-subterfluent
-subterfluous
-subterfuge
-subterhuman
-subterjacent
-subtermarine
-subterminal
-subternatural
-subterpose
-subterposition
-subterrane
-subterraneal
-subterranean
-subterraneanize
-subterraneanly
-subterraneous
-subterraneously
-subterraneousness
-subterranity
-subterraqueous
-subterrene
-subterrestrial
-subterritorial
-subterritory
-subtersensual
-subtersensuous
-subtersuperlative
-subtersurface
-subtertian
-subtext
-subthalamic
-subthalamus
-subthoracic
-subthrill
-subtile
-subtilely
-subtileness
-subtilin
-subtilism
-subtilist
-subtility
-subtilization
-subtilize
-subtilizer
-subtill
-subtillage
-subtilty
-subtitle
-subtitular
-subtle
-subtleness
-subtlety
-subtlist
-subtly
-subtone
-subtonic
-subtorrid
-subtotal
-subtotem
-subtower
-subtract
-subtracter
-subtraction
-subtractive
-subtrahend
-subtranslucent
-subtransparent
-subtransverse
-subtrapezoidal
-subtread
-subtreasurer
-subtreasurership
-subtreasury
-subtrench
-subtriangular
-subtriangulate
-subtribal
-subtribe
-subtribual
-subtrifid
-subtrigonal
-subtrihedral
-subtriplicate
-subtriplicated
-subtriquetrous
-subtrist
-subtrochanteric
-subtrochlear
-subtropic
-subtropical
-subtropics
-subtrousers
-subtrude
-subtruncate
-subtrunk
-subtuberant
-subtunic
-subtunnel
-subturbary
-subturriculate
-subturriculated
-subtutor
-subtwined
-subtype
-subtypical
-subulate
-subulated
-subulicorn
-Subulicornia
-subuliform
-subultimate
-subumbellate
-subumbonal
-subumbral
-subumbrella
-subumbrellar
-subuncinate
-subunequal
-subungual
-subunguial
-Subungulata
-subungulate
-subunit
-subuniverse
-suburb
-suburban
-suburbandom
-suburbanhood
-suburbanism
-suburbanite
-suburbanity
-suburbanization
-suburbanize
-suburbanly
-suburbed
-suburbia
-suburbican
-suburbicarian
-suburbicary
-suburethral
-subursine
-subvaginal
-subvaluation
-subvarietal
-subvariety
-subvassal
-subvassalage
-subvein
-subvendee
-subvene
-subvention
-subventionary
-subventioned
-subventionize
-subventitious
-subventive
-subventral
-subventricose
-subvermiform
-subversal
-subverse
-subversed
-subversion
-subversionary
-subversive
-subversivism
-subvert
-subvertebral
-subverter
-subvertible
-subvertical
-subverticillate
-subvesicular
-subvestment
-subvicar
-subvicarship
-subvillain
-subvirate
-subvirile
-subvisible
-subvitalized
-subvitreous
-subvocal
-subvola
-subwarden
-subwater
-subway
-subwealthy
-subweight
-subwink
-subworker
-subworkman
-subzonal
-subzone
-subzygomatic
-succade
-succedanea
-succedaneous
-succedaneum
-succedent
-succeed
-succeedable
-succeeder
-succeeding
-succeedingly
-succent
-succentor
-succenturiate
-succenturiation
-success
-successful
-successfully
-successfulness
-succession
-successional
-successionally
-successionist
-successionless
-successive
-successively
-successiveness
-successivity
-successless
-successlessly
-successlessness
-successor
-successoral
-successorship
-successory
-succi
-succin
-succinamate
-succinamic
-succinamide
-succinanil
-succinate
-succinct
-succinctly
-succinctness
-succinctorium
-succinctory
-succincture
-succinic
-succiniferous
-succinimide
-succinite
-succinoresinol
-succinosulphuric
-succinous
-succinyl
-Succisa
-succise
-succivorous
-succor
-succorable
-succorer
-succorful
-succorless
-succorrhea
-succory
-succotash
-succourful
-succourless
-succous
-succub
-succuba
-succubae
-succube
-succubine
-succubous
-succubus
-succula
-succulence
-succulency
-succulent
-succulently
-succulentness
-succulous
-succumb
-succumbence
-succumbency
-succumbent
-succumber
-succursal
-succuss
-succussation
-succussatory
-succussion
-succussive
-such
-suchlike
-suchness
-Suchos
-suchwise
-sucivilized
-suck
-suckable
-suckabob
-suckage
-suckauhock
-sucken
-suckener
-sucker
-suckerel
-suckerfish
-suckerlike
-suckfish
-suckhole
-sucking
-suckle
-suckler
-suckless
-suckling
-suckstone
-suclat
-sucramine
-sucrate
-sucre
-sucroacid
-sucrose
-suction
-suctional
-Suctoria
-suctorial
-suctorian
-suctorious
-sucupira
-sucuri
-sucuriu
-sucuruju
-sud
-sudadero
-sudamen
-sudamina
-sudaminal
-Sudan
-Sudanese
-Sudani
-Sudanian
-Sudanic
-sudarium
-sudary
-sudate
-sudation
-sudatorium
-sudatory
-Sudburian
-sudburite
-sudd
-sudden
-suddenly
-suddenness
-suddenty
-Sudder
-sudder
-suddle
-suddy
-Sudic
-sudiform
-sudoral
-sudoresis
-sudoric
-sudoriferous
-sudoriferousness
-sudorific
-sudoriparous
-sudorous
-Sudra
-suds
-sudsman
-sudsy
-Sue
-sue
-Suecism
-suede
-suer
-Suerre
-Suessiones
-suet
-suety
-Sueve
-Suevi
-Suevian
-Suevic
-Sufeism
-suff
-suffect
-suffection
-suffer
-sufferable
-sufferableness
-sufferably
-sufferance
-sufferer
-suffering
-sufferingly
-suffete
-suffice
-sufficeable
-sufficer
-sufficiency
-sufficient
-sufficiently
-sufficientness
-sufficing
-sufficingly
-sufficingness
-suffiction
-suffix
-suffixal
-suffixation
-suffixion
-suffixment
-sufflaminate
-sufflamination
-sufflate
-sufflation
-sufflue
-suffocate
-suffocating
-suffocatingly
-suffocation
-suffocative
-Suffolk
-suffragan
-suffraganal
-suffraganate
-suffragancy
-suffraganeous
-suffragatory
-suffrage
-suffragette
-suffragettism
-suffragial
-suffragism
-suffragist
-suffragistic
-suffragistically
-suffragitis
-suffrago
-suffrutescent
-suffrutex
-suffruticose
-suffruticous
-suffruticulose
-suffumigate
-suffumigation
-suffusable
-suffuse
-suffused
-suffusedly
-suffusion
-suffusive
-Sufi
-Sufiism
-Sufiistic
-Sufism
-Sufistic
-sugamo
-sugan
-sugar
-sugarberry
-sugarbird
-sugarbush
-sugared
-sugarelly
-sugarer
-sugarhouse
-sugariness
-sugarless
-sugarlike
-sugarplum
-sugarsweet
-sugarworks
-sugary
-sugent
-sugescent
-suggest
-suggestable
-suggestedness
-suggester
-suggestibility
-suggestible
-suggestibleness
-suggestibly
-suggesting
-suggestingly
-suggestion
-suggestionability
-suggestionable
-suggestionism
-suggestionist
-suggestionize
-suggestive
-suggestively
-suggestiveness
-suggestivity
-suggestment
-suggestress
-suggestum
-suggillate
-suggillation
-sugh
-sugi
-Sugih
-suguaro
-suhuaro
-Sui
-suicidal
-suicidalism
-suicidally
-suicidalwise
-suicide
-suicidical
-suicidism
-suicidist
-suid
-Suidae
-suidian
-suiform
-suilline
-suimate
-Suina
-suine
-suing
-suingly
-suint
-Suiogoth
-Suiogothic
-Suiones
-suisimilar
-suist
-suit
-suitability
-suitable
-suitableness
-suitably
-suitcase
-suite
-suithold
-suiting
-suitor
-suitoress
-suitorship
-suity
-suji
-Suk
-Sukey
-sukiyaki
-sukkenye
-Suku
-Sula
-Sulaba
-Sulafat
-Sulaib
-sulbasutra
-sulcal
-sulcalization
-sulcalize
-sulcar
-sulcate
-sulcated
-sulcation
-sulcatoareolate
-sulcatocostate
-sulcatorimose
-sulciform
-sulcomarginal
-sulcular
-sulculate
-sulculus
-sulcus
-suld
-sulea
-sulfa
-sulfacid
-sulfadiazine
-sulfaguanidine
-sulfamate
-sulfamerazin
-sulfamerazine
-sulfamethazine
-sulfamethylthiazole
-sulfamic
-sulfamidate
-sulfamide
-sulfamidic
-sulfamine
-sulfaminic
-sulfamyl
-sulfanilamide
-sulfanilic
-sulfanilylguanidine
-sulfantimonide
-sulfapyrazine
-sulfapyridine
-sulfaquinoxaline
-sulfarsenide
-sulfarsenite
-sulfarseniuret
-sulfarsphenamine
-Sulfasuxidine
-sulfatase
-sulfathiazole
-sulfatic
-sulfatize
-sulfato
-sulfazide
-sulfhydrate
-sulfhydric
-sulfhydryl
-sulfindigotate
-sulfindigotic
-sulfindylic
-sulfion
-sulfionide
-sulfoacid
-sulfoamide
-sulfobenzide
-sulfobenzoate
-sulfobenzoic
-sulfobismuthite
-sulfoborite
-sulfocarbamide
-sulfocarbimide
-sulfocarbolate
-sulfocarbolic
-sulfochloride
-sulfocyan
-sulfocyanide
-sulfofication
-sulfogermanate
-sulfohalite
-sulfohydrate
-sulfoindigotate
-sulfoleic
-sulfolysis
-sulfomethylic
-sulfonamic
-sulfonamide
-sulfonate
-sulfonation
-sulfonator
-sulfonephthalein
-sulfonethylmethane
-sulfonic
-sulfonium
-sulfonmethane
-sulfonyl
-sulfophthalein
-sulfopurpurate
-sulfopurpuric
-sulforicinate
-sulforicinic
-sulforicinoleate
-sulforicinoleic
-sulfoselenide
-sulfosilicide
-sulfostannide
-sulfotelluride
-sulfourea
-sulfovinate
-sulfovinic
-sulfowolframic
-sulfoxide
-sulfoxism
-sulfoxylate
-sulfoxylic
-sulfurage
-sulfuran
-sulfurate
-sulfuration
-sulfurator
-sulfurea
-sulfureous
-sulfureously
-sulfureousness
-sulfuret
-sulfuric
-sulfurization
-sulfurize
-sulfurosyl
-sulfurous
-sulfury
-sulfuryl
-Sulidae
-Sulides
-Suliote
-sulk
-sulka
-sulker
-sulkily
-sulkiness
-sulky
-sulkylike
-sull
-sulla
-sullage
-Sullan
-sullen
-sullenhearted
-sullenly
-sullenness
-sulliable
-sullow
-sully
-sulpha
-sulphacid
-sulphaldehyde
-sulphamate
-sulphamic
-sulphamidate
-sulphamide
-sulphamidic
-sulphamine
-sulphaminic
-sulphamino
-sulphammonium
-sulphamyl
-sulphanilate
-sulphanilic
-sulphantimonate
-sulphantimonial
-sulphantimonic
-sulphantimonide
-sulphantimonious
-sulphantimonite
-sulpharsenate
-sulpharseniate
-sulpharsenic
-sulpharsenide
-sulpharsenious
-sulpharsenite
-sulpharseniuret
-sulpharsphenamine
-sulphatase
-sulphate
-sulphated
-sulphatic
-sulphation
-sulphatization
-sulphatize
-sulphato
-sulphatoacetic
-sulphatocarbonic
-sulphazide
-sulphazotize
-sulphbismuthite
-sulphethylate
-sulphethylic
-sulphhemoglobin
-sulphichthyolate
-sulphidation
-sulphide
-sulphidic
-sulphidize
-sulphimide
-sulphinate
-sulphindigotate
-sulphine
-sulphinic
-sulphinide
-sulphinyl
-sulphitation
-sulphite
-sulphitic
-sulphmethemoglobin
-sulpho
-sulphoacetic
-sulphoamid
-sulphoamide
-sulphoantimonate
-sulphoantimonic
-sulphoantimonious
-sulphoantimonite
-sulphoarsenic
-sulphoarsenious
-sulphoarsenite
-sulphoazotize
-sulphobenzide
-sulphobenzoate
-sulphobenzoic
-sulphobismuthite
-sulphoborite
-sulphobutyric
-sulphocarbamic
-sulphocarbamide
-sulphocarbanilide
-sulphocarbimide
-sulphocarbolate
-sulphocarbolic
-sulphocarbonate
-sulphocarbonic
-sulphochloride
-sulphochromic
-sulphocinnamic
-sulphocyan
-sulphocyanate
-sulphocyanic
-sulphocyanide
-sulphocyanogen
-sulphodichloramine
-sulphofication
-sulphofy
-sulphogallic
-sulphogel
-sulphogermanate
-sulphogermanic
-sulphohalite
-sulphohaloid
-sulphohydrate
-sulphoichthyolate
-sulphoichthyolic
-sulphoindigotate
-sulphoindigotic
-sulpholeate
-sulpholeic
-sulpholipin
-sulpholysis
-sulphonal
-sulphonalism
-sulphonamic
-sulphonamide
-sulphonamido
-sulphonamine
-sulphonaphthoic
-sulphonate
-sulphonated
-sulphonation
-sulphonator
-sulphoncyanine
-sulphone
-sulphonephthalein
-sulphonethylmethane
-sulphonic
-sulphonium
-sulphonmethane
-sulphonphthalein
-sulphonyl
-sulphoparaldehyde
-sulphophosphate
-sulphophosphite
-sulphophosphoric
-sulphophosphorous
-sulphophthalein
-sulphophthalic
-sulphopropionic
-sulphoproteid
-sulphopupuric
-sulphopurpurate
-sulphoricinate
-sulphoricinic
-sulphoricinoleate
-sulphoricinoleic
-sulphosalicylic
-sulphoselenide
-sulphoselenium
-sulphosilicide
-sulphosol
-sulphostannate
-sulphostannic
-sulphostannide
-sulphostannite
-sulphostannous
-sulphosuccinic
-sulphosulphurous
-sulphotannic
-sulphotelluride
-sulphoterephthalic
-sulphothionyl
-sulphotoluic
-sulphotungstate
-sulphotungstic
-sulphourea
-sulphovanadate
-sulphovinate
-sulphovinic
-sulphowolframic
-sulphoxide
-sulphoxism
-sulphoxylate
-sulphoxylic
-sulphoxyphosphate
-sulphozincate
-sulphur
-sulphurage
-sulphuran
-sulphurate
-sulphuration
-sulphurator
-sulphurea
-sulphurean
-sulphureity
-sulphureonitrous
-sulphureosaline
-sulphureosuffused
-sulphureous
-sulphureously
-sulphureousness
-sulphureovirescent
-sulphuret
-sulphureted
-sulphuric
-sulphuriferous
-sulphurity
-sulphurization
-sulphurize
-sulphurless
-sulphurlike
-sulphurosyl
-sulphurous
-sulphurously
-sulphurousness
-sulphurproof
-sulphurweed
-sulphurwort
-sulphury
-sulphuryl
-sulphydrate
-sulphydric
-sulphydryl
-Sulpician
-sultam
-sultan
-sultana
-sultanaship
-sultanate
-sultane
-sultanesque
-sultaness
-sultanian
-sultanic
-sultanin
-sultanism
-sultanist
-sultanize
-sultanlike
-sultanry
-sultanship
-sultone
-sultrily
-sultriness
-sultry
-Sulu
-Suluan
-sulung
-sulvanite
-sulvasutra
-sum
-sumac
-Sumak
-Sumass
-Sumatra
-sumatra
-Sumatran
-sumbul
-sumbulic
-Sumdum
-Sumerian
-Sumerology
-Sumitro
-sumless
-sumlessness
-summability
-summable
-summage
-summand
-summar
-summarily
-summariness
-summarist
-summarization
-summarize
-summarizer
-summary
-summate
-summation
-summational
-summative
-summatory
-summed
-summer
-summerbird
-summercastle
-summerer
-summerhead
-summeriness
-summering
-summerings
-summerish
-summerite
-summerize
-summerland
-summerlay
-summerless
-summerlike
-summerliness
-summerling
-summerly
-summerproof
-summertide
-summertime
-summertree
-summerward
-summerwood
-summery
-summist
-summit
-summital
-summitless
-summity
-summon
-summonable
-summoner
-summoningly
-summons
-summula
-summulist
-summut
-sumner
-Sumo
-sump
-sumpage
-sumper
-sumph
-sumphish
-sumphishly
-sumphishness
-sumphy
-sumpit
-sumpitan
-sumple
-sumpman
-sumpsimus
-sumpter
-sumption
-sumptuary
-sumptuosity
-sumptuous
-sumptuously
-sumptuousness
-sun
-sunbeam
-sunbeamed
-sunbeamy
-sunberry
-sunbird
-sunblink
-sunbonnet
-sunbonneted
-sunbow
-sunbreak
-sunburn
-sunburned
-sunburnedness
-sunburnproof
-sunburnt
-sunburntness
-sunburst
-suncherchor
-suncup
-sundae
-Sundanese
-Sundanesian
-sundang
-Sundar
-Sundaresan
-sundari
-Sunday
-Sundayfied
-Sundayish
-Sundayism
-Sundaylike
-Sundayness
-Sundayproof
-sundek
-sunder
-sunderable
-sunderance
-sunderer
-sunderment
-sunderwise
-sundew
-sundial
-sundik
-sundog
-sundown
-sundowner
-sundowning
-sundra
-sundri
-sundries
-sundriesman
-sundrily
-sundriness
-sundrops
-sundry
-sundryman
-sune
-sunfall
-sunfast
-sunfish
-sunfisher
-sunfishery
-sunflower
-Sung
-sung
-sungha
-sunglade
-sunglass
-sunglo
-sunglow
-Sunil
-sunk
-sunken
-sunket
-sunkland
-sunlamp
-sunland
-sunless
-sunlessly
-sunlessness
-sunlet
-sunlight
-sunlighted
-sunlike
-sunlit
-sunn
-Sunna
-Sunni
-Sunniah
-sunnily
-sunniness
-Sunnism
-Sunnite
-sunnud
-sunny
-sunnyhearted
-sunnyheartedness
-sunproof
-sunquake
-sunray
-sunrise
-sunrising
-sunroom
-sunscald
-sunset
-sunsetting
-sunsetty
-sunshade
-sunshine
-sunshineless
-sunshining
-sunshiny
-sunsmit
-sunsmitten
-sunspot
-sunspotted
-sunspottedness
-sunspottery
-sunspotty
-sunsquall
-sunstone
-sunstricken
-sunstroke
-sunt
-sunup
-sunward
-sunwards
-sunway
-sunways
-sunweed
-sunwise
-sunyie
-Suomi
-Suomic
-suovetaurilia
-sup
-supa
-Supai
-supari
-supawn
-supe
-supellex
-super
-superabduction
-superabhor
-superability
-superable
-superableness
-superably
-superabnormal
-superabominable
-superabomination
-superabound
-superabstract
-superabsurd
-superabundance
-superabundancy
-superabundant
-superabundantly
-superaccession
-superaccessory
-superaccommodating
-superaccomplished
-superaccrue
-superaccumulate
-superaccumulation
-superaccurate
-superacetate
-superachievement
-superacid
-superacidulated
-superacknowledgment
-superacquisition
-superacromial
-superactive
-superactivity
-superacute
-superadaptable
-superadd
-superaddition
-superadditional
-superadequate
-superadequately
-superadjacent
-superadministration
-superadmirable
-superadmiration
-superadorn
-superadornment
-superaerial
-superaesthetical
-superaffiliation
-superaffiuence
-superagency
-superaggravation
-superagitation
-superagrarian
-superalbal
-superalbuminosis
-superalimentation
-superalkaline
-superalkalinity
-superallowance
-superaltar
-superaltern
-superambitious
-superambulacral
-superanal
-superangelic
-superangelical
-superanimal
-superannuate
-superannuation
-superannuitant
-superannuity
-superapology
-superappreciation
-superaqueous
-superarbiter
-superarbitrary
-superarctic
-superarduous
-superarrogant
-superarseniate
-superartificial
-superartificially
-superaspiration
-superassertion
-superassociate
-superassume
-superastonish
-superastonishment
-superattachment
-superattainable
-superattendant
-superattraction
-superattractive
-superauditor
-superaural
-superaverage
-superavit
-superaward
-superaxillary
-superazotation
-superb
-superbelief
-superbeloved
-superbenefit
-superbenevolent
-superbenign
-superbias
-superbious
-superbity
-superblessed
-superblunder
-superbly
-superbness
-superbold
-superborrow
-superbrain
-superbrave
-superbrute
-superbuild
-superbungalow
-superbusy
-supercabinet
-supercalender
-supercallosal
-supercandid
-supercanine
-supercanonical
-supercanonization
-supercanopy
-supercapable
-supercaption
-supercarbonate
-supercarbonization
-supercarbonize
-supercarbureted
-supercargo
-supercargoship
-supercarpal
-supercatastrophe
-supercatholic
-supercausal
-supercaution
-supercelestial
-supercensure
-supercentral
-supercentrifuge
-supercerebellar
-supercerebral
-superceremonious
-supercharge
-supercharged
-supercharger
-superchemical
-superchivalrous
-superciliary
-superciliosity
-supercilious
-superciliously
-superciliousness
-supercilium
-supercivil
-supercivilization
-supercivilized
-superclaim
-superclass
-superclassified
-supercloth
-supercoincidence
-supercolossal
-supercolumnar
-supercolumniation
-supercombination
-supercombing
-supercommendation
-supercommentary
-supercommentator
-supercommercial
-supercompetition
-supercomplete
-supercomplex
-supercomprehension
-supercompression
-superconception
-superconductive
-superconductivity
-superconductor
-superconfident
-superconfirmation
-superconformable
-superconformist
-superconformity
-superconfusion
-supercongestion
-superconscious
-superconsciousness
-superconsecrated
-superconsequency
-superconservative
-superconstitutional
-supercontest
-supercontribution
-supercontrol
-supercool
-supercordial
-supercorporation
-supercow
-supercredit
-supercrescence
-supercrescent
-supercrime
-supercritic
-supercritical
-supercrowned
-supercrust
-supercube
-supercultivated
-supercurious
-supercycle
-supercynical
-superdainty
-superdanger
-superdebt
-superdeclamatory
-superdecoration
-superdeficit
-superdeity
-superdejection
-superdelegate
-superdelicate
-superdemand
-superdemocratic
-superdemonic
-superdemonstration
-superdensity
-superdeposit
-superdesirous
-superdevelopment
-superdevilish
-superdevotion
-superdiabolical
-superdiabolically
-superdicrotic
-superdifficult
-superdiplomacy
-superdirection
-superdiscount
-superdistention
-superdistribution
-superdividend
-superdivine
-superdivision
-superdoctor
-superdominant
-superdomineering
-superdonation
-superdose
-superdramatist
-superdreadnought
-superdubious
-superduplication
-superdural
-superdying
-superearthly
-supereconomy
-superedification
-superedify
-supereducation
-supereffective
-supereffluence
-supereffluently
-superego
-superelaborate
-superelastic
-superelated
-superelegance
-superelementary
-superelevated
-superelevation
-supereligible
-supereloquent
-supereminence
-supereminency
-supereminent
-supereminently
-superemphasis
-superemphasize
-superendorse
-superendorsement
-superendow
-superenergetic
-superenforcement
-superengrave
-superenrollment
-superepic
-superepoch
-superequivalent
-supererogant
-supererogantly
-supererogate
-supererogation
-supererogative
-supererogator
-supererogatorily
-supererogatory
-superespecial
-superessential
-superessentially
-superestablish
-superestablishment
-supereternity
-superether
-superethical
-superethmoidal
-superevangelical
-superevident
-superexacting
-superexalt
-superexaltation
-superexaminer
-superexceed
-superexceeding
-superexcellence
-superexcellency
-superexcellent
-superexcellently
-superexceptional
-superexcitation
-superexcited
-superexcitement
-superexcrescence
-superexert
-superexertion
-superexiguity
-superexist
-superexistent
-superexpand
-superexpansion
-superexpectation
-superexpenditure
-superexplicit
-superexport
-superexpressive
-superexquisite
-superexquisitely
-superexquisiteness
-superextend
-superextension
-superextol
-superextreme
-superfamily
-superfantastic
-superfarm
-superfat
-superfecundation
-superfecundity
-superfee
-superfeminine
-superfervent
-superfetate
-superfetation
-superfeudation
-superfibrination
-superficial
-superficialism
-superficialist
-superficiality
-superficialize
-superficially
-superficialness
-superficiary
-superficies
-superfidel
-superfinance
-superfine
-superfinical
-superfinish
-superfinite
-superfissure
-superfit
-superfix
-superfleet
-superflexion
-superfluent
-superfluid
-superfluitance
-superfluity
-superfluous
-superfluously
-superfluousness
-superflux
-superfoliaceous
-superfoliation
-superfolly
-superformal
-superformation
-superformidable
-superfortunate
-superfriendly
-superfrontal
-superfructified
-superfulfill
-superfulfillment
-superfunction
-superfunctional
-superfuse
-superfusibility
-superfusible
-superfusion
-supergaiety
-supergallant
-supergene
-supergeneric
-supergenerosity
-supergenerous
-supergenual
-supergiant
-superglacial
-superglorious
-superglottal
-supergoddess
-supergoodness
-supergovern
-supergovernment
-supergraduate
-supergrant
-supergratification
-supergratify
-supergravitate
-supergravitation
-superguarantee
-supergun
-superhandsome
-superhearty
-superheat
-superheater
-superheresy
-superhero
-superheroic
-superhet
-superheterodyne
-superhighway
-superhirudine
-superhistoric
-superhistorical
-superhive
-superhuman
-superhumanity
-superhumanize
-superhumanly
-superhumanness
-superhumeral
-superhypocrite
-superideal
-superignorant
-superillustrate
-superillustration
-superimpend
-superimpending
-superimpersonal
-superimply
-superimportant
-superimposable
-superimpose
-superimposed
-superimposition
-superimposure
-superimpregnated
-superimpregnation
-superimprobable
-superimproved
-superincentive
-superinclination
-superinclusive
-superincomprehensible
-superincrease
-superincumbence
-superincumbency
-superincumbent
-superincumbently
-superindependent
-superindiction
-superindifference
-superindifferent
-superindignant
-superindividual
-superindividualism
-superindividualist
-superinduce
-superinducement
-superinduct
-superinduction
-superindulgence
-superindulgent
-superindustrious
-superindustry
-superinenarrable
-superinfection
-superinfer
-superinference
-superinfeudation
-superinfinite
-superinfinitely
-superinfirmity
-superinfluence
-superinformal
-superinfuse
-superinfusion
-superingenious
-superingenuity
-superinitiative
-superinjustice
-superinnocent
-superinquisitive
-superinsaniated
-superinscription
-superinsist
-superinsistence
-superinsistent
-superinstitute
-superinstitution
-superintellectual
-superintend
-superintendence
-superintendency
-superintendent
-superintendential
-superintendentship
-superintender
-superintense
-superintolerable
-superinundation
-superior
-superioress
-superiority
-superiorly
-superiorness
-superiorship
-superirritability
-superius
-superjacent
-superjudicial
-superjurisdiction
-superjustification
-superknowledge
-superlabial
-superlaborious
-superlactation
-superlapsarian
-superlaryngeal
-superlation
-superlative
-superlatively
-superlativeness
-superlenient
-superlie
-superlikelihood
-superline
-superlocal
-superlogical
-superloyal
-superlucky
-superlunary
-superlunatical
-superluxurious
-supermagnificent
-supermagnificently
-supermalate
-superman
-supermanhood
-supermanifest
-supermanism
-supermanliness
-supermanly
-supermannish
-supermarginal
-supermarine
-supermarket
-supermarvelous
-supermasculine
-supermaterial
-supermathematical
-supermaxilla
-supermaxillary
-supermechanical
-supermedial
-supermedicine
-supermediocre
-supermental
-supermentality
-supermetropolitan
-supermilitary
-supermishap
-supermixture
-supermodest
-supermoisten
-supermolten
-supermoral
-supermorose
-supermunicipal
-supermuscan
-supermystery
-supernacular
-supernaculum
-supernal
-supernalize
-supernally
-supernatant
-supernatation
-supernation
-supernational
-supernationalism
-supernatural
-supernaturaldom
-supernaturalism
-supernaturalist
-supernaturality
-supernaturalize
-supernaturally
-supernaturalness
-supernature
-supernecessity
-supernegligent
-supernormal
-supernormally
-supernormalness
-supernotable
-supernova
-supernumeral
-supernumerariness
-supernumerary
-supernumeraryship
-supernumerous
-supernutrition
-superoanterior
-superobedience
-superobedient
-superobese
-superobject
-superobjection
-superobjectionable
-superobligation
-superobstinate
-superoccipital
-superoctave
-superocular
-superodorsal
-superoexternal
-superoffensive
-superofficious
-superofficiousness
-superofrontal
-superointernal
-superolateral
-superomedial
-superoposterior
-superopposition
-superoptimal
-superoptimist
-superoratorical
-superorbital
-superordain
-superorder
-superordinal
-superordinary
-superordinate
-superordination
-superorganic
-superorganism
-superorganization
-superorganize
-superornament
-superornamental
-superosculate
-superoutput
-superoxalate
-superoxide
-superoxygenate
-superoxygenation
-superparamount
-superparasite
-superparasitic
-superparasitism
-superparliamentary
-superpassage
-superpatient
-superpatriotic
-superpatriotism
-superperfect
-superperfection
-superperson
-superpersonal
-superpersonalism
-superpetrosal
-superphlogisticate
-superphlogistication
-superphosphate
-superphysical
-superpigmentation
-superpious
-superplausible
-superplease
-superplus
-superpolite
-superpolitic
-superponderance
-superponderancy
-superponderant
-superpopulation
-superposable
-superpose
-superposed
-superposition
-superpositive
-superpower
-superpowered
-superpraise
-superprecarious
-superprecise
-superprelatical
-superpreparation
-superprinting
-superprobability
-superproduce
-superproduction
-superproportion
-superprosperous
-superpublicity
-superpure
-superpurgation
-superquadrupetal
-superqualify
-superquote
-superradical
-superrational
-superrationally
-superreaction
-superrealism
-superrealist
-superrefine
-superrefined
-superrefinement
-superreflection
-superreform
-superreformation
-superregal
-superregeneration
-superregenerative
-superregistration
-superregulation
-superreliance
-superremuneration
-superrenal
-superrequirement
-superrespectable
-superresponsible
-superrestriction
-superreward
-superrheumatized
-superrighteous
-superromantic
-superroyal
-supersacerdotal
-supersacral
-supersacred
-supersacrifice
-supersafe
-supersagacious
-supersaint
-supersaintly
-supersalesman
-supersaliency
-supersalient
-supersalt
-supersanction
-supersanguine
-supersanity
-supersarcastic
-supersatisfaction
-supersatisfy
-supersaturate
-supersaturation
-superscandal
-superscholarly
-superscientific
-superscribe
-superscript
-superscription
-superscrive
-superseaman
-supersecret
-supersecretion
-supersecular
-supersecure
-supersedable
-supersede
-supersedeas
-supersedence
-superseder
-supersedure
-superselect
-superseminate
-supersemination
-superseminator
-supersensible
-supersensibly
-supersensitive
-supersensitiveness
-supersensitization
-supersensory
-supersensual
-supersensualism
-supersensualist
-supersensualistic
-supersensuality
-supersensually
-supersensuous
-supersensuousness
-supersentimental
-superseptal
-superseptuaginarian
-superseraphical
-superserious
-superservice
-superserviceable
-superserviceableness
-superserviceably
-supersesquitertial
-supersession
-supersessive
-supersevere
-supershipment
-supersignificant
-supersilent
-supersimplicity
-supersimplify
-supersincerity
-supersingular
-supersistent
-supersize
-supersmart
-supersocial
-supersoil
-supersolar
-supersolemn
-supersolemness
-supersolemnity
-supersolemnly
-supersolicit
-supersolicitation
-supersolid
-supersonant
-supersonic
-supersovereign
-supersovereignty
-superspecialize
-superspecies
-superspecification
-supersphenoid
-supersphenoidal
-superspinous
-superspiritual
-superspirituality
-supersquamosal
-superstage
-superstamp
-superstandard
-superstate
-superstatesman
-superstimulate
-superstimulation
-superstition
-superstitionist
-superstitionless
-superstitious
-superstitiously
-superstitiousness
-superstoical
-superstrain
-superstrata
-superstratum
-superstrenuous
-superstrict
-superstrong
-superstruct
-superstruction
-superstructor
-superstructory
-superstructural
-superstructure
-superstuff
-superstylish
-supersublimated
-supersuborder
-supersubsist
-supersubstantial
-supersubstantiality
-supersubstantiate
-supersubtilized
-supersubtle
-supersufficiency
-supersufficient
-supersulcus
-supersulphate
-supersulphuret
-supersulphureted
-supersulphurize
-supersuperabundance
-supersuperabundant
-supersuperabundantly
-supersuperb
-supersuperior
-supersupremacy
-supersupreme
-supersurprise
-supersuspicious
-supersweet
-supersympathy
-supersyndicate
-supersystem
-supertare
-supertartrate
-supertax
-supertaxation
-supertemporal
-supertempt
-supertemptation
-supertension
-superterranean
-superterraneous
-superterrene
-superterrestrial
-superthankful
-superthorough
-superthyroidism
-supertoleration
-supertonic
-supertotal
-supertower
-supertragic
-supertragical
-supertrain
-supertramp
-supertranscendent
-supertranscendently
-supertreason
-supertrivial
-supertuchun
-supertunic
-supertutelary
-superugly
-superultrafrostified
-superunfit
-superunit
-superunity
-superuniversal
-superuniverse
-superurgent
-supervalue
-supervast
-supervene
-supervenience
-supervenient
-supervenosity
-supervention
-supervestment
-supervexation
-supervictorious
-supervigilant
-supervigorous
-supervirulent
-supervisal
-supervisance
-supervise
-supervision
-supervisionary
-supervisive
-supervisor
-supervisorial
-supervisorship
-supervisory
-supervisual
-supervisure
-supervital
-supervive
-supervolition
-supervoluminous
-supervolute
-superwager
-superwealthy
-superweening
-superwise
-superwoman
-superworldly
-superwrought
-superyacht
-superzealous
-supinate
-supination
-supinator
-supine
-supinely
-supineness
-suppedaneum
-supper
-suppering
-supperless
-suppertime
-supperwards
-supping
-supplace
-supplant
-supplantation
-supplanter
-supplantment
-supple
-supplejack
-supplely
-supplement
-supplemental
-supplementally
-supplementarily
-supplementary
-supplementation
-supplementer
-suppleness
-suppletion
-suppletive
-suppletively
-suppletorily
-suppletory
-suppliable
-supplial
-suppliance
-suppliancy
-suppliant
-suppliantly
-suppliantness
-supplicancy
-supplicant
-supplicantly
-supplicat
-supplicate
-supplicating
-supplicatingly
-supplication
-supplicationer
-supplicative
-supplicator
-supplicatory
-supplicavit
-supplice
-supplier
-suppling
-supply
-support
-supportability
-supportable
-supportableness
-supportably
-supportance
-supporter
-supportful
-supporting
-supportingly
-supportive
-supportless
-supportlessly
-supportress
-supposable
-supposableness
-supposably
-supposal
-suppose
-supposed
-supposedly
-supposer
-supposing
-supposition
-suppositional
-suppositionally
-suppositionary
-suppositionless
-suppositious
-supposititious
-supposititiously
-supposititiousness
-suppositive
-suppositively
-suppository
-suppositum
-suppost
-suppress
-suppressal
-suppressed
-suppressedly
-suppresser
-suppressible
-suppression
-suppressionist
-suppressive
-suppressively
-suppressor
-supprise
-suppurant
-suppurate
-suppuration
-suppurative
-suppuratory
-suprabasidorsal
-suprabranchial
-suprabuccal
-supracaecal
-supracargo
-supracaudal
-supracensorious
-supracentenarian
-suprachorioid
-suprachorioidal
-suprachorioidea
-suprachoroid
-suprachoroidal
-suprachoroidea
-supraciliary
-supraclavicle
-supraclavicular
-supraclusion
-supracommissure
-supraconduction
-supraconductor
-supracondylar
-supracondyloid
-supraconscious
-supraconsciousness
-supracoralline
-supracostal
-supracoxal
-supracranial
-supracretaceous
-supradecompound
-supradental
-supradorsal
-supradural
-suprafeminine
-suprafine
-suprafoliaceous
-suprafoliar
-supraglacial
-supraglenoid
-supraglottic
-supragovernmental
-suprahepatic
-suprahistorical
-suprahuman
-suprahumanity
-suprahyoid
-suprailiac
-suprailium
-supraintellectual
-suprainterdorsal
-suprajural
-supralabial
-supralapsarian
-supralapsarianism
-supralateral
-supralegal
-supraliminal
-supraliminally
-supralineal
-supralinear
-supralocal
-supralocally
-supraloral
-supralunar
-supralunary
-supramammary
-supramarginal
-supramarine
-supramastoid
-supramaxilla
-supramaxillary
-supramaximal
-suprameatal
-supramechanical
-supramedial
-supramental
-supramolecular
-supramoral
-supramortal
-supramundane
-supranasal
-supranational
-supranatural
-supranaturalism
-supranaturalist
-supranaturalistic
-supranature
-supranervian
-supraneural
-supranormal
-supranuclear
-supraoccipital
-supraocclusion
-supraocular
-supraoesophagal
-supraoesophageal
-supraoptimal
-supraoptional
-supraoral
-supraorbital
-supraorbitar
-supraordinary
-supraordinate
-supraordination
-suprapapillary
-suprapedal
-suprapharyngeal
-supraposition
-supraprotest
-suprapubian
-suprapubic
-suprapygal
-supraquantivalence
-supraquantivalent
-suprarational
-suprarationalism
-suprarationality
-suprarenal
-suprarenalectomize
-suprarenalectomy
-suprarenalin
-suprarenine
-suprarimal
-suprasaturate
-suprascapula
-suprascapular
-suprascapulary
-suprascript
-suprasegmental
-suprasensible
-suprasensitive
-suprasensual
-suprasensuous
-supraseptal
-suprasolar
-suprasoriferous
-suprasphanoidal
-supraspinal
-supraspinate
-supraspinatus
-supraspinous
-suprasquamosal
-suprastandard
-suprastapedial
-suprastate
-suprasternal
-suprastigmal
-suprasubtle
-supratemporal
-supraterraneous
-supraterrestrial
-suprathoracic
-supratonsillar
-supratrochlear
-supratropical
-supratympanic
-supravaginal
-supraventricular
-supraversion
-supravital
-supraworld
-supremacy
-suprematism
-supreme
-supremely
-supremeness
-supremity
-sur
-sura
-suraddition
-surah
-surahi
-sural
-suralimentation
-suranal
-surangular
-surat
-surbase
-surbased
-surbasement
-surbate
-surbater
-surbed
-surcease
-surcharge
-surcharger
-surcingle
-surcoat
-surcrue
-surculi
-surculigerous
-surculose
-surculous
-surculus
-surd
-surdation
-surdeline
-surdent
-surdimutism
-surdity
-surdomute
-sure
-surely
-sureness
-sures
-Suresh
-surette
-surety
-suretyship
-surexcitation
-surf
-surface
-surfaced
-surfacedly
-surfaceless
-surfacely
-surfaceman
-surfacer
-surfacing
-surfactant
-surfacy
-surfbird
-surfboard
-surfboarding
-surfboat
-surfboatman
-surfeit
-surfeiter
-surfer
-surficial
-surfle
-surflike
-surfman
-surfmanship
-surfrappe
-surfuse
-surfusion
-surfy
-surge
-surgeful
-surgeless
-surgent
-surgeon
-surgeoncy
-surgeoness
-surgeonfish
-surgeonless
-surgeonship
-surgeproof
-surgerize
-surgery
-surgical
-surgically
-surginess
-surging
-surgy
-Suriana
-Surianaceae
-Suricata
-suricate
-suriga
-Surinam
-surinamine
-surlily
-surliness
-surly
-surma
-surmark
-surmaster
-surmisable
-surmisal
-surmisant
-surmise
-surmised
-surmisedly
-surmiser
-surmount
-surmountable
-surmountableness
-surmountal
-surmounted
-surmounter
-surmullet
-surname
-surnamer
-surnap
-surnay
-surnominal
-surpass
-surpassable
-surpasser
-surpassing
-surpassingly
-surpassingness
-surpeopled
-surplice
-surpliced
-surplicewise
-surplician
-surplus
-surplusage
-surpreciation
-surprint
-surprisable
-surprisal
-surprise
-surprisedly
-surprisement
-surpriseproof
-surpriser
-surprising
-surprisingly
-surprisingness
-surquedry
-surquidry
-surquidy
-surra
-surrealism
-surrealist
-surrealistic
-surrealistically
-surrebound
-surrebut
-surrebuttal
-surrebutter
-surrection
-surrejoin
-surrejoinder
-surrenal
-surrender
-surrenderee
-surrenderer
-surrenderor
-surreption
-surreptitious
-surreptitiously
-surreptitiousness
-surreverence
-surreverently
-surrey
-surrogacy
-surrogate
-surrogateship
-surrogation
-surrosion
-surround
-surrounded
-surroundedly
-surrounder
-surrounding
-surroundings
-sursaturation
-sursolid
-sursumduction
-sursumvergence
-sursumversion
-surtax
-surtout
-surturbrand
-surveillance
-surveillant
-survey
-surveyable
-surveyage
-surveyal
-surveyance
-surveying
-surveyor
-surveyorship
-survigrous
-survivability
-survivable
-survival
-survivalism
-survivalist
-survivance
-survivancy
-survive
-surviver
-surviving
-survivor
-survivoress
-survivorship
-Surya
-Sus
-Susan
-Susanchite
-Susanna
-Susanne
-susannite
-suscept
-susceptance
-susceptibility
-susceptible
-susceptibleness
-susceptibly
-susception
-susceptive
-susceptiveness
-susceptivity
-susceptor
-suscitate
-suscitation
-susi
-Susian
-Susianian
-Susie
-suslik
-susotoxin
-suspect
-suspectable
-suspected
-suspectedness
-suspecter
-suspectful
-suspectfulness
-suspectible
-suspectless
-suspector
-suspend
-suspended
-suspender
-suspenderless
-suspenders
-suspendibility
-suspendible
-suspensation
-suspense
-suspenseful
-suspensely
-suspensibility
-suspensible
-suspension
-suspensive
-suspensively
-suspensiveness
-suspensoid
-suspensor
-suspensorial
-suspensorium
-suspensory
-suspercollate
-suspicion
-suspicionable
-suspicional
-suspicionful
-suspicionless
-suspicious
-suspiciously
-suspiciousness
-suspiration
-suspiratious
-suspirative
-suspire
-suspirious
-Susquehanna
-Sussex
-sussexite
-Sussexman
-sussultatory
-sussultorial
-sustain
-sustainable
-sustained
-sustainer
-sustaining
-sustainingly
-sustainment
-sustanedly
-sustenance
-sustenanceless
-sustentacula
-sustentacular
-sustentaculum
-sustentation
-sustentational
-sustentative
-sustentator
-sustention
-sustentive
-sustentor
-Susu
-susu
-Susuhunan
-Susuidae
-Susumu
-susurr
-susurrant
-susurrate
-susurration
-susurringly
-susurrous
-susurrus
-Sutaio
-suterbery
-suther
-Sutherlandia
-sutile
-sutler
-sutlerage
-sutleress
-sutlership
-sutlery
-Suto
-sutor
-sutorial
-sutorian
-sutorious
-sutra
-Suttapitaka
-suttee
-sutteeism
-sutten
-suttin
-suttle
-Sutu
-sutural
-suturally
-suturation
-suture
-Suu
-suum
-Suwandi
-suwarro
-suwe
-Suyog
-suz
-Suzan
-Suzanne
-suzerain
-suzeraine
-suzerainship
-suzerainty
-Suzy
-Svan
-Svanetian
-Svanish
-Svante
-Svantovit
-svarabhakti
-svarabhaktic
-Svarloka
-svelte
-Svetambara
-sviatonosite
-swa
-Swab
-swab
-swabber
-swabberly
-swabble
-Swabian
-swack
-swacken
-swacking
-swad
-swaddle
-swaddlebill
-swaddler
-swaddling
-swaddy
-Swadeshi
-Swadeshism
-swag
-swagbellied
-swagbelly
-swage
-swager
-swagger
-swaggerer
-swaggering
-swaggeringly
-swaggie
-swaggy
-swaglike
-swagman
-swagsman
-Swahilese
-Swahili
-Swahilian
-Swahilize
-swaimous
-swain
-swainish
-swainishness
-swainship
-Swainsona
-swainsona
-swaird
-swale
-swaler
-swaling
-swalingly
-swallet
-swallo
-swallow
-swallowable
-swallower
-swallowlike
-swallowling
-swallowpipe
-swallowtail
-swallowwort
-swam
-swami
-swamp
-swampable
-swampberry
-swamper
-swampish
-swampishness
-swampland
-swampside
-swampweed
-swampwood
-swampy
-Swamy
-swan
-swandown
-swanflower
-swang
-swangy
-swanherd
-swanhood
-swanimote
-swank
-swanker
-swankily
-swankiness
-swanking
-swanky
-swanlike
-swanmark
-swanmarker
-swanmarking
-swanneck
-swannecked
-swanner
-swannery
-swannish
-swanny
-swanskin
-Swantevit
-swanweed
-swanwort
-swap
-swape
-swapper
-swapping
-swaraj
-swarajism
-swarajist
-swarbie
-sward
-swardy
-sware
-swarf
-swarfer
-swarm
-swarmer
-swarming
-swarmy
-swarry
-swart
-swartback
-swarth
-swarthily
-swarthiness
-swarthness
-swarthy
-swartish
-swartly
-swartness
-swartrutter
-swartrutting
-swarty
-Swartzbois
-Swartzia
-swarve
-swash
-swashbuckle
-swashbuckler
-swashbucklerdom
-swashbucklering
-swashbucklery
-swashbuckling
-swasher
-swashing
-swashway
-swashwork
-swashy
-swastika
-swastikaed
-Swat
-swat
-swatch
-Swatchel
-swatcher
-swatchway
-swath
-swathable
-swathband
-swathe
-swatheable
-swather
-swathy
-Swati
-Swatow
-swatter
-swattle
-swaver
-sway
-swayable
-swayed
-swayer
-swayful
-swaying
-swayingly
-swayless
-Swazi
-Swaziland
-sweal
-sweamish
-swear
-swearer
-swearingly
-swearword
-sweat
-sweatband
-sweatbox
-sweated
-sweater
-sweatful
-sweath
-sweatily
-sweatiness
-sweating
-sweatless
-sweatproof
-sweatshop
-sweatweed
-sweaty
-Swede
-Swedenborgian
-Swedenborgianism
-Swedenborgism
-swedge
-Swedish
-sweeny
-sweep
-sweepable
-sweepage
-sweepback
-sweepboard
-sweepdom
-sweeper
-sweeperess
-sweepforward
-sweeping
-sweepingly
-sweepingness
-sweepings
-sweepstake
-sweepwasher
-sweepwashings
-sweepy
-sweer
-sweered
-sweet
-sweetberry
-sweetbread
-sweetbrier
-sweetbriery
-sweeten
-sweetener
-sweetening
-sweetfish
-sweetful
-sweetheart
-sweetheartdom
-sweethearted
-sweetheartedness
-sweethearting
-sweetheartship
-sweetie
-sweeting
-sweetish
-sweetishly
-sweetishness
-sweetleaf
-sweetless
-sweetlike
-sweetling
-sweetly
-sweetmaker
-sweetmeat
-sweetmouthed
-sweetness
-sweetroot
-sweetshop
-sweetsome
-sweetsop
-sweetwater
-sweetweed
-sweetwood
-sweetwort
-sweety
-swego
-swelchie
-swell
-swellage
-swelldom
-swelldoodle
-swelled
-sweller
-swellfish
-swelling
-swellish
-swellishness
-swellmobsman
-swellness
-swelltoad
-swelly
-swelp
-swelt
-swelter
-sweltering
-swelteringly
-swelth
-sweltry
-swelty
-swep
-swept
-swerd
-Swertia
-swerve
-swerveless
-swerver
-swervily
-swick
-swidge
-Swietenia
-swift
-swiften
-swifter
-swiftfoot
-swiftlet
-swiftlike
-swiftness
-swifty
-swig
-swigger
-swiggle
-swile
-swill
-swillbowl
-swiller
-swilltub
-swim
-swimmable
-swimmer
-swimmeret
-swimmily
-swimminess
-swimming
-swimmingly
-swimmingness
-swimmist
-swimmy
-swimsuit
-swimy
-Swinburnesque
-Swinburnian
-swindle
-swindleable
-swindledom
-swindler
-swindlership
-swindlery
-swindling
-swindlingly
-swine
-swinebread
-swinecote
-swinehead
-swineherd
-swineherdship
-swinehood
-swinehull
-swinelike
-swinely
-swinepipe
-swinery
-swinestone
-swinesty
-swiney
-swing
-swingable
-swingback
-swingdevil
-swingdingle
-swinge
-swingeing
-swinger
-swinging
-swingingly
-Swingism
-swingle
-swinglebar
-swingletail
-swingletree
-swingstock
-swingtree
-swingy
-swinish
-swinishly
-swinishness
-swink
-swinney
-swipe
-swiper
-swipes
-swiple
-swipper
-swipy
-swird
-swire
-swirl
-swirlingly
-swirly
-swirring
-swish
-swisher
-swishing
-swishingly
-swishy
-Swiss
-swiss
-Swissess
-swissing
-switch
-switchback
-switchbacker
-switchboard
-switched
-switchel
-switcher
-switchgear
-switching
-switchkeeper
-switchlike
-switchman
-switchy
-switchyard
-swith
-swithe
-swithen
-swither
-Swithin
-Switzer
-Switzeress
-swivel
-swiveled
-swiveleye
-swiveleyed
-swivellike
-swivet
-swivetty
-swiz
-swizzle
-swizzler
-swob
-swollen
-swollenly
-swollenness
-swom
-swonken
-swoon
-swooned
-swooning
-swooningly
-swoony
-swoop
-swooper
-swoosh
-sword
-swordbill
-swordcraft
-swordfish
-swordfisherman
-swordfishery
-swordfishing
-swordick
-swording
-swordless
-swordlet
-swordlike
-swordmaker
-swordmaking
-swordman
-swordmanship
-swordplay
-swordplayer
-swordproof
-swordsman
-swordsmanship
-swordsmith
-swordster
-swordstick
-swordswoman
-swordtail
-swordweed
-swore
-sworn
-swosh
-swot
-swotter
-swounds
-swow
-swum
-swung
-swungen
-swure
-syagush
-sybarism
-sybarist
-Sybarital
-Sybaritan
-Sybarite
-Sybaritic
-Sybaritical
-Sybaritically
-Sybaritish
-sybaritism
-Sybil
-sybotic
-sybotism
-sycamine
-sycamore
-syce
-sycee
-sychnocarpous
-sycock
-sycoma
-sycomancy
-Sycon
-Syconaria
-syconarian
-syconate
-Sycones
-syconid
-Syconidae
-syconium
-syconoid
-syconus
-sycophancy
-sycophant
-sycophantic
-sycophantical
-sycophantically
-sycophantish
-sycophantishly
-sycophantism
-sycophantize
-sycophantry
-sycosiform
-sycosis
-Syd
-Sydneian
-Sydneyite
-sye
-Syed
-syenite
-syenitic
-syenodiorite
-syenogabbro
-sylid
-syllab
-syllabarium
-syllabary
-syllabatim
-syllabation
-syllabe
-syllabi
-syllabic
-syllabical
-syllabically
-syllabicate
-syllabication
-syllabicness
-syllabification
-syllabify
-syllabism
-syllabize
-syllable
-syllabled
-syllabus
-syllepsis
-sylleptic
-sylleptical
-sylleptically
-Syllidae
-syllidian
-Syllis
-sylloge
-syllogism
-syllogist
-syllogistic
-syllogistical
-syllogistically
-syllogistics
-syllogization
-syllogize
-syllogizer
-sylph
-sylphic
-sylphid
-sylphidine
-sylphish
-sylphize
-sylphlike
-Sylphon
-sylphy
-sylva
-sylvae
-sylvage
-Sylvan
-sylvan
-sylvanesque
-sylvanite
-sylvanitic
-sylvanity
-sylvanize
-sylvanly
-sylvanry
-sylvate
-sylvatic
-Sylvester
-sylvester
-sylvestral
-sylvestrene
-Sylvestrian
-sylvestrian
-Sylvestrine
-Sylvia
-Sylvian
-sylvic
-Sylvicolidae
-sylvicoline
-Sylviidae
-Sylviinae
-sylviine
-sylvine
-sylvinite
-sylvite
-symbasic
-symbasical
-symbasically
-symbasis
-symbiogenesis
-symbiogenetic
-symbiogenetically
-symbion
-symbiont
-symbiontic
-symbionticism
-symbiosis
-symbiot
-symbiote
-symbiotic
-symbiotically
-symbiotics
-symbiotism
-symbiotrophic
-symblepharon
-symbol
-symbolaeography
-symbolater
-symbolatrous
-symbolatry
-symbolic
-symbolical
-symbolically
-symbolicalness
-symbolicly
-symbolics
-symbolism
-symbolist
-symbolistic
-symbolistical
-symbolistically
-symbolization
-symbolize
-symbolizer
-symbolofideism
-symbological
-symbologist
-symbolography
-symbology
-symbololatry
-symbolology
-symbolry
-symbouleutic
-symbranch
-Symbranchia
-symbranchiate
-symbranchoid
-symbranchous
-symmachy
-symmedian
-symmelia
-symmelian
-symmelus
-symmetalism
-symmetral
-symmetric
-symmetrical
-symmetricality
-symmetrically
-symmetricalness
-symmetrist
-symmetrization
-symmetrize
-symmetroid
-symmetrophobia
-symmetry
-symmorphic
-symmorphism
-sympalmograph
-sympathectomize
-sympathectomy
-sympathetectomy
-sympathetic
-sympathetical
-sympathetically
-sympatheticism
-sympatheticity
-sympatheticness
-sympatheticotonia
-sympatheticotonic
-sympathetoblast
-sympathicoblast
-sympathicotonia
-sympathicotonic
-sympathicotripsy
-sympathism
-sympathist
-sympathize
-sympathizer
-sympathizing
-sympathizingly
-sympathoblast
-sympatholysis
-sympatholytic
-sympathomimetic
-sympathy
-sympatric
-sympatry
-Sympetalae
-sympetalous
-Symphalangus
-symphenomena
-symphenomenal
-symphile
-symphilic
-symphilism
-symphilous
-symphily
-symphogenous
-symphonetic
-symphonia
-symphonic
-symphonically
-symphonion
-symphonious
-symphoniously
-symphonist
-symphonize
-symphonous
-symphony
-Symphoricarpos
-symphoricarpous
-symphrase
-symphronistic
-symphyantherous
-symphycarpous
-Symphyla
-symphylan
-symphyllous
-symphylous
-symphynote
-symphyogenesis
-symphyogenetic
-symphyostemonous
-symphyseal
-symphyseotomy
-symphysial
-symphysian
-symphysic
-symphysion
-symphysiotomy
-symphysis
-symphysodactylia
-symphysotomy
-symphysy
-Symphyta
-symphytic
-symphytically
-symphytism
-symphytize
-Symphytum
-sympiesometer
-symplasm
-symplectic
-Symplegades
-symplesite
-Symplocaceae
-symplocaceous
-Symplocarpus
-symploce
-Symplocos
-sympode
-sympodia
-sympodial
-sympodially
-sympodium
-sympolity
-symposia
-symposiac
-symposiacal
-symposial
-symposiarch
-symposiast
-symposiastic
-symposion
-symposium
-symptom
-symptomatic
-symptomatical
-symptomatically
-symptomatics
-symptomatize
-symptomatography
-symptomatological
-symptomatologically
-symptomatology
-symptomical
-symptomize
-symptomless
-symptosis
-symtomology
-synacme
-synacmic
-synacmy
-synactic
-synadelphite
-synaeresis
-synagogal
-synagogian
-synagogical
-synagogism
-synagogist
-synagogue
-synalgia
-synalgic
-synallactic
-synallagmatic
-synaloepha
-synanastomosis
-synange
-synangia
-synangial
-synangic
-synangium
-synanthema
-synantherological
-synantherologist
-synantherology
-synantherous
-synanthesis
-synanthetic
-synanthic
-synanthous
-synanthrose
-synanthy
-synaphea
-synaposematic
-synapse
-synapses
-Synapsida
-synapsidan
-synapsis
-synaptai
-synaptase
-synapte
-synaptene
-Synaptera
-synapterous
-synaptic
-synaptical
-synaptically
-synapticula
-synapticulae
-synapticular
-synapticulate
-synapticulum
-Synaptosauria
-synaptychus
-synarchical
-synarchism
-synarchy
-synarmogoid
-Synarmogoidea
-synarquism
-synartesis
-synartete
-synartetic
-synarthrodia
-synarthrodial
-synarthrodially
-synarthrosis
-Synascidiae
-synascidian
-synastry
-synaxar
-synaxarion
-synaxarist
-synaxarium
-synaxary
-synaxis
-sync
-Syncarida
-syncarp
-syncarpia
-syncarpium
-syncarpous
-syncarpy
-syncategorematic
-syncategorematical
-syncategorematically
-syncategoreme
-syncephalic
-syncephalus
-syncerebral
-syncerebrum
-synch
-synchitic
-synchondoses
-synchondrosial
-synchondrosially
-synchondrosis
-synchondrotomy
-synchoresis
-synchro
-synchroflash
-synchromesh
-synchronal
-synchrone
-synchronic
-synchronical
-synchronically
-synchronism
-synchronistic
-synchronistical
-synchronistically
-synchronizable
-synchronization
-synchronize
-synchronized
-synchronizer
-synchronograph
-synchronological
-synchronology
-synchronous
-synchronously
-synchronousness
-synchrony
-synchroscope
-synchrotron
-synchysis
-Synchytriaceae
-Synchytrium
-syncladous
-synclastic
-synclinal
-synclinally
-syncline
-synclinical
-synclinore
-synclinorial
-synclinorian
-synclinorium
-synclitic
-syncliticism
-synclitism
-syncoelom
-syncopal
-syncopate
-syncopated
-syncopation
-syncopator
-syncope
-syncopic
-syncopism
-syncopist
-syncopize
-syncotyledonous
-syncracy
-syncraniate
-syncranterian
-syncranteric
-syncrasy
-syncretic
-syncretical
-syncreticism
-syncretion
-syncretism
-syncretist
-syncretistic
-syncretistical
-syncretize
-syncrisis
-Syncrypta
-syncryptic
-syncytia
-syncytial
-syncytioma
-syncytiomata
-syncytium
-syndactyl
-syndactylia
-syndactylic
-syndactylism
-syndactylous
-syndactyly
-syndectomy
-synderesis
-syndesis
-syndesmectopia
-syndesmitis
-syndesmography
-syndesmology
-syndesmoma
-Syndesmon
-syndesmoplasty
-syndesmorrhaphy
-syndesmosis
-syndesmotic
-syndesmotomy
-syndetic
-syndetical
-syndetically
-syndic
-syndical
-syndicalism
-syndicalist
-syndicalistic
-syndicalize
-syndicate
-syndicateer
-syndication
-syndicator
-syndicship
-syndoc
-syndrome
-syndromic
-syndyasmian
-Syndyoceras
-syne
-synecdoche
-synecdochic
-synecdochical
-synecdochically
-synecdochism
-synechia
-synechiological
-synechiology
-synechological
-synechology
-synechotomy
-synechthran
-synechthry
-synecology
-synecphonesis
-synectic
-synecticity
-Synedra
-synedral
-Synedria
-synedria
-synedrial
-synedrian
-Synedrion
-synedrion
-Synedrium
-synedrium
-synedrous
-syneidesis
-synema
-synemmenon
-synenergistic
-synenergistical
-synenergistically
-synentognath
-Synentognathi
-synentognathous
-syneresis
-synergastic
-synergetic
-synergia
-synergic
-synergically
-synergid
-synergidae
-synergidal
-synergism
-synergist
-synergistic
-synergistical
-synergistically
-synergize
-synergy
-synerize
-synesis
-synesthesia
-synesthetic
-synethnic
-syngamic
-syngamous
-syngamy
-Syngenesia
-syngenesian
-syngenesious
-syngenesis
-syngenetic
-syngenic
-syngenism
-syngenite
-Syngnatha
-Syngnathi
-syngnathid
-Syngnathidae
-syngnathoid
-syngnathous
-Syngnathus
-syngraph
-synizesis
-synkaryon
-synkatathesis
-synkinesia
-synkinesis
-synkinetic
-synneurosis
-synneusis
-synochoid
-synochus
-synocreate
-synod
-synodal
-synodalian
-synodalist
-synodally
-synodical
-synodically
-synodist
-synodite
-synodontid
-Synodontidae
-synodontoid
-synodsman
-Synodus
-synoecete
-synoeciosis
-synoecious
-synoeciously
-synoeciousness
-synoecism
-synoecize
-synoecy
-synoicous
-synomosy
-synonym
-synonymatic
-synonymic
-synonymical
-synonymicon
-synonymics
-synonymist
-synonymity
-synonymize
-synonymous
-synonymously
-synonymousness
-synonymy
-synophthalmus
-synopses
-synopsis
-synopsize
-synopsy
-synoptic
-synoptical
-synoptically
-Synoptist
-synoptist
-Synoptistic
-synorchidism
-synorchism
-synorthographic
-synosteology
-synosteosis
-synostose
-synostosis
-synostotic
-synostotical
-synostotically
-synousiacs
-synovectomy
-synovia
-synovial
-synovially
-synoviparous
-synovitic
-synovitis
-synpelmous
-synrhabdosome
-synsacral
-synsacrum
-synsepalous
-synspermous
-synsporous
-syntactic
-syntactical
-syntactically
-syntactician
-syntactics
-syntagma
-syntan
-syntasis
-syntax
-syntaxis
-syntaxist
-syntechnic
-syntectic
-syntelome
-syntenosis
-synteresis
-syntexis
-syntheme
-synthermal
-syntheses
-synthesis
-synthesism
-synthesist
-synthesization
-synthesize
-synthesizer
-synthete
-synthetic
-synthetical
-synthetically
-syntheticism
-synthetism
-synthetist
-synthetization
-synthetize
-synthetizer
-synthol
-synthroni
-synthronoi
-synthronos
-synthronus
-syntomia
-syntomy
-syntone
-syntonic
-syntonical
-syntonically
-syntonin
-syntonization
-syntonize
-syntonizer
-syntonolydian
-syntonous
-syntony
-syntripsis
-syntrope
-syntrophic
-syntropic
-syntropical
-syntropy
-syntype
-syntypic
-syntypicism
-Synura
-synusia
-synusiast
-syodicon
-sypher
-syphilide
-syphilidography
-syphilidologist
-syphiliphobia
-syphilis
-syphilitic
-syphilitically
-syphilization
-syphilize
-syphiloderm
-syphilodermatous
-syphilogenesis
-syphilogeny
-syphilographer
-syphilography
-syphiloid
-syphilologist
-syphilology
-syphiloma
-syphilomatous
-syphilophobe
-syphilophobia
-syphilophobic
-syphilopsychosis
-syphilosis
-syphilous
-Syracusan
-syre
-Syriac
-Syriacism
-Syriacist
-Syrian
-Syrianic
-Syrianism
-Syrianize
-Syriarch
-Syriasm
-syringa
-syringadenous
-syringe
-syringeal
-syringeful
-syringes
-syringin
-syringitis
-syringium
-syringocoele
-syringomyelia
-syringomyelic
-syringotome
-syringotomy
-syrinx
-Syriologist
-Syrma
-syrma
-Syrmian
-Syrnium
-Syrophoenician
-syrphian
-syrphid
-Syrphidae
-syrt
-syrtic
-Syrtis
-syrup
-syruped
-syruper
-syruplike
-syrupy
-Syryenian
-syssarcosis
-syssel
-sysselman
-syssiderite
-syssitia
-syssition
-systaltic
-systasis
-systatic
-system
-systematic
-systematical
-systematicality
-systematically
-systematician
-systematicness
-systematics
-systematism
-systematist
-systematization
-systematize
-systematizer
-systematology
-systemed
-systemic
-systemically
-systemist
-systemizable
-systemization
-systemize
-systemizer
-systemless
-systemproof
-systemwise
-systilius
-systolated
-systole
-systolic
-systyle
-systylous
-Syun
-syzygetic
-syzygetically
-syzygial
-syzygium
-syzygy
-szaibelyite
-Szekler
-szlachta
-szopelka
-T
-t
-ta
-taa
-Taal
-Taalbond
-taar
-Tab
-tab
-tabacin
-tabacosis
-tabacum
-tabanid
-Tabanidae
-tabaniform
-tabanuco
-Tabanus
-tabard
-tabarded
-tabaret
-Tabasco
-tabasheer
-tabashir
-tabaxir
-tabbarea
-tabber
-tabbinet
-Tabby
-tabby
-Tabebuia
-tabefaction
-tabefy
-tabella
-Tabellaria
-Tabellariaceae
-tabellion
-taberdar
-taberna
-tabernacle
-tabernacler
-tabernacular
-Tabernaemontana
-tabernariae
-tabes
-tabescence
-tabescent
-tabet
-tabetic
-tabetiform
-tabetless
-tabic
-tabid
-tabidly
-tabidness
-tabific
-tabifical
-tabinet
-Tabira
-Tabitha
-tabitude
-tabla
-tablature
-table
-tableau
-tableaux
-tablecloth
-tableclothwise
-tableclothy
-tabled
-tablefellow
-tablefellowship
-tableful
-tableity
-tableland
-tableless
-tablelike
-tablemaid
-tablemaker
-tablemaking
-tableman
-tablemate
-tabler
-tables
-tablespoon
-tablespoonful
-tablet
-tabletary
-tableware
-tablewise
-tabling
-tablinum
-Tabloid
-tabloid
-tabog
-taboo
-tabooism
-tabooist
-taboot
-taboparalysis
-taboparesis
-taboparetic
-tabophobia
-tabor
-taborer
-taboret
-taborin
-Taborite
-tabour
-tabourer
-tabouret
-tabret
-Tabriz
-tabu
-tabula
-tabulable
-tabular
-tabulare
-tabularium
-tabularization
-tabularize
-tabularly
-tabulary
-Tabulata
-tabulate
-tabulated
-tabulation
-tabulator
-tabulatory
-tabule
-tabuliform
-tabut
-tacahout
-tacamahac
-Tacana
-Tacanan
-Tacca
-Taccaceae
-taccaceous
-taccada
-tach
-Tachardia
-Tachardiinae
-tache
-tacheless
-tacheography
-tacheometer
-tacheometric
-tacheometry
-tacheture
-tachhydrite
-tachibana
-Tachina
-Tachinaria
-tachinarian
-tachinid
-Tachinidae
-tachiol
-tachistoscope
-tachistoscopic
-tachogram
-tachograph
-tachometer
-tachometry
-tachoscope
-tachycardia
-tachycardiac
-tachygen
-tachygenesis
-tachygenetic
-tachygenic
-tachyglossal
-tachyglossate
-Tachyglossidae
-Tachyglossus
-tachygraph
-tachygrapher
-tachygraphic
-tachygraphical
-tachygraphically
-tachygraphist
-tachygraphometer
-tachygraphometry
-tachygraphy
-tachyhydrite
-tachyiatry
-tachylalia
-tachylite
-tachylyte
-tachylytic
-tachymeter
-tachymetric
-tachymetry
-tachyphagia
-tachyphasia
-tachyphemia
-tachyphrasia
-tachyphrenia
-tachypnea
-tachyscope
-tachyseism
-tachysterol
-tachysystole
-tachythanatous
-tachytomy
-tachytype
-tacit
-Tacitean
-tacitly
-tacitness
-taciturn
-taciturnist
-taciturnity
-taciturnly
-tack
-tacker
-tacket
-tackety
-tackey
-tackiness
-tacking
-tackingly
-tackle
-tackled
-tackleless
-tackleman
-tackler
-tackless
-tackling
-tackproof
-tacksman
-tacky
-taclocus
-tacmahack
-tacnode
-Taconian
-Taconic
-taconite
-tacso
-Tacsonia
-tact
-tactable
-tactful
-tactfully
-tactfulness
-tactic
-tactical
-tactically
-tactician
-tactics
-tactile
-tactilist
-tactility
-tactilogical
-tactinvariant
-taction
-tactite
-tactive
-tactless
-tactlessly
-tactlessness
-tactometer
-tactor
-tactosol
-tactual
-tactualist
-tactuality
-tactually
-tactus
-tacuacine
-Taculli
-Tad
-tad
-tade
-Tadjik
-Tadousac
-tadpole
-tadpoledom
-tadpolehood
-tadpolelike
-tadpolism
-tae
-tael
-taen
-taenia
-taeniacidal
-taeniacide
-Taeniada
-taeniafuge
-taenial
-taenian
-taeniasis
-Taeniata
-taeniate
-taenicide
-Taenidia
-taenidium
-taeniform
-taenifuge
-taeniiform
-Taeniobranchia
-taeniobranchiate
-Taeniodonta
-Taeniodontia
-Taeniodontidae
-Taenioglossa
-taenioglossate
-taenioid
-taeniosome
-Taeniosomi
-taeniosomous
-taenite
-taennin
-Taetsia
-taffarel
-tafferel
-taffeta
-taffety
-taffle
-taffrail
-Taffy
-taffy
-taffylike
-taffymaker
-taffymaking
-taffywise
-tafia
-tafinagh
-taft
-tafwiz
-tag
-Tagabilis
-Tagakaolo
-Tagal
-Tagala
-Tagalize
-Tagalo
-Tagalog
-tagasaste
-Tagassu
-Tagassuidae
-tagatose
-Tagaur
-Tagbanua
-tagboard
-Tagetes
-tagetol
-tagetone
-tagged
-tagger
-taggle
-taggy
-Taghlik
-tagilite
-Tagish
-taglet
-Tagliacotian
-Tagliacozzian
-taglike
-taglock
-tagrag
-tagraggery
-tagsore
-tagtail
-tagua
-taguan
-Tagula
-tagwerk
-taha
-Tahami
-taheen
-tahil
-tahin
-Tahiti
-Tahitian
-tahkhana
-Tahltan
-tahr
-tahseeldar
-tahsil
-tahsildar
-Tahsin
-tahua
-Tai
-tai
-taiaha
-taich
-taiga
-taigle
-taiglesome
-taihoa
-taikhana
-tail
-tailage
-tailband
-tailboard
-tailed
-tailender
-tailer
-tailet
-tailfirst
-tailflower
-tailforemost
-tailge
-tailhead
-tailing
-tailings
-taille
-tailless
-taillessly
-taillessness
-taillie
-taillight
-taillike
-tailor
-tailorage
-tailorbird
-tailorcraft
-tailordom
-tailoress
-tailorhood
-tailoring
-tailorism
-tailorization
-tailorize
-tailorless
-tailorlike
-tailorly
-tailorman
-tailorship
-tailorwise
-tailory
-tailpiece
-tailpin
-tailpipe
-tailrace
-tailsman
-tailstock
-Tailte
-tailward
-tailwards
-tailwise
-taily
-tailzee
-tailzie
-taimen
-taimyrite
-tain
-Tainan
-Taino
-taint
-taintable
-taintless
-taintlessly
-taintlessness
-taintment
-taintor
-taintproof
-tainture
-taintworm
-Tainui
-taipan
-Taipi
-Taiping
-taipo
-tairge
-tairger
-tairn
-taisch
-taise
-Taisho
-taissle
-taistrel
-taistril
-Tait
-tait
-taiver
-taivers
-taivert
-Taiwanhemp
-Taiyal
-taj
-Tajik
-takable
-takamaka
-Takao
-takar
-Takayuki
-take
-takedown
-takedownable
-takeful
-Takelma
-taken
-taker
-Takeuchi
-Takhaar
-Takhtadjy
-Takilman
-takin
-taking
-takingly
-takingness
-takings
-Takitumu
-takosis
-takt
-Taku
-taky
-takyr
-Tal
-tal
-tala
-talabon
-talahib
-Talaing
-talaje
-talak
-talalgia
-Talamanca
-Talamancan
-talanton
-talao
-talapoin
-talar
-talari
-talaria
-talaric
-talayot
-talbot
-talbotype
-talc
-talcer
-Talcher
-talcky
-talclike
-talcochlorite
-talcoid
-talcomicaceous
-talcose
-talcous
-talcum
-tald
-tale
-talebearer
-talebearing
-talebook
-talecarrier
-talecarrying
-taled
-taleful
-Talegallinae
-Talegallus
-talemaster
-talemonger
-talemongering
-talent
-talented
-talentless
-talepyet
-taler
-tales
-talesman
-taleteller
-taletelling
-tali
-Taliacotian
-taliage
-taliation
-taliera
-taligrade
-Talinum
-talion
-talionic
-talipat
-taliped
-talipedic
-talipes
-talipomanus
-talipot
-talis
-talisay
-Talishi
-talisman
-talismanic
-talismanical
-talismanically
-talismanist
-talite
-Talitha
-talitol
-talk
-talkability
-talkable
-talkathon
-talkative
-talkatively
-talkativeness
-talker
-talkfest
-talkful
-talkie
-talkiness
-talking
-talkworthy
-talky
-tall
-tallage
-tallageability
-tallageable
-tallboy
-tallegalane
-taller
-tallero
-talles
-tallet
-talliable
-talliage
-talliar
-talliate
-tallier
-tallis
-tallish
-tallit
-tallith
-tallness
-talloel
-tallote
-tallow
-tallowberry
-tallower
-tallowiness
-tallowing
-tallowish
-tallowlike
-tallowmaker
-tallowmaking
-tallowman
-tallowroot
-tallowweed
-tallowwood
-tallowy
-tallwood
-tally
-tallyho
-tallyman
-tallymanship
-tallywag
-tallywalka
-tallywoman
-talma
-talmouse
-Talmud
-Talmudic
-Talmudical
-Talmudism
-Talmudist
-Talmudistic
-Talmudistical
-Talmudization
-Talmudize
-talocalcaneal
-talocalcanean
-talocrural
-talofibular
-talon
-talonavicular
-taloned
-talonic
-talonid
-taloscaphoid
-talose
-talotibial
-Talpa
-talpacoti
-talpatate
-talpetate
-talpicide
-talpid
-Talpidae
-talpiform
-talpify
-talpine
-talpoid
-talthib
-Taltushtuntude
-Taluche
-Taluhet
-taluk
-taluka
-talukdar
-talukdari
-talus
-taluto
-talwar
-talwood
-Talyshin
-tam
-Tama
-tamability
-tamable
-tamableness
-tamably
-Tamaceae
-Tamachek
-tamacoare
-tamale
-Tamanac
-Tamanaca
-Tamanaco
-tamandu
-tamandua
-tamanoas
-tamanoir
-tamanowus
-tamanu
-Tamara
-tamara
-tamarack
-tamaraite
-tamarao
-Tamaricaceae
-tamaricaceous
-tamarin
-tamarind
-Tamarindus
-tamarisk
-Tamarix
-Tamaroa
-tamas
-tamasha
-Tamashek
-Tamaulipecan
-tambac
-tambaroora
-tamber
-tambo
-tamboo
-Tambookie
-tambookie
-tambor
-Tambouki
-tambour
-tamboura
-tambourer
-tambouret
-tambourgi
-tambourin
-tambourinade
-tambourine
-tambourist
-tambreet
-Tambuki
-tamburan
-tamburello
-Tame
-tame
-tamehearted
-tameheartedness
-tamein
-tameless
-tamelessly
-tamelessness
-tamely
-tameness
-tamer
-Tamerlanism
-Tamias
-tamidine
-Tamil
-Tamilian
-Tamilic
-tamis
-tamise
-tamlung
-Tammanial
-Tammanize
-Tammany
-Tammanyism
-Tammanyite
-Tammanyize
-tammie
-tammock
-Tammy
-tammy
-Tamonea
-Tamoyo
-tamp
-tampala
-tampan
-tampang
-tamper
-tamperer
-tamperproof
-tampin
-tamping
-tampion
-tampioned
-tampon
-tamponade
-tamponage
-tamponment
-tampoon
-Tamul
-Tamulian
-Tamulic
-Tamus
-Tamworth
-Tamzine
-tan
-tana
-tanacetin
-tanacetone
-Tanacetum
-tanacetyl
-tanach
-tanager
-Tanagra
-Tanagraean
-Tanagridae
-tanagrine
-tanagroid
-Tanaidacea
-tanaist
-tanak
-Tanaka
-Tanala
-tanan
-tanbark
-tanbur
-tancel
-Tanchelmian
-tanchoir
-tandan
-tandem
-tandemer
-tandemist
-tandemize
-tandemwise
-tandle
-tandour
-Tandy
-tane
-tanekaha
-Tang
-tang
-tanga
-Tangaloa
-tangalung
-tangantangan
-Tangaridae
-Tangaroa
-Tangaroan
-tanged
-tangeite
-tangelo
-tangence
-tangency
-tangent
-tangental
-tangentally
-tangential
-tangentiality
-tangentially
-tangently
-tanger
-Tangerine
-tangfish
-tangham
-tanghan
-tanghin
-Tanghinia
-tanghinin
-tangi
-tangibile
-tangibility
-tangible
-tangibleness
-tangibly
-tangie
-Tangier
-tangilin
-Tangipahoa
-tangka
-tanglad
-tangle
-tangleberry
-tanglefish
-tanglefoot
-tanglement
-tangleproof
-tangler
-tangleroot
-tanglesome
-tangless
-tanglewrack
-tangling
-tanglingly
-tangly
-tango
-tangoreceptor
-tangram
-tangs
-tangue
-tanguile
-tangum
-tangun
-Tangut
-tangy
-tanh
-tanha
-tanhouse
-tania
-tanica
-tanier
-tanist
-tanistic
-tanistry
-tanistship
-Tanite
-Tanitic
-tanjib
-tanjong
-tank
-tanka
-tankage
-tankah
-tankard
-tanked
-tanker
-tankerabogus
-tankert
-tankette
-tankful
-tankle
-tankless
-tanklike
-tankmaker
-tankmaking
-tankman
-tankodrome
-tankroom
-tankwise
-tanling
-tannable
-tannage
-tannaic
-tannaim
-tannaitic
-tannalbin
-tannase
-tannate
-tanned
-tanner
-tannery
-tannic
-tannide
-tanniferous
-tannin
-tannined
-tanning
-tanninlike
-tannocaffeic
-tannogallate
-tannogallic
-tannogelatin
-tannogen
-tannoid
-tannometer
-tannyl
-Tano
-tanoa
-Tanoan
-tanproof
-tanquam
-Tanquelinian
-tanquen
-tanrec
-tanstuff
-tansy
-tantadlin
-tantafflin
-tantalate
-Tantalean
-Tantalian
-Tantalic
-tantalic
-tantaliferous
-tantalifluoride
-tantalite
-tantalization
-tantalize
-tantalizer
-tantalizingly
-tantalizingness
-tantalofluoride
-tantalum
-Tantalus
-tantamount
-tantara
-tantarabobus
-tantarara
-tanti
-tantivy
-tantle
-Tantony
-tantra
-tantric
-tantrik
-tantrism
-tantrist
-tantrum
-tantum
-tanwood
-tanworks
-Tanya
-tanyard
-Tanyoan
-Tanystomata
-tanystomatous
-tanystome
-tanzeb
-tanzib
-Tanzine
-tanzy
-Tao
-tao
-Taoism
-Taoist
-Taoistic
-Taonurus
-Taos
-taotai
-taoyin
-tap
-Tapa
-tapa
-Tapachula
-Tapachulteca
-tapacolo
-tapaculo
-Tapacura
-tapadera
-tapadero
-Tapajo
-tapalo
-tapamaker
-tapamaking
-tapas
-tapasvi
-Tape
-tape
-Tapeats
-tapeinocephalic
-tapeinocephalism
-tapeinocephaly
-tapeless
-tapelike
-tapeline
-tapemaker
-tapemaking
-tapeman
-tapen
-taper
-taperbearer
-tapered
-taperer
-tapering
-taperingly
-taperly
-tapermaker
-tapermaking
-taperness
-taperwise
-tapesium
-tapestring
-tapestry
-tapestrylike
-tapet
-tapetal
-tapete
-tapeti
-tapetless
-tapetum
-tapework
-tapeworm
-taphephobia
-taphole
-taphouse
-Taphria
-Taphrina
-Taphrinaceae
-tapia
-Tapijulapane
-tapinceophalism
-tapinocephalic
-tapinocephaly
-Tapinoma
-tapinophobia
-tapinophoby
-tapinosis
-tapioca
-tapir
-Tapiridae
-tapiridian
-tapirine
-Tapiro
-tapiroid
-Tapirus
-tapis
-tapism
-tapist
-taplash
-taplet
-Tapleyism
-tapmost
-tapnet
-tapoa
-Taposa
-tapoun
-tappa
-tappable
-tappableness
-tappall
-tappaul
-tappen
-tapper
-tapperer
-Tappertitian
-tappet
-tappietoorie
-tapping
-tappoon
-Taprobane
-taproom
-taproot
-taprooted
-taps
-tapster
-tapsterlike
-tapsterly
-tapstress
-tapu
-tapul
-Tapuya
-Tapuyan
-Tapuyo
-taqua
-tar
-tara
-tarabooka
-taraf
-tarafdar
-tarage
-Tarahumar
-Tarahumara
-Tarahumare
-Tarahumari
-Tarai
-tarairi
-tarakihi
-Taraktogenos
-taramellite
-Taramembe
-Taranchi
-tarand
-Tarandean
-Tarandian
-tarantara
-tarantass
-tarantella
-tarantism
-tarantist
-tarantula
-tarantular
-tarantulary
-tarantulated
-tarantulid
-Tarantulidae
-tarantulism
-tarantulite
-tarantulous
-tarapatch
-taraph
-tarapin
-Tarapon
-Tarasc
-Tarascan
-Tarasco
-tarassis
-tarata
-taratah
-taratantara
-taratantarize
-tarau
-taraxacerin
-taraxacin
-Taraxacum
-Tarazed
-tarbadillo
-tarbet
-tarboard
-tarbogan
-tarboggin
-tarboosh
-tarbooshed
-tarboy
-tarbrush
-tarbush
-tarbuttite
-Tardenoisian
-Tardigrada
-tardigrade
-tardigradous
-tardily
-tardiness
-tarditude
-tardive
-tardle
-tardy
-tare
-tarea
-tarefa
-tarefitch
-tarentala
-tarente
-Tarentine
-tarentism
-tarentola
-tarepatch
-Tareq
-tarfa
-tarflower
-targe
-targeman
-targer
-target
-targeted
-targeteer
-targetlike
-targetman
-Targum
-Targumic
-Targumical
-Targumist
-Targumistic
-Targumize
-Tarheel
-Tarheeler
-tarhood
-tari
-Tariana
-tarie
-tariff
-tariffable
-tariffication
-tariffism
-tariffist
-tariffite
-tariffize
-tariffless
-tarin
-Tariri
-tariric
-taririnic
-tarish
-Tarkalani
-Tarkani
-tarkashi
-tarkeean
-tarkhan
-tarlatan
-tarlataned
-tarletan
-tarlike
-tarltonize
-Tarmac
-tarmac
-tarman
-Tarmi
-tarmined
-tarn
-tarnal
-tarnally
-tarnation
-tarnish
-tarnishable
-tarnisher
-tarnishment
-tarnishproof
-tarnlike
-tarnside
-taro
-taroc
-tarocco
-tarok
-taropatch
-tarot
-tarp
-tarpan
-tarpaulin
-tarpaulinmaker
-Tarpeia
-Tarpeian
-tarpon
-tarpot
-tarpum
-Tarquin
-Tarquinish
-tarr
-tarrack
-tarradiddle
-tarradiddler
-tarragon
-tarragona
-tarras
-tarrass
-Tarrateen
-Tarratine
-tarred
-tarrer
-tarri
-tarriance
-tarrie
-tarrier
-tarrify
-tarrily
-tarriness
-tarrish
-tarrock
-tarrow
-tarry
-tarrying
-tarryingly
-tarryingness
-tars
-tarsadenitis
-tarsal
-tarsale
-tarsalgia
-tarse
-tarsectomy
-tarsectopia
-tarsi
-tarsia
-tarsier
-Tarsiidae
-tarsioid
-Tarsipedidae
-Tarsipedinae
-Tarsipes
-tarsitis
-Tarsius
-tarsochiloplasty
-tarsoclasis
-tarsomalacia
-tarsome
-tarsometatarsal
-tarsometatarsus
-tarsonemid
-Tarsonemidae
-Tarsonemus
-tarsophalangeal
-tarsophyma
-tarsoplasia
-tarsoplasty
-tarsoptosis
-tarsorrhaphy
-tarsotarsal
-tarsotibal
-tarsotomy
-tarsus
-tart
-tartago
-Tartan
-tartan
-tartana
-tartane
-Tartar
-tartar
-tartarated
-Tartarean
-Tartareous
-tartareous
-tartaret
-Tartarian
-Tartaric
-tartaric
-Tartarin
-tartarish
-Tartarism
-Tartarization
-tartarization
-Tartarize
-tartarize
-Tartarized
-Tartarlike
-tartarly
-Tartarology
-tartarous
-tartarproof
-tartarum
-Tartarus
-Tartary
-tartemorion
-tarten
-tartish
-tartishly
-tartle
-tartlet
-tartly
-tartness
-tartramate
-tartramic
-tartramide
-tartrate
-tartrated
-tartratoferric
-tartrazine
-tartrazinic
-tartro
-tartronate
-tartronic
-tartronyl
-tartronylurea
-tartrous
-tartryl
-tartrylic
-Tartufe
-tartufery
-tartufian
-tartufish
-tartufishly
-tartufism
-tartwoman
-Taruma
-Tarumari
-tarve
-Tarvia
-tarweed
-tarwhine
-tarwood
-tarworks
-taryard
-Taryba
-Tarzan
-Tarzanish
-tasajo
-tascal
-tasco
-taseometer
-tash
-tasheriff
-tashie
-tashlik
-Tashnagist
-Tashnakist
-tashreef
-tashrif
-Tasian
-tasimeter
-tasimetric
-tasimetry
-task
-taskage
-tasker
-taskit
-taskless
-tasklike
-taskmaster
-taskmastership
-taskmistress
-tasksetter
-tasksetting
-taskwork
-taslet
-Tasmanian
-tasmanite
-Tass
-tass
-tassago
-tassah
-tassal
-tassard
-tasse
-tassel
-tasseler
-tasselet
-tasselfish
-tassellus
-tasselmaker
-tasselmaking
-tassely
-tasser
-tasset
-tassie
-tassoo
-tastable
-tastableness
-tastably
-taste
-tasteable
-tasteableness
-tasteably
-tasted
-tasteful
-tastefully
-tastefulness
-tastekin
-tasteless
-tastelessly
-tastelessness
-tasten
-taster
-tastily
-tastiness
-tasting
-tastingly
-tasty
-tasu
-Tat
-tat
-Tatar
-Tatarian
-Tataric
-Tatarization
-Tatarize
-Tatary
-tataupa
-tatbeb
-tatchy
-tate
-tater
-Tates
-tath
-Tatian
-Tatianist
-tatie
-tatinek
-tatler
-tatou
-tatouay
-tatpurusha
-Tatsanottine
-tatsman
-tatta
-tatter
-tatterdemalion
-tatterdemalionism
-tatterdemalionry
-tattered
-tatteredly
-tatteredness
-tatterly
-tatterwallop
-tattery
-tatther
-tattied
-tatting
-tattle
-tattlement
-tattler
-tattlery
-tattletale
-tattling
-tattlingly
-tattoo
-tattooage
-tattooer
-tattooing
-tattooist
-tattooment
-tattva
-tatty
-Tatu
-tatu
-tatukira
-Tatusia
-Tatusiidae
-tau
-Taube
-Tauchnitz
-taught
-taula
-Tauli
-taum
-taun
-Taungthu
-taunt
-taunter
-taunting
-tauntingly
-tauntingness
-Taunton
-tauntress
-taupe
-taupo
-taupou
-taur
-tauranga
-taurean
-Tauri
-Taurian
-taurian
-Tauric
-tauric
-tauricide
-tauricornous
-Taurid
-Tauridian
-tauriferous
-tauriform
-taurine
-Taurini
-taurite
-taurobolium
-tauroboly
-taurocephalous
-taurocholate
-taurocholic
-taurocol
-taurocolla
-Tauroctonus
-taurodont
-tauroesque
-taurokathapsia
-taurolatry
-tauromachian
-tauromachic
-tauromachy
-tauromorphic
-tauromorphous
-taurophile
-taurophobe
-Tauropolos
-Taurotragus
-Taurus
-tauryl
-taut
-tautaug
-tauted
-tautegorical
-tautegory
-tauten
-tautirite
-tautit
-tautly
-tautness
-tautochrone
-tautochronism
-tautochronous
-tautog
-tautologic
-tautological
-tautologically
-tautologicalness
-tautologism
-tautologist
-tautologize
-tautologizer
-tautologous
-tautologously
-tautology
-tautomer
-tautomeral
-tautomeric
-tautomerism
-tautomerizable
-tautomerization
-tautomerize
-tautomery
-tautometer
-tautometric
-tautometrical
-tautomorphous
-tautonym
-tautonymic
-tautonymy
-tautoousian
-tautoousious
-tautophonic
-tautophonical
-tautophony
-tautopodic
-tautopody
-tautosyllabic
-tautotype
-tautourea
-tautousian
-tautousious
-tautozonal
-tautozonality
-tav
-Tavast
-Tavastian
-Tave
-tave
-tavell
-taver
-tavern
-taverner
-tavernize
-tavernless
-tavernlike
-tavernly
-tavernous
-tavernry
-tavernwards
-tavers
-tavert
-Tavghi
-tavistockite
-tavola
-tavolatite
-Tavy
-taw
-tawa
-tawdered
-tawdrily
-tawdriness
-tawdry
-tawer
-tawery
-Tawgi
-tawie
-tawite
-tawkee
-tawkin
-tawn
-tawney
-tawnily
-tawniness
-tawnle
-tawny
-tawpi
-tawpie
-taws
-tawse
-tawtie
-tax
-taxability
-taxable
-taxableness
-taxably
-Taxaceae
-taxaceous
-taxameter
-taxaspidean
-taxation
-taxational
-taxative
-taxatively
-taxator
-taxeater
-taxeating
-taxed
-taxeme
-taxemic
-taxeopod
-Taxeopoda
-taxeopodous
-taxeopody
-taxer
-taxgatherer
-taxgathering
-taxi
-taxiable
-taxiarch
-taxiauto
-taxibus
-taxicab
-Taxidea
-taxidermal
-taxidermic
-taxidermist
-taxidermize
-taxidermy
-taximan
-taximeter
-taximetered
-taxine
-taxing
-taxingly
-taxinomic
-taxinomist
-taxinomy
-taxiplane
-taxis
-taxite
-taxitic
-taxless
-taxlessly
-taxlessness
-taxman
-Taxodiaceae
-Taxodium
-taxodont
-taxology
-taxometer
-taxon
-taxonomer
-taxonomic
-taxonomical
-taxonomically
-taxonomist
-taxonomy
-taxor
-taxpaid
-taxpayer
-taxpaying
-Taxus
-taxwax
-taxy
-tay
-Tayassu
-Tayassuidae
-tayer
-Taygeta
-tayir
-Taylor
-Taylorism
-Taylorite
-taylorite
-Taylorize
-tayra
-Tayrona
-taysaam
-tazia
-Tcawi
-tch
-tchai
-tcharik
-tchast
-tche
-tcheirek
-Tcheka
-Tcherkess
-tchervonets
-tchervonetz
-Tchetchentsish
-Tchetnitsi
-Tchi
-tchick
-tchu
-Tchwi
-tck
-Td
-te
-tea
-teaberry
-teaboard
-teabox
-teaboy
-teacake
-teacart
-teach
-teachability
-teachable
-teachableness
-teachably
-teache
-teacher
-teacherage
-teacherdom
-teacheress
-teacherhood
-teacherless
-teacherlike
-teacherly
-teachership
-teachery
-teaching
-teachingly
-teachless
-teachment
-teachy
-teacup
-teacupful
-tead
-teadish
-teaer
-teaey
-teagardeny
-teagle
-Teague
-Teagueland
-Teaguelander
-teahouse
-teaish
-teaism
-teak
-teakettle
-teakwood
-teal
-tealeafy
-tealery
-tealess
-teallite
-team
-teamaker
-teamaking
-teaman
-teameo
-teamer
-teaming
-teamland
-teamless
-teamman
-teammate
-teamsman
-teamster
-teamwise
-teamwork
-tean
-teanal
-teap
-teapot
-teapotful
-teapottykin
-teapoy
-tear
-tearable
-tearableness
-tearably
-tearage
-tearcat
-teardown
-teardrop
-tearer
-tearful
-tearfully
-tearfulness
-tearing
-tearless
-tearlessly
-tearlessness
-tearlet
-tearlike
-tearoom
-tearpit
-tearproof
-tearstain
-teart
-tearthroat
-tearthumb
-teary
-teasable
-teasableness
-teasably
-tease
-teaseable
-teaseableness
-teaseably
-teasehole
-teasel
-teaseler
-teaseller
-teasellike
-teaselwort
-teasement
-teaser
-teashop
-teasiness
-teasing
-teasingly
-teasler
-teaspoon
-teaspoonful
-teasy
-teat
-teataster
-teated
-teatfish
-teathe
-teather
-teatime
-teatlike
-teatling
-teatman
-teaty
-teave
-teaware
-teaze
-teazer
-tebbet
-Tebet
-Tebeth
-Tebu
-tec
-Teca
-teca
-tecali
-Tech
-tech
-techily
-techiness
-technetium
-technic
-technica
-technical
-technicalism
-technicalist
-technicality
-technicalize
-technically
-technicalness
-technician
-technicism
-technicist
-technicological
-technicology
-Technicolor
-technicon
-technics
-techniphone
-technique
-techniquer
-technism
-technist
-technocausis
-technochemical
-technochemistry
-technocracy
-technocrat
-technocratic
-technographer
-technographic
-technographical
-technographically
-technography
-technolithic
-technologic
-technological
-technologically
-technologist
-technologue
-technology
-technonomic
-technonomy
-technopsychology
-techous
-techy
-teck
-Tecla
-tecnoctonia
-tecnology
-Teco
-Tecoma
-tecomin
-tecon
-Tecpanec
-tectal
-tectibranch
-Tectibranchia
-tectibranchian
-Tectibranchiata
-tectibranchiate
-tectiform
-tectocephalic
-tectocephaly
-tectological
-tectology
-Tectona
-tectonic
-tectonics
-tectorial
-tectorium
-Tectosages
-tectosphere
-tectospinal
-Tectospondyli
-tectospondylic
-tectospondylous
-tectrices
-tectricial
-tectum
-tecum
-tecuma
-Tecuna
-Ted
-ted
-Teda
-tedder
-Teddy
-tedescan
-tedge
-tediosity
-tedious
-tediously
-tediousness
-tediousome
-tedisome
-tedium
-tee
-teedle
-teel
-teem
-teemer
-teemful
-teemfulness
-teeming
-teemingly
-teemingness
-teemless
-teems
-teen
-teenage
-teenet
-teens
-teensy
-teenty
-teeny
-teer
-teerer
-teest
-Teeswater
-teet
-teetaller
-teetan
-teeter
-teeterboard
-teeterer
-teetertail
-teeth
-teethache
-teethbrush
-teethe
-teethful
-teethily
-teething
-teethless
-teethlike
-teethridge
-teethy
-teeting
-teetotal
-teetotaler
-teetotalism
-teetotalist
-teetotally
-teetotum
-teetotumism
-teetotumize
-teetotumwise
-teety
-teevee
-teewhaap
-teff
-teg
-Tegean
-Tegeticula
-tegmen
-tegmental
-tegmentum
-tegmina
-tegminal
-Tegmine
-tegua
-teguexin
-Teguima
-tegula
-tegular
-tegularly
-tegulated
-tegumen
-tegument
-tegumental
-tegumentary
-tegumentum
-tegurium
-Teheran
-tehseel
-tehseeldar
-tehsil
-tehsildar
-Tehuantepecan
-Tehueco
-Tehuelche
-Tehuelchean
-Tehuelet
-Teian
-teicher
-teiglech
-Teiidae
-teil
-teind
-teindable
-teinder
-teinland
-teinoscope
-teioid
-Teiresias
-Tejon
-tejon
-teju
-tekiah
-Tekintsi
-Tekke
-tekke
-tekken
-Tekkintzi
-teknonymous
-teknonymy
-tektite
-tekya
-telacoustic
-telakucha
-telamon
-telang
-telangiectasia
-telangiectasis
-telangiectasy
-telangiectatic
-telangiosis
-Telanthera
-telar
-telarian
-telary
-telautogram
-telautograph
-telautographic
-telautographist
-telautography
-telautomatic
-telautomatically
-telautomatics
-Telchines
-Telchinic
-tele
-teleanemograph
-teleangiectasia
-telebarograph
-telebarometer
-telecast
-telecaster
-telechemic
-telechirograph
-telecinematography
-telecode
-telecommunication
-telecryptograph
-telectroscope
-teledendrion
-teledendrite
-teledendron
-teledu
-telega
-telegenic
-Telegn
-telegnosis
-telegnostic
-telegonic
-telegonous
-telegony
-telegram
-telegrammatic
-telegrammic
-telegraph
-telegraphee
-telegrapheme
-telegrapher
-telegraphese
-telegraphic
-telegraphical
-telegraphically
-telegraphist
-telegraphone
-telegraphophone
-telegraphoscope
-telegraphy
-Telegu
-telehydrobarometer
-Telei
-Teleia
-teleianthous
-teleiosis
-telekinematography
-telekinesis
-telekinetic
-telelectric
-telelectrograph
-telelectroscope
-telemanometer
-Telemark
-telemark
-Telembi
-telemechanic
-telemechanics
-telemechanism
-telemetacarpal
-telemeteorograph
-telemeteorographic
-telemeteorography
-telemeter
-telemetric
-telemetrical
-telemetrist
-telemetrograph
-telemetrographic
-telemetrography
-telemetry
-telemotor
-telencephal
-telencephalic
-telencephalon
-telenergic
-telenergy
-teleneurite
-teleneuron
-Telenget
-telengiscope
-Telenomus
-teleobjective
-Teleocephali
-teleocephalous
-Teleoceras
-Teleodesmacea
-teleodesmacean
-teleodesmaceous
-teleodont
-teleologic
-teleological
-teleologically
-teleologism
-teleologist
-teleology
-teleometer
-teleophobia
-teleophore
-teleophyte
-teleoptile
-teleorganic
-teleoroentgenogram
-teleoroentgenography
-teleosaur
-teleosaurian
-Teleosauridae
-Teleosaurus
-teleost
-teleostean
-Teleostei
-teleosteous
-teleostomate
-teleostome
-Teleostomi
-teleostomian
-teleostomous
-teleotemporal
-teleotrocha
-teleozoic
-teleozoon
-telepathic
-telepathically
-telepathist
-telepathize
-telepathy
-telepheme
-telephone
-telephoner
-telephonic
-telephonical
-telephonically
-telephonist
-telephonograph
-telephonographic
-telephony
-telephote
-telephoto
-telephotograph
-telephotographic
-telephotography
-Telephus
-telepicture
-teleplasm
-teleplasmic
-teleplastic
-telepost
-teleprinter
-teleradiophone
-teleran
-telergic
-telergical
-telergically
-telergy
-telescope
-telescopic
-telescopical
-telescopically
-telescopiform
-telescopist
-Telescopium
-telescopy
-telescriptor
-teleseism
-teleseismic
-teleseismology
-teleseme
-telesia
-telesis
-telesmeter
-telesomatic
-telespectroscope
-telestereograph
-telestereography
-telestereoscope
-telesterion
-telesthesia
-telesthetic
-telestial
-telestic
-telestich
-teletactile
-teletactor
-teletape
-teletherapy
-telethermogram
-telethermograph
-telethermometer
-telethermometry
-telethon
-teletopometer
-teletranscription
-Teletype
-teletype
-teletyper
-teletypesetter
-teletypewriter
-teletyping
-Teleut
-teleuto
-teleutoform
-teleutosorus
-teleutospore
-teleutosporic
-teleutosporiferous
-teleview
-televiewer
-televise
-television
-televisional
-televisionary
-televisor
-televisual
-televocal
-televox
-telewriter
-Telfairia
-telfairic
-telfer
-telferage
-telford
-telfordize
-telharmonic
-telharmonium
-telharmony
-teli
-telial
-telic
-telical
-telically
-teliferous
-Telinga
-teliosorus
-teliospore
-teliosporic
-teliosporiferous
-teliostage
-telium
-tell
-tellable
-tellach
-tellee
-teller
-tellership
-telligraph
-Tellima
-Tellina
-Tellinacea
-tellinacean
-tellinaceous
-telling
-tellingly
-Tellinidae
-tellinoid
-tellsome
-tellt
-telltale
-telltalely
-telltruth
-tellural
-tellurate
-telluret
-tellureted
-tellurethyl
-telluretted
-tellurhydric
-tellurian
-telluric
-telluride
-telluriferous
-tellurion
-tellurism
-tellurist
-tellurite
-tellurium
-tellurize
-telluronium
-tellurous
-telmatological
-telmatology
-teloblast
-teloblastic
-telocentric
-telodendrion
-telodendron
-telodynamic
-telokinesis
-telolecithal
-telolemma
-telome
-telomic
-telomitic
-telonism
-Teloogoo
-Telopea
-telophase
-telophragma
-telopsis
-teloptic
-telosynapsis
-telosynaptic
-telosynaptist
-teloteropathic
-teloteropathically
-teloteropathy
-Telotremata
-telotrematous
-telotroch
-telotrocha
-telotrochal
-telotrochous
-telotrophic
-telotype
-telpath
-telpher
-telpherage
-telpherman
-telpherway
-telson
-telsonic
-telt
-Telugu
-telurgy
-telyn
-Tema
-temacha
-temalacatl
-Teman
-teman
-Temanite
-tembe
-temblor
-Tembu
-temenos
-temerarious
-temerariously
-temerariousness
-temeritous
-temerity
-temerous
-temerously
-temerousness
-temiak
-temin
-Temiskaming
-Temne
-Temnospondyli
-temnospondylous
-temp
-Tempe
-Tempean
-temper
-tempera
-temperability
-temperable
-temperably
-temperality
-temperament
-temperamental
-temperamentalist
-temperamentally
-temperamented
-temperance
-temperate
-temperately
-temperateness
-temperative
-temperature
-tempered
-temperedly
-temperedness
-temperer
-temperish
-temperless
-tempersome
-tempery
-tempest
-tempestical
-tempestive
-tempestively
-tempestivity
-tempestuous
-tempestuously
-tempestuousness
-tempesty
-tempi
-Templar
-templar
-templardom
-templarism
-templarlike
-templarlikeness
-templary
-template
-templater
-temple
-templed
-templeful
-templeless
-templelike
-templet
-Templetonia
-templeward
-templize
-tempo
-tempora
-temporal
-temporale
-temporalism
-temporalist
-temporality
-temporalize
-temporally
-temporalness
-temporalty
-temporaneous
-temporaneously
-temporaneousness
-temporarily
-temporariness
-temporary
-temporator
-temporization
-temporizer
-temporizing
-temporizingly
-temporoalar
-temporoauricular
-temporocentral
-temporocerebellar
-temporofacial
-temporofrontal
-temporohyoid
-temporomalar
-temporomandibular
-temporomastoid
-temporomaxillary
-temporooccipital
-temporoparietal
-temporopontine
-temporosphenoid
-temporosphenoidal
-temporozygomatic
-tempre
-temprely
-tempt
-temptability
-temptable
-temptableness
-temptation
-temptational
-temptationless
-temptatious
-temptatory
-tempter
-tempting
-temptingly
-temptingness
-temptress
-Tempyo
-temse
-temser
-temulence
-temulency
-temulent
-temulentive
-temulently
-ten
-tenability
-tenable
-tenableness
-tenably
-tenace
-tenacious
-tenaciously
-tenaciousness
-tenacity
-tenaculum
-tenai
-tenaille
-tenaillon
-Tenaktak
-tenancy
-tenant
-tenantable
-tenantableness
-tenanter
-tenantism
-tenantless
-tenantlike
-tenantry
-tenantship
-tench
-tenchweed
-Tencteri
-tend
-tendance
-tendant
-tendence
-tendency
-tendent
-tendential
-tendentious
-tendentiously
-tendentiousness
-tender
-tenderability
-tenderable
-tenderably
-tenderee
-tenderer
-tenderfoot
-tenderfootish
-tenderful
-tenderfully
-tenderheart
-tenderhearted
-tenderheartedly
-tenderheartedness
-tenderish
-tenderize
-tenderling
-tenderloin
-tenderly
-tenderness
-tenderometer
-tendersome
-tendinal
-tending
-tendingly
-tendinitis
-tendinous
-tendinousness
-tendomucoid
-tendon
-tendonous
-tendoplasty
-tendosynovitis
-tendotome
-tendotomy
-tendour
-tendovaginal
-tendovaginitis
-tendresse
-tendril
-tendriled
-tendriliferous
-tendrillar
-tendrilly
-tendrilous
-tendron
-tenebra
-Tenebrae
-tenebricose
-tenebrific
-tenebrificate
-Tenebrio
-tenebrionid
-Tenebrionidae
-tenebrious
-tenebriously
-tenebrity
-tenebrose
-tenebrosity
-tenebrous
-tenebrously
-tenebrousness
-tenectomy
-tenement
-tenemental
-tenementary
-tenementer
-tenementization
-tenementize
-tenendas
-tenendum
-tenent
-teneral
-Teneriffe
-tenesmic
-tenesmus
-tenet
-tenfold
-tenfoldness
-teng
-tengere
-tengerite
-Tenggerese
-tengu
-teniacidal
-teniacide
-tenible
-Tenino
-tenio
-tenline
-tenmantale
-tennantite
-tenne
-tenner
-Tennessean
-tennis
-tennisdom
-tennisy
-Tennysonian
-Tennysonianism
-Tenochtitlan
-tenodesis
-tenodynia
-tenography
-tenology
-tenomyoplasty
-tenomyotomy
-tenon
-tenonectomy
-tenoner
-Tenonian
-tenonitis
-tenonostosis
-tenontagra
-tenontitis
-tenontodynia
-tenontography
-tenontolemmitis
-tenontology
-tenontomyoplasty
-tenontomyotomy
-tenontophyma
-tenontoplasty
-tenontothecitis
-tenontotomy
-tenophony
-tenophyte
-tenoplastic
-tenoplasty
-tenor
-tenorist
-tenorister
-tenorite
-tenorless
-tenoroon
-tenorrhaphy
-tenositis
-tenostosis
-tenosuture
-tenotome
-tenotomist
-tenotomize
-tenotomy
-tenovaginitis
-tenpence
-tenpenny
-tenpin
-tenrec
-Tenrecidae
-tense
-tenseless
-tenselessness
-tensely
-tenseness
-tensibility
-tensible
-tensibleness
-tensibly
-tensify
-tensile
-tensilely
-tensileness
-tensility
-tensimeter
-tensiometer
-tension
-tensional
-tensionless
-tensity
-tensive
-tenson
-tensor
-tent
-tentability
-tentable
-tentacle
-tentacled
-tentaclelike
-tentacula
-tentacular
-Tentaculata
-tentaculate
-tentaculated
-Tentaculifera
-tentaculite
-Tentaculites
-Tentaculitidae
-tentaculocyst
-tentaculoid
-tentaculum
-tentage
-tentamen
-tentation
-tentative
-tentatively
-tentativeness
-tented
-tenter
-tenterbelly
-tenterer
-tenterhook
-tentful
-tenth
-tenthly
-tenthmeter
-tenthredinid
-Tenthredinidae
-tenthredinoid
-Tenthredinoidea
-Tenthredo
-tentiform
-tentigo
-tentillum
-tention
-tentless
-tentlet
-tentlike
-tentmaker
-tentmaking
-tentmate
-tentorial
-tentorium
-tenture
-tentwards
-tentwise
-tentwork
-tentwort
-tenty
-tenuate
-tenues
-tenuicostate
-tenuifasciate
-tenuiflorous
-tenuifolious
-tenuious
-tenuiroster
-tenuirostral
-tenuirostrate
-Tenuirostres
-tenuis
-tenuistriate
-tenuity
-tenuous
-tenuously
-tenuousness
-tenure
-tenurial
-tenurially
-teocalli
-teopan
-teosinte
-Teotihuacan
-tepache
-tepal
-Tepanec
-Tepecano
-tepee
-tepefaction
-tepefy
-Tepehua
-Tepehuane
-tepetate
-Tephillah
-tephillin
-tephramancy
-tephrite
-tephritic
-tephroite
-tephromalacia
-tephromyelitic
-Tephrosia
-tephrosis
-tepid
-tepidarium
-tepidity
-tepidly
-tepidness
-tepomporize
-teponaztli
-tepor
-tequila
-Tequistlateca
-Tequistlatecan
-tera
-teraglin
-terakihi
-teramorphous
-terap
-teraphim
-teras
-teratical
-teratism
-teratoblastoma
-teratogenesis
-teratogenetic
-teratogenic
-teratogenous
-teratogeny
-teratoid
-teratological
-teratologist
-teratology
-teratoma
-teratomatous
-teratoscopy
-teratosis
-terbia
-terbic
-terbium
-tercel
-tercelet
-tercentenarian
-tercentenarize
-tercentenary
-tercentennial
-tercer
-terceron
-tercet
-terchloride
-tercia
-tercine
-tercio
-terdiurnal
-terebate
-terebella
-terebellid
-Terebellidae
-terebelloid
-terebellum
-terebene
-terebenic
-terebenthene
-terebic
-terebilic
-terebinic
-terebinth
-Terebinthaceae
-terebinthial
-terebinthian
-terebinthic
-terebinthina
-terebinthinate
-terebinthine
-terebinthinous
-Terebinthus
-terebra
-terebral
-terebrant
-Terebrantia
-terebrate
-terebration
-Terebratula
-terebratular
-terebratulid
-Terebratulidae
-terebratuliform
-terebratuline
-terebratulite
-terebratuloid
-Terebridae
-Teredinidae
-teredo
-terek
-Terence
-Terentian
-terephthalate
-terephthalic
-Teresa
-Teresian
-Teresina
-terete
-teretial
-tereticaudate
-teretifolious
-teretipronator
-teretiscapular
-teretiscapularis
-teretish
-tereu
-Tereus
-terfez
-Terfezia
-Terfeziaceae
-tergal
-tergant
-tergeminate
-tergeminous
-tergiferous
-tergite
-tergitic
-tergiversant
-tergiversate
-tergiversation
-tergiversator
-tergiversatory
-tergiverse
-tergolateral
-tergum
-Teri
-Teriann
-terlinguaite
-term
-terma
-termagancy
-Termagant
-termagant
-termagantish
-termagantism
-termagantly
-termage
-termatic
-termen
-termer
-Termes
-termillenary
-termin
-terminability
-terminable
-terminableness
-terminably
-terminal
-Terminalia
-Terminaliaceae
-terminalization
-terminalized
-terminally
-terminant
-terminate
-termination
-terminational
-terminative
-terminatively
-terminator
-terminatory
-termine
-terminer
-termini
-terminine
-terminism
-terminist
-terministic
-terminize
-termino
-terminological
-terminologically
-terminologist
-terminology
-terminus
-termital
-termitarium
-termitary
-termite
-termitic
-termitid
-Termitidae
-termitophagous
-termitophile
-termitophilous
-termless
-termlessly
-termlessness
-termly
-termolecular
-termon
-termor
-termtime
-tern
-terna
-ternal
-ternar
-ternariant
-ternarious
-ternary
-ternate
-ternately
-ternatipinnate
-ternatisect
-ternatopinnate
-terne
-terneplate
-ternery
-ternion
-ternize
-ternlet
-Ternstroemia
-Ternstroemiaceae
-teroxide
-terp
-terpadiene
-terpane
-terpene
-terpeneless
-terphenyl
-terpilene
-terpin
-terpine
-terpinene
-terpineol
-terpinol
-terpinolene
-terpodion
-Terpsichore
-terpsichoreal
-terpsichoreally
-Terpsichorean
-terpsichorean
-Terraba
-terrace
-terraceous
-terracer
-terracette
-terracewards
-terracewise
-terracework
-terraciform
-terracing
-terraculture
-terraefilial
-terraefilian
-terrage
-terrain
-terral
-terramara
-terramare
-Terrance
-terrane
-terranean
-terraneous
-Terrapene
-terrapin
-terraquean
-terraqueous
-terraqueousness
-terrar
-terrarium
-terrazzo
-terrella
-terremotive
-Terrence
-terrene
-terrenely
-terreneness
-terreplein
-terrestrial
-terrestrialism
-terrestriality
-terrestrialize
-terrestrially
-terrestrialness
-terrestricity
-terrestrious
-terret
-terreted
-Terri
-terribility
-terrible
-terribleness
-terribly
-terricole
-terricoline
-terricolous
-terrier
-terrierlike
-terrific
-terrifical
-terrifically
-terrification
-terrificly
-terrificness
-terrifiedly
-terrifier
-terrify
-terrifying
-terrifyingly
-terrigenous
-terrine
-Territelae
-territelarian
-territorial
-territorialism
-territorialist
-territoriality
-territorialization
-territorialize
-territorially
-territorian
-territoried
-territory
-terron
-terror
-terrorful
-terrorific
-terrorism
-terrorist
-terroristic
-terroristical
-terrorization
-terrorize
-terrorizer
-terrorless
-terrorproof
-terrorsome
-Terry
-terry
-terse
-tersely
-terseness
-tersion
-tersulphate
-tersulphide
-tersulphuret
-tertenant
-tertia
-tertial
-tertian
-tertiana
-tertianship
-tertiarian
-tertiary
-tertiate
-tertius
-terton
-tertrinal
-Tertullianism
-Tertullianist
-teruncius
-terutero
-Teruyuki
-tervalence
-tervalency
-tervalent
-tervariant
-tervee
-terzetto
-terzina
-terzo
-tesack
-tesarovitch
-teschenite
-teschermacherite
-teskere
-teskeria
-Tess
-tessara
-tessarace
-tessaraconter
-tessaradecad
-tessaraglot
-tessaraphthong
-tessarescaedecahedron
-tessel
-tessella
-tessellar
-tessellate
-tessellated
-tessellation
-tessera
-tesseract
-tesseradecade
-tesseraic
-tesseral
-Tesserants
-tesserarian
-tesserate
-tesserated
-tesseratomic
-tesseratomy
-tessular
-test
-testa
-testable
-Testacea
-testacean
-testaceography
-testaceology
-testaceous
-testaceousness
-testacy
-testament
-testamental
-testamentally
-testamentalness
-testamentarily
-testamentary
-testamentate
-testamentation
-testamentum
-testamur
-testar
-testata
-testate
-testation
-testator
-testatorship
-testatory
-testatrices
-testatrix
-testatum
-teste
-tested
-testee
-tester
-testes
-testibrachial
-testibrachium
-testicardinate
-testicardine
-Testicardines
-testicle
-testicond
-testicular
-testiculate
-testiculated
-testiere
-testificate
-testification
-testificator
-testificatory
-testifier
-testify
-testily
-testimonial
-testimonialist
-testimonialization
-testimonialize
-testimonializer
-testimonium
-testimony
-testiness
-testing
-testingly
-testis
-teston
-testone
-testoon
-testor
-testosterone
-testril
-testudinal
-Testudinaria
-testudinarious
-Testudinata
-testudinate
-testudinated
-testudineal
-testudineous
-Testudinidae
-testudinous
-testudo
-testy
-Tesuque
-tetanic
-tetanical
-tetanically
-tetaniform
-tetanigenous
-tetanilla
-tetanine
-tetanism
-tetanization
-tetanize
-tetanoid
-tetanolysin
-tetanomotor
-tetanospasmin
-tetanotoxin
-tetanus
-tetany
-tetarcone
-tetarconid
-tetard
-tetartemorion
-tetartocone
-tetartoconid
-tetartohedral
-tetartohedrally
-tetartohedrism
-tetartohedron
-tetartoid
-tetartosymmetry
-tetch
-tetchy
-tete
-tetel
-teterrimous
-teth
-tethelin
-tether
-tetherball
-tethery
-tethydan
-Tethys
-Teton
-tetra
-tetraamylose
-tetrabasic
-tetrabasicity
-Tetrabelodon
-tetrabelodont
-tetrabiblos
-tetraborate
-tetraboric
-tetrabrach
-tetrabranch
-Tetrabranchia
-tetrabranchiate
-tetrabromid
-tetrabromide
-tetrabromo
-tetrabromoethane
-tetracadactylity
-tetracarboxylate
-tetracarboxylic
-tetracarpellary
-tetraceratous
-tetracerous
-Tetracerus
-tetrachical
-tetrachlorid
-tetrachloride
-tetrachloro
-tetrachloroethane
-tetrachloroethylene
-tetrachloromethane
-tetrachord
-tetrachordal
-tetrachordon
-tetrachoric
-tetrachotomous
-tetrachromatic
-tetrachromic
-tetrachronous
-tetracid
-tetracoccous
-tetracoccus
-tetracolic
-tetracolon
-tetracoral
-Tetracoralla
-tetracoralline
-tetracosane
-tetract
-tetractinal
-tetractine
-tetractinellid
-Tetractinellida
-tetractinellidan
-tetractinelline
-tetractinose
-tetracyclic
-tetrad
-tetradactyl
-tetradactylous
-tetradactyly
-tetradarchy
-tetradecane
-tetradecanoic
-tetradecapod
-Tetradecapoda
-tetradecapodan
-tetradecapodous
-tetradecyl
-Tetradesmus
-tetradiapason
-tetradic
-Tetradite
-tetradrachma
-tetradrachmal
-tetradrachmon
-tetradymite
-Tetradynamia
-tetradynamian
-tetradynamious
-tetradynamous
-tetraedron
-tetraedrum
-tetraethylsilane
-tetrafluoride
-tetrafolious
-tetragamy
-tetragenous
-tetraglot
-tetraglottic
-tetragon
-tetragonal
-tetragonally
-tetragonalness
-Tetragonia
-Tetragoniaceae
-tetragonidium
-tetragonous
-tetragonus
-tetragram
-tetragrammatic
-Tetragrammaton
-tetragrammatonic
-tetragyn
-Tetragynia
-tetragynian
-tetragynous
-tetrahedral
-tetrahedrally
-tetrahedric
-tetrahedrite
-tetrahedroid
-tetrahedron
-tetrahexahedral
-tetrahexahedron
-tetrahydrate
-tetrahydrated
-tetrahydric
-tetrahydride
-tetrahydro
-tetrahydroxy
-tetraiodid
-tetraiodide
-tetraiodo
-tetraiodophenolphthalein
-tetrakaidecahedron
-tetraketone
-tetrakisazo
-tetrakishexahedron
-tetralemma
-Tetralin
-tetralogic
-tetralogue
-tetralogy
-tetralophodont
-tetramastia
-tetramastigote
-Tetramera
-tetrameral
-tetrameralian
-tetrameric
-tetramerism
-tetramerous
-tetrameter
-tetramethyl
-tetramethylammonium
-tetramethylene
-tetramethylium
-tetramin
-tetramine
-tetrammine
-tetramorph
-tetramorphic
-tetramorphism
-tetramorphous
-tetrander
-Tetrandria
-tetrandrian
-tetrandrous
-tetrane
-tetranitrate
-tetranitro
-tetranitroaniline
-tetranuclear
-Tetranychus
-Tetrao
-Tetraodon
-tetraodont
-Tetraodontidae
-tetraonid
-Tetraonidae
-Tetraoninae
-tetraonine
-Tetrapanax
-tetrapartite
-tetrapetalous
-tetraphalangeate
-tetrapharmacal
-tetrapharmacon
-tetraphenol
-tetraphony
-tetraphosphate
-tetraphyllous
-tetrapla
-tetraplegia
-tetrapleuron
-tetraploid
-tetraploidic
-tetraploidy
-tetraplous
-Tetrapneumona
-Tetrapneumones
-tetrapneumonian
-tetrapneumonous
-tetrapod
-Tetrapoda
-tetrapodic
-tetrapody
-tetrapolar
-tetrapolis
-tetrapolitan
-tetrapous
-tetraprostyle
-tetrapteran
-tetrapteron
-tetrapterous
-tetraptote
-Tetrapturus
-tetraptych
-tetrapylon
-tetrapyramid
-tetrapyrenous
-tetraquetrous
-tetrarch
-tetrarchate
-tetrarchic
-tetrarchy
-tetrasaccharide
-tetrasalicylide
-tetraselenodont
-tetraseme
-tetrasemic
-tetrasepalous
-tetraskelion
-tetrasome
-tetrasomic
-tetrasomy
-tetraspermal
-tetraspermatous
-tetraspermous
-tetraspheric
-tetrasporange
-tetrasporangiate
-tetrasporangium
-tetraspore
-tetrasporic
-tetrasporiferous
-tetrasporous
-tetraster
-tetrastich
-tetrastichal
-tetrastichic
-Tetrastichidae
-tetrastichous
-Tetrastichus
-tetrastoon
-tetrastyle
-tetrastylic
-tetrastylos
-tetrastylous
-tetrasubstituted
-tetrasubstitution
-tetrasulphide
-tetrasyllabic
-tetrasyllable
-tetrasymmetry
-tetrathecal
-tetratheism
-tetratheite
-tetrathionates
-tetrathionic
-tetratomic
-tetratone
-tetravalence
-tetravalency
-tetravalent
-tetraxial
-tetraxon
-Tetraxonia
-tetraxonian
-tetraxonid
-Tetraxonida
-tetrazane
-tetrazene
-tetrazin
-tetrazine
-tetrazo
-tetrazole
-tetrazolium
-tetrazolyl
-tetrazone
-tetrazotization
-tetrazotize
-tetrazyl
-tetremimeral
-tetrevangelium
-tetric
-tetrical
-tetricity
-tetricous
-tetrigid
-Tetrigidae
-tetriodide
-Tetrix
-tetrobol
-tetrobolon
-tetrode
-Tetrodon
-tetrodont
-Tetrodontidae
-tetrole
-tetrolic
-tetronic
-tetronymal
-tetrose
-tetroxalate
-tetroxide
-tetrsyllabical
-tetryl
-tetrylene
-tetter
-tetterish
-tetterous
-tetterwort
-tettery
-Tettigidae
-tettigoniid
-Tettigoniidae
-tettix
-Tetum
-Teucer
-Teucri
-Teucrian
-teucrin
-Teucrium
-teufit
-teuk
-Teutolatry
-Teutomania
-Teutomaniac
-Teuton
-Teutondom
-Teutonesque
-Teutonia
-Teutonic
-Teutonically
-Teutonicism
-Teutonism
-Teutonist
-Teutonity
-Teutonization
-Teutonize
-Teutonomania
-Teutonophobe
-Teutonophobia
-Teutophil
-Teutophile
-Teutophilism
-Teutophobe
-Teutophobia
-Teutophobism
-teviss
-tew
-Tewa
-tewel
-tewer
-tewit
-tewly
-tewsome
-Texan
-Texas
-Texcocan
-texguino
-text
-textarian
-textbook
-textbookless
-textiferous
-textile
-textilist
-textlet
-textman
-textorial
-textrine
-textual
-textualism
-textualist
-textuality
-textually
-textuarist
-textuary
-textural
-texturally
-texture
-textureless
-tez
-Tezcatlipoca
-Tezcatzoncatl
-Tezcucan
-tezkere
-th
-tha
-thack
-thacker
-Thackerayan
-Thackerayana
-Thackerayesque
-thackless
-Thad
-Thai
-Thais
-thakur
-thakurate
-thalamencephalic
-thalamencephalon
-thalami
-thalamic
-Thalamiflorae
-thalamifloral
-thalamiflorous
-thalamite
-thalamium
-thalamocele
-thalamocoele
-thalamocortical
-thalamocrural
-thalamolenticular
-thalamomammillary
-thalamopeduncular
-Thalamophora
-thalamotegmental
-thalamotomy
-thalamus
-Thalarctos
-thalassal
-Thalassarctos
-thalassian
-thalassic
-thalassinid
-Thalassinidea
-thalassinidian
-thalassinoid
-thalassiophyte
-thalassiophytous
-thalasso
-Thalassochelys
-thalassocracy
-thalassocrat
-thalassographer
-thalassographic
-thalassographical
-thalassography
-thalassometer
-thalassophilous
-thalassophobia
-thalassotherapy
-thalattology
-thalenite
-thaler
-Thalesia
-Thalesian
-Thalessa
-Thalia
-Thaliacea
-thaliacean
-Thalian
-Thaliard
-Thalictrum
-thalli
-thallic
-thalliferous
-thalliform
-thalline
-thallious
-thallium
-thallochlore
-thallodal
-thallogen
-thallogenic
-thallogenous
-thalloid
-thallome
-Thallophyta
-thallophyte
-thallophytic
-thallose
-thallous
-thallus
-thalposis
-thalpotic
-thalthan
-thameng
-Thamesis
-Thamnidium
-thamnium
-thamnophile
-Thamnophilinae
-thamnophiline
-Thamnophilus
-Thamnophis
-Thamudean
-Thamudene
-Thamudic
-thamuria
-Thamus
-Thamyras
-than
-thana
-thanadar
-thanage
-thanan
-thanatism
-thanatist
-thanatobiologic
-thanatognomonic
-thanatographer
-thanatography
-thanatoid
-thanatological
-thanatologist
-thanatology
-thanatomantic
-thanatometer
-thanatophidia
-thanatophidian
-thanatophobe
-thanatophobia
-thanatophobiac
-thanatophoby
-thanatopsis
-Thanatos
-thanatosis
-thanatotic
-thanatousia
-thane
-thanedom
-thanehood
-thaneland
-thaneship
-thank
-thankee
-thanker
-thankful
-thankfully
-thankfulness
-thankless
-thanklessly
-thanklessness
-thanks
-thanksgiver
-thanksgiving
-thankworthily
-thankworthiness
-thankworthy
-thapes
-Thapsia
-thapsia
-thar
-Tharen
-tharf
-tharfcake
-Thargelion
-tharginyah
-tharm
-Thasian
-Thaspium
-that
-thatch
-thatcher
-thatching
-thatchless
-thatchwood
-thatchwork
-thatchy
-thatn
-thatness
-thats
-thaught
-Thaumantian
-Thaumantias
-thaumasite
-thaumatogeny
-thaumatography
-thaumatolatry
-thaumatology
-thaumatrope
-thaumatropical
-thaumaturge
-thaumaturgia
-thaumaturgic
-thaumaturgical
-thaumaturgics
-thaumaturgism
-thaumaturgist
-thaumaturgy
-thaumoscopic
-thave
-thaw
-thawer
-thawless
-thawn
-thawy
-The
-the
-Thea
-Theaceae
-theaceous
-theah
-theandric
-theanthropic
-theanthropical
-theanthropism
-theanthropist
-theanthropology
-theanthropophagy
-theanthropos
-theanthroposophy
-theanthropy
-thearchic
-thearchy
-theasum
-theat
-theater
-theatergoer
-theatergoing
-theaterless
-theaterlike
-theaterward
-theaterwards
-theaterwise
-Theatine
-theatral
-theatric
-theatricable
-theatrical
-theatricalism
-theatricality
-theatricalization
-theatricalize
-theatrically
-theatricalness
-theatricals
-theatrician
-theatricism
-theatricize
-theatrics
-theatrize
-theatrocracy
-theatrograph
-theatromania
-theatromaniac
-theatron
-theatrophile
-theatrophobia
-theatrophone
-theatrophonic
-theatropolis
-theatroscope
-theatry
-theave
-theb
-Thebaic
-Thebaid
-thebaine
-Thebais
-thebaism
-Theban
-Thebesian
-theca
-thecae
-thecal
-Thecamoebae
-thecaphore
-thecasporal
-thecaspore
-thecaspored
-thecasporous
-Thecata
-thecate
-thecia
-thecitis
-thecium
-Thecla
-thecla
-theclan
-thecodont
-thecoglossate
-thecoid
-Thecoidea
-Thecophora
-Thecosomata
-thecosomatous
-thee
-theek
-theeker
-theelin
-theelol
-Theemim
-theer
-theet
-theetsee
-theezan
-theft
-theftbote
-theftdom
-theftless
-theftproof
-theftuous
-theftuously
-thegether
-thegidder
-thegither
-thegn
-thegndom
-thegnhood
-thegnland
-thegnlike
-thegnly
-thegnship
-thegnworthy
-theiform
-Theileria
-theine
-theinism
-their
-theirn
-theirs
-theirselves
-theirsens
-theism
-theist
-theistic
-theistical
-theistically
-thelalgia
-Thelemite
-thelemite
-Thelephora
-Thelephoraceae
-Theligonaceae
-theligonaceous
-Theligonum
-thelitis
-thelium
-Thelodontidae
-Thelodus
-theloncus
-thelorrhagia
-Thelphusa
-thelphusian
-Thelphusidae
-thelyblast
-thelyblastic
-thelyotokous
-thelyotoky
-Thelyphonidae
-Thelyphonus
-thelyplasty
-thelytocia
-thelytoky
-thelytonic
-them
-thema
-themata
-thematic
-thematical
-thematically
-thematist
-theme
-themeless
-themelet
-themer
-Themis
-themis
-Themistian
-themsel
-themselves
-then
-thenabouts
-thenadays
-thenal
-thenar
-thenardite
-thence
-thenceafter
-thenceforth
-thenceforward
-thenceforwards
-thencefrom
-thenceward
-thenness
-Theo
-theoanthropomorphic
-theoanthropomorphism
-theoastrological
-Theobald
-Theobroma
-theobromic
-theobromine
-theocentric
-theocentricism
-theocentrism
-theochristic
-theocollectivism
-theocollectivist
-theocracy
-theocrasia
-theocrasical
-theocrasy
-theocrat
-theocratic
-theocratical
-theocratically
-theocratist
-Theocritan
-Theocritean
-theodemocracy
-theodicaea
-theodicean
-theodicy
-theodidact
-theodolite
-theodolitic
-Theodora
-Theodore
-Theodoric
-Theodosia
-Theodosian
-Theodotian
-theodrama
-theody
-theogamy
-theogeological
-theognostic
-theogonal
-theogonic
-theogonism
-theogonist
-theogony
-theohuman
-theokrasia
-theoktonic
-theoktony
-theolatrous
-theolatry
-theolepsy
-theoleptic
-theologal
-theologaster
-theologastric
-theologate
-theologeion
-theologer
-theologi
-theologian
-theologic
-theological
-theologically
-theologician
-theologicoastronomical
-theologicoethical
-theologicohistorical
-theologicometaphysical
-theologicomilitary
-theologicomoral
-theologiconatural
-theologicopolitical
-theologics
-theologism
-theologist
-theologium
-theologization
-theologize
-theologizer
-theologoumena
-theologoumenon
-theologue
-theologus
-theology
-theomachia
-theomachist
-theomachy
-theomammomist
-theomancy
-theomania
-theomaniac
-theomantic
-theomastix
-theomicrist
-theomisanthropist
-theomorphic
-theomorphism
-theomorphize
-theomythologer
-theomythology
-theonomy
-theopantism
-Theopaschist
-Theopaschitally
-Theopaschite
-Theopaschitic
-Theopaschitism
-theopathetic
-theopathic
-theopathy
-theophagic
-theophagite
-theophagous
-theophagy
-Theophania
-theophania
-theophanic
-theophanism
-theophanous
-theophany
-Theophila
-theophilanthrope
-theophilanthropic
-theophilanthropism
-theophilanthropist
-theophilanthropy
-theophile
-theophilist
-theophilosophic
-Theophilus
-theophobia
-theophoric
-theophorous
-Theophrastaceae
-theophrastaceous
-Theophrastan
-Theophrastean
-theophylline
-theophysical
-theopneust
-theopneusted
-theopneustia
-theopneustic
-theopneusty
-theopolitician
-theopolitics
-theopolity
-theopsychism
-theorbist
-theorbo
-theorem
-theorematic
-theorematical
-theorematically
-theorematist
-theoremic
-theoretic
-theoretical
-theoreticalism
-theoretically
-theoretician
-theoreticopractical
-theoretics
-theoria
-theoriai
-theoric
-theorical
-theorically
-theorician
-theoricon
-theorics
-theorism
-theorist
-theorization
-theorize
-theorizer
-theorum
-theory
-theoryless
-theorymonger
-theosoph
-theosopheme
-theosophic
-theosophical
-theosophically
-theosophism
-theosophist
-theosophistic
-theosophistical
-theosophize
-theosophy
-theotechnic
-theotechnist
-theotechny
-theoteleological
-theoteleology
-theotherapy
-Theotokos
-theow
-theowdom
-theowman
-Theraean
-theralite
-therapeusis
-Therapeutae
-Therapeutic
-therapeutic
-therapeutical
-therapeutically
-therapeutics
-therapeutism
-therapeutist
-Theraphosa
-theraphose
-theraphosid
-Theraphosidae
-theraphosoid
-therapist
-therapsid
-Therapsida
-therapy
-therblig
-there
-thereabouts
-thereabove
-thereacross
-thereafter
-thereafterward
-thereagainst
-thereamong
-thereamongst
-thereanent
-thereanents
-therearound
-thereas
-thereat
-thereaway
-thereaways
-therebeside
-therebesides
-therebetween
-thereby
-thereckly
-therefor
-therefore
-therefrom
-therehence
-therein
-thereinafter
-thereinbefore
-thereinto
-therence
-thereness
-thereof
-thereoid
-thereologist
-thereology
-thereon
-thereout
-thereover
-thereright
-theres
-Theresa
-therese
-therethrough
-theretill
-thereto
-theretofore
-theretoward
-thereunder
-thereuntil
-thereunto
-thereup
-thereupon
-Thereva
-therevid
-Therevidae
-therewhile
-therewith
-therewithal
-therewithin
-Theria
-theriac
-theriaca
-theriacal
-therial
-therianthropic
-therianthropism
-theriatrics
-theridiid
-Theridiidae
-Theridion
-theriodic
-theriodont
-Theriodonta
-Theriodontia
-theriolatry
-theriomancy
-theriomaniac
-theriomimicry
-theriomorph
-theriomorphic
-theriomorphism
-theriomorphosis
-theriomorphous
-theriotheism
-theriotrophical
-theriozoic
-therm
-thermacogenesis
-thermae
-thermal
-thermalgesia
-thermality
-thermally
-thermanalgesia
-thermanesthesia
-thermantic
-thermantidote
-thermatologic
-thermatologist
-thermatology
-thermesthesia
-thermesthesiometer
-thermetograph
-thermetrograph
-thermic
-thermically
-Thermidorian
-thermion
-thermionic
-thermionically
-thermionics
-thermistor
-Thermit
-thermit
-thermite
-thermo
-thermoammeter
-thermoanalgesia
-thermoanesthesia
-thermobarograph
-thermobarometer
-thermobattery
-thermocautery
-thermochemic
-thermochemical
-thermochemically
-thermochemist
-thermochemistry
-thermochroic
-thermochrosy
-thermocline
-thermocouple
-thermocurrent
-thermodiffusion
-thermoduric
-thermodynamic
-thermodynamical
-thermodynamically
-thermodynamician
-thermodynamicist
-thermodynamics
-thermodynamist
-thermoelectric
-thermoelectrical
-thermoelectrically
-thermoelectricity
-thermoelectrometer
-thermoelectromotive
-thermoelement
-thermoesthesia
-thermoexcitory
-thermogalvanometer
-thermogen
-thermogenerator
-thermogenesis
-thermogenetic
-thermogenic
-thermogenous
-thermogeny
-thermogeographical
-thermogeography
-thermogram
-thermograph
-thermography
-thermohyperesthesia
-thermojunction
-thermokinematics
-thermolabile
-thermolability
-thermological
-thermology
-thermoluminescence
-thermoluminescent
-thermolysis
-thermolytic
-thermolyze
-thermomagnetic
-thermomagnetism
-thermometamorphic
-thermometamorphism
-thermometer
-thermometerize
-thermometric
-thermometrical
-thermometrically
-thermometrograph
-thermometry
-thermomotive
-thermomotor
-thermomultiplier
-thermonastic
-thermonasty
-thermonatrite
-thermoneurosis
-thermoneutrality
-thermonous
-thermonuclear
-thermopair
-thermopalpation
-thermopenetration
-thermoperiod
-thermoperiodic
-thermoperiodicity
-thermoperiodism
-thermophile
-thermophilic
-thermophilous
-thermophobous
-thermophone
-thermophore
-thermophosphor
-thermophosphorescence
-thermopile
-thermoplastic
-thermoplasticity
-thermoplegia
-thermopleion
-thermopolymerization
-thermopolypnea
-thermopolypneic
-Thermopsis
-thermoradiotherapy
-thermoreduction
-thermoregulation
-thermoregulator
-thermoresistance
-thermoresistant
-thermos
-thermoscope
-thermoscopic
-thermoscopical
-thermoscopically
-thermosetting
-thermosiphon
-thermostability
-thermostable
-thermostat
-thermostatic
-thermostatically
-thermostatics
-thermostimulation
-thermosynthesis
-thermosystaltic
-thermosystaltism
-thermotactic
-thermotank
-thermotaxic
-thermotaxis
-thermotelephone
-thermotensile
-thermotension
-thermotherapeutics
-thermotherapy
-thermotic
-thermotical
-thermotically
-thermotics
-thermotropic
-thermotropism
-thermotropy
-thermotype
-thermotypic
-thermotypy
-thermovoltaic
-therodont
-theroid
-therolatry
-therologic
-therological
-therologist
-therology
-Theromora
-Theromores
-theromorph
-Theromorpha
-theromorphia
-theromorphic
-theromorphism
-theromorphological
-theromorphology
-theromorphous
-Theron
-theropod
-Theropoda
-theropodous
-thersitean
-Thersites
-thersitical
-thesauri
-thesaurus
-these
-Thesean
-theses
-Theseum
-Theseus
-thesial
-thesicle
-thesis
-Thesium
-Thesmophoria
-Thesmophorian
-Thesmophoric
-thesmothetae
-thesmothete
-thesmothetes
-thesocyte
-Thespesia
-Thespesius
-Thespian
-Thessalian
-Thessalonian
-thestreen
-theta
-thetch
-thetic
-thetical
-thetically
-thetics
-thetin
-thetine
-Thetis
-theurgic
-theurgical
-theurgically
-theurgist
-theurgy
-Thevetia
-thevetin
-thew
-thewed
-thewless
-thewness
-thewy
-they
-theyll
-theyre
-thiacetic
-thiadiazole
-thialdine
-thiamide
-thiamin
-thiamine
-thianthrene
-thiasi
-thiasine
-thiasite
-thiasoi
-thiasos
-thiasote
-thiasus
-thiazine
-thiazole
-thiazoline
-thick
-thickbrained
-thicken
-thickener
-thickening
-thicket
-thicketed
-thicketful
-thickety
-thickhead
-thickheaded
-thickheadedly
-thickheadedness
-thickish
-thickleaf
-thicklips
-thickly
-thickneck
-thickness
-thicknessing
-thickset
-thickskin
-thickskull
-thickskulled
-thickwind
-thickwit
-thief
-thiefcraft
-thiefdom
-thiefland
-thiefmaker
-thiefmaking
-thiefproof
-thieftaker
-thiefwise
-Thielavia
-Thielaviopsis
-thienone
-thienyl
-Thierry
-thievable
-thieve
-thieveless
-thiever
-thievery
-thieving
-thievingly
-thievish
-thievishly
-thievishness
-thig
-thigger
-thigging
-thigh
-thighbone
-thighed
-thight
-thightness
-thigmonegative
-thigmopositive
-thigmotactic
-thigmotactically
-thigmotaxis
-thigmotropic
-thigmotropically
-thigmotropism
-Thilanottine
-thilk
-thill
-thiller
-thilly
-thimber
-thimble
-thimbleberry
-thimbled
-thimbleflower
-thimbleful
-thimblelike
-thimblemaker
-thimblemaking
-thimbleman
-thimblerig
-thimblerigger
-thimbleriggery
-thimblerigging
-thimbleweed
-thin
-thinbrained
-thine
-thing
-thingal
-thingamabob
-thinghood
-thinginess
-thingish
-thingless
-thinglet
-thinglike
-thinglikeness
-thingliness
-thingly
-thingman
-thingness
-thingstead
-thingum
-thingumajig
-thingumbob
-thingummy
-thingy
-Think
-think
-thinkable
-thinkableness
-thinkably
-thinker
-thinkful
-thinking
-thinkingly
-thinkingpart
-thinkling
-thinly
-thinner
-thinness
-thinning
-thinnish
-Thinocoridae
-Thinocorus
-thinolite
-thio
-thioacetal
-thioacetic
-thioalcohol
-thioaldehyde
-thioamide
-thioantimonate
-thioantimoniate
-thioantimonious
-thioantimonite
-thioarsenate
-thioarseniate
-thioarsenic
-thioarsenious
-thioarsenite
-Thiobacillus
-Thiobacteria
-thiobacteria
-Thiobacteriales
-thiobismuthite
-thiocarbamic
-thiocarbamide
-thiocarbamyl
-thiocarbanilide
-thiocarbimide
-thiocarbonate
-thiocarbonic
-thiocarbonyl
-thiochloride
-thiochrome
-thiocresol
-thiocyanate
-thiocyanation
-thiocyanic
-thiocyanide
-thiocyano
-thiocyanogen
-thiodiazole
-thiodiphenylamine
-thiofuran
-thiofurane
-thiofurfuran
-thiofurfurane
-thiogycolic
-thiohydrate
-thiohydrolysis
-thiohydrolyze
-thioindigo
-thioketone
-thiol
-thiolacetic
-thiolactic
-thiolic
-thionamic
-thionaphthene
-thionate
-thionation
-thioneine
-thionic
-thionine
-thionitrite
-thionium
-thionobenzoic
-thionthiolic
-thionurate
-thionyl
-thionylamine
-thiophen
-thiophene
-thiophenic
-thiophenol
-thiophosgene
-thiophosphate
-thiophosphite
-thiophosphoric
-thiophosphoryl
-thiophthene
-thiopyran
-thioresorcinol
-thiosinamine
-Thiospira
-thiostannate
-thiostannic
-thiostannite
-thiostannous
-thiosulphate
-thiosulphonic
-thiosulphuric
-Thiothrix
-thiotolene
-thiotungstate
-thiotungstic
-thiouracil
-thiourea
-thiourethan
-thiourethane
-thioxene
-thiozone
-thiozonide
-thir
-third
-thirdborough
-thirdings
-thirdling
-thirdly
-thirdness
-thirdsman
-thirl
-thirlage
-thirling
-thirst
-thirster
-thirstful
-thirstily
-thirstiness
-thirsting
-thirstingly
-thirstland
-thirstle
-thirstless
-thirstlessness
-thirstproof
-thirsty
-thirt
-thirteen
-thirteener
-thirteenfold
-thirteenth
-thirteenthly
-thirtieth
-thirty
-thirtyfold
-thirtyish
-this
-thishow
-thislike
-thisn
-thisness
-thissen
-thistle
-thistlebird
-thistled
-thistledown
-thistlelike
-thistleproof
-thistlery
-thistlish
-thistly
-thiswise
-thither
-thitherto
-thitherward
-thitsiol
-thiuram
-thivel
-thixle
-thixolabile
-thixotropic
-thixotropy
-Thlaspi
-Thlingchadinne
-Thlinget
-thlipsis
-Tho
-tho
-thob
-thocht
-thof
-thoft
-thoftfellow
-thoke
-thokish
-thole
-tholeiite
-tholepin
-tholi
-tholoi
-tholos
-tholus
-Thomaean
-Thomas
-Thomasa
-Thomasine
-thomasing
-Thomasite
-thomisid
-Thomisidae
-Thomism
-Thomist
-Thomistic
-Thomistical
-Thomite
-Thomomys
-thomsenolite
-Thomsonian
-Thomsonianism
-thomsonite
-thon
-thonder
-Thondracians
-Thondraki
-Thondrakians
-thone
-thong
-Thonga
-thonged
-thongman
-thongy
-thoo
-thooid
-thoom
-thoracalgia
-thoracaorta
-thoracectomy
-thoracentesis
-thoraces
-thoracic
-Thoracica
-thoracical
-thoracicoabdominal
-thoracicoacromial
-thoracicohumeral
-thoracicolumbar
-thoraciform
-thoracispinal
-thoracoabdominal
-thoracoacromial
-thoracobronchotomy
-thoracoceloschisis
-thoracocentesis
-thoracocyllosis
-thoracocyrtosis
-thoracodelphus
-thoracodidymus
-thoracodorsal
-thoracodynia
-thoracogastroschisis
-thoracograph
-thoracohumeral
-thoracolumbar
-thoracolysis
-thoracomelus
-thoracometer
-thoracometry
-thoracomyodynia
-thoracopagus
-thoracoplasty
-thoracoschisis
-thoracoscope
-thoracoscopy
-Thoracostei
-thoracostenosis
-thoracostomy
-Thoracostraca
-thoracostracan
-thoracostracous
-thoracotomy
-thoral
-thorascope
-thorax
-thore
-thoria
-thorianite
-thoriate
-thoric
-thoriferous
-thorina
-thorite
-thorium
-thorn
-thornback
-thornbill
-thornbush
-thorned
-thornen
-thornhead
-thornily
-thorniness
-thornless
-thornlessness
-thornlet
-thornlike
-thornproof
-thornstone
-thorntail
-thorny
-thoro
-thorocopagous
-thorogummite
-thoron
-thorough
-Thoroughbred
-thoroughbred
-thoroughbredness
-thoroughfare
-thoroughfarer
-thoroughfaresome
-thoroughfoot
-thoroughgoing
-thoroughgoingly
-thoroughgoingness
-thoroughgrowth
-thoroughly
-thoroughness
-thoroughpaced
-thoroughpin
-thoroughsped
-thoroughstem
-thoroughstitch
-thoroughstitched
-thoroughwax
-thoroughwort
-thorp
-thort
-thorter
-thortveitite
-Thos
-Those
-those
-thou
-though
-thought
-thoughted
-thoughten
-thoughtful
-thoughtfully
-thoughtfulness
-thoughtkin
-thoughtless
-thoughtlessly
-thoughtlessness
-thoughtlet
-thoughtness
-thoughtsick
-thoughty
-thousand
-thousandfold
-thousandfoldly
-thousandth
-thousandweight
-thouse
-thow
-thowel
-thowless
-thowt
-Thraces
-Thracian
-thrack
-thraep
-thrail
-thrain
-thrall
-thrallborn
-thralldom
-thram
-thrammle
-thrang
-thrangity
-thranite
-thranitic
-thrap
-thrapple
-thrash
-thrashel
-thrasher
-thrasherman
-thrashing
-thrasonic
-thrasonical
-thrasonically
-thrast
-Thraupidae
-thrave
-thraver
-thraw
-thrawcrook
-thrawn
-thrawneen
-Thrax
-thread
-threadbare
-threadbareness
-threadbarity
-threaded
-threaden
-threader
-threadfin
-threadfish
-threadflower
-threadfoot
-threadiness
-threadle
-threadless
-threadlet
-threadlike
-threadmaker
-threadmaking
-threadway
-threadweed
-threadworm
-thready
-threap
-threaper
-threat
-threaten
-threatenable
-threatener
-threatening
-threateningly
-threatful
-threatfully
-threatless
-threatproof
-three
-threefold
-threefolded
-threefoldedness
-threefoldly
-threefoldness
-threeling
-threeness
-threepence
-threepenny
-threepennyworth
-threescore
-threesome
-thremmatology
-threne
-threnetic
-threnetical
-threnode
-threnodial
-threnodian
-threnodic
-threnodical
-threnodist
-threnody
-threnos
-threonin
-threonine
-threose
-threpsology
-threptic
-thresh
-threshel
-thresher
-thresherman
-threshingtime
-threshold
-Threskiornithidae
-Threskiornithinae
-threw
-thribble
-thrice
-thricecock
-thridacium
-thrift
-thriftbox
-thriftily
-thriftiness
-thriftless
-thriftlessly
-thriftlessness
-thriftlike
-thrifty
-thrill
-thriller
-thrillful
-thrillfully
-thrilling
-thrillingly
-thrillingness
-thrillproof
-thrillsome
-thrilly
-thrimble
-thrimp
-Thrinax
-thring
-thrinter
-thrioboly
-thrip
-thripel
-Thripidae
-thripple
-thrips
-thrive
-thriveless
-thriven
-thriver
-thriving
-thrivingly
-thrivingness
-thro
-throat
-throatal
-throatband
-throated
-throatful
-throatily
-throatiness
-throating
-throatlash
-throatlatch
-throatless
-throatlet
-throatroot
-throatstrap
-throatwort
-throaty
-throb
-throbber
-throbbingly
-throbless
-throck
-throdden
-throddy
-throe
-thrombase
-thrombin
-thromboangiitis
-thromboarteritis
-thrombocyst
-thrombocyte
-thrombocytopenia
-thrombogen
-thrombogenic
-thromboid
-thrombokinase
-thrombolymphangitis
-thrombopenia
-thrombophlebitis
-thromboplastic
-thromboplastin
-thrombose
-thrombosis
-thrombostasis
-thrombotic
-thrombus
-thronal
-throne
-thronedom
-throneless
-thronelet
-thronelike
-throneward
-throng
-thronger
-throngful
-throngingly
-thronize
-thropple
-throstle
-throstlelike
-throttle
-throttler
-throttling
-throttlingly
-throu
-throuch
-throucht
-through
-throughbear
-throughbred
-throughcome
-throughgang
-throughganging
-throughgoing
-throughgrow
-throughknow
-throughout
-throughput
-throve
-throw
-throwaway
-throwback
-throwdown
-thrower
-throwing
-thrown
-throwoff
-throwout
-throwster
-throwwort
-thrum
-thrummer
-thrummers
-thrummy
-thrumwort
-thrush
-thrushel
-thrushlike
-thrushy
-thrust
-thruster
-thrustful
-thrustfulness
-thrusting
-thrustings
-thrutch
-thrutchings
-Thruthvang
-thruv
-thrymsa
-Thryonomys
-Thuan
-Thuban
-Thucydidean
-thud
-thudding
-thuddingly
-thug
-thugdom
-thuggee
-thuggeeism
-thuggery
-thuggess
-thuggish
-thuggism
-Thuidium
-Thuja
-thujene
-thujin
-thujone
-Thujopsis
-thujyl
-Thule
-thulia
-thulir
-thulite
-thulium
-thulr
-thuluth
-thumb
-thumbbird
-thumbed
-thumber
-thumbkin
-thumble
-thumbless
-thumblike
-thumbmark
-thumbnail
-thumbpiece
-thumbprint
-thumbrope
-thumbscrew
-thumbstall
-thumbstring
-thumbtack
-thumby
-thumlungur
-thump
-thumper
-thumping
-thumpingly
-Thunar
-Thunbergia
-thunbergilene
-thunder
-thunderation
-thunderball
-thunderbearer
-thunderbearing
-thunderbird
-thunderblast
-thunderbolt
-thunderburst
-thunderclap
-thundercloud
-thundercrack
-thunderer
-thunderfish
-thunderflower
-thunderful
-thunderhead
-thunderheaded
-thundering
-thunderingly
-thunderless
-thunderlike
-thunderous
-thunderously
-thunderousness
-thunderpeal
-thunderplump
-thunderproof
-thundershower
-thundersmite
-thundersquall
-thunderstick
-thunderstone
-thunderstorm
-thunderstrike
-thunderstroke
-thunderstruck
-thunderwood
-thunderworm
-thunderwort
-thundery
-thundrous
-thundrously
-thung
-thunge
-Thunnidae
-Thunnus
-Thunor
-thuoc
-Thurberia
-thurible
-thuribuler
-thuribulum
-thurifer
-thuriferous
-thurificate
-thurificati
-thurification
-thurify
-Thuringian
-thuringite
-Thurio
-thurl
-thurm
-thurmus
-Thurnia
-Thurniaceae
-thurrock
-Thursday
-thurse
-thurt
-thus
-thusgate
-Thushi
-thusly
-thusness
-thuswise
-thutter
-Thuyopsis
-thwack
-thwacker
-thwacking
-thwackingly
-thwackstave
-thwaite
-thwart
-thwartedly
-thwarteous
-thwarter
-thwarting
-thwartingly
-thwartly
-thwartman
-thwartness
-thwartover
-thwartsaw
-thwartship
-thwartships
-thwartways
-thwartwise
-thwite
-thwittle
-thy
-Thyestean
-Thyestes
-thyine
-thylacine
-thylacitis
-Thylacoleo
-Thylacynus
-thymacetin
-Thymallidae
-Thymallus
-thymate
-thyme
-thymectomize
-thymectomy
-thymegol
-Thymelaea
-Thymelaeaceae
-thymelaeaceous
-Thymelaeales
-thymelcosis
-thymele
-thymelic
-thymelical
-thymelici
-thymene
-thymetic
-thymic
-thymicolymphatic
-thymine
-thymiosis
-thymitis
-thymocyte
-thymogenic
-thymol
-thymolate
-thymolize
-thymolphthalein
-thymolsulphonephthalein
-thymoma
-thymonucleic
-thymopathy
-thymoprivic
-thymoprivous
-thymopsyche
-thymoquinone
-thymotactic
-thymotic
-Thymus
-thymus
-thymy
-thymyl
-thymylic
-thynnid
-Thynnidae
-Thyraden
-thyratron
-thyreoadenitis
-thyreoantitoxin
-thyreoarytenoid
-thyreoarytenoideus
-thyreocervical
-thyreocolloid
-Thyreocoridae
-thyreoepiglottic
-thyreogenic
-thyreogenous
-thyreoglobulin
-thyreoglossal
-thyreohyal
-thyreohyoid
-thyreoid
-thyreoidal
-thyreoideal
-thyreoidean
-thyreoidectomy
-thyreoiditis
-thyreoitis
-thyreolingual
-thyreoprotein
-thyreosis
-thyreotomy
-thyreotoxicosis
-thyreotropic
-thyridial
-Thyrididae
-thyridium
-Thyris
-thyrisiferous
-thyroadenitis
-thyroantitoxin
-thyroarytenoid
-thyroarytenoideus
-thyrocardiac
-thyrocele
-thyrocervical
-thyrocolloid
-thyrocricoid
-thyroepiglottic
-thyroepiglottidean
-thyrogenic
-thyroglobulin
-thyroglossal
-thyrohyal
-thyrohyoid
-thyrohyoidean
-thyroid
-thyroidal
-thyroidea
-thyroideal
-thyroidean
-thyroidectomize
-thyroidectomy
-thyroidism
-thyroiditis
-thyroidization
-thyroidless
-thyroidotomy
-thyroiodin
-thyrolingual
-thyronine
-thyroparathyroidectomize
-thyroparathyroidectomy
-thyroprival
-thyroprivia
-thyroprivic
-thyroprivous
-thyroprotein
-Thyrostraca
-thyrostracan
-thyrotherapy
-thyrotomy
-thyrotoxic
-thyrotoxicosis
-thyrotropic
-thyroxine
-thyrse
-thyrsiflorous
-thyrsiform
-thyrsoid
-thyrsoidal
-thyrsus
-Thysanocarpus
-thysanopter
-Thysanoptera
-thysanopteran
-thysanopteron
-thysanopterous
-Thysanoura
-thysanouran
-thysanourous
-Thysanura
-thysanuran
-thysanurian
-thysanuriform
-thysanurous
-thysel
-thyself
-thysen
-Ti
-ti
-Tiahuanacan
-Tiam
-tiang
-tiao
-tiar
-tiara
-tiaralike
-tiarella
-Tiatinagua
-tib
-Tibbie
-Tibbu
-tibby
-Tiberian
-Tiberine
-Tiberius
-tibet
-Tibetan
-tibey
-tibia
-tibiad
-tibiae
-tibial
-tibiale
-tibicinist
-tibiocalcanean
-tibiofemoral
-tibiofibula
-tibiofibular
-tibiometatarsal
-tibionavicular
-tibiopopliteal
-tibioscaphoid
-tibiotarsal
-tibiotarsus
-Tibouchina
-tibourbou
-tiburon
-Tiburtine
-tic
-tical
-ticca
-tice
-ticement
-ticer
-Tichodroma
-tichodrome
-tichorrhine
-tick
-tickbean
-tickbird
-tickeater
-ticked
-ticken
-ticker
-ticket
-ticketer
-ticketing
-ticketless
-ticketmonger
-tickey
-tickicide
-tickie
-ticking
-tickle
-tickleback
-ticklebrain
-tickled
-ticklely
-ticklenburg
-tickleness
-tickleproof
-tickler
-ticklesome
-tickless
-tickleweed
-tickling
-ticklingly
-ticklish
-ticklishly
-ticklishness
-tickly
-tickney
-tickproof
-tickseed
-tickseeded
-ticktack
-ticktacker
-ticktacktoe
-ticktick
-ticktock
-tickweed
-ticky
-ticul
-Ticuna
-Ticunan
-tid
-tidal
-tidally
-tidbit
-tiddle
-tiddledywinks
-tiddler
-tiddley
-tiddling
-tiddlywink
-tiddlywinking
-tiddy
-tide
-tided
-tideful
-tidehead
-tideland
-tideless
-tidelessness
-tidelike
-tidely
-tidemaker
-tidemaking
-tidemark
-tiderace
-tidesman
-tidesurveyor
-Tideswell
-tidewaiter
-tidewaitership
-tideward
-tidewater
-tideway
-tidiable
-tidily
-tidiness
-tiding
-tidingless
-tidings
-tidley
-tidological
-tidology
-tidy
-tidyism
-tidytips
-tie
-tieback
-tied
-Tiefenthal
-tiemaker
-tiemaking
-tiemannite
-tien
-tiepin
-tier
-tierce
-tierced
-tierceron
-tiered
-tierer
-tierlike
-tiersman
-tietick
-tiewig
-tiewigged
-tiff
-tiffany
-tiffanyite
-tiffie
-tiffin
-tiffish
-tiffle
-tiffy
-tifinagh
-tift
-tifter
-tig
-tige
-tigella
-tigellate
-tigelle
-tigellum
-tigellus
-tiger
-tigerbird
-tigereye
-tigerflower
-tigerfoot
-tigerhearted
-tigerhood
-tigerish
-tigerishly
-tigerishness
-tigerism
-tigerkin
-tigerlike
-tigerling
-tigerly
-tigernut
-tigerproof
-tigerwood
-tigery
-Tigger
-tigger
-tight
-tighten
-tightener
-tightfisted
-tightish
-tightly
-tightness
-tightrope
-tights
-tightwad
-tightwire
-tiglaldehyde
-tiglic
-tiglinic
-tignum
-Tigrai
-Tigre
-Tigrean
-tigress
-tigresslike
-Tigridia
-Tigrina
-tigrine
-Tigris
-tigroid
-tigrolysis
-tigrolytic
-tigtag
-Tigua
-Tigurine
-Tiki
-tikitiki
-tikka
-tikker
-tiklin
-tikolosh
-tikor
-tikur
-til
-tilaite
-tilaka
-tilasite
-tilbury
-Tilda
-tilde
-tile
-tiled
-tilefish
-tilelike
-tilemaker
-tilemaking
-tiler
-tileroot
-tilery
-tileseed
-tilestone
-tileways
-tilework
-tileworks
-tilewright
-tileyard
-Tilia
-Tiliaceae
-tiliaceous
-tilikum
-tiling
-till
-tillable
-Tillaea
-Tillaeastrum
-tillage
-Tillamook
-Tillandsia
-tiller
-tillering
-tillerless
-tillerman
-Tilletia
-Tilletiaceae
-tilletiaceous
-tilley
-tillite
-tillodont
-Tillodontia
-Tillodontidae
-tillot
-tillotter
-tilly
-tilmus
-tilpah
-Tilsit
-tilt
-tiltable
-tiltboard
-tilter
-tilth
-tilting
-tiltlike
-tiltmaker
-tiltmaking
-tiltup
-tilty
-tiltyard
-tilyer
-Tim
-timable
-Timaeus
-Timalia
-Timaliidae
-Timaliinae
-timaliine
-timaline
-Timani
-timar
-timarau
-timawa
-timazite
-timbal
-timbale
-timbang
-timbe
-timber
-timbered
-timberer
-timberhead
-timbering
-timberjack
-timberland
-timberless
-timberlike
-timberling
-timberman
-timbermonger
-timbern
-timbersome
-timbertuned
-timberwood
-timberwork
-timberwright
-timbery
-timberyard
-Timbira
-timbo
-timbre
-timbrel
-timbreled
-timbreler
-timbrologist
-timbrology
-timbromania
-timbromaniac
-timbromanist
-timbrophilic
-timbrophilism
-timbrophilist
-timbrophily
-time
-timeable
-timecard
-timed
-timeful
-timefully
-timefulness
-timekeep
-timekeeper
-timekeepership
-timeless
-timelessly
-timelessness
-Timelia
-Timeliidae
-timeliine
-timelily
-timeliness
-timeling
-timely
-timenoguy
-timeous
-timeously
-timepiece
-timepleaser
-timeproof
-timer
-times
-timesaver
-timesaving
-timeserver
-timeserving
-timeservingness
-timetable
-timetaker
-timetaking
-timeward
-timework
-timeworker
-timeworn
-Timias
-timid
-timidity
-timidly
-timidness
-timing
-timish
-timist
-Timne
-Timo
-timocracy
-timocratic
-timocratical
-Timon
-timon
-timoneer
-Timonian
-Timonism
-Timonist
-Timonize
-timor
-Timorese
-timorous
-timorously
-timorousness
-Timote
-Timotean
-Timothean
-Timothy
-timothy
-timpani
-timpanist
-timpano
-Timucua
-Timucuan
-Timuquan
-Timuquanan
-tin
-Tina
-Tinamidae
-tinamine
-tinamou
-tinampipi
-tincal
-tinchel
-tinchill
-tinclad
-tinct
-tinction
-tinctorial
-tinctorially
-tinctorious
-tinctumutation
-tincture
-tind
-tindal
-tindalo
-tinder
-tinderbox
-tindered
-tinderish
-tinderlike
-tinderous
-tindery
-tine
-tinea
-tineal
-tinean
-tined
-tinegrass
-tineid
-Tineidae
-Tineina
-tineine
-tineman
-tineoid
-Tineoidea
-tinetare
-tinety
-tineweed
-tinful
-Ting
-ting
-tinge
-tinged
-tinger
-Tinggian
-tingi
-tingibility
-tingible
-tingid
-Tingidae
-Tingis
-tingitid
-Tingitidae
-tinglass
-tingle
-tingler
-tingletangle
-tingling
-tinglingly
-tinglish
-tingly
-tingtang
-tinguaite
-tinguaitic
-Tinguian
-tinguy
-tinhorn
-tinhouse
-tinily
-tininess
-tining
-tink
-tinker
-tinkerbird
-tinkerdom
-tinkerer
-tinkerlike
-tinkerly
-tinkershire
-tinkershue
-tinkerwise
-tinkle
-tinkler
-tinklerman
-tinkling
-tinklingly
-tinkly
-tinlet
-tinlike
-tinman
-Tinne
-tinned
-tinner
-tinnery
-tinnet
-Tinni
-tinnified
-tinnily
-tinniness
-tinning
-tinnitus
-tinnock
-tinny
-Tino
-Tinoceras
-tinosa
-tinsel
-tinsellike
-tinselly
-tinselmaker
-tinselmaking
-tinselry
-tinselweaver
-tinselwork
-tinsman
-tinsmith
-tinsmithing
-tinsmithy
-tinstone
-tinstuff
-tint
-tinta
-tintage
-tintamarre
-tintarron
-tinted
-tinter
-tintie
-tintiness
-tinting
-tintingly
-tintinnabula
-tintinnabulant
-tintinnabular
-tintinnabulary
-tintinnabulate
-tintinnabulation
-tintinnabulatory
-tintinnabulism
-tintinnabulist
-tintinnabulous
-tintinnabulum
-tintist
-tintless
-tintometer
-tintometric
-tintometry
-tinty
-tintype
-tintyper
-tinwald
-tinware
-tinwoman
-tinwork
-tinworker
-tinworking
-tiny
-tinzenite
-Tionontates
-Tionontati
-Tiou
-tip
-tipburn
-tipcart
-tipcat
-tipe
-tipful
-tiphead
-Tiphia
-Tiphiidae
-tipiti
-tiple
-tipless
-tiplet
-tipman
-tipmost
-tiponi
-tippable
-tipped
-tippee
-tipper
-tippet
-tipping
-tipple
-tippleman
-tippler
-tipply
-tipproof
-tippy
-tipsification
-tipsifier
-tipsify
-tipsily
-tipsiness
-tipstaff
-tipster
-tipstock
-tipsy
-tiptail
-tipteerer
-tiptilt
-tiptoe
-tiptoeing
-tiptoeingly
-tiptop
-tiptopness
-tiptopper
-tiptoppish
-tiptoppishness
-tiptopsome
-Tipula
-Tipularia
-tipulid
-Tipulidae
-tipuloid
-Tipuloidea
-tipup
-Tipura
-tirade
-tiralee
-tire
-tired
-tiredly
-tiredness
-tiredom
-tirehouse
-tireless
-tirelessly
-tirelessness
-tiremaid
-tiremaker
-tiremaking
-tireman
-tirer
-tireroom
-tiresmith
-tiresome
-tiresomely
-tiresomeness
-tiresomeweed
-tirewoman
-Tirhutia
-tiriba
-tiring
-tiringly
-tirl
-tirma
-tirocinium
-Tirolean
-Tirolese
-Tironian
-tirr
-tirralirra
-tirret
-Tirribi
-tirrivee
-tirrlie
-tirrwirr
-tirthankara
-Tirurai
-tirve
-tirwit
-tisane
-tisar
-Tishiya
-Tishri
-Tisiphone
-tissual
-tissue
-tissued
-tissueless
-tissuelike
-tissuey
-tisswood
-tiswin
-tit
-Titan
-titanate
-titanaugite
-Titanesque
-Titaness
-titania
-Titanian
-Titanic
-titanic
-Titanical
-Titanically
-Titanichthyidae
-Titanichthys
-titaniferous
-titanifluoride
-Titanism
-titanite
-titanitic
-titanium
-Titanlike
-titano
-titanocolumbate
-titanocyanide
-titanofluoride
-Titanolater
-Titanolatry
-Titanomachia
-Titanomachy
-titanomagnetite
-titanoniobate
-titanosaur
-Titanosaurus
-titanosilicate
-titanothere
-Titanotheridae
-Titanotherium
-titanous
-titanyl
-titar
-titbit
-titbitty
-tite
-titer
-titeration
-titfish
-tithable
-tithal
-tithe
-tithebook
-titheless
-tithemonger
-tithepayer
-tither
-titheright
-tithing
-tithingman
-tithingpenny
-tithonic
-tithonicity
-tithonographic
-tithonometer
-Tithymalopsis
-Tithymalus
-titi
-Titian
-titian
-Titianesque
-Titianic
-titien
-Tities
-titilate
-titillability
-titillant
-titillater
-titillating
-titillatingly
-titillation
-titillative
-titillator
-titillatory
-titivate
-titivation
-titivator
-titlark
-title
-titleboard
-titled
-titledom
-titleholder
-titleless
-titleproof
-titler
-titleship
-titlike
-titling
-titlist
-titmal
-titman
-Titmarsh
-Titmarshian
-titmouse
-Titoism
-Titoist
-titoki
-titrable
-titratable
-titrate
-titration
-titre
-titrimetric
-titrimetry
-titter
-titterel
-titterer
-tittering
-titteringly
-tittery
-tittie
-tittle
-tittlebat
-tittler
-tittup
-tittupy
-titty
-tittymouse
-titubancy
-titubant
-titubantly
-titubate
-titubation
-titular
-titularity
-titularly
-titulary
-titulation
-titule
-titulus
-Titurel
-Titus
-tiver
-Tivoli
-tivoli
-tivy
-Tiwaz
-tiza
-tizeur
-tizzy
-tjanting
-tji
-tjosite
-tlaco
-Tlakluit
-Tlapallan
-Tlascalan
-Tlingit
-tmema
-Tmesipteris
-tmesis
-to
-toa
-toad
-toadback
-toadeat
-toadeater
-toader
-toadery
-toadess
-toadfish
-toadflax
-toadflower
-toadhead
-toadier
-toadish
-toadless
-toadlet
-toadlike
-toadlikeness
-toadling
-toadpipe
-toadroot
-toadship
-toadstone
-toadstool
-toadstoollike
-toadwise
-toady
-toadyish
-toadyism
-toadyship
-Toag
-toast
-toastable
-toastee
-toaster
-toastiness
-toastmaster
-toastmastery
-toastmistress
-toasty
-toat
-toatoa
-Toba
-tobacco
-tobaccofied
-tobaccoism
-tobaccoite
-tobaccoless
-tobaccolike
-tobaccoman
-tobacconalian
-tobacconist
-tobacconistical
-tobacconize
-tobaccophil
-tobaccoroot
-tobaccoweed
-tobaccowood
-tobaccoy
-tobe
-Tobiah
-Tobias
-Tobikhar
-tobine
-tobira
-toboggan
-tobogganeer
-tobogganer
-tobogganist
-Toby
-toby
-tobyman
-tocalote
-toccata
-Tocharese
-Tocharian
-Tocharic
-Tocharish
-tocher
-tocherless
-tock
-toco
-Tocobaga
-tocodynamometer
-tocogenetic
-tocogony
-tocokinin
-tocological
-tocologist
-tocology
-tocome
-tocometer
-tocopherol
-tocororo
-tocsin
-tocusso
-Tod
-tod
-Toda
-today
-todayish
-Todd
-todder
-toddick
-toddite
-toddle
-toddlekins
-toddler
-toddy
-toddyize
-toddyman
-tode
-Todea
-Todidae
-Todus
-tody
-toe
-toeboard
-toecap
-toecapped
-toed
-toeless
-toelike
-toellite
-toenail
-toeplate
-Toerless
-toernebohmite
-toetoe
-toff
-toffee
-toffeeman
-toffing
-toffish
-toffy
-toffyman
-Tofieldia
-Toft
-toft
-tofter
-toftman
-toftstead
-tofu
-tog
-toga
-togaed
-togalike
-togata
-togate
-togated
-togawise
-together
-togetherhood
-togetheriness
-togetherness
-toggel
-toggery
-toggle
-toggler
-togless
-togs
-togt
-togue
-toher
-toheroa
-toho
-Tohome
-tohubohu
-tohunga
-toi
-toil
-toiled
-toiler
-toilet
-toileted
-toiletry
-toilette
-toiletted
-toiletware
-toilful
-toilfully
-toilinet
-toiling
-toilingly
-toilless
-toillessness
-toilsome
-toilsomely
-toilsomeness
-toilworn
-toise
-toit
-toitish
-toity
-Tokay
-tokay
-toke
-Tokelau
-token
-tokened
-tokenless
-toko
-tokology
-tokonoma
-tokopat
-tol
-tolamine
-tolan
-tolane
-tolbooth
-told
-toldo
-tole
-Toledan
-Toledo
-Toledoan
-tolerability
-tolerable
-tolerableness
-tolerablish
-tolerably
-tolerance
-tolerancy
-Tolerant
-tolerant
-tolerantism
-tolerantly
-tolerate
-toleration
-tolerationism
-tolerationist
-tolerative
-tolerator
-tolerism
-Toletan
-tolfraedic
-tolguacha
-tolidine
-tolite
-toll
-tollable
-tollage
-tollbooth
-Tollefsen
-toller
-tollery
-tollgate
-tollgatherer
-tollhouse
-tolliker
-tolling
-tollkeeper
-tollman
-tollmaster
-tollpenny
-tolltaker
-tolly
-Tolowa
-tolpatch
-tolpatchery
-tolsester
-tolsey
-Tolstoyan
-Tolstoyism
-Tolstoyist
-tolt
-Toltec
-Toltecan
-tolter
-tolu
-tolualdehyde
-toluate
-toluene
-toluic
-toluide
-toluidide
-toluidine
-toluidino
-toluido
-Toluifera
-tolunitrile
-toluol
-toluquinaldine
-tolusafranine
-toluyl
-toluylene
-toluylenediamine
-toluylic
-tolyl
-tolylene
-tolylenediamine
-Tolypeutes
-tolypeutine
-Tom
-Toma
-tomahawk
-tomahawker
-tomalley
-toman
-Tomas
-tomatillo
-tomato
-tomb
-tombac
-tombal
-tombe
-tombic
-tombless
-tomblet
-tomblike
-tombola
-tombolo
-tomboy
-tomboyful
-tomboyish
-tomboyishly
-tomboyishness
-tomboyism
-tombstone
-tomcat
-tomcod
-tome
-tomeful
-tomelet
-toment
-tomentose
-tomentous
-tomentulose
-tomentum
-tomfool
-tomfoolery
-tomfoolish
-tomfoolishness
-tomial
-tomin
-tomish
-Tomistoma
-tomium
-tomjohn
-Tomkin
-tomkin
-Tommer
-Tomming
-Tommy
-tommy
-tommybag
-tommycod
-tommyrot
-tomnoddy
-tomnoup
-tomogram
-tomographic
-tomography
-Tomopteridae
-Tomopteris
-tomorn
-tomorrow
-tomorrower
-tomorrowing
-tomorrowness
-tomosis
-Tompion
-tompiper
-tompon
-tomtate
-tomtit
-Tomtitmouse
-ton
-tonal
-tonalamatl
-tonalist
-tonalite
-tonalitive
-tonality
-tonally
-tonant
-tonation
-tondino
-tone
-toned
-toneless
-tonelessly
-tonelessness
-toneme
-toneproof
-toner
-tonetic
-tonetically
-tonetician
-tonetics
-tong
-Tonga
-tonga
-Tongan
-Tongas
-tonger
-tongkang
-tongman
-Tongrian
-tongs
-tongsman
-tongue
-tonguecraft
-tongued
-tonguedoughty
-tonguefence
-tonguefencer
-tongueflower
-tongueful
-tongueless
-tonguelet
-tonguelike
-tongueman
-tonguemanship
-tongueplay
-tongueproof
-tonguer
-tongueshot
-tonguesman
-tonguesore
-tonguester
-tonguetip
-tonguey
-tonguiness
-tonguing
-tonic
-tonically
-tonicity
-tonicize
-tonicobalsamic
-tonicoclonic
-tonicostimulant
-tonify
-tonight
-Tonikan
-tonish
-tonishly
-tonishness
-tonite
-tonitrocirrus
-tonitruant
-tonitruone
-tonitruous
-tonjon
-tonk
-Tonkawa
-Tonkawan
-tonkin
-Tonkinese
-tonlet
-Tonna
-tonnage
-tonneau
-tonneaued
-tonner
-tonnish
-tonnishly
-tonnishness
-tonoclonic
-tonogram
-tonograph
-tonological
-tonology
-tonometer
-tonometric
-tonometry
-tonophant
-tonoplast
-tonoscope
-tonotactic
-tonotaxis
-tonous
-tonsbergite
-tonsil
-tonsilectomy
-tonsilitic
-tonsillar
-tonsillary
-tonsillectome
-tonsillectomic
-tonsillectomize
-tonsillectomy
-tonsillith
-tonsillitic
-tonsillitis
-tonsillolith
-tonsillotome
-tonsillotomy
-tonsilomycosis
-tonsor
-tonsorial
-tonsurate
-tonsure
-tonsured
-tontine
-tontiner
-Tonto
-tonus
-Tony
-tony
-tonyhoop
-too
-toodle
-toodleloodle
-took
-tooken
-tool
-toolbox
-toolbuilder
-toolbuilding
-tooler
-toolhead
-toolholder
-toolholding
-tooling
-toolless
-toolmaker
-toolmaking
-toolman
-toolmark
-toolmarking
-toolplate
-toolroom
-toolsetter
-toolslide
-toolsmith
-toolstock
-toolstone
-toom
-toomly
-toon
-Toona
-toonwood
-toop
-toorie
-toorock
-tooroo
-toosh
-toot
-tooter
-tooth
-toothache
-toothaching
-toothachy
-toothbill
-toothbrush
-toothbrushy
-toothchiseled
-toothcomb
-toothcup
-toothdrawer
-toothdrawing
-toothed
-toother
-toothflower
-toothful
-toothill
-toothing
-toothless
-toothlessly
-toothlessness
-toothlet
-toothleted
-toothlike
-toothpick
-toothplate
-toothproof
-toothsome
-toothsomely
-toothsomeness
-toothstick
-toothwash
-toothwork
-toothwort
-toothy
-tootle
-tootler
-tootlish
-tootsy
-toozle
-toozoo
-top
-topalgia
-toparch
-toparchia
-toparchical
-toparchy
-topass
-Topatopa
-topaz
-topazfels
-topazine
-topazite
-topazolite
-topazy
-topcap
-topcast
-topchrome
-topcoat
-topcoating
-tope
-topectomy
-topee
-topeewallah
-topeng
-topepo
-toper
-toperdom
-topesthesia
-topflight
-topfull
-topgallant
-toph
-tophaceous
-tophaike
-Tophet
-tophetic
-tophetize
-tophus
-tophyperidrosis
-topi
-topia
-topiarian
-topiarist
-topiarius
-topiary
-topic
-topical
-topicality
-topically
-topinambou
-Topinish
-topknot
-topknotted
-topless
-toplighted
-toplike
-topline
-toploftical
-toploftily
-toploftiness
-toplofty
-topmaker
-topmaking
-topman
-topmast
-topmost
-topmostly
-topnotch
-topnotcher
-topo
-topoalgia
-topochemical
-topognosia
-topognosis
-topograph
-topographer
-topographic
-topographical
-topographically
-topographics
-topographist
-topographize
-topographometric
-topography
-topolatry
-topologic
-topological
-topologist
-topology
-toponarcosis
-toponym
-toponymal
-toponymic
-toponymical
-toponymics
-toponymist
-toponymy
-topophobia
-topophone
-topotactic
-topotaxis
-topotype
-topotypic
-topotypical
-topped
-topper
-toppiece
-topping
-toppingly
-toppingness
-topple
-toppler
-topply
-toppy
-toprail
-toprope
-tops
-topsail
-topsailite
-topside
-topsl
-topsman
-topsoil
-topstone
-topswarm
-Topsy
-topsyturn
-toptail
-topwise
-toque
-Tor
-tor
-tora
-torah
-Toraja
-toral
-toran
-torbanite
-torbanitic
-torbernite
-torc
-torcel
-torch
-torchbearer
-torchbearing
-torcher
-torchless
-torchlight
-torchlighted
-torchlike
-torchman
-torchon
-torchweed
-torchwood
-torchwort
-torcular
-torculus
-tordrillite
-tore
-toreador
-tored
-Torenia
-torero
-toreumatography
-toreumatology
-toreutic
-toreutics
-torfaceous
-torfel
-torgoch
-Torgot
-toric
-Toriest
-Torified
-torii
-Torilis
-Torinese
-Toriness
-torma
-tormen
-torment
-tormenta
-tormentable
-tormentation
-tormentative
-tormented
-tormentedly
-tormentful
-tormentil
-tormentilla
-tormenting
-tormentingly
-tormentingness
-tormentive
-tormentor
-tormentous
-tormentress
-tormentry
-tormentum
-tormina
-torminal
-torminous
-tormodont
-torn
-tornachile
-tornade
-tornadic
-tornado
-tornadoesque
-tornadoproof
-tornal
-tornaria
-tornarian
-tornese
-torney
-tornillo
-Tornit
-tornote
-tornus
-toro
-toroid
-toroidal
-torolillo
-Toromona
-Torontonian
-tororokombu
-Torosaurus
-torose
-torosity
-torotoro
-torous
-torpedineer
-Torpedinidae
-torpedinous
-torpedo
-torpedoer
-torpedoist
-torpedolike
-torpedoplane
-torpedoproof
-torpent
-torpescence
-torpescent
-torpid
-torpidity
-torpidly
-torpidness
-torpify
-torpitude
-torpor
-torporific
-torporize
-torquate
-torquated
-torque
-torqued
-torques
-torrefaction
-torrefication
-torrefy
-torrent
-torrentful
-torrentfulness
-torrential
-torrentiality
-torrentially
-torrentine
-torrentless
-torrentlike
-torrentuous
-torrentwise
-Torreya
-Torricellian
-torrid
-torridity
-torridly
-torridness
-Torridonian
-Torrubia
-torsade
-torse
-torsel
-torsibility
-torsigraph
-torsile
-torsimeter
-torsiogram
-torsiograph
-torsiometer
-torsion
-torsional
-torsionally
-torsioning
-torsionless
-torsive
-torsk
-torso
-torsoclusion
-torsometer
-torsoocclusion
-Torsten
-tort
-torta
-torteau
-torticollar
-torticollis
-torticone
-tortile
-tortility
-tortilla
-tortille
-tortious
-tortiously
-tortive
-tortoise
-tortoiselike
-Tortonian
-tortrices
-tortricid
-Tortricidae
-Tortricina
-tortricine
-tortricoid
-Tortricoidea
-Tortrix
-tortula
-Tortulaceae
-tortulaceous
-tortulous
-tortuose
-tortuosity
-tortuous
-tortuously
-tortuousness
-torturable
-torturableness
-torture
-tortured
-torturedly
-tortureproof
-torturer
-torturesome
-torturing
-torturingly
-torturous
-torturously
-toru
-torula
-torulaceous
-torulaform
-toruliform
-torulin
-toruloid
-torulose
-torulosis
-torulous
-torulus
-torus
-torve
-torvid
-torvity
-torvous
-Tory
-tory
-Torydom
-Toryess
-Toryfication
-Toryfy
-toryhillite
-Toryish
-Toryism
-Toryistic
-Toryize
-Toryship
-toryweed
-tosaphist
-tosaphoth
-toscanite
-Tosephta
-Tosephtas
-tosh
-toshakhana
-tosher
-toshery
-toshly
-toshnail
-toshy
-tosily
-Tosk
-Toskish
-toss
-tosser
-tossicated
-tossily
-tossing
-tossingly
-tossment
-tosspot
-tossup
-tossy
-tost
-tosticate
-tostication
-toston
-tosy
-tot
-total
-totalitarian
-totalitarianism
-totality
-totalization
-totalizator
-totalize
-totalizer
-totally
-totalness
-totanine
-Totanus
-totaquin
-totaquina
-totaquine
-totara
-totchka
-tote
-toteload
-totem
-totemic
-totemically
-totemism
-totemist
-totemistic
-totemite
-totemization
-totemy
-toter
-tother
-totient
-Totipalmatae
-totipalmate
-totipalmation
-totipotence
-totipotency
-totipotent
-totipotential
-totipotentiality
-totitive
-toto
-Totonac
-Totonacan
-Totonaco
-totora
-Totoro
-totquot
-totter
-totterer
-tottergrass
-tottering
-totteringly
-totterish
-tottery
-Tottie
-totting
-tottle
-tottlish
-totty
-tottyhead
-totuava
-totum
-toty
-totyman
-tou
-toucan
-toucanet
-Toucanid
-touch
-touchable
-touchableness
-touchback
-touchbell
-touchbox
-touchdown
-touched
-touchedness
-toucher
-touchhole
-touchily
-touchiness
-touching
-touchingly
-touchingness
-touchless
-touchline
-touchous
-touchpan
-touchpiece
-touchstone
-touchwood
-touchy
-Toufic
-toug
-tough
-toughen
-toughener
-toughhead
-toughhearted
-toughish
-toughly
-toughness
-tought
-tould
-toumnah
-Tounatea
-toup
-toupee
-toupeed
-toupet
-tour
-touraco
-tourbillion
-tourer
-tourette
-touring
-tourism
-tourist
-touristdom
-touristic
-touristproof
-touristry
-touristship
-touristy
-tourize
-tourmaline
-tourmalinic
-tourmaliniferous
-tourmalinization
-tourmalinize
-tourmalite
-tourn
-tournament
-tournamental
-tournant
-tournasin
-tournay
-tournee
-Tournefortia
-Tournefortian
-tourney
-tourneyer
-tourniquet
-tourte
-tousche
-touse
-touser
-tousle
-tously
-tousy
-tout
-touter
-Tovah
-tovar
-Tovaria
-Tovariaceae
-tovariaceous
-tovarish
-tow
-towable
-towage
-towai
-towan
-toward
-towardliness
-towardly
-towardness
-towards
-towboat
-towcock
-towd
-towel
-towelette
-toweling
-towelry
-tower
-towered
-towering
-toweringly
-towerless
-towerlet
-towerlike
-towerman
-towerproof
-towerwise
-towerwork
-towerwort
-towery
-towght
-towhead
-towheaded
-towhee
-towing
-towkay
-towlike
-towline
-towmast
-town
-towned
-townee
-towner
-townet
-townfaring
-townfolk
-townful
-towngate
-townhood
-townify
-towniness
-townish
-townishly
-townishness
-townist
-townland
-townless
-townlet
-townlike
-townling
-townly
-townman
-townsboy
-townscape
-Townsendia
-Townsendite
-townsfellow
-townsfolk
-township
-townside
-townsite
-townsman
-townspeople
-townswoman
-townward
-townwards
-townwear
-towny
-towpath
-towrope
-towser
-towy
-tox
-toxa
-toxalbumic
-toxalbumin
-toxalbumose
-toxamin
-toxanemia
-toxaphene
-toxcatl
-toxemia
-toxemic
-toxic
-toxicaemia
-toxical
-toxically
-toxicant
-toxicarol
-toxication
-toxicemia
-toxicity
-toxicodendrol
-Toxicodendron
-toxicoderma
-toxicodermatitis
-toxicodermatosis
-toxicodermia
-toxicodermitis
-toxicogenic
-toxicognath
-toxicohaemia
-toxicohemia
-toxicoid
-toxicologic
-toxicological
-toxicologically
-toxicologist
-toxicology
-toxicomania
-toxicopathic
-toxicopathy
-toxicophagous
-toxicophagy
-toxicophidia
-toxicophobia
-toxicosis
-toxicotraumatic
-toxicum
-toxidermic
-toxidermitis
-toxifer
-Toxifera
-toxiferous
-toxigenic
-toxihaemia
-toxihemia
-toxiinfection
-toxiinfectious
-toxin
-toxinemia
-toxinfection
-toxinfectious
-toxinosis
-toxiphobia
-toxiphobiac
-toxiphoric
-toxitabellae
-toxity
-Toxodon
-toxodont
-Toxodontia
-toxogenesis
-Toxoglossa
-toxoglossate
-toxoid
-toxology
-toxolysis
-toxon
-toxone
-toxonosis
-toxophil
-toxophile
-toxophilism
-toxophilite
-toxophilitic
-toxophilitism
-toxophilous
-toxophily
-toxophoric
-toxophorous
-toxoplasmosis
-toxosis
-toxosozin
-Toxostoma
-toxotae
-Toxotes
-Toxotidae
-Toxylon
-toy
-toydom
-toyer
-toyful
-toyfulness
-toyhouse
-toying
-toyingly
-toyish
-toyishly
-toyishness
-toyland
-toyless
-toylike
-toymaker
-toymaking
-toyman
-toyon
-toyshop
-toysome
-toytown
-toywoman
-toywort
-toze
-tozee
-tozer
-tra
-trabacolo
-trabal
-trabant
-trabascolo
-trabea
-trabeae
-trabeatae
-trabeated
-trabeation
-trabecula
-trabecular
-trabecularism
-trabeculate
-trabeculated
-trabeculation
-trabecule
-trabuch
-trabucho
-Tracaulon
-trace
-traceability
-traceable
-traceableness
-traceably
-traceless
-tracelessly
-tracer
-traceried
-tracery
-Tracey
-trachea
-tracheaectasy
-tracheal
-trachealgia
-trachealis
-trachean
-Trachearia
-trachearian
-tracheary
-Tracheata
-tracheate
-tracheation
-tracheid
-tracheidal
-tracheitis
-trachelagra
-trachelate
-trachelectomopexia
-trachelectomy
-trachelismus
-trachelitis
-trachelium
-tracheloacromialis
-trachelobregmatic
-tracheloclavicular
-trachelocyllosis
-trachelodynia
-trachelology
-trachelomastoid
-trachelopexia
-tracheloplasty
-trachelorrhaphy
-tracheloscapular
-Trachelospermum
-trachelotomy
-trachenchyma
-tracheobronchial
-tracheobronchitis
-tracheocele
-tracheochromatic
-tracheoesophageal
-tracheofissure
-tracheolar
-tracheolaryngeal
-tracheolaryngotomy
-tracheole
-tracheolingual
-tracheopathia
-tracheopathy
-tracheopharyngeal
-Tracheophonae
-tracheophone
-tracheophonesis
-tracheophonine
-tracheophony
-tracheoplasty
-tracheopyosis
-tracheorrhagia
-tracheoschisis
-tracheoscopic
-tracheoscopist
-tracheoscopy
-tracheostenosis
-tracheostomy
-tracheotome
-tracheotomist
-tracheotomize
-tracheotomy
-Trachinidae
-trachinoid
-Trachinus
-trachitis
-trachle
-Trachodon
-trachodont
-trachodontid
-Trachodontidae
-Trachoma
-trachomatous
-Trachomedusae
-trachomedusan
-trachyandesite
-trachybasalt
-trachycarpous
-Trachycarpus
-trachychromatic
-trachydolerite
-trachyglossate
-Trachylinae
-trachyline
-Trachymedusae
-trachymedusan
-trachyphonia
-trachyphonous
-Trachypteridae
-trachypteroid
-Trachypterus
-trachyspermous
-trachyte
-trachytic
-trachytoid
-tracing
-tracingly
-track
-trackable
-trackage
-trackbarrow
-tracked
-tracker
-trackhound
-trackingscout
-tracklayer
-tracklaying
-trackless
-tracklessly
-tracklessness
-trackman
-trackmanship
-trackmaster
-trackscout
-trackshifter
-tracksick
-trackside
-trackwalker
-trackway
-trackwork
-tract
-tractability
-tractable
-tractableness
-tractably
-tractarian
-Tractarianism
-tractarianize
-tractate
-tractator
-tractatule
-tractellate
-tractellum
-tractiferous
-tractile
-tractility
-traction
-tractional
-tractioneering
-Tractite
-tractlet
-tractor
-tractoration
-tractorism
-tractorist
-tractorization
-tractorize
-tractory
-tractrix
-Tracy
-tradable
-tradal
-trade
-tradecraft
-tradeful
-tradeless
-trademaster
-trader
-tradership
-Tradescantia
-tradesfolk
-tradesman
-tradesmanlike
-tradesmanship
-tradesmanwise
-tradespeople
-tradesperson
-tradeswoman
-tradiment
-trading
-tradite
-tradition
-traditional
-traditionalism
-traditionalist
-traditionalistic
-traditionality
-traditionalize
-traditionally
-traditionarily
-traditionary
-traditionate
-traditionately
-traditioner
-traditionism
-traditionist
-traditionitis
-traditionize
-traditionless
-traditionmonger
-traditious
-traditive
-traditor
-traditores
-traditorship
-traduce
-traducement
-traducent
-traducer
-traducian
-traducianism
-traducianist
-traducianistic
-traducible
-traducing
-traducingly
-traduction
-traductionist
-trady
-traffic
-trafficability
-trafficable
-trafficableness
-trafficless
-trafficway
-trafflicker
-trafflike
-trag
-tragacanth
-tragacantha
-tragacanthin
-tragal
-Tragasol
-tragedial
-tragedian
-tragedianess
-tragedical
-tragedienne
-tragedietta
-tragedist
-tragedization
-tragedize
-tragedy
-tragelaph
-tragelaphine
-Tragelaphus
-tragi
-tragic
-tragical
-tragicality
-tragically
-tragicalness
-tragicaster
-tragicize
-tragicly
-tragicness
-tragicofarcical
-tragicoheroicomic
-tragicolored
-tragicomedian
-tragicomedy
-tragicomic
-tragicomical
-tragicomicality
-tragicomically
-tragicomipastoral
-tragicoromantic
-tragicose
-tragopan
-Tragopogon
-Tragulidae
-Tragulina
-traguline
-traguloid
-Traguloidea
-Tragulus
-tragus
-trah
-traheen
-traik
-trail
-trailer
-trailery
-trailiness
-trailing
-trailingly
-trailless
-trailmaker
-trailmaking
-trailman
-trailside
-trailsman
-traily
-train
-trainable
-trainage
-trainagraph
-trainband
-trainbearer
-trainbolt
-trainboy
-trained
-trainee
-trainer
-trainful
-training
-trainless
-trainload
-trainman
-trainmaster
-trainsick
-trainster
-traintime
-trainway
-trainy
-traipse
-trait
-traitless
-traitor
-traitorhood
-traitorism
-traitorize
-traitorlike
-traitorling
-traitorous
-traitorously
-traitorousness
-traitorship
-traitorwise
-traitress
-traject
-trajectile
-trajection
-trajectitious
-trajectory
-trajet
-tralatician
-tralaticiary
-tralatition
-tralatitious
-tralatitiously
-tralira
-Trallian
-tram
-trama
-tramal
-tramcar
-trame
-Trametes
-tramful
-tramless
-tramline
-tramman
-trammel
-trammeled
-trammeler
-trammelhead
-trammeling
-trammelingly
-trammelled
-trammellingly
-trammer
-tramming
-trammon
-tramontane
-tramp
-trampage
-trampdom
-tramper
-trampess
-tramphood
-trampish
-trampishly
-trampism
-trample
-trampler
-tramplike
-trampolin
-trampoline
-trampoose
-trampot
-tramroad
-tramsmith
-tramway
-tramwayman
-tramyard
-Tran
-trance
-tranced
-trancedly
-tranceful
-trancelike
-tranchefer
-tranchet
-trancoidal
-traneen
-trank
-tranka
-tranker
-trankum
-tranky
-tranquil
-tranquility
-tranquilization
-tranquilize
-tranquilizer
-tranquilizing
-tranquilizingly
-tranquillity
-tranquillization
-tranquillize
-tranquilly
-tranquilness
-transaccidentation
-transact
-transaction
-transactional
-transactionally
-transactioneer
-transactor
-transalpine
-transalpinely
-transalpiner
-transamination
-transanimate
-transanimation
-transannular
-transapical
-transappalachian
-transaquatic
-transarctic
-transatlantic
-transatlantically
-transatlantican
-transatlanticism
-transaudient
-transbaikal
-transbaikalian
-transbay
-transboard
-transborder
-transcalency
-transcalent
-transcalescency
-transcalescent
-Transcaucasian
-transceiver
-transcend
-transcendence
-transcendency
-transcendent
-transcendental
-transcendentalism
-transcendentalist
-transcendentalistic
-transcendentality
-transcendentalize
-transcendentally
-transcendently
-transcendentness
-transcendible
-transcending
-transcendingly
-transcendingness
-transcension
-transchannel
-transcolor
-transcoloration
-transconductance
-transcondylar
-transcondyloid
-transconscious
-transcontinental
-transcorporate
-transcorporeal
-transcortical
-transcreate
-transcribable
-transcribble
-transcribbler
-transcribe
-transcriber
-transcript
-transcription
-transcriptional
-transcriptionally
-transcriptitious
-transcriptive
-transcriptively
-transcriptural
-transcrystalline
-transcurrent
-transcurrently
-transcurvation
-transdermic
-transdesert
-transdialect
-transdiaphragmatic
-transdiurnal
-transducer
-transduction
-transect
-transection
-transelement
-transelementate
-transelementation
-transempirical
-transenna
-transept
-transeptal
-transeptally
-transequatorial
-transessentiate
-transeunt
-transexperiential
-transfashion
-transfeature
-transfer
-transferability
-transferable
-transferableness
-transferably
-transferal
-transferee
-transference
-transferent
-transferential
-transferography
-transferor
-transferotype
-transferred
-transferrer
-transferribility
-transferring
-transferror
-transferrotype
-transfigurate
-transfiguration
-transfigurative
-transfigure
-transfigurement
-transfiltration
-transfinite
-transfix
-transfixation
-transfixion
-transfixture
-transfluent
-transfluvial
-transflux
-transforation
-transform
-transformability
-transformable
-transformance
-transformation
-transformationist
-transformative
-transformator
-transformer
-transforming
-transformingly
-transformism
-transformist
-transformistic
-transfrontal
-transfrontier
-transfuge
-transfugitive
-transfuse
-transfuser
-transfusible
-transfusion
-transfusionist
-transfusive
-transfusively
-transgredient
-transgress
-transgressible
-transgressing
-transgressingly
-transgression
-transgressional
-transgressive
-transgressively
-transgressor
-transhape
-transhuman
-transhumanate
-transhumanation
-transhumance
-transhumanize
-transhumant
-transience
-transiency
-transient
-transiently
-transientness
-transigence
-transigent
-transiliac
-transilience
-transiliency
-transilient
-transilluminate
-transillumination
-transilluminator
-transimpression
-transincorporation
-transindividual
-transinsular
-transire
-transischiac
-transisthmian
-transistor
-transit
-transitable
-transiter
-transition
-transitional
-transitionally
-transitionalness
-transitionary
-transitionist
-transitival
-transitive
-transitively
-transitiveness
-transitivism
-transitivity
-transitman
-transitorily
-transitoriness
-transitory
-transitus
-Transjordanian
-translade
-translatable
-translatableness
-translate
-translater
-translation
-translational
-translationally
-translative
-translator
-translatorese
-translatorial
-translatorship
-translatory
-translatress
-translatrix
-translay
-transleithan
-transletter
-translinguate
-transliterate
-transliteration
-transliterator
-translocalization
-translocate
-translocation
-translocatory
-translucence
-translucency
-translucent
-translucently
-translucid
-transmarginal
-transmarine
-transmaterial
-transmateriation
-transmedial
-transmedian
-transmental
-transmentation
-transmeridional
-transmethylation
-transmigrant
-transmigrate
-transmigration
-transmigrationism
-transmigrationist
-transmigrative
-transmigratively
-transmigrator
-transmigratory
-transmissibility
-transmissible
-transmission
-transmissional
-transmissionist
-transmissive
-transmissively
-transmissiveness
-transmissivity
-transmissometer
-transmissory
-transmit
-transmittable
-transmittal
-transmittance
-transmittancy
-transmittant
-transmitter
-transmittible
-transmogrification
-transmogrifier
-transmogrify
-transmold
-transmontane
-transmorphism
-transmundane
-transmural
-transmuscle
-transmutability
-transmutable
-transmutableness
-transmutably
-transmutation
-transmutational
-transmutationist
-transmutative
-transmutatory
-transmute
-transmuter
-transmuting
-transmutive
-transmutual
-transnatation
-transnational
-transnatural
-transnaturation
-transnature
-transnihilation
-transnormal
-transocean
-transoceanic
-transocular
-transom
-transomed
-transonic
-transorbital
-transpacific
-transpadane
-transpalatine
-transpalmar
-transpanamic
-transparence
-transparency
-transparent
-transparentize
-transparently
-transparentness
-transparietal
-transparish
-transpeciate
-transpeciation
-transpeer
-transpenetrable
-transpeninsular
-transperitoneal
-transperitoneally
-transpersonal
-transphenomenal
-transphysical
-transpicuity
-transpicuous
-transpicuously
-transpierce
-transpirability
-transpirable
-transpiration
-transpirative
-transpiratory
-transpire
-transpirometer
-transplace
-transplant
-transplantability
-transplantable
-transplantar
-transplantation
-transplantee
-transplanter
-transplendency
-transplendent
-transplendently
-transpleural
-transpleurally
-transpolar
-transponibility
-transponible
-transpontine
-transport
-transportability
-transportable
-transportableness
-transportal
-transportance
-transportation
-transportational
-transportationist
-transportative
-transported
-transportedly
-transportedness
-transportee
-transporter
-transporting
-transportingly
-transportive
-transportment
-transposability
-transposable
-transposableness
-transposal
-transpose
-transposer
-transposition
-transpositional
-transpositive
-transpositively
-transpositor
-transpository
-transpour
-transprint
-transprocess
-transprose
-transproser
-transpulmonary
-transpyloric
-transradiable
-transrational
-transreal
-transrectification
-transrhenane
-transrhodanian
-transriverine
-transsegmental
-transsensual
-transseptal
-transsepulchral
-transshape
-transshift
-transship
-transshipment
-transsolid
-transstellar
-transsubjective
-transtemporal
-Transteverine
-transthalamic
-transthoracic
-transubstantial
-transubstantially
-transubstantiate
-transubstantiation
-transubstantiationalist
-transubstantiationite
-transubstantiative
-transubstantiatively
-transubstantiatory
-transudate
-transudation
-transudative
-transudatory
-transude
-transumpt
-transumption
-transumptive
-transuranian
-transuranic
-transuranium
-transuterine
-transvaal
-Transvaaler
-Transvaalian
-transvaluate
-transvaluation
-transvalue
-transvasate
-transvasation
-transvase
-transvectant
-transvection
-transvenom
-transverbate
-transverbation
-transverberate
-transverberation
-transversal
-transversale
-transversalis
-transversality
-transversally
-transversan
-transversary
-transverse
-transversely
-transverseness
-transverser
-transversion
-transversive
-transversocubital
-transversomedial
-transversospinal
-transversovertical
-transversum
-transversus
-transvert
-transverter
-transvest
-transvestism
-transvestite
-transvestitism
-transvolation
-transwritten
-Transylvanian
-trant
-tranter
-trantlum
-Tranzschelia
-trap
-Trapa
-Trapaceae
-trapaceous
-trapball
-trapes
-trapezate
-trapeze
-trapezia
-trapezial
-trapezian
-trapeziform
-trapezing
-trapeziometacarpal
-trapezist
-trapezium
-trapezius
-trapezohedral
-trapezohedron
-trapezoid
-trapezoidal
-trapezoidiform
-trapfall
-traphole
-trapiferous
-traplight
-traplike
-trapmaker
-trapmaking
-trappean
-trapped
-trapper
-trapperlike
-trappiness
-trapping
-trappingly
-Trappist
-trappist
-Trappistine
-trappoid
-trappose
-trappous
-trappy
-traprock
-traps
-trapshoot
-trapshooter
-trapshooting
-trapstick
-trapunto
-trasformism
-trash
-trashery
-trashify
-trashily
-trashiness
-traship
-trashless
-trashrack
-trashy
-trass
-Trastevere
-Trasteverine
-trasy
-traulism
-trauma
-traumasthenia
-traumatic
-traumatically
-traumaticin
-traumaticine
-traumatism
-traumatize
-traumatology
-traumatonesis
-traumatopnea
-traumatopyra
-traumatosis
-traumatotactic
-traumatotaxis
-traumatropic
-traumatropism
-Trautvetteria
-travail
-travale
-travally
-travated
-trave
-travel
-travelability
-travelable
-traveldom
-traveled
-traveler
-traveleress
-travelerlike
-traveling
-travellability
-travellable
-travelled
-traveller
-travelogue
-traveloguer
-traveltime
-traversable
-traversal
-traversary
-traverse
-traversed
-traversely
-traverser
-traversewise
-traversework
-traversing
-traversion
-travertin
-travertine
-travestier
-travestiment
-travesty
-Travis
-travis
-travois
-travoy
-trawl
-trawlboat
-trawler
-trawlerman
-trawlnet
-tray
-trayful
-traylike
-treacher
-treacherous
-treacherously
-treacherousness
-treachery
-treacle
-treaclelike
-treaclewort
-treacliness
-treacly
-tread
-treadboard
-treader
-treading
-treadle
-treadler
-treadmill
-treadwheel
-treason
-treasonable
-treasonableness
-treasonably
-treasonful
-treasonish
-treasonist
-treasonless
-treasonmonger
-treasonous
-treasonously
-treasonproof
-treasurable
-treasure
-treasureless
-treasurer
-treasurership
-treasuress
-treasurous
-treasury
-treasuryship
-treat
-treatable
-treatableness
-treatably
-treatee
-treater
-treating
-treatise
-treatiser
-treatment
-treator
-treaty
-treatyist
-treatyite
-treatyless
-Trebellian
-treble
-trebleness
-trebletree
-trebly
-trebuchet
-trecentist
-trechmannite
-treckschuyt
-Treculia
-treddle
-tredecile
-tredille
-tree
-treebeard
-treebine
-treed
-treefish
-treeful
-treehair
-treehood
-treeify
-treeiness
-treeless
-treelessness
-treelet
-treelike
-treeling
-treemaker
-treemaking
-treeman
-treen
-treenail
-treescape
-treeship
-treespeeler
-treetop
-treeward
-treewards
-treey
-tref
-trefgordd
-trefle
-trefoil
-trefoiled
-trefoillike
-trefoilwise
-tregadyne
-tregerg
-tregohm
-trehala
-trehalase
-trehalose
-treillage
-trek
-trekker
-trekometer
-trekpath
-trellis
-trellised
-trellislike
-trelliswork
-Trema
-Tremandra
-Tremandraceae
-tremandraceous
-Trematoda
-trematode
-Trematodea
-Trematodes
-trematoid
-Trematosaurus
-tremble
-tremblement
-trembler
-trembling
-tremblingly
-tremblingness
-tremblor
-trembly
-Tremella
-Tremellaceae
-tremellaceous
-Tremellales
-tremelliform
-tremelline
-tremellineous
-tremelloid
-tremellose
-tremendous
-tremendously
-tremendousness
-tremetol
-tremie
-tremolando
-tremolant
-tremolist
-tremolite
-tremolitic
-tremolo
-tremor
-tremorless
-tremorlessly
-tremulant
-tremulate
-tremulation
-tremulous
-tremulously
-tremulousness
-trenail
-trench
-trenchancy
-trenchant
-trenchantly
-trenchantness
-trenchboard
-trenched
-trencher
-trencherless
-trencherlike
-trenchermaker
-trenchermaking
-trencherman
-trencherside
-trencherwise
-trencherwoman
-trenchful
-trenchlet
-trenchlike
-trenchmaster
-trenchmore
-trenchward
-trenchwise
-trenchwork
-trend
-trendle
-Trent
-trental
-Trentepohlia
-Trentepohliaceae
-trentepohliaceous
-Trentine
-Trenton
-trepan
-trepanation
-trepang
-trepanize
-trepanner
-trepanning
-trepanningly
-trephination
-trephine
-trephiner
-trephocyte
-trephone
-trepid
-trepidancy
-trepidant
-trepidate
-trepidation
-trepidatory
-trepidity
-trepidly
-trepidness
-Treponema
-treponematous
-treponemiasis
-treponemiatic
-treponemicidal
-treponemicide
-Trepostomata
-trepostomatous
-Treron
-Treronidae
-Treroninae
-tresaiel
-trespass
-trespassage
-trespasser
-trespassory
-tress
-tressed
-tressful
-tressilate
-tressilation
-tressless
-tresslet
-tresslike
-tresson
-tressour
-tressure
-tressured
-tressy
-trest
-trestle
-trestletree
-trestlewise
-trestlework
-trestling
-tret
-trevally
-trevet
-Trevor
-trews
-trewsman
-Trey
-trey
-tri
-triable
-triableness
-triace
-triacetamide
-triacetate
-triacetonamine
-triachenium
-triacid
-triacontaeterid
-triacontane
-triaconter
-triact
-triactinal
-triactine
-triad
-triadelphous
-Triadenum
-triadic
-triadical
-triadically
-triadism
-triadist
-triaene
-triaenose
-triage
-triagonal
-triakisicosahedral
-triakisicosahedron
-triakisoctahedral
-triakisoctahedrid
-triakisoctahedron
-triakistetrahedral
-triakistetrahedron
-trial
-trialate
-trialism
-trialist
-triality
-trialogue
-triamid
-triamide
-triamine
-triamino
-triammonium
-triamylose
-triander
-Triandria
-triandrian
-triandrous
-triangle
-triangled
-triangler
-triangleways
-trianglewise
-trianglework
-Triangula
-triangular
-triangularity
-triangularly
-triangulate
-triangulately
-triangulation
-triangulator
-Triangulid
-trianguloid
-triangulopyramidal
-triangulotriangular
-Triangulum
-triannual
-triannulate
-Trianon
-Triantaphyllos
-triantelope
-trianthous
-triapsal
-triapsidal
-triarch
-triarchate
-triarchy
-triarctic
-triarcuated
-triareal
-triarii
-Triarthrus
-triarticulate
-Trias
-Triassic
-triaster
-triatic
-Triatoma
-triatomic
-triatomicity
-triaxial
-triaxon
-triaxonian
-triazane
-triazin
-triazine
-triazo
-triazoic
-triazole
-triazolic
-tribade
-tribadism
-tribady
-tribal
-tribalism
-tribalist
-tribally
-tribarred
-tribase
-tribasic
-tribasicity
-tribasilar
-tribble
-tribe
-tribeless
-tribelet
-tribelike
-tribesfolk
-tribeship
-tribesman
-tribesmanship
-tribespeople
-tribeswoman
-triblastic
-triblet
-triboelectric
-triboelectricity
-tribofluorescence
-tribofluorescent
-Tribolium
-triboluminescence
-triboluminescent
-tribometer
-Tribonema
-Tribonemaceae
-tribophosphorescence
-tribophosphorescent
-tribophosphoroscope
-triborough
-tribrac
-tribrach
-tribrachial
-tribrachic
-tribracteate
-tribracteolate
-tribromacetic
-tribromide
-tribromoethanol
-tribromophenol
-tribromphenate
-tribromphenol
-tribual
-tribually
-tribular
-tribulate
-tribulation
-tribuloid
-Tribulus
-tribuna
-tribunal
-tribunate
-tribune
-tribuneship
-tribunitial
-tribunitian
-tribunitiary
-tribunitive
-tributable
-tributarily
-tributariness
-tributary
-tribute
-tributer
-tributist
-tributorian
-tributyrin
-trica
-tricae
-tricalcic
-tricalcium
-tricapsular
-tricar
-tricarballylic
-tricarbimide
-tricarbon
-tricarboxylic
-tricarinate
-tricarinated
-tricarpellary
-tricarpellate
-tricarpous
-tricaudal
-tricaudate
-trice
-tricellular
-tricenarious
-tricenarium
-tricenary
-tricennial
-tricentenarian
-tricentenary
-tricentennial
-tricentral
-tricephal
-tricephalic
-tricephalous
-tricephalus
-triceps
-Triceratops
-triceria
-tricerion
-tricerium
-trichatrophia
-trichauxis
-Trichechidae
-trichechine
-trichechodont
-Trichechus
-trichevron
-trichi
-trichia
-trichiasis
-Trichilia
-Trichina
-trichina
-trichinae
-trichinal
-Trichinella
-trichiniasis
-trichiniferous
-trichinization
-trichinize
-trichinoid
-trichinopoly
-trichinoscope
-trichinoscopy
-trichinosed
-trichinosis
-trichinotic
-trichinous
-trichite
-trichitic
-trichitis
-trichiurid
-Trichiuridae
-trichiuroid
-Trichiurus
-trichloride
-trichlormethane
-trichloro
-trichloroacetic
-trichloroethylene
-trichloromethane
-trichloromethyl
-trichobacteria
-trichobezoar
-trichoblast
-trichobranchia
-trichobranchiate
-trichocarpous
-trichocephaliasis
-Trichocephalus
-trichoclasia
-trichoclasis
-trichocyst
-trichocystic
-trichode
-Trichoderma
-Trichodesmium
-Trichodontidae
-trichoepithelioma
-trichogen
-trichogenous
-trichoglossia
-Trichoglossidae
-Trichoglossinae
-trichoglossine
-Trichogramma
-Trichogrammatidae
-trichogyne
-trichogynial
-trichogynic
-trichoid
-Tricholaena
-trichological
-trichologist
-trichology
-Tricholoma
-trichoma
-Trichomanes
-trichomaphyte
-trichomatose
-trichomatosis
-trichomatous
-trichome
-trichomic
-trichomonad
-Trichomonadidae
-Trichomonas
-trichomoniasis
-trichomycosis
-trichonosus
-trichopathic
-trichopathy
-trichophore
-trichophoric
-trichophyllous
-trichophyte
-trichophytia
-trichophytic
-Trichophyton
-trichophytosis
-Trichoplax
-trichopore
-trichopter
-Trichoptera
-trichoptera
-trichopteran
-trichopteron
-trichopterous
-trichopterygid
-Trichopterygidae
-trichord
-trichorrhea
-trichorrhexic
-trichorrhexis
-Trichosanthes
-trichoschisis
-trichosis
-trichosporange
-trichosporangial
-trichosporangium
-Trichosporum
-trichostasis
-Trichostema
-trichostrongyle
-trichostrongylid
-Trichostrongylus
-trichothallic
-trichotillomania
-trichotomic
-trichotomism
-trichotomist
-trichotomize
-trichotomous
-trichotomously
-trichotomy
-trichroic
-trichroism
-trichromat
-trichromate
-trichromatic
-trichromatism
-trichromatist
-trichrome
-trichromic
-trichronous
-trichuriasis
-Trichuris
-trichy
-Tricia
-tricinium
-tricipital
-tricircular
-trick
-tricker
-trickery
-trickful
-trickily
-trickiness
-tricking
-trickingly
-trickish
-trickishly
-trickishness
-trickle
-trickless
-tricklet
-tricklike
-trickling
-tricklingly
-trickly
-trickment
-trickproof
-tricksical
-tricksily
-tricksiness
-tricksome
-trickster
-trickstering
-trickstress
-tricksy
-tricktrack
-tricky
-triclad
-Tricladida
-triclinate
-triclinia
-triclinial
-tricliniarch
-tricliniary
-triclinic
-triclinium
-triclinohedric
-tricoccose
-tricoccous
-tricolette
-tricolic
-tricolon
-tricolor
-tricolored
-tricolumnar
-tricompound
-triconch
-Triconodon
-triconodont
-Triconodonta
-triconodontid
-triconodontoid
-triconodonty
-triconsonantal
-triconsonantalism
-tricophorous
-tricorn
-tricornered
-tricornute
-tricorporal
-tricorporate
-tricoryphean
-tricosane
-tricosanone
-tricostate
-tricosyl
-tricosylic
-tricot
-tricotine
-tricotyledonous
-tricresol
-tricrotic
-tricrotism
-tricrotous
-tricrural
-tricurvate
-tricuspal
-tricuspid
-tricuspidal
-tricuspidate
-tricuspidated
-tricussate
-tricyanide
-tricycle
-tricyclene
-tricycler
-tricyclic
-tricyclist
-Tricyrtis
-Tridacna
-Tridacnidae
-tridactyl
-tridactylous
-tridaily
-triddler
-tridecane
-tridecene
-tridecilateral
-tridecoic
-tridecyl
-tridecylene
-tridecylic
-trident
-tridental
-tridentate
-tridentated
-tridentiferous
-Tridentine
-Tridentinian
-tridepside
-tridermic
-tridiametral
-tridiapason
-tridigitate
-tridimensional
-tridimensionality
-tridimensioned
-tridiurnal
-tridominium
-tridrachm
-triduan
-triduum
-tridymite
-tridynamous
-tried
-triedly
-trielaidin
-triene
-triennial
-trienniality
-triennially
-triennium
-triens
-triental
-Trientalis
-triequal
-trier
-trierarch
-trierarchal
-trierarchic
-trierarchy
-trierucin
-trieteric
-trieterics
-triethanolamine
-triethyl
-triethylamine
-triethylstibine
-trifa
-trifacial
-trifarious
-trifasciated
-triferous
-trifid
-trifilar
-trifistulary
-triflagellate
-trifle
-trifledom
-trifler
-triflet
-trifling
-triflingly
-triflingness
-trifloral
-triflorate
-triflorous
-trifluoride
-trifocal
-trifoil
-trifold
-trifoliate
-trifoliated
-trifoliolate
-trifoliosis
-Trifolium
-trifolium
-trifoly
-triforial
-triforium
-triform
-triformed
-triformin
-triformity
-triformous
-trifoveolate
-trifuran
-trifurcal
-trifurcate
-trifurcation
-trig
-trigamist
-trigamous
-trigamy
-trigeminal
-trigeminous
-trigeneric
-trigesimal
-trigger
-triggered
-triggerfish
-triggerless
-trigintal
-trigintennial
-Trigla
-triglandular
-triglid
-Triglidae
-triglochid
-Triglochin
-triglochin
-triglot
-trigly
-triglyceride
-triglyceryl
-triglyph
-triglyphal
-triglyphed
-triglyphic
-triglyphical
-trigness
-trigon
-Trigona
-trigonal
-trigonally
-trigone
-Trigonella
-trigonelline
-trigoneutic
-trigoneutism
-Trigonia
-Trigoniaceae
-trigoniacean
-trigoniaceous
-trigonic
-trigonid
-Trigoniidae
-trigonite
-trigonitis
-trigonocephalic
-trigonocephalous
-Trigonocephalus
-trigonocephaly
-trigonocerous
-trigonododecahedron
-trigonodont
-trigonoid
-trigonometer
-trigonometric
-trigonometrical
-trigonometrician
-trigonometry
-trigonon
-trigonotype
-trigonous
-trigonum
-trigram
-trigrammatic
-trigrammatism
-trigrammic
-trigraph
-trigraphic
-triguttulate
-trigyn
-Trigynia
-trigynian
-trigynous
-trihalide
-trihedral
-trihedron
-trihemeral
-trihemimer
-trihemimeral
-trihemimeris
-trihemiobol
-trihemiobolion
-trihemitetartemorion
-trihoral
-trihourly
-trihybrid
-trihydrate
-trihydrated
-trihydric
-trihydride
-trihydrol
-trihydroxy
-trihypostatic
-trijugate
-trijugous
-trijunction
-trikaya
-trike
-triker
-trikeria
-trikerion
-triketo
-triketone
-trikir
-trilabe
-trilabiate
-trilamellar
-trilamellated
-trilaminar
-trilaminate
-trilarcenous
-trilateral
-trilaterality
-trilaterally
-trilateralness
-trilaurin
-trilby
-trilemma
-trilinear
-trilineate
-trilineated
-trilingual
-trilinguar
-trilinolate
-trilinoleate
-trilinolenate
-trilinolenin
-Trilisa
-trilit
-trilite
-triliteral
-triliteralism
-triliterality
-triliterally
-triliteralness
-trilith
-trilithic
-trilithon
-trill
-trillachan
-trillet
-trilli
-Trilliaceae
-trilliaceous
-trillibub
-trilliin
-trilling
-trillion
-trillionaire
-trillionize
-trillionth
-Trillium
-trillium
-trillo
-trilobate
-trilobated
-trilobation
-trilobe
-trilobed
-Trilobita
-trilobite
-trilobitic
-trilocular
-triloculate
-trilogic
-trilogical
-trilogist
-trilogy
-Trilophodon
-trilophodont
-triluminar
-triluminous
-trim
-trimacer
-trimacular
-trimargarate
-trimargarin
-trimastigate
-trimellitic
-trimembral
-trimensual
-trimer
-Trimera
-trimercuric
-Trimeresurus
-trimeric
-trimeride
-trimerite
-trimerization
-trimerous
-trimesic
-trimesinic
-trimesitic
-trimesitinic
-trimester
-trimestral
-trimestrial
-trimesyl
-trimetalism
-trimetallic
-trimeter
-trimethoxy
-trimethyl
-trimethylacetic
-trimethylamine
-trimethylbenzene
-trimethylene
-trimethylmethane
-trimethylstibine
-trimetric
-trimetrical
-trimetrogon
-trimly
-trimmer
-trimming
-trimmingly
-trimness
-trimodal
-trimodality
-trimolecular
-trimonthly
-trimoric
-trimorph
-trimorphic
-trimorphism
-trimorphous
-trimotor
-trimotored
-trimstone
-trimtram
-trimuscular
-trimyristate
-trimyristin
-trin
-Trinacrian
-trinal
-trinality
-trinalize
-trinary
-trinational
-trindle
-trine
-trinely
-trinervate
-trinerve
-trinerved
-trineural
-Tringa
-tringine
-tringle
-tringoid
-Trinidadian
-trinidado
-Trinil
-Trinitarian
-trinitarian
-Trinitarianism
-trinitrate
-trinitration
-trinitride
-trinitrin
-trinitro
-trinitrocarbolic
-trinitrocellulose
-trinitrocresol
-trinitroglycerin
-trinitromethane
-trinitrophenol
-trinitroresorcin
-trinitrotoluene
-trinitroxylene
-trinitroxylol
-Trinity
-trinity
-trinityhood
-trink
-trinkerman
-trinket
-trinketer
-trinketry
-trinkety
-trinkle
-trinklement
-trinklet
-trinkums
-Trinobantes
-trinoctial
-trinodal
-trinode
-trinodine
-trinol
-trinomial
-trinomialism
-trinomialist
-trinomiality
-trinomially
-trinopticon
-Trinorantum
-Trinovant
-Trinovantes
-trintle
-trinucleate
-Trinucleus
-Trio
-trio
-triobol
-triobolon
-trioctile
-triocular
-triode
-triodia
-triodion
-Triodon
-Triodontes
-Triodontidae
-triodontoid
-Triodontoidea
-Triodontoidei
-Triodontophorus
-Trioecia
-trioecious
-trioeciously
-trioecism
-triolcous
-triole
-trioleate
-triolefin
-trioleic
-triolein
-triolet
-triology
-Trionychidae
-trionychoid
-Trionychoideachid
-trionychoidean
-trionym
-trionymal
-Trionyx
-trioperculate
-Triopidae
-Triops
-trior
-triorchis
-triorchism
-triorthogonal
-triose
-Triosteum
-triovulate
-trioxazine
-trioxide
-trioxymethylene
-triozonide
-trip
-tripal
-tripaleolate
-tripalmitate
-tripalmitin
-tripara
-tripart
-triparted
-tripartedly
-tripartible
-tripartient
-tripartite
-tripartitely
-tripartition
-tripaschal
-tripe
-tripedal
-tripel
-tripelike
-tripeman
-tripemonger
-tripennate
-tripenny
-tripeptide
-tripersonal
-tripersonalism
-tripersonalist
-tripersonality
-tripersonally
-tripery
-tripeshop
-tripestone
-tripetaloid
-tripetalous
-tripewife
-tripewoman
-triphammer
-triphane
-triphase
-triphaser
-Triphasia
-triphasic
-triphenyl
-triphenylamine
-triphenylated
-triphenylcarbinol
-triphenylmethane
-triphenylmethyl
-triphenylphosphine
-triphibian
-triphibious
-triphony
-Triphora
-triphthong
-triphyletic
-triphyline
-triphylite
-triphyllous
-Triphysite
-tripinnate
-tripinnated
-tripinnately
-tripinnatifid
-tripinnatisect
-Tripitaka
-triplane
-Triplaris
-triplasian
-triplasic
-triple
-tripleback
-triplefold
-triplegia
-tripleness
-triplet
-tripletail
-tripletree
-triplewise
-triplex
-triplexity
-triplicate
-triplication
-triplicative
-triplicature
-Triplice
-Triplicist
-triplicity
-triplicostate
-tripliform
-triplinerved
-tripling
-triplite
-triploblastic
-triplocaulescent
-triplocaulous
-Triplochitonaceae
-triploid
-triploidic
-triploidite
-triploidy
-triplopia
-triplopy
-triplum
-triplumbic
-triply
-tripmadam
-tripod
-tripodal
-tripodial
-tripodian
-tripodic
-tripodical
-tripody
-tripointed
-tripolar
-tripoli
-Tripoline
-tripoline
-Tripolitan
-tripolite
-tripos
-tripotassium
-trippant
-tripper
-trippet
-tripping
-trippingly
-trippingness
-trippist
-tripple
-trippler
-Tripsacum
-tripsill
-tripsis
-tripsome
-tripsomely
-triptane
-tripterous
-triptote
-triptych
-triptyque
-tripudial
-tripudiant
-tripudiary
-tripudiate
-tripudiation
-tripudist
-tripudium
-tripunctal
-tripunctate
-tripy
-Tripylaea
-tripylaean
-Tripylarian
-tripylarian
-tripyrenous
-triquadrantal
-triquetra
-triquetral
-triquetric
-triquetrous
-triquetrously
-triquetrum
-triquinate
-triquinoyl
-triradial
-triradially
-triradiate
-triradiated
-triradiately
-triradiation
-Triratna
-trirectangular
-triregnum
-trireme
-trirhombohedral
-trirhomboidal
-triricinolein
-trisaccharide
-trisaccharose
-trisacramentarian
-Trisagion
-trisalt
-trisazo
-trisceptral
-trisect
-trisected
-trisection
-trisector
-trisectrix
-triseme
-trisemic
-trisensory
-trisepalous
-triseptate
-triserial
-triserially
-triseriate
-triseriatim
-trisetose
-Trisetum
-trishna
-trisilane
-trisilicane
-trisilicate
-trisilicic
-trisinuate
-trisinuated
-triskele
-triskelion
-trismegist
-trismegistic
-trismic
-trismus
-trisoctahedral
-trisoctahedron
-trisodium
-trisome
-trisomic
-trisomy
-trisonant
-Trisotropis
-trispast
-trispaston
-trispermous
-trispinose
-trisplanchnic
-trisporic
-trisporous
-trisquare
-trist
-tristachyous
-Tristam
-Tristan
-Tristania
-tristate
-tristearate
-tristearin
-tristeness
-tristetrahedron
-tristeza
-tristful
-tristfully
-tristfulness
-tristich
-Tristichaceae
-tristichic
-tristichous
-tristigmatic
-tristigmatose
-tristiloquy
-tristisonous
-Tristram
-tristylous
-trisubstituted
-trisubstitution
-trisul
-trisula
-trisulcate
-trisulcated
-trisulphate
-trisulphide
-trisulphone
-trisulphonic
-trisulphoxide
-trisylabic
-trisyllabical
-trisyllabically
-trisyllabism
-trisyllabity
-trisyllable
-tritactic
-tritagonist
-tritangent
-tritangential
-tritanope
-tritanopia
-tritanopic
-tritaph
-trite
-Triteleia
-tritely
-tritemorion
-tritencephalon
-triteness
-triternate
-triternately
-triterpene
-tritetartemorion
-tritheism
-tritheist
-tritheistic
-tritheistical
-tritheite
-tritheocracy
-trithing
-trithioaldehyde
-trithiocarbonate
-trithiocarbonic
-trithionate
-trithionic
-Trithrinax
-tritical
-triticality
-tritically
-triticalness
-triticeous
-triticeum
-triticin
-triticism
-triticoid
-Triticum
-triticum
-tritish
-tritium
-tritocerebral
-tritocerebrum
-tritocone
-tritoconid
-Tritogeneia
-tritolo
-Tritoma
-tritomite
-Triton
-triton
-tritonal
-tritonality
-tritone
-Tritoness
-Tritonia
-Tritonic
-Tritonidae
-tritonoid
-tritonous
-tritonymph
-tritonymphal
-tritopatores
-tritopine
-tritor
-tritoral
-tritorium
-tritoxide
-tritozooid
-tritriacontane
-trittichan
-tritubercular
-Trituberculata
-trituberculism
-trituberculy
-triturable
-tritural
-triturate
-trituration
-triturator
-triturature
-triturium
-Triturus
-trityl
-Tritylodon
-Triumfetta
-Triumph
-triumph
-triumphal
-triumphance
-triumphancy
-triumphant
-triumphantly
-triumphator
-triumpher
-triumphing
-triumphwise
-triumvir
-triumviral
-triumvirate
-triumviri
-triumvirship
-triunal
-triune
-triungulin
-triunification
-triunion
-triunitarian
-triunity
-triunsaturated
-triurid
-Triuridaceae
-Triuridales
-Triuris
-trivalence
-trivalency
-trivalent
-trivalerin
-trivalve
-trivalvular
-trivant
-trivantly
-trivariant
-triverbal
-triverbial
-trivet
-trivetwise
-trivia
-trivial
-trivialism
-trivialist
-triviality
-trivialize
-trivially
-trivialness
-trivirga
-trivirgate
-trivium
-trivoltine
-trivvet
-triweekly
-Trix
-Trixie
-Trixy
-trizoic
-trizomal
-trizonal
-trizone
-Trizonia
-Troad
-troat
-troca
-trocaical
-trocar
-Trochaic
-trochaic
-trochaicality
-trochal
-trochalopod
-Trochalopoda
-trochalopodous
-trochanter
-trochanteric
-trochanterion
-trochantin
-trochantinian
-trochart
-trochate
-troche
-trocheameter
-trochee
-trocheeize
-trochelminth
-Trochelminthes
-trochi
-trochid
-Trochidae
-trochiferous
-trochiform
-Trochila
-Trochili
-trochili
-trochilic
-trochilics
-trochilidae
-trochilidine
-trochilidist
-trochiline
-trochilopodous
-Trochilus
-trochilus
-troching
-trochiscation
-trochiscus
-trochite
-trochitic
-Trochius
-trochlea
-trochlear
-trochleariform
-trochlearis
-trochleary
-trochleate
-trochleiform
-trochocephalia
-trochocephalic
-trochocephalus
-trochocephaly
-Trochodendraceae
-trochodendraceous
-Trochodendron
-trochoid
-trochoidal
-trochoidally
-trochoides
-trochometer
-trochophore
-Trochosphaera
-Trochosphaerida
-trochosphere
-trochospherical
-Trochozoa
-trochozoic
-trochozoon
-Trochus
-trochus
-trock
-troco
-troctolite
-trod
-trodden
-trode
-troegerite
-Troezenian
-troft
-trog
-trogger
-troggin
-troglodytal
-troglodyte
-Troglodytes
-troglodytic
-troglodytical
-Troglodytidae
-Troglodytinae
-troglodytish
-troglodytism
-trogon
-Trogones
-Trogonidae
-Trogoniformes
-trogonoid
-trogs
-trogue
-Troiades
-Troic
-troika
-troilite
-Trojan
-troke
-troker
-troll
-trolldom
-trolleite
-troller
-trolley
-trolleyer
-trolleyful
-trolleyman
-trollflower
-trollimog
-trolling
-Trollius
-trollman
-trollol
-trollop
-Trollopean
-Trollopeanism
-trollopish
-trollops
-trollopy
-trolly
-tromba
-trombe
-trombiculid
-trombidiasis
-Trombidiidae
-Trombidium
-trombone
-trombonist
-trombony
-trommel
-tromometer
-tromometric
-tromometrical
-tromometry
-tromp
-trompe
-trompil
-trompillo
-tromple
-tron
-trona
-tronador
-tronage
-tronc
-trondhjemite
-trone
-troner
-troolie
-troop
-trooper
-trooperess
-troopfowl
-troopship
-troopwise
-troostite
-troostitic
-troot
-tropacocaine
-tropaeolaceae
-tropaeolaceous
-tropaeolin
-Tropaeolum
-tropaion
-tropal
-troparia
-troparion
-tropary
-tropate
-trope
-tropeic
-tropeine
-troper
-tropesis
-trophaea
-trophaeum
-trophal
-trophallactic
-trophallaxis
-trophectoderm
-trophedema
-trophema
-trophesial
-trophesy
-trophi
-trophic
-trophical
-trophically
-trophicity
-trophied
-Trophis
-trophism
-trophobiont
-trophobiosis
-trophobiotic
-trophoblast
-trophoblastic
-trophochromatin
-trophocyte
-trophoderm
-trophodisc
-trophodynamic
-trophodynamics
-trophogenesis
-trophogenic
-trophogeny
-trophology
-trophonema
-trophoneurosis
-trophoneurotic
-Trophonian
-trophonucleus
-trophopathy
-trophophore
-trophophorous
-trophophyte
-trophoplasm
-trophoplasmatic
-trophoplasmic
-trophoplast
-trophosomal
-trophosome
-trophosperm
-trophosphere
-trophospongia
-trophospongial
-trophospongium
-trophospore
-trophotaxis
-trophotherapy
-trophothylax
-trophotropic
-trophotropism
-trophozoite
-trophozooid
-trophy
-trophyless
-trophywort
-tropic
-tropical
-Tropicalia
-Tropicalian
-tropicality
-tropicalization
-tropicalize
-tropically
-tropicopolitan
-tropidine
-Tropidoleptus
-tropine
-tropism
-tropismatic
-tropist
-tropistic
-tropocaine
-tropologic
-tropological
-tropologically
-tropologize
-tropology
-tropometer
-tropopause
-tropophil
-tropophilous
-tropophyte
-tropophytic
-troposphere
-tropostereoscope
-tropoyl
-troptometer
-tropyl
-trostera
-trot
-trotcozy
-troth
-trothful
-trothless
-trothlike
-trothplight
-trotlet
-trotline
-trotol
-trotter
-trottie
-trottles
-trottoir
-trottoired
-trotty
-trotyl
-troubadour
-troubadourish
-troubadourism
-troubadourist
-trouble
-troubledly
-troubledness
-troublemaker
-troublemaking
-troublement
-troubleproof
-troubler
-troublesome
-troublesomely
-troublesomeness
-troubling
-troublingly
-troublous
-troublously
-troublousness
-troubly
-trough
-troughful
-troughing
-troughlike
-troughster
-troughway
-troughwise
-troughy
-trounce
-trouncer
-troupand
-troupe
-trouper
-troupial
-trouse
-trouser
-trouserdom
-trousered
-trouserettes
-trouserian
-trousering
-trouserless
-trousers
-trousseau
-trousseaux
-trout
-troutbird
-trouter
-troutflower
-troutful
-troutiness
-troutless
-troutlet
-troutlike
-trouty
-trouvere
-trouveur
-trove
-troveless
-trover
-trow
-trowel
-trowelbeak
-troweler
-trowelful
-trowelman
-trowing
-trowlesworthite
-trowman
-trowth
-Troy
-troy
-Troynovant
-Troytown
-truancy
-truandise
-truant
-truantcy
-truantism
-truantlike
-truantly
-truantness
-truantry
-truantship
-trub
-trubu
-truce
-trucebreaker
-trucebreaking
-truceless
-trucemaker
-trucemaking
-trucial
-trucidation
-truck
-truckage
-trucker
-truckful
-trucking
-truckle
-truckler
-trucklike
-truckling
-trucklingly
-truckload
-truckman
-truckmaster
-trucks
-truckster
-truckway
-truculence
-truculency
-truculent
-truculental
-truculently
-truculentness
-truddo
-trudellite
-trudge
-trudgen
-trudger
-Trudy
-true
-trueborn
-truebred
-truehearted
-trueheartedly
-trueheartedness
-truelike
-truelove
-trueness
-truepenny
-truer
-truff
-truffle
-truffled
-trufflelike
-truffler
-trufflesque
-trug
-truish
-truism
-truismatic
-truistic
-truistical
-trull
-Trullan
-truller
-trullization
-trullo
-truly
-trumbash
-trummel
-trump
-trumper
-trumperiness
-trumpery
-trumpet
-trumpetbush
-trumpeter
-trumpeting
-trumpetless
-trumpetlike
-trumpetry
-trumpetweed
-trumpetwood
-trumpety
-trumph
-trumpie
-trumpless
-trumplike
-trun
-truncage
-truncal
-truncate
-truncated
-Truncatella
-Truncatellidae
-truncately
-truncation
-truncator
-truncatorotund
-truncatosinuate
-truncature
-trunch
-trunched
-truncheon
-truncheoned
-truncher
-trunchman
-trundle
-trundlehead
-trundler
-trundleshot
-trundletail
-trundling
-trunk
-trunkback
-trunked
-trunkfish
-trunkful
-trunking
-trunkless
-trunkmaker
-trunknose
-trunkway
-trunkwork
-trunnel
-trunnion
-trunnioned
-trunnionless
-trush
-trusion
-truss
-trussed
-trussell
-trusser
-trussing
-trussmaker
-trussmaking
-trusswork
-trust
-trustability
-trustable
-trustableness
-trustably
-trustee
-trusteeism
-trusteeship
-trusten
-truster
-trustful
-trustfully
-trustfulness
-trustification
-trustify
-trustihood
-trustily
-trustiness
-trusting
-trustingly
-trustingness
-trustle
-trustless
-trustlessly
-trustlessness
-trustman
-trustmonger
-trustwoman
-trustworthily
-trustworthiness
-trustworthy
-trusty
-truth
-truthable
-truthful
-truthfully
-truthfulness
-truthify
-truthiness
-truthless
-truthlessly
-truthlessness
-truthlike
-truthlikeness
-truthsman
-truthteller
-truthtelling
-truthy
-Trutta
-truttaceous
-truvat
-truxillic
-truxilline
-try
-trygon
-Trygonidae
-tryhouse
-Trying
-trying
-tryingly
-tryingness
-tryma
-tryout
-tryp
-trypa
-trypan
-trypaneid
-Trypaneidae
-trypanocidal
-trypanocide
-trypanolysin
-trypanolysis
-trypanolytic
-Trypanosoma
-trypanosoma
-trypanosomacidal
-trypanosomacide
-trypanosomal
-trypanosomatic
-Trypanosomatidae
-trypanosomatosis
-trypanosomatous
-trypanosome
-trypanosomiasis
-trypanosomic
-Tryparsamide
-Trypeta
-trypetid
-Trypetidae
-Tryphena
-Tryphosa
-trypiate
-trypograph
-trypographic
-trypsin
-trypsinize
-trypsinogen
-tryptase
-tryptic
-tryptogen
-tryptone
-tryptonize
-tryptophan
-trysail
-tryst
-tryster
-trysting
-tryt
-tryworks
-tsadik
-tsamba
-tsantsa
-tsar
-tsardom
-tsarevitch
-tsarina
-tsaritza
-tsarship
-tsatlee
-Tsattine
-tscharik
-tscheffkinite
-Tscherkess
-tsere
-tsessebe
-tsetse
-Tshi
-tsia
-Tsiltaden
-Tsimshian
-tsine
-tsingtauite
-tsiology
-Tsoneca
-Tsonecan
-tst
-tsuba
-tsubo
-Tsuga
-Tsuma
-tsumebite
-tsun
-tsunami
-tsungtu
-Tsutsutsi
-tu
-tua
-Tualati
-Tuamotu
-Tuamotuan
-Tuan
-tuan
-Tuareg
-tuarn
-tuart
-tuatara
-tuatera
-tuath
-tub
-Tuba
-tuba
-tubae
-tubage
-tubal
-tubaphone
-tubar
-tubate
-tubatoxin
-Tubatulabal
-tubba
-tubbable
-tubbal
-tubbeck
-tubber
-tubbie
-tubbiness
-tubbing
-tubbish
-tubboe
-tubby
-tube
-tubeflower
-tubeform
-tubeful
-tubehead
-tubehearted
-tubeless
-tubelet
-tubelike
-tubemaker
-tubemaking
-tubeman
-tuber
-Tuberaceae
-tuberaceous
-Tuberales
-tuberation
-tubercle
-tubercled
-tuberclelike
-tubercula
-tubercular
-Tubercularia
-Tuberculariaceae
-tuberculariaceous
-tubercularization
-tubercularize
-tubercularly
-tubercularness
-tuberculate
-tuberculated
-tuberculatedly
-tuberculately
-tuberculation
-tuberculatogibbous
-tuberculatonodose
-tuberculatoradiate
-tuberculatospinous
-tubercule
-tuberculed
-tuberculid
-tuberculide
-tuberculiferous
-tuberculiform
-tuberculin
-tuberculinic
-tuberculinization
-tuberculinize
-tuberculization
-tuberculize
-tuberculocele
-tuberculocidin
-tuberculoderma
-tuberculoid
-tuberculoma
-tuberculomania
-tuberculomata
-tuberculophobia
-tuberculoprotein
-tuberculose
-tuberculosectorial
-tuberculosed
-tuberculosis
-tuberculotherapist
-tuberculotherapy
-tuberculotoxin
-tuberculotrophic
-tuberculous
-tuberculously
-tuberculousness
-tuberculum
-tuberiferous
-tuberiform
-tuberin
-tuberization
-tuberize
-tuberless
-tuberoid
-tuberose
-tuberosity
-tuberous
-tuberously
-tuberousness
-tubesmith
-tubework
-tubeworks
-tubfish
-tubful
-tubicen
-tubicinate
-tubicination
-Tubicola
-Tubicolae
-tubicolar
-tubicolous
-tubicorn
-tubicornous
-tubifacient
-tubifer
-tubiferous
-Tubifex
-Tubificidae
-Tubiflorales
-tubiflorous
-tubiform
-tubig
-tubik
-tubilingual
-Tubinares
-tubinarial
-tubinarine
-tubing
-Tubingen
-tubiparous
-Tubipora
-tubipore
-tubiporid
-Tubiporidae
-tubiporoid
-tubiporous
-tublet
-tublike
-tubmaker
-tubmaking
-tubman
-tuboabdominal
-tubocurarine
-tubolabellate
-tuboligamentous
-tuboovarial
-tuboovarian
-tuboperitoneal
-tuborrhea
-tubotympanal
-tubovaginal
-tubular
-Tubularia
-tubularia
-Tubulariae
-tubularian
-Tubularida
-tubularidan
-Tubulariidae
-tubularity
-tubularly
-tubulate
-tubulated
-tubulation
-tubulator
-tubulature
-tubule
-tubulet
-tubuli
-tubulibranch
-tubulibranchian
-Tubulibranchiata
-tubulibranchiate
-Tubulidentata
-tubulidentate
-Tubulifera
-tubuliferan
-tubuliferous
-tubulifloral
-tubuliflorous
-tubuliform
-Tubulipora
-tubulipore
-tubuliporid
-Tubuliporidae
-tubuliporoid
-tubulization
-tubulodermoid
-tubuloracemose
-tubulosaccular
-tubulose
-tubulostriato
-tubulous
-tubulously
-tubulousness
-tubulure
-tubulus
-tubwoman
-Tucana
-Tucanae
-tucandera
-Tucano
-tuchit
-tuchun
-tuchunate
-tuchunism
-tuchunize
-tuck
-Tuckahoe
-tuckahoe
-tucker
-tuckermanity
-tucket
-tucking
-tuckner
-tuckshop
-tucktoo
-tucky
-tucum
-tucuma
-tucuman
-Tucuna
-tudel
-Tudesque
-Tudor
-Tudoresque
-tue
-tueiron
-Tuesday
-tufa
-tufaceous
-tufalike
-tufan
-tuff
-tuffaceous
-tuffet
-tuffing
-tuft
-tuftaffeta
-tufted
-tufter
-tufthunter
-tufthunting
-tuftily
-tufting
-tuftlet
-tufty
-tug
-tugboat
-tugboatman
-tugger
-tuggery
-tugging
-tuggingly
-tughra
-tugless
-tuglike
-tugman
-tugrik
-tugui
-tugurium
-tui
-tuik
-tuille
-tuillette
-tuilyie
-tuism
-tuition
-tuitional
-tuitionary
-tuitive
-tuke
-tukra
-Tukuler
-Tukulor
-tula
-Tulalip
-tulare
-tularemia
-tulasi
-Tulbaghia
-tulchan
-tulchin
-tule
-tuliac
-tulip
-Tulipa
-tulipflower
-tulipiferous
-tulipist
-tuliplike
-tulipomania
-tulipomaniac
-tulipwood
-tulipy
-tulisan
-Tulkepaia
-tulle
-Tullian
-tullibee
-Tulostoma
-tulsi
-Tulu
-tulwar
-tum
-tumasha
-tumatakuru
-tumatukuru
-tumbak
-tumbester
-tumble
-tumblebug
-tumbled
-tumbledung
-tumbler
-tumblerful
-tumblerlike
-tumblerwise
-tumbleweed
-tumblification
-tumbling
-tumblingly
-tumbly
-Tumboa
-tumbrel
-tume
-tumefacient
-tumefaction
-tumefy
-tumescence
-tumescent
-tumid
-tumidity
-tumidly
-tumidness
-Tumion
-tummals
-tummel
-tummer
-tummock
-tummy
-tumor
-tumored
-tumorlike
-tumorous
-tump
-tumpline
-tumtum
-tumular
-tumulary
-tumulate
-tumulation
-tumuli
-tumulose
-tumulosity
-tumulous
-tumult
-tumultuarily
-tumultuariness
-tumultuary
-tumultuate
-tumultuation
-tumultuous
-tumultuously
-tumultuousness
-tumulus
-Tumupasa
-tun
-Tuna
-tuna
-tunable
-tunableness
-tunably
-tunbellied
-tunbelly
-tunca
-tund
-tundagslatta
-tunder
-tundish
-tundra
-tundun
-tune
-Tunebo
-tuned
-tuneful
-tunefully
-tunefulness
-tuneless
-tunelessly
-tunelessness
-tunemaker
-tunemaking
-tuner
-tunesome
-tunester
-tunful
-tung
-Tunga
-Tungan
-tungate
-tungo
-tungstate
-tungsten
-tungstenic
-tungsteniferous
-tungstenite
-tungstic
-tungstite
-tungstosilicate
-tungstosilicic
-Tungus
-Tungusian
-Tungusic
-tunhoof
-tunic
-Tunica
-Tunican
-tunicary
-Tunicata
-tunicate
-tunicated
-tunicin
-tunicked
-tunicle
-tunicless
-tuniness
-tuning
-tunish
-Tunisian
-tunist
-tunk
-Tunker
-tunket
-tunlike
-tunmoot
-tunna
-tunnel
-tunneled
-tunneler
-tunneling
-tunnelist
-tunnelite
-tunnellike
-tunnelly
-tunnelmaker
-tunnelmaking
-tunnelman
-tunnelway
-tunner
-tunnery
-Tunnit
-tunnland
-tunnor
-tunny
-tuno
-tunu
-tuny
-tup
-Tupaia
-Tupaiidae
-tupakihi
-tupanship
-tupara
-tupek
-tupelo
-Tupi
-Tupian
-tupik
-Tupinamba
-Tupinaqui
-tupman
-tuppence
-tuppenny
-Tupperian
-Tupperish
-Tupperism
-Tupperize
-tupuna
-tuque
-tur
-turacin
-Turacus
-Turanian
-Turanianism
-Turanism
-turanose
-turb
-turban
-turbaned
-turbanesque
-turbanette
-turbanless
-turbanlike
-turbantop
-turbanwise
-turbary
-turbeh
-Turbellaria
-turbellarian
-turbellariform
-turbescency
-turbid
-turbidimeter
-turbidimetric
-turbidimetry
-turbidity
-turbidly
-turbidness
-turbinaceous
-turbinage
-turbinal
-turbinate
-turbinated
-turbination
-turbinatoconcave
-turbinatocylindrical
-turbinatoglobose
-turbinatostipitate
-turbine
-turbinectomy
-turbined
-turbinelike
-Turbinella
-Turbinellidae
-turbinelloid
-turbiner
-turbines
-Turbinidae
-turbiniform
-turbinoid
-turbinotome
-turbinotomy
-turbit
-turbith
-turbitteen
-Turbo
-turbo
-turboalternator
-turboblower
-turbocompressor
-turbodynamo
-turboexciter
-turbofan
-turbogenerator
-turbomachine
-turbomotor
-turbopump
-turbosupercharge
-turbosupercharger
-turbot
-turbotlike
-turboventilator
-turbulence
-turbulency
-turbulent
-turbulently
-turbulentness
-Turcian
-Turcic
-Turcification
-Turcism
-Turcize
-Turco
-turco
-Turcoman
-Turcophilism
-turcopole
-turcopolier
-turd
-Turdetan
-Turdidae
-turdiform
-Turdinae
-turdine
-turdoid
-Turdus
-tureen
-tureenful
-turf
-turfage
-turfdom
-turfed
-turfen
-turfiness
-turfing
-turfite
-turfless
-turflike
-turfman
-turfwise
-turfy
-turgency
-turgent
-turgently
-turgesce
-turgescence
-turgescency
-turgescent
-turgescible
-turgid
-turgidity
-turgidly
-turgidness
-turgite
-turgoid
-turgor
-turgy
-Turi
-turicata
-turio
-turion
-turioniferous
-turjaite
-turjite
-Turk
-turk
-Turkana
-Turkdom
-Turkeer
-turken
-Turkery
-Turkess
-Turkey
-turkey
-turkeyback
-turkeyberry
-turkeybush
-Turkeydom
-turkeyfoot
-Turkeyism
-turkeylike
-Turki
-Turkic
-Turkicize
-Turkification
-Turkify
-turkis
-Turkish
-Turkishly
-Turkishness
-Turkism
-Turkize
-turkle
-Turklike
-Turkman
-Turkmen
-Turkmenian
-Turkologist
-Turkology
-Turkoman
-Turkomania
-Turkomanic
-Turkomanize
-Turkophil
-Turkophile
-Turkophilia
-Turkophilism
-Turkophobe
-Turkophobist
-turlough
-Turlupin
-turm
-turma
-turment
-turmeric
-turmit
-turmoil
-turmoiler
-turn
-turnable
-turnabout
-turnagain
-turnaround
-turnaway
-turnback
-turnbout
-turnbuckle
-turncap
-turncoat
-turncoatism
-turncock
-turndown
-turndun
-turned
-turnel
-turner
-Turnera
-Turneraceae
-turneraceous
-Turneresque
-Turnerian
-Turnerism
-turnerite
-turnery
-turney
-turngate
-turnhall
-Turnhalle
-Turnices
-Turnicidae
-turnicine
-Turnicomorphae
-turnicomorphic
-turning
-turningness
-turnip
-turniplike
-turnipweed
-turnipwise
-turnipwood
-turnipy
-Turnix
-turnix
-turnkey
-turnoff
-turnout
-turnover
-turnpike
-turnpiker
-turnpin
-turnplate
-turnplow
-turnrow
-turns
-turnscrew
-turnsheet
-turnskin
-turnsole
-turnspit
-turnstile
-turnstone
-turntable
-turntail
-turnup
-turnwrest
-turnwrist
-Turonian
-turp
-turpantineweed
-turpentine
-turpentineweed
-turpentinic
-turpeth
-turpethin
-turpid
-turpidly
-turpitude
-turps
-turquoise
-turquoiseberry
-turquoiselike
-turr
-turret
-turreted
-turrethead
-turretlike
-turrical
-turricle
-turricula
-turriculae
-turricular
-turriculate
-turriferous
-turriform
-turrigerous
-Turrilepas
-turrilite
-Turrilites
-turriliticone
-Turrilitidae
-Turritella
-turritella
-turritellid
-Turritellidae
-turritelloid
-turse
-Tursenoi
-Tursha
-tursio
-Tursiops
-Turtan
-turtle
-turtleback
-turtlebloom
-turtledom
-turtledove
-turtlehead
-turtleize
-turtlelike
-turtler
-turtlet
-turtling
-turtosa
-tururi
-turus
-Turveydrop
-Turveydropdom
-Turveydropian
-turwar
-Tusayan
-Tuscan
-Tuscanism
-Tuscanize
-Tuscanlike
-Tuscany
-Tuscarora
-tusche
-Tusculan
-Tush
-tush
-tushed
-Tushepaw
-tusher
-tushery
-tusk
-tuskar
-tusked
-Tuskegee
-tusker
-tuskish
-tuskless
-tusklike
-tuskwise
-tusky
-tussah
-tussal
-tusser
-tussicular
-Tussilago
-tussis
-tussive
-tussle
-tussock
-tussocked
-tussocker
-tussocky
-tussore
-tussur
-tut
-tutania
-tutball
-tute
-tutee
-tutela
-tutelage
-tutelar
-tutelary
-Tutelo
-tutenag
-tuth
-tutin
-tutiorism
-tutiorist
-tutly
-tutman
-tutor
-tutorage
-tutorer
-tutoress
-tutorhood
-tutorial
-tutorially
-tutoriate
-tutorism
-tutorization
-tutorize
-tutorless
-tutorly
-tutorship
-tutory
-tutoyer
-tutress
-tutrice
-tutrix
-tuts
-tutsan
-tutster
-tutti
-tuttiman
-tutty
-tutu
-tutulus
-Tututni
-tutwork
-tutworker
-tutworkman
-tuwi
-tux
-tuxedo
-tuyere
-Tuyuneiri
-tuza
-Tuzla
-tuzzle
-twa
-Twaddell
-twaddle
-twaddledom
-twaddleize
-twaddlement
-twaddlemonger
-twaddler
-twaddlesome
-twaddling
-twaddlingly
-twaddly
-twaddy
-twae
-twaesome
-twafauld
-twagger
-twain
-twaite
-twal
-twale
-twalpenny
-twalpennyworth
-twalt
-Twana
-twang
-twanger
-twanginess
-twangle
-twangler
-twangy
-twank
-twanker
-twanking
-twankingly
-twankle
-twanky
-twant
-twarly
-twas
-twasome
-twat
-twatchel
-twatterlight
-twattle
-twattler
-twattling
-tway
-twayblade
-twazzy
-tweag
-tweak
-tweaker
-tweaky
-twee
-tweed
-tweeded
-tweedle
-tweedledee
-tweedledum
-tweedy
-tweeg
-tweel
-tween
-tweenlight
-tweeny
-tweesh
-tweesht
-tweest
-tweet
-tweeter
-tweeze
-tweezer
-tweezers
-tweil
-twelfhynde
-twelfhyndeman
-twelfth
-twelfthly
-Twelfthtide
-twelve
-twelvefold
-twelvehynde
-twelvehyndeman
-twelvemo
-twelvemonth
-twelvepence
-twelvepenny
-twelvescore
-twentieth
-twentiethly
-twenty
-twentyfold
-twentymo
-twere
-twerp
-Twi
-twibil
-twibilled
-twice
-twicer
-twicet
-twichild
-twick
-twiddle
-twiddler
-twiddling
-twiddly
-twifoil
-twifold
-twifoldly
-twig
-twigful
-twigged
-twiggen
-twigger
-twiggy
-twigless
-twiglet
-twiglike
-twigsome
-twigwithy
-twilight
-twilightless
-twilightlike
-twilighty
-twilit
-twill
-twilled
-twiller
-twilling
-twilly
-twilt
-twin
-twinable
-twinberry
-twinborn
-twindle
-twine
-twineable
-twinebush
-twineless
-twinelike
-twinemaker
-twinemaking
-twiner
-twinflower
-twinfold
-twinge
-twingle
-twinhood
-twiningly
-twinism
-twink
-twinkle
-twinkledum
-twinkleproof
-twinkler
-twinkles
-twinkless
-twinkling
-twinklingly
-twinkly
-twinleaf
-twinlike
-twinling
-twinly
-twinned
-twinner
-twinness
-twinning
-twinship
-twinsomeness
-twinter
-twiny
-twire
-twirk
-twirl
-twirler
-twirligig
-twirly
-twiscar
-twisel
-twist
-twistable
-twisted
-twistedly
-twistened
-twister
-twisterer
-twistical
-twistification
-twistily
-twistiness
-twisting
-twistingly
-twistiways
-twistiwise
-twistle
-twistless
-twisty
-twit
-twitch
-twitchel
-twitcheling
-twitcher
-twitchet
-twitchety
-twitchfire
-twitchily
-twitchiness
-twitchingly
-twitchy
-twite
-twitlark
-twitten
-twitter
-twitteration
-twitterboned
-twitterer
-twittering
-twitteringly
-twitterly
-twittery
-twittingly
-twitty
-twixt
-twixtbrain
-twizzened
-twizzle
-two
-twodecker
-twofold
-twofoldly
-twofoldness
-twoling
-twoness
-twopence
-twopenny
-twosome
-twyblade
-twyhynde
-Tybalt
-Tyburn
-Tyburnian
-Tyche
-tychism
-tychite
-Tychonian
-Tychonic
-tychoparthenogenesis
-tychopotamic
-tycoon
-tycoonate
-tyddyn
-tydie
-tye
-tyee
-tyg
-Tyigh
-tying
-tyke
-tyken
-tykhana
-tyking
-tylarus
-tyleberry
-Tylenchus
-Tyler
-Tylerism
-Tylerite
-Tylerize
-tylion
-tyloma
-tylopod
-Tylopoda
-tylopodous
-Tylosaurus
-tylose
-tylosis
-tylosteresis
-Tylostoma
-Tylostomaceae
-tylostylar
-tylostyle
-tylostylote
-tylostylus
-Tylosurus
-tylotate
-tylote
-tylotic
-tylotoxea
-tylotoxeate
-tylotus
-tylus
-tymbalon
-tymp
-tympan
-tympana
-tympanal
-tympanectomy
-tympani
-tympanic
-tympanichord
-tympanichordal
-tympanicity
-tympaniform
-tympaning
-tympanism
-tympanist
-tympanites
-tympanitic
-tympanitis
-tympanocervical
-tympanohyal
-tympanomalleal
-tympanomandibular
-tympanomastoid
-tympanomaxillary
-tympanon
-tympanoperiotic
-tympanosis
-tympanosquamosal
-tympanostapedial
-tympanotemporal
-tympanotomy
-Tympanuchus
-tympanum
-tympany
-tynd
-Tyndallization
-Tyndallize
-tyndallmeter
-Tynwald
-typal
-typarchical
-type
-typecast
-Typees
-typeholder
-typer
-typescript
-typeset
-typesetter
-typesetting
-typewrite
-typewriter
-typewriting
-Typha
-Typhaceae
-typhaceous
-typhemia
-typhia
-typhic
-typhinia
-typhization
-typhlatonia
-typhlatony
-typhlectasis
-typhlectomy
-typhlenteritis
-typhlitic
-typhlitis
-typhloalbuminuria
-typhlocele
-typhloempyema
-typhloenteritis
-typhlohepatitis
-typhlolexia
-typhlolithiasis
-typhlology
-typhlomegaly
-Typhlomolge
-typhlon
-typhlopexia
-typhlopexy
-typhlophile
-typhlopid
-Typhlopidae
-Typhlops
-typhloptosis
-typhlosis
-typhlosolar
-typhlosole
-typhlostenosis
-typhlostomy
-typhlotomy
-typhobacillosis
-Typhoean
-typhoemia
-typhogenic
-typhoid
-typhoidal
-typhoidin
-typhoidlike
-typholysin
-typhomalaria
-typhomalarial
-typhomania
-typhonia
-Typhonian
-Typhonic
-typhonic
-typhoon
-typhoonish
-typhopneumonia
-typhose
-typhosepsis
-typhosis
-typhotoxine
-typhous
-Typhula
-typhus
-typic
-typica
-typical
-typicality
-typically
-typicalness
-typicon
-typicum
-typification
-typifier
-typify
-typist
-typo
-typobar
-typocosmy
-typographer
-typographia
-typographic
-typographical
-typographically
-typographist
-typography
-typolithographic
-typolithography
-typologic
-typological
-typologically
-typologist
-typology
-typomania
-typometry
-typonym
-typonymal
-typonymic
-typonymous
-typophile
-typorama
-typoscript
-typotelegraph
-typotelegraphy
-typothere
-Typotheria
-Typotheriidae
-typothetae
-typp
-typtological
-typtologist
-typtology
-typy
-tyramine
-tyranness
-Tyranni
-tyrannial
-tyrannic
-tyrannical
-tyrannically
-tyrannicalness
-tyrannicidal
-tyrannicide
-tyrannicly
-Tyrannidae
-Tyrannides
-Tyranninae
-tyrannine
-tyrannism
-tyrannize
-tyrannizer
-tyrannizing
-tyrannizingly
-tyrannoid
-tyrannophobia
-tyrannosaur
-Tyrannosaurus
-tyrannous
-tyrannously
-tyrannousness
-Tyrannus
-tyranny
-tyrant
-tyrantcraft
-tyrantlike
-tyrantship
-tyre
-tyremesis
-Tyrian
-tyriasis
-tyro
-tyrocidin
-tyrocidine
-tyroglyphid
-Tyroglyphidae
-Tyroglyphus
-Tyrolean
-Tyrolese
-Tyrolienne
-tyrolite
-tyrology
-tyroma
-tyromancy
-tyromatous
-tyrone
-tyronic
-tyronism
-tyrosinase
-tyrosine
-tyrosinuria
-tyrosyl
-tyrotoxicon
-tyrotoxine
-Tyrr
-Tyrrhene
-Tyrrheni
-Tyrrhenian
-Tyrsenoi
-Tyrtaean
-tysonite
-tyste
-tyt
-Tyto
-Tytonidae
-Tzaam
-Tzapotec
-tzaritza
-Tzendal
-Tzental
-tzolkin
-tzontle
-Tzotzil
-Tzutuhil
-U
-u
-uang
-Uaraycu
-Uarekena
-Uaupe
-uayeb
-Ubbenite
-Ubbonite
-uberant
-uberous
-uberously
-uberousness
-uberty
-ubi
-ubication
-ubiety
-Ubii
-Ubiquarian
-ubiquarian
-ubiquious
-Ubiquist
-ubiquit
-Ubiquitarian
-ubiquitarian
-Ubiquitarianism
-ubiquitariness
-ubiquitary
-Ubiquitism
-Ubiquitist
-ubiquitous
-ubiquitously
-ubiquitousness
-ubiquity
-ubussu
-Uca
-Ucal
-Ucayale
-Uchean
-Uchee
-uckia
-Ud
-udal
-udaler
-udaller
-udalman
-udasi
-udder
-uddered
-udderful
-udderless
-udderlike
-udell
-Udi
-Udic
-Udish
-udo
-Udolphoish
-udometer
-udometric
-udometry
-udomograph
-Uds
-Ueueteotl
-ug
-Ugandan
-Ugarono
-ugh
-uglification
-uglifier
-uglify
-uglily
-ugliness
-uglisome
-ugly
-Ugrian
-Ugric
-Ugroid
-ugsome
-ugsomely
-ugsomeness
-uhlan
-uhllo
-uhtensang
-uhtsong
-Uigur
-Uigurian
-Uiguric
-uily
-uinal
-Uinta
-uintaite
-uintathere
-Uintatheriidae
-Uintatherium
-uintjie
-Uirina
-Uitotan
-uitspan
-uji
-ukase
-uke
-ukiyoye
-Ukrainer
-Ukrainian
-ukulele
-ula
-ulatrophia
-ulcer
-ulcerable
-ulcerate
-ulceration
-ulcerative
-ulcered
-ulceromembranous
-ulcerous
-ulcerously
-ulcerousness
-ulcery
-ulcuscle
-ulcuscule
-ule
-ulema
-ulemorrhagia
-ulerythema
-uletic
-Ulex
-ulex
-ulexine
-ulexite
-Ulidia
-Ulidian
-uliginose
-uliginous
-ulitis
-ull
-ulla
-ullage
-ullaged
-ullagone
-uller
-ulling
-ullmannite
-ulluco
-Ulmaceae
-ulmaceous
-Ulmaria
-ulmic
-ulmin
-ulminic
-ulmo
-ulmous
-Ulmus
-ulna
-ulnad
-ulnae
-ulnar
-ulnare
-ulnaria
-ulnocarpal
-ulnocondylar
-ulnometacarpal
-ulnoradial
-uloborid
-Uloboridae
-Uloborus
-ulocarcinoma
-uloid
-Ulonata
-uloncus
-Ulophocinae
-ulorrhagia
-ulorrhagy
-ulorrhea
-Ulothrix
-Ulotrichaceae
-ulotrichaceous
-Ulotrichales
-ulotrichan
-Ulotriches
-Ulotrichi
-ulotrichous
-ulotrichy
-ulrichite
-ulster
-ulstered
-ulsterette
-Ulsterian
-ulstering
-Ulsterite
-Ulsterman
-ulterior
-ulteriorly
-ultima
-ultimacy
-ultimata
-ultimate
-ultimately
-ultimateness
-ultimation
-ultimatum
-ultimity
-ultimo
-ultimobranchial
-ultimogenitary
-ultimogeniture
-ultimum
-Ultonian
-ultra
-ultrabasic
-ultrabasite
-ultrabelieving
-ultrabenevolent
-ultrabrachycephalic
-ultrabrachycephaly
-ultrabrilliant
-ultracentenarian
-ultracentenarianism
-ultracentralizer
-ultracentrifuge
-ultraceremonious
-ultrachurchism
-ultracivil
-ultracomplex
-ultraconcomitant
-ultracondenser
-ultraconfident
-ultraconscientious
-ultraconservatism
-ultraconservative
-ultracordial
-ultracosmopolitan
-ultracredulous
-ultracrepidarian
-ultracrepidarianism
-ultracrepidate
-ultracritical
-ultradandyism
-ultradeclamatory
-ultrademocratic
-ultradespotic
-ultradignified
-ultradiscipline
-ultradolichocephalic
-ultradolichocephaly
-ultradolichocranial
-ultraeducationist
-ultraeligible
-ultraelliptic
-ultraemphasis
-ultraenergetic
-ultraenforcement
-ultraenthusiasm
-ultraenthusiastic
-ultraepiscopal
-ultraevangelical
-ultraexcessive
-ultraexclusive
-ultraexpeditious
-ultrafantastic
-ultrafashionable
-ultrafastidious
-ultrafederalist
-ultrafeudal
-ultrafidian
-ultrafidianism
-ultrafilter
-ultrafilterability
-ultrafilterable
-ultrafiltrate
-ultrafiltration
-ultraformal
-ultrafrivolous
-ultragallant
-ultragaseous
-ultragenteel
-ultragood
-ultragrave
-ultraheroic
-ultrahonorable
-ultrahuman
-ultraimperialism
-ultraimperialist
-ultraimpersonal
-ultrainclusive
-ultraindifferent
-ultraindulgent
-ultraingenious
-ultrainsistent
-ultraintimate
-ultrainvolved
-ultraism
-ultraist
-ultraistic
-ultralaborious
-ultralegality
-ultralenient
-ultraliberal
-ultraliberalism
-ultralogical
-ultraloyal
-ultraluxurious
-ultramarine
-ultramaternal
-ultramaximal
-ultramelancholy
-ultramicrochemical
-ultramicrochemist
-ultramicrochemistry
-ultramicrometer
-ultramicron
-ultramicroscope
-ultramicroscopic
-ultramicroscopical
-ultramicroscopy
-ultraminute
-ultramoderate
-ultramodern
-ultramodernism
-ultramodernist
-ultramodernistic
-ultramodest
-ultramontane
-ultramontanism
-ultramontanist
-ultramorose
-ultramulish
-ultramundane
-ultranational
-ultranationalism
-ultranationalist
-ultranatural
-ultranegligent
-ultranice
-ultranonsensical
-ultraobscure
-ultraobstinate
-ultraofficious
-ultraoptimistic
-ultraornate
-ultraorthodox
-ultraorthodoxy
-ultraoutrageous
-ultrapapist
-ultraparallel
-ultraperfect
-ultrapersuasive
-ultraphotomicrograph
-ultrapious
-ultraplanetary
-ultraplausible
-ultrapopish
-ultraproud
-ultraprudent
-ultraradical
-ultraradicalism
-ultrarapid
-ultrareactionary
-ultrared
-ultrarefined
-ultrarefinement
-ultrareligious
-ultraremuneration
-ultrarepublican
-ultrarevolutionary
-ultrarevolutionist
-ultraritualism
-ultraromantic
-ultraroyalism
-ultraroyalist
-ultrasanguine
-ultrascholastic
-ultraselect
-ultraservile
-ultrasevere
-ultrashrewd
-ultrasimian
-ultrasolemn
-ultrasonic
-ultrasonics
-ultraspartan
-ultraspecialization
-ultraspiritualism
-ultrasplendid
-ultrastandardization
-ultrastellar
-ultrasterile
-ultrastrenuous
-ultrastrict
-ultrasubtle
-ultrasystematic
-ultratechnical
-ultratense
-ultraterrene
-ultraterrestrial
-ultratotal
-ultratrivial
-ultratropical
-ultraugly
-ultrauncommon
-ultraurgent
-ultravicious
-ultraviolent
-ultraviolet
-ultravirtuous
-ultravirus
-ultravisible
-ultrawealthy
-ultrawise
-ultrayoung
-ultrazealous
-ultrazodiacal
-ultroneous
-ultroneously
-ultroneousness
-ulu
-Ulua
-ulua
-uluhi
-ululant
-ululate
-ululation
-ululative
-ululatory
-ululu
-Ulva
-Ulvaceae
-ulvaceous
-Ulvales
-Ulvan
-Ulyssean
-Ulysses
-um
-umangite
-Umatilla
-Umaua
-umbeclad
-umbel
-umbeled
-umbella
-Umbellales
-umbellar
-umbellate
-umbellated
-umbellately
-umbellet
-umbellic
-umbellifer
-Umbelliferae
-umbelliferone
-umbelliferous
-umbelliflorous
-umbelliform
-umbelloid
-Umbellula
-Umbellularia
-umbellulate
-umbellule
-Umbellulidae
-umbelluliferous
-umbelwort
-umber
-umbethink
-umbilectomy
-umbilic
-umbilical
-umbilically
-umbilicar
-Umbilicaria
-umbilicate
-umbilicated
-umbilication
-umbilici
-umbiliciform
-umbilicus
-umbiliform
-umbilroot
-umble
-umbo
-umbolateral
-umbonal
-umbonate
-umbonated
-umbonation
-umbone
-umbones
-umbonial
-umbonic
-umbonulate
-umbonule
-Umbra
-umbra
-umbracious
-umbraciousness
-umbraculate
-umbraculiferous
-umbraculiform
-umbraculum
-umbrae
-umbrage
-umbrageous
-umbrageously
-umbrageousness
-umbral
-umbrally
-umbratile
-umbrel
-umbrella
-umbrellaed
-umbrellaless
-umbrellalike
-umbrellawise
-umbrellawort
-umbrette
-Umbrian
-Umbriel
-umbriferous
-umbriferously
-umbriferousness
-umbril
-umbrine
-umbrose
-umbrosity
-umbrous
-Umbundu
-ume
-umiak
-umiri
-umlaut
-ump
-umph
-umpirage
-umpire
-umpirer
-umpireship
-umpiress
-umpirism
-Umpqua
-umpteen
-umpteenth
-umptekite
-umptieth
-umpty
-umquhile
-umu
-un
-Una
-unabandoned
-unabased
-unabasedly
-unabashable
-unabashed
-unabashedly
-unabatable
-unabated
-unabatedly
-unabating
-unabatingly
-unabbreviated
-unabetted
-unabettedness
-unabhorred
-unabiding
-unabidingly
-unabidingness
-unability
-unabject
-unabjured
-unable
-unableness
-unably
-unabolishable
-unabolished
-unabraded
-unabrased
-unabridgable
-unabridged
-unabrogated
-unabrupt
-unabsent
-unabsolute
-unabsolvable
-unabsolved
-unabsolvedness
-unabsorb
-unabsorbable
-unabsorbed
-unabsorbent
-unabstract
-unabsurd
-unabundance
-unabundant
-unabundantly
-unabused
-unacademic
-unacademical
-unaccelerated
-unaccent
-unaccented
-unaccentuated
-unaccept
-unacceptability
-unacceptable
-unacceptableness
-unacceptably
-unacceptance
-unacceptant
-unaccepted
-unaccessibility
-unaccessible
-unaccessibleness
-unaccessibly
-unaccessional
-unaccessory
-unaccidental
-unaccidentally
-unaccidented
-unacclimated
-unacclimation
-unacclimatization
-unacclimatized
-unaccommodable
-unaccommodated
-unaccommodatedness
-unaccommodating
-unaccommodatingly
-unaccommodatingness
-unaccompanable
-unaccompanied
-unaccompanying
-unaccomplishable
-unaccomplished
-unaccomplishedness
-unaccord
-unaccordable
-unaccordance
-unaccordant
-unaccorded
-unaccording
-unaccordingly
-unaccostable
-unaccosted
-unaccountability
-unaccountable
-unaccountableness
-unaccountably
-unaccounted
-unaccoutered
-unaccoutred
-unaccreditated
-unaccredited
-unaccrued
-unaccumulable
-unaccumulate
-unaccumulated
-unaccumulation
-unaccuracy
-unaccurate
-unaccurately
-unaccurateness
-unaccursed
-unaccusable
-unaccusably
-unaccuse
-unaccusing
-unaccustom
-unaccustomed
-unaccustomedly
-unaccustomedness
-unachievable
-unachieved
-unaching
-unacidulated
-unacknowledged
-unacknowledgedness
-unacknowledging
-unacknowledgment
-unacoustic
-unacquaint
-unacquaintable
-unacquaintance
-unacquainted
-unacquaintedly
-unacquaintedness
-unacquiescent
-unacquirable
-unacquirableness
-unacquirably
-unacquired
-unacquit
-unacquittable
-unacquitted
-unacquittedness
-unact
-unactability
-unactable
-unacted
-unacting
-unactinic
-unaction
-unactivated
-unactive
-unactively
-unactiveness
-unactivity
-unactorlike
-unactual
-unactuality
-unactually
-unactuated
-unacute
-unacutely
-unadapt
-unadaptability
-unadaptable
-unadaptableness
-unadaptably
-unadapted
-unadaptedly
-unadaptedness
-unadaptive
-unadd
-unaddable
-unadded
-unaddicted
-unaddictedness
-unadditional
-unaddress
-unaddressed
-unadequate
-unadequately
-unadequateness
-unadherence
-unadherent
-unadherently
-unadhesive
-unadjacent
-unadjacently
-unadjectived
-unadjourned
-unadjournment
-unadjudged
-unadjust
-unadjustably
-unadjusted
-unadjustment
-unadministered
-unadmirable
-unadmire
-unadmired
-unadmiring
-unadmissible
-unadmissibly
-unadmission
-unadmittable
-unadmittableness
-unadmittably
-unadmitted
-unadmittedly
-unadmitting
-unadmonished
-unadopt
-unadoptable
-unadoptably
-unadopted
-unadoption
-unadorable
-unadoration
-unadored
-unadoring
-unadorn
-unadornable
-unadorned
-unadornedly
-unadornedness
-unadornment
-unadult
-unadulterate
-unadulterated
-unadulteratedly
-unadulteratedness
-unadulterately
-unadulterous
-unadulterously
-unadvanced
-unadvancedly
-unadvancedness
-unadvancement
-unadvancing
-unadvantaged
-unadvantageous
-unadventured
-unadventuring
-unadventurous
-unadventurously
-unadverse
-unadversely
-unadverseness
-unadvertency
-unadvertised
-unadvertisement
-unadvertising
-unadvisability
-unadvisable
-unadvisableness
-unadvisably
-unadvised
-unadvisedly
-unadvisedness
-unadvocated
-unaerated
-unaesthetic
-unaesthetical
-unafeard
-unafeared
-unaffable
-unaffably
-unaffected
-unaffectedly
-unaffectedness
-unaffecting
-unaffectionate
-unaffectionately
-unaffectioned
-unaffianced
-unaffied
-unaffiliated
-unaffiliation
-unaffirmation
-unaffirmed
-unaffixed
-unafflicted
-unafflictedly
-unafflicting
-unaffliction
-unaffordable
-unafforded
-unaffranchised
-unaffrighted
-unaffrightedly
-unaffronted
-unafire
-unafloat
-unaflow
-unafraid
-unaged
-unaggravated
-unaggravating
-unaggregated
-unaggression
-unaggressive
-unaggressively
-unaggressiveness
-unaghast
-unagile
-unagility
-unaging
-unagitated
-unagitatedly
-unagitatedness
-unagitation
-unagonize
-unagrarian
-unagreeable
-unagreeableness
-unagreeably
-unagreed
-unagreeing
-unagreement
-unagricultural
-unaidable
-unaided
-unaidedly
-unaiding
-unailing
-unaimed
-unaiming
-unaired
-unaisled
-Unakhotana
-unakin
-unakite
-unal
-Unalachtigo
-unalarm
-unalarmed
-unalarming
-Unalaska
-unalcoholized
-unaldermanly
-unalert
-unalertly
-unalertness
-unalgebraical
-unalienable
-unalienableness
-unalienably
-unalienated
-unalignable
-unaligned
-unalike
-unalimentary
-unalist
-unalive
-unallayable
-unallayably
-unallayed
-unalleged
-unallegorical
-unalleviably
-unalleviated
-unalleviation
-unalliable
-unallied
-unalliedly
-unalliedness
-unallotment
-unallotted
-unallow
-unallowable
-unallowed
-unallowedly
-unallowing
-unalloyed
-unallurable
-unallured
-unalluring
-unalluringly
-unalmsed
-unalone
-unaloud
-unalphabeted
-unalphabetic
-unalphabetical
-unalterability
-unalterable
-unalterableness
-unalterably
-unalteration
-unaltered
-unaltering
-unalternated
-unamalgamable
-unamalgamated
-unamalgamating
-unamassed
-unamazed
-unamazedly
-unambiguity
-unambiguous
-unambiguously
-unambiguousness
-unambition
-unambitious
-unambitiously
-unambitiousness
-unambrosial
-unambush
-unamenability
-unamenable
-unamenableness
-unamenably
-unamend
-unamendable
-unamended
-unamendedly
-unamending
-unamendment
-unamerced
-Unami
-unamiability
-unamiable
-unamiableness
-unamiably
-unamicable
-unamicably
-unamiss
-unamo
-unamortization
-unamortized
-unample
-unamplifiable
-unamplified
-unamply
-unamputated
-unamusable
-unamusably
-unamused
-unamusement
-unamusing
-unamusingly
-unamusive
-unanalogical
-unanalogous
-unanalogously
-unanalogousness
-unanalytic
-unanalytical
-unanalyzable
-unanalyzed
-unanalyzing
-unanatomizable
-unanatomized
-unancestored
-unancestried
-unanchor
-unanchored
-unanchylosed
-unancient
-unaneled
-unangelic
-unangelical
-unangrily
-unangry
-unangular
-unanimalized
-unanimate
-unanimated
-unanimatedly
-unanimatedness
-unanimately
-unanimism
-unanimist
-unanimistic
-unanimistically
-unanimity
-unanimous
-unanimously
-unanimousness
-unannealed
-unannex
-unannexed
-unannexedly
-unannexedness
-unannihilable
-unannihilated
-unannotated
-unannounced
-unannoyed
-unannoying
-unannullable
-unannulled
-unanointed
-unanswerability
-unanswerable
-unanswerableness
-unanswerably
-unanswered
-unanswering
-unantagonistic
-unantagonizable
-unantagonized
-unantagonizing
-unanticipated
-unanticipating
-unanticipatingly
-unanticipation
-unanticipative
-unantiquated
-unantiquatedness
-unantique
-unantiquity
-unanxiety
-unanxious
-unanxiously
-unanxiousness
-unapart
-unapocryphal
-unapologetic
-unapologizing
-unapostatized
-unapostolic
-unapostolical
-unapostolically
-unapostrophized
-unappalled
-unappareled
-unapparent
-unapparently
-unapparentness
-unappealable
-unappealableness
-unappealably
-unappealed
-unappealing
-unappeasable
-unappeasableness
-unappeasably
-unappeased
-unappeasedly
-unappeasedness
-unappendaged
-unapperceived
-unappertaining
-unappetizing
-unapplauded
-unapplauding
-unapplausive
-unappliable
-unappliableness
-unappliably
-unapplianced
-unapplicable
-unapplicableness
-unapplicably
-unapplied
-unapplying
-unappoint
-unappointable
-unappointableness
-unappointed
-unapportioned
-unapposite
-unappositely
-unappraised
-unappreciable
-unappreciableness
-unappreciably
-unappreciated
-unappreciating
-unappreciation
-unappreciative
-unappreciatively
-unappreciativeness
-unapprehendable
-unapprehendableness
-unapprehendably
-unapprehended
-unapprehending
-unapprehensible
-unapprehensibleness
-unapprehension
-unapprehensive
-unapprehensively
-unapprehensiveness
-unapprenticed
-unapprised
-unapprisedly
-unapprisedness
-unapproachability
-unapproachable
-unapproachableness
-unapproached
-unapproaching
-unapprobation
-unappropriable
-unappropriate
-unappropriated
-unappropriately
-unappropriateness
-unappropriation
-unapprovable
-unapprovableness
-unapprovably
-unapproved
-unapproving
-unapprovingly
-unapproximate
-unapproximately
-unaproned
-unapropos
-unapt
-unaptitude
-unaptly
-unaptness
-unarbitrarily
-unarbitrariness
-unarbitrary
-unarbitrated
-unarch
-unarchdeacon
-unarched
-unarchitectural
-unarduous
-unarguable
-unarguableness
-unarguably
-unargued
-unarguing
-unargumentative
-unargumentatively
-unarisen
-unarising
-unaristocratic
-unaristocratically
-unarithmetical
-unarithmetically
-unark
-unarm
-unarmed
-unarmedly
-unarmedness
-unarmored
-unarmorial
-unaromatized
-unarousable
-unaroused
-unarousing
-unarraignable
-unarraigned
-unarranged
-unarray
-unarrayed
-unarrestable
-unarrested
-unarresting
-unarrival
-unarrived
-unarriving
-unarrogance
-unarrogant
-unarrogating
-unarted
-unartful
-unartfully
-unartfulness
-unarticled
-unarticulate
-unarticulated
-unartificial
-unartificiality
-unartificially
-unartistic
-unartistical
-unartistically
-unartistlike
-unary
-unascendable
-unascendableness
-unascended
-unascertainable
-unascertainableness
-unascertainably
-unascertained
-unashamed
-unashamedly
-unashamedness
-unasinous
-unaskable
-unasked
-unasking
-unasleep
-unaspersed
-unasphalted
-unaspirated
-unaspiring
-unaspiringly
-unaspiringness
-unassailable
-unassailableness
-unassailably
-unassailed
-unassailing
-unassassinated
-unassaultable
-unassaulted
-unassayed
-unassaying
-unassembled
-unassented
-unassenting
-unasserted
-unassertive
-unassertiveness
-unassessable
-unassessableness
-unassessed
-unassibilated
-unassiduous
-unassignable
-unassignably
-unassigned
-unassimilable
-unassimilated
-unassimilating
-unassimilative
-unassisted
-unassisting
-unassociable
-unassociably
-unassociated
-unassociative
-unassociativeness
-unassoiled
-unassorted
-unassuageable
-unassuaged
-unassuaging
-unassuetude
-unassumable
-unassumed
-unassuming
-unassumingly
-unassumingness
-unassured
-unassuredly
-unassuredness
-unassuring
-unasterisk
-unastonish
-unastonished
-unastonishment
-unastray
-unathirst
-unathletically
-unatmospheric
-unatonable
-unatoned
-unatoning
-unattach
-unattachable
-unattached
-unattackable
-unattackableness
-unattackably
-unattacked
-unattainability
-unattainable
-unattainableness
-unattainably
-unattained
-unattaining
-unattainment
-unattaint
-unattainted
-unattaintedly
-unattempered
-unattemptable
-unattempted
-unattempting
-unattendance
-unattendant
-unattended
-unattentive
-unattenuated
-unattested
-unattestedness
-unattire
-unattired
-unattractable
-unattractableness
-unattracted
-unattracting
-unattractive
-unattractively
-unattractiveness
-unattributable
-unattributed
-unattuned
-unau
-unauctioned
-unaudible
-unaudibleness
-unaudibly
-unaudienced
-unaudited
-unaugmentable
-unaugmented
-unauspicious
-unauspiciously
-unauspiciousness
-unaustere
-unauthentic
-unauthentical
-unauthentically
-unauthenticated
-unauthenticity
-unauthorish
-unauthoritative
-unauthoritatively
-unauthoritativeness
-unauthoritied
-unauthoritiveness
-unauthorizable
-unauthorize
-unauthorized
-unauthorizedly
-unauthorizedness
-unautomatic
-unautumnal
-unavailability
-unavailable
-unavailableness
-unavailably
-unavailed
-unavailful
-unavailing
-unavailingly
-unavengeable
-unavenged
-unavenging
-unavenued
-unaveraged
-unaverred
-unaverted
-unavertible
-unavertibleness
-unavertibly
-unavian
-unavoidable
-unavoidableness
-unavoidably
-unavoidal
-unavoided
-unavoiding
-unavouchable
-unavouchableness
-unavouchably
-unavouched
-unavowable
-unavowableness
-unavowably
-unavowed
-unavowedly
-unawakable
-unawakableness
-unawake
-unawaked
-unawakened
-unawakenedness
-unawakening
-unawaking
-unawardable
-unawardableness
-unawardably
-unawarded
-unaware
-unawared
-unawaredly
-unawareness
-unawares
-unaway
-unawed
-unawful
-unawfully
-unawkward
-unawned
-unaxled
-unazotized
-unbackboarded
-unbacked
-unbackward
-unbadged
-unbaffled
-unbaffling
-unbag
-unbagged
-unbailable
-unbailableness
-unbailed
-unbain
-unbait
-unbaited
-unbaized
-unbaked
-unbalance
-unbalanceable
-unbalanceably
-unbalanced
-unbalancement
-unbalancing
-unbalconied
-unbale
-unbalked
-unballast
-unballasted
-unballoted
-unbandage
-unbandaged
-unbanded
-unbanished
-unbank
-unbankable
-unbankableness
-unbankably
-unbanked
-unbankrupt
-unbannered
-unbaptize
-unbaptized
-unbar
-unbarb
-unbarbarize
-unbarbarous
-unbarbed
-unbarbered
-unbare
-unbargained
-unbark
-unbarking
-unbaronet
-unbarrable
-unbarred
-unbarrel
-unbarreled
-unbarren
-unbarrenness
-unbarricade
-unbarricaded
-unbarricadoed
-unbase
-unbased
-unbasedness
-unbashful
-unbashfully
-unbashfulness
-unbasket
-unbastardized
-unbaste
-unbasted
-unbastilled
-unbastinadoed
-unbated
-unbathed
-unbating
-unbatted
-unbatten
-unbatterable
-unbattered
-unbattling
-unbay
-unbe
-unbeached
-unbeaconed
-unbeaded
-unbear
-unbearable
-unbearableness
-unbearably
-unbeard
-unbearded
-unbearing
-unbeast
-unbeatable
-unbeatableness
-unbeatably
-unbeaten
-unbeaued
-unbeauteous
-unbeauteously
-unbeauteousness
-unbeautified
-unbeautiful
-unbeautifully
-unbeautifulness
-unbeautify
-unbeavered
-unbeclogged
-unbeclouded
-unbecome
-unbecoming
-unbecomingly
-unbecomingness
-unbed
-unbedabbled
-unbedaggled
-unbedashed
-unbedaubed
-unbedded
-unbedecked
-unbedewed
-unbedimmed
-unbedinned
-unbedizened
-unbedraggled
-unbefit
-unbefitting
-unbefittingly
-unbefittingness
-unbefool
-unbefriend
-unbefriended
-unbefringed
-unbeget
-unbeggar
-unbegged
-unbegilt
-unbeginning
-unbeginningly
-unbeginningness
-unbegirded
-unbegirt
-unbegot
-unbegotten
-unbegottenly
-unbegottenness
-unbegreased
-unbegrimed
-unbegrudged
-unbeguile
-unbeguiled
-unbeguileful
-unbegun
-unbehaving
-unbeheaded
-unbeheld
-unbeholdable
-unbeholden
-unbeholdenness
-unbeholding
-unbehoveful
-unbehoving
-unbeing
-unbejuggled
-unbeknown
-unbeknownst
-unbelied
-unbelief
-unbeliefful
-unbelieffulness
-unbelievability
-unbelievable
-unbelievableness
-unbelievably
-unbelieve
-unbelieved
-unbeliever
-unbelieving
-unbelievingly
-unbelievingness
-unbell
-unbellicose
-unbelligerent
-unbelonging
-unbeloved
-unbelt
-unbemoaned
-unbemourned
-unbench
-unbend
-unbendable
-unbendableness
-unbendably
-unbended
-unbending
-unbendingly
-unbendingness
-unbendsome
-unbeneficed
-unbeneficent
-unbeneficial
-unbenefitable
-unbenefited
-unbenefiting
-unbenetted
-unbenevolence
-unbenevolent
-unbenevolently
-unbenight
-unbenighted
-unbenign
-unbenignant
-unbenignantly
-unbenignity
-unbenignly
-unbent
-unbenumb
-unbenumbed
-unbequeathable
-unbequeathed
-unbereaved
-unbereft
-unberouged
-unberth
-unberufen
-unbeseem
-unbeseeming
-unbeseemingly
-unbeseemingness
-unbeseemly
-unbeset
-unbesieged
-unbesmeared
-unbesmirched
-unbesmutted
-unbesot
-unbesought
-unbespeak
-unbespoke
-unbespoken
-unbesprinkled
-unbestarred
-unbestowed
-unbet
-unbeteared
-unbethink
-unbethought
-unbetide
-unbetoken
-unbetray
-unbetrayed
-unbetraying
-unbetrothed
-unbetterable
-unbettered
-unbeveled
-unbewailed
-unbewailing
-unbewilder
-unbewildered
-unbewilled
-unbewitch
-unbewitched
-unbewitching
-unbewrayed
-unbewritten
-unbias
-unbiasable
-unbiased
-unbiasedly
-unbiasedness
-unbibulous
-unbickered
-unbickering
-unbid
-unbidable
-unbiddable
-unbidden
-unbigged
-unbigoted
-unbilled
-unbillet
-unbilleted
-unbind
-unbindable
-unbinding
-unbiographical
-unbiological
-unbirdlike
-unbirdlimed
-unbirdly
-unbirthday
-unbishop
-unbishoply
-unbit
-unbiting
-unbitt
-unbitted
-unbitten
-unbitter
-unblacked
-unblackened
-unblade
-unblamable
-unblamableness
-unblamably
-unblamed
-unblaming
-unblanched
-unblanketed
-unblasphemed
-unblasted
-unblazoned
-unbleached
-unbleaching
-unbled
-unbleeding
-unblemishable
-unblemished
-unblemishedness
-unblemishing
-unblenched
-unblenching
-unblenchingly
-unblendable
-unblended
-unblent
-unbless
-unblessed
-unblessedness
-unblest
-unblighted
-unblightedly
-unblightedness
-unblind
-unblindfold
-unblinking
-unblinkingly
-unbliss
-unblissful
-unblistered
-unblithe
-unblithely
-unblock
-unblockaded
-unblocked
-unblooded
-unbloodied
-unbloodily
-unbloodiness
-unbloody
-unbloom
-unbloomed
-unblooming
-unblossomed
-unblossoming
-unblotted
-unbloused
-unblown
-unblued
-unbluestockingish
-unbluffed
-unbluffing
-unblunder
-unblundered
-unblundering
-unblunted
-unblurred
-unblush
-unblushing
-unblushingly
-unblushingness
-unboarded
-unboasted
-unboastful
-unboastfully
-unboasting
-unboat
-unbodied
-unbodiliness
-unbodily
-unboding
-unbodkined
-unbody
-unbodylike
-unbog
-unboggy
-unbohemianize
-unboiled
-unboisterous
-unbokel
-unbold
-unbolden
-unboldly
-unboldness
-unbolled
-unbolster
-unbolstered
-unbolt
-unbolted
-unbombast
-unbondable
-unbondableness
-unbonded
-unbone
-unboned
-unbonnet
-unbonneted
-unbonny
-unbooked
-unbookish
-unbooklearned
-unboot
-unbooted
-unboraxed
-unborder
-unbordered
-unbored
-unboring
-unborn
-unborne
-unborough
-unborrowed
-unborrowing
-unbosom
-unbosomer
-unbossed
-unbotanical
-unbothered
-unbothering
-unbottle
-unbottom
-unbottomed
-unbought
-unbound
-unboundable
-unboundableness
-unboundably
-unbounded
-unboundedly
-unboundedness
-unboundless
-unbounteous
-unbountiful
-unbountifully
-unbountifulness
-unbow
-unbowable
-unbowdlerized
-unbowed
-unbowel
-unboweled
-unbowered
-unbowing
-unbowingness
-unbowled
-unbowsome
-unbox
-unboxed
-unboy
-unboyish
-unboylike
-unbrace
-unbraced
-unbracedness
-unbracelet
-unbraceleted
-unbracing
-unbragged
-unbragging
-unbraid
-unbraided
-unbrailed
-unbrained
-unbran
-unbranched
-unbranching
-unbrand
-unbranded
-unbrandied
-unbrave
-unbraved
-unbravely
-unbraze
-unbreachable
-unbreached
-unbreaded
-unbreakable
-unbreakableness
-unbreakably
-unbreakfasted
-unbreaking
-unbreast
-unbreath
-unbreathable
-unbreathableness
-unbreathed
-unbreathing
-unbred
-unbreech
-unbreeched
-unbreezy
-unbrent
-unbrewed
-unbribable
-unbribableness
-unbribably
-unbribed
-unbribing
-unbrick
-unbridegroomlike
-unbridgeable
-unbridged
-unbridle
-unbridled
-unbridledly
-unbridledness
-unbridling
-unbrief
-unbriefed
-unbriefly
-unbright
-unbrightened
-unbrilliant
-unbrimming
-unbrined
-unbrittle
-unbroached
-unbroad
-unbroadcasted
-unbroidered
-unbroiled
-unbroke
-unbroken
-unbrokenly
-unbrokenness
-unbronzed
-unbrooch
-unbrooded
-unbrookable
-unbrookably
-unbrothered
-unbrotherlike
-unbrotherliness
-unbrotherly
-unbrought
-unbrown
-unbrowned
-unbruised
-unbrushed
-unbrutalize
-unbrutalized
-unbrute
-unbrutelike
-unbrutify
-unbrutize
-unbuckle
-unbuckramed
-unbud
-unbudded
-unbudgeability
-unbudgeable
-unbudgeableness
-unbudgeably
-unbudged
-unbudgeted
-unbudging
-unbuffed
-unbuffered
-unbuffeted
-unbuild
-unbuilded
-unbuilt
-unbulky
-unbulled
-unbulletined
-unbumped
-unbumptious
-unbunched
-unbundle
-unbundled
-unbung
-unbungling
-unbuoyant
-unbuoyed
-unburden
-unburdened
-unburdenment
-unburdensome
-unburdensomeness
-unburgessed
-unburiable
-unburial
-unburied
-unburlesqued
-unburly
-unburn
-unburnable
-unburned
-unburning
-unburnished
-unburnt
-unburrow
-unburrowed
-unburst
-unburstable
-unburstableness
-unburthen
-unbury
-unbush
-unbusied
-unbusily
-unbusiness
-unbusinesslike
-unbusk
-unbuskin
-unbuskined
-unbustling
-unbusy
-unbutchered
-unbutcherlike
-unbuttered
-unbutton
-unbuttoned
-unbuttonment
-unbuttressed
-unbuxom
-unbuxomly
-unbuxomness
-unbuyable
-unbuyableness
-unbuying
-unca
-uncabined
-uncabled
-uncadenced
-uncage
-uncaged
-uncake
-uncalcareous
-uncalcified
-uncalcined
-uncalculable
-uncalculableness
-uncalculably
-uncalculated
-uncalculating
-uncalculatingly
-uncalendered
-uncalk
-uncalked
-uncall
-uncalled
-uncallow
-uncallower
-uncalm
-uncalmed
-uncalmly
-uncalumniated
-uncambered
-uncamerated
-uncamouflaged
-uncanceled
-uncancellable
-uncancelled
-uncandid
-uncandidly
-uncandidness
-uncandied
-uncandor
-uncaned
-uncankered
-uncanned
-uncannily
-uncanniness
-uncanny
-uncanonic
-uncanonical
-uncanonically
-uncanonicalness
-uncanonize
-uncanonized
-uncanopied
-uncantoned
-uncantonized
-uncanvassably
-uncanvassed
-uncap
-uncapable
-uncapableness
-uncapably
-uncapacious
-uncapacitate
-uncaparisoned
-uncapitalized
-uncapped
-uncapper
-uncapsizable
-uncapsized
-uncaptained
-uncaptioned
-uncaptious
-uncaptiously
-uncaptivate
-uncaptivated
-uncaptivating
-uncaptived
-uncapturable
-uncaptured
-uncarbonated
-uncarboned
-uncarbureted
-uncarded
-uncardinal
-uncardinally
-uncareful
-uncarefully
-uncarefulness
-uncaressed
-uncargoed
-Uncaria
-uncaricatured
-uncaring
-uncarnate
-uncarnivorous
-uncaroled
-uncarpentered
-uncarpeted
-uncarriageable
-uncarried
-uncart
-uncarted
-uncartooned
-uncarved
-uncase
-uncased
-uncasemated
-uncask
-uncasked
-uncasketed
-uncasque
-uncassock
-uncast
-uncaste
-uncastigated
-uncastle
-uncastled
-uncastrated
-uncasual
-uncatalogued
-uncatchable
-uncate
-uncatechised
-uncatechisedness
-uncatechized
-uncatechizedness
-uncategorized
-uncathedraled
-uncatholcity
-uncatholic
-uncatholical
-uncatholicalness
-uncatholicize
-uncatholicly
-uncaucusable
-uncaught
-uncausatively
-uncaused
-uncauterized
-uncautious
-uncautiously
-uncautiousness
-uncavalier
-uncavalierly
-uncave
-unceasable
-unceased
-unceasing
-unceasingly
-unceasingness
-unceded
-unceiled
-unceilinged
-uncelebrated
-uncelebrating
-uncelestial
-uncelestialized
-uncellar
-uncement
-uncemented
-uncementing
-uncensorable
-uncensored
-uncensorious
-uncensoriously
-uncensoriousness
-uncensurable
-uncensured
-uncensuring
-uncenter
-uncentered
-uncentral
-uncentrality
-uncentrally
-uncentred
-uncentury
-uncereclothed
-unceremented
-unceremonial
-unceremonious
-unceremoniously
-unceremoniousness
-uncertain
-uncertainly
-uncertainness
-uncertainty
-uncertifiable
-uncertifiableness
-uncertificated
-uncertified
-uncertifying
-uncertitude
-uncessant
-uncessantly
-uncessantness
-unchafed
-unchain
-unchainable
-unchained
-unchair
-unchaired
-unchalked
-unchallengeable
-unchallengeableness
-unchallengeably
-unchallenged
-unchallenging
-unchambered
-unchamfered
-unchampioned
-unchance
-unchancellor
-unchancy
-unchange
-unchangeability
-unchangeable
-unchangeableness
-unchangeably
-unchanged
-unchangedness
-unchangeful
-unchangefulness
-unchanging
-unchangingly
-unchangingness
-unchanneled
-unchannelled
-unchanted
-unchaperoned
-unchaplain
-unchapleted
-unchapter
-unchaptered
-uncharacter
-uncharactered
-uncharacteristic
-uncharacteristically
-uncharacterized
-uncharge
-unchargeable
-uncharged
-uncharging
-uncharily
-unchariness
-unchariot
-uncharitable
-uncharitableness
-uncharitably
-uncharity
-uncharm
-uncharmable
-uncharmed
-uncharming
-uncharnel
-uncharred
-uncharted
-unchartered
-unchary
-unchased
-unchaste
-unchastely
-unchastened
-unchasteness
-unchastisable
-unchastised
-unchastising
-unchastity
-unchatteled
-unchauffeured
-unchawed
-uncheat
-uncheated
-uncheating
-uncheck
-uncheckable
-unchecked
-uncheckered
-uncheerable
-uncheered
-uncheerful
-uncheerfully
-uncheerfulness
-uncheerily
-uncheeriness
-uncheering
-uncheery
-unchemical
-unchemically
-uncherished
-uncherishing
-unchested
-unchevroned
-unchewable
-unchewableness
-unchewed
-unchid
-unchidden
-unchided
-unchiding
-unchidingly
-unchild
-unchildish
-unchildishly
-unchildishness
-unchildlike
-unchilled
-unchiming
-unchinked
-unchipped
-unchiseled
-unchiselled
-unchivalric
-unchivalrous
-unchivalrously
-unchivalrousness
-unchivalry
-unchloridized
-unchoicely
-unchokable
-unchoked
-uncholeric
-unchoosable
-unchopped
-unchoral
-unchorded
-unchosen
-unchrisom
-unchristen
-unchristened
-unchristian
-unchristianity
-unchristianize
-unchristianized
-unchristianlike
-unchristianly
-unchristianness
-unchronicled
-unchronological
-unchronologically
-unchurch
-unchurched
-unchurchlike
-unchurchly
-unchurn
-unci
-uncia
-uncial
-uncialize
-uncially
-uncicatrized
-unciferous
-unciform
-unciliated
-uncinal
-Uncinaria
-uncinariasis
-uncinariatic
-Uncinata
-uncinate
-uncinated
-uncinatum
-uncinch
-uncinct
-uncinctured
-uncini
-Uncinula
-uncinus
-uncipher
-uncircular
-uncircularized
-uncirculated
-uncircumcised
-uncircumcisedness
-uncircumcision
-uncircumlocutory
-uncircumscribable
-uncircumscribed
-uncircumscribedness
-uncircumscript
-uncircumscriptible
-uncircumscription
-uncircumspect
-uncircumspection
-uncircumspectly
-uncircumspectness
-uncircumstanced
-uncircumstantial
-uncirostrate
-uncite
-uncited
-uncitied
-uncitizen
-uncitizenlike
-uncitizenly
-uncity
-uncivic
-uncivil
-uncivilish
-uncivility
-uncivilizable
-uncivilization
-uncivilize
-uncivilized
-uncivilizedly
-uncivilizedness
-uncivilly
-uncivilness
-unclad
-unclaimed
-unclaiming
-unclamorous
-unclamp
-unclamped
-unclarified
-unclarifying
-unclarity
-unclashing
-unclasp
-unclasped
-unclassable
-unclassableness
-unclassably
-unclassed
-unclassible
-unclassical
-unclassically
-unclassifiable
-unclassifiableness
-unclassification
-unclassified
-unclassify
-unclassifying
-unclawed
-unclay
-unclayed
-uncle
-unclead
-unclean
-uncleanable
-uncleaned
-uncleanlily
-uncleanliness
-uncleanly
-uncleanness
-uncleansable
-uncleanse
-uncleansed
-uncleansedness
-unclear
-uncleared
-unclearing
-uncleavable
-uncleave
-uncledom
-uncleft
-unclehood
-unclement
-unclemently
-unclementness
-unclench
-unclergy
-unclergyable
-unclerical
-unclericalize
-unclerically
-unclericalness
-unclerklike
-unclerkly
-uncleship
-unclever
-uncleverly
-uncleverness
-unclew
-unclick
-uncliented
-unclify
-unclimaxed
-unclimb
-unclimbable
-unclimbableness
-unclimbably
-unclimbed
-unclimbing
-unclinch
-uncling
-unclinical
-unclip
-unclipped
-unclipper
-uncloak
-uncloakable
-uncloaked
-unclog
-unclogged
-uncloister
-uncloistered
-uncloistral
-unclosable
-unclose
-unclosed
-uncloseted
-unclothe
-unclothed
-unclothedly
-unclothedness
-unclotted
-uncloud
-unclouded
-uncloudedly
-uncloudedness
-uncloudy
-unclout
-uncloven
-uncloyable
-uncloyed
-uncloying
-unclub
-unclubbable
-unclubby
-unclustered
-unclustering
-unclutch
-unclutchable
-unclutched
-unclutter
-uncluttered
-unco
-uncoach
-uncoachable
-uncoachableness
-uncoached
-uncoacted
-uncoagulable
-uncoagulated
-uncoagulating
-uncoat
-uncoated
-uncoatedness
-uncoaxable
-uncoaxed
-uncoaxing
-uncock
-uncocked
-uncockneyfy
-uncocted
-uncodded
-uncoddled
-uncoded
-uncodified
-uncoerced
-uncoffer
-uncoffin
-uncoffined
-uncoffle
-uncogent
-uncogged
-uncogitable
-uncognizable
-uncognizant
-uncognized
-uncognoscibility
-uncognoscible
-uncoguidism
-uncoherent
-uncoherently
-uncoherentness
-uncohesive
-uncoif
-uncoifed
-uncoil
-uncoiled
-uncoin
-uncoined
-uncoked
-uncoking
-uncollapsed
-uncollapsible
-uncollar
-uncollared
-uncollated
-uncollatedness
-uncollected
-uncollectedly
-uncollectedness
-uncollectible
-uncollectibleness
-uncollectibly
-uncolleged
-uncollegian
-uncollegiate
-uncolloquial
-uncolloquially
-uncolonellike
-uncolonial
-uncolonize
-uncolonized
-uncolorable
-uncolorably
-uncolored
-uncoloredly
-uncoloredness
-uncoloured
-uncolouredly
-uncolouredness
-uncolt
-uncoly
-uncombable
-uncombatable
-uncombated
-uncombed
-uncombinable
-uncombinableness
-uncombinably
-uncombine
-uncombined
-uncombining
-uncombiningness
-uncombustible
-uncome
-uncomelily
-uncomeliness
-uncomely
-uncomfort
-uncomfortable
-uncomfortableness
-uncomfortably
-uncomforted
-uncomforting
-uncomfy
-uncomic
-uncommanded
-uncommandedness
-uncommanderlike
-uncommemorated
-uncommenced
-uncommendable
-uncommendableness
-uncommendably
-uncommended
-uncommensurability
-uncommensurable
-uncommensurableness
-uncommensurate
-uncommented
-uncommenting
-uncommerciable
-uncommercial
-uncommercially
-uncommercialness
-uncommingled
-uncomminuted
-uncommiserated
-uncommiserating
-uncommissioned
-uncommitted
-uncommitting
-uncommixed
-uncommodious
-uncommodiously
-uncommodiousness
-uncommon
-uncommonable
-uncommonly
-uncommonness
-uncommonplace
-uncommunicable
-uncommunicableness
-uncommunicably
-uncommunicated
-uncommunicating
-uncommunicative
-uncommunicatively
-uncommunicativeness
-uncommutable
-uncommutative
-uncommuted
-uncompact
-uncompacted
-Uncompahgre
-uncompahgrite
-uncompaniable
-uncompanied
-uncompanioned
-uncomparable
-uncomparably
-uncompared
-uncompass
-uncompassable
-uncompassed
-uncompassion
-uncompassionate
-uncompassionated
-uncompassionately
-uncompassionateness
-uncompassionating
-uncompassioned
-uncompatible
-uncompatibly
-uncompellable
-uncompelled
-uncompelling
-uncompensable
-uncompensated
-uncompetent
-uncompetitive
-uncompiled
-uncomplacent
-uncomplained
-uncomplaining
-uncomplainingly
-uncomplainingness
-uncomplaint
-uncomplaisance
-uncomplaisant
-uncomplaisantly
-uncomplemental
-uncompletable
-uncomplete
-uncompleted
-uncompletely
-uncompleteness
-uncomplex
-uncompliability
-uncompliable
-uncompliableness
-uncompliance
-uncompliant
-uncomplicated
-uncomplimentary
-uncomplimented
-uncomplimenting
-uncomplying
-uncomposable
-uncomposeable
-uncomposed
-uncompoundable
-uncompounded
-uncompoundedly
-uncompoundedness
-uncompounding
-uncomprehended
-uncomprehending
-uncomprehendingly
-uncomprehendingness
-uncomprehensible
-uncomprehension
-uncomprehensive
-uncomprehensively
-uncomprehensiveness
-uncompressed
-uncompressible
-uncomprised
-uncomprising
-uncomprisingly
-uncompromised
-uncompromising
-uncompromisingly
-uncompromisingness
-uncompulsive
-uncompulsory
-uncomputable
-uncomputableness
-uncomputably
-uncomputed
-uncomraded
-unconcatenated
-unconcatenating
-unconcealable
-unconcealableness
-unconcealably
-unconcealed
-unconcealing
-unconcealingly
-unconcealment
-unconceded
-unconceited
-unconceivable
-unconceivableness
-unconceivably
-unconceived
-unconceiving
-unconcern
-unconcerned
-unconcernedly
-unconcernedness
-unconcerning
-unconcernment
-unconcertable
-unconcerted
-unconcertedly
-unconcertedness
-unconcessible
-unconciliable
-unconciliated
-unconciliatedness
-unconciliating
-unconciliatory
-unconcludable
-unconcluded
-unconcluding
-unconcludingness
-unconclusive
-unconclusively
-unconclusiveness
-unconcocted
-unconcordant
-unconcrete
-unconcreted
-unconcurrent
-unconcurring
-uncondemnable
-uncondemned
-uncondensable
-uncondensableness
-uncondensed
-uncondensing
-uncondescending
-uncondescension
-uncondition
-unconditional
-unconditionality
-unconditionally
-unconditionalness
-unconditionate
-unconditionated
-unconditionately
-unconditioned
-unconditionedly
-unconditionedness
-uncondoled
-uncondoling
-unconducing
-unconducive
-unconduciveness
-unconducted
-unconductive
-unconductiveness
-unconfected
-unconfederated
-unconferred
-unconfess
-unconfessed
-unconfessing
-unconfided
-unconfidence
-unconfident
-unconfidential
-unconfidentialness
-unconfidently
-unconfiding
-unconfinable
-unconfine
-unconfined
-unconfinedly
-unconfinedness
-unconfinement
-unconfining
-unconfirm
-unconfirmative
-unconfirmed
-unconfirming
-unconfiscable
-unconfiscated
-unconflicting
-unconflictingly
-unconflictingness
-unconformability
-unconformable
-unconformableness
-unconformably
-unconformed
-unconformedly
-unconforming
-unconformist
-unconformity
-unconfound
-unconfounded
-unconfoundedly
-unconfrontable
-unconfronted
-unconfusable
-unconfusably
-unconfused
-unconfusedly
-unconfutable
-unconfuted
-unconfuting
-uncongeal
-uncongealable
-uncongealed
-uncongenial
-uncongeniality
-uncongenially
-uncongested
-unconglobated
-unconglomerated
-unconglutinated
-uncongratulate
-uncongratulated
-uncongratulating
-uncongregated
-uncongregational
-uncongressional
-uncongruous
-unconjecturable
-unconjectured
-unconjoined
-unconjugal
-unconjugated
-unconjunctive
-unconjured
-unconnected
-unconnectedly
-unconnectedness
-unconned
-unconnived
-unconniving
-unconquerable
-unconquerableness
-unconquerably
-unconquered
-unconscienced
-unconscient
-unconscientious
-unconscientiously
-unconscientiousness
-unconscionable
-unconscionableness
-unconscionably
-unconscious
-unconsciously
-unconsciousness
-unconsecrate
-unconsecrated
-unconsecratedly
-unconsecratedness
-unconsecration
-unconsecutive
-unconsent
-unconsentaneous
-unconsented
-unconsenting
-unconsequential
-unconsequentially
-unconsequentialness
-unconservable
-unconservative
-unconserved
-unconserving
-unconsiderable
-unconsiderate
-unconsiderately
-unconsiderateness
-unconsidered
-unconsideredly
-unconsideredness
-unconsidering
-unconsideringly
-unconsignable
-unconsigned
-unconsistent
-unconsociable
-unconsociated
-unconsolable
-unconsolably
-unconsolatory
-unconsoled
-unconsolidated
-unconsolidating
-unconsolidation
-unconsoling
-unconsonancy
-unconsonant
-unconsonantly
-unconsonous
-unconspicuous
-unconspicuously
-unconspicuousness
-unconspired
-unconspiring
-unconspiringly
-unconspiringness
-unconstancy
-unconstant
-unconstantly
-unconstantness
-unconstellated
-unconstipated
-unconstituted
-unconstitutional
-unconstitutionalism
-unconstitutionality
-unconstitutionally
-unconstrainable
-unconstrained
-unconstrainedly
-unconstrainedness
-unconstraining
-unconstraint
-unconstricted
-unconstruable
-unconstructed
-unconstructive
-unconstructural
-unconstrued
-unconsular
-unconsult
-unconsultable
-unconsulted
-unconsulting
-unconsumable
-unconsumed
-unconsuming
-unconsummate
-unconsummated
-unconsumptive
-uncontagious
-uncontainable
-uncontainableness
-uncontainably
-uncontained
-uncontaminable
-uncontaminate
-uncontaminated
-uncontemned
-uncontemnedly
-uncontemplated
-uncontemporaneous
-uncontemporary
-uncontemptuous
-uncontended
-uncontending
-uncontent
-uncontentable
-uncontented
-uncontentedly
-uncontentedness
-uncontenting
-uncontentingness
-uncontentious
-uncontentiously
-uncontentiousness
-uncontestable
-uncontestableness
-uncontestably
-uncontested
-uncontestedly
-uncontestedness
-uncontinence
-uncontinent
-uncontinental
-uncontinented
-uncontinently
-uncontinual
-uncontinued
-uncontinuous
-uncontorted
-uncontract
-uncontracted
-uncontractedness
-uncontractile
-uncontradictable
-uncontradictableness
-uncontradictably
-uncontradicted
-uncontradictedly
-uncontradictious
-uncontradictory
-uncontrastable
-uncontrasted
-uncontrasting
-uncontributed
-uncontributing
-uncontributory
-uncontrite
-uncontrived
-uncontriving
-uncontrol
-uncontrollability
-uncontrollable
-uncontrollableness
-uncontrollably
-uncontrolled
-uncontrolledly
-uncontrolledness
-uncontrolling
-uncontroversial
-uncontroversially
-uncontrovertable
-uncontrovertableness
-uncontrovertably
-uncontroverted
-uncontrovertedly
-uncontrovertible
-uncontrovertibleness
-uncontrovertibly
-unconvenable
-unconvened
-unconvenience
-unconvenient
-unconveniently
-unconventional
-unconventionalism
-unconventionality
-unconventionalize
-unconventionally
-unconventioned
-unconversable
-unconversableness
-unconversably
-unconversant
-unconversational
-unconversion
-unconvert
-unconverted
-unconvertedly
-unconvertedness
-unconvertibility
-unconvertible
-unconveyable
-unconveyed
-unconvicted
-unconvicting
-unconvince
-unconvinced
-unconvincedly
-unconvincedness
-unconvincibility
-unconvincible
-unconvincing
-unconvincingly
-unconvincingness
-unconvoluted
-unconvoyed
-unconvulsed
-uncookable
-uncooked
-uncooled
-uncoop
-uncooped
-uncoopered
-uncooping
-uncope
-uncopiable
-uncopied
-uncopious
-uncopyrighted
-uncoquettish
-uncoquettishly
-uncord
-uncorded
-uncordial
-uncordiality
-uncordially
-uncording
-uncore
-uncored
-uncork
-uncorked
-uncorker
-uncorking
-uncorned
-uncorner
-uncoronated
-uncoroneted
-uncorporal
-uncorpulent
-uncorrect
-uncorrectable
-uncorrected
-uncorrectible
-uncorrectly
-uncorrectness
-uncorrelated
-uncorrespondency
-uncorrespondent
-uncorresponding
-uncorrigible
-uncorrigibleness
-uncorrigibly
-uncorroborated
-uncorroded
-uncorrugated
-uncorrupt
-uncorrupted
-uncorruptedly
-uncorruptedness
-uncorruptibility
-uncorruptible
-uncorruptibleness
-uncorruptibly
-uncorrupting
-uncorruption
-uncorruptive
-uncorruptly
-uncorruptness
-uncorseted
-uncosseted
-uncost
-uncostliness
-uncostly
-uncostumed
-uncottoned
-uncouch
-uncouched
-uncouching
-uncounselable
-uncounseled
-uncounsellable
-uncounselled
-uncountable
-uncountableness
-uncountably
-uncounted
-uncountenanced
-uncounteracted
-uncounterbalanced
-uncounterfeit
-uncounterfeited
-uncountermandable
-uncountermanded
-uncountervailed
-uncountess
-uncountrified
-uncouple
-uncoupled
-uncoupler
-uncourageous
-uncoursed
-uncourted
-uncourteous
-uncourteously
-uncourteousness
-uncourtierlike
-uncourting
-uncourtlike
-uncourtliness
-uncourtly
-uncous
-uncousinly
-uncouth
-uncouthie
-uncouthly
-uncouthness
-uncouthsome
-uncovenant
-uncovenanted
-uncover
-uncoverable
-uncovered
-uncoveredly
-uncoveted
-uncoveting
-uncovetingly
-uncovetous
-uncowed
-uncowl
-uncoy
-uncracked
-uncradled
-uncraftily
-uncraftiness
-uncrafty
-uncram
-uncramp
-uncramped
-uncrampedness
-uncranked
-uncrannied
-uncrated
-uncravatted
-uncraven
-uncraving
-uncravingly
-uncrazed
-uncream
-uncreased
-uncreatability
-uncreatable
-uncreatableness
-uncreate
-uncreated
-uncreatedness
-uncreating
-uncreation
-uncreative
-uncreativeness
-uncreaturely
-uncredentialed
-uncredentialled
-uncredibility
-uncredible
-uncredibly
-uncreditable
-uncreditableness
-uncreditably
-uncredited
-uncrediting
-uncredulous
-uncreeping
-uncreosoted
-uncrest
-uncrested
-uncrevassed
-uncrib
-uncried
-uncrime
-uncriminal
-uncriminally
-uncrinkle
-uncrinkled
-uncrinkling
-uncrippled
-uncrisp
-uncritical
-uncritically
-uncriticisable
-uncriticised
-uncriticising
-uncriticisingly
-uncriticism
-uncriticizable
-uncriticized
-uncriticizing
-uncriticizingly
-uncrochety
-uncrook
-uncrooked
-uncrooking
-uncropped
-uncropt
-uncross
-uncrossable
-uncrossableness
-uncrossed
-uncrossexaminable
-uncrossexamined
-uncrossly
-uncrowded
-uncrown
-uncrowned
-uncrowning
-uncrucified
-uncrudded
-uncrude
-uncruel
-uncrumbled
-uncrumple
-uncrumpling
-uncrushable
-uncrushed
-uncrusted
-uncrying
-uncrystaled
-uncrystalled
-uncrystalline
-uncrystallizability
-uncrystallizable
-uncrystallized
-unction
-unctional
-unctioneer
-unctionless
-unctious
-unctiousness
-unctorium
-unctuose
-unctuosity
-unctuous
-unctuously
-unctuousness
-uncubbed
-uncubic
-uncuckold
-uncuckolded
-uncudgelled
-uncuffed
-uncular
-unculled
-uncultivability
-uncultivable
-uncultivate
-uncultivated
-uncultivation
-unculturable
-unculture
-uncultured
-uncumber
-uncumbered
-uncumbrous
-uncunning
-uncunningly
-uncunningness
-uncupped
-uncurable
-uncurableness
-uncurably
-uncurb
-uncurbable
-uncurbed
-uncurbedly
-uncurbing
-uncurd
-uncurdled
-uncurdling
-uncured
-uncurious
-uncuriously
-uncurl
-uncurled
-uncurling
-uncurrent
-uncurrently
-uncurrentness
-uncurricularized
-uncurried
-uncurse
-uncursed
-uncursing
-uncurst
-uncurtailed
-uncurtain
-uncurtained
-uncus
-uncushioned
-uncusped
-uncustomable
-uncustomarily
-uncustomariness
-uncustomary
-uncustomed
-uncut
-uncuth
-uncuticulate
-uncuttable
-uncynical
-uncynically
-uncypress
-undabbled
-undaggled
-undaily
-undaintiness
-undainty
-undallying
-undam
-undamageable
-undamaged
-undamaging
-undamasked
-undammed
-undamming
-undamn
-undamped
-undancing
-undandiacal
-undandled
-undangered
-undangerous
-undangerousness
-undared
-undaring
-undark
-undarken
-undarkened
-undarned
-undashed
-undatable
-undate
-undateable
-undated
-undatedness
-undaub
-undaubed
-undaughter
-undaughterliness
-undaughterly
-undauntable
-undaunted
-undauntedly
-undauntedness
-undaunting
-undawned
-undawning
-undazed
-undazing
-undazzle
-undazzled
-undazzling
-unde
-undead
-undeadened
-undeaf
-undealable
-undealt
-undean
-undear
-undebarred
-undebased
-undebatable
-undebated
-undebating
-undebauched
-undebilitated
-undebilitating
-undecagon
-undecanaphthene
-undecane
-undecatoic
-undecayable
-undecayableness
-undecayed
-undecayedness
-undecaying
-undeceased
-undeceitful
-undeceivable
-undeceivableness
-undeceivably
-undeceive
-undeceived
-undeceiver
-undeceiving
-undecency
-undecennary
-undecennial
-undecent
-undecently
-undeception
-undeceptious
-undeceptitious
-undeceptive
-undecidable
-undecide
-undecided
-undecidedly
-undecidedness
-undeciding
-undecimal
-undeciman
-undecimole
-undecipher
-undecipherability
-undecipherable
-undecipherably
-undeciphered
-undecision
-undecisive
-undecisively
-undecisiveness
-undeck
-undecked
-undeclaimed
-undeclaiming
-undeclamatory
-undeclarable
-undeclare
-undeclared
-undeclinable
-undeclinableness
-undeclinably
-undeclined
-undeclining
-undecocted
-undecoic
-undecolic
-undecomposable
-undecomposed
-undecompounded
-undecorated
-undecorative
-undecorous
-undecorously
-undecorousness
-undecorticated
-undecoyed
-undecreased
-undecreasing
-undecree
-undecreed
-undecried
-undecyl
-undecylenic
-undecylic
-undedicate
-undedicated
-undeducible
-undeducted
-undeeded
-undeemed
-undeemous
-undeemously
-undeep
-undefaceable
-undefaced
-undefalcated
-undefamed
-undefaming
-undefatigable
-undefaulted
-undefaulting
-undefeasible
-undefeat
-undefeatable
-undefeated
-undefeatedly
-undefeatedness
-undefecated
-undefectible
-undefective
-undefectiveness
-undefendable
-undefendableness
-undefendably
-undefended
-undefending
-undefense
-undefensed
-undefensible
-undeferential
-undeferentially
-undeferred
-undefiant
-undeficient
-undefied
-undefilable
-undefiled
-undefiledly
-undefiledness
-undefinable
-undefinableness
-undefinably
-undefine
-undefined
-undefinedly
-undefinedness
-undeflected
-undeflowered
-undeformed
-undeformedness
-undefrauded
-undefrayed
-undeft
-undegeneracy
-undegenerate
-undegenerated
-undegenerating
-undegraded
-undegrading
-undeification
-undeified
-undeify
-undeistical
-undejected
-undelated
-undelayable
-undelayed
-undelayedly
-undelaying
-undelayingly
-undelectable
-undelectably
-undelegated
-undeleted
-undeliberate
-undeliberated
-undeliberately
-undeliberateness
-undeliberating
-undeliberatingly
-undeliberative
-undeliberativeness
-undelible
-undelicious
-undelight
-undelighted
-undelightful
-undelightfully
-undelightfulness
-undelighting
-undelightsome
-undelimited
-undelineated
-undeliverable
-undeliverableness
-undelivered
-undelivery
-undeludable
-undelude
-undeluded
-undeluding
-undeluged
-undelusive
-undelusively
-undelve
-undelved
-undelylene
-undemagnetizable
-undemanded
-undemised
-undemocratic
-undemocratically
-undemocratize
-undemolishable
-undemolished
-undemonstrable
-undemonstrably
-undemonstratable
-undemonstrated
-undemonstrative
-undemonstratively
-undemonstrativeness
-undemure
-undemurring
-unden
-undeniable
-undeniableness
-undeniably
-undenied
-undeniedly
-undenizened
-undenominated
-undenominational
-undenominationalism
-undenominationalist
-undenominationalize
-undenominationally
-undenoted
-undenounced
-undenuded
-undepartableness
-undepartably
-undeparted
-undeparting
-undependable
-undependableness
-undependably
-undependent
-undepending
-undephlegmated
-undepicted
-undepleted
-undeplored
-undeported
-undeposable
-undeposed
-undeposited
-undepraved
-undepravedness
-undeprecated
-undepreciated
-undepressed
-undepressible
-undepressing
-undeprivable
-undeprived
-undepurated
-undeputed
-under
-underabyss
-underaccident
-underaccommodated
-underact
-underacted
-underacting
-underaction
-underactor
-underadjustment
-underadmiral
-underadventurer
-underage
-underagency
-underagent
-underagitation
-underaid
-underaim
-underair
-underalderman
-underanged
-underarch
-underargue
-underarm
-underaverage
-underback
-underbailiff
-underbake
-underbalance
-underballast
-underbank
-underbarber
-underbarring
-underbasal
-underbeadle
-underbeak
-underbeam
-underbear
-underbearer
-underbearing
-underbeat
-underbeaten
-underbed
-underbelly
-underbeveling
-underbid
-underbidder
-underbill
-underbillow
-underbishop
-underbishopric
-underbit
-underbite
-underbitted
-underbitten
-underboard
-underboated
-underbodice
-underbody
-underboil
-underboom
-underborn
-underborne
-underbottom
-underbough
-underbought
-underbound
-underbowed
-underbowser
-underbox
-underboy
-underbrace
-underbraced
-underbranch
-underbreath
-underbreathing
-underbred
-underbreeding
-underbrew
-underbridge
-underbrigadier
-underbright
-underbrim
-underbrush
-underbubble
-underbud
-underbuild
-underbuilder
-underbuilding
-underbuoy
-underburn
-underburned
-underburnt
-underbursar
-underbury
-underbush
-underbutler
-underbuy
-undercanopy
-undercanvass
-undercap
-undercapitaled
-undercapitalization
-undercapitalize
-undercaptain
-undercarder
-undercarriage
-undercarry
-undercarter
-undercarve
-undercarved
-undercase
-undercasing
-undercast
-undercause
-underceiling
-undercellar
-undercellarer
-underchamber
-underchamberlain
-underchancellor
-underchanter
-underchap
-undercharge
-undercharged
-underchief
-underchime
-underchin
-underchord
-underchurched
-undercircle
-undercitizen
-underclad
-underclass
-underclassman
-underclay
-underclearer
-underclerk
-underclerkship
-undercliff
-underclift
-undercloak
-undercloth
-underclothe
-underclothed
-underclothes
-underclothing
-underclub
-underclutch
-undercoachman
-undercoat
-undercoated
-undercoater
-undercoating
-undercollector
-undercolor
-undercolored
-undercoloring
-undercommander
-undercomment
-undercompounded
-underconcerned
-undercondition
-underconsciousness
-underconstable
-underconsume
-underconsumption
-undercook
-undercool
-undercooper
-undercorrect
-undercountenance
-undercourse
-undercourtier
-undercover
-undercovering
-undercovert
-undercrawl
-undercreep
-undercrest
-undercrier
-undercroft
-undercrop
-undercrust
-undercry
-undercrypt
-undercup
-undercurl
-undercurrent
-undercurve
-undercut
-undercutter
-undercutting
-underdauber
-underdeacon
-underdead
-underdebauchee
-underdeck
-underdepth
-underdevelop
-underdevelopment
-underdevil
-underdialogue
-underdig
-underdip
-underdish
-underdistinction
-underdistributor
-underditch
-underdive
-underdo
-underdoctor
-underdoer
-underdog
-underdoing
-underdone
-underdose
-underdot
-underdown
-underdraft
-underdrag
-underdrain
-underdrainage
-underdrainer
-underdraught
-underdraw
-underdrawers
-underdrawn
-underdress
-underdressed
-underdrift
-underdrive
-underdriven
-underdrudgery
-underdrumming
-underdry
-underdunged
-underearth
-undereat
-undereaten
-underedge
-undereducated
-underemployment
-underengraver
-underenter
-underer
-underescheator
-underestimate
-underestimation
-underexcited
-underexercise
-underexpose
-underexposure
-undereye
-underface
-underfaction
-underfactor
-underfaculty
-underfalconer
-underfall
-underfarmer
-underfeathering
-underfeature
-underfed
-underfeed
-underfeeder
-underfeeling
-underfeet
-underfellow
-underfiend
-underfill
-underfilling
-underfinance
-underfind
-underfire
-underfitting
-underflame
-underflannel
-underfleece
-underflood
-underfloor
-underflooring
-underflow
-underfold
-underfolded
-underfong
-underfoot
-underfootage
-underfootman
-underforebody
-underform
-underfortify
-underframe
-underframework
-underframing
-underfreight
-underfrequency
-underfringe
-underfrock
-underfur
-underfurnish
-underfurnisher
-underfurrow
-undergabble
-undergamekeeper
-undergaoler
-undergarb
-undergardener
-undergarment
-undergarnish
-undergauge
-undergear
-undergeneral
-undergentleman
-undergird
-undergirder
-undergirding
-undergirdle
-undergirth
-underglaze
-undergloom
-underglow
-undergnaw
-undergo
-undergod
-undergoer
-undergoing
-undergore
-undergoverness
-undergovernment
-undergovernor
-undergown
-undergrad
-undergrade
-undergraduate
-undergraduatedom
-undergraduateness
-undergraduateship
-undergraduatish
-undergraduette
-undergraining
-undergrass
-undergreen
-undergrieve
-undergroan
-underground
-undergrounder
-undergroundling
-undergrove
-undergrow
-undergrowl
-undergrown
-undergrowth
-undergrub
-underguard
-underguardian
-undergunner
-underhabit
-underhammer
-underhand
-underhanded
-underhandedly
-underhandedness
-underhang
-underhanging
-underhangman
-underhatch
-underhead
-underheat
-underheaven
-underhelp
-underhew
-underhid
-underhill
-underhint
-underhistory
-underhive
-underhold
-underhole
-underhonest
-underhorse
-underhorsed
-underhousemaid
-underhum
-underhung
-underided
-underinstrument
-underisive
-underissue
-underivable
-underivative
-underived
-underivedly
-underivedness
-underjacket
-underjailer
-underjanitor
-underjaw
-underjawed
-underjobbing
-underjudge
-underjungle
-underkeel
-underkeeper
-underkind
-underking
-underkingdom
-underlaborer
-underlaid
-underlain
-underland
-underlanguaged
-underlap
-underlapper
-underlash
-underlaundress
-underlawyer
-underlay
-underlayer
-underlaying
-underleaf
-underlease
-underleather
-underlegate
-underlessee
-underlet
-underletter
-underlevel
-underlever
-underlid
-underlie
-underlier
-underlieutenant
-underlife
-underlift
-underlight
-underliking
-underlimbed
-underlimit
-underline
-underlineation
-underlineman
-underlinement
-underlinen
-underliner
-underling
-underlining
-underlip
-underlive
-underload
-underlock
-underlodging
-underloft
-underlook
-underlooker
-underlout
-underlunged
-underly
-underlye
-underlying
-undermade
-undermaid
-undermaker
-underman
-undermanager
-undermanned
-undermanning
-undermark
-undermarshal
-undermarshalman
-undermasted
-undermaster
-undermatch
-undermatched
-undermate
-undermath
-undermeal
-undermeaning
-undermeasure
-undermediator
-undermelody
-undermentioned
-undermiller
-undermimic
-underminable
-undermine
-underminer
-undermining
-underminingly
-underminister
-underministry
-undermist
-undermoated
-undermoney
-undermoral
-undermost
-undermotion
-undermount
-undermountain
-undermusic
-undermuslin
-undern
-undername
-undernatural
-underneath
-underness
-underniceness
-undernote
-undernoted
-undernourish
-undernourished
-undernourishment
-undernsong
-underntide
-underntime
-undernurse
-undernutrition
-underoccupied
-underofficer
-underofficered
-underofficial
-underogating
-underogatory
-underopinion
-underorb
-underorganization
-underorseman
-underoverlooker
-underoxidize
-underpacking
-underpaid
-underpain
-underpainting
-underpan
-underpants
-underparticipation
-underpartner
-underpass
-underpassion
-underpay
-underpayment
-underpeep
-underpeer
-underpen
-underpeopled
-underpetticoat
-underpetticoated
-underpick
-underpier
-underpilaster
-underpile
-underpin
-underpinner
-underpinning
-underpitch
-underpitched
-underplain
-underplan
-underplant
-underplate
-underplay
-underplot
-underplotter
-underply
-underpoint
-underpole
-underpopulate
-underpopulation
-underporch
-underporter
-underpose
-underpossessor
-underpot
-underpower
-underpraise
-underprefect
-underprentice
-underpresence
-underpresser
-underpressure
-underprice
-underpriest
-underprincipal
-underprint
-underprior
-underprivileged
-underprize
-underproduce
-underproduction
-underproductive
-underproficient
-underprompt
-underprompter
-underproof
-underprop
-underproportion
-underproportioned
-underproposition
-underpropped
-underpropper
-underpropping
-underprospect
-underpry
-underpuke
-underqualified
-underqueen
-underquote
-underranger
-underrate
-underratement
-underrating
-underreach
-underread
-underreader
-underrealize
-underrealm
-underream
-underreamer
-underreceiver
-underreckon
-underrecompense
-underregion
-underregistration
-underrent
-underrented
-underrenting
-underrepresent
-underrepresentation
-underrespected
-underriddle
-underriding
-underrigged
-underring
-underripe
-underripened
-underriver
-underroarer
-underroast
-underrobe
-underrogue
-underroll
-underroller
-underroof
-underroom
-underroot
-underrooted
-underrower
-underrule
-underruler
-underrun
-underrunning
-undersacristan
-undersailed
-undersally
-undersap
-undersatisfaction
-undersaturate
-undersaturation
-undersavior
-undersaw
-undersawyer
-underscale
-underscheme
-underschool
-underscoop
-underscore
-underscribe
-underscript
-underscrub
-underscrupulous
-undersea
-underseam
-underseaman
-undersearch
-underseas
-underseated
-undersecretary
-undersecretaryship
-undersect
-undersee
-underseeded
-underseedman
-undersell
-underseller
-underselling
-undersense
-undersequence
-underservant
-underserve
-underservice
-underset
-undersetter
-undersetting
-undersettle
-undersettler
-undersettling
-undersexton
-undershapen
-undersharp
-undersheathing
-undershepherd
-undersheriff
-undersheriffry
-undersheriffship
-undersheriffwick
-undershield
-undershine
-undershining
-undershire
-undershirt
-undershoe
-undershoot
-undershore
-undershorten
-undershot
-undershrievalty
-undershrieve
-undershrievery
-undershrub
-undershrubbiness
-undershrubby
-undershunter
-undershut
-underside
-undersight
-undersighted
-undersign
-undersignalman
-undersigner
-undersill
-undersinging
-undersitter
-undersize
-undersized
-underskin
-underskirt
-undersky
-undersleep
-undersleeve
-underslip
-underslope
-undersluice
-underslung
-undersneer
-undersociety
-undersoil
-undersole
-undersomething
-undersong
-undersorcerer
-undersort
-undersoul
-undersound
-undersovereign
-undersow
-underspar
-undersparred
-underspecies
-underspecified
-underspend
-undersphere
-underspin
-underspinner
-undersplice
-underspore
-underspread
-underspring
-undersprout
-underspurleather
-undersquare
-understaff
-understage
-understain
-understairs
-understamp
-understand
-understandability
-understandable
-understandableness
-understandably
-understander
-understanding
-understandingly
-understandingness
-understate
-understatement
-understay
-understeer
-understem
-understep
-understeward
-understewardship
-understimulus
-understock
-understocking
-understood
-understory
-understrain
-understrap
-understrapper
-understrapping
-understratum
-understream
-understress
-understrew
-understride
-understriding
-understrife
-understrike
-understring
-understroke
-understrung
-understudy
-understuff
-understuffing
-undersuck
-undersuggestion
-undersuit
-undersupply
-undersupport
-undersurface
-underswain
-underswamp
-undersward
-underswearer
-undersweat
-undersweep
-underswell
-undertakable
-undertake
-undertakement
-undertaker
-undertakerish
-undertakerlike
-undertakerly
-undertakery
-undertaking
-undertakingly
-undertalk
-undertapster
-undertaxed
-underteacher
-underteamed
-underteller
-undertenancy
-undertenant
-undertenter
-undertenure
-underterrestrial
-undertest
-underthane
-underthaw
-underthief
-underthing
-underthink
-underthirst
-underthought
-underthroating
-underthrob
-underthrust
-undertide
-undertided
-undertie
-undertime
-undertimed
-undertint
-undertitle
-undertone
-undertoned
-undertook
-undertow
-undertrader
-undertrained
-undertread
-undertreasurer
-undertreat
-undertribe
-undertrick
-undertrodden
-undertruck
-undertrump
-undertruss
-undertub
-undertune
-undertunic
-underturf
-underturn
-underturnkey
-undertutor
-undertwig
-undertype
-undertyrant
-underusher
-undervaluation
-undervalue
-undervaluement
-undervaluer
-undervaluing
-undervaluinglike
-undervaluingly
-undervalve
-undervassal
-undervaulted
-undervaulting
-undervegetation
-underventilation
-underverse
-undervest
-undervicar
-underviewer
-undervillain
-undervinedresser
-undervitalized
-undervocabularied
-undervoice
-undervoltage
-underwage
-underwaist
-underwaistcoat
-underwalk
-underward
-underwarden
-underwarmth
-underwarp
-underwash
-underwatch
-underwatcher
-underwater
-underwave
-underway
-underweapon
-underwear
-underweft
-underweigh
-underweight
-underweighted
-underwent
-underwheel
-underwhistle
-underwind
-underwing
-underwit
-underwitch
-underwitted
-underwood
-underwooded
-underwork
-underworker
-underworking
-underworkman
-underworld
-underwrap
-underwrite
-underwriter
-underwriting
-underwrought
-underyield
-underyoke
-underzeal
-underzealot
-undescendable
-undescended
-undescendible
-undescribable
-undescribably
-undescribed
-undescried
-undescript
-undescriptive
-undescrying
-undesert
-undeserted
-undeserting
-undeserve
-undeserved
-undeservedly
-undeservedness
-undeserver
-undeserving
-undeservingly
-undeservingness
-undesign
-undesignated
-undesigned
-undesignedly
-undesignedness
-undesigning
-undesigningly
-undesigningness
-undesirability
-undesirable
-undesirableness
-undesirably
-undesire
-undesired
-undesiredly
-undesiring
-undesirous
-undesirously
-undesirousness
-undesisting
-undespaired
-undespairing
-undespairingly
-undespatched
-undespised
-undespising
-undespoiled
-undespondent
-undespondently
-undesponding
-undespotic
-undestined
-undestroyable
-undestroyed
-undestructible
-undestructive
-undetachable
-undetached
-undetailed
-undetainable
-undetained
-undetectable
-undetected
-undetectible
-undeteriorated
-undeteriorating
-undeterminable
-undeterminate
-undetermination
-undetermined
-undetermining
-undeterred
-undeterring
-undetested
-undetesting
-undethronable
-undethroned
-undetracting
-undetractingly
-undetrimental
-undevelopable
-undeveloped
-undeveloping
-undeviated
-undeviating
-undeviatingly
-undevil
-undevious
-undeviously
-undevisable
-undevised
-undevoted
-undevotion
-undevotional
-undevoured
-undevout
-undevoutly
-undevoutness
-undewed
-undewy
-undexterous
-undexterously
-undextrous
-undextrously
-undiademed
-undiagnosable
-undiagnosed
-undialed
-undialyzed
-undiametric
-undiamonded
-undiapered
-undiaphanous
-undiatonic
-undichotomous
-undictated
-undid
-undidactic
-undies
-undieted
-undifferenced
-undifferent
-undifferential
-undifferentiated
-undifficult
-undiffident
-undiffracted
-undiffused
-undiffusible
-undiffusive
-undig
-undigenous
-undigest
-undigestable
-undigested
-undigestible
-undigesting
-undigestion
-undigged
-undight
-undighted
-undigitated
-undignified
-undignifiedly
-undignifiedness
-undignify
-undiked
-undilapidated
-undilatable
-undilated
-undilatory
-undiligent
-undiligently
-undilute
-undiluted
-undilution
-undiluvial
-undim
-undimensioned
-undimerous
-undimidiate
-undiminishable
-undiminishableness
-undiminishably
-undiminished
-undiminishing
-undiminutive
-undimmed
-undimpled
-Undine
-undine
-undined
-undinted
-undiocesed
-undiphthongize
-undiplomaed
-undiplomatic
-undipped
-undirect
-undirected
-undirectional
-undirectly
-undirectness
-undirk
-undisabled
-undisadvantageous
-undisagreeable
-undisappearing
-undisappointable
-undisappointed
-undisappointing
-undisarmed
-undisastrous
-undisbanded
-undisbarred
-undisburdened
-undisbursed
-undiscardable
-undiscarded
-undiscerned
-undiscernedly
-undiscernible
-undiscernibleness
-undiscernibly
-undiscerning
-undiscerningly
-undischargeable
-undischarged
-undiscipled
-undisciplinable
-undiscipline
-undisciplined
-undisciplinedness
-undisclaimed
-undisclosed
-undiscolored
-undiscomfitable
-undiscomfited
-undiscomposed
-undisconcerted
-undisconnected
-undiscontinued
-undiscordant
-undiscording
-undiscounted
-undiscourageable
-undiscouraged
-undiscouraging
-undiscoursed
-undiscoverable
-undiscoverableness
-undiscoverably
-undiscovered
-undiscreditable
-undiscredited
-undiscreet
-undiscreetly
-undiscreetness
-undiscretion
-undiscriminated
-undiscriminating
-undiscriminatingly
-undiscriminatingness
-undiscriminative
-undiscursive
-undiscussable
-undiscussed
-undisdained
-undisdaining
-undiseased
-undisestablished
-undisfigured
-undisfranchised
-undisfulfilled
-undisgorged
-undisgraced
-undisguisable
-undisguise
-undisguised
-undisguisedly
-undisguisedness
-undisgusted
-undisheartened
-undished
-undisheveled
-undishonored
-undisillusioned
-undisinfected
-undisinheritable
-undisinherited
-undisintegrated
-undisinterested
-undisjoined
-undisjointed
-undisliked
-undislocated
-undislodgeable
-undislodged
-undismantled
-undismay
-undismayable
-undismayed
-undismayedly
-undismembered
-undismissed
-undismounted
-undisobedient
-undisobeyed
-undisobliging
-undisordered
-undisorderly
-undisorganized
-undisowned
-undisowning
-undisparaged
-undisparity
-undispassionate
-undispatchable
-undispatched
-undispatching
-undispellable
-undispelled
-undispensable
-undispensed
-undispensing
-undispersed
-undispersing
-undisplaced
-undisplanted
-undisplay
-undisplayable
-undisplayed
-undisplaying
-undispleased
-undispose
-undisposed
-undisposedness
-undisprivacied
-undisprovable
-undisproved
-undisproving
-undisputable
-undisputableness
-undisputably
-undisputatious
-undisputatiously
-undisputed
-undisputedly
-undisputedness
-undisputing
-undisqualifiable
-undisqualified
-undisquieted
-undisreputable
-undisrobed
-undisrupted
-undissected
-undissembled
-undissembledness
-undissembling
-undissemblingly
-undisseminated
-undissenting
-undissevered
-undissimulated
-undissipated
-undissociated
-undissoluble
-undissolute
-undissolvable
-undissolved
-undissolving
-undissonant
-undissuadable
-undissuadably
-undissuade
-undistanced
-undistant
-undistantly
-undistasted
-undistasteful
-undistempered
-undistend
-undistended
-undistilled
-undistinct
-undistinctive
-undistinctly
-undistinctness
-undistinguish
-undistinguishable
-undistinguishableness
-undistinguishably
-undistinguished
-undistinguishing
-undistinguishingly
-undistorted
-undistorting
-undistracted
-undistractedly
-undistractedness
-undistracting
-undistractingly
-undistrained
-undistraught
-undistress
-undistressed
-undistributed
-undistrusted
-undistrustful
-undisturbable
-undisturbance
-undisturbed
-undisturbedly
-undisturbedness
-undisturbing
-undisturbingly
-unditched
-undithyrambic
-undittoed
-undiuretic
-undiurnal
-undivable
-undivergent
-undiverging
-undiverse
-undiversified
-undiverted
-undivertible
-undivertibly
-undiverting
-undivested
-undivestedly
-undividable
-undividableness
-undividably
-undivided
-undividedly
-undividedness
-undividing
-undivinable
-undivined
-undivinelike
-undivinely
-undivining
-undivisible
-undivisive
-undivorceable
-undivorced
-undivorcedness
-undivorcing
-undivulged
-undivulging
-undizened
-undizzied
-undo
-undoable
-undock
-undocked
-undoctor
-undoctored
-undoctrinal
-undoctrined
-undocumentary
-undocumented
-undocumentedness
-undodged
-undoer
-undoffed
-undog
-undogmatic
-undogmatical
-undoing
-undoingness
-undolled
-undolorous
-undomed
-undomestic
-undomesticate
-undomesticated
-undomestication
-undomicilable
-undomiciled
-undominated
-undomineering
-undominical
-undominoed
-undon
-undonated
-undonating
-undone
-undoneness
-undonkey
-undonnish
-undoomed
-undoped
-undormant
-undose
-undosed
-undoting
-undotted
-undouble
-undoubled
-undoubtable
-undoubtableness
-undoubtably
-undoubted
-undoubtedly
-undoubtedness
-undoubtful
-undoubtfully
-undoubtfulness
-undoubting
-undoubtingly
-undoubtingness
-undouched
-undoughty
-undovelike
-undoweled
-undowered
-undowned
-undowny
-undrab
-undraftable
-undrafted
-undrag
-undragoned
-undragooned
-undrainable
-undrained
-undramatic
-undramatical
-undramatically
-undramatizable
-undramatized
-undrape
-undraped
-undraperied
-undraw
-undrawable
-undrawn
-undreaded
-undreadful
-undreadfully
-undreading
-undreamed
-undreaming
-undreamlike
-undreamt
-undreamy
-undredged
-undreggy
-undrenched
-undress
-undressed
-undried
-undrillable
-undrilled
-undrinkable
-undrinkableness
-undrinkably
-undrinking
-undripping
-undrivable
-undrivableness
-undriven
-undronelike
-undrooping
-undropped
-undropsical
-undrossy
-undrowned
-undrubbed
-undrugged
-undrunk
-undrunken
-undry
-undryable
-undrying
-undualize
-undub
-undubbed
-undubitable
-undubitably
-unducal
-unduchess
-undue
-unduelling
-undueness
-undug
-unduke
-undulant
-undular
-undularly
-undulatance
-undulate
-undulated
-undulately
-undulating
-undulatingly
-undulation
-undulationist
-undulative
-undulatory
-undull
-undulled
-undullness
-unduloid
-undulose
-undulous
-unduly
-undumped
-unduncelike
-undunged
-undupable
-unduped
-unduplicability
-unduplicable
-unduplicity
-undurable
-undurableness
-undurably
-undust
-undusted
-unduteous
-undutiable
-undutiful
-undutifully
-undutifulness
-unduty
-undwarfed
-undwelt
-undwindling
-undy
-undye
-undyeable
-undyed
-undying
-undyingly
-undyingness
-uneager
-uneagerly
-uneagerness
-uneagled
-unearly
-unearned
-unearnest
-unearth
-unearthed
-unearthliness
-unearthly
-unease
-uneaseful
-uneasefulness
-uneasily
-uneasiness
-uneastern
-uneasy
-uneatable
-uneatableness
-uneaten
-uneath
-uneating
-unebbed
-unebbing
-unebriate
-uneccentric
-unecclesiastical
-unechoed
-unechoing
-uneclectic
-uneclipsed
-uneconomic
-uneconomical
-uneconomically
-uneconomicalness
-uneconomizing
-unecstatic
-unedge
-unedged
-unedible
-unedibleness
-unedibly
-unedified
-unedifying
-uneditable
-unedited
-uneducable
-uneducableness
-uneducably
-uneducate
-uneducated
-uneducatedly
-uneducatedness
-uneducative
-uneduced
-uneffaceable
-uneffaceably
-uneffaced
-uneffected
-uneffectible
-uneffective
-uneffectless
-uneffectual
-uneffectually
-uneffectualness
-uneffectuated
-uneffeminate
-uneffeminated
-uneffervescent
-uneffete
-unefficacious
-unefficient
-uneffigiated
-uneffused
-uneffusing
-uneffusive
-unegoist
-unegoistical
-unegoistically
-unegregious
-unejaculated
-unejected
-unelaborate
-unelaborated
-unelaborately
-unelaborateness
-unelapsed
-unelastic
-unelasticity
-unelated
-unelating
-unelbowed
-unelderly
-unelect
-unelectable
-unelected
-unelective
-unelectric
-unelectrical
-unelectrified
-unelectrify
-unelectrifying
-unelectrized
-unelectronic
-uneleemosynary
-unelegant
-unelegantly
-unelegantness
-unelemental
-unelementary
-unelevated
-unelicited
-unelided
-unelidible
-uneligibility
-uneligible
-uneligibly
-uneliminated
-unelongated
-uneloped
-uneloping
-uneloquent
-uneloquently
-unelucidated
-unelucidating
-uneluded
-unelusive
-unemaciated
-unemancipable
-unemancipated
-unemasculated
-unembalmed
-unembanked
-unembarrassed
-unembarrassedly
-unembarrassedness
-unembarrassing
-unembarrassment
-unembased
-unembattled
-unembayed
-unembellished
-unembezzled
-unembittered
-unemblazoned
-unembodied
-unembodiment
-unembossed
-unembowelled
-unembowered
-unembraceable
-unembraced
-unembroidered
-unembroiled
-unembryonic
-unemendable
-unemended
-unemerged
-unemerging
-unemigrating
-uneminent
-uneminently
-unemitted
-unemolumentary
-unemolumented
-unemotional
-unemotionalism
-unemotionally
-unemotionalness
-unemotioned
-unempaneled
-unemphatic
-unemphatical
-unemphatically
-unempirical
-unempirically
-unemploy
-unemployability
-unemployable
-unemployableness
-unemployably
-unemployed
-unemployment
-unempoisoned
-unempowered
-unempt
-unemptiable
-unemptied
-unempty
-unemulative
-unemulous
-unemulsified
-unenabled
-unenacted
-unenameled
-unenamored
-unencamped
-unenchafed
-unenchant
-unenchanted
-unencircled
-unenclosed
-unencompassed
-unencored
-unencounterable
-unencountered
-unencouraged
-unencouraging
-unencroached
-unencroaching
-unencumber
-unencumbered
-unencumberedly
-unencumberedness
-unencumbering
-unencysted
-unendable
-unendamaged
-unendangered
-unendeared
-unendeavored
-unended
-unending
-unendingly
-unendingness
-unendorsable
-unendorsed
-unendowed
-unendowing
-unendued
-unendurability
-unendurable
-unendurably
-unendured
-unenduring
-unenduringly
-unenergetic
-unenergized
-unenervated
-unenfeebled
-unenfiladed
-unenforceable
-unenforced
-unenforcedly
-unenforcedness
-unenforcibility
-unenfranchised
-unengaged
-unengaging
-unengendered
-unengineered
-unenglish
-unengraved
-unengraven
-unengrossed
-unenhanced
-unenjoined
-unenjoyable
-unenjoyed
-unenjoying
-unenjoyingly
-unenkindled
-unenlarged
-unenlightened
-unenlightening
-unenlisted
-unenlivened
-unenlivening
-unennobled
-unennobling
-unenounced
-unenquired
-unenquiring
-unenraged
-unenraptured
-unenrichable
-unenrichableness
-unenriched
-unenriching
-unenrobed
-unenrolled
-unenshrined
-unenslave
-unenslaved
-unensnared
-unensouled
-unensured
-unentailed
-unentangle
-unentangleable
-unentangled
-unentanglement
-unentangler
-unenterable
-unentered
-unentering
-unenterprise
-unenterprised
-unenterprising
-unenterprisingly
-unenterprisingness
-unentertainable
-unentertained
-unentertaining
-unentertainingly
-unentertainingness
-unenthralled
-unenthralling
-unenthroned
-unenthusiasm
-unenthusiastic
-unenthusiastically
-unenticed
-unenticing
-unentire
-unentitled
-unentombed
-unentomological
-unentrance
-unentranced
-unentrapped
-unentreated
-unentreating
-unentrenched
-unentwined
-unenumerable
-unenumerated
-unenveloped
-unenvenomed
-unenviable
-unenviably
-unenvied
-unenviedly
-unenvious
-unenviously
-unenvironed
-unenvying
-unenwoven
-unepauleted
-unephemeral
-unepic
-unepicurean
-unepigrammatic
-unepilogued
-unepiscopal
-unepiscopally
-unepistolary
-unepitaphed
-unepithelial
-unepitomized
-unequable
-unequableness
-unequably
-unequal
-unequalable
-unequaled
-unequality
-unequalize
-unequalized
-unequally
-unequalness
-unequated
-unequatorial
-unequestrian
-unequiangular
-unequiaxed
-unequilateral
-unequilibrated
-unequine
-unequipped
-unequitable
-unequitableness
-unequitably
-unequivalent
-unequivalve
-unequivalved
-unequivocal
-unequivocally
-unequivocalness
-uneradicable
-uneradicated
-unerasable
-unerased
-unerasing
-unerect
-unerected
-unermined
-uneroded
-unerrable
-unerrableness
-unerrably
-unerrancy
-unerrant
-unerratic
-unerring
-unerringly
-unerringness
-unerroneous
-unerroneously
-unerudite
-unerupted
-uneruptive
-unescaladed
-unescalloped
-unescapable
-unescapableness
-unescapably
-unescaped
-unescheated
-uneschewable
-uneschewably
-uneschewed
-Unesco
-unescorted
-unescutcheoned
-unesoteric
-unespied
-unespousable
-unespoused
-unessayed
-unessence
-unessential
-unessentially
-unessentialness
-unestablish
-unestablishable
-unestablished
-unestablishment
-unesteemed
-unestimable
-unestimableness
-unestimably
-unestimated
-unestopped
-unestranged
-unetched
-uneternal
-uneternized
-unethereal
-unethic
-unethical
-unethically
-unethicalness
-unethnological
-unethylated
-unetymological
-unetymologizable
-uneucharistical
-uneugenic
-uneulogized
-uneuphemistical
-uneuphonic
-uneuphonious
-uneuphoniously
-uneuphoniousness
-unevacuated
-unevadable
-unevaded
-unevaluated
-unevanescent
-unevangelic
-unevangelical
-unevangelized
-unevaporate
-unevaporated
-unevasive
-uneven
-unevenly
-unevenness
-uneventful
-uneventfully
-uneventfulness
-uneverted
-unevicted
-unevidenced
-unevident
-unevidential
-unevil
-unevinced
-unevirated
-uneviscerated
-unevitable
-unevitably
-unevokable
-unevoked
-unevolutionary
-unevolved
-unexacerbated
-unexact
-unexacted
-unexactedly
-unexacting
-unexactingly
-unexactly
-unexactness
-unexaggerable
-unexaggerated
-unexaggerating
-unexalted
-unexaminable
-unexamined
-unexamining
-unexampled
-unexampledness
-unexasperated
-unexasperating
-unexcavated
-unexceedable
-unexceeded
-unexcelled
-unexcellent
-unexcelling
-unexceptable
-unexcepted
-unexcepting
-unexceptionability
-unexceptionable
-unexceptionableness
-unexceptionably
-unexceptional
-unexceptionally
-unexceptionalness
-unexceptive
-unexcerpted
-unexcessive
-unexchangeable
-unexchangeableness
-unexchanged
-unexcised
-unexcitability
-unexcitable
-unexcited
-unexciting
-unexclaiming
-unexcludable
-unexcluded
-unexcluding
-unexclusive
-unexclusively
-unexclusiveness
-unexcogitable
-unexcogitated
-unexcommunicated
-unexcoriated
-unexcorticated
-unexcrescent
-unexcreted
-unexcruciating
-unexculpable
-unexculpably
-unexculpated
-unexcursive
-unexcusable
-unexcusableness
-unexcusably
-unexcused
-unexcusedly
-unexcusedness
-unexcusing
-unexecrated
-unexecutable
-unexecuted
-unexecuting
-unexecutorial
-unexemplary
-unexemplifiable
-unexemplified
-unexempt
-unexempted
-unexemptible
-unexempting
-unexercisable
-unexercise
-unexercised
-unexerted
-unexhalable
-unexhaled
-unexhausted
-unexhaustedly
-unexhaustedness
-unexhaustible
-unexhaustibleness
-unexhaustibly
-unexhaustion
-unexhaustive
-unexhaustiveness
-unexhibitable
-unexhibitableness
-unexhibited
-unexhilarated
-unexhilarating
-unexhorted
-unexhumed
-unexigent
-unexilable
-unexiled
-unexistence
-unexistent
-unexisting
-unexonerable
-unexonerated
-unexorable
-unexorableness
-unexorbitant
-unexorcisable
-unexorcisably
-unexorcised
-unexotic
-unexpandable
-unexpanded
-unexpanding
-unexpansive
-unexpectable
-unexpectant
-unexpected
-unexpectedly
-unexpectedness
-unexpecting
-unexpectingly
-unexpectorated
-unexpedient
-unexpeditated
-unexpedited
-unexpeditious
-unexpelled
-unexpendable
-unexpended
-unexpensive
-unexpensively
-unexpensiveness
-unexperience
-unexperienced
-unexperiencedness
-unexperient
-unexperiential
-unexperimental
-unexperimented
-unexpert
-unexpertly
-unexpertness
-unexpiable
-unexpiated
-unexpired
-unexpiring
-unexplainable
-unexplainableness
-unexplainably
-unexplained
-unexplainedly
-unexplainedness
-unexplaining
-unexplanatory
-unexplicable
-unexplicableness
-unexplicably
-unexplicated
-unexplicit
-unexplicitly
-unexplicitness
-unexploded
-unexploitation
-unexploited
-unexplorable
-unexplorative
-unexplored
-unexplosive
-unexportable
-unexported
-unexporting
-unexposable
-unexposed
-unexpostulating
-unexpoundable
-unexpounded
-unexpress
-unexpressable
-unexpressableness
-unexpressably
-unexpressed
-unexpressedly
-unexpressible
-unexpressibleness
-unexpressibly
-unexpressive
-unexpressively
-unexpressiveness
-unexpressly
-unexpropriable
-unexpropriated
-unexpugnable
-unexpunged
-unexpurgated
-unexpurgatedly
-unexpurgatedness
-unextended
-unextendedly
-unextendedness
-unextendible
-unextensible
-unextenuable
-unextenuated
-unextenuating
-unexterminable
-unexterminated
-unexternal
-unexternality
-unexterritoriality
-unextinct
-unextinctness
-unextinguishable
-unextinguishableness
-unextinguishably
-unextinguished
-unextirpated
-unextolled
-unextortable
-unextorted
-unextractable
-unextracted
-unextradited
-unextraneous
-unextraordinary
-unextravagance
-unextravagant
-unextravagating
-unextravasated
-unextreme
-unextricable
-unextricated
-unextrinsic
-unextruded
-unexuberant
-unexuded
-unexultant
-uneye
-uneyeable
-uneyed
-unfabled
-unfabling
-unfabricated
-unfabulous
-unfacaded
-unface
-unfaceable
-unfaced
-unfaceted
-unfacetious
-unfacile
-unfacilitated
-unfact
-unfactional
-unfactious
-unfactitious
-unfactorable
-unfactored
-unfactual
-unfadable
-unfaded
-unfading
-unfadingly
-unfadingness
-unfagged
-unfagoted
-unfailable
-unfailableness
-unfailably
-unfailed
-unfailing
-unfailingly
-unfailingness
-unfain
-unfaint
-unfainting
-unfaintly
-unfair
-unfairly
-unfairminded
-unfairness
-unfairylike
-unfaith
-unfaithful
-unfaithfully
-unfaithfulness
-unfaked
-unfallacious
-unfallaciously
-unfallen
-unfallenness
-unfallible
-unfallibleness
-unfallibly
-unfalling
-unfallowed
-unfalse
-unfalsifiable
-unfalsified
-unfalsifiedness
-unfalsity
-unfaltering
-unfalteringly
-unfamed
-unfamiliar
-unfamiliarity
-unfamiliarized
-unfamiliarly
-unfanatical
-unfanciable
-unfancied
-unfanciful
-unfancy
-unfanged
-unfanned
-unfantastic
-unfantastical
-unfantastically
-unfar
-unfarced
-unfarcical
-unfarewelled
-unfarmed
-unfarming
-unfarrowed
-unfarsighted
-unfasciated
-unfascinate
-unfascinated
-unfascinating
-unfashion
-unfashionable
-unfashionableness
-unfashionably
-unfashioned
-unfast
-unfasten
-unfastenable
-unfastened
-unfastener
-unfastidious
-unfastidiously
-unfastidiousness
-unfasting
-unfather
-unfathered
-unfatherlike
-unfatherliness
-unfatherly
-unfathomability
-unfathomable
-unfathomableness
-unfathomably
-unfathomed
-unfatigue
-unfatigueable
-unfatigued
-unfatiguing
-unfattable
-unfatted
-unfatten
-unfauceted
-unfaultfinding
-unfaulty
-unfavorable
-unfavorableness
-unfavorably
-unfavored
-unfavoring
-unfavorite
-unfawning
-unfealty
-unfeared
-unfearful
-unfearfully
-unfearing
-unfearingly
-unfeary
-unfeasable
-unfeasableness
-unfeasably
-unfeasibility
-unfeasible
-unfeasibleness
-unfeasibly
-unfeasted
-unfeather
-unfeathered
-unfeatured
-unfecund
-unfecundated
-unfed
-unfederal
-unfederated
-unfeeble
-unfeed
-unfeedable
-unfeeding
-unfeeing
-unfeelable
-unfeeling
-unfeelingly
-unfeelingness
-unfeignable
-unfeignableness
-unfeignably
-unfeigned
-unfeignedly
-unfeignedness
-unfeigning
-unfeigningly
-unfeigningness
-unfele
-unfelicitated
-unfelicitating
-unfelicitous
-unfelicitously
-unfelicitousness
-unfeline
-unfellable
-unfelled
-unfellied
-unfellow
-unfellowed
-unfellowlike
-unfellowly
-unfellowshiped
-unfelon
-unfelonious
-unfeloniously
-unfelony
-unfelt
-unfelted
-unfemale
-unfeminine
-unfemininely
-unfeminineness
-unfemininity
-unfeminist
-unfeminize
-unfence
-unfenced
-unfendered
-unfenestrated
-unfeoffed
-unfermentable
-unfermentableness
-unfermentably
-unfermented
-unfermenting
-unfernlike
-unferocious
-unferreted
-unferried
-unfertile
-unfertileness
-unfertility
-unfertilizable
-unfertilized
-unfervent
-unfervid
-unfester
-unfestered
-unfestival
-unfestive
-unfestively
-unfestooned
-unfetchable
-unfetched
-unfeted
-unfetter
-unfettered
-unfettled
-unfeudal
-unfeudalize
-unfeudalized
-unfeued
-unfevered
-unfeverish
-unfew
-unfibbed
-unfibbing
-unfiber
-unfibered
-unfibrous
-unfickle
-unfictitious
-unfidelity
-unfidgeting
-unfielded
-unfiend
-unfiendlike
-unfierce
-unfiery
-unfight
-unfightable
-unfighting
-unfigurable
-unfigurative
-unfigured
-unfilamentous
-unfilched
-unfile
-unfiled
-unfilial
-unfilially
-unfilialness
-unfill
-unfillable
-unfilled
-unfilleted
-unfilling
-unfilm
-unfilmed
-unfiltered
-unfiltrated
-unfinable
-unfinancial
-unfine
-unfined
-unfinessed
-unfingered
-unfinical
-unfinish
-unfinishable
-unfinished
-unfinishedly
-unfinishedness
-unfinite
-unfired
-unfireproof
-unfiring
-unfirm
-unfirmamented
-unfirmly
-unfirmness
-unfiscal
-unfishable
-unfished
-unfishing
-unfishlike
-unfissile
-unfistulous
-unfit
-unfitly
-unfitness
-unfittable
-unfitted
-unfittedness
-unfitten
-unfitting
-unfittingly
-unfittingness
-unfitty
-unfix
-unfixable
-unfixated
-unfixed
-unfixedness
-unfixing
-unfixity
-unflag
-unflagged
-unflagging
-unflaggingly
-unflaggingness
-unflagitious
-unflagrant
-unflaky
-unflamboyant
-unflaming
-unflanged
-unflank
-unflanked
-unflapping
-unflashing
-unflat
-unflated
-unflattened
-unflatterable
-unflattered
-unflattering
-unflatteringly
-unflaunted
-unflavored
-unflawed
-unflayed
-unflead
-unflecked
-unfledge
-unfledged
-unfledgedness
-unfleece
-unfleeced
-unfleeing
-unfleeting
-unflesh
-unfleshed
-unfleshliness
-unfleshly
-unfleshy
-unfletched
-unflexed
-unflexible
-unflexibleness
-unflexibly
-unflickering
-unflickeringly
-unflighty
-unflinching
-unflinchingly
-unflinchingness
-unflintify
-unflippant
-unflirtatious
-unflitched
-unfloatable
-unfloating
-unflock
-unfloggable
-unflogged
-unflooded
-unfloor
-unfloored
-unflorid
-unflossy
-unflounced
-unfloured
-unflourished
-unflourishing
-unflouted
-unflower
-unflowered
-unflowing
-unflown
-unfluctuating
-unfluent
-unfluid
-unfluked
-unflunked
-unfluorescent
-unflurried
-unflush
-unflushed
-unflustered
-unfluted
-unflutterable
-unfluttered
-unfluttering
-unfluvial
-unfluxile
-unflying
-unfoaled
-unfoaming
-unfocused
-unfoggy
-unfoilable
-unfoiled
-unfoisted
-unfold
-unfoldable
-unfolded
-unfolder
-unfolding
-unfoldment
-unfoldure
-unfoliaged
-unfoliated
-unfollowable
-unfollowed
-unfollowing
-unfomented
-unfond
-unfondled
-unfondness
-unfoodful
-unfool
-unfoolable
-unfooled
-unfooling
-unfoolish
-unfooted
-unfootsore
-unfoppish
-unforaged
-unforbade
-unforbearance
-unforbearing
-unforbid
-unforbidden
-unforbiddenly
-unforbiddenness
-unforbidding
-unforceable
-unforced
-unforcedly
-unforcedness
-unforceful
-unforcible
-unforcibleness
-unforcibly
-unfordable
-unfordableness
-unforded
-unforeboded
-unforeboding
-unforecasted
-unforegone
-unforeign
-unforeknowable
-unforeknown
-unforensic
-unforeordained
-unforesee
-unforeseeable
-unforeseeableness
-unforeseeably
-unforeseeing
-unforeseeingly
-unforeseen
-unforeseenly
-unforeseenness
-unforeshortened
-unforest
-unforestallable
-unforestalled
-unforested
-unforetellable
-unforethought
-unforethoughtful
-unforetold
-unforewarned
-unforewarnedness
-unforfeit
-unforfeitable
-unforfeited
-unforgeability
-unforgeable
-unforged
-unforget
-unforgetful
-unforgettable
-unforgettableness
-unforgettably
-unforgetting
-unforgettingly
-unforgivable
-unforgivableness
-unforgivably
-unforgiven
-unforgiveness
-unforgiver
-unforgiving
-unforgivingly
-unforgivingness
-unforgone
-unforgot
-unforgotten
-unfork
-unforked
-unforkedness
-unforlorn
-unform
-unformal
-unformality
-unformalized
-unformally
-unformalness
-unformative
-unformed
-unformidable
-unformulable
-unformularizable
-unformularize
-unformulated
-unformulistic
-unforsaken
-unforsaking
-unforsook
-unforsworn
-unforthright
-unfortifiable
-unfortified
-unfortify
-unfortuitous
-unfortunate
-unfortunately
-unfortunateness
-unfortune
-unforward
-unforwarded
-unfossiliferous
-unfossilized
-unfostered
-unfought
-unfoughten
-unfoul
-unfoulable
-unfouled
-unfound
-unfounded
-unfoundedly
-unfoundedness
-unfoundered
-unfountained
-unfowllike
-unfoxy
-unfractured
-unfragrance
-unfragrant
-unfragrantly
-unfrail
-unframable
-unframableness
-unframably
-unframe
-unframed
-unfranchised
-unfrank
-unfrankable
-unfranked
-unfrankly
-unfrankness
-unfraternal
-unfraternizing
-unfraudulent
-unfraught
-unfrayed
-unfreckled
-unfree
-unfreed
-unfreedom
-unfreehold
-unfreely
-unfreeman
-unfreeness
-unfreezable
-unfreeze
-unfreezing
-unfreighted
-unfrenchified
-unfrenzied
-unfrequency
-unfrequent
-unfrequented
-unfrequentedness
-unfrequently
-unfrequentness
-unfret
-unfretful
-unfretting
-unfriable
-unfriarlike
-unfricative
-unfrictioned
-unfried
-unfriend
-unfriended
-unfriendedness
-unfriending
-unfriendlike
-unfriendlily
-unfriendliness
-unfriendly
-unfriendship
-unfrighted
-unfrightenable
-unfrightened
-unfrightenedness
-unfrightful
-unfrigid
-unfrill
-unfrilled
-unfringe
-unfringed
-unfrisky
-unfrivolous
-unfrizz
-unfrizzled
-unfrizzy
-unfrock
-unfrocked
-unfroglike
-unfrolicsome
-unfronted
-unfrost
-unfrosted
-unfrosty
-unfrounced
-unfroward
-unfrowardly
-unfrowning
-unfroze
-unfrozen
-unfructed
-unfructified
-unfructify
-unfructuous
-unfructuously
-unfrugal
-unfrugally
-unfrugalness
-unfruitful
-unfruitfully
-unfruitfulness
-unfruity
-unfrustrable
-unfrustrably
-unfrustratable
-unfrustrated
-unfrutuosity
-unfuddled
-unfueled
-unfulfill
-unfulfillable
-unfulfilled
-unfulfilling
-unfulfillment
-unfull
-unfulled
-unfully
-unfulminated
-unfulsome
-unfumbled
-unfumbling
-unfumed
-unfumigated
-unfunctional
-unfundamental
-unfunded
-unfunnily
-unfunniness
-unfunny
-unfur
-unfurbelowed
-unfurbished
-unfurcate
-unfurious
-unfurl
-unfurlable
-unfurnish
-unfurnished
-unfurnishedness
-unfurnitured
-unfurred
-unfurrow
-unfurrowable
-unfurrowed
-unfurthersome
-unfused
-unfusible
-unfusibleness
-unfusibly
-unfussed
-unfussing
-unfussy
-unfutile
-unfuturistic
-ungabled
-ungag
-ungaged
-ungagged
-ungain
-ungainable
-ungained
-ungainful
-ungainfully
-ungainfulness
-ungaining
-ungainlike
-ungainliness
-ungainly
-ungainness
-ungainsaid
-ungainsayable
-ungainsayably
-ungainsaying
-ungainsome
-ungainsomely
-ungaite
-ungallant
-ungallantly
-ungallantness
-ungalling
-ungalvanized
-ungamboling
-ungamelike
-unganged
-ungangrened
-ungarbed
-ungarbled
-ungardened
-ungargled
-ungarland
-ungarlanded
-ungarment
-ungarmented
-ungarnered
-ungarnish
-ungarnished
-ungaro
-ungarrisoned
-ungarter
-ungartered
-ungashed
-ungassed
-ungastric
-ungathered
-ungaudy
-ungauged
-ungauntlet
-ungauntleted
-ungazetted
-ungazing
-ungear
-ungeared
-ungelatinizable
-ungelatinized
-ungelded
-ungelt
-ungeminated
-ungenerable
-ungeneral
-ungeneraled
-ungeneralized
-ungenerate
-ungenerated
-ungenerative
-ungeneric
-ungenerical
-ungenerosity
-ungenerous
-ungenerously
-ungenerousness
-ungenial
-ungeniality
-ungenially
-ungenialness
-ungenitured
-ungenius
-ungenteel
-ungenteelly
-ungenteelness
-ungentile
-ungentility
-ungentilize
-ungentle
-ungentled
-ungentleman
-ungentlemanize
-ungentlemanlike
-ungentlemanlikeness
-ungentlemanliness
-ungentlemanly
-ungentleness
-ungentlewomanlike
-ungently
-ungenuine
-ungenuinely
-ungenuineness
-ungeodetical
-ungeographic
-ungeographical
-ungeographically
-ungeological
-ungeometric
-ungeometrical
-ungeometrically
-ungeometricalness
-ungerminated
-ungerminating
-ungermlike
-ungerontic
-ungesting
-ungesturing
-unget
-ungettable
-unghostlike
-unghostly
-ungiant
-ungibbet
-ungiddy
-ungifted
-ungiftedness
-ungild
-ungilded
-ungill
-ungilt
-ungingled
-unginned
-ungird
-ungirded
-ungirdle
-ungirdled
-ungirlish
-ungirt
-ungirth
-ungirthed
-ungive
-ungiveable
-ungiven
-ungiving
-ungka
-unglaciated
-unglad
-ungladden
-ungladdened
-ungladly
-ungladness
-ungladsome
-unglamorous
-unglandular
-unglassed
-unglaze
-unglazed
-ungleaned
-unglee
-ungleeful
-unglimpsed
-unglistening
-unglittering
-ungloating
-unglobe
-unglobular
-ungloom
-ungloomed
-ungloomy
-unglorified
-unglorify
-unglorifying
-unglorious
-ungloriously
-ungloriousness
-unglory
-unglosed
-ungloss
-unglossaried
-unglossed
-unglossily
-unglossiness
-unglossy
-unglove
-ungloved
-unglowing
-unglozed
-unglue
-unglued
-unglutinate
-unglutted
-ungluttonous
-ungnarred
-ungnaw
-ungnawn
-ungnostic
-ungoaded
-ungoatlike
-ungod
-ungoddess
-ungodlike
-ungodlily
-ungodliness
-ungodly
-ungodmothered
-ungold
-ungolden
-ungone
-ungood
-ungoodliness
-ungoodly
-ungored
-ungorge
-ungorged
-ungorgeous
-ungospel
-ungospelized
-ungospelled
-ungospellike
-ungossiping
-ungot
-ungothic
-ungotten
-ungouged
-ungouty
-ungovernable
-ungovernableness
-ungovernably
-ungoverned
-ungovernedness
-ungoverning
-ungown
-ungowned
-ungrace
-ungraced
-ungraceful
-ungracefully
-ungracefulness
-ungracious
-ungraciously
-ungraciousness
-ungradated
-ungraded
-ungradual
-ungradually
-ungraduated
-ungraduating
-ungraft
-ungrafted
-ungrain
-ungrainable
-ungrained
-ungrammar
-ungrammared
-ungrammatic
-ungrammatical
-ungrammatically
-ungrammaticalness
-ungrammaticism
-ungrand
-ungrantable
-ungranted
-ungranulated
-ungraphic
-ungraphitized
-ungrapple
-ungrappled
-ungrappler
-ungrasp
-ungraspable
-ungrasped
-ungrasping
-ungrassed
-ungrassy
-ungrated
-ungrateful
-ungratefully
-ungratefulness
-ungratifiable
-ungratified
-ungratifying
-ungrating
-ungrave
-ungraved
-ungraveled
-ungravelly
-ungravely
-ungraven
-ungrayed
-ungrazed
-ungreased
-ungreat
-ungreatly
-ungreatness
-ungreeable
-ungreedy
-ungreen
-ungreenable
-ungreened
-ungreeted
-ungregarious
-ungrieve
-ungrieved
-ungrieving
-ungrilled
-ungrimed
-ungrindable
-ungrip
-ungripe
-ungrizzled
-ungroaning
-ungroined
-ungroomed
-ungrooved
-ungropeable
-ungross
-ungrotesque
-unground
-ungroundable
-ungroundably
-ungrounded
-ungroundedly
-ungroundedness
-ungroupable
-ungrouped
-ungrow
-ungrowing
-ungrown
-ungrubbed
-ungrudged
-ungrudging
-ungrudgingly
-ungrudgingness
-ungruesome
-ungruff
-ungrumbling
-ungual
-unguaranteed
-unguard
-unguardable
-unguarded
-unguardedly
-unguardedness
-ungueal
-unguent
-unguentaria
-unguentarium
-unguentary
-unguentiferous
-unguentous
-unguentum
-unguerdoned
-ungues
-unguessable
-unguessableness
-unguessed
-unguical
-unguicorn
-unguicular
-Unguiculata
-unguiculate
-unguiculated
-unguidable
-unguidableness
-unguidably
-unguided
-unguidedly
-unguiferous
-unguiform
-unguiled
-unguileful
-unguilefully
-unguilefulness
-unguillotined
-unguiltily
-unguiltiness
-unguilty
-unguinal
-unguinous
-unguirostral
-unguis
-ungula
-ungulae
-ungular
-Ungulata
-ungulate
-ungulated
-unguled
-unguligrade
-ungull
-ungulous
-ungulp
-ungum
-ungummed
-ungushing
-ungutted
-unguttural
-unguyed
-unguzzled
-ungymnastic
-ungypsylike
-ungyve
-ungyved
-unhabit
-unhabitable
-unhabitableness
-unhabited
-unhabitual
-unhabitually
-unhabituate
-unhabituated
-unhacked
-unhackled
-unhackneyed
-unhackneyedness
-unhad
-unhaft
-unhafted
-unhaggled
-unhaggling
-unhailable
-unhailed
-unhair
-unhaired
-unhairer
-unhairily
-unhairiness
-unhairing
-unhairy
-unhallooed
-unhallow
-unhallowed
-unhallowedness
-unhaloed
-unhalsed
-unhalted
-unhalter
-unhaltered
-unhalting
-unhalved
-unhammered
-unhamper
-unhampered
-unhand
-unhandcuff
-unhandcuffed
-unhandicapped
-unhandily
-unhandiness
-unhandled
-unhandseled
-unhandsome
-unhandsomely
-unhandsomeness
-unhandy
-unhang
-unhanged
-unhap
-unhappen
-unhappily
-unhappiness
-unhappy
-unharangued
-unharassed
-unharbor
-unharbored
-unhard
-unharden
-unhardenable
-unhardened
-unhardihood
-unhardily
-unhardiness
-unhardness
-unhardy
-unharked
-unharmable
-unharmed
-unharmful
-unharmfully
-unharming
-unharmonic
-unharmonical
-unharmonious
-unharmoniously
-unharmoniousness
-unharmonize
-unharmonized
-unharmony
-unharness
-unharnessed
-unharped
-unharried
-unharrowed
-unharsh
-unharvested
-unhashed
-unhasp
-unhasped
-unhaste
-unhasted
-unhastened
-unhastily
-unhastiness
-unhasting
-unhasty
-unhat
-unhatchability
-unhatchable
-unhatched
-unhatcheled
-unhate
-unhated
-unhateful
-unhating
-unhatingly
-unhatted
-unhauled
-unhaunt
-unhaunted
-unhave
-unhawked
-unhayed
-unhazarded
-unhazarding
-unhazardous
-unhazardousness
-unhazed
-unhead
-unheaded
-unheader
-unheady
-unheal
-unhealable
-unhealableness
-unhealably
-unhealed
-unhealing
-unhealth
-unhealthful
-unhealthfully
-unhealthfulness
-unhealthily
-unhealthiness
-unhealthsome
-unhealthsomeness
-unhealthy
-unheaped
-unhearable
-unheard
-unhearing
-unhearsed
-unheart
-unhearten
-unheartsome
-unhearty
-unheatable
-unheated
-unheathen
-unheaved
-unheaven
-unheavenly
-unheavily
-unheaviness
-unheavy
-unhectored
-unhedge
-unhedged
-unheed
-unheeded
-unheededly
-unheedful
-unheedfully
-unheedfulness
-unheeding
-unheedingly
-unheedy
-unheeled
-unheelpieced
-unhefted
-unheightened
-unheired
-unheld
-unhele
-unheler
-unhelm
-unhelmed
-unhelmet
-unhelmeted
-unhelpable
-unhelpableness
-unhelped
-unhelpful
-unhelpfully
-unhelpfulness
-unhelping
-unhelved
-unhemmed
-unheppen
-unheralded
-unheraldic
-unherd
-unherded
-unhereditary
-unheretical
-unheritable
-unhermetic
-unhero
-unheroic
-unheroical
-unheroically
-unheroism
-unheroize
-unherolike
-unhesitant
-unhesitating
-unhesitatingly
-unhesitatingness
-unheuristic
-unhewable
-unhewed
-unhewn
-unhex
-unhid
-unhidable
-unhidableness
-unhidably
-unhidated
-unhidden
-unhide
-unhidebound
-unhideous
-unhieratic
-unhigh
-unhilarious
-unhinderable
-unhinderably
-unhindered
-unhindering
-unhinge
-unhingement
-unhinted
-unhipped
-unhired
-unhissed
-unhistoric
-unhistorical
-unhistorically
-unhistory
-unhistrionic
-unhit
-unhitch
-unhitched
-unhittable
-unhive
-unhoard
-unhoarded
-unhoarding
-unhoary
-unhoaxed
-unhobble
-unhocked
-unhoed
-unhogged
-unhoist
-unhoisted
-unhold
-unholiday
-unholily
-unholiness
-unhollow
-unhollowed
-unholy
-unhome
-unhomelike
-unhomelikeness
-unhomeliness
-unhomely
-unhomish
-unhomogeneity
-unhomogeneous
-unhomogeneously
-unhomologous
-unhoned
-unhonest
-unhonestly
-unhoneyed
-unhonied
-unhonorable
-unhonorably
-unhonored
-unhonoured
-unhood
-unhooded
-unhoodwink
-unhoodwinked
-unhoofed
-unhook
-unhooked
-unhoop
-unhooped
-unhooper
-unhooted
-unhoped
-unhopedly
-unhopedness
-unhopeful
-unhopefully
-unhopefulness
-unhoping
-unhopingly
-unhopped
-unhoppled
-unhorizoned
-unhorizontal
-unhorned
-unhorny
-unhoroscopic
-unhorse
-unhose
-unhosed
-unhospitable
-unhospitableness
-unhospitably
-unhostile
-unhostilely
-unhostileness
-unhostility
-unhot
-unhoundlike
-unhouse
-unhoused
-unhouseled
-unhouselike
-unhousewifely
-unhuddle
-unhugged
-unhull
-unhulled
-unhuman
-unhumanize
-unhumanized
-unhumanly
-unhumanness
-unhumble
-unhumbled
-unhumbledness
-unhumbleness
-unhumbly
-unhumbugged
-unhumid
-unhumiliated
-unhumored
-unhumorous
-unhumorously
-unhumorousness
-unhumoured
-unhung
-unhuntable
-unhunted
-unhurdled
-unhurled
-unhurried
-unhurriedly
-unhurriedness
-unhurrying
-unhurryingly
-unhurt
-unhurted
-unhurtful
-unhurtfully
-unhurtfulness
-unhurting
-unhusbanded
-unhusbandly
-unhushable
-unhushed
-unhushing
-unhusk
-unhusked
-unhustled
-unhustling
-unhutched
-unhuzzaed
-unhydraulic
-unhydrolyzed
-unhygienic
-unhygienically
-unhygrometric
-unhymeneal
-unhymned
-unhyphenated
-unhyphened
-unhypnotic
-unhypnotizable
-unhypnotize
-unhypocritical
-unhypocritically
-unhypothecated
-unhypothetical
-unhysterical
-uniambic
-uniambically
-uniangulate
-uniarticular
-uniarticulate
-Uniat
-uniat
-Uniate
-uniate
-uniauriculate
-uniauriculated
-uniaxal
-uniaxally
-uniaxial
-uniaxially
-unibasal
-unibivalent
-unible
-unibracteate
-unibracteolate
-unibranchiate
-unicalcarate
-unicameral
-unicameralism
-unicameralist
-unicamerate
-unicapsular
-unicarinate
-unicarinated
-unice
-uniced
-unicell
-unicellate
-unicelled
-unicellular
-unicellularity
-unicentral
-unichord
-uniciliate
-unicism
-unicist
-unicity
-uniclinal
-unicolor
-unicolorate
-unicolored
-unicolorous
-uniconstant
-unicorn
-unicorneal
-unicornic
-unicornlike
-unicornous
-unicornuted
-unicostate
-unicotyledonous
-unicum
-unicursal
-unicursality
-unicursally
-unicuspid
-unicuspidate
-unicycle
-unicyclist
-unidactyl
-unidactyle
-unidactylous
-unideaed
-unideal
-unidealism
-unidealist
-unidealistic
-unidealized
-unidentate
-unidentated
-unidenticulate
-unidentifiable
-unidentifiableness
-unidentifiably
-unidentified
-unidentifiedly
-unidentifying
-unideographic
-unidextral
-unidextrality
-unidigitate
-unidimensional
-unidiomatic
-unidiomatically
-unidirect
-unidirected
-unidirection
-unidirectional
-unidle
-unidleness
-unidly
-unidolatrous
-unidolized
-unidyllic
-unie
-uniembryonate
-uniequivalent
-uniface
-unifaced
-unifacial
-unifactorial
-unifarious
-unifiable
-unific
-unification
-unificationist
-unificator
-unified
-unifiedly
-unifiedness
-unifier
-unifilar
-uniflagellate
-unifloral
-uniflorate
-uniflorous
-uniflow
-uniflowered
-unifocal
-unifoliar
-unifoliate
-unifoliolate
-Unifolium
-uniform
-uniformal
-uniformalization
-uniformalize
-uniformally
-uniformation
-uniformed
-uniformist
-uniformitarian
-uniformitarianism
-uniformity
-uniformization
-uniformize
-uniformless
-uniformly
-uniformness
-unify
-unigenesis
-unigenetic
-unigenist
-unigenistic
-unigenital
-unigeniture
-unigenous
-uniglandular
-uniglobular
-unignitable
-unignited
-unignitible
-unignominious
-unignorant
-unignored
-unigravida
-uniguttulate
-unijugate
-unijugous
-unilabiate
-unilabiated
-unilamellar
-unilamellate
-unilaminar
-unilaminate
-unilateral
-unilateralism
-unilateralist
-unilaterality
-unilateralization
-unilateralize
-unilaterally
-unilinear
-unilingual
-unilingualism
-uniliteral
-unilludedly
-unillumed
-unilluminated
-unilluminating
-unillumination
-unillumined
-unillusioned
-unillusory
-unillustrated
-unillustrative
-unillustrious
-unilobal
-unilobar
-unilobate
-unilobe
-unilobed
-unilobular
-unilocular
-unilocularity
-uniloculate
-unimacular
-unimaged
-unimaginable
-unimaginableness
-unimaginably
-unimaginary
-unimaginative
-unimaginatively
-unimaginativeness
-unimagine
-unimagined
-unimanual
-unimbanked
-unimbellished
-unimbezzled
-unimbibed
-unimbibing
-unimbittered
-unimbodied
-unimboldened
-unimbordered
-unimbosomed
-unimbowed
-unimbowered
-unimbroiled
-unimbrowned
-unimbrued
-unimbued
-unimedial
-unimitable
-unimitableness
-unimitably
-unimitated
-unimitating
-unimitative
-unimmaculate
-unimmanent
-unimmediate
-unimmerged
-unimmergible
-unimmersed
-unimmigrating
-unimmolated
-unimmortal
-unimmortalize
-unimmortalized
-unimmovable
-unimmured
-unimodal
-unimodality
-unimodular
-unimolecular
-unimolecularity
-unimpair
-unimpairable
-unimpaired
-unimpartable
-unimparted
-unimpartial
-unimpassionate
-unimpassioned
-unimpassionedly
-unimpassionedness
-unimpatient
-unimpawned
-unimpeachability
-unimpeachable
-unimpeachableness
-unimpeachably
-unimpeached
-unimpearled
-unimped
-unimpeded
-unimpededly
-unimpedible
-unimpedness
-unimpelled
-unimpenetrable
-unimperative
-unimperial
-unimperialistic
-unimperious
-unimpertinent
-unimpinging
-unimplanted
-unimplicable
-unimplicate
-unimplicated
-unimplicit
-unimplicitly
-unimplied
-unimplorable
-unimplored
-unimpoisoned
-unimportance
-unimportant
-unimportantly
-unimported
-unimporting
-unimportunate
-unimportunately
-unimportuned
-unimposed
-unimposedly
-unimposing
-unimpostrous
-unimpounded
-unimpoverished
-unimpowered
-unimprecated
-unimpregnable
-unimpregnate
-unimpregnated
-unimpressed
-unimpressibility
-unimpressible
-unimpressibleness
-unimpressibly
-unimpressionability
-unimpressionable
-unimpressive
-unimpressively
-unimpressiveness
-unimprinted
-unimprison
-unimprisonable
-unimprisoned
-unimpropriated
-unimprovable
-unimprovableness
-unimprovably
-unimproved
-unimprovedly
-unimprovedness
-unimprovement
-unimproving
-unimprovised
-unimpugnable
-unimpugned
-unimpulsive
-unimpurpled
-unimputable
-unimputed
-unimucronate
-unimultiplex
-unimuscular
-uninaugurated
-unincantoned
-unincarcerated
-unincarnate
-unincarnated
-unincensed
-uninchoative
-unincidental
-unincised
-unincisive
-unincited
-uninclinable
-uninclined
-uninclining
-uninclosed
-uninclosedness
-unincludable
-unincluded
-uninclusive
-uninclusiveness
-uninconvenienced
-unincorporate
-unincorporated
-unincorporatedly
-unincorporatedness
-unincreasable
-unincreased
-unincreasing
-unincubated
-uninculcated
-unincumbered
-unindebted
-unindebtedly
-unindebtedness
-unindemnified
-unindentable
-unindented
-unindentured
-unindexed
-unindicable
-unindicated
-unindicative
-unindictable
-unindicted
-unindifference
-unindifferency
-unindifferent
-unindifferently
-unindigent
-unindignant
-unindividual
-unindividualize
-unindividualized
-unindividuated
-unindorsed
-uninduced
-uninductive
-unindulged
-unindulgent
-unindulgently
-unindurated
-unindustrial
-unindustrialized
-unindustrious
-unindustriously
-unindwellable
-uninebriated
-uninebriating
-uninervate
-uninerved
-uninfallibility
-uninfallible
-uninfatuated
-uninfectable
-uninfected
-uninfectious
-uninfectiousness
-uninfeft
-uninferred
-uninfested
-uninfiltrated
-uninfinite
-uninfiniteness
-uninfixed
-uninflamed
-uninflammability
-uninflammable
-uninflated
-uninflected
-uninflectedness
-uninflicted
-uninfluenceable
-uninfluenced
-uninfluencing
-uninfluencive
-uninfluential
-uninfluentiality
-uninfolded
-uninformed
-uninforming
-uninfracted
-uninfringeable
-uninfringed
-uninfringible
-uninfuriated
-uninfused
-uningenious
-uningeniously
-uningeniousness
-uningenuity
-uningenuous
-uningenuously
-uningenuousness
-uningested
-uningrafted
-uningrained
-uninhabitability
-uninhabitable
-uninhabitableness
-uninhabitably
-uninhabited
-uninhabitedness
-uninhaled
-uninheritability
-uninheritable
-uninherited
-uninhibited
-uninhibitive
-uninhumed
-uninimical
-uniniquitous
-uninitialed
-uninitialled
-uninitiate
-uninitiated
-uninitiatedness
-uninitiation
-uninjectable
-uninjected
-uninjurable
-uninjured
-uninjuredness
-uninjuring
-uninjurious
-uninjuriously
-uninjuriousness
-uninked
-uninlaid
-uninn
-uninnate
-uninnocence
-uninnocent
-uninnocently
-uninnocuous
-uninnovating
-uninoculable
-uninoculated
-uninodal
-uninominal
-uninquired
-uninquiring
-uninquisitive
-uninquisitively
-uninquisitiveness
-uninquisitorial
-uninsane
-uninsatiable
-uninscribed
-uninserted
-uninshrined
-uninsinuated
-uninsistent
-uninsolvent
-uninspected
-uninspirable
-uninspired
-uninspiring
-uninspiringly
-uninspirited
-uninspissated
-uninstalled
-uninstanced
-uninstated
-uninstigated
-uninstilled
-uninstituted
-uninstructed
-uninstructedly
-uninstructedness
-uninstructible
-uninstructing
-uninstructive
-uninstructively
-uninstructiveness
-uninstrumental
-uninsular
-uninsulate
-uninsulated
-uninsultable
-uninsulted
-uninsulting
-uninsurability
-uninsurable
-uninsured
-unintegrated
-unintellective
-unintellectual
-unintellectualism
-unintellectuality
-unintellectually
-unintelligence
-unintelligent
-unintelligently
-unintelligentsia
-unintelligibility
-unintelligible
-unintelligibleness
-unintelligibly
-unintended
-unintendedly
-unintensive
-unintent
-unintentional
-unintentionality
-unintentionally
-unintentionalness
-unintently
-unintentness
-unintercalated
-unintercepted
-uninterchangeable
-uninterdicted
-uninterested
-uninterestedly
-uninterestedness
-uninteresting
-uninterestingly
-uninterestingness
-uninterferedwith
-uninterjected
-uninterlaced
-uninterlarded
-uninterleave
-uninterleaved
-uninterlined
-uninterlinked
-uninterlocked
-unintermarrying
-unintermediate
-unintermingled
-unintermission
-unintermissive
-unintermitted
-unintermittedly
-unintermittedness
-unintermittent
-unintermitting
-unintermittingly
-unintermittingness
-unintermixed
-uninternational
-uninterpleaded
-uninterpolated
-uninterposed
-uninterposing
-uninterpretable
-uninterpreted
-uninterred
-uninterrogable
-uninterrogated
-uninterrupted
-uninterruptedly
-uninterruptedness
-uninterruptible
-uninterruptibleness
-uninterrupting
-uninterruption
-unintersected
-uninterspersed
-unintervening
-uninterviewed
-unintervolved
-uninterwoven
-uninthroned
-unintimate
-unintimated
-unintimidated
-unintitled
-unintombed
-unintoned
-unintoxicated
-unintoxicatedness
-unintoxicating
-unintrenchable
-unintrenched
-unintricate
-unintrigued
-unintriguing
-unintroduced
-unintroducible
-unintroitive
-unintromitted
-unintrospective
-unintruded
-unintruding
-unintrusive
-unintrusively
-unintrusted
-unintuitive
-unintwined
-uninuclear
-uninucleate
-uninucleated
-uninundated
-uninured
-uninurned
-uninvadable
-uninvaded
-uninvaginated
-uninvalidated
-uninveighing
-uninveigled
-uninvented
-uninventful
-uninventibleness
-uninventive
-uninventively
-uninventiveness
-uninverted
-uninvested
-uninvestigable
-uninvestigated
-uninvestigating
-uninvestigative
-uninvidious
-uninvidiously
-uninvigorated
-uninvincible
-uninvite
-uninvited
-uninvitedly
-uninviting
-uninvoiced
-uninvoked
-uninvolved
-uninweaved
-uninwoven
-uninwrapped
-uninwreathed
-Unio
-unio
-uniocular
-unioid
-Uniola
-union
-unioned
-unionic
-unionid
-Unionidae
-unioniform
-unionism
-unionist
-unionistic
-unionization
-unionize
-unionoid
-unioval
-uniovular
-uniovulate
-unipara
-uniparental
-uniparient
-uniparous
-unipartite
-uniped
-unipeltate
-uniperiodic
-unipersonal
-unipersonalist
-unipersonality
-unipetalous
-uniphase
-uniphaser
-uniphonous
-uniplanar
-uniplicate
-unipod
-unipolar
-unipolarity
-uniporous
-unipotence
-unipotent
-unipotential
-unipulse
-uniquantic
-unique
-uniquely
-uniqueness
-uniquity
-uniradial
-uniradiate
-uniradiated
-uniradical
-uniramose
-uniramous
-unirascible
-unireme
-unirenic
-unirhyme
-uniridescent
-unironed
-unironical
-unirradiated
-unirrigated
-unirritable
-unirritant
-unirritated
-unirritatedly
-unirritating
-unisepalous
-uniseptate
-uniserial
-uniserially
-uniseriate
-uniseriately
-uniserrate
-uniserrulate
-unisexed
-unisexual
-unisexuality
-unisexually
-unisilicate
-unisoil
-unisolable
-unisolate
-unisolated
-unisomeric
-unisometrical
-unisomorphic
-unison
-unisonal
-unisonally
-unisonance
-unisonant
-unisonous
-unisotropic
-unisparker
-unispiculate
-unispinose
-unispiral
-unissuable
-unissued
-unistylist
-unisulcate
-unit
-unitage
-unital
-unitalicized
-Unitarian
-unitarian
-Unitarianism
-Unitarianize
-unitarily
-unitariness
-unitarism
-unitarist
-unitary
-unite
-uniteability
-uniteable
-uniteably
-united
-unitedly
-unitedness
-unitemized
-unitentacular
-uniter
-uniting
-unitingly
-unition
-unitism
-unitistic
-unitive
-unitively
-unitiveness
-unitize
-unitooth
-unitrivalent
-unitrope
-unituberculate
-unitude
-unity
-uniunguiculate
-uniungulate
-univalence
-univalency
-univalent
-univalvate
-univalve
-univalvular
-univariant
-univerbal
-universal
-universalia
-Universalian
-Universalism
-universalism
-Universalist
-universalist
-Universalistic
-universalistic
-universality
-universalization
-universalize
-universalizer
-universally
-universalness
-universanimous
-universe
-universeful
-universitarian
-universitarianism
-universitary
-universitize
-university
-universityless
-universitylike
-universityship
-universological
-universologist
-universology
-univied
-univocability
-univocacy
-univocal
-univocalized
-univocally
-univocity
-univoltine
-univorous
-unjacketed
-unjaded
-unjagged
-unjailed
-unjam
-unjapanned
-unjarred
-unjarring
-unjaundiced
-unjaunty
-unjealous
-unjealoused
-unjellied
-unjesting
-unjesuited
-unjesuitical
-unjesuitically
-unjewel
-unjeweled
-unjewelled
-Unjewish
-unjilted
-unjocose
-unjocund
-unjogged
-unjogging
-unjoin
-unjoinable
-unjoint
-unjointed
-unjointedness
-unjointured
-unjoking
-unjokingly
-unjolly
-unjolted
-unjostled
-unjournalized
-unjovial
-unjovially
-unjoyed
-unjoyful
-unjoyfully
-unjoyfulness
-unjoyous
-unjoyously
-unjoyousness
-unjudgable
-unjudge
-unjudged
-unjudgelike
-unjudging
-unjudicable
-unjudicial
-unjudicially
-unjudicious
-unjudiciously
-unjudiciousness
-unjuggled
-unjuiced
-unjuicy
-unjumbled
-unjumpable
-unjust
-unjustice
-unjusticiable
-unjustifiable
-unjustifiableness
-unjustifiably
-unjustified
-unjustifiedly
-unjustifiedness
-unjustify
-unjustled
-unjustly
-unjustness
-unjuvenile
-unkaiserlike
-unkamed
-unked
-unkeeled
-unkembed
-unkempt
-unkemptly
-unkemptness
-unken
-unkenned
-unkennedness
-unkennel
-unkenneled
-unkenning
-unkensome
-unkept
-unkerchiefed
-unket
-unkey
-unkeyed
-unkicked
-unkid
-unkill
-unkillability
-unkillable
-unkilled
-unkilling
-unkilned
-unkin
-unkind
-unkindhearted
-unkindled
-unkindledness
-unkindlily
-unkindliness
-unkindling
-unkindly
-unkindness
-unkindred
-unkindredly
-unking
-unkingdom
-unkinged
-unkinger
-unkinglike
-unkingly
-unkink
-unkinlike
-unkirk
-unkiss
-unkissed
-unkist
-unknave
-unkneaded
-unkneeling
-unknelled
-unknew
-unknight
-unknighted
-unknightlike
-unknit
-unknittable
-unknitted
-unknitting
-unknocked
-unknocking
-unknot
-unknotted
-unknotty
-unknow
-unknowability
-unknowable
-unknowableness
-unknowably
-unknowing
-unknowingly
-unknowingness
-unknowledgeable
-unknown
-unknownly
-unknownness
-unknownst
-unkodaked
-unkoshered
-unlabeled
-unlabialize
-unlabiate
-unlaborable
-unlabored
-unlaboring
-unlaborious
-unlaboriously
-unlaboriousness
-unlace
-unlaced
-unlacerated
-unlackeyed
-unlacquered
-unlade
-unladen
-unladled
-unladyfied
-unladylike
-unlagging
-unlaid
-unlame
-unlamed
-unlamented
-unlampooned
-unlanced
-unland
-unlanded
-unlandmarked
-unlanguaged
-unlanguid
-unlanguishing
-unlanterned
-unlap
-unlapped
-unlapsed
-unlapsing
-unlarded
-unlarge
-unlash
-unlashed
-unlasher
-unlassoed
-unlasting
-unlatch
-unlath
-unlathed
-unlathered
-unlatinized
-unlatticed
-unlaudable
-unlaudableness
-unlaudably
-unlauded
-unlaugh
-unlaughing
-unlaunched
-unlaundered
-unlaureled
-unlaved
-unlaving
-unlavish
-unlavished
-unlaw
-unlawed
-unlawful
-unlawfully
-unlawfulness
-unlawlearned
-unlawlike
-unlawly
-unlawyered
-unlawyerlike
-unlay
-unlayable
-unleached
-unlead
-unleaded
-unleaderly
-unleaf
-unleafed
-unleagued
-unleaguer
-unleakable
-unleaky
-unleal
-unlean
-unleared
-unlearn
-unlearnability
-unlearnable
-unlearnableness
-unlearned
-unlearnedly
-unlearnedness
-unlearning
-unlearnt
-unleasable
-unleased
-unleash
-unleashed
-unleathered
-unleave
-unleaved
-unleavenable
-unleavened
-unlectured
-unled
-unleft
-unlegacied
-unlegal
-unlegalized
-unlegally
-unlegalness
-unlegate
-unlegislative
-unleisured
-unleisuredness
-unleisurely
-unlenient
-unlensed
-unlent
-unless
-unlessened
-unlessoned
-unlet
-unlettable
-unletted
-unlettered
-unletteredly
-unletteredness
-unlettering
-unletterlike
-unlevel
-unleveled
-unlevelly
-unlevelness
-unlevied
-unlevigated
-unlexicographical
-unliability
-unliable
-unlibeled
-unliberal
-unliberalized
-unliberated
-unlibidinous
-unlicensed
-unlicentiated
-unlicentious
-unlichened
-unlickable
-unlicked
-unlid
-unlidded
-unlie
-unlifelike
-unliftable
-unlifted
-unlifting
-unligable
-unligatured
-unlight
-unlighted
-unlightedly
-unlightedness
-unlightened
-unlignified
-unlikable
-unlikableness
-unlikably
-unlike
-unlikeable
-unlikeableness
-unlikeably
-unliked
-unlikelihood
-unlikeliness
-unlikely
-unliken
-unlikeness
-unliking
-unlimb
-unlimber
-unlime
-unlimed
-unlimitable
-unlimitableness
-unlimitably
-unlimited
-unlimitedly
-unlimitedness
-unlimitless
-unlimned
-unlimp
-unline
-unlineal
-unlined
-unlingering
-unlink
-unlinked
-unlionlike
-unliquefiable
-unliquefied
-unliquid
-unliquidatable
-unliquidated
-unliquidating
-unliquidation
-unliquored
-unlisping
-unlist
-unlisted
-unlistened
-unlistening
-unlisty
-unlit
-unliteral
-unliterally
-unliteralness
-unliterary
-unliterate
-unlitigated
-unlitten
-unlittered
-unliturgical
-unliturgize
-unlivable
-unlivableness
-unlivably
-unlive
-unliveable
-unliveableness
-unliveably
-unliveliness
-unlively
-unliveried
-unlivery
-unliving
-unlizardlike
-unload
-unloaded
-unloaden
-unloader
-unloafing
-unloanably
-unloaned
-unloaning
-unloath
-unloathed
-unloathful
-unloathly
-unloathsome
-unlobed
-unlocal
-unlocalizable
-unlocalize
-unlocalized
-unlocally
-unlocated
-unlock
-unlockable
-unlocked
-unlocker
-unlocking
-unlocomotive
-unlodge
-unlodged
-unlofty
-unlogged
-unlogic
-unlogical
-unlogically
-unlogicalness
-unlonely
-unlook
-unlooked
-unloop
-unlooped
-unloosable
-unloosably
-unloose
-unloosen
-unloosening
-unloosing
-unlooted
-unlopped
-unloquacious
-unlord
-unlorded
-unlordly
-unlosable
-unlosableness
-unlost
-unlotted
-unlousy
-unlovable
-unlovableness
-unlovably
-unlove
-unloveable
-unloveableness
-unloveably
-unloved
-unlovelily
-unloveliness
-unlovely
-unloverlike
-unloverly
-unloving
-unlovingly
-unlovingness
-unlowered
-unlowly
-unloyal
-unloyally
-unloyalty
-unlubricated
-unlucent
-unlucid
-unluck
-unluckful
-unluckily
-unluckiness
-unlucky
-unlucrative
-unludicrous
-unluffed
-unlugged
-unlugubrious
-unluminous
-unlumped
-unlunar
-unlured
-unlust
-unlustily
-unlustiness
-unlustrous
-unlusty
-unlute
-unluted
-unluxated
-unluxuriant
-unluxurious
-unlycanthropize
-unlying
-unlyrical
-unlyrically
-unmacadamized
-unmacerated
-unmachinable
-unmackly
-unmad
-unmadded
-unmaddened
-unmade
-unmagic
-unmagical
-unmagisterial
-unmagistratelike
-unmagnanimous
-unmagnetic
-unmagnetical
-unmagnetized
-unmagnified
-unmagnify
-unmaid
-unmaidenlike
-unmaidenliness
-unmaidenly
-unmail
-unmailable
-unmailableness
-unmailed
-unmaimable
-unmaimed
-unmaintainable
-unmaintained
-unmajestic
-unmakable
-unmake
-unmaker
-unmalevolent
-unmalicious
-unmalignant
-unmaligned
-unmalleability
-unmalleable
-unmalleableness
-unmalled
-unmaltable
-unmalted
-unmammalian
-unmammonized
-unman
-unmanacle
-unmanacled
-unmanageable
-unmanageableness
-unmanageably
-unmanaged
-unmancipated
-unmandated
-unmanducated
-unmaned
-unmaneged
-unmanful
-unmanfully
-unmangled
-unmaniable
-unmaniac
-unmaniacal
-unmanicured
-unmanifest
-unmanifested
-unmanipulatable
-unmanipulated
-unmanlike
-unmanlily
-unmanliness
-unmanly
-unmanned
-unmanner
-unmannered
-unmanneredly
-unmannerliness
-unmannerly
-unmannish
-unmanored
-unmantle
-unmantled
-unmanufacturable
-unmanufactured
-unmanumissible
-unmanumitted
-unmanurable
-unmanured
-unmappable
-unmapped
-unmarbled
-unmarch
-unmarching
-unmarginal
-unmarginated
-unmarine
-unmaritime
-unmarkable
-unmarked
-unmarketable
-unmarketed
-unmarled
-unmarred
-unmarriable
-unmarriageability
-unmarriageable
-unmarried
-unmarring
-unmarry
-unmarrying
-unmarshaled
-unmartial
-unmartyr
-unmartyred
-unmarvelous
-unmasculine
-unmashed
-unmask
-unmasked
-unmasker
-unmasking
-unmasquerade
-unmassacred
-unmassed
-unmast
-unmaster
-unmasterable
-unmastered
-unmasterful
-unmasticable
-unmasticated
-unmatchable
-unmatchableness
-unmatchably
-unmatched
-unmatchedness
-unmate
-unmated
-unmaterial
-unmaterialistic
-unmateriate
-unmaternal
-unmathematical
-unmathematically
-unmating
-unmatriculated
-unmatrimonial
-unmatronlike
-unmatted
-unmature
-unmatured
-unmaturely
-unmatureness
-unmaturing
-unmaturity
-unmauled
-unmaze
-unmeaning
-unmeaningly
-unmeaningness
-unmeant
-unmeasurable
-unmeasurableness
-unmeasurably
-unmeasured
-unmeasuredly
-unmeasuredness
-unmeated
-unmechanic
-unmechanical
-unmechanically
-unmechanistic
-unmechanize
-unmechanized
-unmedaled
-unmedalled
-unmeddle
-unmeddled
-unmeddlesome
-unmeddling
-unmeddlingly
-unmeddlingness
-unmediaeval
-unmediated
-unmediatized
-unmedicable
-unmedical
-unmedicated
-unmedicative
-unmedicinable
-unmedicinal
-unmeditated
-unmeditative
-unmediumistic
-unmedullated
-unmeek
-unmeekly
-unmeekness
-unmeet
-unmeetable
-unmeetly
-unmeetness
-unmelancholy
-unmeliorated
-unmellow
-unmellowed
-unmelodic
-unmelodious
-unmelodiously
-unmelodiousness
-unmelodized
-unmelodramatic
-unmeltable
-unmeltableness
-unmeltably
-unmelted
-unmeltedness
-unmelting
-unmember
-unmemoired
-unmemorable
-unmemorialized
-unmemoried
-unmemorized
-unmenaced
-unmenacing
-unmendable
-unmendableness
-unmendably
-unmendacious
-unmended
-unmenial
-unmenseful
-unmenstruating
-unmensurable
-unmental
-unmentionability
-unmentionable
-unmentionableness
-unmentionables
-unmentionably
-unmentioned
-unmercantile
-unmercenariness
-unmercenary
-unmercerized
-unmerchantable
-unmerchantlike
-unmerchantly
-unmerciful
-unmercifully
-unmercifulness
-unmercurial
-unmeretricious
-unmerge
-unmerged
-unmeridional
-unmerited
-unmeritedly
-unmeritedness
-unmeriting
-unmeritorious
-unmeritoriously
-unmeritoriousness
-unmerry
-unmesh
-unmesmeric
-unmesmerize
-unmesmerized
-unmet
-unmetaled
-unmetalized
-unmetalled
-unmetallic
-unmetallurgical
-unmetamorphosed
-unmetaphorical
-unmetaphysic
-unmetaphysical
-unmeted
-unmeteorological
-unmetered
-unmethodical
-unmethodically
-unmethodicalness
-unmethodized
-unmethodizing
-unmethylated
-unmeticulous
-unmetric
-unmetrical
-unmetrically
-unmetricalness
-unmetropolitan
-unmettle
-unmew
-unmewed
-unmicaceous
-unmicrobic
-unmicroscopic
-unmidwifed
-unmighty
-unmigrating
-unmildewed
-unmilitant
-unmilitarily
-unmilitariness
-unmilitaristic
-unmilitarized
-unmilitary
-unmilked
-unmilled
-unmillinered
-unmilted
-unmimicked
-unminable
-unminced
-unmincing
-unmind
-unminded
-unmindful
-unmindfully
-unmindfulness
-unminding
-unmined
-unmineralized
-unmingle
-unmingleable
-unmingled
-unmingling
-unminimized
-unminished
-unminister
-unministered
-unministerial
-unministerially
-unminted
-unminuted
-unmiracled
-unmiraculous
-unmiraculously
-unmired
-unmirrored
-unmirthful
-unmirthfully
-unmirthfulness
-unmiry
-unmisanthropic
-unmiscarrying
-unmischievous
-unmiscible
-unmisconceivable
-unmiserly
-unmisgiving
-unmisgivingly
-unmisguided
-unmisinterpretable
-unmisled
-unmissable
-unmissed
-unmissionary
-unmissionized
-unmist
-unmistakable
-unmistakableness
-unmistakably
-unmistakedly
-unmistaken
-unmistakingly
-unmistressed
-unmistrusted
-unmistrustful
-unmistrusting
-unmisunderstandable
-unmisunderstanding
-unmisunderstood
-unmiter
-unmitigable
-unmitigated
-unmitigatedly
-unmitigatedness
-unmitigative
-unmittened
-unmix
-unmixable
-unmixableness
-unmixed
-unmixedly
-unmixedness
-unmoaned
-unmoated
-unmobbed
-unmobilized
-unmocked
-unmocking
-unmockingly
-unmodel
-unmodeled
-unmodelled
-unmoderate
-unmoderately
-unmoderateness
-unmoderating
-unmodern
-unmodernity
-unmodernize
-unmodernized
-unmodest
-unmodifiable
-unmodifiableness
-unmodifiably
-unmodified
-unmodifiedness
-unmodish
-unmodulated
-unmoiled
-unmoist
-unmoisten
-unmold
-unmoldable
-unmolded
-unmoldered
-unmoldering
-unmoldy
-unmolested
-unmolestedly
-unmolesting
-unmollifiable
-unmollifiably
-unmollified
-unmollifying
-unmolten
-unmomentary
-unmomentous
-unmomentously
-unmonarch
-unmonarchical
-unmonastic
-unmonetary
-unmoneyed
-unmonistic
-unmonitored
-unmonkish
-unmonkly
-unmonopolize
-unmonopolized
-unmonopolizing
-unmonotonous
-unmonumented
-unmoor
-unmoored
-unmooted
-unmopped
-unmoral
-unmoralist
-unmorality
-unmoralize
-unmoralized
-unmoralizing
-unmorally
-unmoralness
-unmorbid
-unmordanted
-unmoribund
-unmorose
-unmorphological
-unmortal
-unmortared
-unmortgage
-unmortgageable
-unmortgaged
-unmortified
-unmortifiedly
-unmortifiedness
-unmortise
-unmortised
-unmossed
-unmothered
-unmotherly
-unmotionable
-unmotivated
-unmotivatedly
-unmotivatedness
-unmotived
-unmotorized
-unmottled
-unmounded
-unmount
-unmountable
-unmountainous
-unmounted
-unmounting
-unmourned
-unmournful
-unmourning
-unmouthable
-unmouthed
-unmouthpieced
-unmovability
-unmovable
-unmovableness
-unmovably
-unmoved
-unmovedly
-unmoving
-unmovingly
-unmovingness
-unmowed
-unmown
-unmucilaged
-unmudded
-unmuddied
-unmuddle
-unmuddled
-unmuddy
-unmuffle
-unmuffled
-unmulcted
-unmulish
-unmulled
-unmullioned
-unmultipliable
-unmultiplied
-unmultipliedly
-unmultiply
-unmummied
-unmummify
-unmunched
-unmundane
-unmundified
-unmunicipalized
-unmunificent
-unmunitioned
-unmurmured
-unmurmuring
-unmurmuringly
-unmurmurous
-unmuscled
-unmuscular
-unmusical
-unmusicality
-unmusically
-unmusicalness
-unmusicianly
-unmusked
-unmussed
-unmusted
-unmusterable
-unmustered
-unmutated
-unmutation
-unmuted
-unmutilated
-unmutinous
-unmuttered
-unmutual
-unmutualized
-unmuzzle
-unmuzzled
-unmuzzling
-unmyelinated
-unmysterious
-unmysteriously
-unmystery
-unmystical
-unmysticize
-unmystified
-unmythical
-unnabbed
-unnagged
-unnagging
-unnail
-unnailed
-unnaked
-unnamability
-unnamable
-unnamableness
-unnamably
-unname
-unnameability
-unnameable
-unnameableness
-unnameably
-unnamed
-unnapkined
-unnapped
-unnarcotic
-unnarrated
-unnarrow
-unnation
-unnational
-unnationalized
-unnative
-unnatural
-unnaturalism
-unnaturalist
-unnaturalistic
-unnaturality
-unnaturalizable
-unnaturalize
-unnaturalized
-unnaturally
-unnaturalness
-unnature
-unnautical
-unnavigability
-unnavigable
-unnavigableness
-unnavigably
-unnavigated
-unneaped
-unnearable
-unneared
-unnearly
-unnearness
-unneat
-unneatly
-unneatness
-unnebulous
-unnecessarily
-unnecessariness
-unnecessary
-unnecessitated
-unnecessitating
-unnecessity
-unneeded
-unneedful
-unneedfully
-unneedfulness
-unneedy
-unnefarious
-unnegated
-unneglected
-unnegligent
-unnegotiable
-unnegotiableness
-unnegotiably
-unnegotiated
-unnegro
-unneighbored
-unneighborlike
-unneighborliness
-unneighborly
-unnephritic
-unnerve
-unnerved
-unnervous
-unnest
-unnestle
-unnestled
-unneth
-unnethe
-unnethes
-unnethis
-unnetted
-unnettled
-unneurotic
-unneutral
-unneutralized
-unneutrally
-unnew
-unnewly
-unnewness
-unnibbed
-unnibbied
-unnice
-unnicely
-unniceness
-unniched
-unnicked
-unnickeled
-unnickelled
-unnicknamed
-unniggard
-unniggardly
-unnigh
-unnimbed
-unnimble
-unnimbleness
-unnimbly
-unnipped
-unnitrogenized
-unnobilitated
-unnobility
-unnoble
-unnobleness
-unnobly
-unnoised
-unnomadic
-unnominated
-unnonsensical
-unnoosed
-unnormal
-unnorthern
-unnose
-unnosed
-unnotable
-unnotched
-unnoted
-unnoteworthy
-unnoticeable
-unnoticeableness
-unnoticeably
-unnoticed
-unnoticing
-unnotified
-unnotify
-unnoting
-unnourishable
-unnourished
-unnourishing
-unnovel
-unnovercal
-unnucleated
-unnullified
-unnumberable
-unnumberableness
-unnumberably
-unnumbered
-unnumberedness
-unnumerical
-unnumerous
-unnurtured
-unnutritious
-unnutritive
-unnuzzled
-unnymphlike
-unoared
-unobdurate
-unobedience
-unobedient
-unobediently
-unobese
-unobeyed
-unobeying
-unobjected
-unobjectionable
-unobjectionableness
-unobjectionably
-unobjectional
-unobjective
-unobligated
-unobligatory
-unobliged
-unobliging
-unobligingly
-unobligingness
-unobliterable
-unobliterated
-unoblivious
-unobnoxious
-unobscene
-unobscure
-unobscured
-unobsequious
-unobsequiously
-unobsequiousness
-unobservable
-unobservance
-unobservant
-unobservantly
-unobservantness
-unobserved
-unobservedly
-unobserving
-unobservingly
-unobsessed
-unobsolete
-unobstinate
-unobstruct
-unobstructed
-unobstructedly
-unobstructedness
-unobstructive
-unobstruent
-unobtainable
-unobtainableness
-unobtainably
-unobtained
-unobtruded
-unobtruding
-unobtrusive
-unobtrusively
-unobtrusiveness
-unobtunded
-unobumbrated
-unobverted
-unobviated
-unobvious
-unoccasional
-unoccasioned
-unoccidental
-unoccluded
-unoccupancy
-unoccupation
-unoccupied
-unoccupiedly
-unoccupiedness
-unoccurring
-unoceanic
-unocular
-unode
-unodious
-unodoriferous
-unoecumenic
-unoecumenical
-unoffendable
-unoffended
-unoffendedly
-unoffender
-unoffending
-unoffendingly
-unoffensive
-unoffensively
-unoffensiveness
-unoffered
-unofficed
-unofficered
-unofficerlike
-unofficial
-unofficialdom
-unofficially
-unofficialness
-unofficiating
-unofficinal
-unofficious
-unofficiously
-unofficiousness
-unoffset
-unoften
-unogled
-unoil
-unoiled
-unoiling
-unoily
-unold
-unomened
-unominous
-unomitted
-unomnipotent
-unomniscient
-Unona
-unonerous
-unontological
-unopaque
-unoped
-unopen
-unopenable
-unopened
-unopening
-unopenly
-unopenness
-unoperably
-unoperated
-unoperatic
-unoperating
-unoperative
-unoperculate
-unoperculated
-unopined
-unopinionated
-unoppignorated
-unopportune
-unopportunely
-unopportuneness
-unopposable
-unopposed
-unopposedly
-unopposedness
-unopposite
-unoppressed
-unoppressive
-unoppressively
-unoppressiveness
-unopprobrious
-unoppugned
-unopulence
-unopulent
-unoratorial
-unoratorical
-unorbed
-unorbital
-unorchestrated
-unordain
-unordainable
-unordained
-unorder
-unorderable
-unordered
-unorderly
-unordinarily
-unordinariness
-unordinary
-unordinate
-unordinately
-unordinateness
-unordnanced
-unorganic
-unorganical
-unorganically
-unorganicalness
-unorganizable
-unorganized
-unorganizedly
-unorganizedness
-unoriental
-unorientalness
-unoriented
-unoriginal
-unoriginality
-unoriginally
-unoriginalness
-unoriginate
-unoriginated
-unoriginatedness
-unoriginately
-unoriginateness
-unorigination
-unoriginative
-unoriginatively
-unoriginativeness
-unorn
-unornamental
-unornamentally
-unornamentalness
-unornamented
-unornate
-unornithological
-unornly
-unorphaned
-unorthodox
-unorthodoxically
-unorthodoxly
-unorthodoxness
-unorthodoxy
-unorthographical
-unorthographically
-unoscillating
-unosculated
-unossified
-unostensible
-unostentation
-unostentatious
-unostentatiously
-unostentatiousness
-unoutgrown
-unoutlawed
-unoutraged
-unoutspeakable
-unoutspoken
-unoutworn
-unoverclouded
-unovercome
-unoverdone
-unoverdrawn
-unoverflowing
-unoverhauled
-unoverleaped
-unoverlooked
-unoverpaid
-unoverpowered
-unoverruled
-unovert
-unovertaken
-unoverthrown
-unovervalued
-unoverwhelmed
-unowed
-unowing
-unown
-unowned
-unoxidable
-unoxidated
-unoxidizable
-unoxidized
-unoxygenated
-unoxygenized
-unpacable
-unpaced
-unpacifiable
-unpacific
-unpacified
-unpacifiedly
-unpacifiedness
-unpacifist
-unpack
-unpacked
-unpacker
-unpadded
-unpadlocked
-unpagan
-unpaganize
-unpaged
-unpaginal
-unpaid
-unpained
-unpainful
-unpaining
-unpainstaking
-unpaint
-unpaintability
-unpaintable
-unpaintableness
-unpaintably
-unpainted
-unpaintedly
-unpaintedness
-unpaired
-unpalatability
-unpalatable
-unpalatableness
-unpalatably
-unpalatal
-unpalatial
-unpale
-unpaled
-unpalisaded
-unpalisadoed
-unpalled
-unpalliable
-unpalliated
-unpalpable
-unpalped
-unpalpitating
-unpalsied
-unpampered
-unpanegyrized
-unpanel
-unpaneled
-unpanelled
-unpanged
-unpanniered
-unpanoplied
-unpantheistic
-unpanting
-unpapal
-unpapaverous
-unpaper
-unpapered
-unparaded
-unparadise
-unparadox
-unparagoned
-unparagonized
-unparagraphed
-unparallel
-unparallelable
-unparalleled
-unparalleledly
-unparalleledness
-unparallelness
-unparalyzed
-unparaphrased
-unparasitical
-unparcel
-unparceled
-unparceling
-unparcelled
-unparcelling
-unparch
-unparched
-unparching
-unpardon
-unpardonable
-unpardonableness
-unpardonably
-unpardoned
-unpardonedness
-unpardoning
-unpared
-unparented
-unparfit
-unpargeted
-unpark
-unparked
-unparking
-unparliamentary
-unparliamented
-unparodied
-unparrel
-unparriable
-unparried
-unparroted
-unparrying
-unparsed
-unparsimonious
-unparsonic
-unparsonical
-unpartable
-unpartableness
-unpartably
-unpartaken
-unpartaking
-unparted
-unpartial
-unpartiality
-unpartially
-unpartialness
-unparticipant
-unparticipated
-unparticipating
-unparticipative
-unparticular
-unparticularized
-unparticularizing
-unpartisan
-unpartitioned
-unpartizan
-unpartnered
-unpartook
-unparty
-unpass
-unpassable
-unpassableness
-unpassably
-unpassed
-unpassing
-unpassionate
-unpassionately
-unpassionateness
-unpassioned
-unpassive
-unpaste
-unpasted
-unpasteurized
-unpasting
-unpastor
-unpastoral
-unpastured
-unpatched
-unpatent
-unpatentable
-unpatented
-unpaternal
-unpathed
-unpathetic
-unpathwayed
-unpatient
-unpatiently
-unpatientness
-unpatriarchal
-unpatrician
-unpatriotic
-unpatriotically
-unpatriotism
-unpatristic
-unpatrolled
-unpatronizable
-unpatronized
-unpatronizing
-unpatted
-unpatterned
-unpaunch
-unpaunched
-unpauperized
-unpausing
-unpausingly
-unpave
-unpaved
-unpavilioned
-unpaving
-unpawed
-unpawn
-unpawned
-unpayable
-unpayableness
-unpayably
-unpaying
-unpayment
-unpeace
-unpeaceable
-unpeaceableness
-unpeaceably
-unpeaceful
-unpeacefully
-unpeacefulness
-unpealed
-unpearled
-unpebbled
-unpeccable
-unpecked
-unpecuniarily
-unpedagogical
-unpedantic
-unpeddled
-unpedestal
-unpedigreed
-unpeel
-unpeelable
-unpeelableness
-unpeeled
-unpeerable
-unpeered
-unpeg
-unpejorative
-unpelagic
-unpelted
-unpen
-unpenal
-unpenalized
-unpenanced
-unpenciled
-unpencilled
-unpenetrable
-unpenetrated
-unpenetrating
-unpenitent
-unpenitently
-unpenitentness
-unpenned
-unpennied
-unpennoned
-unpensionable
-unpensionableness
-unpensioned
-unpensioning
-unpent
-unpenurious
-unpeople
-unpeopled
-unpeopling
-unperceived
-unperceivedly
-unperceptible
-unperceptibly
-unperceptive
-unperch
-unperched
-unpercipient
-unpercolated
-unpercussed
-unperfect
-unperfected
-unperfectedly
-unperfectedness
-unperfectly
-unperfectness
-unperfidious
-unperflated
-unperforate
-unperforated
-unperformable
-unperformance
-unperformed
-unperforming
-unperfumed
-unperilous
-unperiodic
-unperiodical
-unperiphrased
-unperishable
-unperishableness
-unperishably
-unperished
-unperishing
-unperjured
-unpermanency
-unpermanent
-unpermanently
-unpermeable
-unpermeated
-unpermissible
-unpermissive
-unpermitted
-unpermitting
-unpermixed
-unpernicious
-unperpendicular
-unperpetrated
-unperpetuated
-unperplex
-unperplexed
-unperplexing
-unpersecuted
-unpersecutive
-unperseverance
-unpersevering
-unperseveringly
-unperseveringness
-unpersonable
-unpersonableness
-unpersonal
-unpersonality
-unpersonified
-unpersonify
-unperspicuous
-unperspirable
-unperspiring
-unpersuadable
-unpersuadableness
-unpersuadably
-unpersuaded
-unpersuadedness
-unpersuasibleness
-unpersuasion
-unpersuasive
-unpersuasively
-unpersuasiveness
-unpertaining
-unpertinent
-unpertinently
-unperturbed
-unperturbedly
-unperturbedness
-unperuked
-unperused
-unpervaded
-unperverse
-unpervert
-unperverted
-unpervious
-unpessimistic
-unpestered
-unpestilential
-unpetal
-unpetitioned
-unpetrified
-unpetrify
-unpetticoated
-unpetulant
-unpharasaic
-unpharasaical
-unphased
-unphenomenal
-unphilanthropic
-unphilanthropically
-unphilological
-unphilosophic
-unphilosophically
-unphilosophicalness
-unphilosophize
-unphilosophized
-unphilosophy
-unphlegmatic
-unphonetic
-unphoneticness
-unphonographed
-unphosphatized
-unphotographed
-unphrasable
-unphrasableness
-unphrased
-unphrenological
-unphysical
-unphysically
-unphysicianlike
-unphysicked
-unphysiological
-unpicaresque
-unpick
-unpickable
-unpicked
-unpicketed
-unpickled
-unpictorial
-unpictorially
-unpicturability
-unpicturable
-unpictured
-unpicturesque
-unpicturesquely
-unpicturesqueness
-unpiece
-unpieced
-unpierceable
-unpierced
-unpiercing
-unpiety
-unpigmented
-unpile
-unpiled
-unpilfered
-unpilgrimlike
-unpillaged
-unpillared
-unpilled
-unpilloried
-unpillowed
-unpiloted
-unpimpled
-unpin
-unpinched
-unpining
-unpinion
-unpinioned
-unpinked
-unpinned
-unpious
-unpiped
-unpiqued
-unpirated
-unpitched
-unpiteous
-unpiteously
-unpiteousness
-unpitiable
-unpitiably
-unpitied
-unpitiedly
-unpitiedness
-unpitiful
-unpitifully
-unpitifulness
-unpitted
-unpitying
-unpityingly
-unpityingness
-unplacable
-unplacably
-unplacated
-unplace
-unplaced
-unplacid
-unplagiarized
-unplagued
-unplaid
-unplain
-unplained
-unplainly
-unplainness
-unplait
-unplaited
-unplan
-unplaned
-unplanished
-unplank
-unplanked
-unplanned
-unplannedly
-unplannedness
-unplant
-unplantable
-unplanted
-unplantlike
-unplashed
-unplaster
-unplastered
-unplastic
-unplat
-unplated
-unplatted
-unplausible
-unplausibleness
-unplausibly
-unplayable
-unplayed
-unplayful
-unplaying
-unpleached
-unpleadable
-unpleaded
-unpleading
-unpleasable
-unpleasant
-unpleasantish
-unpleasantly
-unpleasantness
-unpleasantry
-unpleased
-unpleasing
-unpleasingly
-unpleasingness
-unpleasurable
-unpleasurably
-unpleasure
-unpleat
-unpleated
-unplebeian
-unpledged
-unplenished
-unplenteous
-unplentiful
-unplentifulness
-unpliable
-unpliableness
-unpliably
-unpliancy
-unpliant
-unpliantly
-unplied
-unplighted
-unplodding
-unplotted
-unplotting
-unplough
-unploughed
-unplow
-unplowed
-unplucked
-unplug
-unplugged
-unplugging
-unplumb
-unplumbed
-unplume
-unplumed
-unplummeted
-unplump
-unplundered
-unplunge
-unplunged
-unplutocratic
-unplutocratically
-unpoached
-unpocket
-unpocketed
-unpodded
-unpoetic
-unpoetically
-unpoeticalness
-unpoeticized
-unpoetize
-unpoetized
-unpoignard
-unpointed
-unpointing
-unpoise
-unpoised
-unpoison
-unpoisonable
-unpoisoned
-unpoisonous
-unpolarizable
-unpolarized
-unpoled
-unpolemical
-unpolemically
-unpoliced
-unpolicied
-unpolish
-unpolishable
-unpolished
-unpolishedness
-unpolite
-unpolitely
-unpoliteness
-unpolitic
-unpolitical
-unpolitically
-unpoliticly
-unpollarded
-unpolled
-unpollutable
-unpolluted
-unpollutedly
-unpolluting
-unpolymerized
-unpompous
-unpondered
-unpontifical
-unpooled
-unpope
-unpopular
-unpopularity
-unpopularize
-unpopularly
-unpopularness
-unpopulate
-unpopulated
-unpopulous
-unpopulousness
-unporous
-unportable
-unportended
-unportentous
-unportioned
-unportly
-unportmanteaued
-unportraited
-unportrayable
-unportrayed
-unportuous
-unposed
-unposing
-unpositive
-unpossessable
-unpossessed
-unpossessedness
-unpossessing
-unpossibility
-unpossible
-unpossibleness
-unpossibly
-unposted
-unpostered
-unposthumous
-unpostmarked
-unpostponable
-unpostponed
-unpostulated
-unpot
-unpotted
-unpouched
-unpoulticed
-unpounced
-unpounded
-unpoured
-unpowdered
-unpower
-unpowerful
-unpowerfulness
-unpracticability
-unpracticable
-unpracticableness
-unpracticably
-unpractical
-unpracticality
-unpractically
-unpracticalness
-unpractice
-unpracticed
-unpragmatical
-unpraisable
-unpraise
-unpraised
-unpraiseful
-unpraiseworthy
-unpranked
-unpray
-unprayable
-unprayed
-unprayerful
-unpraying
-unpreach
-unpreached
-unpreaching
-unprecarious
-unprecautioned
-unpreceded
-unprecedented
-unprecedentedly
-unprecedentedness
-unprecedential
-unprecedently
-unprecious
-unprecipitate
-unprecipitated
-unprecise
-unprecisely
-unpreciseness
-unprecluded
-unprecludible
-unprecocious
-unpredacious
-unpredestinated
-unpredestined
-unpredicable
-unpredicated
-unpredict
-unpredictable
-unpredictableness
-unpredictably
-unpredicted
-unpredictedness
-unpredicting
-unpredisposed
-unpredisposing
-unpreened
-unprefaced
-unpreferable
-unpreferred
-unprefigured
-unprefined
-unprefixed
-unpregnant
-unprejudged
-unprejudicated
-unprejudice
-unprejudiced
-unprejudicedly
-unprejudicedness
-unprejudiciable
-unprejudicial
-unprejudicially
-unprejudicialness
-unprelatic
-unprelatical
-unpreluded
-unpremature
-unpremeditate
-unpremeditated
-unpremeditatedly
-unpremeditatedness
-unpremeditately
-unpremeditation
-unpremonished
-unpremonstrated
-unprenominated
-unprenticed
-unpreoccupied
-unpreordained
-unpreparation
-unprepare
-unprepared
-unpreparedly
-unpreparedness
-unpreparing
-unpreponderated
-unpreponderating
-unprepossessedly
-unprepossessing
-unprepossessingly
-unprepossessingness
-unpreposterous
-unpresaged
-unpresageful
-unpresaging
-unpresbyterated
-unprescient
-unprescinded
-unprescribed
-unpresentability
-unpresentable
-unpresentableness
-unpresentably
-unpresented
-unpreservable
-unpreserved
-unpresidential
-unpresiding
-unpressed
-unpresumable
-unpresumed
-unpresuming
-unpresumingness
-unpresumptuous
-unpresumptuously
-unpresupposed
-unpretended
-unpretending
-unpretendingly
-unpretendingness
-unpretentious
-unpretentiously
-unpretentiousness
-unpretermitted
-unpreternatural
-unprettiness
-unpretty
-unprevailing
-unprevalent
-unprevaricating
-unpreventable
-unpreventableness
-unpreventably
-unprevented
-unpreventible
-unpreventive
-unpriceably
-unpriced
-unpricked
-unprickled
-unprickly
-unpriest
-unpriestlike
-unpriestly
-unpriggish
-unprim
-unprime
-unprimed
-unprimitive
-unprimmed
-unprince
-unprincelike
-unprinceliness
-unprincely
-unprincess
-unprincipal
-unprinciple
-unprincipled
-unprincipledly
-unprincipledness
-unprint
-unprintable
-unprintableness
-unprintably
-unprinted
-unpriority
-unprismatic
-unprison
-unprisonable
-unprisoned
-unprivate
-unprivileged
-unprizable
-unprized
-unprobated
-unprobationary
-unprobed
-unprobity
-unproblematic
-unproblematical
-unprocessed
-unproclaimed
-unprocrastinated
-unprocreant
-unprocreated
-unproctored
-unprocurable
-unprocurableness
-unprocure
-unprocured
-unproded
-unproduceable
-unproduceableness
-unproduceably
-unproduced
-unproducedness
-unproducible
-unproducibleness
-unproducibly
-unproductive
-unproductively
-unproductiveness
-unproductivity
-unprofanable
-unprofane
-unprofaned
-unprofessed
-unprofessing
-unprofessional
-unprofessionalism
-unprofessionally
-unprofessorial
-unproffered
-unproficiency
-unproficient
-unproficiently
-unprofit
-unprofitable
-unprofitableness
-unprofitably
-unprofited
-unprofiteering
-unprofiting
-unprofound
-unprofuse
-unprofusely
-unprofuseness
-unprognosticated
-unprogressed
-unprogressive
-unprogressively
-unprogressiveness
-unprohibited
-unprohibitedness
-unprohibitive
-unprojected
-unprojecting
-unproliferous
-unprolific
-unprolix
-unprologued
-unprolonged
-unpromiscuous
-unpromise
-unpromised
-unpromising
-unpromisingly
-unpromisingness
-unpromotable
-unpromoted
-unprompted
-unpromptly
-unpromulgated
-unpronounce
-unpronounceable
-unpronounced
-unpronouncing
-unproofread
-unprop
-unpropagated
-unpropelled
-unpropense
-unproper
-unproperly
-unproperness
-unpropertied
-unprophesiable
-unprophesied
-unprophetic
-unprophetical
-unprophetically
-unprophetlike
-unpropitiable
-unpropitiated
-unpropitiatedness
-unpropitiatory
-unpropitious
-unpropitiously
-unpropitiousness
-unproportion
-unproportionable
-unproportionableness
-unproportionably
-unproportional
-unproportionality
-unproportionally
-unproportionate
-unproportionately
-unproportionateness
-unproportioned
-unproportionedly
-unproportionedness
-unproposed
-unproposing
-unpropounded
-unpropped
-unpropriety
-unprorogued
-unprosaic
-unproscribable
-unproscribed
-unprosecutable
-unprosecuted
-unprosecuting
-unproselyte
-unproselyted
-unprosodic
-unprospected
-unprospective
-unprosperably
-unprospered
-unprosperity
-unprosperous
-unprosperously
-unprosperousness
-unprostitute
-unprostituted
-unprostrated
-unprotectable
-unprotected
-unprotectedly
-unprotectedness
-unprotective
-unprotestant
-unprotestantize
-unprotested
-unprotesting
-unprotruded
-unprotruding
-unprotrusive
-unproud
-unprovability
-unprovable
-unprovableness
-unprovably
-unproved
-unprovedness
-unproven
-unproverbial
-unprovidable
-unprovide
-unprovided
-unprovidedly
-unprovidedness
-unprovidenced
-unprovident
-unprovidential
-unprovidently
-unprovincial
-unproving
-unprovision
-unprovisioned
-unprovocative
-unprovokable
-unprovoke
-unprovoked
-unprovokedly
-unprovokedness
-unprovoking
-unproximity
-unprudence
-unprudent
-unprudently
-unpruned
-unprying
-unpsychic
-unpsychological
-unpublic
-unpublicity
-unpublishable
-unpublishableness
-unpublishably
-unpublished
-unpucker
-unpuckered
-unpuddled
-unpuffed
-unpuffing
-unpugilistic
-unpugnacious
-unpulled
-unpulleyed
-unpulped
-unpulverable
-unpulverize
-unpulverized
-unpulvinate
-unpulvinated
-unpumicated
-unpummeled
-unpummelled
-unpumpable
-unpumped
-unpunched
-unpunctated
-unpunctilious
-unpunctual
-unpunctuality
-unpunctually
-unpunctuated
-unpunctuating
-unpunishable
-unpunishably
-unpunished
-unpunishedly
-unpunishedness
-unpunishing
-unpunishingly
-unpurchasable
-unpurchased
-unpure
-unpurely
-unpureness
-unpurgeable
-unpurged
-unpurifiable
-unpurified
-unpurifying
-unpuritan
-unpurled
-unpurloined
-unpurpled
-unpurported
-unpurposed
-unpurposelike
-unpurposely
-unpurposing
-unpurse
-unpursed
-unpursuable
-unpursued
-unpursuing
-unpurveyed
-unpushed
-unput
-unputrefiable
-unputrefied
-unputrid
-unputtied
-unpuzzle
-unquadded
-unquaffed
-unquailed
-unquailing
-unquailingly
-unquakerlike
-unquakerly
-unquaking
-unqualifiable
-unqualification
-unqualified
-unqualifiedly
-unqualifiedness
-unqualify
-unqualifying
-unqualifyingly
-unqualitied
-unquality
-unquantified
-unquantitative
-unquarantined
-unquarreled
-unquarreling
-unquarrelled
-unquarrelling
-unquarrelsome
-unquarried
-unquartered
-unquashed
-unquayed
-unqueen
-unqueened
-unqueening
-unqueenlike
-unqueenly
-unquellable
-unquelled
-unquenchable
-unquenchableness
-unquenchably
-unquenched
-unqueried
-unquested
-unquestionability
-unquestionable
-unquestionableness
-unquestionably
-unquestionate
-unquestioned
-unquestionedly
-unquestionedness
-unquestioning
-unquestioningly
-unquestioningness
-unquibbled
-unquibbling
-unquick
-unquickened
-unquickly
-unquicksilvered
-unquiescence
-unquiescent
-unquiescently
-unquiet
-unquietable
-unquieted
-unquieting
-unquietly
-unquietness
-unquietude
-unquilleted
-unquilted
-unquit
-unquittable
-unquitted
-unquivered
-unquivering
-unquizzable
-unquizzed
-unquotable
-unquote
-unquoted
-unrabbeted
-unrabbinical
-unraced
-unrack
-unracked
-unracking
-unradiated
-unradical
-unradicalize
-unraffled
-unraftered
-unraided
-unrailed
-unrailroaded
-unrailwayed
-unrainy
-unraised
-unrake
-unraked
-unraking
-unrallied
-unram
-unrambling
-unramified
-unrammed
-unramped
-unranched
-unrancid
-unrancored
-unrandom
-unrank
-unranked
-unransacked
-unransomable
-unransomed
-unrapacious
-unraped
-unraptured
-unrare
-unrarefied
-unrash
-unrasped
-unratable
-unrated
-unratified
-unrational
-unrattled
-unravaged
-unravel
-unravelable
-unraveled
-unraveler
-unraveling
-unravellable
-unravelled
-unraveller
-unravelling
-unravelment
-unraving
-unravished
-unravishing
-unray
-unrayed
-unrazed
-unrazored
-unreachable
-unreachably
-unreached
-unreactive
-unread
-unreadability
-unreadable
-unreadableness
-unreadably
-unreadily
-unreadiness
-unready
-unreal
-unrealism
-unrealist
-unrealistic
-unreality
-unrealizable
-unrealize
-unrealized
-unrealizing
-unreally
-unrealmed
-unrealness
-unreaped
-unreared
-unreason
-unreasonability
-unreasonable
-unreasonableness
-unreasonably
-unreasoned
-unreasoning
-unreasoningly
-unreassuring
-unreassuringly
-unreave
-unreaving
-unrebated
-unrebel
-unrebellious
-unrebuffable
-unrebuffably
-unrebuilt
-unrebukable
-unrebukably
-unrebuked
-unrebuttable
-unrebuttableness
-unrebutted
-unrecallable
-unrecallably
-unrecalled
-unrecalling
-unrecantable
-unrecanted
-unrecaptured
-unreceding
-unreceipted
-unreceivable
-unreceived
-unreceiving
-unrecent
-unreceptant
-unreceptive
-unreceptivity
-unreciprocal
-unreciprocated
-unrecited
-unrecked
-unrecking
-unreckingness
-unreckon
-unreckonable
-unreckoned
-unreclaimable
-unreclaimably
-unreclaimed
-unreclaimedness
-unreclaiming
-unreclined
-unreclining
-unrecognition
-unrecognizable
-unrecognizableness
-unrecognizably
-unrecognized
-unrecognizing
-unrecognizingly
-unrecoined
-unrecollected
-unrecommendable
-unrecompensable
-unrecompensed
-unreconcilable
-unreconcilableness
-unreconcilably
-unreconciled
-unrecondite
-unreconnoitered
-unreconsidered
-unreconstructed
-unrecordable
-unrecorded
-unrecordedness
-unrecording
-unrecountable
-unrecounted
-unrecoverable
-unrecoverableness
-unrecoverably
-unrecovered
-unrecreant
-unrecreated
-unrecreating
-unrecriminative
-unrecruitable
-unrecruited
-unrectangular
-unrectifiable
-unrectifiably
-unrectified
-unrecumbent
-unrecuperated
-unrecurrent
-unrecurring
-unrecusant
-unred
-unredacted
-unredeemable
-unredeemableness
-unredeemably
-unredeemed
-unredeemedly
-unredeemedness
-unredeeming
-unredressable
-unredressed
-unreduceable
-unreduced
-unreducible
-unreducibleness
-unreducibly
-unreduct
-unreefed
-unreel
-unreelable
-unreeled
-unreeling
-unreeve
-unreeving
-unreferenced
-unreferred
-unrefilled
-unrefine
-unrefined
-unrefinedly
-unrefinedness
-unrefinement
-unrefining
-unrefitted
-unreflected
-unreflecting
-unreflectingly
-unreflectingness
-unreflective
-unreflectively
-unreformable
-unreformed
-unreformedness
-unreforming
-unrefracted
-unrefracting
-unrefrainable
-unrefrained
-unrefraining
-unrefreshed
-unrefreshful
-unrefreshing
-unrefreshingly
-unrefrigerated
-unrefulgent
-unrefunded
-unrefunding
-unrefusable
-unrefusably
-unrefused
-unrefusing
-unrefusingly
-unrefutable
-unrefuted
-unrefuting
-unregainable
-unregained
-unregal
-unregaled
-unregality
-unregally
-unregard
-unregardable
-unregardant
-unregarded
-unregardedly
-unregardful
-unregeneracy
-unregenerate
-unregenerately
-unregenerateness
-unregenerating
-unregeneration
-unregimented
-unregistered
-unregressive
-unregretful
-unregretfully
-unregretfulness
-unregrettable
-unregretted
-unregretting
-unregular
-unregulated
-unregulative
-unregurgitated
-unrehabilitated
-unrehearsable
-unrehearsed
-unrehearsing
-unreigning
-unreimbodied
-unrein
-unreined
-unreinstated
-unreiterable
-unreiterated
-unrejectable
-unrejoiced
-unrejoicing
-unrejuvenated
-unrelapsing
-unrelated
-unrelatedness
-unrelating
-unrelational
-unrelative
-unrelatively
-unrelaxable
-unrelaxed
-unrelaxing
-unrelaxingly
-unreleasable
-unreleased
-unreleasing
-unrelegated
-unrelentance
-unrelented
-unrelenting
-unrelentingly
-unrelentingness
-unrelentor
-unrelevant
-unreliability
-unreliable
-unreliableness
-unreliably
-unreliance
-unrelievable
-unrelievableness
-unrelieved
-unrelievedly
-unreligion
-unreligioned
-unreligious
-unreligiously
-unreligiousness
-unrelinquishable
-unrelinquishably
-unrelinquished
-unrelinquishing
-unrelishable
-unrelished
-unrelishing
-unreluctant
-unreluctantly
-unremaining
-unremanded
-unremarkable
-unremarked
-unremarried
-unremediable
-unremedied
-unremember
-unrememberable
-unremembered
-unremembering
-unremembrance
-unreminded
-unremissible
-unremittable
-unremitted
-unremittedly
-unremittent
-unremittently
-unremitting
-unremittingly
-unremittingness
-unremonstrant
-unremonstrated
-unremonstrating
-unremorseful
-unremorsefully
-unremote
-unremotely
-unremounted
-unremovable
-unremovableness
-unremovably
-unremoved
-unremunerated
-unremunerating
-unremunerative
-unremuneratively
-unremunerativeness
-unrenderable
-unrendered
-unrenewable
-unrenewed
-unrenounceable
-unrenounced
-unrenouncing
-unrenovated
-unrenowned
-unrenownedly
-unrenownedness
-unrent
-unrentable
-unrented
-unreorganized
-unrepaid
-unrepair
-unrepairable
-unrepaired
-unrepartable
-unreparted
-unrepealability
-unrepealable
-unrepealableness
-unrepealably
-unrepealed
-unrepeatable
-unrepeated
-unrepellable
-unrepelled
-unrepellent
-unrepent
-unrepentable
-unrepentance
-unrepentant
-unrepentantly
-unrepentantness
-unrepented
-unrepenting
-unrepentingly
-unrepentingness
-unrepetitive
-unrepined
-unrepining
-unrepiningly
-unrepiqued
-unreplaceable
-unreplaced
-unreplenished
-unrepleviable
-unreplevined
-unrepliable
-unrepliably
-unreplied
-unreplying
-unreportable
-unreported
-unreportedly
-unreportedness
-unrepose
-unreposed
-unreposeful
-unreposefulness
-unreposing
-unrepossessed
-unreprehended
-unrepresentable
-unrepresentation
-unrepresentative
-unrepresented
-unrepresentedness
-unrepressed
-unrepressible
-unreprievable
-unreprievably
-unreprieved
-unreprimanded
-unreprinted
-unreproachable
-unreproachableness
-unreproachably
-unreproached
-unreproachful
-unreproachfully
-unreproaching
-unreproachingly
-unreprobated
-unreproducible
-unreprovable
-unreprovableness
-unreprovably
-unreproved
-unreprovedly
-unreprovedness
-unreproving
-unrepublican
-unrepudiable
-unrepudiated
-unrepugnant
-unrepulsable
-unrepulsed
-unrepulsing
-unrepulsive
-unreputable
-unreputed
-unrequalified
-unrequested
-unrequickened
-unrequired
-unrequisite
-unrequitable
-unrequital
-unrequited
-unrequitedly
-unrequitedness
-unrequitement
-unrequiter
-unrequiting
-unrescinded
-unrescued
-unresemblant
-unresembling
-unresented
-unresentful
-unresenting
-unreserve
-unreserved
-unreservedly
-unreservedness
-unresifted
-unresigned
-unresistable
-unresistably
-unresistance
-unresistant
-unresistantly
-unresisted
-unresistedly
-unresistedness
-unresistible
-unresistibleness
-unresistibly
-unresisting
-unresistingly
-unresistingness
-unresolute
-unresolvable
-unresolve
-unresolved
-unresolvedly
-unresolvedness
-unresolving
-unresonant
-unresounded
-unresounding
-unresourceful
-unresourcefulness
-unrespect
-unrespectability
-unrespectable
-unrespected
-unrespectful
-unrespectfully
-unrespectfulness
-unrespective
-unrespectively
-unrespectiveness
-unrespirable
-unrespired
-unrespited
-unresplendent
-unresponding
-unresponsible
-unresponsibleness
-unresponsive
-unresponsively
-unresponsiveness
-unrest
-unrestable
-unrested
-unrestful
-unrestfully
-unrestfulness
-unresting
-unrestingly
-unrestingness
-unrestorable
-unrestored
-unrestrainable
-unrestrainably
-unrestrained
-unrestrainedly
-unrestrainedness
-unrestraint
-unrestrictable
-unrestricted
-unrestrictedly
-unrestrictedness
-unrestrictive
-unresty
-unresultive
-unresumed
-unresumptive
-unretainable
-unretained
-unretaliated
-unretaliating
-unretardable
-unretarded
-unretentive
-unreticent
-unretinued
-unretired
-unretiring
-unretorted
-unretouched
-unretractable
-unretracted
-unretreating
-unretrenchable
-unretrenched
-unretrievable
-unretrieved
-unretrievingly
-unretted
-unreturnable
-unreturnably
-unreturned
-unreturning
-unreturningly
-unrevealable
-unrevealed
-unrevealedness
-unrevealing
-unrevealingly
-unrevelationize
-unrevenged
-unrevengeful
-unrevengefulness
-unrevenging
-unrevengingly
-unrevenue
-unrevenued
-unreverberated
-unrevered
-unreverence
-unreverenced
-unreverend
-unreverendly
-unreverent
-unreverential
-unreverently
-unreverentness
-unreversable
-unreversed
-unreversible
-unreverted
-unrevertible
-unreverting
-unrevested
-unrevetted
-unreviewable
-unreviewed
-unreviled
-unrevised
-unrevivable
-unrevived
-unrevocable
-unrevocableness
-unrevocably
-unrevoked
-unrevolted
-unrevolting
-unrevolutionary
-unrevolutionized
-unrevolved
-unrevolving
-unrewardable
-unrewarded
-unrewardedly
-unrewarding
-unreworded
-unrhetorical
-unrhetorically
-unrhetoricalness
-unrhyme
-unrhymed
-unrhythmic
-unrhythmical
-unrhythmically
-unribbed
-unribboned
-unrich
-unriched
-unricht
-unricked
-unrid
-unridable
-unridableness
-unridably
-unridden
-unriddle
-unriddleable
-unriddled
-unriddler
-unriddling
-unride
-unridely
-unridered
-unridged
-unridiculed
-unridiculous
-unrife
-unriffled
-unrifled
-unrifted
-unrig
-unrigged
-unrigging
-unright
-unrightable
-unrighted
-unrighteous
-unrighteously
-unrighteousness
-unrightful
-unrightfully
-unrightfulness
-unrightly
-unrightwise
-unrigid
-unrigorous
-unrimpled
-unrind
-unring
-unringable
-unringed
-unringing
-unrinsed
-unrioted
-unrioting
-unriotous
-unrip
-unripe
-unriped
-unripely
-unripened
-unripeness
-unripening
-unrippable
-unripped
-unripping
-unrippled
-unrippling
-unripplingly
-unrisen
-unrising
-unriskable
-unrisked
-unrisky
-unritual
-unritualistic
-unrivalable
-unrivaled
-unrivaledly
-unrivaledness
-unrived
-unriven
-unrivet
-unriveted
-unriveting
-unroaded
-unroadworthy
-unroaming
-unroast
-unroasted
-unrobbed
-unrobe
-unrobed
-unrobust
-unrocked
-unrococo
-unrodded
-unroiled
-unroll
-unrollable
-unrolled
-unroller
-unrolling
-unrollment
-unromantic
-unromantical
-unromantically
-unromanticalness
-unromanticized
-unroof
-unroofed
-unroofing
-unroomy
-unroost
-unroosted
-unroosting
-unroot
-unrooted
-unrooting
-unrope
-unroped
-unrosed
-unrosined
-unrostrated
-unrotated
-unrotating
-unroted
-unrotted
-unrotten
-unrotund
-unrouged
-unrough
-unroughened
-unround
-unrounded
-unrounding
-unrousable
-unroused
-unroutable
-unrouted
-unrove
-unroved
-unroving
-unrow
-unrowed
-unroweled
-unroyal
-unroyalist
-unroyalized
-unroyally
-unroyalness
-Unrra
-unrubbed
-unrubbish
-unrubified
-unrubrical
-unrubricated
-unruddered
-unruddled
-unrueful
-unruffable
-unruffed
-unruffle
-unruffled
-unruffling
-unrugged
-unruinable
-unruinated
-unruined
-unrulable
-unrulableness
-unrule
-unruled
-unruledly
-unruledness
-unruleful
-unrulily
-unruliness
-unruly
-unruminated
-unruminating
-unruminatingly
-unrummaged
-unrumored
-unrumple
-unrumpled
-unrun
-unrung
-unruptured
-unrural
-unrushed
-Unrussian
-unrust
-unrusted
-unrustic
-unrusticated
-unrustling
-unruth
-unsabbatical
-unsabered
-unsabled
-unsabred
-unsaccharic
-unsacerdotal
-unsacerdotally
-unsack
-unsacked
-unsacramental
-unsacramentally
-unsacramentarian
-unsacred
-unsacredly
-unsacrificeable
-unsacrificeably
-unsacrificed
-unsacrificial
-unsacrificing
-unsacrilegious
-unsad
-unsadden
-unsaddened
-unsaddle
-unsaddled
-unsaddling
-unsafe
-unsafeguarded
-unsafely
-unsafeness
-unsafety
-unsagacious
-unsage
-unsagging
-unsaid
-unsailable
-unsailed
-unsailorlike
-unsaint
-unsainted
-unsaintlike
-unsaintly
-unsalability
-unsalable
-unsalableness
-unsalably
-unsalaried
-unsalesmanlike
-unsaline
-unsalivated
-unsallying
-unsalmonlike
-unsalt
-unsaltable
-unsaltatory
-unsalted
-unsalubrious
-unsalutary
-unsaluted
-unsaluting
-unsalvability
-unsalvable
-unsalvableness
-unsalvaged
-unsalved
-unsampled
-unsanctification
-unsanctified
-unsanctifiedly
-unsanctifiedness
-unsanctify
-unsanctifying
-unsanctimonious
-unsanctimoniously
-unsanctimoniousness
-unsanction
-unsanctionable
-unsanctioned
-unsanctioning
-unsanctitude
-unsanctity
-unsanctuaried
-unsandaled
-unsanded
-unsane
-unsanguinary
-unsanguine
-unsanguinely
-unsanguineness
-unsanguineous
-unsanguineously
-unsanitariness
-unsanitary
-unsanitated
-unsanitation
-unsanity
-unsaponifiable
-unsaponified
-unsapped
-unsappy
-unsarcastic
-unsardonic
-unsartorial
-unsash
-unsashed
-unsatable
-unsatanic
-unsated
-unsatedly
-unsatedness
-unsatiability
-unsatiable
-unsatiableness
-unsatiably
-unsatiate
-unsatiated
-unsatiating
-unsatin
-unsatire
-unsatirical
-unsatirically
-unsatirize
-unsatirized
-unsatisfaction
-unsatisfactorily
-unsatisfactoriness
-unsatisfactory
-unsatisfiable
-unsatisfiableness
-unsatisfiably
-unsatisfied
-unsatisfiedly
-unsatisfiedness
-unsatisfying
-unsatisfyingly
-unsatisfyingness
-unsaturable
-unsaturated
-unsaturatedly
-unsaturatedness
-unsaturation
-unsatyrlike
-unsauced
-unsaurian
-unsavable
-unsaveable
-unsaved
-unsaving
-unsavored
-unsavoredly
-unsavoredness
-unsavorily
-unsavoriness
-unsavory
-unsawed
-unsawn
-unsay
-unsayability
-unsayable
-unscabbard
-unscabbarded
-unscabbed
-unscaffolded
-unscalable
-unscalableness
-unscalably
-unscale
-unscaled
-unscaledness
-unscalloped
-unscaly
-unscamped
-unscandalize
-unscandalized
-unscandalous
-unscannable
-unscanned
-unscanted
-unscanty
-unscarb
-unscarce
-unscared
-unscarfed
-unscarified
-unscarred
-unscathed
-unscathedly
-unscathedness
-unscattered
-unscavengered
-unscenic
-unscent
-unscented
-unscepter
-unsceptered
-unsceptical
-unsceptre
-unsceptred
-unscheduled
-unschematic
-unschematized
-unscholar
-unscholarlike
-unscholarly
-unscholastic
-unschool
-unschooled
-unschooledly
-unschooledness
-unscienced
-unscientific
-unscientifical
-unscientifically
-unscintillating
-unscioned
-unscissored
-unscoffed
-unscoffing
-unscolded
-unsconced
-unscooped
-unscorched
-unscored
-unscorified
-unscoring
-unscorned
-unscornful
-unscornfully
-unscornfulness
-unscotch
-unscotched
-unscottify
-unscoured
-unscourged
-unscowling
-unscramble
-unscrambling
-unscraped
-unscratchable
-unscratched
-unscratching
-unscratchingly
-unscrawled
-unscreen
-unscreenable
-unscreenably
-unscreened
-unscrew
-unscrewable
-unscrewed
-unscrewing
-unscribal
-unscribbled
-unscribed
-unscrimped
-unscriptural
-unscripturally
-unscripturalness
-unscrubbed
-unscrupled
-unscrupulosity
-unscrupulous
-unscrupulously
-unscrupulousness
-unscrutable
-unscrutinized
-unscrutinizing
-unscrutinizingly
-unsculptural
-unsculptured
-unscummed
-unscutcheoned
-unseafaring
-unseal
-unsealable
-unsealed
-unsealer
-unsealing
-unseam
-unseamanlike
-unseamanship
-unseamed
-unseaming
-unsearchable
-unsearchableness
-unsearchably
-unsearched
-unsearcherlike
-unsearching
-unseared
-unseason
-unseasonable
-unseasonableness
-unseasonably
-unseasoned
-unseat
-unseated
-unseaworthiness
-unseaworthy
-unseceding
-unsecluded
-unseclusive
-unseconded
-unsecrecy
-unsecret
-unsecretarylike
-unsecreted
-unsecreting
-unsecretly
-unsecretness
-unsectarian
-unsectarianism
-unsectarianize
-unsectional
-unsecular
-unsecularize
-unsecularized
-unsecure
-unsecured
-unsecuredly
-unsecuredness
-unsecurely
-unsecureness
-unsecurity
-unsedate
-unsedentary
-unseditious
-unseduce
-unseduced
-unseducible
-unseductive
-unsedulous
-unsee
-unseeable
-unseeded
-unseeing
-unseeingly
-unseeking
-unseeming
-unseemingly
-unseemlily
-unseemliness
-unseemly
-unseen
-unseethed
-unsegmented
-unsegregable
-unsegregated
-unsegregatedness
-unseignorial
-unseismic
-unseizable
-unseized
-unseldom
-unselect
-unselected
-unselecting
-unselective
-unself
-unselfish
-unselfishly
-unselfishness
-unselflike
-unselfness
-unselling
-unsenatorial
-unsenescent
-unsensational
-unsense
-unsensed
-unsensibility
-unsensible
-unsensibleness
-unsensibly
-unsensitive
-unsensitize
-unsensitized
-unsensory
-unsensual
-unsensualize
-unsensualized
-unsensually
-unsensuous
-unsensuousness
-unsent
-unsentenced
-unsententious
-unsentient
-unsentimental
-unsentimentalist
-unsentimentality
-unsentimentalize
-unsentimentally
-unsentineled
-unsentinelled
-unseparable
-unseparableness
-unseparably
-unseparate
-unseparated
-unseptate
-unseptated
-unsepulcher
-unsepulchered
-unsepulchral
-unsepulchre
-unsepulchred
-unsepultured
-unsequenced
-unsequential
-unsequestered
-unseraphical
-unserenaded
-unserene
-unserflike
-unserious
-unseriousness
-unserrated
-unserried
-unservable
-unserved
-unserviceability
-unserviceable
-unserviceableness
-unserviceably
-unservicelike
-unservile
-unsesquipedalian
-unset
-unsetting
-unsettle
-unsettleable
-unsettled
-unsettledness
-unsettlement
-unsettling
-unseverable
-unseverableness
-unsevere
-unsevered
-unseveredly
-unseveredness
-unsew
-unsewed
-unsewered
-unsewing
-unsewn
-unsex
-unsexed
-unsexing
-unsexlike
-unsexual
-unshackle
-unshackled
-unshackling
-unshade
-unshaded
-unshadow
-unshadowable
-unshadowed
-unshady
-unshafted
-unshakable
-unshakably
-unshakeable
-unshakeably
-unshaken
-unshakenly
-unshakenness
-unshaking
-unshakingness
-unshaled
-unshamable
-unshamableness
-unshamably
-unshameable
-unshameableness
-unshameably
-unshamed
-unshamefaced
-unshamefacedness
-unshameful
-unshamefully
-unshamefulness
-unshammed
-unshanked
-unshapable
-unshape
-unshapeable
-unshaped
-unshapedness
-unshapeliness
-unshapely
-unshapen
-unshapenly
-unshapenness
-unsharable
-unshared
-unsharedness
-unsharing
-unsharp
-unsharped
-unsharpen
-unsharpened
-unsharpening
-unsharping
-unshattered
-unshavable
-unshaveable
-unshaved
-unshavedly
-unshavedness
-unshaven
-unshavenly
-unshavenness
-unshawl
-unsheaf
-unsheared
-unsheathe
-unsheathed
-unsheathing
-unshed
-unsheet
-unsheeted
-unsheeting
-unshell
-unshelled
-unshelling
-unshelterable
-unsheltered
-unsheltering
-unshelve
-unshepherded
-unshepherding
-unsheriff
-unshewed
-unshieldable
-unshielded
-unshielding
-unshiftable
-unshifted
-unshiftiness
-unshifting
-unshifty
-unshimmering
-unshingled
-unshining
-unship
-unshiplike
-unshipment
-unshipped
-unshipping
-unshipshape
-unshipwrecked
-unshirking
-unshirted
-unshivered
-unshivering
-unshockable
-unshocked
-unshod
-unshodden
-unshoe
-unshoed
-unshoeing
-unshop
-unshore
-unshored
-unshorn
-unshort
-unshortened
-unshot
-unshotted
-unshoulder
-unshouted
-unshouting
-unshoved
-unshoveled
-unshowable
-unshowed
-unshowmanlike
-unshown
-unshowy
-unshredded
-unshrew
-unshrewd
-unshrewish
-unshrill
-unshrine
-unshrined
-unshrinement
-unshrink
-unshrinkability
-unshrinkable
-unshrinking
-unshrinkingly
-unshrived
-unshriveled
-unshrivelled
-unshriven
-unshroud
-unshrouded
-unshrubbed
-unshrugging
-unshrunk
-unshrunken
-unshuddering
-unshuffle
-unshuffled
-unshunnable
-unshunned
-unshunted
-unshut
-unshutter
-unshuttered
-unshy
-unshyly
-unshyness
-unsibilant
-unsiccated
-unsick
-unsickened
-unsicker
-unsickerly
-unsickerness
-unsickled
-unsickly
-unsided
-unsiding
-unsiege
-unsifted
-unsighing
-unsight
-unsightable
-unsighted
-unsighting
-unsightliness
-unsightly
-unsigmatic
-unsignable
-unsignaled
-unsignalized
-unsignalled
-unsignatured
-unsigned
-unsigneted
-unsignificancy
-unsignificant
-unsignificantly
-unsignificative
-unsignified
-unsignifying
-unsilenceable
-unsilenceably
-unsilenced
-unsilent
-unsilentious
-unsilently
-unsilicified
-unsilly
-unsilvered
-unsimilar
-unsimilarity
-unsimilarly
-unsimple
-unsimplicity
-unsimplified
-unsimplify
-unsimulated
-unsimultaneous
-unsin
-unsincere
-unsincerely
-unsincereness
-unsincerity
-unsinew
-unsinewed
-unsinewing
-unsinewy
-unsinful
-unsinfully
-unsinfulness
-unsing
-unsingability
-unsingable
-unsingableness
-unsinged
-unsingle
-unsingled
-unsingleness
-unsingular
-unsinister
-unsinkability
-unsinkable
-unsinking
-unsinnable
-unsinning
-unsinningness
-unsiphon
-unsipped
-unsister
-unsistered
-unsisterliness
-unsisterly
-unsizable
-unsizableness
-unsizeable
-unsizeableness
-unsized
-unskaithd
-unskeptical
-unsketchable
-unsketched
-unskewed
-unskewered
-unskilful
-unskilfully
-unskilled
-unskilledly
-unskilledness
-unskillful
-unskillfully
-unskillfulness
-unskimmed
-unskin
-unskinned
-unskirted
-unslack
-unslacked
-unslackened
-unslackening
-unslacking
-unslagged
-unslain
-unslakable
-unslakeable
-unslaked
-unslammed
-unslandered
-unslanderous
-unslapped
-unslashed
-unslate
-unslated
-unslating
-unslaughtered
-unslave
-unslayable
-unsleaved
-unsleek
-unsleepably
-unsleeping
-unsleepingly
-unsleepy
-unsleeve
-unsleeved
-unslender
-unslept
-unsliced
-unsliding
-unslighted
-unsling
-unslip
-unslipped
-unslippery
-unslipping
-unslit
-unslockened
-unsloped
-unslopped
-unslot
-unslothful
-unslothfully
-unslothfulness
-unslotted
-unsloughed
-unsloughing
-unslow
-unsluggish
-unsluice
-unsluiced
-unslumbering
-unslumberous
-unslumbrous
-unslung
-unslurred
-unsly
-unsmacked
-unsmart
-unsmartly
-unsmartness
-unsmeared
-unsmelled
-unsmelling
-unsmelted
-unsmiled
-unsmiling
-unsmilingly
-unsmilingness
-unsmirched
-unsmirking
-unsmitten
-unsmokable
-unsmokeable
-unsmoked
-unsmokified
-unsmoking
-unsmoky
-unsmooth
-unsmoothed
-unsmoothly
-unsmoothness
-unsmote
-unsmotherable
-unsmothered
-unsmudged
-unsmuggled
-unsmutched
-unsmutted
-unsmutty
-unsnaffled
-unsnagged
-unsnaggled
-unsnaky
-unsnap
-unsnapped
-unsnare
-unsnared
-unsnarl
-unsnatch
-unsnatched
-unsneck
-unsneering
-unsnib
-unsnipped
-unsnobbish
-unsnoring
-unsnouted
-unsnow
-unsnubbable
-unsnubbed
-unsnuffed
-unsoaked
-unsoaped
-unsoarable
-unsober
-unsoberly
-unsoberness
-unsobriety
-unsociability
-unsociable
-unsociableness
-unsociably
-unsocial
-unsocialism
-unsocialistic
-unsociality
-unsocializable
-unsocialized
-unsocially
-unsocialness
-unsociological
-unsocket
-unsodden
-unsoft
-unsoftened
-unsoftening
-unsoggy
-unsoil
-unsoiled
-unsoiledness
-unsolaced
-unsolacing
-unsolar
-unsold
-unsolder
-unsoldered
-unsoldering
-unsoldier
-unsoldiered
-unsoldierlike
-unsoldierly
-unsole
-unsoled
-unsolemn
-unsolemness
-unsolemnize
-unsolemnized
-unsolemnly
-unsolicitated
-unsolicited
-unsolicitedly
-unsolicitous
-unsolicitously
-unsolicitousness
-unsolid
-unsolidarity
-unsolidifiable
-unsolidified
-unsolidity
-unsolidly
-unsolidness
-unsolitary
-unsolubility
-unsoluble
-unsolvable
-unsolvableness
-unsolvably
-unsolved
-unsomatic
-unsomber
-unsombre
-unsome
-unson
-unsonable
-unsonant
-unsonlike
-unsonneted
-unsonorous
-unsonsy
-unsoothable
-unsoothed
-unsoothfast
-unsoothing
-unsooty
-unsophistical
-unsophistically
-unsophisticate
-unsophisticated
-unsophisticatedly
-unsophisticatedness
-unsophistication
-unsophomoric
-unsordid
-unsore
-unsorrowed
-unsorrowing
-unsorry
-unsort
-unsortable
-unsorted
-unsorting
-unsotted
-unsought
-unsoul
-unsoulful
-unsoulfully
-unsoulish
-unsound
-unsoundable
-unsoundableness
-unsounded
-unsounding
-unsoundly
-unsoundness
-unsour
-unsoured
-unsoused
-unsovereign
-unsowed
-unsown
-unspaced
-unspacious
-unspaded
-unspan
-unspangled
-unspanked
-unspanned
-unspar
-unsparable
-unspared
-unsparing
-unsparingly
-unsparingness
-unsparkling
-unsparred
-unsparse
-unspatial
-unspatiality
-unspattered
-unspawned
-unspayed
-unspeak
-unspeakability
-unspeakable
-unspeakableness
-unspeakably
-unspeaking
-unspeared
-unspecialized
-unspecializing
-unspecific
-unspecified
-unspecifiedly
-unspecious
-unspecked
-unspeckled
-unspectacled
-unspectacular
-unspectacularly
-unspecterlike
-unspectrelike
-unspeculating
-unspeculative
-unspeculatively
-unsped
-unspeed
-unspeedy
-unspeered
-unspell
-unspellable
-unspelled
-unspelt
-unspendable
-unspending
-unspent
-unspewed
-unsphere
-unsphered
-unsphering
-unspiable
-unspiced
-unspicy
-unspied
-unspike
-unspillable
-unspin
-unspinsterlike
-unspinsterlikeness
-unspiral
-unspired
-unspirit
-unspirited
-unspiritedly
-unspiriting
-unspiritual
-unspirituality
-unspiritualize
-unspiritualized
-unspiritually
-unspiritualness
-unspissated
-unspit
-unspited
-unspiteful
-unspitted
-unsplashed
-unsplattered
-unsplayed
-unspleened
-unspleenish
-unspleenishly
-unsplendid
-unspliced
-unsplinted
-unsplintered
-unsplit
-unspoil
-unspoilable
-unspoilableness
-unspoilably
-unspoiled
-unspoken
-unspokenly
-unsponged
-unspongy
-unsponsored
-unspontaneous
-unspontaneously
-unspookish
-unsported
-unsportful
-unsporting
-unsportive
-unsportsmanlike
-unsportsmanly
-unspot
-unspotlighted
-unspottable
-unspotted
-unspottedly
-unspottedness
-unspoused
-unspouselike
-unspouted
-unsprained
-unsprayed
-unspread
-unsprightliness
-unsprightly
-unspring
-unspringing
-unspringlike
-unsprinkled
-unsprinklered
-unsprouted
-unsproutful
-unsprouting
-unspruced
-unsprung
-unspun
-unspurned
-unspurred
-unspying
-unsquandered
-unsquarable
-unsquare
-unsquared
-unsquashed
-unsqueamish
-unsqueezable
-unsqueezed
-unsquelched
-unsquinting
-unsquire
-unsquired
-unsquirelike
-unsquirted
-unstabbed
-unstability
-unstable
-unstabled
-unstableness
-unstablished
-unstably
-unstack
-unstacked
-unstacker
-unstaffed
-unstaged
-unstaggered
-unstaggering
-unstagnating
-unstagy
-unstaid
-unstaidly
-unstaidness
-unstain
-unstainable
-unstainableness
-unstained
-unstainedly
-unstainedness
-unstaled
-unstalked
-unstalled
-unstammering
-unstamped
-unstampeded
-unstanch
-unstanchable
-unstandard
-unstandardized
-unstanzaic
-unstar
-unstarch
-unstarched
-unstarlike
-unstarred
-unstarted
-unstarting
-unstartled
-unstarved
-unstatable
-unstate
-unstateable
-unstated
-unstately
-unstatesmanlike
-unstatic
-unstating
-unstation
-unstationary
-unstationed
-unstatistic
-unstatistical
-unstatued
-unstatuesque
-unstatutable
-unstatutably
-unstaunch
-unstaunchable
-unstaunched
-unstavable
-unstaveable
-unstaved
-unstayable
-unstayed
-unstayedness
-unstaying
-unsteadfast
-unsteadfastly
-unsteadfastness
-unsteadied
-unsteadily
-unsteadiness
-unsteady
-unsteadying
-unstealthy
-unsteamed
-unsteaming
-unsteck
-unstecked
-unsteel
-unsteeled
-unsteep
-unsteeped
-unsteepled
-unsteered
-unstemmable
-unstemmed
-unstentorian
-unstep
-unstercorated
-unstereotyped
-unsterile
-unsterilized
-unstern
-unstethoscoped
-unstewardlike
-unstewed
-unstick
-unsticking
-unstickingness
-unsticky
-unstiffen
-unstiffened
-unstifled
-unstigmatized
-unstill
-unstilled
-unstillness
-unstilted
-unstimulated
-unstimulating
-unsting
-unstinged
-unstinging
-unstinted
-unstintedly
-unstinting
-unstintingly
-unstippled
-unstipulated
-unstirrable
-unstirred
-unstirring
-unstitch
-unstitched
-unstitching
-unstock
-unstocked
-unstocking
-unstockinged
-unstoic
-unstoical
-unstoically
-unstoicize
-unstoked
-unstoken
-unstolen
-unstonable
-unstone
-unstoned
-unstoniness
-unstony
-unstooping
-unstop
-unstoppable
-unstopped
-unstopper
-unstoppered
-unstopple
-unstore
-unstored
-unstoried
-unstormed
-unstormy
-unstout
-unstoved
-unstow
-unstowed
-unstraddled
-unstrafed
-unstraight
-unstraightened
-unstraightforward
-unstraightness
-unstrain
-unstrained
-unstraitened
-unstrand
-unstranded
-unstrange
-unstrangered
-unstrangled
-unstrangulable
-unstrap
-unstrapped
-unstrategic
-unstrategically
-unstratified
-unstraying
-unstreaked
-unstrength
-unstrengthen
-unstrengthened
-unstrenuous
-unstressed
-unstressedly
-unstressedness
-unstretch
-unstretched
-unstrewed
-unstrewn
-unstriated
-unstricken
-unstrictured
-unstridulous
-unstrike
-unstriking
-unstring
-unstringed
-unstringing
-unstrip
-unstriped
-unstripped
-unstriving
-unstroked
-unstrong
-unstructural
-unstruggling
-unstrung
-unstubbed
-unstubborn
-unstuccoed
-unstuck
-unstudded
-unstudied
-unstudious
-unstuff
-unstuffed
-unstuffing
-unstultified
-unstumbling
-unstung
-unstunned
-unstunted
-unstupefied
-unstupid
-unstuttered
-unstuttering
-unsty
-unstyled
-unstylish
-unstylishly
-unstylishness
-unsubdivided
-unsubduable
-unsubduableness
-unsubduably
-unsubducted
-unsubdued
-unsubduedly
-unsubduedness
-unsubject
-unsubjectable
-unsubjected
-unsubjectedness
-unsubjection
-unsubjective
-unsubjectlike
-unsubjugate
-unsubjugated
-unsublimable
-unsublimated
-unsublimed
-unsubmerged
-unsubmergible
-unsubmerging
-unsubmission
-unsubmissive
-unsubmissively
-unsubmissiveness
-unsubmitted
-unsubmitting
-unsubordinate
-unsubordinated
-unsuborned
-unsubpoenaed
-unsubscribed
-unsubscribing
-unsubservient
-unsubsided
-unsubsidiary
-unsubsiding
-unsubsidized
-unsubstanced
-unsubstantial
-unsubstantiality
-unsubstantialize
-unsubstantially
-unsubstantialness
-unsubstantiate
-unsubstantiated
-unsubstantiation
-unsubstituted
-unsubtle
-unsubtleness
-unsubtlety
-unsubtly
-unsubtracted
-unsubventioned
-unsubventionized
-unsubversive
-unsubvertable
-unsubverted
-unsubvertive
-unsucceedable
-unsucceeded
-unsucceeding
-unsuccess
-unsuccessful
-unsuccessfully
-unsuccessfulness
-unsuccessive
-unsuccessively
-unsuccessiveness
-unsuccinct
-unsuccorable
-unsuccored
-unsucculent
-unsuccumbing
-unsucked
-unsuckled
-unsued
-unsufferable
-unsufferableness
-unsufferably
-unsuffered
-unsuffering
-unsufficed
-unsufficience
-unsufficiency
-unsufficient
-unsufficiently
-unsufficing
-unsufficingness
-unsufflated
-unsuffocate
-unsuffocated
-unsuffocative
-unsuffused
-unsugared
-unsugary
-unsuggested
-unsuggestedness
-unsuggestive
-unsuggestiveness
-unsuit
-unsuitability
-unsuitable
-unsuitableness
-unsuitably
-unsuited
-unsuiting
-unsulky
-unsullen
-unsulliable
-unsullied
-unsulliedly
-unsulliedness
-unsulphonated
-unsulphureous
-unsulphurized
-unsultry
-unsummable
-unsummarized
-unsummed
-unsummered
-unsummerlike
-unsummerly
-unsummonable
-unsummoned
-unsumptuary
-unsumptuous
-unsun
-unsunburned
-unsundered
-unsung
-unsunk
-unsunken
-unsunned
-unsunny
-unsuperable
-unsuperannuated
-unsupercilious
-unsuperficial
-unsuperfluous
-unsuperior
-unsuperlative
-unsupernatural
-unsupernaturalize
-unsupernaturalized
-unsuperscribed
-unsuperseded
-unsuperstitious
-unsupervised
-unsupervisedly
-unsupped
-unsupplantable
-unsupplanted
-unsupple
-unsuppled
-unsupplemented
-unsuppliable
-unsupplicated
-unsupplied
-unsupportable
-unsupportableness
-unsupportably
-unsupported
-unsupportedly
-unsupportedness
-unsupporting
-unsupposable
-unsupposed
-unsuppressed
-unsuppressible
-unsuppressibly
-unsuppurated
-unsuppurative
-unsupreme
-unsurcharge
-unsurcharged
-unsure
-unsurfaced
-unsurfeited
-unsurfeiting
-unsurgical
-unsurging
-unsurmised
-unsurmising
-unsurmountable
-unsurmountableness
-unsurmountably
-unsurmounted
-unsurnamed
-unsurpassable
-unsurpassableness
-unsurpassably
-unsurpassed
-unsurplice
-unsurpliced
-unsurprised
-unsurprising
-unsurrendered
-unsurrendering
-unsurrounded
-unsurveyable
-unsurveyed
-unsurvived
-unsurviving
-unsusceptibility
-unsusceptible
-unsusceptibleness
-unsusceptibly
-unsusceptive
-unsuspectable
-unsuspectably
-unsuspected
-unsuspectedly
-unsuspectedness
-unsuspectful
-unsuspectfulness
-unsuspectible
-unsuspecting
-unsuspectingly
-unsuspectingness
-unsuspective
-unsuspended
-unsuspicion
-unsuspicious
-unsuspiciously
-unsuspiciousness
-unsustainable
-unsustained
-unsustaining
-unsutured
-unswabbed
-unswaddle
-unswaddled
-unswaddling
-unswallowable
-unswallowed
-unswanlike
-unswapped
-unswarming
-unswathable
-unswathe
-unswathed
-unswathing
-unswayable
-unswayed
-unswayedness
-unswaying
-unswear
-unswearing
-unsweat
-unsweated
-unsweating
-unsweepable
-unsweet
-unsweeten
-unsweetened
-unsweetenedness
-unsweetly
-unsweetness
-unswell
-unswelled
-unswelling
-unsweltered
-unswept
-unswervable
-unswerved
-unswerving
-unswervingly
-unswilled
-unswing
-unswingled
-unswitched
-unswivel
-unswollen
-unswooning
-unsworn
-unswung
-unsyllabic
-unsyllabled
-unsyllogistical
-unsymbolic
-unsymbolical
-unsymbolically
-unsymbolicalness
-unsymbolized
-unsymmetrical
-unsymmetrically
-unsymmetricalness
-unsymmetrized
-unsymmetry
-unsympathetic
-unsympathetically
-unsympathizability
-unsympathizable
-unsympathized
-unsympathizing
-unsympathizingly
-unsympathy
-unsymphonious
-unsymptomatic
-unsynchronized
-unsynchronous
-unsyncopated
-unsyndicated
-unsynonymous
-unsyntactical
-unsynthetic
-unsyringed
-unsystematic
-unsystematical
-unsystematically
-unsystematized
-unsystematizedly
-unsystematizing
-unsystemizable
-untabernacled
-untabled
-untabulated
-untack
-untacked
-untacking
-untackle
-untackled
-untactful
-untactfully
-untactfulness
-untagged
-untailed
-untailorlike
-untailorly
-untaint
-untaintable
-untainted
-untaintedly
-untaintedness
-untainting
-untakable
-untakableness
-untakeable
-untakeableness
-untaken
-untaking
-untalented
-untalkative
-untalked
-untalking
-untall
-untallied
-untallowed
-untamable
-untamableness
-untame
-untamed
-untamedly
-untamedness
-untamely
-untameness
-untampered
-untangential
-untangibility
-untangible
-untangibleness
-untangibly
-untangle
-untangled
-untangling
-untanned
-untantalized
-untantalizing
-untap
-untaped
-untapered
-untapering
-untapestried
-untappable
-untapped
-untar
-untarnishable
-untarnished
-untarred
-untarried
-untarrying
-untartarized
-untasked
-untasseled
-untastable
-untaste
-untasteable
-untasted
-untasteful
-untastefully
-untastefulness
-untasting
-untasty
-untattered
-untattooed
-untaught
-untaughtness
-untaunted
-untaut
-untautological
-untawdry
-untawed
-untax
-untaxable
-untaxed
-untaxing
-unteach
-unteachable
-unteachableness
-unteachably
-unteacherlike
-unteaching
-unteam
-unteamed
-unteaming
-untearable
-unteased
-unteasled
-untechnical
-untechnicalize
-untechnically
-untedded
-untedious
-unteem
-unteeming
-unteethed
-untelegraphed
-untell
-untellable
-untellably
-untelling
-untemper
-untemperamental
-untemperate
-untemperately
-untemperateness
-untempered
-untempering
-untempested
-untempestuous
-untempled
-untemporal
-untemporary
-untemporizing
-untemptability
-untemptable
-untemptably
-untempted
-untemptible
-untemptibly
-untempting
-untemptingly
-untemptingness
-untenability
-untenable
-untenableness
-untenably
-untenacious
-untenacity
-untenant
-untenantable
-untenantableness
-untenanted
-untended
-untender
-untendered
-untenderly
-untenderness
-untenible
-untenibleness
-untenibly
-untense
-untent
-untentaculate
-untented
-untentered
-untenty
-unterminable
-unterminableness
-unterminably
-unterminated
-unterminating
-unterraced
-unterrestrial
-unterrible
-unterribly
-unterrifiable
-unterrific
-unterrified
-unterrifying
-unterrorized
-untessellated
-untestable
-untestamentary
-untested
-untestifying
-untether
-untethered
-untethering
-untewed
-untextual
-unthank
-unthanked
-unthankful
-unthankfully
-unthankfulness
-unthanking
-unthatch
-unthatched
-unthaw
-unthawed
-unthawing
-untheatric
-untheatrical
-untheatrically
-untheistic
-unthematic
-untheological
-untheologically
-untheologize
-untheoretic
-untheoretical
-untheorizable
-untherapeutical
-unthick
-unthicken
-unthickened
-unthievish
-unthink
-unthinkability
-unthinkable
-unthinkableness
-unthinkably
-unthinker
-unthinking
-unthinkingly
-unthinkingness
-unthinned
-unthinning
-unthirsting
-unthirsty
-unthistle
-untholeable
-untholeably
-unthorn
-unthorny
-unthorough
-unthought
-unthoughted
-unthoughtedly
-unthoughtful
-unthoughtfully
-unthoughtfulness
-unthoughtlike
-unthrall
-unthralled
-unthrashed
-unthread
-unthreadable
-unthreaded
-unthreading
-unthreatened
-unthreatening
-unthreshed
-unthrid
-unthridden
-unthrift
-unthriftihood
-unthriftily
-unthriftiness
-unthriftlike
-unthrifty
-unthrilled
-unthrilling
-unthriven
-unthriving
-unthrivingly
-unthrivingness
-unthrob
-unthrone
-unthroned
-unthronged
-unthroning
-unthrottled
-unthrowable
-unthrown
-unthrushlike
-unthrust
-unthumbed
-unthumped
-unthundered
-unthwacked
-unthwarted
-untiaraed
-unticketed
-untickled
-untidal
-untidily
-untidiness
-untidy
-untie
-untied
-untight
-untighten
-untightness
-until
-untile
-untiled
-untill
-untillable
-untilled
-untilling
-untilt
-untilted
-untilting
-untimbered
-untimed
-untimedness
-untimeliness
-untimely
-untimeous
-untimeously
-untimesome
-untimorous
-untin
-untinct
-untinctured
-untine
-untinged
-untinkered
-untinned
-untinseled
-untinted
-untippable
-untipped
-untippled
-untipt
-untirability
-untirable
-untire
-untired
-untiredly
-untiring
-untiringly
-untissued
-untithability
-untithable
-untithed
-untitled
-untittering
-untitular
-unto
-untoadying
-untoasted
-untogaed
-untoggle
-untoggler
-untoiled
-untoileted
-untoiling
-untold
-untolerable
-untolerableness
-untolerably
-untolerated
-untomb
-untombed
-untonality
-untone
-untoned
-untongued
-untonsured
-untooled
-untooth
-untoothed
-untoothsome
-untoothsomeness
-untop
-untopographical
-untopped
-untopping
-untormented
-untorn
-untorpedoed
-untorpid
-untorrid
-untortuous
-untorture
-untortured
-untossed
-untotaled
-untotalled
-untottering
-untouch
-untouchability
-untouchable
-untouchableness
-untouchably
-untouched
-untouchedness
-untouching
-untough
-untoured
-untouristed
-untoward
-untowardliness
-untowardly
-untowardness
-untowered
-untown
-untownlike
-untrace
-untraceable
-untraceableness
-untraceably
-untraced
-untraceried
-untracked
-untractability
-untractable
-untractableness
-untractably
-untractarian
-untractible
-untractibleness
-untradeable
-untraded
-untradesmanlike
-untrading
-untraditional
-untraduced
-untraffickable
-untrafficked
-untragic
-untragical
-untrailed
-untrain
-untrainable
-untrained
-untrainedly
-untrainedness
-untraitored
-untraitorous
-untrammed
-untrammeled
-untrammeledness
-untramped
-untrampled
-untrance
-untranquil
-untranquilized
-untranquillize
-untranquillized
-untransacted
-untranscended
-untranscendental
-untranscribable
-untranscribed
-untransferable
-untransferred
-untransfigured
-untransfixed
-untransformable
-untransformed
-untransforming
-untransfused
-untransfusible
-untransgressed
-untransient
-untransitable
-untransitive
-untransitory
-untranslatability
-untranslatable
-untranslatableness
-untranslatably
-untranslated
-untransmigrated
-untransmissible
-untransmitted
-untransmutable
-untransmuted
-untransparent
-untranspassable
-untranspired
-untranspiring
-untransplanted
-untransportable
-untransported
-untransposed
-untransubstantiated
-untrappable
-untrapped
-untrashed
-untravelable
-untraveled
-untraveling
-untravellable
-untravelling
-untraversable
-untraversed
-untravestied
-untreacherous
-untread
-untreadable
-untreading
-untreasonable
-untreasure
-untreasured
-untreatable
-untreatableness
-untreatably
-untreated
-untreed
-untrekked
-untrellised
-untrembling
-untremblingly
-untremendous
-untremulous
-untrenched
-untrepanned
-untrespassed
-untrespassing
-untress
-untressed
-untriable
-untribal
-untributary
-untriced
-untrickable
-untricked
-untried
-untrifling
-untrig
-untrigonometrical
-untrill
-untrim
-untrimmable
-untrimmed
-untrimmedness
-untrinitarian
-untripe
-untrippable
-untripped
-untripping
-untrite
-untriturated
-untriumphable
-untriumphant
-untriumphed
-untrochaic
-untrod
-untrodden
-untroddenness
-untrolled
-untrophied
-untropical
-untrotted
-untroublable
-untrouble
-untroubled
-untroubledly
-untroubledness
-untroublesome
-untroublesomeness
-untrounced
-untrowed
-untruant
-untruck
-untruckled
-untruckling
-untrue
-untrueness
-untruism
-untruly
-untrumped
-untrumpeted
-untrumping
-untrundled
-untrunked
-untruss
-untrussed
-untrusser
-untrussing
-untrust
-untrustably
-untrusted
-untrustful
-untrustiness
-untrusting
-untrustworthily
-untrustworthiness
-untrustworthy
-untrusty
-untruth
-untruther
-untruthful
-untruthfully
-untruthfulness
-untrying
-untubbed
-untuck
-untucked
-untuckered
-untucking
-untufted
-untugged
-untumbled
-untumefied
-untumid
-untumultuous
-untunable
-untunableness
-untunably
-untune
-untuneable
-untuneableness
-untuneably
-untuned
-untuneful
-untunefully
-untunefulness
-untuning
-untunneled
-untupped
-unturbaned
-unturbid
-unturbulent
-unturf
-unturfed
-unturgid
-unturn
-unturnable
-unturned
-unturning
-unturpentined
-unturreted
-untusked
-untutelar
-untutored
-untutoredly
-untutoredness
-untwilled
-untwinable
-untwine
-untwineable
-untwined
-untwining
-untwinkling
-untwinned
-untwirl
-untwirled
-untwirling
-untwist
-untwisted
-untwister
-untwisting
-untwitched
-untying
-untypical
-untypically
-untyrannic
-untyrannical
-untyrantlike
-untz
-unubiquitous
-unugly
-unulcerated
-unultra
-unumpired
-ununanimity
-ununanimous
-ununanimously
-ununderstandable
-ununderstandably
-ununderstanding
-ununderstood
-unundertaken
-unundulatory
-Unungun
-ununifiable
-ununified
-ununiform
-ununiformed
-ununiformity
-ununiformly
-ununiformness
-ununitable
-ununitableness
-ununitably
-ununited
-ununiting
-ununiversity
-ununiversitylike
-unupbraiding
-unupbraidingly
-unupholstered
-unupright
-unuprightly
-unuprightness
-unupset
-unupsettable
-unurban
-unurbane
-unurged
-unurgent
-unurging
-unurn
-unurned
-unusable
-unusableness
-unusably
-unuse
-unused
-unusedness
-unuseful
-unusefully
-unusefulness
-unushered
-unusual
-unusuality
-unusually
-unusualness
-unusurious
-unusurped
-unusurping
-unutilizable
-unutterability
-unutterable
-unutterableness
-unutterably
-unuttered
-unuxorial
-unuxorious
-unvacant
-unvaccinated
-unvacillating
-unvailable
-unvain
-unvaleted
-unvaletudinary
-unvaliant
-unvalid
-unvalidated
-unvalidating
-unvalidity
-unvalidly
-unvalidness
-unvalorous
-unvaluable
-unvaluableness
-unvaluably
-unvalue
-unvalued
-unvamped
-unvanishing
-unvanquishable
-unvanquished
-unvantaged
-unvaporized
-unvariable
-unvariableness
-unvariably
-unvariant
-unvaried
-unvariedly
-unvariegated
-unvarnished
-unvarnishedly
-unvarnishedness
-unvarying
-unvaryingly
-unvaryingness
-unvascular
-unvassal
-unvatted
-unvaulted
-unvaulting
-unvaunted
-unvaunting
-unvauntingly
-unveering
-unveil
-unveiled
-unveiledly
-unveiledness
-unveiler
-unveiling
-unveilment
-unveined
-unvelvety
-unvendable
-unvendableness
-unvended
-unvendible
-unvendibleness
-unveneered
-unvenerable
-unvenerated
-unvenereal
-unvenged
-unveniable
-unvenial
-unvenom
-unvenomed
-unvenomous
-unventable
-unvented
-unventilated
-unventured
-unventurous
-unvenued
-unveracious
-unveracity
-unverbalized
-unverdant
-unverdured
-unveridical
-unverifiable
-unverifiableness
-unverifiably
-unverified
-unverifiedness
-unveritable
-unverity
-unvermiculated
-unverminous
-unvernicular
-unversatile
-unversed
-unversedly
-unversedness
-unversified
-unvertical
-unvessel
-unvesseled
-unvest
-unvested
-unvetoed
-unvexed
-unviable
-unvibrated
-unvibrating
-unvicar
-unvicarious
-unvicariously
-unvicious
-unvictimized
-unvictorious
-unvictualed
-unvictualled
-unviewable
-unviewed
-unvigilant
-unvigorous
-unvigorously
-unvilified
-unvillaged
-unvindicated
-unvindictive
-unvindictively
-unvindictiveness
-unvinous
-unvintaged
-unviolable
-unviolated
-unviolenced
-unviolent
-unviolined
-unvirgin
-unvirginal
-unvirginlike
-unvirile
-unvirility
-unvirtue
-unvirtuous
-unvirtuously
-unvirtuousness
-unvirulent
-unvisible
-unvisibleness
-unvisibly
-unvision
-unvisionary
-unvisioned
-unvisitable
-unvisited
-unvisor
-unvisored
-unvisualized
-unvital
-unvitalized
-unvitalness
-unvitiated
-unvitiatedly
-unvitiatedness
-unvitrescibility
-unvitrescible
-unvitrifiable
-unvitrified
-unvitriolized
-unvituperated
-unvivacious
-unvivid
-unvivified
-unvizard
-unvizarded
-unvocal
-unvocalized
-unvociferous
-unvoice
-unvoiced
-unvoiceful
-unvoicing
-unvoidable
-unvoided
-unvolatile
-unvolatilize
-unvolatilized
-unvolcanic
-unvolitioned
-unvoluminous
-unvoluntarily
-unvoluntariness
-unvoluntary
-unvolunteering
-unvoluptuous
-unvomited
-unvoracious
-unvote
-unvoted
-unvoting
-unvouched
-unvouchedly
-unvouchedness
-unvouchsafed
-unvowed
-unvoweled
-unvoyageable
-unvoyaging
-unvulcanized
-unvulgar
-unvulgarize
-unvulgarized
-unvulgarly
-unvulnerable
-unwadable
-unwadded
-unwadeable
-unwaded
-unwading
-unwafted
-unwaged
-unwagered
-unwaggable
-unwaggably
-unwagged
-unwailed
-unwailing
-unwainscoted
-unwaited
-unwaiting
-unwaked
-unwakeful
-unwakefulness
-unwakened
-unwakening
-unwaking
-unwalkable
-unwalked
-unwalking
-unwall
-unwalled
-unwallet
-unwallowed
-unwan
-unwandered
-unwandering
-unwaning
-unwanted
-unwanton
-unwarbled
-unware
-unwarely
-unwareness
-unwarily
-unwariness
-unwarlike
-unwarlikeness
-unwarm
-unwarmable
-unwarmed
-unwarming
-unwarn
-unwarned
-unwarnedly
-unwarnedness
-unwarnished
-unwarp
-unwarpable
-unwarped
-unwarping
-unwarrant
-unwarrantability
-unwarrantable
-unwarrantableness
-unwarrantably
-unwarranted
-unwarrantedly
-unwarrantedness
-unwary
-unwashable
-unwashed
-unwashedness
-unwassailing
-unwastable
-unwasted
-unwasteful
-unwastefully
-unwasting
-unwastingly
-unwatchable
-unwatched
-unwatchful
-unwatchfully
-unwatchfulness
-unwatching
-unwater
-unwatered
-unwaterlike
-unwatermarked
-unwatery
-unwattled
-unwaved
-unwaverable
-unwavered
-unwavering
-unwaveringly
-unwaving
-unwax
-unwaxed
-unwayed
-unwayward
-unweaken
-unweakened
-unweal
-unwealsomeness
-unwealthy
-unweaned
-unweapon
-unweaponed
-unwearable
-unweariability
-unweariable
-unweariableness
-unweariably
-unwearied
-unweariedly
-unweariedness
-unwearily
-unweariness
-unwearing
-unwearisome
-unwearisomeness
-unweary
-unwearying
-unwearyingly
-unweathered
-unweatherly
-unweatherwise
-unweave
-unweaving
-unweb
-unwebbed
-unwebbing
-unwed
-unwedded
-unweddedly
-unweddedness
-unwedge
-unwedgeable
-unwedged
-unweeded
-unweel
-unweelness
-unweened
-unweeping
-unweeting
-unweetingly
-unweft
-unweighable
-unweighed
-unweighing
-unweight
-unweighted
-unweighty
-unwelcome
-unwelcomed
-unwelcomely
-unwelcomeness
-unweld
-unweldable
-unwelded
-unwell
-unwellness
-unwelted
-unwept
-unwestern
-unwesternized
-unwet
-unwettable
-unwetted
-unwheedled
-unwheel
-unwheeled
-unwhelmed
-unwhelped
-unwhetted
-unwhig
-unwhiglike
-unwhimsical
-unwhining
-unwhip
-unwhipped
-unwhirled
-unwhisked
-unwhiskered
-unwhisperable
-unwhispered
-unwhispering
-unwhistled
-unwhite
-unwhited
-unwhitened
-unwhitewashed
-unwholesome
-unwholesomely
-unwholesomeness
-unwidened
-unwidowed
-unwield
-unwieldable
-unwieldily
-unwieldiness
-unwieldly
-unwieldy
-unwifed
-unwifelike
-unwifely
-unwig
-unwigged
-unwild
-unwilily
-unwiliness
-unwill
-unwilled
-unwillful
-unwillfully
-unwillfulness
-unwilling
-unwillingly
-unwillingness
-unwilted
-unwilting
-unwily
-unwincing
-unwincingly
-unwind
-unwindable
-unwinding
-unwindingly
-unwindowed
-unwindy
-unwingable
-unwinged
-unwinking
-unwinkingly
-unwinnable
-unwinning
-unwinnowed
-unwinsome
-unwinter
-unwintry
-unwiped
-unwire
-unwired
-unwisdom
-unwise
-unwisely
-unwiseness
-unwish
-unwished
-unwishful
-unwishing
-unwist
-unwistful
-unwitch
-unwitched
-unwithdrawable
-unwithdrawing
-unwithdrawn
-unwitherable
-unwithered
-unwithering
-unwithheld
-unwithholden
-unwithholding
-unwithstanding
-unwithstood
-unwitless
-unwitnessed
-unwitted
-unwittily
-unwitting
-unwittingly
-unwittingness
-unwitty
-unwive
-unwived
-unwoeful
-unwoful
-unwoman
-unwomanish
-unwomanize
-unwomanized
-unwomanlike
-unwomanliness
-unwomanly
-unwomb
-unwon
-unwonder
-unwonderful
-unwondering
-unwonted
-unwontedly
-unwontedness
-unwooded
-unwooed
-unwoof
-unwooly
-unwordable
-unwordably
-unwordily
-unwordy
-unwork
-unworkability
-unworkable
-unworkableness
-unworkably
-unworked
-unworkedness
-unworker
-unworking
-unworkmanlike
-unworkmanly
-unworld
-unworldliness
-unworldly
-unwormed
-unwormy
-unworn
-unworried
-unworriedly
-unworriedness
-unworshiped
-unworshipful
-unworshiping
-unworshipped
-unworshipping
-unworth
-unworthily
-unworthiness
-unworthy
-unwotting
-unwound
-unwoundable
-unwoundableness
-unwounded
-unwoven
-unwrangling
-unwrap
-unwrapped
-unwrapper
-unwrapping
-unwrathful
-unwrathfully
-unwreaked
-unwreathe
-unwreathed
-unwreathing
-unwrecked
-unwrench
-unwrenched
-unwrested
-unwrestedly
-unwresting
-unwrestled
-unwretched
-unwriggled
-unwrinkle
-unwrinkleable
-unwrinkled
-unwrit
-unwritable
-unwrite
-unwriteable
-unwriting
-unwritten
-unwronged
-unwrongful
-unwrought
-unwrung
-unyachtsmanlike
-unyeaned
-unyearned
-unyearning
-unyielded
-unyielding
-unyieldingly
-unyieldingness
-unyoke
-unyoked
-unyoking
-unyoung
-unyouthful
-unyouthfully
-unze
-unzealous
-unzealously
-unzealousness
-unzen
-unzephyrlike
-unzone
-unzoned
-up
-upaisle
-upaithric
-upalley
-upalong
-upanishadic
-upapurana
-uparch
-uparching
-uparise
-uparm
-uparna
-upas
-upattic
-upavenue
-upbank
-upbar
-upbay
-upbear
-upbearer
-upbeat
-upbelch
-upbelt
-upbend
-upbid
-upbind
-upblacken
-upblast
-upblaze
-upblow
-upboil
-upbolster
-upbolt
-upboost
-upborne
-upbotch
-upboulevard
-upbound
-upbrace
-upbraid
-upbraider
-upbraiding
-upbraidingly
-upbray
-upbreak
-upbred
-upbreed
-upbreeze
-upbrighten
-upbrim
-upbring
-upbristle
-upbroken
-upbrook
-upbrought
-upbrow
-upbubble
-upbuild
-upbuilder
-upbulging
-upbuoy
-upbuoyance
-upburn
-upburst
-upbuy
-upcall
-upcanal
-upcanyon
-upcarry
-upcast
-upcatch
-upcaught
-upchamber
-upchannel
-upchariot
-upchimney
-upchoke
-upchuck
-upcity
-upclimb
-upclose
-upcloser
-upcoast
-upcock
-upcoil
-upcolumn
-upcome
-upcoming
-upconjure
-upcountry
-upcourse
-upcover
-upcrane
-upcrawl
-upcreek
-upcreep
-upcrop
-upcrowd
-upcry
-upcurl
-upcurrent
-upcurve
-upcushion
-upcut
-updart
-update
-updeck
-updelve
-updive
-updo
-updome
-updraft
-updrag
-updraw
-updrink
-updry
-upeat
-upend
-upeygan
-upfeed
-upfield
-upfill
-upfingered
-upflame
-upflare
-upflash
-upflee
-upflicker
-upfling
-upfloat
-upflood
-upflow
-upflower
-upflung
-upfly
-upfold
-upfollow
-upframe
-upfurl
-upgale
-upgang
-upgape
-upgather
-upgaze
-upget
-upgird
-upgirt
-upgive
-upglean
-upglide
-upgo
-upgorge
-upgrade
-upgrave
-upgrow
-upgrowth
-upgully
-upgush
-uphand
-uphang
-upharbor
-upharrow
-uphasp
-upheal
-upheap
-uphearted
-upheaval
-upheavalist
-upheave
-upheaven
-upheld
-uphelm
-uphelya
-upher
-uphill
-uphillward
-uphoard
-uphoist
-uphold
-upholden
-upholder
-upholster
-upholstered
-upholsterer
-upholsteress
-upholsterous
-upholstery
-upholsterydom
-upholstress
-uphung
-uphurl
-upisland
-upjerk
-upjet
-upkeep
-upkindle
-upknell
-upknit
-upla
-upladder
-uplaid
-uplake
-upland
-uplander
-uplandish
-uplane
-uplay
-uplead
-upleap
-upleg
-uplick
-uplift
-upliftable
-uplifted
-upliftedly
-upliftedness
-uplifter
-uplifting
-upliftingly
-upliftingness
-upliftitis
-upliftment
-uplight
-uplimb
-uplimber
-upline
-uplock
-uplong
-uplook
-uplooker
-uploom
-uploop
-uplying
-upmaking
-upmast
-upmix
-upmost
-upmount
-upmountain
-upmove
-upness
-upo
-upon
-uppard
-uppent
-upper
-upperch
-uppercut
-upperer
-upperest
-upperhandism
-uppermore
-uppermost
-uppers
-uppertendom
-uppile
-upping
-uppish
-uppishly
-uppishness
-uppity
-upplough
-upplow
-uppluck
-uppoint
-uppoise
-uppop
-uppour
-uppowoc
-upprick
-upprop
-uppuff
-uppull
-uppush
-upquiver
-upraisal
-upraise
-upraiser
-upreach
-uprear
-uprein
-uprend
-uprender
-uprest
-uprestore
-uprid
-upridge
-upright
-uprighteous
-uprighteously
-uprighteousness
-uprighting
-uprightish
-uprightly
-uprightness
-uprights
-uprip
-uprisal
-uprise
-uprisement
-uprisen
-upriser
-uprising
-uprist
-uprive
-upriver
-uproad
-uproar
-uproariness
-uproarious
-uproariously
-uproariousness
-uproom
-uproot
-uprootal
-uprooter
-uprose
-uprouse
-uproute
-uprun
-uprush
-upsaddle
-upscale
-upscrew
-upscuddle
-upseal
-upseek
-upseize
-upsend
-upset
-upsetment
-upsettable
-upsettal
-upsetted
-upsetter
-upsetting
-upsettingly
-upsey
-upshaft
-upshear
-upsheath
-upshoot
-upshore
-upshot
-upshoulder
-upshove
-upshut
-upside
-upsides
-upsighted
-upsiloid
-upsilon
-upsilonism
-upsit
-upsitten
-upsitting
-upslant
-upslip
-upslope
-upsmite
-upsnatch
-upsoak
-upsoar
-upsolve
-upspeak
-upspear
-upspeed
-upspew
-upspin
-upspire
-upsplash
-upspout
-upspread
-upspring
-upsprinkle
-upsprout
-upspurt
-upstaff
-upstage
-upstair
-upstairs
-upstamp
-upstand
-upstander
-upstanding
-upstare
-upstart
-upstartism
-upstartle
-upstartness
-upstate
-upstater
-upstaunch
-upstay
-upsteal
-upsteam
-upstem
-upstep
-upstick
-upstir
-upstraight
-upstream
-upstreamward
-upstreet
-upstretch
-upstrike
-upstrive
-upstroke
-upstruggle
-upsuck
-upsun
-upsup
-upsurge
-upsurgence
-upswallow
-upswarm
-upsway
-upsweep
-upswell
-upswing
-uptable
-uptake
-uptaker
-uptear
-uptemper
-uptend
-upthrow
-upthrust
-upthunder
-uptide
-uptie
-uptill
-uptilt
-uptorn
-uptoss
-uptower
-uptown
-uptowner
-uptrace
-uptrack
-uptrail
-uptrain
-uptree
-uptrend
-uptrill
-uptrunk
-uptruss
-uptube
-uptuck
-upturn
-uptwined
-uptwist
-Upupa
-Upupidae
-upupoid
-upvalley
-upvomit
-upwaft
-upwall
-upward
-upwardly
-upwardness
-upwards
-upwarp
-upwax
-upway
-upways
-upwell
-upwent
-upwheel
-upwhelm
-upwhir
-upwhirl
-upwind
-upwith
-upwork
-upwound
-upwrap
-upwreathe
-upwrench
-upwring
-upwrought
-upyard
-upyoke
-ur
-ura
-urachal
-urachovesical
-urachus
-uracil
-uraemic
-uraeus
-Uragoga
-Ural
-ural
-urali
-Uralian
-Uralic
-uraline
-uralite
-uralitic
-uralitization
-uralitize
-uralium
-uramido
-uramil
-uramilic
-uramino
-Uran
-uran
-uranalysis
-uranate
-Urania
-Uranian
-uranic
-Uranicentric
-uranidine
-uraniferous
-uraniid
-Uraniidae
-uranin
-uranine
-uraninite
-uranion
-uraniscochasma
-uraniscoplasty
-uraniscoraphy
-uraniscorrhaphy
-uranism
-uranist
-uranite
-uranitic
-uranium
-uranocircite
-uranographer
-uranographic
-uranographical
-uranographist
-uranography
-uranolatry
-uranolite
-uranological
-uranology
-uranometria
-uranometrical
-uranometry
-uranophane
-uranophotography
-uranoplastic
-uranoplasty
-uranoplegia
-uranorrhaphia
-uranorrhaphy
-uranoschisis
-uranoschism
-uranoscope
-uranoscopia
-uranoscopic
-Uranoscopidae
-Uranoscopus
-uranoscopy
-uranospathite
-uranosphaerite
-uranospinite
-uranostaphyloplasty
-uranostaphylorrhaphy
-uranotantalite
-uranothallite
-uranothorite
-uranotil
-uranous
-Uranus
-uranyl
-uranylic
-urao
-urare
-urari
-Urartaean
-Urartic
-urase
-urataemia
-urate
-uratemia
-uratic
-uratoma
-uratosis
-uraturia
-urazine
-urazole
-urbacity
-urbainite
-Urban
-urban
-urbane
-urbanely
-urbaneness
-urbanism
-Urbanist
-urbanist
-urbanite
-urbanity
-urbanization
-urbanize
-urbarial
-urbian
-urbic
-Urbicolae
-urbicolous
-urbification
-urbify
-urbinate
-urceiform
-urceolar
-urceolate
-urceole
-urceoli
-Urceolina
-urceolus
-urceus
-urchin
-urchiness
-urchinlike
-urchinly
-urd
-urde
-urdee
-Urdu
-ure
-urea
-ureal
-ureameter
-ureametry
-urease
-urechitin
-urechitoxin
-uredema
-Uredinales
-uredine
-Uredineae
-uredineal
-uredineous
-uredinia
-uredinial
-Urediniopsis
-urediniospore
-urediniosporic
-uredinium
-uredinoid
-uredinologist
-uredinology
-uredinous
-Uredo
-uredo
-uredosorus
-uredospore
-uredosporic
-uredosporiferous
-uredosporous
-uredostage
-ureic
-ureid
-ureide
-ureido
-uremia
-uremic
-Urena
-urent
-ureometer
-ureometry
-ureosecretory
-uresis
-uretal
-ureter
-ureteral
-ureteralgia
-uretercystoscope
-ureterectasia
-ureterectasis
-ureterectomy
-ureteric
-ureteritis
-ureterocele
-ureterocervical
-ureterocolostomy
-ureterocystanastomosis
-ureterocystoscope
-ureterocystostomy
-ureterodialysis
-ureteroenteric
-ureteroenterostomy
-ureterogenital
-ureterogram
-ureterograph
-ureterography
-ureterointestinal
-ureterolith
-ureterolithiasis
-ureterolithic
-ureterolithotomy
-ureterolysis
-ureteronephrectomy
-ureterophlegma
-ureteroplasty
-ureteroproctostomy
-ureteropyelitis
-ureteropyelogram
-ureteropyelography
-ureteropyelonephritis
-ureteropyelostomy
-ureteropyosis
-ureteroradiography
-ureterorectostomy
-ureterorrhagia
-ureterorrhaphy
-ureterosalpingostomy
-ureterosigmoidostomy
-ureterostegnosis
-ureterostenoma
-ureterostenosis
-ureterostoma
-ureterostomy
-ureterotomy
-ureterouteral
-ureterovaginal
-ureterovesical
-urethan
-urethane
-urethra
-urethrae
-urethragraph
-urethral
-urethralgia
-urethrameter
-urethrascope
-urethratome
-urethratresia
-urethrectomy
-urethremphraxis
-urethreurynter
-urethrism
-urethritic
-urethritis
-urethroblennorrhea
-urethrobulbar
-urethrocele
-urethrocystitis
-urethrogenital
-urethrogram
-urethrograph
-urethrometer
-urethropenile
-urethroperineal
-urethrophyma
-urethroplastic
-urethroplasty
-urethroprostatic
-urethrorectal
-urethrorrhagia
-urethrorrhaphy
-urethrorrhea
-urethrorrhoea
-urethroscope
-urethroscopic
-urethroscopical
-urethroscopy
-urethrosexual
-urethrospasm
-urethrostaxis
-urethrostenosis
-urethrostomy
-urethrotome
-urethrotomic
-urethrotomy
-urethrovaginal
-urethrovesical
-urethylan
-uretic
-ureylene
-urf
-urfirnis
-urge
-urgence
-urgency
-urgent
-urgently
-urgentness
-urger
-Urginea
-urging
-urgingly
-Urgonian
-urheen
-Uri
-Uria
-Uriah
-urial
-Urian
-uric
-uricacidemia
-uricaciduria
-uricaemia
-uricaemic
-uricemia
-uricemic
-uricolysis
-uricolytic
-uridrosis
-Uriel
-urinaemia
-urinal
-urinalist
-urinalysis
-urinant
-urinarium
-urinary
-urinate
-urination
-urinative
-urinator
-urine
-urinemia
-uriniferous
-uriniparous
-urinocryoscopy
-urinogenital
-urinogenitary
-urinogenous
-urinologist
-urinology
-urinomancy
-urinometer
-urinometric
-urinometry
-urinoscopic
-urinoscopist
-urinoscopy
-urinose
-urinosexual
-urinous
-urinousness
-urite
-urlar
-urled
-urling
-urluch
-urman
-urn
-urna
-urnae
-urnal
-urnflower
-urnful
-urning
-urningism
-urnism
-urnlike
-urnmaker
-Uro
-uroacidimeter
-uroazotometer
-urobenzoic
-urobilin
-urobilinemia
-urobilinogen
-urobilinogenuria
-urobilinuria
-urocanic
-urocele
-Urocerata
-urocerid
-Uroceridae
-urochloralic
-urochord
-Urochorda
-urochordal
-urochordate
-urochrome
-urochromogen
-Urocoptidae
-Urocoptis
-urocyanogen
-Urocyon
-urocyst
-urocystic
-Urocystis
-urocystitis
-urodaeum
-Urodela
-urodelan
-urodele
-urodelous
-urodialysis
-urodynia
-uroedema
-uroerythrin
-urofuscohematin
-urogaster
-urogastric
-urogenic
-urogenital
-urogenitary
-urogenous
-uroglaucin
-Uroglena
-urogram
-urography
-urogravimeter
-urohematin
-urohyal
-urolagnia
-uroleucic
-uroleucinic
-urolith
-urolithiasis
-urolithic
-urolithology
-urologic
-urological
-urologist
-urology
-urolutein
-urolytic
-uromancy
-uromantia
-uromantist
-Uromastix
-uromelanin
-uromelus
-uromere
-uromeric
-urometer
-Uromyces
-Uromycladium
-uronephrosis
-uronic
-uronology
-uropatagium
-Uropeltidae
-urophanic
-urophanous
-urophein
-Urophlyctis
-urophthisis
-uroplania
-uropod
-uropodal
-uropodous
-uropoetic
-uropoiesis
-uropoietic
-uroporphyrin
-uropsile
-Uropsilus
-uroptysis
-Uropygi
-uropygial
-uropygium
-uropyloric
-urorosein
-urorrhagia
-urorrhea
-urorubin
-urosaccharometry
-urosacral
-uroschesis
-uroscopic
-uroscopist
-uroscopy
-urosepsis
-uroseptic
-urosis
-urosomatic
-urosome
-urosomite
-urosomitic
-urostea
-urostealith
-urostegal
-urostege
-urostegite
-urosteon
-urosternite
-urosthene
-urosthenic
-urostylar
-urostyle
-urotoxia
-urotoxic
-urotoxicity
-urotoxin
-urotoxy
-uroxanate
-uroxanic
-uroxanthin
-uroxin
-urradhus
-urrhodin
-urrhodinic
-Urs
-Ursa
-ursal
-ursicidal
-ursicide
-Ursid
-Ursidae
-ursiform
-ursigram
-ursine
-ursoid
-ursolic
-urson
-ursone
-ursuk
-Ursula
-Ursuline
-Ursus
-Urtica
-urtica
-Urticaceae
-urticaceous
-Urticales
-urticant
-urticaria
-urticarial
-urticarious
-Urticastrum
-urticate
-urticating
-urtication
-urticose
-urtite
-Uru
-urubu
-urucu
-urucuri
-Uruguayan
-uruisg
-Urukuena
-urunday
-urus
-urushi
-urushic
-urushinic
-urushiol
-urushiye
-urva
-us
-usability
-usable
-usableness
-usage
-usager
-usance
-usar
-usara
-usaron
-usation
-use
-used
-usedly
-usedness
-usednt
-usee
-useful
-usefullish
-usefully
-usefulness
-usehold
-useless
-uselessly
-uselessness
-usent
-user
-ush
-ushabti
-ushabtiu
-Ushak
-Usheen
-usher
-usherance
-usherdom
-usherer
-usheress
-usherette
-Usherian
-usherian
-usherism
-usherless
-ushership
-usings
-Usipetes
-usitate
-usitative
-Uskara
-Uskok
-Usnea
-usnea
-Usneaceae
-usneaceous
-usneoid
-usnic
-usninic
-Uspanteca
-usque
-usquebaugh
-usself
-ussels
-usselven
-ussingite
-ust
-Ustarana
-uster
-Ustilaginaceae
-ustilaginaceous
-Ustilaginales
-ustilagineous
-Ustilaginoidea
-Ustilago
-ustion
-ustorious
-ustulate
-ustulation
-Ustulina
-usual
-usualism
-usually
-usualness
-usuary
-usucapient
-usucapion
-usucapionary
-usucapt
-usucaptable
-usucaption
-usucaptor
-usufruct
-usufructuary
-Usun
-usure
-usurer
-usurerlike
-usuress
-usurious
-usuriously
-usuriousness
-usurp
-usurpation
-usurpative
-usurpatively
-usurpatory
-usurpature
-usurpedly
-usurper
-usurpership
-usurping
-usurpingly
-usurpment
-usurpor
-usurpress
-usury
-usward
-uswards
-ut
-Uta
-uta
-Utah
-Utahan
-utahite
-utai
-utas
-utch
-utchy
-Ute
-utees
-utensil
-uteralgia
-uterectomy
-uteri
-uterine
-uteritis
-uteroabdominal
-uterocele
-uterocervical
-uterocystotomy
-uterofixation
-uterogestation
-uterogram
-uterography
-uterointestinal
-uterolith
-uterology
-uteromania
-uterometer
-uteroovarian
-uteroparietal
-uteropelvic
-uteroperitoneal
-uteropexia
-uteropexy
-uteroplacental
-uteroplasty
-uterosacral
-uterosclerosis
-uteroscope
-uterotomy
-uterotonic
-uterotubal
-uterovaginal
-uteroventral
-uterovesical
-uterus
-utfangenethef
-utfangethef
-utfangthef
-utfangthief
-utick
-utile
-utilitarian
-utilitarianism
-utilitarianist
-utilitarianize
-utilitarianly
-utility
-utilizable
-utilization
-utilize
-utilizer
-utinam
-utmost
-utmostness
-Utopia
-utopia
-Utopian
-utopian
-utopianism
-utopianist
-Utopianize
-Utopianizer
-utopianizer
-utopiast
-utopism
-utopist
-utopistic
-utopographer
-Utraquism
-utraquist
-utraquistic
-Utrecht
-utricle
-utricul
-utricular
-Utricularia
-Utriculariaceae
-utriculate
-utriculiferous
-utriculiform
-utriculitis
-utriculoid
-utriculoplastic
-utriculoplasty
-utriculosaccular
-utriculose
-utriculus
-utriform
-utrubi
-utrum
-utsuk
-utter
-utterability
-utterable
-utterableness
-utterance
-utterancy
-utterer
-utterless
-utterly
-uttermost
-utterness
-utu
-utum
-uturuncu
-uva
-uval
-uvalha
-uvanite
-uvarovite
-uvate
-uvea
-uveal
-uveitic
-uveitis
-Uvella
-uveous
-uvic
-uvid
-uviol
-uvitic
-uvitinic
-uvito
-uvitonic
-uvrou
-uvula
-uvulae
-uvular
-Uvularia
-uvularly
-uvulitis
-uvuloptosis
-uvulotome
-uvulotomy
-uvver
-uxorial
-uxoriality
-uxorially
-uxoricidal
-uxoricide
-uxorious
-uxoriously
-uxoriousness
-uzan
-uzara
-uzarin
-uzaron
-Uzbak
-Uzbeg
-Uzbek
-V
-v
-vaagmer
-vaalite
-Vaalpens
-vacabond
-vacancy
-vacant
-vacanthearted
-vacantheartedness
-vacantly
-vacantness
-vacantry
-vacatable
-vacate
-vacation
-vacational
-vacationer
-vacationist
-vacationless
-vacatur
-Vaccaria
-vaccary
-vaccenic
-vaccicide
-vaccigenous
-vaccina
-vaccinable
-vaccinal
-vaccinate
-vaccination
-vaccinationist
-vaccinator
-vaccinatory
-vaccine
-vaccinee
-vaccinella
-vaccinia
-Vacciniaceae
-vacciniaceous
-vaccinial
-vaccinifer
-vacciniform
-vacciniola
-vaccinist
-Vaccinium
-vaccinium
-vaccinization
-vaccinogenic
-vaccinogenous
-vaccinoid
-vaccinophobia
-vaccinotherapy
-vache
-Vachellia
-vachette
-vacillancy
-vacillant
-vacillate
-vacillating
-vacillatingly
-vacillation
-vacillator
-vacillatory
-vacoa
-vacona
-vacoua
-vacouf
-vacual
-vacuate
-vacuation
-vacuefy
-vacuist
-vacuity
-vacuolar
-vacuolary
-vacuolate
-vacuolated
-vacuolation
-vacuole
-vacuolization
-vacuome
-vacuometer
-vacuous
-vacuously
-vacuousness
-vacuum
-vacuuma
-vacuumize
-vade
-Vadim
-vadimonium
-vadimony
-vadium
-vadose
-vady
-vag
-vagabond
-vagabondage
-vagabondager
-vagabondia
-vagabondish
-vagabondism
-vagabondismus
-vagabondize
-vagabondizer
-vagabondry
-vagal
-vagarian
-vagarious
-vagariously
-vagarish
-vagarisome
-vagarist
-vagaristic
-vagarity
-vagary
-vagas
-vage
-vagiform
-vagile
-vagina
-vaginal
-vaginalectomy
-vaginaless
-vaginalitis
-vaginant
-vaginate
-vaginated
-vaginectomy
-vaginervose
-Vaginicola
-vaginicoline
-vaginicolous
-vaginiferous
-vaginipennate
-vaginismus
-vaginitis
-vaginoabdominal
-vaginocele
-vaginodynia
-vaginofixation
-vaginolabial
-vaginometer
-vaginomycosis
-vaginoperineal
-vaginoperitoneal
-vaginopexy
-vaginoplasty
-vaginoscope
-vaginoscopy
-vaginotome
-vaginotomy
-vaginovesical
-vaginovulvar
-vaginula
-vaginulate
-vaginule
-vagitus
-Vagnera
-vagoaccessorius
-vagodepressor
-vagoglossopharyngeal
-vagogram
-vagolysis
-vagosympathetic
-vagotomize
-vagotomy
-vagotonia
-vagotonic
-vagotropic
-vagotropism
-vagrance
-vagrancy
-vagrant
-vagrantism
-vagrantize
-vagrantlike
-vagrantly
-vagrantness
-vagrate
-vagrom
-vague
-vaguely
-vagueness
-vaguish
-vaguity
-vagulous
-vagus
-vahine
-Vai
-Vaidic
-vail
-vailable
-vain
-vainful
-vainglorious
-vaingloriously
-vaingloriousness
-vainglory
-vainly
-vainness
-vair
-vairagi
-vaire
-vairy
-Vaishnava
-Vaishnavism
-vaivode
-vajra
-vajrasana
-vakass
-vakia
-vakil
-vakkaliga
-Val
-valance
-valanced
-valanche
-valbellite
-vale
-valediction
-valedictorian
-valedictorily
-valedictory
-valence
-Valencia
-Valencian
-valencianite
-Valenciennes
-valency
-valent
-Valentide
-Valentin
-Valentine
-valentine
-Valentinian
-Valentinianism
-valentinite
-valeral
-valeraldehyde
-valeramide
-valerate
-Valeria
-valerian
-Valeriana
-Valerianaceae
-valerianaceous
-Valerianales
-valerianate
-Valerianella
-Valerianoides
-valeric
-Valerie
-valerin
-valerolactone
-valerone
-valeryl
-valerylene
-valet
-valeta
-valetage
-valetdom
-valethood
-valetism
-valetry
-valetudinarian
-valetudinarianism
-valetudinariness
-valetudinarist
-valetudinarium
-valetudinary
-valeur
-valeward
-valgoid
-valgus
-valhall
-Valhalla
-Vali
-vali
-valiance
-valiancy
-valiant
-valiantly
-valiantness
-valid
-validate
-validation
-validatory
-validification
-validity
-validly
-validness
-valine
-valise
-valiseful
-valiship
-Valkyr
-Valkyria
-Valkyrian
-Valkyrie
-vall
-vallancy
-vallar
-vallary
-vallate
-vallated
-vallation
-vallecula
-vallecular
-valleculate
-vallevarite
-valley
-valleyful
-valleyite
-valleylet
-valleylike
-valleyward
-valleywise
-vallicula
-vallicular
-vallidom
-vallis
-Valliscaulian
-Vallisneria
-Vallisneriaceae
-vallisneriaceous
-Vallombrosan
-Vallota
-vallum
-Valmy
-Valois
-valonia
-Valoniaceae
-valoniaceous
-valor
-valorization
-valorize
-valorous
-valorously
-valorousness
-Valsa
-Valsaceae
-Valsalvan
-valse
-valsoid
-valuable
-valuableness
-valuably
-valuate
-valuation
-valuational
-valuator
-value
-valued
-valueless
-valuelessness
-valuer
-valuta
-valva
-valval
-Valvata
-valvate
-Valvatidae
-valve
-valved
-valveless
-valvelet
-valvelike
-valveman
-valviferous
-valviform
-valvotomy
-valvula
-valvular
-valvulate
-valvule
-valvulitis
-valvulotome
-valvulotomy
-valyl
-valylene
-vambrace
-vambraced
-vamfont
-vammazsa
-vamoose
-vamp
-vamped
-vamper
-vamphorn
-vampire
-vampireproof
-vampiric
-vampirish
-vampirism
-vampirize
-vamplate
-vampproof
-Vampyrella
-Vampyrellidae
-Vampyrum
-Van
-van
-vanadate
-vanadiate
-vanadic
-vanadiferous
-vanadinite
-vanadium
-vanadosilicate
-vanadous
-vanadyl
-Vanaheim
-vanaprastha
-Vance
-vancourier
-Vancouveria
-Vanda
-Vandal
-Vandalic
-vandalish
-vandalism
-vandalistic
-vandalization
-vandalize
-vandalroot
-Vandemonian
-Vandemonianism
-Vandiemenian
-Vandyke
-vane
-vaned
-vaneless
-vanelike
-Vanellus
-Vanessa
-vanessian
-vanfoss
-vang
-vangee
-vangeli
-vanglo
-vanguard
-Vanguardist
-Vangueria
-vanilla
-vanillal
-vanillaldehyde
-vanillate
-vanille
-vanillery
-vanillic
-vanillin
-vanillinic
-vanillism
-vanilloes
-vanillon
-vanilloyl
-vanillyl
-Vanir
-vanish
-vanisher
-vanishing
-vanishingly
-vanishment
-Vanist
-vanitarianism
-vanitied
-vanity
-vanjarrah
-vanman
-vanmost
-Vannai
-vanner
-vannerman
-vannet
-Vannic
-vanquish
-vanquishable
-vanquisher
-vanquishment
-vansire
-vantage
-vantageless
-vantbrace
-vantbrass
-vanward
-vapid
-vapidism
-vapidity
-vapidly
-vapidness
-vapocauterization
-vapographic
-vapography
-vapor
-vaporability
-vaporable
-vaporarium
-vaporary
-vaporate
-vapored
-vaporer
-vaporescence
-vaporescent
-vaporiferous
-vaporiferousness
-vaporific
-vaporiform
-vaporimeter
-vaporing
-vaporingly
-vaporish
-vaporishness
-vaporium
-vaporizable
-vaporization
-vaporize
-vaporizer
-vaporless
-vaporlike
-vaporograph
-vaporographic
-vaporose
-vaporoseness
-vaporosity
-vaporous
-vaporously
-vaporousness
-vaportight
-vapory
-vapulary
-vapulate
-vapulation
-vapulatory
-vara
-varahan
-varan
-Varanger
-Varangi
-Varangian
-varanid
-Varanidae
-Varanoid
-Varanus
-Varda
-vardapet
-vardy
-vare
-varec
-vareheaded
-vareuse
-vargueno
-vari
-variability
-variable
-variableness
-variably
-Variag
-variance
-variancy
-variant
-variate
-variation
-variational
-variationist
-variatious
-variative
-variatively
-variator
-varical
-varicated
-varication
-varicella
-varicellar
-varicellate
-varicellation
-varicelliform
-varicelloid
-varicellous
-varices
-variciform
-varicoblepharon
-varicocele
-varicoid
-varicolored
-varicolorous
-varicose
-varicosed
-varicoseness
-varicosis
-varicosity
-varicotomy
-varicula
-varied
-variedly
-variegate
-variegated
-variegation
-variegator
-varier
-varietal
-varietally
-varietism
-varietist
-variety
-variform
-variformed
-variformity
-variformly
-varigradation
-variocoupler
-variola
-variolar
-Variolaria
-variolate
-variolation
-variole
-variolic
-varioliform
-variolite
-variolitic
-variolitization
-variolization
-varioloid
-variolous
-variolovaccine
-variolovaccinia
-variometer
-variorum
-variotinted
-various
-variously
-variousness
-variscite
-varisse
-varix
-varlet
-varletaille
-varletess
-varletry
-varletto
-varment
-varna
-varnashrama
-varnish
-varnished
-varnisher
-varnishing
-varnishlike
-varnishment
-varnishy
-varnpliktige
-varnsingite
-Varolian
-Varronia
-Varronian
-varsha
-varsity
-Varsovian
-varsoviana
-Varuna
-varus
-varve
-varved
-vary
-varyingly
-vas
-Vasa
-vasa
-vasal
-Vascons
-vascular
-vascularity
-vascularization
-vascularize
-vascularly
-vasculated
-vasculature
-vasculiferous
-vasculiform
-vasculitis
-vasculogenesis
-vasculolymphatic
-vasculomotor
-vasculose
-vasculum
-vase
-vasectomize
-vasectomy
-vaseful
-vaselet
-vaselike
-Vaseline
-vasemaker
-vasemaking
-vasewise
-vasework
-vashegyite
-vasicentric
-vasicine
-vasifactive
-vasiferous
-vasiform
-vasoconstricting
-vasoconstriction
-vasoconstrictive
-vasoconstrictor
-vasocorona
-vasodentinal
-vasodentine
-vasodilatation
-vasodilatin
-vasodilating
-vasodilation
-vasodilator
-vasoepididymostomy
-vasofactive
-vasoformative
-vasoganglion
-vasohypertonic
-vasohypotonic
-vasoinhibitor
-vasoinhibitory
-vasoligation
-vasoligature
-vasomotion
-vasomotor
-vasomotorial
-vasomotoric
-vasomotory
-vasoneurosis
-vasoparesis
-vasopressor
-vasopuncture
-vasoreflex
-vasorrhaphy
-vasosection
-vasospasm
-vasospastic
-vasostimulant
-vasostomy
-vasotomy
-vasotonic
-vasotribe
-vasotripsy
-vasotrophic
-vasovesiculectomy
-vasquine
-vassal
-vassalage
-vassaldom
-vassaless
-vassalic
-vassalism
-vassality
-vassalize
-vassalless
-vassalry
-vassalship
-Vassos
-vast
-vastate
-vastation
-vastidity
-vastily
-vastiness
-vastitude
-vastity
-vastly
-vastness
-vasty
-vasu
-Vasudeva
-Vasundhara
-vat
-Vateria
-vatful
-vatic
-vatically
-Vatican
-vaticanal
-vaticanic
-vaticanical
-Vaticanism
-Vaticanist
-Vaticanization
-Vaticanize
-vaticide
-vaticinal
-vaticinant
-vaticinate
-vaticination
-vaticinator
-vaticinatory
-vaticinatress
-vaticinatrix
-vatmaker
-vatmaking
-vatman
-Vatteluttu
-vatter
-vau
-Vaucheria
-Vaucheriaceae
-vaucheriaceous
-vaudeville
-vaudevillian
-vaudevillist
-Vaudism
-Vaudois
-vaudy
-Vaughn
-vaugnerite
-vault
-vaulted
-vaultedly
-vaulter
-vaulting
-vaultlike
-vaulty
-vaunt
-vauntage
-vaunted
-vaunter
-vauntery
-vauntful
-vauntiness
-vaunting
-vauntingly
-vauntmure
-vaunty
-vauquelinite
-Vauxhall
-Vauxhallian
-vauxite
-vavasor
-vavasory
-vaward
-Vayu
-Vazimba
-Veadar
-veal
-vealer
-vealiness
-veallike
-vealskin
-vealy
-vectigal
-vection
-vectis
-vectograph
-vectographic
-vector
-vectorial
-vectorially
-vecture
-Veda
-Vedaic
-Vedaism
-Vedalia
-vedana
-Vedanga
-Vedanta
-Vedantic
-Vedantism
-Vedantist
-Vedda
-Veddoid
-vedette
-Vedic
-vedika
-Vediovis
-Vedism
-Vedist
-vedro
-Veduis
-veduis
-vee
-veen
-veep
-veer
-veerable
-veeringly
-veery
-Vega
-vegasite
-vegeculture
-vegetability
-vegetable
-vegetablelike
-vegetablewise
-vegetablize
-vegetably
-vegetal
-vegetalcule
-vegetality
-vegetant
-vegetarian
-vegetarianism
-vegetate
-vegetation
-vegetational
-vegetationless
-vegetative
-vegetatively
-vegetativeness
-vegete
-vegeteness
-vegetism
-vegetive
-vegetivorous
-vegetoalkali
-vegetoalkaline
-vegetoalkaloid
-vegetoanimal
-vegetobituminous
-vegetocarbonaceous
-vegetomineral
-vehemence
-vehemency
-vehement
-vehemently
-vehicle
-vehicular
-vehicularly
-vehiculary
-vehiculate
-vehiculation
-vehiculatory
-Vehmic
-vei
-veigle
-veil
-veiled
-veiledly
-veiledness
-veiler
-veiling
-veilless
-veillike
-veilmaker
-veilmaking
-Veiltail
-veily
-vein
-veinage
-veinal
-veinbanding
-veined
-veiner
-veinery
-veininess
-veining
-veinless
-veinlet
-veinous
-veinstone
-veinstuff
-veinule
-veinulet
-veinwise
-veinwork
-veiny
-Vejoces
-vejoces
-Vejovis
-Vejoz
-vela
-velal
-velamen
-velamentous
-velamentum
-velar
-velardenite
-velaric
-velarium
-velarize
-velary
-velate
-velated
-velation
-velatura
-Velchanos
-veldcraft
-veldman
-veldschoen
-veldt
-veldtschoen
-Velella
-velellidous
-velic
-veliferous
-veliform
-veliger
-veligerous
-Velika
-velitation
-vell
-vellala
-velleda
-velleity
-vellicate
-vellication
-vellicative
-vellinch
-vellon
-vellosine
-Vellozia
-Velloziaceae
-velloziaceous
-vellum
-vellumy
-velo
-velociman
-velocimeter
-velocious
-velociously
-velocipedal
-velocipede
-velocipedean
-velocipedic
-velocitous
-velocity
-velodrome
-velometer
-velours
-veloutine
-velte
-velum
-velumen
-velure
-Velutina
-velutinous
-velveret
-velvet
-velvetbreast
-velveted
-velveteen
-velveteened
-velvetiness
-velveting
-velvetleaf
-velvetlike
-velvetry
-velvetseed
-velvetweed
-velvetwork
-velvety
-venada
-venal
-venality
-venalization
-venalize
-venally
-venalness
-Venantes
-venanzite
-venatic
-venatical
-venatically
-venation
-venational
-venator
-venatorial
-venatorious
-venatory
-vencola
-Vend
-vend
-vendace
-Vendean
-vendee
-vender
-vendetta
-vendettist
-vendibility
-vendible
-vendibleness
-vendibly
-vendicate
-Vendidad
-vending
-venditate
-venditation
-vendition
-venditor
-vendor
-vendue
-Vened
-Venedotian
-veneer
-veneerer
-veneering
-venefical
-veneficious
-veneficness
-veneficous
-venenate
-venenation
-venene
-veneniferous
-venenific
-venenosalivary
-venenous
-venenousness
-venepuncture
-venerability
-venerable
-venerableness
-venerably
-Veneracea
-veneracean
-veneraceous
-veneral
-Veneralia
-venerance
-venerant
-venerate
-veneration
-venerational
-venerative
-veneratively
-venerativeness
-venerator
-venereal
-venerealness
-venereologist
-venereology
-venerer
-Veneres
-venerial
-Veneridae
-veneriform
-venery
-venesect
-venesection
-venesector
-venesia
-Venetes
-Veneti
-Venetian
-Venetianed
-Venetic
-venezolano
-Venezuelan
-vengeable
-vengeance
-vengeant
-vengeful
-vengefully
-vengefulness
-vengeously
-venger
-venial
-veniality
-venially
-venialness
-Venice
-venie
-venin
-veniplex
-venipuncture
-venireman
-venison
-venisonivorous
-venisonlike
-venisuture
-Venite
-Venizelist
-Venkata
-vennel
-venner
-venoatrial
-venoauricular
-venom
-venomed
-venomer
-venomization
-venomize
-venomly
-venomness
-venomosalivary
-venomous
-venomously
-venomousness
-venomproof
-venomsome
-venomy
-venosal
-venosclerosis
-venose
-venosinal
-venosity
-venostasis
-venous
-venously
-venousness
-vent
-ventage
-ventail
-venter
-Ventersdorp
-venthole
-ventiduct
-ventifact
-ventil
-ventilable
-ventilagin
-ventilate
-ventilating
-ventilation
-ventilative
-ventilator
-ventilatory
-ventless
-ventometer
-ventose
-ventoseness
-ventosity
-ventpiece
-ventrad
-ventral
-ventrally
-ventralmost
-ventralward
-ventric
-ventricle
-ventricolumna
-ventricolumnar
-ventricornu
-ventricornual
-ventricose
-ventricoseness
-ventricosity
-ventricous
-ventricular
-ventricularis
-ventriculite
-Ventriculites
-ventriculitic
-Ventriculitidae
-ventriculogram
-ventriculography
-ventriculoscopy
-ventriculose
-ventriculous
-ventriculus
-ventricumbent
-ventriduct
-ventrifixation
-ventrilateral
-ventrilocution
-ventriloqual
-ventriloqually
-ventriloque
-ventriloquial
-ventriloquially
-ventriloquism
-ventriloquist
-ventriloquistic
-ventriloquize
-ventriloquous
-ventriloquously
-ventriloquy
-ventrimesal
-ventrimeson
-ventrine
-ventripotency
-ventripotent
-ventripotential
-ventripyramid
-ventroaxial
-ventroaxillary
-ventrocaudal
-ventrocystorrhaphy
-ventrodorsad
-ventrodorsal
-ventrodorsally
-ventrofixation
-ventrohysteropexy
-ventroinguinal
-ventrolateral
-ventrolaterally
-ventromedial
-ventromedian
-ventromesal
-ventromesial
-ventromyel
-ventroposterior
-ventroptosia
-ventroptosis
-ventroscopy
-ventrose
-ventrosity
-ventrosuspension
-ventrotomy
-venture
-venturer
-venturesome
-venturesomely
-venturesomeness
-Venturia
-venturine
-venturous
-venturously
-venturousness
-venue
-venula
-venular
-venule
-venulose
-Venus
-Venusian
-venust
-Venutian
-venville
-Veps
-Vepse
-Vepsish
-vera
-veracious
-veraciously
-veraciousness
-veracity
-veranda
-verandaed
-verascope
-veratral
-veratralbine
-veratraldehyde
-veratrate
-veratria
-veratric
-veratridine
-veratrine
-veratrinize
-veratrize
-veratroidine
-veratrole
-veratroyl
-Veratrum
-veratryl
-veratrylidene
-verb
-verbal
-verbalism
-verbalist
-verbality
-verbalization
-verbalize
-verbalizer
-verbally
-verbarian
-verbarium
-verbasco
-verbascose
-Verbascum
-verbate
-verbatim
-verbena
-Verbenaceae
-verbenaceous
-verbenalike
-verbenalin
-Verbenarius
-verbenate
-verbene
-verbenone
-verberate
-verberation
-verberative
-Verbesina
-verbiage
-verbicide
-verbiculture
-verbid
-verbification
-verbify
-verbigerate
-verbigeration
-verbigerative
-verbile
-verbless
-verbolatry
-verbomania
-verbomaniac
-verbomotor
-verbose
-verbosely
-verboseness
-verbosity
-verbous
-verby
-verchok
-verd
-verdancy
-verdant
-verdantly
-verdantness
-verdea
-verdelho
-verderer
-verderership
-verdet
-verdict
-verdigris
-verdigrisy
-verdin
-verditer
-verdoy
-verdugoship
-verdun
-verdure
-verdured
-verdureless
-verdurous
-verdurousness
-verecund
-verecundity
-verecundness
-verek
-veretilliform
-Veretillum
-veretillum
-verge
-vergeboard
-vergence
-vergency
-vergent
-vergentness
-verger
-vergeress
-vergerism
-vergerless
-vergership
-vergery
-vergi
-vergiform
-Vergilianism
-verglas
-vergobret
-veri
-veridic
-veridical
-veridicality
-veridically
-veridicalness
-veridicous
-veridity
-verifiability
-verifiable
-verifiableness
-verifiably
-verificate
-verification
-verificative
-verificatory
-verifier
-verify
-verily
-verine
-verisimilar
-verisimilarly
-verisimilitude
-verisimilitudinous
-verisimility
-verism
-verist
-veristic
-veritability
-veritable
-veritableness
-veritably
-verite
-veritism
-veritist
-veritistic
-verity
-verjuice
-vermeil
-vermeologist
-vermeology
-Vermes
-vermetid
-Vermetidae
-vermetidae
-Vermetus
-vermian
-vermicelli
-vermicidal
-vermicide
-vermicious
-vermicle
-vermicular
-Vermicularia
-vermicularly
-vermiculate
-vermiculated
-vermiculation
-vermicule
-vermiculite
-vermiculose
-vermiculosity
-vermiculous
-vermiform
-Vermiformia
-vermiformis
-vermiformity
-vermiformous
-vermifugal
-vermifuge
-vermifugous
-vermigerous
-vermigrade
-Vermilingues
-Vermilinguia
-vermilinguial
-vermilion
-vermilionette
-vermilionize
-vermin
-verminal
-verminate
-vermination
-verminer
-verminicidal
-verminicide
-verminiferous
-verminlike
-verminly
-verminosis
-verminous
-verminously
-verminousness
-verminproof
-verminy
-vermiparous
-vermiparousness
-vermis
-vermivorous
-vermivorousness
-vermix
-Vermont
-Vermonter
-Vermontese
-vermorel
-vermouth
-Vern
-vernacle
-vernacular
-vernacularism
-vernacularist
-vernacularity
-vernacularization
-vernacularize
-vernacularly
-vernacularness
-vernaculate
-vernal
-vernality
-vernalization
-vernalize
-vernally
-vernant
-vernation
-vernicose
-vernier
-vernile
-vernility
-vernin
-vernine
-vernition
-Vernon
-Vernonia
-vernoniaceous
-Vernonieae
-vernonin
-Verona
-Veronal
-veronalism
-Veronese
-Veronica
-Veronicella
-Veronicellidae
-Verpa
-verre
-verrel
-verriculate
-verriculated
-verricule
-verruca
-verrucano
-Verrucaria
-Verrucariaceae
-verrucariaceous
-verrucarioid
-verrucated
-verruciferous
-verruciform
-verrucose
-verrucoseness
-verrucosis
-verrucosity
-verrucous
-verruculose
-verruga
-versability
-versable
-versableness
-versal
-versant
-versate
-versatile
-versatilely
-versatileness
-versatility
-versation
-versative
-verse
-versecraft
-versed
-verseless
-verselet
-versemaker
-versemaking
-verseman
-versemanship
-versemonger
-versemongering
-versemongery
-verser
-versesmith
-verset
-versette
-verseward
-versewright
-versicle
-versicler
-versicolor
-versicolorate
-versicolored
-versicolorous
-versicular
-versicule
-versifiable
-versifiaster
-versification
-versificator
-versificatory
-versificatrix
-versifier
-versiform
-versify
-versiloquy
-versine
-version
-versional
-versioner
-versionist
-versionize
-versipel
-verso
-versor
-verst
-versta
-versual
-versus
-vert
-vertebra
-vertebrae
-vertebral
-vertebraless
-vertebrally
-Vertebraria
-vertebrarium
-vertebrarterial
-Vertebrata
-vertebrate
-vertebrated
-vertebration
-vertebre
-vertebrectomy
-vertebriform
-vertebroarterial
-vertebrobasilar
-vertebrochondral
-vertebrocostal
-vertebrodymus
-vertebrofemoral
-vertebroiliac
-vertebromammary
-vertebrosacral
-vertebrosternal
-vertex
-vertibility
-vertible
-vertibleness
-vertical
-verticalism
-verticality
-vertically
-verticalness
-vertices
-verticil
-verticillary
-verticillaster
-verticillastrate
-verticillate
-verticillated
-verticillately
-verticillation
-verticilliaceous
-verticilliose
-Verticillium
-verticillus
-verticity
-verticomental
-verticordious
-vertiginate
-vertigines
-vertiginous
-vertigo
-vertilinear
-vertimeter
-Vertumnus
-Verulamian
-veruled
-verumontanum
-vervain
-vervainlike
-verve
-vervecine
-vervel
-verveled
-vervelle
-vervenia
-vervet
-very
-Vesalian
-vesania
-vesanic
-vesbite
-vesicae
-vesical
-vesicant
-vesicate
-vesication
-vesicatory
-vesicle
-vesicoabdominal
-vesicocavernous
-vesicocele
-vesicocervical
-vesicoclysis
-vesicofixation
-vesicointestinal
-vesicoprostatic
-vesicopubic
-vesicorectal
-vesicosigmoid
-vesicospinal
-vesicotomy
-vesicovaginal
-vesicular
-Vesicularia
-vesicularly
-vesiculary
-vesiculase
-Vesiculata
-Vesiculatae
-vesiculate
-vesiculation
-vesicule
-vesiculectomy
-vesiculiferous
-vesiculiform
-vesiculigerous
-vesiculitis
-vesiculobronchial
-vesiculocavernous
-vesiculopustular
-vesiculose
-vesiculotomy
-vesiculotubular
-vesiculotympanic
-vesiculotympanitic
-vesiculous
-vesiculus
-vesicupapular
-veskit
-Vespa
-vespacide
-vespal
-vesper
-vesperal
-vesperian
-vespering
-vespers
-vespertide
-vespertilian
-Vespertilio
-vespertilio
-Vespertiliones
-vespertilionid
-Vespertilionidae
-Vespertilioninae
-vespertilionine
-vespertinal
-vespertine
-vespery
-vespiary
-vespid
-Vespidae
-vespiform
-Vespina
-vespine
-vespoid
-Vespoidea
-vessel
-vesseled
-vesselful
-vessignon
-vest
-Vesta
-vestal
-Vestalia
-vestalia
-vestalship
-Vestas
-vestee
-vester
-vestiarian
-vestiarium
-vestiary
-vestibula
-vestibular
-vestibulary
-vestibulate
-vestibule
-vestibuled
-vestibulospinal
-vestibulum
-vestige
-vestigial
-vestigially
-Vestigian
-vestigiary
-vestigium
-vestiment
-vestimental
-vestimentary
-vesting
-Vestini
-Vestinian
-vestiture
-vestlet
-vestment
-vestmental
-vestmented
-vestral
-vestralization
-vestrical
-vestrification
-vestrify
-vestry
-vestrydom
-vestryhood
-vestryish
-vestryism
-vestryize
-vestryman
-vestrymanly
-vestrymanship
-vestuary
-vestural
-vesture
-vesturer
-Vesuvian
-vesuvian
-vesuvianite
-vesuviate
-vesuvite
-vesuvius
-veszelyite
-vet
-veta
-vetanda
-vetch
-vetchling
-vetchy
-veteran
-veterancy
-veteraness
-veteranize
-veterinarian
-veterinarianism
-veterinary
-vetitive
-vetivene
-vetivenol
-vetiver
-Vetiveria
-vetiveria
-vetivert
-vetkousie
-veto
-vetoer
-vetoism
-vetoist
-vetoistic
-vetoistical
-vetust
-vetusty
-veuglaire
-veuve
-vex
-vexable
-vexation
-vexatious
-vexatiously
-vexatiousness
-vexatory
-vexed
-vexedly
-vexedness
-vexer
-vexful
-vexil
-vexillar
-vexillarious
-vexillary
-vexillate
-vexillation
-vexillum
-vexingly
-vexingness
-vext
-via
-viability
-viable
-viaduct
-viaggiatory
-viagram
-viagraph
-viajaca
-vial
-vialful
-vialmaker
-vialmaking
-vialogue
-viameter
-viand
-viander
-viatic
-viatica
-viatical
-viaticum
-viatometer
-viator
-viatorial
-viatorially
-vibetoite
-vibex
-vibgyor
-vibix
-vibracular
-vibracularium
-vibraculoid
-vibraculum
-vibrance
-vibrancy
-vibrant
-vibrantly
-vibraphone
-vibrate
-vibratile
-vibratility
-vibrating
-vibratingly
-vibration
-vibrational
-vibrationless
-vibratiuncle
-vibratiunculation
-vibrative
-vibrato
-vibrator
-vibratory
-Vibrio
-vibrioid
-vibrion
-vibrionic
-vibrissa
-vibrissae
-vibrissal
-vibrograph
-vibromassage
-vibrometer
-vibromotive
-vibronic
-vibrophone
-vibroscope
-vibroscopic
-vibrotherapeutics
-viburnic
-viburnin
-Viburnum
-Vic
-vicar
-vicarage
-vicarate
-vicaress
-vicarial
-vicarian
-vicarianism
-vicariate
-vicariateship
-vicarious
-vicariously
-vicariousness
-vicarly
-vicarship
-Vice
-vice
-vicecomes
-vicecomital
-vicegeral
-vicegerency
-vicegerent
-vicegerentship
-viceless
-vicelike
-vicenary
-vicennial
-viceregal
-viceregally
-vicereine
-viceroy
-viceroyal
-viceroyalty
-viceroydom
-viceroyship
-vicety
-viceversally
-Vichyite
-vichyssoise
-Vicia
-vicianin
-vicianose
-vicilin
-vicinage
-vicinal
-vicine
-vicinity
-viciosity
-vicious
-viciously
-viciousness
-vicissitous
-vicissitude
-vicissitudinary
-vicissitudinous
-vicissitudinousness
-Vick
-Vicki
-Vickie
-Vicky
-vicoite
-vicontiel
-victim
-victimhood
-victimizable
-victimization
-victimize
-victimizer
-victless
-Victor
-victor
-victordom
-victorfish
-Victoria
-Victorian
-Victorianism
-Victorianize
-Victorianly
-victoriate
-victoriatus
-victorine
-victorious
-victoriously
-victoriousness
-victorium
-victory
-victoryless
-victress
-victrix
-Victrola
-victrola
-victual
-victualage
-victualer
-victualing
-victuallership
-victualless
-victualry
-victuals
-vicuna
-Viddhal
-viddui
-videndum
-video
-videogenic
-vidette
-Vidhyanath
-Vidian
-vidonia
-vidry
-Vidua
-viduage
-vidual
-vidually
-viduate
-viduated
-viduation
-Viduinae
-viduine
-viduity
-viduous
-vidya
-vie
-vielle
-Vienna
-Viennese
-vier
-vierling
-viertel
-viertelein
-Vietminh
-Vietnamese
-view
-viewable
-viewably
-viewer
-viewiness
-viewless
-viewlessly
-viewly
-viewpoint
-viewsome
-viewster
-viewworthy
-viewy
-vifda
-viga
-vigentennial
-vigesimal
-vigesimation
-vigia
-vigil
-vigilance
-vigilancy
-vigilant
-vigilante
-vigilantism
-vigilantly
-vigilantness
-vigilate
-vigilation
-vigintiangular
-vigneron
-vignette
-vignetter
-vignettist
-vignin
-vigonia
-vigor
-vigorist
-vigorless
-vigorous
-vigorously
-vigorousness
-vihara
-vihuela
-vijao
-Vijay
-viking
-vikingism
-vikinglike
-vikingship
-vila
-vilayet
-vile
-vilehearted
-Vilela
-vilely
-vileness
-Vilhelm
-Vili
-vilicate
-vilification
-vilifier
-vilify
-vilifyingly
-vilipend
-vilipender
-vilipenditory
-vility
-vill
-villa
-villadom
-villaette
-village
-villageful
-villagehood
-villageless
-villagelet
-villagelike
-villageous
-villager
-villageress
-villagery
-villaget
-villageward
-villagey
-villagism
-villain
-villainage
-villaindom
-villainess
-villainist
-villainous
-villainously
-villainousness
-villainproof
-villainy
-villakin
-villaless
-villalike
-villanage
-villanella
-villanelle
-villanette
-villanous
-villanously
-Villanova
-Villanovan
-villar
-villate
-villatic
-ville
-villein
-villeinage
-villeiness
-villeinhold
-villenage
-villiaumite
-villiferous
-villiform
-villiplacental
-Villiplacentalia
-villitis
-villoid
-villose
-villosity
-villous
-villously
-villus
-vim
-vimana
-vimen
-vimful
-Viminal
-viminal
-vimineous
-vina
-vinaceous
-vinaconic
-vinage
-vinagron
-vinaigrette
-vinaigretted
-vinaigrier
-vinaigrous
-vinal
-Vinalia
-vinasse
-vinata
-Vince
-Vincent
-vincent
-Vincentian
-Vincenzo
-Vincetoxicum
-vincetoxin
-vincibility
-vincible
-vincibleness
-vincibly
-vincular
-vinculate
-vinculation
-vinculum
-Vindelici
-vindemial
-vindemiate
-vindemiation
-vindemiatory
-Vindemiatrix
-vindex
-vindhyan
-vindicability
-vindicable
-vindicableness
-vindicably
-vindicate
-vindication
-vindicative
-vindicatively
-vindicativeness
-vindicator
-vindicatorily
-vindicatorship
-vindicatory
-vindicatress
-vindictive
-vindictively
-vindictiveness
-vindictivolence
-vindresser
-vine
-vinea
-vineal
-vineatic
-vined
-vinegar
-vinegarer
-vinegarette
-vinegarish
-vinegarist
-vinegarroon
-vinegarweed
-vinegary
-vinegerone
-vinegrower
-vineity
-vineland
-vineless
-vinelet
-vinelike
-viner
-vinery
-vinestalk
-vinewise
-vineyard
-Vineyarder
-vineyarding
-vineyardist
-vingerhoed
-Vingolf
-vinhatico
-vinic
-vinicultural
-viniculture
-viniculturist
-vinifera
-viniferous
-vinification
-vinificator
-Vinland
-vinny
-vino
-vinoacetous
-Vinod
-vinolence
-vinolent
-vinologist
-vinology
-vinometer
-vinomethylic
-vinose
-vinosity
-vinosulphureous
-vinous
-vinously
-vinousness
-vinquish
-vint
-vinta
-vintage
-vintager
-vintaging
-vintem
-vintener
-vintlite
-vintner
-vintneress
-vintnership
-vintnery
-vintress
-vintry
-viny
-vinyl
-vinylbenzene
-vinylene
-vinylic
-vinylidene
-viol
-viola
-violability
-violable
-violableness
-violably
-Violaceae
-violacean
-violaceous
-violaceously
-violal
-Violales
-violanin
-violaquercitrin
-violate
-violater
-violation
-violational
-violative
-violator
-violatory
-violature
-violence
-violent
-violently
-violentness
-violer
-violescent
-violet
-violetish
-violetlike
-violette
-violetwise
-violety
-violin
-violina
-violine
-violinette
-violinist
-violinistic
-violinlike
-violinmaker
-violinmaking
-violist
-violmaker
-violmaking
-violon
-violoncellist
-violoncello
-violone
-violotta
-violuric
-viosterol
-Vip
-viper
-Vipera
-viperan
-viperess
-viperfish
-viperian
-viperid
-Viperidae
-viperiform
-Viperina
-Viperinae
-viperine
-viperish
-viperishly
-viperlike
-viperling
-viperoid
-Viperoidea
-viperous
-viperously
-viperousness
-vipery
-vipolitic
-vipresident
-viqueen
-Vira
-viragin
-viraginian
-viraginity
-viraginous
-virago
-viragoish
-viragolike
-viragoship
-viral
-Virales
-Virbius
-vire
-virelay
-viremia
-viremic
-virent
-vireo
-vireonine
-virescence
-virescent
-virga
-virgal
-virgate
-virgated
-virgater
-virgation
-virgilia
-Virgilism
-virgin
-virginal
-Virginale
-virginalist
-virginality
-virginally
-virgineous
-virginhead
-Virginia
-Virginian
-Virginid
-virginitis
-virginity
-virginityship
-virginium
-virginlike
-virginly
-virginship
-Virgo
-virgula
-virgular
-Virgularia
-virgularian
-Virgulariidae
-virgulate
-virgule
-virgultum
-virial
-viricide
-virid
-viridene
-viridescence
-viridescent
-viridian
-viridigenous
-viridine
-viridite
-viridity
-virific
-virify
-virile
-virilely
-virileness
-virilescence
-virilescent
-virilify
-viriliously
-virilism
-virilist
-virility
-viripotent
-viritrate
-virl
-virole
-viroled
-virological
-virologist
-virology
-viron
-virose
-virosis
-virous
-virtu
-virtual
-virtualism
-virtualist
-virtuality
-virtualize
-virtually
-virtue
-virtued
-virtuefy
-virtuelessness
-virtueproof
-virtuless
-virtuosa
-virtuose
-virtuosi
-virtuosic
-virtuosity
-virtuoso
-virtuosoship
-virtuous
-virtuouslike
-virtuously
-virtuousness
-virucidal
-virucide
-viruela
-virulence
-virulency
-virulent
-virulented
-virulently
-virulentness
-viruliferous
-virus
-viruscidal
-viruscide
-virusemic
-vis
-visa
-visage
-visaged
-visagraph
-visarga
-Visaya
-Visayan
-viscacha
-viscera
-visceral
-visceralgia
-viscerally
-viscerate
-visceration
-visceripericardial
-visceroinhibitory
-visceromotor
-visceroparietal
-visceroperitioneal
-visceropleural
-visceroptosis
-visceroptotic
-viscerosensory
-visceroskeletal
-viscerosomatic
-viscerotomy
-viscerotonia
-viscerotonic
-viscerotrophic
-viscerotropic
-viscerous
-viscid
-viscidity
-viscidize
-viscidly
-viscidness
-viscidulous
-viscin
-viscoidal
-viscolize
-viscometer
-viscometrical
-viscometrically
-viscometry
-viscontal
-viscoscope
-viscose
-viscosimeter
-viscosimetry
-viscosity
-viscount
-viscountcy
-viscountess
-viscountship
-viscounty
-viscous
-viscously
-viscousness
-viscus
-vise
-viseman
-Vishal
-Vishnavite
-Vishnu
-Vishnuism
-Vishnuite
-Vishnuvite
-visibility
-visibilize
-visible
-visibleness
-visibly
-visie
-Visigoth
-Visigothic
-visile
-vision
-visional
-visionally
-visionarily
-visionariness
-visionary
-visioned
-visioner
-visionic
-visionist
-visionize
-visionless
-visionlike
-visionmonger
-visionproof
-visit
-visita
-visitable
-Visitandine
-visitant
-visitation
-visitational
-visitative
-visitator
-visitatorial
-visite
-visitee
-visiter
-visiting
-visitment
-visitor
-visitoress
-visitorial
-visitorship
-visitress
-visitrix
-visive
-visne
-vison
-visor
-visorless
-visorlike
-vista
-vistaed
-vistal
-vistaless
-vistamente
-Vistlik
-visto
-Vistulian
-visual
-visualist
-visuality
-visualization
-visualize
-visualizer
-visually
-visuoauditory
-visuokinesthetic
-visuometer
-visuopsychic
-visuosensory
-vita
-Vitaceae
-Vitaglass
-vital
-vitalic
-vitalism
-vitalist
-vitalistic
-vitalistically
-vitality
-vitalization
-vitalize
-vitalizer
-vitalizing
-vitalizingly
-Vitallium
-vitally
-vitalness
-vitals
-vitamer
-vitameric
-vitamin
-vitaminic
-vitaminize
-vitaminology
-vitapath
-vitapathy
-vitaphone
-vitascope
-vitascopic
-vitasti
-vitativeness
-vitellarian
-vitellarium
-vitellary
-vitellicle
-vitelliferous
-vitelligenous
-vitelligerous
-vitellin
-vitelline
-vitellogene
-vitellogenous
-vitellose
-vitellus
-viterbite
-Viti
-vitiable
-vitiate
-vitiated
-vitiation
-vitiator
-viticetum
-viticulose
-viticultural
-viticulture
-viticulturer
-viticulturist
-vitiferous
-vitiliginous
-vitiligo
-vitiligoidea
-vitiosity
-Vitis
-vitium
-vitochemic
-vitochemical
-vitrage
-vitrail
-vitrailed
-vitrailist
-vitrain
-vitraux
-vitreal
-vitrean
-vitrella
-vitremyte
-vitreodentinal
-vitreodentine
-vitreoelectric
-vitreosity
-vitreous
-vitreouslike
-vitreously
-vitreousness
-vitrescence
-vitrescency
-vitrescent
-vitrescibility
-vitrescible
-vitreum
-vitric
-vitrics
-vitrifaction
-vitrifacture
-vitrifiability
-vitrifiable
-vitrification
-vitriform
-vitrify
-Vitrina
-vitrine
-vitrinoid
-vitriol
-vitriolate
-vitriolation
-vitriolic
-vitrioline
-vitriolizable
-vitriolization
-vitriolize
-vitriolizer
-vitrite
-vitrobasalt
-vitrophyre
-vitrophyric
-vitrotype
-vitrous
-Vitruvian
-Vitruvianism
-vitta
-vittate
-vitular
-vituline
-vituperable
-vituperate
-vituperation
-vituperative
-vituperatively
-vituperator
-vituperatory
-vituperious
-viuva
-viva
-vivacious
-vivaciously
-vivaciousness
-vivacity
-vivandiere
-vivarium
-vivary
-vivax
-vive
-Vivek
-vively
-vivency
-viver
-Viverridae
-viverriform
-Viverrinae
-viverrine
-vivers
-vives
-vivianite
-vivicremation
-vivid
-vividialysis
-vividiffusion
-vividissection
-vividity
-vividly
-vividness
-vivific
-vivificate
-vivification
-vivificative
-vivificator
-vivifier
-vivify
-viviparism
-viviparity
-viviparous
-viviparously
-viviparousness
-vivipary
-viviperfuse
-vivisect
-vivisection
-vivisectional
-vivisectionally
-vivisectionist
-vivisective
-vivisector
-vivisectorium
-vivisepulture
-vixen
-vixenish
-vixenishly
-vixenishness
-vixenlike
-vixenly
-vizard
-vizarded
-vizardless
-vizardlike
-vizardmonger
-vizier
-vizierate
-viziercraft
-vizierial
-viziership
-vizircraft
-Vlach
-Vladimir
-Vladislav
-vlei
-voar
-vocability
-vocable
-vocably
-vocabular
-vocabularian
-vocabularied
-vocabulary
-vocabulation
-vocabulist
-vocal
-vocalic
-vocalion
-vocalise
-vocalism
-vocalist
-vocalistic
-vocality
-vocalization
-vocalize
-vocalizer
-vocaller
-vocally
-vocalness
-vocate
-vocation
-vocational
-vocationalism
-vocationalization
-vocationalize
-vocationally
-vocative
-vocatively
-Vochysiaceae
-vochysiaceous
-vocicultural
-vociferance
-vociferant
-vociferate
-vociferation
-vociferative
-vociferator
-vociferize
-vociferosity
-vociferous
-vociferously
-vociferousness
-vocification
-vocimotor
-vocular
-vocule
-Vod
-vodka
-voe
-voet
-voeten
-Voetian
-vog
-vogesite
-voglite
-vogue
-voguey
-voguish
-Vogul
-voice
-voiced
-voiceful
-voicefulness
-voiceless
-voicelessly
-voicelessness
-voicelet
-voicelike
-voicer
-voicing
-void
-voidable
-voidableness
-voidance
-voided
-voidee
-voider
-voiding
-voidless
-voidly
-voidness
-voile
-voiturette
-voivode
-voivodeship
-vol
-volable
-volage
-Volans
-volant
-volantly
-Volapuk
-Volapuker
-Volapukism
-Volapukist
-volar
-volata
-volatic
-volatile
-volatilely
-volatileness
-volatility
-volatilizable
-volatilization
-volatilize
-volatilizer
-volation
-volational
-volborthite
-Volcae
-volcan
-Volcanalia
-volcanian
-volcanic
-volcanically
-volcanicity
-volcanism
-volcanist
-volcanite
-volcanity
-volcanization
-volcanize
-volcano
-volcanoism
-volcanological
-volcanologist
-volcanologize
-volcanology
-Volcanus
-vole
-volemitol
-volency
-volent
-volently
-volery
-volet
-volhynite
-volipresence
-volipresent
-volitant
-volitate
-volitation
-volitational
-volitiency
-volitient
-volition
-volitional
-volitionalist
-volitionality
-volitionally
-volitionary
-volitionate
-volitionless
-volitive
-volitorial
-Volkerwanderung
-volley
-volleyball
-volleyer
-volleying
-volleyingly
-volost
-volplane
-volplanist
-Volsci
-Volscian
-volsella
-volsellum
-Volstead
-Volsteadism
-volt
-Volta
-voltaelectric
-voltaelectricity
-voltaelectrometer
-voltaelectrometric
-voltage
-voltagraphy
-voltaic
-Voltairian
-Voltairianize
-Voltairish
-Voltairism
-voltaism
-voltaite
-voltameter
-voltametric
-voltammeter
-voltaplast
-voltatype
-voltinism
-voltivity
-voltize
-voltmeter
-voltzite
-volubilate
-volubility
-voluble
-volubleness
-volubly
-volucrine
-volume
-volumed
-volumenometer
-volumenometry
-volumescope
-volumeter
-volumetric
-volumetrical
-volumetrically
-volumetry
-volumette
-voluminal
-voluminosity
-voluminous
-voluminously
-voluminousness
-volumist
-volumometer
-volumometrical
-volumometry
-voluntariate
-voluntarily
-voluntariness
-voluntarism
-voluntarist
-voluntaristic
-voluntarity
-voluntary
-voluntaryism
-voluntaryist
-voluntative
-volunteer
-volunteerism
-volunteerly
-volunteership
-volupt
-voluptary
-voluptas
-voluptuarian
-voluptuary
-voluptuate
-voluptuosity
-voluptuous
-voluptuously
-voluptuousness
-volupty
-Voluspa
-voluta
-volutate
-volutation
-volute
-voluted
-Volutidae
-volutiform
-volutin
-volution
-volutoid
-volva
-volvate
-volvelle
-volvent
-Volvocaceae
-volvocaceous
-volvulus
-vomer
-vomerine
-vomerobasilar
-vomeronasal
-vomeropalatine
-vomica
-vomicine
-vomit
-vomitable
-vomiter
-vomiting
-vomitingly
-vomition
-vomitive
-vomitiveness
-vomito
-vomitory
-vomiture
-vomiturition
-vomitus
-vomitwort
-vondsira
-vonsenite
-voodoo
-voodooism
-voodooist
-voodooistic
-voracious
-voraciously
-voraciousness
-voracity
-voraginous
-vorago
-vorant
-vorhand
-vorlooper
-vorondreo
-vorpal
-vortex
-vortical
-vortically
-vorticel
-Vorticella
-vorticellid
-Vorticellidae
-vortices
-vorticial
-vorticiform
-vorticism
-vorticist
-vorticity
-vorticose
-vorticosely
-vorticular
-vorticularly
-vortiginous
-Vortumnus
-Vosgian
-vota
-votable
-votal
-votally
-votaress
-votarist
-votary
-votation
-Vote
-vote
-voteen
-voteless
-voter
-voting
-Votish
-votive
-votively
-votiveness
-votometer
-votress
-Votyak
-vouch
-vouchable
-vouchee
-voucher
-voucheress
-vouchment
-vouchsafe
-vouchsafement
-vouge
-Vougeot
-Vouli
-voussoir
-vow
-vowed
-vowel
-vowelish
-vowelism
-vowelist
-vowelization
-vowelize
-vowelless
-vowellessness
-vowellike
-vowely
-vower
-vowess
-vowless
-vowmaker
-vowmaking
-voyage
-voyageable
-voyager
-voyance
-voyeur
-voyeurism
-vraic
-vraicker
-vraicking
-vrbaite
-vriddhi
-vrother
-Vu
-vug
-vuggy
-Vulcan
-Vulcanalia
-Vulcanalial
-Vulcanalian
-Vulcanian
-Vulcanic
-vulcanicity
-vulcanism
-vulcanist
-vulcanite
-vulcanizable
-vulcanizate
-vulcanization
-vulcanize
-vulcanizer
-vulcanological
-vulcanologist
-vulcanology
-vulgar
-vulgare
-vulgarian
-vulgarish
-vulgarism
-vulgarist
-vulgarity
-vulgarization
-vulgarize
-vulgarizer
-vulgarlike
-vulgarly
-vulgarness
-vulgarwise
-Vulgate
-vulgate
-vulgus
-vuln
-vulnerability
-vulnerable
-vulnerableness
-vulnerably
-vulnerary
-vulnerate
-vulneration
-vulnerative
-vulnerose
-vulnific
-vulnose
-Vulpecula
-vulpecular
-Vulpeculid
-Vulpes
-vulpic
-vulpicidal
-vulpicide
-vulpicidism
-Vulpinae
-vulpine
-vulpinism
-vulpinite
-vulsella
-vulsellum
-vulsinite
-Vultur
-vulture
-vulturelike
-vulturewise
-Vulturidae
-Vulturinae
-vulturine
-vulturish
-vulturism
-vulturn
-vulturous
-vulva
-vulval
-vulvar
-vulvate
-vulviform
-vulvitis
-vulvocrural
-vulvouterine
-vulvovaginal
-vulvovaginitis
-vum
-vying
-vyingly
-W
-w
-Wa
-wa
-Waac
-waag
-waapa
-waar
-Waasi
-wab
-wabber
-wabble
-wabbly
-wabby
-wabe
-Wabena
-wabeno
-Wabi
-wabster
-Wabuma
-Wabunga
-Wac
-wacago
-wace
-Wachaga
-Wachenheimer
-wachna
-Wachuset
-wack
-wacke
-wacken
-wacker
-wackiness
-wacky
-Waco
-wad
-waddent
-wadder
-wadding
-waddler
-waddlesome
-waddling
-waddlingly
-waddly
-waddy
-waddywood
-Wade
-wade
-wadeable
-wader
-wadi
-wading
-wadingly
-wadlike
-wadmaker
-wadmaking
-wadmal
-wadmeal
-wadna
-wadset
-wadsetter
-wae
-waeg
-waer
-waesome
-waesuck
-Waf
-Wafd
-Wafdist
-wafer
-waferer
-waferish
-wafermaker
-wafermaking
-waferwoman
-waferwork
-wafery
-waff
-waffle
-wafflike
-waffly
-waft
-waftage
-wafter
-wafture
-wafty
-wag
-Waganda
-waganging
-wagaun
-wagbeard
-wage
-waged
-wagedom
-wageless
-wagelessness
-wagenboom
-Wagener
-wager
-wagerer
-wagering
-wages
-wagesman
-wagework
-wageworker
-wageworking
-waggable
-waggably
-waggel
-wagger
-waggery
-waggie
-waggish
-waggishly
-waggishness
-waggle
-waggling
-wagglingly
-waggly
-Waggumbura
-waggy
-waglike
-wagling
-Wagneresque
-Wagnerian
-Wagneriana
-Wagnerianism
-Wagnerism
-Wagnerist
-Wagnerite
-wagnerite
-Wagnerize
-Wagogo
-Wagoma
-wagon
-wagonable
-wagonage
-wagoner
-wagoness
-wagonette
-wagonful
-wagonload
-wagonmaker
-wagonmaking
-wagonman
-wagonry
-wagonsmith
-wagonway
-wagonwayman
-wagonwork
-wagonwright
-wagsome
-wagtail
-Waguha
-wagwag
-wagwants
-Wagweno
-wagwit
-wah
-Wahabi
-Wahabiism
-Wahabit
-Wahabitism
-wahahe
-Wahehe
-Wahima
-wahine
-Wahlenbergia
-wahoo
-wahpekute
-Wahpeton
-waiata
-Waibling
-Waicuri
-Waicurian
-waif
-Waiguli
-Waiilatpuan
-waik
-waikly
-waikness
-wail
-Wailaki
-wailer
-wailful
-wailfully
-wailingly
-wailsome
-waily
-wain
-wainage
-wainbote
-wainer
-wainful
-wainman
-wainrope
-wainscot
-wainscoting
-wainwright
-waipiro
-wairch
-waird
-wairepo
-wairsh
-waise
-waist
-waistband
-waistcloth
-waistcoat
-waistcoated
-waistcoateer
-waistcoathole
-waistcoating
-waistcoatless
-waisted
-waister
-waisting
-waistless
-waistline
-wait
-waiter
-waiterage
-waiterdom
-waiterhood
-waitering
-waiterlike
-waitership
-waiting
-waitingly
-waitress
-waivatua
-waive
-waiver
-waivery
-waivod
-Waiwai
-waiwode
-wajang
-waka
-Wakamba
-wakan
-Wakashan
-wake
-wakeel
-wakeful
-wakefully
-wakefulness
-wakeless
-waken
-wakener
-wakening
-waker
-wakes
-waketime
-wakf
-Wakhi
-wakif
-wakiki
-waking
-wakingly
-wakiup
-wakken
-wakon
-wakonda
-Wakore
-Wakwafi
-waky
-Walach
-Walachian
-walahee
-Walapai
-Walchia
-Waldenses
-Waldensian
-waldflute
-waldgrave
-waldgravine
-Waldheimia
-waldhorn
-waldmeister
-Waldsteinia
-wale
-waled
-walepiece
-Waler
-waler
-walewort
-wali
-waling
-walk
-walkable
-walkaway
-walker
-walking
-walkist
-walkmill
-walkmiller
-walkout
-walkover
-walkrife
-walkside
-walksman
-walkway
-walkyrie
-wall
-wallaba
-wallaby
-Wallach
-wallah
-wallaroo
-Wallawalla
-wallbird
-wallboard
-walled
-waller
-Wallerian
-wallet
-walletful
-walleye
-walleyed
-wallflower
-wallful
-wallhick
-walling
-wallise
-wallless
-wallman
-Wallon
-Wallonian
-Walloon
-walloon
-wallop
-walloper
-walloping
-wallow
-wallower
-wallowish
-wallowishly
-wallowishness
-wallpaper
-wallpapering
-wallpiece
-Wallsend
-wallwise
-wallwork
-wallwort
-wally
-walnut
-Walpapi
-Walpolean
-Walpurgis
-walpurgite
-walrus
-walsh
-Walt
-walt
-Walter
-walter
-walth
-Waltonian
-waltz
-waltzer
-waltzlike
-walycoat
-wamara
-wambais
-wamble
-wambliness
-wambling
-wamblingly
-wambly
-Wambuba
-Wambugu
-Wambutti
-wame
-wamefou
-wamel
-wammikin
-wamp
-Wampanoag
-wampee
-wample
-wampum
-wampumpeag
-wampus
-wamus
-wan
-Wanapum
-wanchancy
-wand
-wander
-wanderable
-wanderer
-wandering
-wanderingly
-wanderingness
-Wanderjahr
-wanderlust
-wanderluster
-wanderlustful
-wanderoo
-wandery
-wanderyear
-wandflower
-wandle
-wandlike
-wandoo
-Wandorobo
-wandsman
-wandy
-wane
-Waneatta
-waned
-waneless
-wang
-wanga
-wangala
-wangan
-Wangara
-wangateur
-wanghee
-wangle
-wangler
-Wangoni
-wangrace
-wangtooth
-wanhope
-wanhorn
-wanigan
-waning
-wankapin
-wankle
-wankliness
-wankly
-wanle
-wanly
-wanner
-wanness
-wannish
-wanny
-wanrufe
-wansonsy
-want
-wantage
-wanter
-wantful
-wanthill
-wanthrift
-wanting
-wantingly
-wantingness
-wantless
-wantlessness
-wanton
-wantoner
-wantonlike
-wantonly
-wantonness
-wantwit
-wanty
-wanwordy
-wanworth
-wany
-Wanyakyusa
-Wanyamwezi
-Wanyasa
-Wanyoro
-wap
-wapacut
-Wapato
-wapatoo
-wapentake
-Wapisiana
-wapiti
-Wapogoro
-Wapokomo
-wapp
-Wappato
-wappenschaw
-wappenschawing
-wapper
-wapping
-Wappinger
-Wappo
-war
-warabi
-waratah
-warble
-warbled
-warblelike
-warbler
-warblerlike
-warblet
-warbling
-warblingly
-warbly
-warch
-warcraft
-ward
-wardable
-wardage
-wardapet
-warday
-warded
-Warden
-warden
-wardency
-wardenry
-wardenship
-warder
-warderer
-wardership
-wardholding
-warding
-wardite
-wardless
-wardlike
-wardmaid
-wardman
-wardmote
-wardress
-wardrobe
-wardrober
-wardroom
-wardship
-wardsmaid
-wardsman
-wardswoman
-wardwite
-wardwoman
-ware
-Waregga
-warehou
-warehouse
-warehouseage
-warehoused
-warehouseful
-warehouseman
-warehouser
-wareless
-waremaker
-waremaking
-wareman
-wareroom
-warf
-warfare
-warfarer
-warfaring
-warful
-warily
-wariness
-Waring
-waringin
-warish
-warison
-wark
-warkamoowee
-warl
-warless
-warlessly
-warlike
-warlikely
-warlikeness
-warlock
-warluck
-warly
-warm
-warmable
-warman
-warmed
-warmedly
-warmer
-warmful
-warmhearted
-warmheartedly
-warmheartedness
-warmhouse
-warming
-warmish
-warmly
-warmness
-warmonger
-warmongering
-warmouth
-warmth
-warmthless
-warmus
-warn
-warnel
-warner
-warning
-warningly
-warningproof
-warnish
-warnoth
-warnt
-Warori
-warp
-warpable
-warpage
-warped
-warper
-warping
-warplane
-warple
-warplike
-warproof
-warpwise
-warragal
-warrambool
-warran
-warrand
-warrandice
-warrant
-warrantable
-warrantableness
-warrantably
-warranted
-warrantee
-warranter
-warrantise
-warrantless
-warrantor
-warranty
-warratau
-Warrau
-warree
-Warren
-warren
-warrener
-warrenlike
-warrer
-Warri
-warrin
-warrior
-warrioress
-warriorhood
-warriorism
-warriorlike
-warriorship
-warriorwise
-warrok
-Warsaw
-warsaw
-warse
-warsel
-warship
-warsle
-warsler
-warst
-wart
-warted
-wartern
-wartflower
-warth
-wartime
-wartless
-wartlet
-wartlike
-wartproof
-wartweed
-wartwort
-warty
-wartyback
-Warua
-Warundi
-warve
-warwards
-Warwick
-warwickite
-warwolf
-warworn
-wary
-was
-wasabi
-Wasagara
-Wasandawi
-Wasango
-Wasat
-Wasatch
-Wasco
-wase
-Wasegua
-wasel
-wash
-washability
-washable
-washableness
-Washaki
-washaway
-washbasin
-washbasket
-washboard
-washbowl
-washbrew
-washcloth
-washday
-washdish
-washdown
-washed
-washen
-washer
-washerless
-washerman
-washerwife
-washerwoman
-washery
-washeryman
-washhand
-washhouse
-washin
-washiness
-washing
-Washington
-Washingtonia
-Washingtonian
-Washingtoniana
-Washita
-washland
-washmaid
-washman
-Washo
-Washoan
-washoff
-washout
-washpot
-washproof
-washrag
-washroad
-washroom
-washshed
-washstand
-washtail
-washtray
-washtrough
-washtub
-washway
-washwoman
-washwork
-washy
-Wasir
-wasnt
-Wasoga
-Wasp
-wasp
-waspen
-wasphood
-waspily
-waspish
-waspishly
-waspishness
-wasplike
-waspling
-waspnesting
-waspy
-wassail
-wassailer
-wassailous
-wassailry
-wassie
-wast
-wastable
-wastage
-waste
-wastebasket
-wasteboard
-wasted
-wasteful
-wastefully
-wastefulness
-wastel
-wasteland
-wastelbread
-wasteless
-wasteman
-wastement
-wasteness
-wastepaper
-wasteproof
-waster
-wasterful
-wasterfully
-wasterfulness
-wastethrift
-wasteword
-wasteyard
-wasting
-wastingly
-wastingness
-wastland
-wastrel
-wastrife
-wasty
-Wasukuma
-Waswahili
-Wat
-wat
-Watala
-watap
-watch
-watchable
-watchboat
-watchcase
-watchcry
-watchdog
-watched
-watcher
-watchfree
-watchful
-watchfully
-watchfulness
-watchglassful
-watchhouse
-watching
-watchingly
-watchkeeper
-watchless
-watchlessness
-watchmaker
-watchmaking
-watchman
-watchmanly
-watchmanship
-watchmate
-watchment
-watchout
-watchtower
-watchwise
-watchwoman
-watchword
-watchwork
-water
-waterage
-waterbailage
-waterbelly
-Waterberg
-waterboard
-waterbok
-waterbosh
-waterbrain
-waterchat
-watercup
-waterdoe
-waterdrop
-watered
-waterer
-waterfall
-waterfinder
-waterflood
-waterfowl
-waterfront
-waterhead
-waterhorse
-waterie
-waterily
-wateriness
-watering
-wateringly
-wateringman
-waterish
-waterishly
-waterishness
-Waterlander
-Waterlandian
-waterleave
-waterless
-waterlessly
-waterlessness
-waterlike
-waterline
-waterlog
-waterlogged
-waterloggedness
-waterlogger
-waterlogging
-Waterloo
-waterman
-watermanship
-watermark
-watermaster
-watermelon
-watermonger
-waterphone
-waterpot
-waterproof
-waterproofer
-waterproofing
-waterproofness
-waterquake
-waterscape
-watershed
-watershoot
-waterside
-watersider
-waterskin
-watersmeet
-waterspout
-waterstead
-watertight
-watertightal
-watertightness
-waterward
-waterwards
-waterway
-waterweed
-waterwise
-waterwoman
-waterwood
-waterwork
-waterworker
-waterworm
-waterworn
-waterwort
-watery
-wath
-wathstead
-Watsonia
-watt
-wattage
-wattape
-wattle
-wattlebird
-wattled
-wattless
-wattlework
-wattling
-wattman
-wattmeter
-Watusi
-wauble
-wauch
-wauchle
-waucht
-wauf
-waugh
-waughy
-wauken
-waukit
-waukrife
-waul
-waumle
-wauner
-wauns
-waup
-waur
-Waura
-wauregan
-wauve
-wavable
-wavably
-Wave
-wave
-waved
-waveless
-wavelessly
-wavelessness
-wavelet
-wavelike
-wavellite
-wavemark
-wavement
-wavemeter
-waveproof
-waver
-waverable
-waverer
-wavering
-waveringly
-waveringness
-waverous
-wavery
-waveson
-waveward
-wavewise
-wavey
-wavicle
-wavily
-waviness
-waving
-wavingly
-Wavira
-wavy
-waw
-wawa
-wawah
-wawaskeesh
-wax
-waxberry
-waxbill
-waxbird
-waxbush
-waxchandler
-waxchandlery
-waxen
-waxer
-waxflower
-Waxhaw
-waxhearted
-waxily
-waxiness
-waxing
-waxingly
-waxlike
-waxmaker
-waxmaking
-waxman
-waxweed
-waxwing
-waxwork
-waxworker
-waxworking
-waxy
-way
-wayaka
-wayang
-Wayao
-wayback
-wayberry
-waybill
-waybird
-waybook
-waybread
-waybung
-wayfare
-wayfarer
-wayfaring
-wayfaringly
-wayfellow
-waygang
-waygate
-waygoing
-waygone
-waygoose
-wayhouse
-waying
-waylaid
-waylaidlessness
-waylay
-waylayer
-wayleave
-wayless
-waymaker
-wayman
-waymark
-waymate
-Wayne
-waypost
-ways
-wayside
-waysider
-waysliding
-waythorn
-wayward
-waywarden
-waywardly
-waywardness
-waywiser
-waywode
-waywodeship
-wayworn
-waywort
-wayzgoose
-Wazir
-we
-Wea
-weak
-weakbrained
-weaken
-weakener
-weakening
-weakfish
-weakhanded
-weakhearted
-weakheartedly
-weakheartedness
-weakish
-weakishly
-weakishness
-weakliness
-weakling
-weakly
-weakmouthed
-weakness
-weaky
-weal
-weald
-Wealden
-wealdsman
-wealth
-wealthily
-wealthiness
-wealthless
-wealthmaker
-wealthmaking
-wealthmonger
-Wealthy
-wealthy
-weam
-wean
-weanable
-weanedness
-weanel
-weaner
-weanling
-Weanoc
-weanyer
-Weapemeoc
-weapon
-weaponed
-weaponeer
-weaponless
-weaponmaker
-weaponmaking
-weaponproof
-weaponry
-weaponshaw
-weaponshow
-weaponshowing
-weaponsmith
-weaponsmithy
-wear
-wearability
-wearable
-wearer
-weariable
-weariableness
-wearied
-weariedly
-weariedness
-wearier
-weariful
-wearifully
-wearifulness
-weariless
-wearilessly
-wearily
-weariness
-wearing
-wearingly
-wearish
-wearishly
-wearishness
-wearisome
-wearisomely
-wearisomeness
-wearproof
-weary
-wearying
-wearyingly
-weasand
-weasel
-weaselfish
-weasellike
-weaselly
-weaselship
-weaselskin
-weaselsnout
-weaselwise
-weaser
-weason
-weather
-weatherboard
-weatherboarding
-weatherbreak
-weathercock
-weathercockish
-weathercockism
-weathercocky
-weathered
-weatherer
-weatherfish
-weatherglass
-weathergleam
-weatherhead
-weatherheaded
-weathering
-weatherliness
-weatherly
-weathermaker
-weathermaking
-weatherman
-weathermost
-weatherology
-weatherproof
-weatherproofed
-weatherproofing
-weatherproofness
-weatherward
-weatherworn
-weathery
-weavable
-weave
-weaveable
-weaved
-weavement
-weaver
-weaverbird
-weaveress
-weaving
-weazen
-weazened
-weazeny
-web
-webbed
-webber
-webbing
-webby
-weber
-Weberian
-webeye
-webfoot
-webfooter
-webless
-weblike
-webmaker
-webmaking
-webster
-Websterian
-websterite
-webwork
-webworm
-wecht
-wed
-wedana
-wedbed
-wedbedrip
-wedded
-weddedly
-weddedness
-wedder
-wedding
-weddinger
-wede
-wedge
-wedgeable
-wedgebill
-wedged
-wedgelike
-wedger
-wedgewise
-Wedgie
-wedging
-Wedgwood
-wedgy
-wedlock
-Wednesday
-wedset
-wee
-weeble
-weed
-weeda
-weedable
-weedage
-weeded
-weeder
-weedery
-weedful
-weedhook
-weediness
-weedingtime
-weedish
-weedless
-weedlike
-weedling
-weedow
-weedproof
-weedy
-week
-weekday
-weekend
-weekender
-weekly
-weekwam
-weel
-weelfard
-weelfaured
-weemen
-ween
-weendigo
-weeness
-weening
-weenong
-weeny
-weep
-weepable
-weeper
-weepered
-weepful
-weeping
-weepingly
-weeps
-weepy
-weesh
-weeshy
-weet
-weetbird
-weetless
-weever
-weevil
-weeviled
-weevillike
-weevilproof
-weevily
-weewow
-weeze
-weft
-weftage
-wefted
-wefty
-Wega
-wegenerian
-wegotism
-wehrlite
-Wei
-weibyeite
-weichselwood
-Weierstrassian
-Weigela
-weigelite
-weigh
-weighable
-weighage
-weighbar
-weighbauk
-weighbridge
-weighbridgeman
-weighed
-weigher
-weighership
-weighhouse
-weighin
-weighing
-weighman
-weighment
-weighshaft
-weight
-weightchaser
-weighted
-weightedly
-weightedness
-weightily
-weightiness
-weighting
-weightless
-weightlessly
-weightlessness
-weightometer
-weighty
-weinbergerite
-Weinmannia
-weinschenkite
-weir
-weirangle
-weird
-weirdful
-weirdish
-weirdless
-weirdlessness
-weirdlike
-weirdliness
-weirdly
-weirdness
-weirdsome
-weirdward
-weirdwoman
-weiring
-weisbachite
-weiselbergite
-weism
-Weismannian
-Weismannism
-weissite
-Weissnichtwo
-Weitspekan
-wejack
-weka
-wekau
-wekeen
-weki
-welcome
-welcomeless
-welcomely
-welcomeness
-welcomer
-welcoming
-welcomingly
-weld
-weldability
-weldable
-welder
-welding
-weldless
-weldment
-weldor
-Welf
-welfare
-welfaring
-Welfic
-welk
-welkin
-welkinlike
-well
-wellat
-wellaway
-wellborn
-wellcurb
-wellhead
-wellhole
-welling
-wellington
-Wellingtonia
-wellish
-wellmaker
-wellmaking
-wellman
-wellnear
-wellness
-wellring
-Wellsian
-wellside
-wellsite
-wellspring
-wellstead
-wellstrand
-welly
-wellyard
-wels
-Welsh
-welsh
-welsher
-Welshery
-Welshism
-Welshland
-Welshlike
-Welshman
-Welshness
-Welshry
-Welshwoman
-Welshy
-welsium
-welt
-welted
-welter
-welterweight
-welting
-Welwitschia
-wem
-wemless
-wen
-wench
-wencher
-wenchless
-wenchlike
-Wenchow
-Wenchowese
-Wend
-wend
-wende
-Wendell
-Wendi
-Wendic
-Wendish
-Wendy
-wene
-Wenlock
-Wenlockian
-wennebergite
-wennish
-wenny
-Wenonah
-Wenrohronon
-went
-wentletrap
-wenzel
-wept
-wer
-Werchowinci
-were
-werebear
-werecalf
-werefolk
-werefox
-werehyena
-werejaguar
-wereleopard
-werent
-weretiger
-werewolf
-werewolfish
-werewolfism
-werf
-wergil
-weri
-Werner
-Wernerian
-Wernerism
-wernerite
-werowance
-wert
-Werther
-Wertherian
-Wertherism
-wervel
-Wes
-wese
-weskit
-Wesleyan
-Wesleyanism
-Wesleyism
-wesselton
-Wessexman
-west
-westaway
-westbound
-weste
-wester
-westering
-westerliness
-westerly
-westermost
-western
-westerner
-westernism
-westernization
-westernize
-westernly
-westernmost
-westerwards
-westfalite
-westing
-westland
-Westlander
-westlandways
-westmost
-westness
-Westphalian
-Westralian
-Westralianism
-westward
-westwardly
-westwardmost
-westwards
-westy
-wet
-weta
-wetback
-wetbird
-wetched
-wetchet
-wether
-wetherhog
-wetherteg
-wetly
-wetness
-wettability
-wettable
-wetted
-wetter
-wetting
-wettish
-Wetumpka
-weve
-wevet
-Wewenoc
-wey
-Wezen
-Wezn
-wha
-whabby
-whack
-whacker
-whacking
-whacky
-whafabout
-whale
-whaleback
-whalebacker
-whalebird
-whaleboat
-whalebone
-whaleboned
-whaledom
-whalehead
-whalelike
-whaleman
-whaler
-whaleroad
-whalery
-whaleship
-whaling
-whalish
-whally
-whalm
-whalp
-whaly
-wham
-whamble
-whame
-whammle
-whamp
-whampee
-whample
-whan
-whand
-whang
-whangable
-whangam
-whangdoodle
-whangee
-whanghee
-whank
-whap
-whappet
-whapuka
-whapukee
-whapuku
-whar
-whare
-whareer
-wharf
-wharfage
-wharfhead
-wharfholder
-wharfing
-wharfinger
-wharfland
-wharfless
-wharfman
-wharfmaster
-wharfrae
-wharfside
-wharl
-wharp
-wharry
-whart
-wharve
-whase
-whasle
-what
-whata
-whatabouts
-whatever
-whatkin
-whatlike
-whatna
-whatness
-whatnot
-whatreck
-whats
-whatso
-whatsoeer
-whatsoever
-whatsomever
-whatten
-whau
-whauk
-whaup
-whaur
-whauve
-wheal
-whealworm
-whealy
-wheam
-wheat
-wheatbird
-wheatear
-wheateared
-wheaten
-wheatgrower
-wheatland
-wheatless
-wheatlike
-wheatstalk
-wheatworm
-wheaty
-whedder
-whee
-wheedle
-wheedler
-wheedlesome
-wheedling
-wheedlingly
-wheel
-wheelage
-wheelband
-wheelbarrow
-wheelbarrowful
-wheelbird
-wheelbox
-wheeldom
-wheeled
-wheeler
-wheelery
-wheelhouse
-wheeling
-wheelingly
-wheelless
-wheellike
-wheelmaker
-wheelmaking
-wheelman
-wheelrace
-wheelroad
-wheelsman
-wheelsmith
-wheelspin
-wheelswarf
-wheelway
-wheelwise
-wheelwork
-wheelwright
-wheelwrighting
-wheely
-wheem
-wheen
-wheencat
-wheenge
-wheep
-wheeple
-wheer
-wheerikins
-wheesht
-wheetle
-wheeze
-wheezer
-wheezily
-wheeziness
-wheezingly
-wheezle
-wheezy
-wheft
-whein
-whekau
-wheki
-whelk
-whelked
-whelker
-whelklike
-whelky
-whelm
-whelp
-whelphood
-whelpish
-whelpless
-whelpling
-whelve
-whemmel
-when
-whenabouts
-whenas
-whence
-whenceeer
-whenceforth
-whenceforward
-whencesoeer
-whencesoever
-whencever
-wheneer
-whenever
-whenness
-whenso
-whensoever
-whensomever
-where
-whereabout
-whereabouts
-whereafter
-whereanent
-whereas
-whereat
-whereaway
-whereby
-whereer
-wherefor
-wherefore
-wherefrom
-wherein
-whereinsoever
-whereinto
-whereness
-whereof
-whereon
-whereout
-whereover
-whereso
-wheresoeer
-wheresoever
-wheresomever
-wherethrough
-wheretill
-whereto
-wheretoever
-wheretosoever
-whereunder
-whereuntil
-whereunto
-whereup
-whereupon
-wherever
-wherewith
-wherewithal
-wherret
-wherrit
-wherry
-wherryman
-whet
-whether
-whetile
-whetrock
-whetstone
-whetter
-whew
-whewellite
-whewer
-whewl
-whewt
-whey
-wheybeard
-wheyey
-wheyeyness
-wheyface
-wheyfaced
-wheyish
-wheyishness
-wheylike
-wheyness
-whiba
-which
-whichever
-whichsoever
-whichway
-whichways
-whick
-whicken
-whicker
-whid
-whidah
-whidder
-whiff
-whiffenpoof
-whiffer
-whiffet
-whiffle
-whiffler
-whifflery
-whiffletree
-whiffling
-whifflingly
-whiffy
-whift
-Whig
-whig
-Whiggamore
-whiggamore
-Whiggarchy
-Whiggery
-Whiggess
-Whiggification
-Whiggify
-Whiggish
-Whiggishly
-Whiggishness
-Whiggism
-Whiglet
-Whigling
-whigmaleerie
-whigship
-whikerby
-while
-whileen
-whilere
-whiles
-whilie
-whilk
-Whilkut
-whill
-whillaballoo
-whillaloo
-whillilew
-whilly
-whillywha
-whilock
-whilom
-whils
-whilst
-whilter
-whim
-whimberry
-whimble
-whimbrel
-whimling
-whimmy
-whimper
-whimperer
-whimpering
-whimperingly
-whimsey
-whimsic
-whimsical
-whimsicality
-whimsically
-whimsicalness
-whimsied
-whimstone
-whimwham
-whin
-whinberry
-whinchacker
-whinchat
-whincheck
-whincow
-whindle
-whine
-whiner
-whinestone
-whing
-whinge
-whinger
-whininess
-whiningly
-whinnel
-whinner
-whinnock
-whinny
-whinstone
-whiny
-whinyard
-whip
-whipbelly
-whipbird
-whipcat
-whipcord
-whipcordy
-whipcrack
-whipcracker
-whipcraft
-whipgraft
-whipjack
-whipking
-whiplash
-whiplike
-whipmaker
-whipmaking
-whipman
-whipmanship
-whipmaster
-whippa
-whippable
-whipparee
-whipped
-whipper
-whippersnapper
-whippertail
-whippet
-whippeter
-whippiness
-whipping
-whippingly
-whippletree
-whippoorwill
-whippost
-whippowill
-whippy
-whipsaw
-whipsawyer
-whipship
-whipsocket
-whipstaff
-whipstalk
-whipstall
-whipster
-whipstick
-whipstitch
-whipstock
-whipt
-whiptail
-whiptree
-whipwise
-whipworm
-whir
-whirken
-whirl
-whirlabout
-whirlblast
-whirlbone
-whirlbrain
-whirled
-whirler
-whirley
-whirlgig
-whirlicane
-whirligig
-whirlimagig
-whirling
-whirlingly
-whirlmagee
-whirlpool
-whirlpuff
-whirlwig
-whirlwind
-whirlwindish
-whirlwindy
-whirly
-whirlygigum
-whirret
-whirrey
-whirroo
-whirry
-whirtle
-whish
-whisk
-whisker
-whiskerage
-whiskerando
-whiskerandoed
-whiskered
-whiskerer
-whiskerette
-whiskerless
-whiskerlike
-whiskery
-whiskey
-whiskful
-whiskied
-whiskified
-whisking
-whiskingly
-whisky
-whiskyfied
-whiskylike
-whisp
-whisper
-whisperable
-whisperation
-whispered
-whisperer
-whisperhood
-whispering
-whisperingly
-whisperingness
-whisperless
-whisperous
-whisperously
-whisperproof
-whispery
-whissle
-Whisson
-whist
-whister
-whisterpoop
-whistle
-whistlebelly
-whistlefish
-whistlelike
-whistler
-Whistlerian
-whistlerism
-whistlewing
-whistlewood
-whistlike
-whistling
-whistlingly
-whistly
-whistness
-Whistonian
-Whit
-whit
-white
-whiteback
-whitebait
-whitebark
-whitebeard
-whitebelly
-whitebill
-whitebird
-whiteblaze
-whiteblow
-whitebottle
-Whiteboy
-Whiteboyism
-whitecap
-whitecapper
-Whitechapel
-whitecoat
-whitecomb
-whitecorn
-whitecup
-whited
-whiteface
-Whitefieldian
-Whitefieldism
-Whitefieldite
-whitefish
-whitefisher
-whitefishery
-Whitefoot
-whitefoot
-whitefootism
-whitehanded
-whitehass
-whitehawse
-whitehead
-whiteheart
-whitehearted
-whitelike
-whitely
-whiten
-whitener
-whiteness
-whitening
-whitenose
-whitepot
-whiteroot
-whiterump
-whites
-whitesark
-whiteseam
-whiteshank
-whiteside
-whitesmith
-whitestone
-whitetail
-whitethorn
-whitethroat
-whitetip
-whitetop
-whitevein
-whitewall
-whitewards
-whiteware
-whitewash
-whitewasher
-whiteweed
-whitewing
-whitewood
-whiteworm
-whitewort
-whitfinch
-whither
-whitherso
-whithersoever
-whitherto
-whitherward
-whiting
-whitish
-whitishness
-whitleather
-Whitleyism
-whitling
-whitlow
-whitlowwort
-Whitmanese
-Whitmanesque
-Whitmanism
-Whitmanize
-Whitmonday
-whitneyite
-whitrack
-whits
-whitster
-Whitsun
-Whitsunday
-Whitsuntide
-whittaw
-whitten
-whittener
-whitter
-whitterick
-whittle
-whittler
-whittling
-whittret
-whittrick
-whity
-whiz
-whizgig
-whizzer
-whizzerman
-whizziness
-whizzing
-whizzingly
-whizzle
-who
-whoa
-whodunit
-whoever
-whole
-wholehearted
-wholeheartedly
-wholeheartedness
-wholeness
-wholesale
-wholesalely
-wholesaleness
-wholesaler
-wholesome
-wholesomely
-wholesomeness
-wholewise
-wholly
-whom
-whomble
-whomever
-whomso
-whomsoever
-whone
-whoo
-whoof
-whoop
-whoopee
-whooper
-whooping
-whoopingly
-whooplike
-whoops
-whoosh
-whop
-whopper
-whopping
-whorage
-whore
-whoredom
-whorelike
-whoremaster
-whoremasterly
-whoremastery
-whoremonger
-whoremonging
-whoreship
-whoreson
-whorish
-whorishly
-whorishness
-whorl
-whorled
-whorlflower
-whorly
-whorlywort
-whort
-whortle
-whortleberry
-whose
-whosen
-whosesoever
-whosever
-whosomever
-whosumdever
-whud
-whuff
-whuffle
-whulk
-whulter
-whummle
-whun
-whunstane
-whup
-whush
-whuskie
-whussle
-whute
-whuther
-whutter
-whuttering
-whuz
-why
-whyever
-whyfor
-whyness
-whyo
-wi
-wice
-Wichita
-wicht
-wichtisite
-wichtje
-wick
-wickawee
-wicked
-wickedish
-wickedlike
-wickedly
-wickedness
-wicken
-wicker
-wickerby
-wickerware
-wickerwork
-wickerworked
-wickerworker
-wicket
-wicketkeep
-wicketkeeper
-wicketkeeping
-wicketwork
-wicking
-wickiup
-wickless
-wickup
-wicky
-wicopy
-wid
-widbin
-widdendream
-widder
-widdershins
-widdifow
-widdle
-widdy
-wide
-widegab
-widehearted
-widely
-widemouthed
-widen
-widener
-wideness
-widespread
-widespreadedly
-widespreadly
-widespreadness
-widewhere
-widework
-widgeon
-widish
-widow
-widowed
-widower
-widowered
-widowerhood
-widowership
-widowery
-widowhood
-widowish
-widowlike
-widowly
-widowman
-widowy
-width
-widthless
-widthway
-widthways
-widthwise
-widu
-wield
-wieldable
-wielder
-wieldiness
-wieldy
-wiener
-wienerwurst
-wienie
-wierangle
-wiesenboden
-wife
-wifecarl
-wifedom
-wifehood
-wifeism
-wifekin
-wifeless
-wifelessness
-wifelet
-wifelike
-wifeling
-wifelkin
-wifely
-wifeship
-wifeward
-wifie
-wifiekie
-wifish
-wifock
-wig
-wigan
-wigdom
-wigful
-wigged
-wiggen
-wigger
-wiggery
-wigging
-wiggish
-wiggishness
-wiggism
-wiggle
-wiggler
-wiggly
-wiggy
-wight
-wightly
-wightness
-wigless
-wiglet
-wiglike
-wigmaker
-wigmaking
-wigtail
-wigwag
-wigwagger
-wigwam
-wiikite
-Wikeno
-Wikstroemia
-Wilbur
-Wilburite
-wild
-wildbore
-wildcat
-wildcatter
-wildcatting
-wildebeest
-wilded
-wilder
-wilderedly
-wildering
-wilderment
-wilderness
-wildfire
-wildfowl
-wildgrave
-wilding
-wildish
-wildishly
-wildishness
-wildlife
-wildlike
-wildling
-wildly
-wildness
-wildsome
-wildwind
-wile
-wileful
-wileless
-wileproof
-Wilfred
-wilga
-wilgers
-Wilhelm
-Wilhelmina
-Wilhelmine
-wilily
-wiliness
-wilk
-wilkeite
-wilkin
-Wilkinson
-Will
-will
-willable
-willawa
-willed
-willedness
-willemite
-willer
-willet
-willey
-willeyer
-willful
-willfully
-willfulness
-William
-williamsite
-Williamsonia
-Williamsoniaceae
-Willie
-willie
-willier
-willies
-willing
-willinghearted
-willinghood
-willingly
-willingness
-williwaw
-willmaker
-willmaking
-willness
-willock
-willow
-willowbiter
-willowed
-willower
-willowish
-willowlike
-willowware
-willowweed
-willowworm
-willowwort
-willowy
-Willugbaeya
-Willy
-willy
-willyard
-willyart
-willyer
-Wilmer
-wilsome
-wilsomely
-wilsomeness
-Wilson
-Wilsonian
-wilt
-wilter
-Wilton
-wiltproof
-Wiltshire
-wily
-wim
-wimberry
-wimble
-wimblelike
-wimbrel
-wime
-wimick
-wimple
-wimpleless
-wimplelike
-Win
-win
-winberry
-wince
-wincer
-wincey
-winch
-wincher
-Winchester
-winchman
-wincing
-wincingly
-Wind
-wind
-windable
-windage
-windbag
-windbagged
-windbaggery
-windball
-windberry
-windbibber
-windbore
-windbracing
-windbreak
-Windbreaker
-windbreaker
-windbroach
-windclothes
-windcuffer
-winddog
-winded
-windedly
-windedness
-winder
-windermost
-Windesheimer
-windfall
-windfallen
-windfanner
-windfirm
-windfish
-windflaw
-windflower
-windgall
-windgalled
-windhole
-windhover
-windigo
-windily
-windiness
-winding
-windingly
-windingness
-windjammer
-windjamming
-windlass
-windlasser
-windle
-windles
-windless
-windlessly
-windlessness
-windlestrae
-windlestraw
-windlike
-windlin
-windling
-windmill
-windmilly
-windock
-windore
-window
-windowful
-windowless
-windowlessness
-windowlet
-windowlight
-windowlike
-windowmaker
-windowmaking
-windowman
-windowpane
-windowpeeper
-windowshut
-windowward
-windowwards
-windowwise
-windowy
-windpipe
-windplayer
-windproof
-windring
-windroad
-windroot
-windrow
-windrower
-windscreen
-windshield
-windshock
-Windsor
-windsorite
-windstorm
-windsucker
-windtight
-windup
-windward
-windwardly
-windwardmost
-windwardness
-windwards
-windway
-windwayward
-windwaywardly
-windy
-wine
-wineball
-wineberry
-winebibber
-winebibbery
-winebibbing
-Winebrennerian
-wineconner
-wined
-wineglass
-wineglassful
-winegrower
-winegrowing
-winehouse
-wineless
-winelike
-winemay
-winepot
-winer
-winery
-Winesap
-wineshop
-wineskin
-winesop
-winetaster
-winetree
-winevat
-Winfred
-winful
-wing
-wingable
-wingbeat
-wingcut
-winged
-wingedly
-wingedness
-winger
-wingfish
-winghanded
-wingle
-wingless
-winglessness
-winglet
-winglike
-wingman
-wingmanship
-wingpiece
-wingpost
-wingseed
-wingspread
-wingstem
-wingy
-Winifred
-winish
-wink
-winkel
-winkelman
-winker
-winkered
-winking
-winkingly
-winkle
-winklehawk
-winklehole
-winklet
-winly
-winna
-winnable
-winnard
-Winnebago
-Winnecowet
-winnel
-winnelstrae
-winner
-Winnie
-winning
-winningly
-winningness
-winnings
-winninish
-Winnipesaukee
-winnle
-winnonish
-winnow
-winnower
-winnowing
-winnowingly
-Winona
-winrace
-winrow
-winsome
-winsomely
-winsomeness
-Winston
-wint
-winter
-Winteraceae
-winterage
-Winteranaceae
-winterberry
-winterbloom
-winterbourne
-winterdykes
-wintered
-winterer
-winterfeed
-wintergreen
-winterhain
-wintering
-winterish
-winterishly
-winterishness
-winterization
-winterize
-winterkill
-winterkilling
-winterless
-winterlike
-winterliness
-winterling
-winterly
-winterproof
-wintersome
-wintertide
-wintertime
-winterward
-winterwards
-winterweed
-wintle
-wintrify
-wintrily
-wintriness
-wintrish
-wintrous
-wintry
-Wintun
-winy
-winze
-winzeman
-wipe
-wiper
-wippen
-wips
-wir
-wirable
-wirble
-wird
-wire
-wirebar
-wirebird
-wired
-wiredancer
-wiredancing
-wiredraw
-wiredrawer
-wiredrawn
-wirehair
-wireless
-wirelessly
-wirelessness
-wirelike
-wiremaker
-wiremaking
-wireman
-wiremonger
-Wirephoto
-wirepull
-wirepuller
-wirepulling
-wirer
-wiresmith
-wirespun
-wiretail
-wireway
-wireweed
-wirework
-wireworker
-wireworking
-wireworks
-wireworm
-wirily
-wiriness
-wiring
-wirl
-wirling
-Wiros
-wirr
-wirra
-wirrah
-wirrasthru
-wiry
-wis
-Wisconsinite
-wisdom
-wisdomful
-wisdomless
-wisdomproof
-wisdomship
-wise
-wiseacre
-wiseacred
-wiseacredness
-wiseacredom
-wiseacreish
-wiseacreishness
-wiseacreism
-wisecrack
-wisecracker
-wisecrackery
-wisehead
-wisehearted
-wiseheartedly
-wiseheimer
-wiselike
-wiseling
-wisely
-wiseman
-wisen
-wiseness
-wisenheimer
-wisent
-wiser
-wiseweed
-wisewoman
-wish
-wisha
-wishable
-wishbone
-wished
-wishedly
-wisher
-wishful
-wishfully
-wishfulness
-wishing
-wishingly
-wishless
-wishly
-wishmay
-wishness
-Wishoskan
-Wishram
-wisht
-wishtonwish
-Wisigothic
-wisket
-wiskinky
-wisp
-wispish
-wisplike
-wispy
-wiss
-wisse
-wissel
-wist
-Wistaria
-wistaria
-wiste
-wistened
-Wisteria
-wisteria
-wistful
-wistfully
-wistfulness
-wistit
-wistiti
-wistless
-wistlessness
-wistonwish
-wit
-witan
-Witbooi
-witch
-witchbells
-witchcraft
-witched
-witchedly
-witchen
-witchering
-witchery
-witchet
-witchetty
-witchhood
-witching
-witchingly
-witchleaf
-witchlike
-witchman
-witchmonger
-witchuck
-witchweed
-witchwife
-witchwoman
-witchwood
-witchwork
-witchy
-witcraft
-wite
-witeless
-witenagemot
-witepenny
-witess
-witful
-with
-withal
-withamite
-Withania
-withdraught
-withdraw
-withdrawable
-withdrawal
-withdrawer
-withdrawing
-withdrawingness
-withdrawment
-withdrawn
-withdrawnness
-withe
-withen
-wither
-witherband
-withered
-witheredly
-witheredness
-witherer
-withergloom
-withering
-witheringly
-witherite
-witherly
-withernam
-withers
-withershins
-withertip
-witherwards
-witherweight
-withery
-withewood
-withheld
-withhold
-withholdable
-withholdal
-withholder
-withholdment
-within
-withindoors
-withinside
-withinsides
-withinward
-withinwards
-withness
-witholden
-without
-withoutdoors
-withouten
-withoutforth
-withoutside
-withoutwards
-withsave
-withstand
-withstander
-withstandingness
-withstay
-withstood
-withstrain
-withvine
-withwind
-withy
-withypot
-withywind
-witjar
-witless
-witlessly
-witlessness
-witlet
-witling
-witloof
-witmonger
-witness
-witnessable
-witnessdom
-witnesser
-witney
-witneyer
-Witoto
-witship
-wittal
-wittawer
-witteboom
-witted
-witter
-wittering
-witticaster
-wittichenite
-witticism
-witticize
-wittified
-wittily
-wittiness
-witting
-wittingly
-wittol
-wittolly
-witty
-Witumki
-witwall
-witzchoura
-wive
-wiver
-wivern
-Wiyat
-Wiyot
-wiz
-wizard
-wizardess
-wizardism
-wizardlike
-wizardly
-wizardry
-wizardship
-wizen
-wizened
-wizenedness
-wizier
-wizzen
-wloka
-wo
-woad
-woader
-woadman
-woadwaxen
-woady
-woak
-woald
-woan
-wob
-wobbegong
-wobble
-wobbler
-wobbliness
-wobbling
-wobblingly
-wobbly
-wobster
-wocheinite
-Wochua
-wod
-woddie
-wode
-Wodenism
-wodge
-wodgy
-woe
-woebegone
-woebegoneness
-woebegonish
-woeful
-woefully
-woefulness
-woehlerite
-woesome
-woevine
-woeworn
-woffler
-woft
-wog
-wogiet
-Wogulian
-woibe
-wokas
-woke
-wokowi
-wold
-woldlike
-woldsman
-woldy
-Wolf
-wolf
-wolfachite
-wolfberry
-wolfdom
-wolfen
-wolfer
-Wolffia
-Wolffian
-Wolffianism
-Wolfgang
-wolfhood
-wolfhound
-Wolfian
-wolfish
-wolfishly
-wolfishness
-wolfkin
-wolfless
-wolflike
-wolfling
-wolfram
-wolframate
-wolframic
-wolframine
-wolframinium
-wolframite
-wolfsbane
-wolfsbergite
-wolfskin
-wolfward
-wolfwards
-wollastonite
-wollomai
-wollop
-Wolof
-wolter
-wolve
-wolveboon
-wolver
-wolverine
-woman
-womanbody
-womandom
-womanfolk
-womanfully
-womanhead
-womanhearted
-womanhood
-womanhouse
-womanish
-womanishly
-womanishness
-womanism
-womanist
-womanity
-womanization
-womanize
-womanizer
-womankind
-womanless
-womanlike
-womanliness
-womanly
-womanmuckle
-womanness
-womanpost
-womanproof
-womanship
-womanways
-womanwise
-womb
-wombat
-wombed
-womble
-wombstone
-womby
-womenfolk
-womenfolks
-womenkind
-womera
-wommerala
-won
-wonder
-wonderberry
-wonderbright
-wondercraft
-wonderer
-wonderful
-wonderfully
-wonderfulness
-wondering
-wonderingly
-wonderland
-wonderlandish
-wonderless
-wonderment
-wondermonger
-wondermongering
-wondersmith
-wondersome
-wonderstrong
-wonderwell
-wonderwork
-wonderworthy
-wondrous
-wondrously
-wondrousness
-wone
-wonegan
-wong
-wonga
-Wongara
-wongen
-wongshy
-wongsky
-woning
-wonky
-wonna
-wonned
-wonner
-wonning
-wonnot
-wont
-wonted
-wontedly
-wontedness
-wonting
-woo
-wooable
-wood
-woodagate
-woodbark
-woodbin
-woodbind
-woodbine
-woodbined
-woodbound
-woodburytype
-woodbush
-woodchat
-woodchuck
-woodcock
-woodcockize
-woodcracker
-woodcraft
-woodcrafter
-woodcraftiness
-woodcraftsman
-woodcrafty
-woodcut
-woodcutter
-woodcutting
-wooded
-wooden
-woodendite
-woodenhead
-woodenheaded
-woodenheadedness
-woodenly
-woodenness
-woodenware
-woodenweary
-woodeny
-woodfish
-woodgeld
-woodgrub
-woodhack
-woodhacker
-woodhole
-woodhorse
-woodhouse
-woodhung
-woodine
-woodiness
-wooding
-woodish
-woodjobber
-woodkern
-woodknacker
-woodland
-woodlander
-woodless
-woodlessness
-woodlet
-woodlike
-woodlocked
-woodly
-woodman
-woodmancraft
-woodmanship
-woodmonger
-woodmote
-woodness
-woodpeck
-woodpecker
-woodpenny
-woodpile
-woodprint
-woodranger
-woodreeve
-woodrick
-woodrock
-woodroof
-woodrow
-woodrowel
-Woodruff
-woodruff
-woodsere
-woodshed
-woodshop
-Woodsia
-woodside
-woodsilver
-woodskin
-woodsman
-woodspite
-woodstone
-woodsy
-woodwall
-woodward
-Woodwardia
-woodwardship
-woodware
-woodwax
-woodwaxen
-woodwise
-woodwork
-woodworker
-woodworking
-woodworm
-woodwose
-woodwright
-Woody
-woody
-woodyard
-wooer
-woof
-woofed
-woofell
-woofer
-woofy
-woohoo
-wooing
-wooingly
-wool
-woold
-woolder
-woolding
-wooled
-woolen
-woolenet
-woolenization
-woolenize
-wooler
-woolert
-woolfell
-woolgatherer
-woolgathering
-woolgrower
-woolgrowing
-woolhead
-wooliness
-woollike
-woolly
-woollyhead
-woollyish
-woolman
-woolpack
-woolpress
-woolsack
-woolsey
-woolshearer
-woolshearing
-woolshears
-woolshed
-woolskin
-woolsorter
-woolsorting
-woolsower
-woolstock
-woolulose
-Woolwa
-woolwasher
-woolweed
-woolwheel
-woolwinder
-woolwork
-woolworker
-woolworking
-woom
-woomer
-woomerang
-woon
-woons
-woorali
-woorari
-woosh
-wootz
-woozle
-woozy
-wop
-woppish
-wops
-worble
-worcester
-word
-wordable
-wordably
-wordage
-wordbook
-wordbuilding
-wordcraft
-wordcraftsman
-worded
-Worden
-worder
-wordily
-wordiness
-wording
-wordish
-wordishly
-wordishness
-wordle
-wordless
-wordlessly
-wordlessness
-wordlike
-wordlorist
-wordmaker
-wordmaking
-wordman
-wordmanship
-wordmonger
-wordmongering
-wordmongery
-wordplay
-wordsman
-wordsmanship
-wordsmith
-wordspite
-wordster
-Wordsworthian
-Wordsworthianism
-wordy
-wore
-work
-workability
-workable
-workableness
-workaday
-workaway
-workbag
-workbasket
-workbench
-workbook
-workbox
-workbrittle
-workday
-worked
-worker
-workfellow
-workfolk
-workfolks
-workgirl
-workhand
-workhouse
-workhoused
-working
-workingly
-workingman
-workingwoman
-workless
-worklessness
-workloom
-workman
-workmanlike
-workmanlikeness
-workmanliness
-workmanly
-workmanship
-workmaster
-workmistress
-workout
-workpan
-workpeople
-workpiece
-workplace
-workroom
-works
-workship
-workshop
-worksome
-workstand
-worktable
-worktime
-workways
-workwise
-workwoman
-workwomanlike
-workwomanly
-worky
-workyard
-world
-worlded
-worldful
-worldish
-worldless
-worldlet
-worldlike
-worldlily
-worldliness
-worldling
-worldly
-worldmaker
-worldmaking
-worldproof
-worldquake
-worldward
-worldwards
-worldway
-worldy
-worm
-wormed
-wormer
-wormhole
-wormholed
-wormhood
-Wormian
-wormil
-worming
-wormless
-wormlike
-wormling
-wormproof
-wormroot
-wormseed
-wormship
-wormweed
-wormwood
-wormy
-worn
-wornil
-wornness
-worral
-worriable
-worricow
-worried
-worriedly
-worriedness
-worrier
-worriless
-worriment
-worrisome
-worrisomely
-worrisomeness
-worrit
-worriter
-worry
-worrying
-worryingly
-worryproof
-worrywart
-worse
-worsement
-worsen
-worseness
-worsening
-worser
-worserment
-worset
-worship
-worshipability
-worshipable
-worshiper
-worshipful
-worshipfully
-worshipfulness
-worshipingly
-worshipless
-worshipworth
-worshipworthy
-worst
-worsted
-wort
-worth
-worthful
-worthfulness
-worthiest
-worthily
-worthiness
-worthless
-worthlessly
-worthlessness
-worthship
-worthward
-worthy
-wosbird
-wot
-wote
-wots
-wottest
-wotteth
-woubit
-wouch
-wouf
-wough
-would
-wouldest
-wouldnt
-wouldst
-wound
-woundability
-woundable
-woundableness
-wounded
-woundedly
-wounder
-woundily
-wounding
-woundingly
-woundless
-wounds
-woundwort
-woundworth
-woundy
-wourali
-wourari
-wournil
-wove
-woven
-Wovoka
-wow
-wowser
-wowserdom
-wowserian
-wowserish
-wowserism
-wowsery
-wowt
-woy
-Woyaway
-wrack
-wracker
-wrackful
-Wraf
-wraggle
-wrainbolt
-wrainstaff
-wrainstave
-wraith
-wraithe
-wraithlike
-wraithy
-wraitly
-wramp
-wran
-wrang
-wrangle
-wrangler
-wranglership
-wranglesome
-wranglingly
-wrannock
-wranny
-wrap
-wrappage
-wrapped
-wrapper
-wrapperer
-wrappering
-wrapping
-wraprascal
-wrasse
-wrastle
-wrastler
-wrath
-wrathful
-wrathfully
-wrathfulness
-wrathily
-wrathiness
-wrathlike
-wrathy
-wraw
-wrawl
-wrawler
-wraxle
-wreak
-wreakful
-wreakless
-wreat
-wreath
-wreathage
-wreathe
-wreathed
-wreathen
-wreather
-wreathingly
-wreathless
-wreathlet
-wreathlike
-wreathmaker
-wreathmaking
-wreathwise
-wreathwork
-wreathwort
-wreathy
-wreck
-wreckage
-wrecker
-wreckfish
-wreckful
-wrecking
-wrecky
-Wren
-wren
-wrench
-wrenched
-wrencher
-wrenchingly
-wrenlet
-wrenlike
-wrentail
-wrest
-wrestable
-wrester
-wresting
-wrestingly
-wrestle
-wrestler
-wrestlerlike
-wrestling
-wretch
-wretched
-wretchedly
-wretchedness
-wretchless
-wretchlessly
-wretchlessness
-wretchock
-wricht
-wrick
-wride
-wried
-wrier
-wriest
-wrig
-wriggle
-wriggler
-wrigglesome
-wrigglingly
-wriggly
-wright
-wrightine
-wring
-wringbolt
-wringer
-wringman
-wringstaff
-wrinkle
-wrinkleable
-wrinkled
-wrinkledness
-wrinkledy
-wrinkleful
-wrinkleless
-wrinkleproof
-wrinklet
-wrinkly
-wrist
-wristband
-wristbone
-wristed
-wrister
-wristfall
-wristikin
-wristlet
-wristlock
-wristwork
-writ
-writability
-writable
-writation
-writative
-write
-writeable
-writee
-writer
-writeress
-writerling
-writership
-writh
-writhe
-writhed
-writhedly
-writhedness
-writhen
-writheneck
-writher
-writhing
-writhingly
-writhy
-writing
-writinger
-writmaker
-writmaking
-writproof
-written
-writter
-wrive
-wrizzled
-wro
-wrocht
-wroke
-wroken
-wrong
-wrongdoer
-wrongdoing
-wronged
-wronger
-wrongful
-wrongfully
-wrongfulness
-wronghead
-wrongheaded
-wrongheadedly
-wrongheadedness
-wronghearted
-wrongheartedly
-wrongheartedness
-wrongish
-wrongless
-wronglessly
-wrongly
-wrongness
-wrongous
-wrongously
-wrongousness
-wrongwise
-Wronskian
-wrossle
-wrote
-wroth
-wrothful
-wrothfully
-wrothily
-wrothiness
-wrothly
-wrothsome
-wrothy
-wrought
-wrox
-wrung
-wrungness
-wry
-wrybill
-wryly
-wrymouth
-wryneck
-wryness
-wrytail
-Wu
-Wuchereria
-wud
-wuddie
-wudge
-wudu
-wugg
-wulfenite
-wulk
-wull
-wullawins
-wullcat
-Wullie
-wulliwa
-wumble
-wumman
-wummel
-wun
-Wundtian
-wungee
-wunna
-wunner
-wunsome
-wup
-wur
-wurley
-wurmal
-Wurmian
-wurrus
-wurset
-wurtzilite
-wurtzite
-Wurzburger
-wurzel
-wush
-wusp
-wuss
-wusser
-wust
-wut
-wuther
-wuzu
-wuzzer
-wuzzle
-wuzzy
-wy
-Wyandot
-Wyandotte
-Wycliffian
-Wycliffism
-Wycliffist
-Wycliffite
-wyde
-wye
-Wyethia
-wyke
-Wykehamical
-Wykehamist
-wyle
-wyliecoat
-wymote
-wyn
-wynd
-wyne
-wynkernel
-wynn
-Wyomingite
-wyomingite
-wype
-wyson
-wyss
-wyve
-wyver
-X
-x
-xanthaline
-xanthamic
-xanthamide
-xanthane
-xanthate
-xanthation
-xanthein
-xanthelasma
-xanthelasmic
-xanthelasmoidea
-xanthene
-Xanthian
-xanthic
-xanthide
-Xanthidium
-xanthin
-xanthine
-xanthinuria
-xanthione
-Xanthisma
-xanthite
-Xanthium
-xanthiuria
-xanthocarpous
-Xanthocephalus
-Xanthoceras
-Xanthochroi
-xanthochroia
-Xanthochroic
-xanthochroid
-xanthochroism
-xanthochromia
-xanthochromic
-xanthochroous
-xanthocobaltic
-xanthocone
-xanthoconite
-xanthocreatinine
-xanthocyanopsia
-xanthocyanopsy
-xanthocyanopy
-xanthoderm
-xanthoderma
-xanthodont
-xanthodontous
-xanthogen
-xanthogenamic
-xanthogenamide
-xanthogenate
-xanthogenic
-xantholeucophore
-xanthoma
-xanthomata
-xanthomatosis
-xanthomatous
-Xanthomelanoi
-xanthomelanous
-xanthometer
-Xanthomonas
-xanthomyeloma
-xanthone
-xanthophane
-xanthophore
-xanthophose
-Xanthophyceae
-xanthophyll
-xanthophyllite
-xanthophyllous
-Xanthopia
-xanthopia
-xanthopicrin
-xanthopicrite
-xanthoproteic
-xanthoprotein
-xanthoproteinic
-xanthopsia
-xanthopsin
-xanthopsydracia
-xanthopterin
-xanthopurpurin
-xanthorhamnin
-Xanthorrhiza
-Xanthorrhoea
-xanthorrhoea
-xanthosiderite
-xanthosis
-Xanthosoma
-xanthospermous
-xanthotic
-Xanthoura
-xanthous
-Xanthoxalis
-xanthoxenite
-xanthoxylin
-xanthuria
-xanthydrol
-xanthyl
-xarque
-Xaverian
-xebec
-Xema
-xenacanthine
-Xenacanthini
-xenagogue
-xenagogy
-Xenarchi
-Xenarthra
-xenarthral
-xenarthrous
-xenelasia
-xenelasy
-xenia
-xenial
-xenian
-Xenicidae
-Xenicus
-xenium
-xenobiosis
-xenoblast
-Xenocratean
-Xenocratic
-xenocryst
-xenodochium
-xenogamous
-xenogamy
-xenogenesis
-xenogenetic
-xenogenic
-xenogenous
-xenogeny
-xenolite
-xenolith
-xenolithic
-xenomania
-xenomaniac
-Xenomi
-Xenomorpha
-xenomorphic
-xenomorphosis
-xenon
-xenoparasite
-xenoparasitism
-xenopeltid
-Xenopeltidae
-Xenophanean
-xenophile
-xenophilism
-xenophobe
-xenophobia
-xenophobian
-xenophobism
-xenophoby
-Xenophonic
-Xenophontean
-Xenophontian
-Xenophontic
-Xenophontine
-Xenophora
-xenophoran
-Xenophoridae
-xenophthalmia
-xenophya
-xenopodid
-Xenopodidae
-xenopodoid
-Xenopsylla
-xenopteran
-Xenopteri
-xenopterygian
-Xenopterygii
-Xenopus
-Xenorhynchus
-Xenos
-xenosaurid
-Xenosauridae
-xenosauroid
-Xenosaurus
-xenotime
-Xenurus
-xenyl
-xenylamine
-xerafin
-xeransis
-Xeranthemum
-xeranthemum
-xerantic
-xerarch
-xerasia
-Xeres
-xeric
-xerically
-xeriff
-xerocline
-xeroderma
-xerodermatic
-xerodermatous
-xerodermia
-xerodermic
-xerogel
-xerography
-xeroma
-xeromata
-xeromenia
-xeromorph
-xeromorphic
-xeromorphous
-xeromorphy
-xeromyron
-xeromyrum
-xeronate
-xeronic
-xerophagia
-xerophagy
-xerophil
-xerophile
-xerophilous
-xerophily
-xerophobous
-xerophthalmia
-xerophthalmos
-xerophthalmy
-Xerophyllum
-xerophyte
-xerophytic
-xerophytically
-xerophytism
-xeroprinting
-xerosis
-xerostoma
-xerostomia
-xerotes
-xerotherm
-xerotic
-xerotocia
-xerotripsis
-Xerus
-xi
-Xicak
-Xicaque
-Ximenia
-Xina
-Xinca
-Xipe
-Xiphias
-xiphias
-xiphihumeralis
-xiphiid
-Xiphiidae
-xiphiiform
-xiphioid
-xiphiplastra
-xiphiplastral
-xiphiplastron
-xiphisterna
-xiphisternal
-xiphisternum
-Xiphisura
-xiphisuran
-Xiphiura
-Xiphius
-xiphocostal
-Xiphodon
-Xiphodontidae
-xiphodynia
-xiphoid
-xiphoidal
-xiphoidian
-xiphopagic
-xiphopagous
-xiphopagus
-xiphophyllous
-xiphosterna
-xiphosternum
-Xiphosura
-xiphosuran
-xiphosure
-Xiphosuridae
-xiphosurous
-Xiphosurus
-xiphuous
-Xiphura
-Xiphydria
-xiphydriid
-Xiphydriidae
-Xiraxara
-Xmas
-xoana
-xoanon
-Xosa
-xurel
-xyla
-xylan
-Xylaria
-Xylariaceae
-xylate
-Xyleborus
-xylem
-xylene
-xylenol
-xylenyl
-xyletic
-Xylia
-xylic
-xylidic
-xylidine
-Xylina
-xylindein
-xylinid
-xylite
-xylitol
-xylitone
-xylobalsamum
-xylocarp
-xylocarpous
-Xylocopa
-xylocopid
-Xylocopidae
-xylogen
-xyloglyphy
-xylograph
-xylographer
-xylographic
-xylographical
-xylographically
-xylography
-xyloid
-xyloidin
-xylol
-xylology
-xyloma
-xylomancy
-xylometer
-xylon
-xylonic
-Xylonite
-xylonitrile
-Xylophaga
-xylophagan
-xylophage
-xylophagid
-Xylophagidae
-xylophagous
-Xylophagus
-xylophilous
-xylophone
-xylophonic
-xylophonist
-Xylopia
-xyloplastic
-xylopyrography
-xyloquinone
-xylorcin
-xylorcinol
-xylose
-xyloside
-Xylosma
-xylostroma
-xylostromata
-xylostromatoid
-xylotile
-xylotomist
-xylotomous
-xylotomy
-Xylotrya
-xylotypographic
-xylotypography
-xyloyl
-xylyl
-xylylene
-xylylic
-xyphoid
-Xyrichthys
-xyrid
-Xyridaceae
-xyridaceous
-Xyridales
-Xyris
-xyst
-xyster
-xysti
-xystos
-xystum
-xystus
-Y
-y
-ya
-yaba
-yabber
-yabbi
-yabble
-yabby
-yabu
-yacal
-yacca
-yachan
-yacht
-yachtdom
-yachter
-yachting
-yachtist
-yachtman
-yachtmanship
-yachtsman
-yachtsmanlike
-yachtsmanship
-yachtswoman
-yachty
-yad
-Yadava
-yade
-yaff
-yaffingale
-yaffle
-yagger
-yaghourt
-yagi
-Yagnob
-yagourundi
-Yagua
-yagua
-yaguarundi
-yaguaza
-yah
-yahan
-Yahgan
-Yahganan
-Yahoo
-yahoo
-Yahoodom
-Yahooish
-Yahooism
-Yahuna
-Yahuskin
-Yahweh
-Yahwism
-Yahwist
-Yahwistic
-yair
-yaird
-yaje
-yajeine
-yajenine
-Yajna
-Yajnavalkya
-yajnopavita
-yak
-Yaka
-Yakala
-yakalo
-yakamik
-Yakan
-yakattalo
-Yakima
-yakin
-yakka
-yakman
-Yakona
-Yakonan
-Yakut
-Yakutat
-yalb
-Yale
-yale
-Yalensian
-yali
-yalla
-yallaer
-yallow
-yam
-Yamacraw
-Yamamadi
-yamamai
-yamanai
-yamaskite
-Yamassee
-Yamato
-Yamel
-yamen
-Yameo
-yamilke
-yammadji
-yammer
-yamp
-yampa
-yamph
-yamshik
-yamstchik
-yan
-Yana
-Yanan
-yancopin
-yander
-yang
-yangtao
-yank
-Yankee
-Yankeedom
-Yankeefy
-Yankeeism
-Yankeeist
-Yankeeize
-Yankeeland
-Yankeeness
-yanking
-Yankton
-Yanktonai
-yanky
-Yannigan
-Yao
-yaoort
-yaourti
-yap
-yapa
-yaply
-Yapman
-yapness
-yapok
-yapp
-yapped
-yapper
-yappiness
-yapping
-yappingly
-yappish
-yappy
-yapster
-Yaqui
-Yaquina
-yar
-yarak
-yaray
-yarb
-Yarborough
-yard
-yardage
-yardang
-yardarm
-yarder
-yardful
-yarding
-yardkeep
-yardland
-yardman
-yardmaster
-yardsman
-yardstick
-yardwand
-yare
-yareta
-yark
-Yarkand
-yarke
-yarl
-yarly
-yarm
-yarn
-yarnen
-yarner
-yarnwindle
-yarpha
-yarr
-yarraman
-yarran
-yarringle
-yarrow
-yarth
-yarthen
-Yaru
-Yarura
-Yaruran
-Yaruro
-yarwhelp
-yarwhip
-yas
-yashiro
-yashmak
-Yasht
-Yasna
-yat
-yataghan
-yatalite
-yate
-yati
-Yatigan
-yatter
-Yatvyag
-Yauapery
-yaud
-yauld
-yaupon
-yautia
-yava
-Yavapai
-yaw
-yawl
-yawler
-yawlsman
-yawmeter
-yawn
-yawner
-yawney
-yawnful
-yawnfully
-yawnily
-yawniness
-yawning
-yawningly
-yawnproof
-yawnups
-yawny
-yawp
-yawper
-yawroot
-yaws
-yawweed
-yawy
-yaxche
-yaya
-Yazdegerdian
-Yazoo
-ycie
-yday
-ye
-yea
-yeah
-yealing
-yean
-yeanling
-year
-yeara
-yearbird
-yearbook
-yeard
-yearday
-yearful
-yearling
-yearlong
-yearly
-yearn
-yearnful
-yearnfully
-yearnfulness
-yearning
-yearnling
-yearock
-yearth
-yeast
-yeastily
-yeastiness
-yeasting
-yeastlike
-yeasty
-yeat
-yeather
-yed
-yede
-yee
-yeel
-yeelaman
-yees
-yegg
-yeggman
-yeguita
-yeld
-yeldrin
-yeldrock
-yelk
-yell
-yeller
-yelling
-yelloch
-yellow
-yellowammer
-yellowback
-yellowbelly
-yellowberry
-yellowbill
-yellowbird
-yellowcrown
-yellowcup
-yellowfin
-yellowfish
-yellowhammer
-yellowhead
-yellowing
-yellowish
-yellowishness
-Yellowknife
-yellowlegs
-yellowly
-yellowness
-yellowroot
-yellowrump
-yellows
-yellowseed
-yellowshank
-yellowshanks
-yellowshins
-yellowtail
-yellowthorn
-yellowthroat
-yellowtop
-yellowware
-yellowweed
-yellowwood
-yellowwort
-yellowy
-yelm
-yelmer
-yelp
-yelper
-yelt
-Yemen
-Yemeni
-Yemenic
-Yemenite
-yen
-yender
-Yengee
-Yengeese
-yeni
-Yenisei
-Yeniseian
-yenite
-yentnite
-yeo
-yeoman
-yeomaness
-yeomanette
-yeomanhood
-yeomanlike
-yeomanly
-yeomanry
-yeomanwise
-yeorling
-yeowoman
-yep
-yer
-Yerava
-Yeraver
-yerb
-yerba
-yercum
-yerd
-yere
-yerga
-yerk
-yern
-yerth
-yes
-yese
-Yeshibah
-Yeshiva
-yeso
-yesso
-yest
-yester
-yesterday
-yestereve
-yestereven
-yesterevening
-yestermorn
-yestermorning
-yestern
-yesternight
-yesternoon
-yesterweek
-yesteryear
-yestreen
-yesty
-yet
-yeta
-yetapa
-yeth
-yether
-yetlin
-yeuk
-yeukieness
-yeuky
-yeven
-yew
-yex
-yez
-Yezdi
-Yezidi
-yezzy
-ygapo
-Yid
-Yiddish
-Yiddisher
-Yiddishism
-Yiddishist
-yield
-yieldable
-yieldableness
-yieldance
-yielden
-yielder
-yielding
-yieldingly
-yieldingness
-yieldy
-yigh
-Yikirgaulit
-Yildun
-yill
-yilt
-Yin
-yin
-yince
-yinst
-yip
-yird
-yirk
-yirm
-yirmilik
-yirn
-yirr
-yirth
-yis
-yite
-ym
-yn
-ynambu
-yo
-yobi
-yocco
-yochel
-yock
-yockel
-yodel
-yodeler
-yodelist
-yodh
-yoe
-yoga
-yogasana
-yogh
-yoghurt
-yogi
-yogin
-yogism
-yogist
-yogoite
-yohimbe
-yohimbi
-yohimbine
-yohimbinization
-yohimbinize
-yoi
-yoick
-yoicks
-yojan
-yojana
-Yojuane
-yok
-yoke
-yokeable
-yokeableness
-yokeage
-yokefellow
-yokel
-yokeldom
-yokeless
-yokelish
-yokelism
-yokelry
-yokemate
-yokemating
-yoker
-yokewise
-yokewood
-yoking
-Yokuts
-yoky
-yolden
-Yoldia
-yoldring
-yolk
-yolked
-yolkiness
-yolkless
-yolky
-yom
-yomer
-Yomud
-yon
-yoncopin
-yond
-yonder
-Yonkalla
-yonner
-yonside
-yont
-yook
-yoop
-yor
-yore
-yoretime
-york
-Yorker
-yorker
-Yorkish
-Yorkist
-Yorkshire
-Yorkshireism
-Yorkshireman
-Yoruba
-Yoruban
-yot
-yotacism
-yotacize
-yote
-you
-youd
-youden
-youdendrift
-youdith
-youff
-youl
-young
-youngberry
-younger
-younghearted
-youngish
-younglet
-youngling
-youngly
-youngness
-youngster
-youngun
-younker
-youp
-your
-yourn
-yours
-yoursel
-yourself
-yourselves
-youse
-youth
-youthen
-youthful
-youthfullity
-youthfully
-youthfulness
-youthhead
-youthheid
-youthhood
-youthily
-youthless
-youthlessness
-youthlike
-youthlikeness
-youthsome
-youthtide
-youthwort
-youthy
-youve
-youward
-youwards
-youze
-yoven
-yow
-yowie
-yowl
-yowler
-yowley
-yowlring
-yowt
-yox
-yoy
-yperite
-Yponomeuta
-Yponomeutid
-Yponomeutidae
-ypsiliform
-ypsiloid
-Ypurinan
-Yquem
-yr
-ytterbia
-ytterbic
-ytterbium
-yttria
-yttrialite
-yttric
-yttriferous
-yttrious
-yttrium
-yttrocerite
-yttrocolumbite
-yttrocrasite
-yttrofluorite
-yttrogummite
-yttrotantalite
-Yuan
-yuan
-Yuapin
-yuca
-Yucatec
-Yucatecan
-Yucateco
-Yucca
-yucca
-Yuchi
-yuck
-yuckel
-yucker
-yuckle
-yucky
-Yuechi
-yuft
-Yuga
-yugada
-Yugoslav
-Yugoslavian
-Yugoslavic
-yuh
-Yuit
-Yukaghir
-Yuki
-Yukian
-yukkel
-yulan
-yule
-yuleblock
-yuletide
-Yuma
-Yuman
-yummy
-Yun
-Yunca
-Yuncan
-yungan
-Yunnanese
-Yurak
-Yurok
-yurt
-yurta
-Yurucare
-Yurucarean
-Yurucari
-Yurujure
-Yuruk
-Yuruna
-Yurupary
-yus
-yusdrum
-Yustaga
-yutu
-yuzlik
-yuzluk
-Yvonne
-Z
-z
-za
-Zabaean
-zabaglione
-Zabaism
-Zaberma
-zabeta
-Zabian
-Zabism
-zabra
-zabti
-zabtie
-zac
-zacate
-Zacatec
-Zacateco
-zacaton
-Zach
-Zachariah
-zachun
-zad
-Zadokite
-zadruga
-zaffar
-zaffer
-zafree
-zag
-zagged
-Zaglossus
-zaibatsu
-zain
-Zaitha
-zak
-zakkeu
-Zaklohpakap
-zalambdodont
-Zalambdodonta
-Zalophus
-zaman
-zamang
-zamarra
-zamarro
-Zambal
-Zambezian
-zambo
-zamboorak
-Zamenis
-Zamia
-Zamiaceae
-Zamicrus
-zamindar
-zamindari
-zamorin
-zamouse
-Zan
-Zanclidae
-Zanclodon
-Zanclodontidae
-Zande
-zander
-zandmole
-zanella
-Zaniah
-Zannichellia
-Zannichelliaceae
-Zanonia
-zant
-zante
-Zantedeschia
-zantewood
-Zanthorrhiza
-Zanthoxylaceae
-Zanthoxylum
-zanthoxylum
-Zantiot
-zantiote
-zany
-zanyish
-zanyism
-zanyship
-Zanzalian
-zanze
-Zanzibari
-Zapara
-Zaparan
-Zaparo
-Zaparoan
-zapas
-zapatero
-zaphara
-Zaphetic
-zaphrentid
-Zaphrentidae
-Zaphrentis
-zaphrentoid
-Zapodidae
-Zapodinae
-Zaporogian
-Zaporogue
-zapota
-Zapotec
-Zapotecan
-Zapoteco
-zaptiah
-zaptieh
-Zaptoeca
-zapupe
-Zapus
-zaqqum
-Zaque
-zar
-zarabanda
-Zaramo
-Zarathustrian
-Zarathustrianism
-Zarathustrism
-zaratite
-Zardushti
-zareba
-Zarema
-zarf
-zarnich
-zarp
-zarzuela
-zat
-zati
-zattare
-Zaurak
-Zauschneria
-Zavijava
-zax
-zayat
-zayin
-Zea
-zeal
-Zealander
-zealful
-zealless
-zeallessness
-zealot
-zealotic
-zealotical
-zealotism
-zealotist
-zealotry
-zealous
-zealously
-zealousness
-zealousy
-zealproof
-zebra
-zebraic
-zebralike
-zebrass
-zebrawood
-Zebrina
-zebrine
-zebrinny
-zebroid
-zebrula
-zebrule
-zebu
-zebub
-Zebulunite
-zeburro
-zecchini
-zecchino
-zechin
-Zechstein
-zed
-zedoary
-zee
-zeed
-Zeelander
-Zeguha
-zehner
-Zeidae
-zein
-zeism
-zeist
-Zeke
-zel
-Zelanian
-zelator
-zelatrice
-zelatrix
-Zelkova
-Zeltinger
-zemeism
-zemi
-zemimdari
-zemindar
-zemmi
-zemni
-zemstroist
-zemstvo
-Zen
-Zenaga
-Zenaida
-Zenaidinae
-Zenaidura
-zenana
-Zend
-Zendic
-zendician
-zendik
-zendikite
-Zenelophon
-zenick
-zenith
-zenithal
-zenithward
-zenithwards
-Zenobia
-zenocentric
-zenographic
-zenographical
-zenography
-Zenonian
-Zenonic
-zenu
-Zeoidei
-zeolite
-zeolitic
-zeolitization
-zeolitize
-zeoscope
-Zep
-zepharovichite
-zephyr
-Zephyranthes
-zephyrean
-zephyrless
-zephyrlike
-zephyrous
-zephyrus
-zephyry
-Zeppelin
-zeppelin
-zequin
-zer
-zerda
-Zerma
-zermahbub
-zero
-zeroaxial
-zeroize
-zerumbet
-zest
-zestful
-zestfully
-zestfulness
-zesty
-zeta
-zetacism
-zetetic
-Zeuctocoelomata
-zeuctocoelomatic
-zeuctocoelomic
-Zeuglodon
-zeuglodon
-zeuglodont
-Zeuglodonta
-Zeuglodontia
-Zeuglodontidae
-zeuglodontoid
-zeugma
-zeugmatic
-zeugmatically
-Zeugobranchia
-Zeugobranchiata
-zeunerite
-Zeus
-Zeuxian
-Zeuzera
-zeuzerian
-Zeuzeridae
-Zhmud
-ziamet
-ziara
-ziarat
-zibeline
-zibet
-zibethone
-zibetone
-zibetum
-ziega
-zieger
-zietrisikite
-ziffs
-zig
-ziganka
-ziggurat
-zigzag
-zigzagged
-zigzaggedly
-zigzaggedness
-zigzagger
-zigzaggery
-zigzaggy
-zigzagwise
-zihar
-zikurat
-Zilla
-zillah
-zimarra
-zimb
-zimbabwe
-zimbalon
-zimbaloon
-zimbi
-zimentwater
-zimme
-Zimmerwaldian
-Zimmerwaldist
-zimmi
-zimmis
-zimocca
-zinc
-Zincalo
-zincate
-zincic
-zincide
-zinciferous
-zincification
-zincify
-zincing
-zincite
-zincize
-zincke
-zincky
-zinco
-zincograph
-zincographer
-zincographic
-zincographical
-zincography
-zincotype
-zincous
-zincum
-zincuret
-zinfandel
-zing
-zingaresca
-zingel
-zingerone
-Zingiber
-Zingiberaceae
-zingiberaceous
-zingiberene
-zingiberol
-zingiberone
-zink
-zinkenite
-Zinnia
-zinnwaldite
-zinsang
-zinyamunga
-Zinzar
-Zinziberaceae
-zinziberaceous
-Zion
-Zionism
-Zionist
-Zionistic
-Zionite
-Zionless
-Zionward
-zip
-Zipa
-ziphian
-Ziphiidae
-Ziphiinae
-ziphioid
-Ziphius
-Zipper
-zipper
-zipping
-zippingly
-zippy
-Zips
-zira
-zirai
-Zirak
-Zirbanit
-zircite
-zircofluoride
-zircon
-zirconate
-zirconia
-zirconian
-zirconic
-zirconiferous
-zirconifluoride
-zirconium
-zirconofluoride
-zirconoid
-zirconyl
-Zirian
-Zirianian
-zirkelite
-zither
-zitherist
-Zizania
-Zizia
-Zizyphus
-zizz
-zloty
-Zmudz
-zo
-Zoa
-zoa
-zoacum
-Zoanthacea
-zoanthacean
-Zoantharia
-zoantharian
-zoanthid
-Zoanthidae
-Zoanthidea
-zoanthodeme
-zoanthodemic
-zoanthoid
-zoanthropy
-Zoanthus
-Zoarces
-zoarcidae
-zoaria
-zoarial
-Zoarite
-zoarium
-zobo
-zobtenite
-zocco
-zoccolo
-zodiac
-zodiacal
-zodiophilous
-zoea
-zoeaform
-zoeal
-zoeform
-zoehemera
-zoehemerae
-zoetic
-zoetrope
-zoetropic
-zogan
-zogo
-Zohak
-Zoharist
-Zoharite
-zoiatria
-zoiatrics
-zoic
-zoid
-zoidiophilous
-zoidogamous
-Zoilean
-Zoilism
-Zoilist
-zoisite
-zoisitization
-zoism
-zoist
-zoistic
-zokor
-Zolaesque
-Zolaism
-Zolaist
-Zolaistic
-Zolaize
-zoll
-zolle
-Zollernia
-zollpfund
-zolotink
-zolotnik
-zombi
-zombie
-zombiism
-zomotherapeutic
-zomotherapy
-zonal
-zonality
-zonally
-zonar
-Zonaria
-zonary
-zonate
-zonated
-zonation
-zone
-zoned
-zoneless
-zonelet
-zonelike
-zonesthesia
-Zongora
-zonic
-zoniferous
-zoning
-zonite
-Zonites
-zonitid
-Zonitidae
-Zonitoides
-zonochlorite
-zonociliate
-zonoid
-zonolimnetic
-zonoplacental
-Zonoplacentalia
-zonoskeleton
-Zonotrichia
-Zonta
-Zontian
-zonular
-zonule
-zonulet
-zonure
-zonurid
-Zonuridae
-zonuroid
-Zonurus
-zoo
-zoobenthos
-zooblast
-zoocarp
-zoocecidium
-zoochemical
-zoochemistry
-zoochemy
-Zoochlorella
-zoochore
-zoocoenocyte
-zoocultural
-zooculture
-zoocurrent
-zoocyst
-zoocystic
-zoocytial
-zoocytium
-zoodendria
-zoodendrium
-zoodynamic
-zoodynamics
-zooecia
-zooecial
-zooecium
-zooerastia
-zooerythrin
-zoofulvin
-zoogamete
-zoogamous
-zoogamy
-zoogene
-zoogenesis
-zoogenic
-zoogenous
-zoogeny
-zoogeographer
-zoogeographic
-zoogeographical
-zoogeographically
-zoogeography
-zoogeological
-zoogeologist
-zoogeology
-zoogloea
-zoogloeal
-zoogloeic
-zoogonic
-zoogonidium
-zoogonous
-zoogony
-zoograft
-zoografting
-zoographer
-zoographic
-zoographical
-zoographically
-zoographist
-zoography
-zooid
-zooidal
-zooidiophilous
-zooks
-zoolater
-zoolatria
-zoolatrous
-zoolatry
-zoolite
-zoolith
-zoolithic
-zoolitic
-zoologer
-zoologic
-zoological
-zoologically
-zoologicoarchaeologist
-zoologicobotanical
-zoologist
-zoologize
-zoology
-zoom
-zoomagnetic
-zoomagnetism
-zoomancy
-zoomania
-zoomantic
-zoomantist
-Zoomastigina
-Zoomastigoda
-zoomechanical
-zoomechanics
-zoomelanin
-zoometric
-zoometry
-zoomimetic
-zoomimic
-zoomorph
-zoomorphic
-zoomorphism
-zoomorphize
-zoomorphy
-zoon
-zoonal
-zoonerythrin
-zoonic
-zoonist
-zoonite
-zoonitic
-zoonomia
-zoonomic
-zoonomical
-zoonomist
-zoonomy
-zoonosis
-zoonosologist
-zoonosology
-zoonotic
-zoons
-zoonule
-zoopaleontology
-zoopantheon
-zooparasite
-zooparasitic
-zoopathological
-zoopathologist
-zoopathology
-zoopathy
-zooperal
-zooperist
-zoopery
-Zoophaga
-zoophagan
-Zoophagineae
-zoophagous
-zoopharmacological
-zoopharmacy
-zoophile
-zoophilia
-zoophilic
-zoophilism
-zoophilist
-zoophilite
-zoophilitic
-zoophilous
-zoophily
-zoophobia
-zoophobous
-zoophoric
-zoophorus
-zoophysical
-zoophysics
-zoophysiology
-Zoophyta
-zoophytal
-zoophyte
-zoophytic
-zoophytical
-zoophytish
-zoophytography
-zoophytoid
-zoophytological
-zoophytologist
-zoophytology
-zooplankton
-zooplanktonic
-zooplastic
-zooplasty
-zoopraxiscope
-zoopsia
-zoopsychological
-zoopsychologist
-zoopsychology
-zooscopic
-zooscopy
-zoosis
-zoosmosis
-zoosperm
-zoospermatic
-zoospermia
-zoospermium
-zoosphere
-zoosporange
-zoosporangia
-zoosporangial
-zoosporangiophore
-zoosporangium
-zoospore
-zoosporic
-zoosporiferous
-zoosporocyst
-zoosporous
-zootaxy
-zootechnic
-zootechnics
-zootechny
-zooter
-zoothecia
-zoothecial
-zoothecium
-zootheism
-zootheist
-zootheistic
-zootherapy
-zoothome
-zootic
-Zootoca
-zootomic
-zootomical
-zootomically
-zootomist
-zootomy
-zoototemism
-zootoxin
-zootrophic
-zootrophy
-zootype
-zootypic
-zooxanthella
-zooxanthellae
-zooxanthin
-zoozoo
-zopilote
-Zoque
-Zoquean
-Zoraptera
-zorgite
-zoril
-zorilla
-Zorillinae
-zorillo
-Zoroastrian
-Zoroastrianism
-Zoroastrism
-Zorotypus
-zorrillo
-zorro
-Zosma
-zoster
-Zostera
-Zosteraceae
-zosteriform
-Zosteropinae
-Zosterops
-Zouave
-zounds
-zowie
-Zoysia
-Zubeneschamali
-zuccarino
-zucchetto
-zucchini
-zudda
-zugtierlast
-zugtierlaster
-zuisin
-Zuleika
-Zulhijjah
-Zulinde
-Zulkadah
-Zulu
-Zuludom
-Zuluize
-zumatic
-zumbooruk
-Zuni
-Zunian
-zunyite
-zupanate
-Zutugil
-zuurveldt
-zuza
-zwanziger
-Zwieback
-zwieback
-Zwinglian
-Zwinglianism
-Zwinglianist
-zwitter
-zwitterion
-zwitterionic
-zyga
-zygadenine
-Zygadenus
-Zygaena
-zygaenid
-Zygaenidae
-zygal
-zygantra
-zygantrum
-zygapophyseal
-zygapophysis
-zygion
-zygite
-Zygnema
-Zygnemaceae
-Zygnemales
-Zygnemataceae
-zygnemataceous
-Zygnematales
-zygobranch
-Zygobranchia
-Zygobranchiata
-zygobranchiate
-Zygocactus
-zygodactyl
-Zygodactylae
-Zygodactyli
-zygodactylic
-zygodactylism
-zygodactylous
-zygodont
-zygolabialis
-zygoma
-zygomata
-zygomatic
-zygomaticoauricular
-zygomaticoauricularis
-zygomaticofacial
-zygomaticofrontal
-zygomaticomaxillary
-zygomaticoorbital
-zygomaticosphenoid
-zygomaticotemporal
-zygomaticum
-zygomaticus
-zygomaxillare
-zygomaxillary
-zygomorphic
-zygomorphism
-zygomorphous
-zygomycete
-Zygomycetes
-zygomycetous
-zygon
-zygoneure
-zygophore
-zygophoric
-Zygophyceae
-zygophyceous
-Zygophyllaceae
-zygophyllaceous
-Zygophyllum
-zygophyte
-zygopleural
-Zygoptera
-Zygopteraceae
-zygopteran
-zygopterid
-Zygopterides
-Zygopteris
-zygopteron
-zygopterous
-Zygosaccharomyces
-zygose
-zygosis
-zygosperm
-zygosphenal
-zygosphene
-zygosphere
-zygosporange
-zygosporangium
-zygospore
-zygosporic
-zygosporophore
-zygostyle
-zygotactic
-zygotaxis
-zygote
-zygotene
-zygotic
-zygotoblast
-zygotoid
-zygotomere
-zygous
-zygozoospore
-zymase
-zyme
-zymic
-zymin
-zymite
-zymogen
-zymogene
-zymogenesis
-zymogenic
-zymogenous
-zymoid
-zymologic
-zymological
-zymologist
-zymology
-zymolyis
-zymolysis
-zymolytic
-zymome
-zymometer
-zymomin
-zymophore
-zymophoric
-zymophosphate
-zymophyte
-zymoplastic
-zymoscope
-zymosimeter
-zymosis
-zymosterol
-zymosthenic
-zymotechnic
-zymotechnical
-zymotechnics
-zymotechny
-zymotic
-zymotically
-zymotize
-zymotoxic
-zymurgy
-Zyrenian
-Zyrian
-Zyryan
-zythem
-Zythia
-zythum
-Zyzomys
-Zyzzogeton
diff --git a/vespalib/src/tests/net/tls/direct_buffer_bio/CMakeLists.txt b/vespalib/src/tests/net/tls/direct_buffer_bio/CMakeLists.txt
new file mode 100644
index 00000000000..cbce4d3651f
--- /dev/null
+++ b/vespalib/src/tests/net/tls/direct_buffer_bio/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(vespalib_net_tls_direct_buffer_bio_test_app TEST
+ SOURCES
+ direct_buffer_bio_test.cpp
+ DEPENDS
+ vespalib
+)
+vespa_add_test(NAME vespalib_net_tls_direct_buffer_bio_test_app
+ COMMAND vespalib_net_tls_direct_buffer_bio_test_app)
+
diff --git a/vespalib/src/tests/net/tls/direct_buffer_bio/direct_buffer_bio_test.cpp b/vespalib/src/tests/net/tls/direct_buffer_bio/direct_buffer_bio_test.cpp
new file mode 100644
index 00000000000..134df9b17eb
--- /dev/null
+++ b/vespalib/src/tests/net/tls/direct_buffer_bio/direct_buffer_bio_test.cpp
@@ -0,0 +1,138 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/net/tls/impl/direct_buffer_bio.h>
+#include <vespa/vespalib/stllike/string.h>
+#include <vespa/vespalib/testkit/test_kit.h>
+#include <cassert>
+
+using namespace vespalib;
+using namespace vespalib::net::tls::impl;
+
+struct Fixture {
+ BioPtr mutable_bio;
+ BioPtr const_bio;
+ vespalib::string tmp_buf;
+
+ Fixture()
+ : mutable_bio(new_mutable_direct_buffer_bio()),
+ const_bio(new_const_direct_buffer_bio()),
+ tmp_buf('X', 64)
+ {
+ ASSERT_TRUE(mutable_bio && const_bio);
+ }
+};
+
+TEST_F("BIOs without associated buffers return zero pending", Fixture) {
+ EXPECT_EQUAL(0, BIO_pending(f.mutable_bio.get()));
+ EXPECT_EQUAL(0, BIO_pending(f.const_bio.get()));
+}
+
+TEST_F("Const BIO has initial pending equal to size of associated buffer", Fixture) {
+ vespalib::string to_read = "I sure love me some data";
+ ConstBufferViewGuard g(*f.const_bio, &to_read[0], to_read.size());
+ EXPECT_EQUAL(static_cast<int>(to_read.size()), BIO_pending(f.const_bio.get()));
+}
+
+TEST_F("Mutable BIO has initial pending of 0 with associated buffer (pending == written bytes)", Fixture) {
+ MutableBufferViewGuard g(*f.mutable_bio, &f.tmp_buf[0], f.tmp_buf.size());
+ EXPECT_EQUAL(0, BIO_pending(f.mutable_bio.get()));
+}
+
+TEST_F("Mutable BIO_write writes to associated buffer", Fixture) {
+ MutableBufferViewGuard g(*f.mutable_bio, &f.tmp_buf[0], f.tmp_buf.size());
+ vespalib::string to_write = "hello world!";
+ int ret = ::BIO_write(f.mutable_bio.get(), to_write.data(), static_cast<int>(to_write.size()));
+ EXPECT_EQUAL(static_cast<int>(to_write.size()), ret);
+ EXPECT_EQUAL(to_write, vespalib::stringref(f.tmp_buf.data(), to_write.size()));
+ EXPECT_EQUAL(static_cast<int>(to_write.size()), BIO_pending(f.mutable_bio.get()));
+}
+
+TEST_F("Mutable BIO_write moves write cursor per invocation", Fixture) {
+ MutableBufferViewGuard g(*f.mutable_bio, &f.tmp_buf[0], f.tmp_buf.size());
+ vespalib::string to_write = "hello world!";
+
+ int ret = ::BIO_write(f.mutable_bio.get(), to_write.data(), 3); // 'hel'
+ ASSERT_EQUAL(3, ret);
+ EXPECT_EQUAL(3, BIO_pending(f.mutable_bio.get()));
+ ret = ::BIO_write(f.mutable_bio.get(), to_write.data() + 3, 5); // 'lo wo'
+ ASSERT_EQUAL(5, ret);
+ EXPECT_EQUAL(8, BIO_pending(f.mutable_bio.get()));
+ ret = ::BIO_write(f.mutable_bio.get(), to_write.data() + 8, 4); // 'rld!'
+ ASSERT_EQUAL(4, ret);
+ EXPECT_EQUAL(12, BIO_pending(f.mutable_bio.get()));
+
+ EXPECT_EQUAL(to_write, vespalib::stringref(f.tmp_buf.data(), to_write.size()));
+}
+
+TEST_F("Const BIO_read reads from associated buffer", Fixture) {
+ vespalib::string to_read = "look at this fancy data!";
+ ConstBufferViewGuard g(*f.const_bio, &to_read[0], to_read.size());
+
+ int ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[0], static_cast<int>(f.tmp_buf.size()));
+ EXPECT_EQUAL(static_cast<int>(to_read.size()), ret);
+ EXPECT_EQUAL(ret, static_cast<int>(to_read.size()));
+
+ EXPECT_EQUAL(to_read, vespalib::stringref(f.tmp_buf.data(), to_read.size()));
+}
+
+TEST_F("Const BIO_read moves read cursor per invocation", Fixture) {
+ vespalib::string to_read = "look at this fancy data!";
+ ConstBufferViewGuard g(*f.const_bio, &to_read[0], to_read.size());
+
+ EXPECT_EQUAL(24, BIO_pending(f.const_bio.get()));
+ int ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[0], 8); // 'look at '
+ ASSERT_EQUAL(8, ret);
+ EXPECT_EQUAL(16, BIO_pending(f.const_bio.get()));
+ ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[8], 10); // 'this fancy'
+ ASSERT_EQUAL(10, ret);
+ EXPECT_EQUAL(6, BIO_pending(f.const_bio.get()));
+ ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[18], 20); // ' data!' (with extra destination space available)
+ ASSERT_EQUAL(6, ret);
+ EXPECT_EQUAL(0, BIO_pending(f.const_bio.get()));
+
+ EXPECT_EQUAL(to_read, vespalib::stringref(f.tmp_buf.data(), to_read.size()));
+}
+
+TEST_F("Const BIO read EOF returns -1 by default and sets BIO retry flag", Fixture) {
+ ConstBufferViewGuard g(*f.const_bio, "", 0);
+ int ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[0], static_cast<int>(f.tmp_buf.size()));
+ EXPECT_EQUAL(-1, ret);
+ EXPECT_NOT_EQUAL(0, BIO_should_retry(f.const_bio.get()));
+}
+
+TEST_F("Can invoke BIO_(set|get)_close", Fixture) {
+ (void)BIO_set_close(f.mutable_bio.get(), 0);
+ EXPECT_EQUAL(0, BIO_get_close(f.mutable_bio.get()));
+ (void)BIO_set_close(f.mutable_bio.get(), 1);
+ EXPECT_EQUAL(1, BIO_get_close(f.mutable_bio.get()));
+}
+
+TEST_F("BIO_write on const BIO returns failure", Fixture) {
+ vespalib::string data = "safe and cozy data :3";
+ vespalib::string to_read = data;
+ ConstBufferViewGuard g(*f.const_bio, &to_read[0], to_read.size());
+
+ int ret = ::BIO_write(f.const_bio.get(), "unsafe", 6);
+ EXPECT_EQUAL(-1, ret);
+ EXPECT_EQUAL(0, BIO_should_retry(f.mutable_bio.get()));
+ EXPECT_EQUAL(data, to_read);
+}
+
+TEST_F("BIO_read on mutable BIO returns failure", Fixture) {
+ MutableBufferViewGuard g(*f.mutable_bio, &f.tmp_buf[0], f.tmp_buf.size());
+
+ vespalib::string dummy_buf;
+ dummy_buf.reserve(128);
+ int ret = ::BIO_read(f.mutable_bio.get(), &dummy_buf[0], static_cast<int>(dummy_buf.size()));
+ EXPECT_EQUAL(-1, ret);
+ EXPECT_EQUAL(0, BIO_should_retry(f.mutable_bio.get()));
+}
+
+TEST_F("Can do read on zero-length nullptr const buffer", Fixture) {
+ ConstBufferViewGuard g(*f.const_bio, nullptr, 0);
+ int ret = ::BIO_read(f.const_bio.get(), &f.tmp_buf[0], static_cast<int>(f.tmp_buf.size()));
+ EXPECT_EQUAL(-1, ret);
+ EXPECT_NOT_EQUAL(0, BIO_should_retry(f.const_bio.get()));
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }
+
diff --git a/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp b/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp
index 4e8bf31e75e..e19d99ee305 100644
--- a/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp
+++ b/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp
@@ -1,8 +1,11 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/vespalib/data/smart_buffer.h>
#include <vespa/vespalib/net/tls/tls_context.h>
#include <vespa/vespalib/net/tls/transport_security_options.h>
#include <vespa/vespalib/net/tls/crypto_codec.h>
+#include <vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h>
+#include <vespa/vespalib/net/tls/impl/openssl_tls_context_impl.h>
#include <vespa/vespalib/test/make_tls_options_for_testing.h>
#include <iostream>
#include <stdlib.h>
@@ -30,104 +33,283 @@ const char* hs_state_to_str(HandshakeResult::State state) noexcept {
}
}
-void log_handshake_result(const char* mode, const HandshakeResult& res) {
+void print_handshake_result(const char* mode, const HandshakeResult& res) {
fprintf(stderr, "(handshake) %s consumed %zu peer bytes, wrote %zu peer bytes. State: %s\n",
mode, res.bytes_consumed, res.bytes_produced,
hs_state_to_str(res.state));
}
-void log_encode_result(const char* mode, const EncodeResult& res) {
+void print_encode_result(const char* mode, const EncodeResult& res) {
fprintf(stderr, "(encode) %s read %zu plaintext, wrote %zu cipher. State: %s\n",
mode, res.bytes_consumed, res.bytes_produced,
res.failed ? "Broken! D:" : "OK");
}
-void log_decode_result(const char* mode, const DecodeResult& res) {
+void print_decode_result(const char* mode, const DecodeResult& res) {
fprintf(stderr, "(decode) %s read %zu cipher, wrote %zu plaintext. State: %s\n",
mode, res.bytes_consumed, res.bytes_produced,
decode_state_to_str(res.state));
}
-bool complete_handshake(CryptoCodec& client, CryptoCodec& server) {
- // Not using vespalib::string here since it doesn't have erase(iter, length) implemented.
- std::string client_to_server_buf;
- std::string server_to_client_buf;
-
- HandshakeResult cli_res;
- HandshakeResult serv_res;
- while (!(cli_res.done() && serv_res.done())) {
- client_to_server_buf.resize(client.min_encode_buffer_size());
- server_to_client_buf.resize(server.min_encode_buffer_size());
-
- cli_res = client.handshake(server_to_client_buf.data(), serv_res.bytes_produced,
- client_to_server_buf.data(), client_to_server_buf.size());
- log_handshake_result("client", cli_res);
- server_to_client_buf.erase(server_to_client_buf.begin(), server_to_client_buf.begin() + cli_res.bytes_consumed);
-
- serv_res = server.handshake(client_to_server_buf.data(), cli_res.bytes_produced,
- server_to_client_buf.data(), server_to_client_buf.size());
- log_handshake_result("server", serv_res);
- client_to_server_buf.erase(client_to_server_buf.begin(), client_to_server_buf.begin() + serv_res.bytes_consumed);
-
- if (cli_res.failed() || serv_res.failed()) {
- return false;
+struct Fixture {
+ TransportSecurityOptions tls_opts;
+ std::unique_ptr<TlsContext> tls_ctx;
+ std::unique_ptr<CryptoCodec> client;
+ std::unique_ptr<CryptoCodec> server;
+ SmartBuffer client_to_server;
+ SmartBuffer server_to_client;
+
+ Fixture()
+ : tls_opts(vespalib::test::make_tls_options_for_testing()),
+ tls_ctx(TlsContext::create_default_context(tls_opts)),
+ client(create_openssl_codec(*tls_ctx, CryptoCodec::Mode::Client)),
+ server(create_openssl_codec(*tls_ctx, CryptoCodec::Mode::Server)),
+ client_to_server(64 * 1024),
+ server_to_client(64 * 1024)
+ {}
+
+ static TransportSecurityOptions create_options_without_own_peer_cert() {
+ auto source_opts = vespalib::test::make_tls_options_for_testing();
+ return TransportSecurityOptions(source_opts.ca_certs_pem(), "", "");
+ }
+
+ static std::unique_ptr<CryptoCodec> create_openssl_codec(
+ const TransportSecurityOptions& opts, CryptoCodec::Mode mode) {
+ auto ctx = TlsContext::create_default_context(opts);
+ return create_openssl_codec(*ctx, mode);
+ }
+
+ static std::unique_ptr<CryptoCodec> create_openssl_codec(
+ const TlsContext& ctx, CryptoCodec::Mode mode) {
+ return std::make_unique<impl::OpenSslCryptoCodecImpl>(
+ *dynamic_cast<const impl::OpenSslTlsContextImpl&>(ctx).native_context(), mode);
+ }
+
+ EncodeResult do_encode(CryptoCodec& codec, Output& buffer, vespalib::stringref plaintext) {
+ auto out = buffer.reserve(codec.min_encode_buffer_size());
+ auto enc_res = codec.encode(plaintext.data(), plaintext.size(), out.data, out.size);
+ buffer.commit(enc_res.bytes_produced);
+ return enc_res;
+ }
+
+ DecodeResult do_decode(CryptoCodec& codec, Input& buffer, vespalib::string& out,
+ size_t max_bytes_produced, size_t max_bytes_consumed) {
+ auto in = buffer.obtain();
+ out.resize(max_bytes_produced);
+ auto to_consume = std::min(in.size, max_bytes_consumed);
+ auto enc_res = codec.decode(in.data, to_consume, &out[0], out.size());
+ buffer.evict(enc_res.bytes_consumed);
+ out.resize(enc_res.bytes_produced);
+ return enc_res;
+ }
+
+ EncodeResult client_encode(vespalib::stringref plaintext) {
+ auto res = do_encode(*client, client_to_server, plaintext);
+ print_encode_result("client", res);
+ return res;
+ }
+
+ EncodeResult server_encode(vespalib::stringref plaintext) {
+ auto res = do_encode(*server, server_to_client, plaintext);
+ print_encode_result("server", res);
+ return res;
+ }
+
+ DecodeResult client_decode(vespalib::string& out, size_t max_bytes_produced,
+ size_t max_bytes_consumed = UINT64_MAX) {
+ auto res = do_decode(*client, server_to_client, out, max_bytes_produced, max_bytes_consumed);
+ print_decode_result("client", res);
+ return res;
+ }
+
+ DecodeResult server_decode(vespalib::string& out, size_t max_bytes_produced,
+ size_t max_bytes_consumed = UINT64_MAX) {
+ auto res = do_decode(*server, client_to_server, out, max_bytes_produced, max_bytes_consumed);
+ print_decode_result("server", res);
+ return res;
+ }
+
+ HandshakeResult do_handshake(CryptoCodec& codec, Input& input, Output& output) {
+ auto in = input.obtain();
+ auto out = output.reserve(codec.min_encode_buffer_size());
+ auto hs_result = codec.handshake(in.data, in.size, out.data, out.size);
+ input.evict(hs_result.bytes_consumed);
+ output.commit(hs_result.bytes_produced);
+ return hs_result;
+ }
+
+ bool handshake() {
+ HandshakeResult cli_res;
+ HandshakeResult serv_res;
+ while (!(cli_res.done() && serv_res.done())) {
+ cli_res = do_handshake(*client, server_to_client, client_to_server);
+ serv_res = do_handshake(*server, client_to_server, server_to_client);
+ print_handshake_result("client", cli_res);
+ print_handshake_result("server", serv_res);
+
+ if (cli_res.failed() || serv_res.failed()) {
+ return false;
+ }
}
+ return true;
}
- return true;
+};
+
+TEST_F("client and server can complete handshake", Fixture) {
+ EXPECT_TRUE(f.handshake());
+}
+
+TEST_F("clients and servers can send single data frame after handshake (not full duplex)", Fixture) {
+ ASSERT_TRUE(f.handshake());
+
+ vespalib::string client_plaintext = "Hellooo world! :D";
+ vespalib::string server_plaintext = "Goodbye moon~ :3";
+
+ ASSERT_FALSE(f.client_encode(client_plaintext).failed);
+ vespalib::string server_plaintext_out;
+ ASSERT_TRUE(f.server_decode(server_plaintext_out, 256).frame_decoded_ok());
+ EXPECT_EQUAL(client_plaintext, server_plaintext_out);
+
+ ASSERT_FALSE(f.server_encode(server_plaintext).failed);
+ vespalib::string client_plaintext_out;
+ ASSERT_TRUE(f.client_decode(client_plaintext_out, 256).frame_decoded_ok());
+ EXPECT_EQUAL(server_plaintext, client_plaintext_out);
+}
+
+TEST_F("clients and servers can send single data frame after handshake (full duplex)", Fixture) {
+ ASSERT_TRUE(f.handshake());
+
+ vespalib::string client_plaintext = "Greetings globe! :D";
+ vespalib::string server_plaintext = "Sayonara luna~ :3";
+
+ ASSERT_FALSE(f.client_encode(client_plaintext).failed);
+ ASSERT_FALSE(f.server_encode(server_plaintext).failed);
+
+ vespalib::string client_plaintext_out;
+ vespalib::string server_plaintext_out;
+ ASSERT_TRUE(f.server_decode(server_plaintext_out, 256).frame_decoded_ok());
+ EXPECT_EQUAL(client_plaintext, server_plaintext_out);
+ ASSERT_TRUE(f.client_decode(client_plaintext_out, 256).frame_decoded_ok());
+ EXPECT_EQUAL(server_plaintext, client_plaintext_out);
}
-TEST("client and server can complete handshake") {
- // TODO move to fixture
- auto tls_opts = vespalib::test::make_tls_options_for_testing();
- auto tls_ctx = TlsContext::create_default_context(tls_opts);
- auto client = CryptoCodec::create_default_codec(*tls_ctx, CryptoCodec::Mode::Client);
- auto server = CryptoCodec::create_default_codec(*tls_ctx, CryptoCodec::Mode::Server);
+TEST_F("short ciphertext read on decode() returns NeedsMorePeerData", Fixture) {
+ ASSERT_TRUE(f.handshake());
- EXPECT_TRUE(complete_handshake(*client, *server));
+ vespalib::string client_plaintext = "very secret foo";
+ ASSERT_FALSE(f.client_encode(client_plaintext).failed);
+
+ vespalib::string server_plaintext_out;
+ auto dec_res = f.server_decode(server_plaintext_out, 256, 10);
+ EXPECT_FALSE(dec_res.failed()); // Short read is not a failure mode
+ EXPECT_TRUE(dec_res.state == DecodeResult::State::NeedsMorePeerData);
}
-TEST("client can send single data frame to server after handshake") {
- // TODO move to fixture
- auto tls_opts = vespalib::test::make_tls_options_for_testing();
- auto tls_ctx = TlsContext::create_default_context(tls_opts);
- auto client = CryptoCodec::create_default_codec(*tls_ctx, CryptoCodec::Mode::Client);
- auto server = CryptoCodec::create_default_codec(*tls_ctx, CryptoCodec::Mode::Server);
+TEST_F("Encodes larger than max frame size are split up", Fixture) {
+ ASSERT_TRUE(f.handshake());
+ constexpr auto frame_size = impl::OpenSslCryptoCodecImpl::MaximumFramePlaintextSize;
+ vespalib::string client_plaintext(frame_size + 50, 'X');
+
+ auto enc_res = f.client_encode(client_plaintext);
+ ASSERT_FALSE(enc_res.failed);
+ ASSERT_EQUAL(frame_size, enc_res.bytes_consumed);
+ auto remainder = client_plaintext.substr(frame_size);
+
+ enc_res = f.client_encode(remainder);
+ ASSERT_FALSE(enc_res.failed);
+ ASSERT_EQUAL(50u, enc_res.bytes_consumed);
- ASSERT_TRUE(complete_handshake(*client, *server));
+ // Over on the server side, we expect to decode 2 matching frames
+ vespalib::string server_plaintext_out;
+ auto dec_res = f.server_decode(server_plaintext_out, frame_size);
+ ASSERT_TRUE(dec_res.frame_decoded_ok());
+ EXPECT_EQUAL(frame_size, dec_res.bytes_produced);
- std::string client_to_server_buf;
- client_to_server_buf.resize(client->min_encode_buffer_size());
+ vespalib::string remainder_out;
+ dec_res = f.server_decode(remainder_out, frame_size);
+ ASSERT_TRUE(dec_res.frame_decoded_ok());
+ EXPECT_EQUAL(50u, dec_res.bytes_produced);
- std::string client_plaintext = "Hellooo world! :D";
- auto cli_res = client->encode(client_plaintext.data(), client_plaintext.size(),
- client_to_server_buf.data(), client_to_server_buf.size());
- log_encode_result("client", cli_res);
+ EXPECT_EQUAL(client_plaintext, server_plaintext_out + remainder);
+}
+
+TEST_F("client without a certificate is rejected by server", Fixture) {
+ f.client = f.create_openssl_codec(f.create_options_without_own_peer_cert(), CryptoCodec::Mode::Client);
+ EXPECT_FALSE(f.handshake());
+}
- std::string server_plaintext_out;
- server_plaintext_out.resize(server->min_decode_buffer_size());
- auto serv_res = server->decode(client_to_server_buf.data(), cli_res.bytes_produced,
- server_plaintext_out.data(), server_plaintext_out.size());
- log_decode_result("server", serv_res);
+// Certificate note: public keys must be of the same type as those
+// used by vespalib::test::make_tls_options_for_testing(). In this case,
+// it's P-256 EC keys.
+// Also note: the Subject of this CA is different from the baseline
+// test CA to avoid validation errors. This also means the Issuer is
+// different for the below host certificate.
+constexpr const char* unknown_ca_pem = R"(-----BEGIN CERTIFICATE-----
+MIIBvzCCAWYCCQDEtg8a8Y5bBzAKBggqhkjOPQQDAjBoMQswCQYDVQQGEwJVUzEU
+MBIGA1UEBwwLTG9vbmV5VmlsbGUxDjAMBgNVBAoMBUFDTUUyMRcwFQYDVQQLDA5B
+Q01FIHRlc3QgQ0EgMjEaMBgGA1UEAwwRYWNtZTIuZXhhbXBsZS5jb20wHhcNMTgw
+OTI3MTM0NjA3WhcNNDYwMjEyMTM0NjA3WjBoMQswCQYDVQQGEwJVUzEUMBIGA1UE
+BwwLTG9vbmV5VmlsbGUxDjAMBgNVBAoMBUFDTUUyMRcwFQYDVQQLDA5BQ01FIHRl
+c3QgQ0EgMjEaMBgGA1UEAwwRYWNtZTIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIB
+BggqhkjOPQMBBwNCAAT88ScwGmpJ4NycxZBaqgSpw+IXfeIFR1oCGpxlLaKyrdpw
+Sl9SeuAyJfW4yNinzUeiuX+5hSrzly4yFrOIW/n6MAoGCCqGSM49BAMCA0cAMEQC
+IGNCYvQyZm/7GgTCi55y3RWK0tEE73ivEut9V0qvlqarAiBj8IDxv+Dm0ZFlB/8E
+EYn91JZORccsNSJkfIWqrGEjBA==
+-----END CERTIFICATE-----)";
- ASSERT_FALSE(cli_res.failed);
- ASSERT_FALSE(serv_res.failed());
+// Signed by unknown CA above
+constexpr const char* untrusted_host_cert_pem = R"(-----BEGIN CERTIFICATE-----
+MIIBrzCCAVYCCQDAZrFWZPw7djAKBggqhkjOPQQDAjBoMQswCQYDVQQGEwJVUzEU
+MBIGA1UEBwwLTG9vbmV5VmlsbGUxDjAMBgNVBAoMBUFDTUUyMRcwFQYDVQQLDA5B
+Q01FIHRlc3QgQ0EgMjEaMBgGA1UEAwwRYWNtZTIuZXhhbXBsZS5jb20wHhcNMTgw
+OTI3MTM0NjA3WhcNNDYwMjEyMTM0NjA3WjBYMQswCQYDVQQGEwJVUzEUMBIGA1UE
+BwwLTG9vbmV5VmlsbGUxGjAYBgNVBAoMEVJvYWQgUnVubmVyLCBJbmMuMRcwFQYD
+VQQDDA5yci5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMrp
+YgaA3CbDCaHa5CC6Vr7TLHEPNMkLNGnr2692a57ExWk1FMzNlZfaS79b67o6zxAu
+/HMiEHtseecH96UaGg4wCgYIKoZIzj0EAwIDRwAwRAIgOjiCql8VIe0/Ihyymr0a
+IforjEAMmPffLdHnMJzbya8CIBKWeTzSnG7/0PE0K73vqr+OrE5V31FjvzvYpvdT
+tSe+
+-----END CERTIFICATE-----)";
+
+constexpr const char* untrusted_host_key_pem = R"(-----BEGIN EC PARAMETERS-----
+BggqhkjOPQMBBw==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MHcCAQEEIHwh0Is5sf4emYv0UBsHSCCMI0XCV2RzhafIQ3j1BTK0oAoGCCqGSM49
+AwEHoUQDQgAEyuliBoDcJsMJodrkILpWvtMscQ80yQs0aevbr3ZrnsTFaTUUzM2V
+l9pLv1vrujrPEC78cyIQe2x55wf3pRoaDg==
+-----END EC PRIVATE KEY-----)";
+
+TEST_F("client with certificate signed by untrusted CA is rejected by server", Fixture) {
+ TransportSecurityOptions client_opts(unknown_ca_pem, untrusted_host_cert_pem, untrusted_host_key_pem);
+ f.client = f.create_openssl_codec(client_opts, CryptoCodec::Mode::Client);
+ EXPECT_FALSE(f.handshake());
+}
+
+TEST_F("server with certificate signed by untrusted CA is rejected by client", Fixture) {
+ TransportSecurityOptions server_opts(unknown_ca_pem, untrusted_host_cert_pem, untrusted_host_key_pem);
+ f.server = f.create_openssl_codec(server_opts, CryptoCodec::Mode::Server);
+ EXPECT_FALSE(f.handshake());
+}
- ASSERT_TRUE(serv_res.state == DecodeResult::State::OK);
- std::string data_received(server_plaintext_out.data(), serv_res.bytes_produced);
- EXPECT_EQUAL(client_plaintext, data_received);
+TEST_F("Can specify multiple trusted CA certs in transport options", Fixture) {
+ auto& base_opts = f.tls_opts;
+ auto multi_ca_pem = base_opts.ca_certs_pem() + "\n" + unknown_ca_pem;
+ TransportSecurityOptions multi_ca_using_ca_1(multi_ca_pem, untrusted_host_cert_pem, untrusted_host_key_pem);
+ TransportSecurityOptions multi_ca_using_ca_2(multi_ca_pem, base_opts.cert_chain_pem(), base_opts.private_key_pem());
+ // Let client be signed by CA 1, server by CA 2. Both have the two CAs in their trust store
+ // so this should allow for a successful handshake.
+ f.client = f.create_openssl_codec(multi_ca_using_ca_1, CryptoCodec::Mode::Client);
+ f.server = f.create_openssl_codec(multi_ca_using_ca_2, CryptoCodec::Mode::Server);
+ EXPECT_TRUE(f.handshake());
}
/*
* TODO tests:
- * - full duplex read/write
- * - read and write of > frame size data
* - handshakes with multi frame writes
* - completed handshake with pipelined data frame
- * - short ciphertext reads on decode
* - short plaintext writes on decode (.. if we even want to support this..)
- * - short ciphertext write on encode
- * - peer certificate validation on server
- * - peer certificate validation on client
+ * - short ciphertext write on encode (.. if we even want to support this..)
* - detection of peer shutdown session
*/
diff --git a/vespalib/src/tests/net/tls/protocol_snooping/CMakeLists.txt b/vespalib/src/tests/net/tls/protocol_snooping/CMakeLists.txt
new file mode 100644
index 00000000000..1489859fe48
--- /dev/null
+++ b/vespalib/src/tests/net/tls/protocol_snooping/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(vespalib_net_tls_protocol_snooping_test_app TEST
+ SOURCES
+ protocol_snooping_test.cpp
+ DEPENDS
+ vespalib
+)
+vespa_add_test(NAME vespalib_net_tls_protocol_snooping_test_app COMMAND vespalib_net_tls_protocol_snooping_test_app)
+
diff --git a/vespalib/src/tests/net/tls/protocol_snooping/protocol_snooping_test.cpp b/vespalib/src/tests/net/tls/protocol_snooping/protocol_snooping_test.cpp
new file mode 100644
index 00000000000..2d203047835
--- /dev/null
+++ b/vespalib/src/tests/net/tls/protocol_snooping/protocol_snooping_test.cpp
@@ -0,0 +1,78 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/vespalib/net/tls/protocol_snooping.h>
+
+using namespace vespalib;
+using namespace vespalib::net::tls::snooping;
+
+TEST("min_header_bytes_to_observe() is 8") {
+ EXPECT_EQUAL(8u, min_header_bytes_to_observe());
+}
+
+TlsSnoopingResult do_snoop(const unsigned char* buf) {
+ return snoop_client_hello_header(reinterpret_cast<const char*>(buf));
+}
+
+TEST("Well-formed TLSv1.0 packet returns ProbablyTls") {
+ const unsigned char buf[] = { 22, 3, 1, 10, 255, 1, 0, 10 };
+ EXPECT_EQUAL(TlsSnoopingResult::ProbablyTls, do_snoop(buf));
+}
+
+TEST("Well-formed TLSv1.2 packet returns ProbablyTls") {
+ const unsigned char buf[] = { 22, 3, 3, 10, 255, 1, 0, 10 };
+ EXPECT_EQUAL(TlsSnoopingResult::ProbablyTls, do_snoop(buf));
+}
+
+TEST("Mismatching handshake header byte 1 returns HandshakeMismatch") {
+ const unsigned char buf[] = { 23, 3, 1, 10, 255, 1, 0, 10 };
+ EXPECT_EQUAL(TlsSnoopingResult::HandshakeMismatch, do_snoop(buf));
+}
+
+TEST("Mismatching major version byte returns ProtocolVersionMismatch") {
+ const unsigned char buf[] = { 22, 2, 1, 10, 255, 1, 0, 10 };
+ EXPECT_EQUAL(TlsSnoopingResult::ProtocolVersionMismatch, do_snoop(buf));
+}
+
+TEST("Mismatching minor version byte returns ProtocolVersionMismatch") {
+ const unsigned char buf[] = { 22, 3, 0, 10, 255, 1, 0, 10 };
+ EXPECT_EQUAL(TlsSnoopingResult::ProtocolVersionMismatch, do_snoop(buf));
+}
+
+TEST("Oversized record returns RecordSizeRfcViolation") {
+ const unsigned char buf1[] = { 22, 3, 1, 255, 255, 1, 0, 10 }; // 64k
+ // ^^^^^^^^ big endian record length
+ EXPECT_EQUAL(TlsSnoopingResult::RecordSizeRfcViolation, do_snoop(buf1));
+
+ const unsigned char buf2[] = { 22, 3, 1, 72, 1, 1, 0, 10 }; // 18K+1
+ EXPECT_EQUAL(TlsSnoopingResult::RecordSizeRfcViolation, do_snoop(buf2));
+}
+
+TEST("Undersized record returns RecordSizeRfcViolation") {
+ const unsigned char buf1[] = { 22, 3, 1, 0, 3, 1, 0, 0 };
+ EXPECT_EQUAL(TlsSnoopingResult::RecordSizeRfcViolation, do_snoop(buf1));
+}
+
+TEST("Non-ClientHello handshake record returns RecordNotClientHello") {
+ const unsigned char buf[] = { 22, 3, 1, 10, 255, 2, 0, 10 };
+ // ^ 1 == ClientHello
+ EXPECT_EQUAL(TlsSnoopingResult::RecordNotClientHello, do_snoop(buf));
+}
+
+TEST("Oversized or fragmented ClientHello record returns ClientHelloRecordTooBig") {
+ const unsigned char buf[] = { 22, 3, 1, 10, 255, 1, 1, 10 };
+ // ^ MSB of 24-bit record length
+ EXPECT_EQUAL(TlsSnoopingResult::ClientHelloRecordTooBig, do_snoop(buf));
+}
+
+TEST("Expected ClientHello record size mismatch returns ExpectedRecordSizeMismatch") {
+ const unsigned char buf[] = { 22, 3, 1, 10, 2, 1, 0, 10 };
+ // ^^ bits [8,16) of record length, should be 9
+ EXPECT_EQUAL(TlsSnoopingResult::ExpectedRecordSizeMismatch, do_snoop(buf));
+}
+
+TEST("Valid ClientHello record size with LSB < 4 returns ProbablyTls") {
+ const unsigned char buf[] = { 22, 3, 1, 10, 3, 1, 0, 9 };
+ EXPECT_EQUAL(TlsSnoopingResult::ProbablyTls, do_snoop(buf));
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/vespalib/src/tests/stllike/hash_test.cpp b/vespalib/src/tests/stllike/hash_test.cpp
index 366111cad0d..e7fe729c1ba 100644
--- a/vespalib/src/tests/stllike/hash_test.cpp
+++ b/vespalib/src/tests/stllike/hash_test.cpp
@@ -29,6 +29,14 @@ namespace {
};
}
+TEST("test that hashValue gives expected response")
+{
+ const char * s("abcdefghi");
+ EXPECT_EQUAL(7045194595191919248ul, vespalib::hashValue(s));
+ EXPECT_EQUAL(vespalib::hashValue(s), vespalib::hashValue(s, strlen(s)));
+ EXPECT_NOT_EQUAL(vespalib::hashValue(s), vespalib::hashValue(s, strlen(s)-1));
+}
+
TEST("test hash set with custom type and hash function")
{
const size_t testSize(2000);
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
index 254a9b213ba..d45b0cea1c5 100644
--- a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
@@ -9,9 +9,13 @@
#include <vespa/vespalib/net/tls/transport_security_options.h>
#include <vespa/vespalib/net/tls/transport_security_options_reading.h>
#include <vespa/vespalib/net/tls/tls_crypto_engine.h>
+#include <vespa/vespalib/net/tls/maybe_tls_crypto_engine.h>
#include <vespa/vespalib/data/smart_buffer.h>
#include <assert.h>
+#include <vespa/log/log.h>
+LOG_SETUP(".vespalib.net.crypto_engine");
+
namespace vespalib {
namespace {
@@ -172,8 +176,22 @@ CryptoEngine::SP create_default_crypto_engine() {
if (cfg_file.empty()) {
return std::make_shared<NullCryptoEngine>();
}
+ LOG(debug, "Using TLS crypto engine with config file '%s'", cfg_file.c_str());
auto tls_opts = net::tls::read_options_from_json_file(cfg_file);
- return std::make_shared<TlsCryptoEngine>(*tls_opts);
+ auto tls = std::make_shared<TlsCryptoEngine>(*tls_opts);
+ env = getenv("VESPA_TLS_INSECURE_MIXED_MODE");
+ vespalib::string mixed_mode = env ? env : "";
+ if (mixed_mode == "plaintext_client_mixed_server") {
+ LOG(debug, "tls insecure mixed-mode activated: plaintext client, mixed server");
+ return std::make_shared<MaybeTlsCryptoEngine>(std::move(tls), false);
+ } else if (mixed_mode == "tls_client_mixed_server") {
+ LOG(debug, "tls insecure mixed-mode activated: tls client, mixed server");
+ return std::make_shared<MaybeTlsCryptoEngine>(std::move(tls), true);
+ } else if (!mixed_mode.empty()) {
+ LOG(warning, "bad tls insecure mixed-mode specified: '%s' (ignoring)",
+ mixed_mode.c_str());
+ }
+ return tls;
}
} // namespace vespalib::<unnamed>
diff --git a/vespalib/src/vespa/vespalib/net/tls/CMakeLists.txt b/vespalib/src/vespa/vespalib/net/tls/CMakeLists.txt
index 2d34a3e1c80..87b7cff1c13 100644
--- a/vespalib/src/vespa/vespalib/net/tls/CMakeLists.txt
+++ b/vespalib/src/vespa/vespalib/net/tls/CMakeLists.txt
@@ -4,8 +4,12 @@ vespa_add_library(vespalib_vespalib_net_tls OBJECT
crypto_codec.cpp
crypto_codec_adapter.cpp
crypto_exception.cpp
+ maybe_tls_crypto_engine.cpp
+ maybe_tls_crypto_socket.cpp
+ protocol_snooping.cpp
tls_context.cpp
tls_crypto_engine.cpp
+ tls_crypto_socket.cpp
transport_security_options.cpp
transport_security_options_reading.cpp
DEPENDS
diff --git a/vespalib/src/vespa/vespalib/net/tls/crypto_codec.h b/vespalib/src/vespa/vespalib/net/tls/crypto_codec.h
index 6e690c809a5..2df2c9f4741 100644
--- a/vespalib/src/vespa/vespalib/net/tls/crypto_codec.h
+++ b/vespalib/src/vespa/vespalib/net/tls/crypto_codec.h
@@ -43,6 +43,7 @@ struct DecodeResult {
State state = State::Failed;
bool failed() const noexcept { return (state == State::Failed); }
+ bool frame_decoded_ok() const noexcept { return (state == State::OK); }
};
class TlsContext;
diff --git a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
index 494919f449f..28aede69d22 100644
--- a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
@@ -56,6 +56,16 @@ CryptoCodecAdapter::flush_all()
return res;
}
+void
+CryptoCodecAdapter::inject_read_data(const char *buf, size_t len)
+{
+ if (len > 0) {
+ auto dst = _input.reserve(len);
+ memcpy(dst.data, buf, len);
+ _input.commit(len);
+ }
+}
+
CryptoSocket::HandshakeResult
CryptoCodecAdapter::handshake()
{
diff --git a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.h b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.h
index f17693cabff..af2db3525d3 100644
--- a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.h
+++ b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.h
@@ -2,7 +2,7 @@
#pragma once
-#include <vespa/vespalib/net/crypto_socket.h>
+#include "tls_crypto_socket.h"
#include <vespa/vespalib/net/socket_handle.h>
#include <vespa/vespalib/data/smart_buffer.h>
#include "crypto_codec.h"
@@ -12,11 +12,8 @@ namespace vespalib::net::tls {
/**
* Component adapting an underlying CryptoCodec to the CryptoSocket
* interface by performing buffer and socket management.
- *
- * NOTE: initial implementation is for functionality/proof-of-concept
- * purposes, not performance.
**/
-class CryptoCodecAdapter : public CryptoSocket
+class CryptoCodecAdapter : public TlsCryptoSocket
{
private:
SmartBuffer _input;
@@ -34,6 +31,7 @@ private:
public:
CryptoCodecAdapter(SocketHandle socket, std::unique_ptr<CryptoCodec> codec)
: _input(64 * 1024), _output(64 * 1024), _socket(std::move(socket)), _codec(std::move(codec)) {}
+ void inject_read_data(const char *buf, size_t len) override;
int get_fd() const override { return _socket.get(); }
HandshakeResult handshake() override;
size_t min_read_buffer_size() const override { return _codec->min_decode_buffer_size(); }
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/CMakeLists.txt b/vespalib/src/vespa/vespalib/net/tls/impl/CMakeLists.txt
index a5a8e8d3eb9..6129fde3c6c 100644
--- a/vespalib/src/vespa/vespalib/net/tls/impl/CMakeLists.txt
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/CMakeLists.txt
@@ -1,6 +1,7 @@
# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
vespa_add_library(vespalib_vespalib_net_tls_impl OBJECT
SOURCES
+ direct_buffer_bio.cpp
openssl_tls_context_impl.cpp
openssl_crypto_codec_impl.cpp
DEPENDS
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.cpp b/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.cpp
new file mode 100644
index 00000000000..614722a9769
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.cpp
@@ -0,0 +1,418 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include "direct_buffer_bio.h"
+#include <vespa/vespalib/net/tls/crypto_exception.h>
+#include <utility>
+#include <cassert>
+
+#include <vespa/vespalib/util/backtrace.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP(".vespalib.net.tls.impl.direct_buffer_bio");
+
+/*
+ * The official OpenSSL docs are basically devoid of information on how to write
+ * your own BIOs, so most of the information used to implement our custom BIOs
+ * is gleaned from other implementations and by reading the OpenSSL source code.
+ *
+ * Primary references used for implementation:
+ * - https://github.com/openssl/openssl/blob/master/crypto/bio/bss_mem.c
+ * - https://github.com/indutny/uv_ssl_t/blob/master/src/bio.c
+ */
+
+namespace vespalib::net::tls::impl {
+
+namespace {
+
+int buffer_bio_init(::BIO* bio);
+int buffer_bio_destroy(::BIO* bio);
+int mutable_buffer_bio_write(::BIO* bio, const char* src_buf, int len);
+int const_buffer_bio_write(::BIO* bio, const char* src_buf, int len);
+int mutable_buffer_bio_read(::BIO* bio, char* dest_buf, int len);
+int const_buffer_bio_read(::BIO* bio, char* dest_buf, int len);
+long mutable_buffer_bio_ctrl(::BIO* bio, int cmd, long num, void* ptr);
+long const_buffer_bio_ctrl(::BIO* bio, int cmd, long num, void* ptr);
+
+// How to wrangle BIOs and their methods is completely changed after OpenSSL 1.1
+// For older versions, we must directly create a struct with callback fields set
+// and can access the BIO fields directly. In 1.1 and beyond everything is hidden
+// by indirection functions (these are _not_ available in prior versions).
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
+
+#if !defined(BIO_TYPE_START)
+# define BIO_TYPE_START 128 // Constant hoisted from OpenSSL >= 1.1.0
+#endif
+
+const ::BIO_METHOD mutable_buf_method_instance = {
+ (BIO_TYPE_START + 1) | BIO_TYPE_SOURCE_SINK, // BIO_TYPE_SOURCE_SINK sets high bits, not low bits, so no clobbering
+ "mutable direct buffer access BIO",
+ mutable_buffer_bio_write, // write func
+ mutable_buffer_bio_read, // read func
+ nullptr, // puts func
+ nullptr, // gets func
+ mutable_buffer_bio_ctrl, // ctrl func
+ buffer_bio_init, // init func
+ buffer_bio_destroy, // destroy func
+ nullptr, // callback ctrl func
+};
+
+const ::BIO_METHOD const_buf_method_instance = {
+ (BIO_TYPE_START + 2) | BIO_TYPE_SOURCE_SINK,
+ "const direct buffer access BIO",
+ const_buffer_bio_write, // write func
+ const_buffer_bio_read, // read func
+ nullptr, // puts func
+ nullptr, // gets func
+ const_buffer_bio_ctrl, // ctrl func
+ buffer_bio_init, // init func
+ buffer_bio_destroy, // destroy func
+ nullptr, // callback ctrl func
+};
+
+struct BioMethodWrapper {
+ const ::BIO_METHOD* method; // Global instance
+ int type_index;
+};
+
+BioMethodWrapper mutable_buf_method() {
+ return {&mutable_buf_method_instance, mutable_buf_method_instance.type};
+}
+
+BioMethodWrapper const_buf_method() {
+ return {&const_buf_method_instance, const_buf_method_instance.type};
+}
+
+void set_bio_data(::BIO& bio, void* ptr) {
+ bio.ptr = ptr;
+}
+
+void* get_bio_data(::BIO& bio) {
+ return bio.ptr;
+}
+
+void set_bio_shutdown(::BIO& bio, int shutdown) {
+ bio.shutdown = shutdown;
+}
+
+int get_bio_shutdown(::BIO& bio) {
+ return bio.shutdown;
+}
+
+void set_bio_init(::BIO& bio, int init) {
+ bio.init = init;
+}
+
+#else // OpenSSL 1.1 and beyond
+
+struct BioMethodDeleter {
+ void operator()(::BIO_METHOD* meth) const noexcept {
+ ::BIO_meth_free(meth);
+ }
+};
+using BioMethodPtr = std::unique_ptr<::BIO_METHOD, BioMethodDeleter>;
+
+struct BioMethodWrapper {
+ BioMethodPtr method;
+ int type_index;
+};
+
+struct BioMethodParams {
+ const char* bio_name;
+ int (*bio_write)(::BIO*, const char*, int);
+ int (*bio_read)(::BIO*, char*, int);
+ long (*bio_ctrl)(::BIO*, int, long, void*);
+};
+
+BioMethodWrapper create_bio_method(const BioMethodParams& params) {
+ int type_index = ::BIO_get_new_index() | BIO_TYPE_SOURCE_SINK;
+ if (type_index == -1) {
+ throw CryptoException("BIO_get_new_index");
+ }
+ BioMethodPtr bm(::BIO_meth_new(type_index, params.bio_name));
+ if (!::BIO_meth_set_create(bm.get(), buffer_bio_init) ||
+ !::BIO_meth_set_destroy(bm.get(), buffer_bio_destroy) ||
+ !::BIO_meth_set_write(bm.get(), params.bio_write) ||
+ !::BIO_meth_set_read(bm.get(), params.bio_read) ||
+ !::BIO_meth_set_ctrl(bm.get(), params.bio_ctrl)) {
+ throw CryptoException("Failed to set BIO_METHOD callback");
+ }
+ return {std::move(bm), type_index};
+}
+
+BioMethodWrapper create_mutable_bio_method() {
+ return create_bio_method({"mutable direct buffer access BIO", mutable_buffer_bio_write,
+ mutable_buffer_bio_read, mutable_buffer_bio_ctrl});
+}
+
+BioMethodWrapper create_const_bio_method() {
+ return create_bio_method({"const direct buffer access BIO", const_buffer_bio_write,
+ const_buffer_bio_read, const_buffer_bio_ctrl});
+}
+
+const BioMethodWrapper& mutable_buf_method() {
+ static BioMethodWrapper wrapper = create_mutable_bio_method();
+ return wrapper;
+}
+
+const BioMethodWrapper& const_buf_method() {
+ static BioMethodWrapper wrapper = create_const_bio_method();
+ return wrapper;
+}
+
+void set_bio_data(::BIO& bio, void* ptr) {
+ ::BIO_set_data(&bio, ptr);
+}
+
+void set_bio_shutdown(::BIO& bio, int shutdown) {
+ ::BIO_set_shutdown(&bio, shutdown);
+}
+
+int get_bio_shutdown(::BIO& bio) {
+ return ::BIO_get_shutdown(&bio);
+}
+
+void set_bio_init(::BIO& bio, int init) {
+ ::BIO_set_init(&bio, init);
+}
+
+void* get_bio_data(::BIO& bio) {
+ return ::BIO_get_data(&bio);
+}
+
+#endif
+
+BioPtr new_direct_buffer_bio(const ::BIO_METHOD& method) {
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
+ auto* bio = ::BIO_new(const_cast<::BIO_METHOD*>(&method)); // ugh, older OpenSSL const-ness is a disaster.
+#else
+ auto* bio = ::BIO_new(&method);
+#endif
+ if (!bio) {
+ return BioPtr();
+ }
+ set_bio_data(*bio, nullptr); // Just to make sure this isn't set yet.
+ return BioPtr(bio);
+}
+
+} // anon ns
+
+BioPtr new_mutable_direct_buffer_bio() {
+ return new_direct_buffer_bio(*mutable_buf_method().method);
+}
+
+BioPtr new_const_direct_buffer_bio() {
+ return new_direct_buffer_bio(*const_buf_method().method);
+}
+
+namespace {
+
+int buffer_bio_init(::BIO* bio) {
+ // "shutdown" here means "should BIO close underlying resource?". Since
+ // our BIOs don't ever allocate anything we just use this value as something
+ // that can be set by BIO_set_close() and read by BIO_get_close().
+ set_bio_shutdown(*bio, 1);
+ set_bio_init(*bio, 1);
+ return 1;
+}
+
+int buffer_bio_destroy(::BIO* bio) {
+ set_bio_data(*bio, nullptr); // We don't own anything.
+ return 1;
+}
+
+int mutable_buffer_bio_write(::BIO* bio, const char* src_buf, int len) {
+ LOG_ASSERT(len >= 0);
+
+ BIO_clear_retry_flags(bio);
+ if (!get_bio_data(*bio)) {
+ // TODO replace with assertion once we _know_ it should never happen in practice..!
+ LOG(error, "Got buffer write of length %d to a non-bound mutable BIO!", len);
+ LOG(error, "%s", getStackTrace(0).c_str());
+ return -1;
+ }
+
+ const auto sz_len = static_cast<size_t>(len);
+ if (sz_len == 0) {
+ return 0;
+ }
+ auto* dest_buf = static_cast<MutableBufferView*>(get_bio_data(*bio));
+ // sz_len is <= INT32_MAX while pos/size are size_t, so no overflow on 64-bit
+ // since the caller enforces that buffer sizes are < INT32_MAX.
+ if (dest_buf->pos + sz_len > dest_buf->size) {
+ return -1;
+ }
+ // Source and destination buffers should never overlap.
+ memcpy(dest_buf->buffer + dest_buf->pos, src_buf, sz_len);
+ dest_buf->pos += sz_len;
+
+ return len;
+}
+
+int const_buffer_bio_write(::BIO* bio, const char* src_buf, int len) {
+ (void) bio;
+ (void) src_buf;
+ // Const buffers are read only!
+ LOG(error, "BIO_write() of length %d called on read-only BIO", len);
+ return -1;
+}
+
+int mutable_buffer_bio_read(::BIO* bio, char* dest_buf, int len) {
+ (void) bio;
+ (void) dest_buf;
+ // Mutable buffers are write only!
+ LOG(error, "BIO_read() of length %d called on write-only BIO", len);
+ return -1;
+}
+
+int const_buffer_bio_read(::BIO* bio, char* dest_buf, int len) {
+ LOG_ASSERT(len >= 0);
+
+ BIO_clear_retry_flags(bio);
+ if (!get_bio_data(*bio)) {
+ // TODO replace with assertion once we _know_ it should never happen in practice..!
+ LOG(error, "Got buffer read of length %d to a non-bound const BIO!", len);
+ LOG(error, "%s", getStackTrace(0).c_str());
+ return -1;
+ }
+
+ const auto sz_len = static_cast<size_t>(len);
+ auto* src_buf = static_cast<ConstBufferView*>(get_bio_data(*bio));
+ const auto readable = std::min(sz_len, src_buf->size - src_buf->pos);
+ if (readable != 0) {
+ // Source and destination buffers should never overlap.
+ memcpy(dest_buf, src_buf->buffer + src_buf->pos, readable);
+ src_buf->pos += readable;
+ return static_cast<int>(readable);
+ }
+ // Since a BIO might point to different buffers between SSL_* invocations,
+ // we want OpenSSL to retry later. _Not_ setting this or not returning -1 will
+ // cause OpenSSL to return SSL_ERROR_SYSCALL. Ask me how I know.
+ BIO_set_retry_read(bio);
+ return -1;
+}
+
+template <typename BufferType>
+long do_buffer_bio_ctrl(::BIO* bio, int cmd, long num, void* ptr) {
+ const auto* buf_view = static_cast<const BufferType*>(get_bio_data(*bio));
+ long ret = 1;
+
+ switch (cmd) {
+ case BIO_CTRL_EOF: // Is the buffer exhausted?
+ if (buf_view != nullptr) {
+ ret = static_cast<int>(buf_view->pos == buf_view->size);
+ }
+ break;
+ case BIO_CTRL_INFO: // How much data remains in buffer?
+ ret = (buf_view != nullptr) ? buf_view->pending() : 0;
+ if (ptr) {
+ *static_cast<void**>(ptr) = nullptr; // Semantics: who knows? But everyone's doing it!
+ }
+ break;
+ case BIO_CTRL_GET_CLOSE: // Is the BIO in auto close mode?
+ ret = get_bio_shutdown(*bio);
+ break;
+ case BIO_CTRL_SET_CLOSE: // Should the BIO be in auto close mode? Spoiler alert: we don't really care.
+ set_bio_shutdown(*bio, static_cast<int>(num));
+ break;
+ case BIO_CTRL_WPENDING:
+ ret = 0;
+ break;
+ case BIO_CTRL_PENDING:
+ ret = (buf_view != nullptr) ? buf_view->pending() : 0;
+ break;
+ case BIO_CTRL_DUP:
+ case BIO_CTRL_FLUSH:
+ ret = 1; // Same as memory OpenSSL BIO ctrl func.
+ break;
+ case BIO_CTRL_RESET:
+ case BIO_C_SET_BUF_MEM:
+ case BIO_C_GET_BUF_MEM_PTR:
+ case BIO_C_SET_BUF_MEM_EOF_RETURN:
+ LOG_ASSERT(!"Unsupported BIO control function called");
+ case BIO_CTRL_PUSH:
+ case BIO_CTRL_POP:
+ default:
+ ret = 0; // Not supported (but be gentle, since it's actually invoked)
+ break;
+ }
+ return ret;
+}
+
+long mutable_buffer_bio_ctrl(::BIO* bio, int cmd, long num, void* ptr) {
+ return do_buffer_bio_ctrl<MutableBufferView>(bio, cmd, num, ptr);
+}
+
+long const_buffer_bio_ctrl(::BIO* bio, int cmd, long num, void* ptr) {
+ return do_buffer_bio_ctrl<ConstBufferView>(bio, cmd, num, ptr);
+}
+
+MutableBufferView mutable_buffer_view_of(char* buffer, size_t sz) {
+ return {buffer, sz, 0, 0};
+}
+
+ConstBufferView const_buffer_view_of(const char* buffer, size_t sz) {
+ return {buffer, sz, 0};
+}
+
+[[maybe_unused]] bool is_const_bio(::BIO& bio) noexcept {
+ return (::BIO_method_type(&bio) == const_buf_method().type_index);
+}
+
+[[maybe_unused]] bool is_mutable_bio(::BIO& bio) noexcept {
+ return (::BIO_method_type(&bio) == mutable_buf_method().type_index);
+}
+
+// There is a cute little bug in BIO_meth_new() present in v1.1.0h which
+// causes the provided BIO method type to not be actually written into the
+// target BIO_METHOD instance. This means that any assertions that check the
+// BIO's method type on this version is doomed to fail.
+// See https://github.com/openssl/openssl/pull/5812
+#if ((OPENSSL_VERSION_NUMBER & 0xfffffff0L) != 0x10100080L)
+# define WHEN_NO_OPENSSL_BIO_TYPE_BUG(expr) expr
+#else
+# define WHEN_NO_OPENSSL_BIO_TYPE_BUG(expr)
+#endif
+
+void set_bio_mutable_buffer_view(::BIO& bio, MutableBufferView* view) {
+ WHEN_NO_OPENSSL_BIO_TYPE_BUG(LOG_ASSERT(is_mutable_bio(bio)));
+ set_bio_data(bio, view);
+}
+
+void set_bio_const_buffer_view(::BIO& bio, ConstBufferView* view) {
+ WHEN_NO_OPENSSL_BIO_TYPE_BUG(LOG_ASSERT(is_const_bio(bio)));
+ set_bio_data(bio, view);
+}
+
+// Precondition: bio must have been created by a call to either
+// new_mutable_direct_buffer_bio() or new_const_direct_buffer_bio()
+void unset_bio_buffer_view(::BIO& bio) {
+ WHEN_NO_OPENSSL_BIO_TYPE_BUG(LOG_ASSERT(is_mutable_bio(bio) || is_const_bio(bio)));
+ set_bio_data(bio, nullptr);
+}
+
+} // anon ns
+
+ConstBufferViewGuard::ConstBufferViewGuard(::BIO& bio, const char* buffer, size_t sz) noexcept
+ : _bio(bio),
+ _view(const_buffer_view_of(buffer, sz))
+{
+ WHEN_NO_OPENSSL_BIO_TYPE_BUG(LOG_ASSERT(is_const_bio(bio)));
+ set_bio_const_buffer_view(bio, &_view);
+}
+
+ConstBufferViewGuard::~ConstBufferViewGuard() {
+ unset_bio_buffer_view(_bio);
+}
+
+MutableBufferViewGuard::MutableBufferViewGuard(::BIO& bio, char* buffer, size_t sz) noexcept
+ : _bio(bio),
+ _view(mutable_buffer_view_of(buffer, sz))
+{
+ WHEN_NO_OPENSSL_BIO_TYPE_BUG(LOG_ASSERT(is_mutable_bio(bio)));
+ set_bio_mutable_buffer_view(bio, &_view);
+}
+
+MutableBufferViewGuard::~MutableBufferViewGuard() {
+ unset_bio_buffer_view(_bio);
+}
+
+}
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.h b/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.h
new file mode 100644
index 00000000000..581d43d6f29
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/direct_buffer_bio.h
@@ -0,0 +1,90 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include "openssl_typedefs.h"
+#include <openssl/bio.h>
+
+/*
+ * Custom BIO implementations which offer direct write/read only buffer
+ * access to underlying memory buffers. This removes the need to allocate
+ * separate memory BIOs into/from which data is redundantly copied.
+ *
+ * These BIOs are merely views into buffers that the user must set appropriately
+ * before invoking OpenSSL functions that invoke them. The ability to set buffers
+ * is only available via scoped guards that cannot be copied or moved.
+ *
+ * Since no buffer allocation is ever done by these BIOs, it is the responsibility
+ * of the caller to provide sufficiently large buffers that OpenSSL operations can
+ * make progress.
+ *
+ * The BIOs ensure that OpenSSL cannot write to read-only buffers and vice versa.
+ */
+
+namespace vespalib::net::tls::impl {
+
+BioPtr new_mutable_direct_buffer_bio();
+BioPtr new_const_direct_buffer_bio();
+
+struct MutableBufferView {
+ // Could use a pointer pair instead (or just modify the ptr), but being explicit is good for readability.
+ char* buffer;
+ size_t size;
+ size_t pos;
+ size_t rpos;
+
+ // Pending means "how much is written"
+ size_t pending() const noexcept {
+ return pos;
+ }
+};
+
+struct ConstBufferView {
+ const char* buffer;
+ size_t size;
+ size_t pos;
+
+ // Pending means "how much is left to read"
+ size_t pending() const noexcept {
+ return size - pos;
+ }
+};
+
+class ConstBufferViewGuard {
+ ::BIO& _bio;
+ ConstBufferView _view;
+public:
+ // Important: buffer view pointer and the buffer it points to MUST be
+ // valid until unset_bio_buffer_view is called! Exception to the latter is
+ // if the data buffer length is 0 AND the data buffer pointer is nullptr.
+ // Precondition: bio must have been created by a call to new_const_direct_buffer_bio()
+ ConstBufferViewGuard(::BIO& bio, const char* buffer, size_t sz) noexcept;
+ ~ConstBufferViewGuard();
+
+ // The current active buffer view has a reference into our own struct, so
+ // we cannot allow that pointer to be invalidated by copies or moves.
+ ConstBufferViewGuard(const ConstBufferViewGuard&) = delete;
+ ConstBufferViewGuard& operator=(const ConstBufferViewGuard&) = delete;
+ ConstBufferViewGuard(ConstBufferViewGuard&&) = delete;
+ ConstBufferViewGuard& operator=(ConstBufferViewGuard&&) = delete;
+};
+
+class MutableBufferViewGuard {
+ ::BIO& _bio;
+ MutableBufferView _view;
+public:
+ // Important: buffer view pointer and the buffer it points to MUST be
+ // valid until unset_bio_buffer_view is called! Exception to the latter is
+ // if the data buffer length is 0 AND the data buffer pointer is nullptr.
+ // Precondition: bio must have been created by a call to new_mutable_direct_buffer_bio()
+ MutableBufferViewGuard(::BIO& bio, char* buffer, size_t sz) noexcept;
+ ~MutableBufferViewGuard();
+
+ // The current active buffer view has a reference into our own struct, so
+ // we cannot allow that pointer to be invalidated by copies or moves.
+ MutableBufferViewGuard(const MutableBufferViewGuard&) = delete;
+ MutableBufferViewGuard& operator=(const MutableBufferViewGuard&) = delete;
+ MutableBufferViewGuard(MutableBufferViewGuard&&) = delete;
+ MutableBufferViewGuard& operator=(MutableBufferViewGuard&&) = delete;
+};
+
+}
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
index a563a43baac..15db0128f1e 100644
--- a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.cpp
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "openssl_crypto_codec_impl.h"
#include "openssl_tls_context_impl.h"
+#include "direct_buffer_bio.h"
#include <vespa/vespalib/net/tls/crypto_codec.h>
#include <vespa/vespalib/net/tls/crypto_exception.h>
#include <mutex>
@@ -80,10 +81,6 @@ HandshakeResult handshake_consumed_bytes_and_needs_more_peer_data(size_t consume
return {consumed, 0, HandshakeResult::State::NeedsMorePeerData};
}
-HandshakeResult handshake_produced_bytes_and_needs_more_peer_data(size_t produced) noexcept {
- return {0, produced, HandshakeResult::State::NeedsMorePeerData};
-}
-
HandshakeResult handshake_consumed_bytes_and_is_complete(size_t consumed) noexcept {
return {consumed, 0, HandshakeResult::State::Done};
}
@@ -124,15 +121,28 @@ DecodeResult decoded_bytes(size_t consumed, size_t produced, DecodeResult::State
return {consumed, produced, state};
}
-BioPtr new_tls_frame_memory_bio() {
- BioPtr bio(::BIO_new(BIO_s_mem()));
+BioPtr new_tls_frame_mutable_memory_bio() {
+ BioPtr bio(new_mutable_direct_buffer_bio());
+ if (!bio) {
+ throw CryptoException("new_mutable_direct_buffer_bio() failed; out of memory?");
+ }
+ return bio;
+}
+
+BioPtr new_tls_frame_const_memory_bio() {
+ BioPtr bio(new_const_direct_buffer_bio());
if (!bio) {
- throw CryptoException("IO_new(BIO_s_mem()) failed; out of memory?");
+ throw CryptoException("new_const_direct_buffer_bio() failed; out of memory?");
}
- BIO_set_write_buf_size(bio.get(), 0); // 0 ==> default max frame size
return bio;
}
+vespalib::string ssl_error_from_stack() {
+ char buf[256];
+ ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
+ return vespalib::string(buf);
+}
+
} // anon ns
OpenSslCryptoCodecImpl::OpenSslCryptoCodecImpl(::SSL_CTX& ctx, Mode mode)
@@ -148,10 +158,6 @@ OpenSslCryptoCodecImpl::OpenSslCryptoCodecImpl(::SSL_CTX& ctx, Mode mode)
* a bit more straight forward to implement a full duplex API with two
* separate BIOs, but there is little available documentation as to the
* 'hows' and 'whys' around this.
- * There are claims from core OpenSSL devs[0] that BIO pairs are more efficient,
- * so we may reconsider the current approach (or just use the "OpenSSL controls
- * the file descriptor" yolo approach for simplicity, assuming they do optimal
- * stuff internally).
*
* Our BIOs are used as follows:
*
@@ -167,14 +173,16 @@ OpenSslCryptoCodecImpl::OpenSslCryptoCodecImpl(::SSL_CTX& ctx, Mode mode)
* encode() : SSL_write(plaintext) --(_output_bio ciphertext)--> BIO_read --> [peer]
* decode() : SSL_read(plaintext) <--(_input_bio ciphertext)-- BIO_write <-- [peer]
*
- * To avoid blowing the sizes of BIOs out of the water, we do our best to encode and decode
- * on a per-TLS frame granularity (16K) maximum.
*/
- BioPtr tmp_input_bio = new_tls_frame_memory_bio();
- BioPtr tmp_output_bio = new_tls_frame_memory_bio();
- // Connect BIOs used internally by OpenSSL. This transfers ownership. No return value to check.
- // TODO replace with explicit SSL_set0_rbio/SSL_set0_wbio on OpenSSL >= v1.1
+ BioPtr tmp_input_bio = new_tls_frame_const_memory_bio();
+ BioPtr tmp_output_bio = new_tls_frame_mutable_memory_bio();
+ // Connect BIOs used internally by OpenSSL. This transfers ownership. No return values to check.
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+ ::SSL_set0_rbio(_ssl.get(), tmp_input_bio.get());
+ ::SSL_set0_wbio(_ssl.get(), tmp_output_bio.get());
+#else
::SSL_set_bio(_ssl.get(), tmp_input_bio.get(), tmp_output_bio.get());
+#endif
_input_bio = tmp_input_bio.release();
_output_bio = tmp_output_bio.release();
if (_mode == Mode::Client) {
@@ -186,22 +194,6 @@ OpenSslCryptoCodecImpl::OpenSslCryptoCodecImpl(::SSL_CTX& ctx, Mode mode)
// TODO remove spammy logging once code is stable
-// Produces bytes previously written to _output_bio by SSL_do_handshake or SSL_write
-int OpenSslCryptoCodecImpl::drain_outgoing_network_bytes_if_any(
- char *to_peer, size_t to_peer_buf_size) noexcept {
- int out_pending = BIO_pending(_output_bio);
- if (out_pending > 0) {
- int copied = ::BIO_read(_output_bio, to_peer, static_cast<int>(to_peer_buf_size));
- // TODO BIO_should_retry here? Semantics are unclear, especially for memory BIOs.
- LOG(spam, "BIO_read copied out %d bytes of ciphertext from _output_bio", copied);
- if (copied < 0) {
- LOG(error, "Memory BIO_read() failed with BIO_pending() > 0");
- }
- return copied;
- }
- return out_pending;
-}
-
HandshakeResult OpenSslCryptoCodecImpl::handshake(const char* from_peer, size_t from_peer_buf_size,
char* to_peer, size_t to_peer_buf_size) noexcept {
LOG_ASSERT(verify_buf(from_peer, from_peer_buf_size) && verify_buf(to_peer, to_peer_buf_size));
@@ -209,75 +201,51 @@ HandshakeResult OpenSslCryptoCodecImpl::handshake(const char* from_peer, size_t
if (SSL_is_init_finished(_ssl.get())) {
return handshake_completed();
}
- // Still ciphertext data left? If so, get rid of it before we start a new operation
- // that wants to fill the output BIO.
- int produced = drain_outgoing_network_bytes_if_any(to_peer, to_peer_buf_size);
- if (produced > 0) {
- // Handshake isn't complete yet and we've got stuff to send. Need to continue handshake
- // once more data is available from the peer.
- return handshake_produced_bytes_and_needs_more_peer_data(static_cast<size_t>(produced));
- } else if (produced < 0) {
- return handshake_failed();
- }
- const auto consume_res = do_handshake_and_consume_peer_input_bytes(from_peer, from_peer_buf_size);
+ ConstBufferViewGuard const_view_guard(*_input_bio, from_peer, from_peer_buf_size);
+ MutableBufferViewGuard mut_view_guard(*_output_bio, to_peer, to_peer_buf_size);
+
+ const auto consume_res = do_handshake_and_consume_peer_input_bytes();
LOG_ASSERT(consume_res.bytes_produced == 0);
if (consume_res.failed()) {
return consume_res;
}
// SSL_do_handshake() might have produced more data to send. Note: handshake may
// be complete at this point.
- produced = drain_outgoing_network_bytes_if_any(to_peer, to_peer_buf_size);
- if (produced < 0) {
- return handshake_failed();
- }
+ int produced = BIO_pending(_output_bio);
return handshaked_bytes(consume_res.bytes_consumed, static_cast<size_t>(produced), consume_res.state);
}
-HandshakeResult OpenSslCryptoCodecImpl::do_handshake_and_consume_peer_input_bytes(
- const char *from_peer, size_t from_peer_buf_size) noexcept {
- // Feed the SSL session input in frame-sized chunks between each call to SSL_do_handshake().
- // This is primarily to ensure we don't shove unbounded amounts of data into the BIO
- // in the case that someone naughty is sending us tons of garbage over the socket.
- size_t consumed_total = 0;
- while (true) {
- // Assumption: SSL_do_handshake will place all required outgoing handshake
- // data in the output memory BIO without requiring WANT_WRITE. Freestanding
- // memory BIOs are _supposedly_ auto-resizing, so this should work transparently.
- // At the very least, if this is not the case we'll auto-fail the connection
- // and quickly find out..!
- // TODO test multi-frame sized handshake
- // TODO should we invoke ::ERR_clear_error() prior?
- int ssl_result = ::SSL_do_handshake(_ssl.get());
- ssl_result = ::SSL_get_error(_ssl.get(), ssl_result);
-
- if (ssl_result == SSL_ERROR_WANT_READ) {
- LOG(spam, "SSL_do_handshake() returned SSL_ERROR_WANT_READ");
- if (from_peer_buf_size - consumed_total > 0) {
- int consumed = ::BIO_write(_input_bio, from_peer + consumed_total,
- static_cast<int>(std::min(MaximumTlsFrameSize, from_peer_buf_size - consumed_total)));
- LOG(spam, "BIO_write copied in %d bytes of ciphertext to _input_bio", consumed);
- if (consumed < 0) {
- LOG(error, "Memory BIO_write() returned %d", consumed); // TODO BIO_need_retry?
- return handshake_failed();
- }
- consumed_total += consumed; // TODO protect against consumed == 0?
- continue;
- } else {
- return handshake_consumed_bytes_and_needs_more_peer_data(consumed_total);
- }
- } else if (ssl_result == SSL_ERROR_NONE) {
- // At this point SSL_do_handshake has stated it does not need any more peer data, i.e.
- // the handshake is complete.
- if (!SSL_is_init_finished(_ssl.get())) {
- LOG(error, "SSL handshake is not completed even though no more peer data is requested");
- return handshake_failed();
- }
- return handshake_consumed_bytes_and_is_complete(consumed_total);
- } else {
- LOG(error, "SSL_do_handshake() returned unexpected error: %s", ssl_error_to_str(ssl_result));
+HandshakeResult OpenSslCryptoCodecImpl::do_handshake_and_consume_peer_input_bytes() noexcept {
+ // Assumption: SSL_do_handshake will place all required outgoing handshake
+ // data in the output memory BIO without requiring WANT_WRITE.
+ // TODO test multi-frame sized handshake
+ const long pending_read_before = BIO_pending(_input_bio);
+
+ ::ERR_clear_error();
+ int ssl_result = ::SSL_do_handshake(_ssl.get());
+ ssl_result = ::SSL_get_error(_ssl.get(), ssl_result);
+
+ const long consumed = pending_read_before - BIO_pending(_input_bio);
+ LOG_ASSERT(consumed >= 0);
+
+ if (ssl_result == SSL_ERROR_WANT_READ) {
+ LOG(spam, "SSL_do_handshake() returned SSL_ERROR_WANT_READ");
+
+ return handshake_consumed_bytes_and_needs_more_peer_data(static_cast<size_t>(consumed));
+ } else if (ssl_result == SSL_ERROR_NONE) {
+ // At this point SSL_do_handshake has stated it does not need any more peer data, i.e.
+ // the handshake is complete.
+ if (!SSL_is_init_finished(_ssl.get())) {
+ LOG(error, "SSL handshake is not completed even though no more peer data is requested");
return handshake_failed();
}
- };
+ LOG(debug, "SSL_do_handshake() is complete, using protocol %s", SSL_get_version(_ssl.get()));
+ return handshake_consumed_bytes_and_is_complete(static_cast<size_t>(consumed));
+ } else {
+ LOG(error, "SSL_do_handshake() returned unexpected error: %s (%s)",
+ ssl_error_to_str(ssl_result), ssl_error_from_stack().c_str());
+ return handshake_failed();
+ }
}
EncodeResult OpenSslCryptoCodecImpl::encode(const char* plaintext, size_t plaintext_size,
@@ -288,16 +256,21 @@ EncodeResult OpenSslCryptoCodecImpl::encode(const char* plaintext, size_t plaint
LOG(error, "OpenSslCryptoCodecImpl::encode() called before handshake completed");
return encode_failed();
}
+
+ MutableBufferViewGuard mut_view_guard(*_output_bio, ciphertext, ciphertext_size);
+ // _input_bio not read from here.
+
size_t bytes_consumed = 0;
if (plaintext_size != 0) {
+ ::ERR_clear_error();
int to_consume = static_cast<int>(std::min(plaintext_size, MaximumFramePlaintextSize));
// SSL_write encodes plaintext to ciphertext and writes to _output_bio
int consumed = ::SSL_write(_ssl.get(), plaintext, to_consume);
- LOG(spam, "After SSL_write() -> %d, _input_bio pending=%d, _output_bio pending=%d",
- consumed, BIO_pending(_input_bio), BIO_pending(_output_bio));
+ LOG(spam, "After SSL_write() -> %d _output_bio pending=%d", consumed, BIO_pending(_output_bio));
if (consumed < 0) {
int ssl_error = ::SSL_get_error(_ssl.get(), consumed);
- LOG(error, "SSL_write() failed to write frame, got error %s", ssl_error_to_str(ssl_error));
+ LOG(error, "SSL_write() failed to write frame, got error %s (%s)",
+ ssl_error_to_str(ssl_error), ssl_error_from_stack().c_str());
// TODO explicitly detect and log TLS renegotiation error (SSL_ERROR_WANT_READ)?
return encode_failed();
} else if (consumed != to_consume) {
@@ -306,15 +279,7 @@ EncodeResult OpenSslCryptoCodecImpl::encode(const char* plaintext, size_t plaint
}
bytes_consumed = static_cast<size_t>(consumed);
}
-
- int produced = drain_outgoing_network_bytes_if_any(ciphertext, ciphertext_size);
- if (produced < 0) {
- return encode_failed();
- }
- if (BIO_pending(_output_bio) != 0) {
- LOG(error, "Residual data left in output BIO on encode(); provided buffer is too small");
- return encode_failed();
- }
+ int produced = BIO_pending(_output_bio);
return encoded_bytes(bytes_consumed, static_cast<size_t>(produced));
}
DecodeResult OpenSslCryptoCodecImpl::decode(const char* ciphertext, size_t ciphertext_size,
@@ -325,57 +290,49 @@ DecodeResult OpenSslCryptoCodecImpl::decode(const char* ciphertext, size_t ciphe
LOG(error, "OpenSslCryptoCodecImpl::decode() called before handshake completed");
return decode_failed();
}
+ ConstBufferViewGuard const_view_guard(*_input_bio, ciphertext, ciphertext_size);
+ // _output_bio not written to here
+
+ const int input_pending_before = BIO_pending(_input_bio);
auto produce_res = drain_and_produce_plaintext_from_ssl(plaintext, static_cast<int>(plaintext_size));
- if ((produce_res.bytes_produced > 0) || produce_res.failed()) {
- return produce_res; // TODO gRPC [1] handles this differently... allows fallthrough
- }
- int consumed = consume_peer_input_bytes(ciphertext, ciphertext_size);
- if (consumed < 0) {
- return decode_failed();
- }
- produce_res = drain_and_produce_plaintext_from_ssl(plaintext, static_cast<int>(plaintext_size));
+ const int input_pending_after = BIO_pending(_input_bio);
+
+ LOG_ASSERT(input_pending_before >= input_pending_after);
+ const int consumed = input_pending_before - input_pending_after;
+ LOG(spam, "decode: consumed %d bytes (ciphertext buffer %d -> %d bytes), produced %zu bytes. Need read: %s",
+ consumed, input_pending_before, input_pending_after, produce_res.bytes_produced,
+ (produce_res.state == DecodeResult::State::NeedsMorePeerData) ? "yes" : "no");
return decoded_bytes(static_cast<size_t>(consumed), produce_res.bytes_produced, produce_res.state);
}
DecodeResult OpenSslCryptoCodecImpl::drain_and_produce_plaintext_from_ssl(
char* plaintext, size_t plaintext_size) noexcept {
+ ::ERR_clear_error();
// SSL_read() is named a bit confusingly. We read _from_ the SSL-internal state
// via the input BIO _into_ to the receiving plaintext buffer.
// This may consume the entire, parts of, or none of the input BIO's data,
// depending on how much TLS frame data is available and its size relative
// to the receiving plaintext buffer.
int produced = ::SSL_read(_ssl.get(), plaintext, static_cast<int>(plaintext_size));
- LOG(spam, "After SSL_read() -> %d, _input_bio pending=%d, _output_bio pending=%d",
- produced, BIO_pending(_input_bio), BIO_pending(_output_bio));
if (produced > 0) {
// At least 1 frame decoded successfully.
return decoded_frames_with_plaintext_bytes(static_cast<size_t>(produced));
} else {
int ssl_error = ::SSL_get_error(_ssl.get(), produced);
switch (ssl_error) {
- case SSL_ERROR_WANT_READ:
- // SSL_read() was not able to decode a full frame with the ciphertext that
- // we've fed it thus far; caller must feed it some and then try again.
- LOG(spam, "SSL_read() returned SSL_ERROR_WANT_READ, must get more ciphertext");
- return decode_needs_more_peer_data();
- default:
- LOG(error, "SSL_read() returned unexpected error: %s", ssl_error_to_str(ssl_error));
- return decode_failed();
+ case SSL_ERROR_WANT_READ:
+ // SSL_read() was not able to decode a full frame with the ciphertext that
+ // we've fed it thus far; caller must feed it some and then try again.
+ LOG(spam, "SSL_read() returned SSL_ERROR_WANT_READ, must get more ciphertext");
+ return decode_needs_more_peer_data();
+ default:
+ LOG(error, "SSL_read() returned unexpected error: %s (%s)",
+ ssl_error_to_str(ssl_error), ssl_error_from_stack().c_str());
+ return decode_failed();
}
}
}
-int OpenSslCryptoCodecImpl::consume_peer_input_bytes(
- const char* ciphertext, size_t ciphertext_size) noexcept {
- // TODO BIO_need_retry on failure? Can this even happen for memory BIOs?
- int consumed = ::BIO_write(_input_bio, ciphertext, static_cast<int>(std::min(MaximumTlsFrameSize, ciphertext_size)));
- LOG(spam, "BIO_write copied in %d bytes of ciphertext to _input_bio", consumed);
- if (consumed < 0) {
- LOG(error, "Memory BIO_write() returned %d", consumed);
- }
- return consumed;
-}
-
}
// External references:
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h
index 44ca8859596..53693dd7f40 100644
--- a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_crypto_codec_impl.h
@@ -11,10 +11,8 @@ namespace vespalib::net::tls { class TlsContext; }
namespace vespalib::net::tls::impl {
/*
- * Frame-level OpenSSL-backed TLSv1.2 crypto codec implementation.
- *
- * Currently has sub-optimal buffer management, and is mostly intended
- * as a starting point.
+ * Frame-level OpenSSL-backed TLSv1.2/TLSv1.3 (depending on OpenSSL version)
+ * crypto codec implementation.
*
* NOT thread safe per instance, but independent instances may be
* used by different threads safely.
@@ -55,21 +53,7 @@ public:
DecodeResult decode(const char* ciphertext, size_t ciphertext_size,
char* plaintext, size_t plaintext_size) noexcept override;
private:
- /*
- * Returns
- * n > 0 if n bytes written to `to_peer`. Always <= to_peer_buf_size
- * n == 0 if no bytes pending in output BIO
- * n < 0 on error
- */
- int drain_outgoing_network_bytes_if_any(char *to_peer, size_t to_peer_buf_size) noexcept;
- /*
- * Returns
- * n > 0 if n bytes written to `ciphertext`. Always <= ciphertext_size
- * n == 0 if no bytes pending in input BIO
- * n < 0 on error
- */
- int consume_peer_input_bytes(const char* ciphertext, size_t ciphertext_size) noexcept;
- HandshakeResult do_handshake_and_consume_peer_input_bytes(const char *from_peer, size_t from_peer_buf_size) noexcept;
+ HandshakeResult do_handshake_and_consume_peer_input_bytes() noexcept;
DecodeResult drain_and_produce_plaintext_from_ssl(char* plaintext, size_t plaintext_size) noexcept;
};
diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp
index 27250dd43fc..050fd2be7e5 100644
--- a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp
@@ -3,6 +3,7 @@
#include "openssl_tls_context_impl.h"
#include <vespa/vespalib/net/tls/crypto_exception.h>
#include <vespa/vespalib/net/tls/transport_security_options.h>
+#include <vespa/vespalib/util/stringfmt.h>
#include <mutex>
#include <vector>
#include <memory>
@@ -99,6 +100,21 @@ BioPtr bio_from_string(vespalib::stringref str) {
return bio;
}
+bool has_pem_eof_on_stack() {
+ const auto err = ERR_peek_last_error();
+ if (!err) {
+ return false;
+ }
+ return ((ERR_GET_LIB(err) == ERR_LIB_PEM)
+ && (ERR_GET_REASON(err) == PEM_R_NO_START_LINE));
+}
+
+vespalib::string ssl_error_from_stack() {
+ char buf[256];
+ ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
+ return vespalib::string(buf);
+}
+
// Several OpenSSL functions take a magical user passphrase argument with
// potentially horrible default behavior for password protected input.
//
@@ -117,14 +133,28 @@ constexpr inline void *empty_passphrase() {
return const_cast<void *>(static_cast<const void *>(""));
}
+void verify_pem_ok_or_eof(::X509* x509) {
+ // It's OK if we don't have an X509 cert returned iff we failed to find
+ // something that looks like the start of a PEM entry. This is to catch
+ // cases where the PEM itself is malformed, since the X509 read routines
+ // just return either nullptr or a cert object, making it hard to debug.
+ if (!x509 && !has_pem_eof_on_stack()) {
+ throw CryptoException(make_string("Failed to add X509 certificate from PEM: %s",
+ ssl_error_from_stack().c_str()));
+ }
+}
+
// Attempt to read a PEM encoded (trusted) certificate from the given BIO.
// BIO might contain further certificates if function returns non-nullptr.
// Returns nullptr if no certificate could be loaded. This is usually an error,
// as this should be the first certificate in the chain.
X509Ptr read_trusted_x509_from_bio(::BIO& bio) {
+ ::ERR_clear_error();
// "_AUX" means the certificate is trusted. Why they couldn't name this function
// something with "trusted" instead is left as an exercise to the reader.
- return X509Ptr(::PEM_read_bio_X509_AUX(&bio, nullptr, nullptr, empty_passphrase()));
+ X509Ptr x509(::PEM_read_bio_X509_AUX(&bio, nullptr, nullptr, empty_passphrase()));
+ verify_pem_ok_or_eof(x509.get());
+ return x509;
}
// Attempt to read a PEM encoded certificate from the given BIO.
@@ -132,7 +162,10 @@ X509Ptr read_trusted_x509_from_bio(::BIO& bio) {
// Returns nullptr if no certificate could be loaded. This usually implies
// that there are no more certificates left in the chain.
X509Ptr read_untrusted_x509_from_bio(::BIO& bio) {
- return X509Ptr(::PEM_read_bio_X509(&bio, nullptr, nullptr, empty_passphrase()));
+ ::ERR_clear_error();
+ X509Ptr x509(::PEM_read_bio_X509(&bio, nullptr, nullptr, empty_passphrase()));
+ verify_pem_ok_or_eof(x509.get());
+ return x509;
}
SslCtxPtr new_tls_ctx_with_auto_init() {
@@ -157,9 +190,11 @@ OpenSslTlsContextImpl::OpenSslTlsContextImpl(const TransportSecurityOptions& ts_
throw CryptoException("Failed to create new TLS context");
}
add_certificate_authorities(ts_opts.ca_certs_pem());
- add_certificate_chain(ts_opts.cert_chain_pem());
- use_private_key(ts_opts.private_key_pem());
- verify_private_key();
+ if (!ts_opts.cert_chain_pem().empty() && !ts_opts.private_key_pem().empty()) {
+ add_certificate_chain(ts_opts.cert_chain_pem());
+ use_private_key(ts_opts.private_key_pem());
+ verify_private_key();
+ }
enable_ephemeral_key_exchange();
disable_compression();
enforce_peer_certificate_verification();
@@ -170,7 +205,6 @@ OpenSslTlsContextImpl::OpenSslTlsContextImpl(const TransportSecurityOptions& ts_
OpenSslTlsContextImpl::~OpenSslTlsContextImpl() = default;
void OpenSslTlsContextImpl::add_certificate_authorities(vespalib::stringref ca_pem) {
- // TODO support empty CA set...? Ever useful?
auto bio = bio_from_string(ca_pem);
::X509_STORE* cert_store = ::SSL_CTX_get_cert_store(_ctx.get()); // Internal pointer, not owned by us.
while (true) {
@@ -185,7 +219,6 @@ void OpenSslTlsContextImpl::add_certificate_authorities(vespalib::stringref ca_p
}
void OpenSslTlsContextImpl::add_certificate_chain(vespalib::stringref chain_pem) {
- ::ERR_clear_error();
auto bio = bio_from_string(chain_pem);
// First certificate in the chain is the node's own (trusted) certificate.
auto own_cert = read_trusted_x509_from_bio(*bio);
@@ -201,9 +234,7 @@ void OpenSslTlsContextImpl::add_certificate_chain(vespalib::stringref chain_pem)
while (true) {
auto ca_cert = read_untrusted_x509_from_bio(*bio);
if (!ca_cert) {
- // No more certificates in chain, hooray!
- ::ERR_clear_error();
- break;
+ break; // No more certificates in chain, hooray!
}
// Ownership of certificate _is_ transferred here!
if (!::SSL_CTX_add_extra_chain_cert(_ctx.get(), ca_cert.release())) {
diff --git a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.cpp
new file mode 100644
index 00000000000..891f8cdab23
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.cpp
@@ -0,0 +1,20 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "maybe_tls_crypto_engine.h"
+#include "maybe_tls_crypto_socket.h"
+
+namespace vespalib {
+
+CryptoSocket::UP
+MaybeTlsCryptoEngine::create_crypto_socket(SocketHandle socket, bool is_server)
+{
+ if (is_server) {
+ return std::make_unique<MaybeTlsCryptoSocket>(std::move(socket), _tls_engine);
+ } else if (_use_tls_when_client) {
+ return _tls_engine->create_crypto_socket(std::move(socket), false);
+ } else {
+ return _null_engine->create_crypto_socket(std::move(socket), false);
+ }
+}
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.h b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.h
new file mode 100644
index 00000000000..8e76460231c
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_engine.h
@@ -0,0 +1,34 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <memory>
+#include "tls_crypto_engine.h"
+#include <vespa/vespalib/net/crypto_engine.h>
+
+namespace vespalib {
+
+/**
+ * A crypto engine that supports both tls encrypted connections and
+ * unencrypted connections. The use of tls for incoming connections is
+ * auto-detected using clever heuristics. The use of tls for outgoing
+ * connections is controlled by the use_tls_when_client flag given to
+ * the constructor.
+ **/
+class MaybeTlsCryptoEngine : public CryptoEngine
+{
+private:
+ std::shared_ptr<NullCryptoEngine> _null_engine;
+ std::shared_ptr<TlsCryptoEngine> _tls_engine;
+ bool _use_tls_when_client;
+
+public:
+ MaybeTlsCryptoEngine(std::shared_ptr<TlsCryptoEngine> tls_engine,
+ bool use_tls_when_client)
+ : _null_engine(std::make_shared<NullCryptoEngine>()),
+ _tls_engine(std::move(tls_engine)),
+ _use_tls_when_client(use_tls_when_client) {}
+ CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override;
+};
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp
new file mode 100644
index 00000000000..1e8fbce13eb
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp
@@ -0,0 +1,90 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "maybe_tls_crypto_socket.h"
+#include "tls_crypto_socket.h"
+#include "protocol_snooping.h"
+#include <vespa/vespalib/data/smart_buffer.h>
+
+namespace vespalib {
+
+namespace {
+
+class MyCryptoSocket : public CryptoSocket
+{
+private:
+ static constexpr size_t SNOOP_SIZE = net::tls::snooping::min_header_bytes_to_observe();
+
+ CryptoSocket::UP &_self;
+ SocketHandle _socket;
+ std::shared_ptr<TlsCryptoEngine> _factory;
+ SmartBuffer _buffer;
+
+ bool is_blocked(ssize_t res, int error) const {
+ return ((res < 0) && ((error == EWOULDBLOCK) || (error == EAGAIN)));
+ }
+
+ bool looksLikeTlsToMe(const char *buf) {
+ return (net::tls::snooping::snoop_client_hello_header(buf) == net::tls::snooping::TlsSnoopingResult::ProbablyTls);
+ }
+
+public:
+ MyCryptoSocket(CryptoSocket::UP &self, SocketHandle socket, std::shared_ptr<TlsCryptoEngine> tls_engine)
+ : _self(self), _socket(std::move(socket)), _factory(std::move(tls_engine)), _buffer(4096)
+ {
+ static_assert(SNOOP_SIZE == 8);
+ }
+ int get_fd() const override { return _socket.get(); }
+ HandshakeResult handshake() override {
+ if (_factory) {
+ auto dst = _buffer.reserve(SNOOP_SIZE);
+ ssize_t res = _socket.read(dst.data, dst.size);
+ if (res > 0) {
+ _buffer.commit(res);
+ } else if (!is_blocked(res, errno)) {
+ return HandshakeResult::FAIL;
+ }
+ auto src = _buffer.obtain();
+ if (src.size < SNOOP_SIZE) {
+ return HandshakeResult::NEED_READ;
+ }
+ if (looksLikeTlsToMe(src.data)) {
+ CryptoSocket::UP &self = _self; // need copy due to self destruction
+ auto tls_socket = _factory->create_tls_crypto_socket(std::move(_socket), true);
+ tls_socket->inject_read_data(src.data, src.size);
+ self = std::move(tls_socket);
+ return self->handshake();
+ } else {
+ _factory.reset();
+ }
+ }
+ return HandshakeResult::DONE;
+ }
+ size_t min_read_buffer_size() const override { return 1; }
+ ssize_t read(char *buf, size_t len) override {
+ int drain_result = drain(buf, len);
+ if (drain_result != 0) {
+ return drain_result;
+ }
+ return _socket.read(buf, len);
+ }
+ ssize_t drain(char *buf, size_t len) override {
+ auto src = _buffer.obtain();
+ size_t frame = std::min(len, src.size);
+ if (frame > 0) {
+ memcpy(buf, src.data, frame);
+ _buffer.evict(frame);
+ }
+ return frame;
+ }
+ ssize_t write(const char *buf, size_t len) override { return _socket.write(buf, len); }
+ ssize_t flush() override { return 0; }
+};
+
+} // namespace vespalib::<unnamed>
+
+MaybeTlsCryptoSocket::MaybeTlsCryptoSocket(SocketHandle socket, std::shared_ptr<TlsCryptoEngine> tls_engine)
+ : _socket(std::make_unique<MyCryptoSocket>(_socket, std::move(socket), std::move(tls_engine)))
+{
+}
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.h b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.h
new file mode 100644
index 00000000000..3c7963cc948
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.h
@@ -0,0 +1,35 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <memory>
+#include <vespa/vespalib/net/crypto_socket.h>
+#include <vespa/vespalib/net/socket_handle.h>
+#include "tls_crypto_engine.h"
+
+namespace vespalib {
+
+/**
+ * A crypto socket for the server side of a connection that
+ * auto-detects whether the connection is tls encrypted or unencrypted
+ * using clever heuristics. The assumption is that the client side
+ * will send at least 8 bytes of data before expecting anything from
+ * the server. These 8 bytes are inspected to see if they look like
+ * part of a tls handshake or not.
+ **/
+class MaybeTlsCryptoSocket : public CryptoSocket
+{
+private:
+ CryptoSocket::UP _socket;
+public:
+ MaybeTlsCryptoSocket(SocketHandle socket, std::shared_ptr<TlsCryptoEngine> tls_engine);
+ int get_fd() const override { return _socket->get_fd(); }
+ HandshakeResult handshake() override { return _socket->handshake(); }
+ size_t min_read_buffer_size() const override { return _socket->min_read_buffer_size(); }
+ ssize_t read(char *buf, size_t len) override { return _socket->read(buf, len); }
+ ssize_t drain(char *buf, size_t len) override { return _socket->drain(buf, len); }
+ ssize_t write(const char *buf, size_t len) override { return _socket->write(buf, len); }
+ ssize_t flush() override { return _socket->flush(); }
+};
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.cpp b/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.cpp
new file mode 100644
index 00000000000..6ccfc7f27ac
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.cpp
@@ -0,0 +1,127 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include "protocol_snooping.h"
+#include <iostream>
+#include <cstdlib>
+#include <stdint.h>
+
+namespace vespalib::net::tls::snooping {
+
+namespace {
+
+// Precondition for all helper functions: buffer is at least `min_header_bytes_to_observe()` bytes long
+
+// From RFC 5246:
+// 0x16 - Handshake content type byte of TLSCiphertext record
+inline bool is_tls_handshake_packet(const char* buf) {
+ return (buf[0] == 0x16);
+}
+
+// First byte of 2-byte ProtocolVersion, always 3 on TLSv1.2 and v1.3
+// Next is the TLS minor version, either 1 or 3 depending on version (though the
+// RFCs say it _should_ be 1 for backwards compatibility reasons).
+// Yes, the TLS spec says that you should technically ignore the protocol version
+// field here, but we want all the signals we can get.
+inline bool is_expected_tls_protocol_version(const char* buf) {
+ return ((buf[1] == 0x03) && ((buf[2] == 0x01) || (buf[2] == 0x03)));
+}
+
+// Length is big endian u16 in bytes 3, 4
+inline uint16_t tls_record_length(const char* buf) {
+ return (uint16_t(static_cast<unsigned char>(buf[3]) << 8)
+ + static_cast<unsigned char>(buf[4]));
+}
+
+// First byte of Handshake record in byte 5, which shall be ClientHello (0x01)
+inline bool is_client_hello_handshake_record(const char* buf) {
+ return (buf[5] == 0x01);
+}
+
+// Last 2 bytes are the 2 first big-endian bytes of a 3-byte Handshake
+// record length field. No support for records that are large enough that
+// the MSB should ever be non-zero.
+inline bool client_hello_record_size_within_expected_bounds(const char* buf) {
+ return (buf[6] == 0x00);
+}
+
+// The byte after the MSB of the 24-bit handshake record size should be equal
+// to the most significant byte of the record length value, minus the Handshake
+// record header size.
+// Again, we make the assumption that ClientHello messages are not fragmented,
+// so their max size must be <= 16KiB. This also just happens to be a lower
+// number than the minimum FS4/FRT packet type byte at the same location.
+// Oooh yeah, leaky abstractions to the rescue!
+inline bool handshake_record_size_matches_length(const char* buf, uint16_t length) {
+ return (static_cast<unsigned char>(buf[7]) == ((length - 4) >> 8));
+}
+
+} // anon ns
+
+TlsSnoopingResult snoop_client_hello_header(const char* buf) noexcept {
+ if (!is_tls_handshake_packet(buf)) {
+ return TlsSnoopingResult::HandshakeMismatch;
+ }
+ if (!is_expected_tls_protocol_version(buf)) {
+ return TlsSnoopingResult::ProtocolVersionMismatch;
+ }
+ // Length of TLS record follows. Must be <= 16KiB + 2048 (16KiB + 256 on v1.3).
+ // We expect that the first record contains _only_ a ClientHello with no coalescing
+ // and no fragmentation. This is technically a violation of the TLS spec, but this
+ // particular detection logic is only intended to be used against other Vespa nodes
+ // where we control frame sizes and where such fragmentation should not take place.
+ // We also do not support TLSv1.3 0-RTT which may trigger early data.
+ uint16_t length = tls_record_length(buf);
+ if ((length < 4) || (length > (16384 + 2048))) {
+ return TlsSnoopingResult::RecordSizeRfcViolation;
+ }
+ if (!is_client_hello_handshake_record(buf)) {
+ return TlsSnoopingResult::RecordNotClientHello;
+ }
+ if (!client_hello_record_size_within_expected_bounds(buf)) {
+ return TlsSnoopingResult::ClientHelloRecordTooBig;
+ }
+ if (!handshake_record_size_matches_length(buf, length)) {
+ return TlsSnoopingResult::ExpectedRecordSizeMismatch;
+ }
+ // Hooray! It very probably most likely is a TLS connection! :D
+ return TlsSnoopingResult::ProbablyTls;
+}
+
+const char* to_string(TlsSnoopingResult result) noexcept {
+ switch (result) {
+ case TlsSnoopingResult::ProbablyTls: return "ProbablyTls";
+ case TlsSnoopingResult::HandshakeMismatch: return "HandshakeMismatch";
+ case TlsSnoopingResult::ProtocolVersionMismatch: return "ProtocolVersionMismatch";
+ case TlsSnoopingResult::RecordSizeRfcViolation: return "RecordSizeRfcViolation";
+ case TlsSnoopingResult::RecordNotClientHello: return "RecordNotClientHello";
+ case TlsSnoopingResult::ClientHelloRecordTooBig: return "ClientHelloRecordTooBig";
+ case TlsSnoopingResult::ExpectedRecordSizeMismatch: return "ExpectedRecordSizeMismatch";
+ }
+ abort();
+}
+
+std::ostream& operator<<(std::ostream& os, TlsSnoopingResult result) {
+ os << to_string(result);
+ return os;
+}
+
+const char* describe_result(TlsSnoopingResult result) noexcept {
+ switch (result) {
+ case TlsSnoopingResult::ProbablyTls:
+ return "client data matches TLS heuristics, very likely a TLS connection";
+ case TlsSnoopingResult::HandshakeMismatch:
+ return "not a TLS handshake packet";
+ case TlsSnoopingResult::ProtocolVersionMismatch:
+ return "ProtocolVersion mismatch";
+ case TlsSnoopingResult::RecordSizeRfcViolation:
+ return "ClientHello record size is greater than RFC allows";
+ case TlsSnoopingResult::RecordNotClientHello:
+ return "record is not ClientHello";
+ case TlsSnoopingResult::ClientHelloRecordTooBig:
+ return "ClientHello record is too big (fragmented?)";
+ case TlsSnoopingResult::ExpectedRecordSizeMismatch:
+ return "ClientHello vs Handshake header record size mismatch";
+ }
+ abort();
+}
+
+}
diff --git a/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.h b/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.h
new file mode 100644
index 00000000000..f53e136e597
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/protocol_snooping.h
@@ -0,0 +1,32 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include <iosfwd>
+#include <stddef.h>
+
+namespace vespalib::net::tls::snooping {
+
+constexpr inline size_t min_header_bytes_to_observe() { return 8; }
+
+enum class TlsSnoopingResult {
+ ProbablyTls, // Very safe to assume TLSv1.x client
+ HandshakeMismatch, // Almost guaranteed to trigger for plaintext RPC
+ ProtocolVersionMismatch,
+ RecordSizeRfcViolation,
+ RecordNotClientHello,
+ ClientHelloRecordTooBig,
+ ExpectedRecordSizeMismatch
+};
+
+const char* to_string(TlsSnoopingResult) noexcept;
+std::ostream& operator<<(std::ostream& os, TlsSnoopingResult);
+
+// Precondition: buf is at least `min_header_bytes_to_observe()` bytes long. This is the minimum amount
+// of bytes always sent for a packet in our existing plaintext production protocols and
+// therefore the maximum we can expect to always be present.
+// Yes, this is a pragmatic and delightfully leaky abstraction.
+TlsSnoopingResult snoop_client_hello_header(const char* buf) noexcept;
+
+const char* describe_result(TlsSnoopingResult result) noexcept;
+
+}
diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp
index 72d9eacf37c..285a53dabc5 100644
--- a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp
@@ -11,8 +11,8 @@ TlsCryptoEngine::TlsCryptoEngine(net::tls::TransportSecurityOptions tls_opts)
{
}
-CryptoSocket::UP
-TlsCryptoEngine::create_crypto_socket(SocketHandle socket, bool is_server)
+std::unique_ptr<TlsCryptoSocket>
+TlsCryptoEngine::create_tls_crypto_socket(SocketHandle socket, bool is_server)
{
auto mode = is_server ? net::tls::CryptoCodec::Mode::Server : net::tls::CryptoCodec::Mode::Client;
auto codec = net::tls::CryptoCodec::create_default_codec(*_tls_ctx, mode);
diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h
index 58fda2b3b21..b6fda7fd577 100644
--- a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h
+++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h
@@ -3,6 +3,7 @@
#pragma once
#include <vespa/vespalib/net/crypto_engine.h>
+#include "tls_crypto_socket.h"
#include "transport_security_options.h"
#include "tls_context.h"
@@ -17,7 +18,10 @@ private:
std::unique_ptr<net::tls::TlsContext> _tls_ctx;
public:
TlsCryptoEngine(net::tls::TransportSecurityOptions tls_opts);
- CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override;
+ std::unique_ptr<TlsCryptoSocket> create_tls_crypto_socket(SocketHandle socket, bool is_server);
+ CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override {
+ return create_tls_crypto_socket(std::move(socket), is_server);
+ }
};
} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.cpp b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.cpp
new file mode 100644
index 00000000000..ee93827898e
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.cpp
@@ -0,0 +1,9 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "tls_crypto_socket.h"
+
+namespace vespalib {
+
+TlsCryptoSocket::~TlsCryptoSocket() = default;
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.h b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.h
new file mode 100644
index 00000000000..c98af6ee651
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_socket.h
@@ -0,0 +1,14 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/vespalib/net/crypto_socket.h>
+
+namespace vespalib {
+
+struct TlsCryptoSocket : public CryptoSocket {
+ ~TlsCryptoSocket();
+ virtual void inject_read_data(const char *buf, size_t len) = 0;
+};
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/stllike/CMakeLists.txt b/vespalib/src/vespa/vespalib/stllike/CMakeLists.txt
index a0c0b2ec360..aaada6fdcc4 100644
--- a/vespalib/src/vespa/vespalib/stllike/CMakeLists.txt
+++ b/vespalib/src/vespa/vespalib/stllike/CMakeLists.txt
@@ -4,6 +4,7 @@ vespa_add_library(vespalib_vespalib_stllike OBJECT
asciistream.cpp
hashtable.cpp
hashtable.cpp
+ hash_fun.cpp
hash_set.cpp
hash_map.cpp
string.cpp
diff --git a/vespalib/src/vespa/vespalib/stllike/hash_fun.cpp b/vespalib/src/vespa/vespalib/stllike/hash_fun.cpp
new file mode 100644
index 00000000000..d8c6c87ecda
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/stllike/hash_fun.cpp
@@ -0,0 +1,38 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "hash_fun.h"
+
+namespace vespalib {
+
+size_t
+hashValue(const char *str)
+{
+ size_t res = 0;
+ unsigned const char *pt = (unsigned const char *) str;
+ while (*pt != 0) {
+ res = (res << 7) + (res >> 25) + *pt++;
+ }
+ return res;
+}
+
+/**
+ * @brief Calculate hash value.
+ *
+ * This is the hash function used by the HashMap class.
+ * The hash function is inherited from Fastserver4 / FastLib / pandora.
+ * @param buf input buffer
+ * @param sz input buffer size
+ * @return hash value of input
+ **/
+size_t
+hashValue(const void * buf, size_t sz)
+{
+ size_t res = 0;
+ unsigned const char *pt = (unsigned const char *) buf;
+ for (size_t i(0); i < sz; i++) {
+ res = (res << 7) + (res >> 25) + pt[i];
+ }
+ return res;
+}
+
+}
diff --git a/vespalib/src/vespa/vespalib/stllike/hash_fun.h b/vespalib/src/vespa/vespalib/stllike/hash_fun.h
index 0342ea4cc69..f708f49081e 100644
--- a/vespalib/src/vespa/vespalib/stllike/hash_fun.h
+++ b/vespalib/src/vespa/vespalib/stllike/hash_fun.h
@@ -1,8 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include <stdint.h>
#include <vespa/vespalib/stllike/string.h>
+#include <cstdint>
namespace vespalib {
@@ -59,8 +59,8 @@ template<typename T> struct hash<const T *> {
};
// reuse old string hash function
-extern size_t hashValue(const char *str);
-extern size_t hashValue(const void *str, size_t sz);
+size_t hashValue(const char *str);
+size_t hashValue(const void *str, size_t sz);
template<> struct hash<const char *> {
size_t operator() (const char * arg) const { return hashValue(arg); }
diff --git a/vespalib/src/vespa/vespalib/util/CMakeLists.txt b/vespalib/src/vespa/vespalib/util/CMakeLists.txt
index f71a5fa26e9..9ce28d62e18 100644
--- a/vespalib/src/vespa/vespalib/util/CMakeLists.txt
+++ b/vespalib/src/vespa/vespalib/util/CMakeLists.txt
@@ -22,7 +22,6 @@ vespa_add_library(vespalib_vespalib_util OBJECT
gencnt.cpp
generationhandler.cpp
generationholder.cpp
- hashmap.cpp
hdr_abort.cpp
host_name.cpp
joinable.cpp
diff --git a/vespalib/src/vespa/vespalib/util/hashmap.cpp b/vespalib/src/vespa/vespalib/util/hashmap.cpp
deleted file mode 100644
index 81bd145b76f..00000000000
--- a/vespalib/src/vespa/vespalib/util/hashmap.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-/**
- * @file hashmap.cpp
- * @brief simple hashmap implementation
- * @author H�vard Pettersen
- * @version $Id$
- * @date 2006/03/16
- **/
-
-#include "hashmap.h"
-
-namespace vespalib {
-#ifndef IAM_DOXYGEN
-
-const uint32_t HashMapData::sizeStepsSize = 30;
-uint32_t HashMapData::sizeSteps[sizeStepsSize] =
-{
- 3,
- 7,
- 13,
- 31,
- 61,
- 127,
- 251,
- 509,
- 1021,
- 2039,
- 4093,
- 8191,
- 16381,
- 32749,
- 65521,
- 131071,
- 262139,
- 524287,
- 1048573,
- 2097143,
- 4194301,
- 8388593,
- 16777213,
- 33554393,
- 67108859,
- 134217689,
- 268435399,
- 536870909,
- 1073741789,
- 2147483647
-};
-
-#endif //#ifndef IAM_DOXYGEN
-
-
-/**
- * @fn explicit HashMap<T>::HashMap(const T &empty, uint32_t minBuckets = 50)
- * @brief Constructor.
- * @param empty value used for non-existing entries
- * @param minBuckets minimum number of hash buckets
- **/
-
-/**
- * @fn HashMap<T>::~HashMap()
- * @brief Destructor.
- **/
-
-/**
- * @fn void HashMap<T>::clear()
- * @brief Remove all entries.
- **/
-
-/**
- * @fn T HashMap<T>::set(const char *key, const T &value)
- * @brief Set a value.
- *
- * The key 'key' will map to 'value'.
- * If the number of entries in the hashmap exceeds 3/5 the number of buckets,
- * the map will resize to the next bigger bucket size.
- *
- * @return old value for key if set, otherwise 'empty' from constructor
- * @param key hash key
- * @param value new value for key
- **/
-
-/**
- * @fn bool HashMap<T>::isSet(const char *key) const
- * @brief Check if a key is set.
- * @return true if the given key was set
- * @param key hash key
- **/
-
-/**
- * @fn const T &HashMap<T>::get(const char *key) const
- * @brief Get a value
- * @return the value that 'key' maps to if set,
- * otherwise 'empty' from constructor
- * @param key hash key
- **/
-
-/**
- * @fn T HashMap<T>::remove(const char *key)
- * @brief Remove a value.
- * @return old value for the given key
- * @param key hash key
- **/
-
-/**
- * @fn const T& HashMap<T>::operator[](const char *key) const
- * @brief Get a value
- * @return the value that 'key' maps to, or a copy of empty if no mapping
- * @param key hash key
- **/
-
-/**
- * @fn HashMap<T>::Iterator HashMap<T>::iterator() const
- * @brief Obtain an unsafe iterator for this hash map.
- * @return hash map iterator
- **/
-
-/**
- * @fn uint32_t HashMap<T>::size() const
- * @brief Obtain the number of entries in this map.
- * @return number of entries
- **/
-
-/**
- * @fn bool HashMap<T>::isEmpty() const
- * @brief Check for emptiness.
- * @return Whether this map is empty
- **/
-
-/**
- * @fn uint32_t HashMap<T>::buckets() const
- * @brief Obtain the number of hash buckets.
- * @return the number of hash buckets
- **/
-
-//-----------------------------------------------------------------------------
-
-/**
- * @fn HashMap<T>::Iterator::Iterator(const Iterator &src)
- * @brief Copy constructor.
- * @param src copy this
- **/
-
-/**
- * @fn HashMap<T>::Iterator& HashMap<T>::Iterator::operator=(const Iterator &src)
- * @brief Assignment.
- * @param src copy this
- **/
-
-/**
- * @fn bool HashMap<T>::Iterator::valid() const
- * @brief Check if current entry is valid.
- *
- * This method returns true until the iterator has been stepped after
- * the last entry in the hash map.
- *
- * @return true if the current entry is valid
- **/
-
-/**
- * @fn const char *HashMap<T>::Iterator::key() const
- * @brief Get current key.
- *
- * This method should only be called when the valid method returns
- * true.
- *
- * @return current key
- **/
-
-/**
- * @fn const T &HashMap<T>::Iterator::value() const
- * @brief Get current value.
- *
- * This method should only be called when the valid method returns
- * true.
- *
- * @return current value
- **/
-
-/**
- * @fn void HashMap<T>::Iterator::next()
- * @brief Step this iterator.
- *
- * This method should only be called when the valid method returns
- * true.
- **/
-
-/**
- * @brief Calculate hash value.
- *
- * This is the hash function used by the HashMap class.
- * The hash function is inherited from Fastserver4 / FastLib / pandora.
- * @param str input string, zero terminated
- * @return hash value of input
- **/
-size_t
-hashValue(const char *str)
-{
- size_t res = 0;
- unsigned const char *pt = (unsigned const char *) str;
- while (*pt != 0) {
- res = (res << 7) + (res >> 25) + *pt++;
- }
- return res;
-}
-
-/**
- * @brief Calculate hash value.
- *
- * This is the hash function used by the HashMap class.
- * The hash function is inherited from Fastserver4 / FastLib / pandora.
- * @param buf input buffer
- * @param sz input buffer size
- * @return hash value of input
- **/
-size_t
-hashValue(const void * buf, size_t sz)
-{
- size_t res = 0;
- unsigned const char *pt = (unsigned const char *) buf;
- for (size_t i(0); i < sz; i++) {
- res = (res << 7) + (res >> 25) + pt[i];
- }
- return res;
-}
-
-
-} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/util/hashmap.h b/vespalib/src/vespa/vespalib/util/hashmap.h
deleted file mode 100644
index 44db499f372..00000000000
--- a/vespalib/src/vespa/vespalib/util/hashmap.h
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "hashmapdata.h"
-#include <cstring>
-#include <cstdlib>
-#include <assert.h>
-
-/**
- * @brief namespace for generic Vespa library
- **/
-namespace vespalib {
-
-size_t hashValue(const char *str);
-size_t hashValue(const void * buf, size_t sz);
-
-/**
- * @brief Simple hash map implementation
- *
- * The type T must have normal copy semantics, and a special empty
- * value must be provided that lookup can return when no mapping exists.
- * The key is always a zero-terminated C string and key matching is done
- * via strcmp(). The hash function used on the key is vespalib::hashValue()
- * and the map will auto-resize to become bigger when enough entries have
- * been added.
- **/
-template <typename T>
-class HashMap
-{
-private:
- class HashMapKey
- {
- private:
- HashMapKey(const HashMapKey &);
- HashMapKey& operator=(const HashMapKey &);
- public:
- HashMapKey(const char *data) : _data(strdup(data)) {}
- ~HashMapKey() { free(_data); }
- bool operator== (const char *other) {
- return (strcmp(_data, other) == 0);
- }
- const char *key() { return _data; }
- private:
- char *_data;
- };
-
- struct Entry
- {
- Entry *_next;
- HashMapKey _key;
- T _value;
-
- Entry(Entry *next, const char *key, const T &value)
- : _next(next), _key(key), _value(value) {}
-
- private:
- Entry(const Entry &);
- Entry& operator=(const Entry &);
- };
-
- Entry **_table;
- uint32_t _tableSize;
- uint32_t _rehashSize;
- uint32_t _entryCnt;
- T _empty;
-
- // not defined [2]
- HashMap(const HashMap<T> &);
- HashMap<T>& operator=(const HashMap<T> &);
-
- inline uint32_t getSize(uint32_t minBuckets) const;
- Entry *lookup(const char *key) const;
-
-public:
- /**
- * @brief Iterator for HashMap class
- *
- * Note that iterators are unsafe; if the hashmap is changed
- * the iterator may refer to freed data.
- **/
- class Iterator
- {
- friend class HashMap<T>;
- private:
- typename HashMap<T>::Entry **_table;
- uint32_t _tableSize;
- uint32_t _idx;
- typename HashMap<T>::Entry *_entry;
-
- explicit Iterator(const HashMap<T> *map);
- public:
- inline Iterator(const Iterator &src);
- inline Iterator &operator=(const Iterator &src);
- inline bool valid() const { return _entry != NULL; }
- inline const char *key() const { return _entry->_key.key(); };
- inline const T &value() const { return _entry->_value; };
- inline void next();
- };
-
- friend class Iterator;
-
- explicit HashMap(const T &empty, uint32_t minBuckets = 50);
- ~HashMap();
-
- void clear();
- T set(const char *key, const T &value);
- inline bool isSet(const char *key) const;
- inline const T &get(const char *key) const;
- T remove(const char *key);
- inline const T& operator[](const char *key) const; // R-value
- inline Iterator iterator() const;
-
- uint32_t size() const { return _entryCnt; }
- bool isEmpty() const { return _entryCnt == 0; }
- uint32_t buckets() const { return _tableSize; }
- uint32_t maxDepth() const;
- uint32_t emptyBuckets() const;
-};
-
-//-----------------------------------------------------------------------------
-
-
-template <typename T>
-HashMap<T>::Iterator::Iterator(const HashMap<T> *map)
- : _table(map->_table),
- _tableSize(map->_tableSize),
- _idx(0),
- _entry(NULL)
-{
- while (_entry == NULL && _idx < _tableSize)
- _entry = _table[_idx++];
-}
-
-
-template <typename T>
-HashMap<T>::Iterator::Iterator(const Iterator &src)
- : _table(src._table),
- _tableSize(src._tableSize),
- _idx(src._idx),
- _entry(src._entry)
-{
-}
-
-
-template <typename T>
-typename HashMap<T>::Iterator &
-HashMap<T>::Iterator::operator=(const Iterator &src)
-{
- _table = src._table;
- _tableSize = src._tableSize;
- _idx = src._idx;
- _entry = src._entry;
- return *this;
-}
-
-
-template <typename T>
-void
-HashMap<T>::Iterator::next()
-{
- _entry = _entry->_next;
- while (_entry == NULL && _idx < _tableSize)
- _entry = _table[_idx++];
-}
-
-//-----------------------------------------------------------------------------
-
-template <typename T>
-uint32_t
-HashMap<T>::getSize(uint32_t minBuckets) const
-{
- for (uint32_t my_i = 0; my_i < HashMapData::sizeStepsSize; my_i++)
- if (HashMapData::sizeSteps[my_i] >= minBuckets)
- return HashMapData::sizeSteps[my_i];
- return minBuckets;
-}
-
-
-template <typename T>
-typename HashMap<T>::Entry *
-HashMap<T>::lookup(const char *key) const
-{
- uint32_t bucket = hashValue(key) % _tableSize;
- Entry *pt = _table[bucket];
- for (; pt != NULL; pt = pt->_next)
- if (pt->_key == key)
- break;
- return pt;
-}
-
-
-template <typename T>
-HashMap<T>::HashMap(const T &empty, uint32_t minBuckets)
- : _table(NULL),
- _tableSize(0),
- _rehashSize(0),
- _entryCnt(0),
- _empty(empty)
-{
- _tableSize = getSize(minBuckets);
- _rehashSize = (_tableSize * 3) / 5;
- _table = new Entry*[_tableSize];
- memset(_table, 0, _tableSize * sizeof(Entry *));
-}
-
-
-template <typename T>
-HashMap<T>::~HashMap()
-{
- clear();
- delete [] _table;
-}
-
-
-template <typename T>
-void
-HashMap<T>::clear()
-{
- for (uint32_t my_i = 0; my_i < _tableSize; my_i++) {
- while (_table[my_i] != NULL) {
- Entry *entry = _table[my_i];
- _table[my_i] = entry->_next;
- delete entry;
- }
- }
- _entryCnt = 0;
-}
-
-
-template <typename T>
-T
-HashMap<T>::set(const char *key, const T &value)
-{
- uint32_t bucket = hashValue(key) % _tableSize;
- Entry *pt = _table[bucket];
- for (; pt != NULL; pt = pt->_next)
- if (pt->_key == key)
- break;
- if (pt == NULL) {
- _table[bucket] = new Entry(_table[bucket], key, value);
- _entryCnt++;
- return _empty;
- }
- T ret = pt->_value;
- pt->_value = value;
-
- if (_entryCnt > _rehashSize &&
- _tableSize < HashMapData::sizeSteps[HashMapData::sizeStepsSize - 1])
- {
- uint32_t newsize = getSize(_tableSize+1);
- Entry ** newtable = new Entry*[newsize];
- memset(newtable, 0, newsize * sizeof(Entry *));
- for (uint32_t i = 0; i < _tableSize; i++) {
- Entry *p = _table[i];
- while (p != NULL) {
- Entry *np = p->_next;
- uint32_t newhash = hashValue(p->_key.key()) % newsize;
- // prepend entry to new hash slot
- p->_next = newtable[newhash];
- newtable[newhash] = p;
- p = np;
- }
- // chain moved to newTable
- _table[i] = NULL;
- }
- delete[] _table;
- _table = newtable;
- _tableSize = newsize;
- _rehashSize = (_tableSize * 3) / 5;
- }
-
- return ret;
-}
-
-
-template <typename T>
-bool
-HashMap<T>::isSet(const char *key) const
-{
- return (lookup(key) != NULL);
-}
-
-
-template <typename T>
-const T &
-HashMap<T>::get(const char *key) const
-{
- Entry *entry = lookup(key);
- if (entry != NULL) {
- return entry->_value;
- } else {
- return _empty;
- }
-}
-
-
-template <typename T>
-T
-HashMap<T>::remove(const char *key)
-{
- uint32_t bucket = hashValue(key) % _tableSize;
- Entry **ptpt = &(_table[bucket]);
- for (; (*ptpt) != NULL; ptpt = &((*ptpt)->_next))
- if ((*ptpt)->_key == key)
- break;
- if ((*ptpt) == NULL) {
- return _empty;
- } else {
- Entry *entry = (*ptpt);
- T ret = entry->_value;
- (*ptpt) = (*ptpt)->_next; // link out entry
- delete entry;
- _entryCnt--;
- return ret;
- }
-}
-
-
-template <typename T>
-const T &
-HashMap<T>::operator[](const char *key) const
-{
- Entry *entry = lookup(key);
- if (entry != NULL) {
- return entry->_value;
- } else {
- return _empty;
- }
-}
-
-
-template <typename T>
-typename HashMap<T>::Iterator
-HashMap<T>::iterator() const
-{
- return Iterator(this);
-}
-
-
-template <typename T>
-uint32_t
-HashMap<T>::maxDepth() const
-{
- uint32_t ret = 0;
- uint32_t cnt = 0;
- for (uint32_t i = 0; i < _tableSize; i++) {
- uint32_t d = 0;
- for (Entry *p = _table[i]; p != NULL; p = p->_next) {
- ++d;
- ++cnt;
- }
- if (d > ret) ret = d;
- }
- assert(cnt == _entryCnt);
- if (cnt != _entryCnt) abort();
- return ret;
-}
-
-
-template <typename T>
-uint32_t
-HashMap<T>::emptyBuckets() const
-{
- uint32_t ret = 0;
- for (uint32_t i = 0; i < _tableSize; i++) {
- if (_table[i] == NULL)
- ++ret;
- }
- return ret;
-}
-
-
-} // namespace vespalib
-
diff --git a/vespalib/src/vespa/vespalib/util/hashmapdata.h b/vespalib/src/vespa/vespalib/util/hashmapdata.h
deleted file mode 100644
index 9f2f65f6952..00000000000
--- a/vespalib/src/vespa/vespalib/util/hashmapdata.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include <cstdint>
-
-namespace vespalib {
-
-#ifndef IAM_DOXYGEN
-struct HashMapData
-{
- static const uint32_t sizeStepsSize;
- static uint32_t sizeSteps[];
-};
-#endif // #ifndef IAM_DOXYGEN
-
-} // namespace vespalib
-
diff --git a/vespalib/src/vespa/vespalib/util/slaveproc.h b/vespalib/src/vespa/vespalib/util/slaveproc.h
index 72b20cfb069..c08a13f0b1d 100644
--- a/vespalib/src/vespa/vespalib/util/slaveproc.h
+++ b/vespalib/src/vespa/vespalib/util/slaveproc.h
@@ -8,14 +8,9 @@
#include <queue>
#include "sync.h"
-namespace vespalib {
-
-namespace slaveproc {
-
-class Timer;
-
-} // namespace slaveproc
+namespace vespalib::slaveproc { class Timer; }
+namespace vespalib {
/**
* @brief Slave Process utility class for running external programs
*
@@ -56,12 +51,12 @@ private:
bool _failed;
int _exitCode;
- SlaveProc(const SlaveProc &); // no copy
- SlaveProc &operator=(const SlaveProc &); // no assignment
-
void checkProc();
public:
+ SlaveProc(const SlaveProc &) = delete;
+ SlaveProc &operator=(const SlaveProc &) = delete;
+
/**
* @brief Run a slave process
*